近期对CTF-PWN/RE一些反思与总结
介绍
由于最近因为疫情影响,以及最近琐碎事情特别多,所以断更了一段时间,所以最近断断续续的学了一些pwn&re的知识。不过由于电脑不在身边,以下基本都是只存在于纸面上以及一些道听途说的的理论。
个人其实之前是个很纯粹的web手平时顶多也就做做misc,这次学习基本上可以说是从0开始的。
PWN题的个人理解
pwn题一向为比赛中难度较大的题目,尤其是在动态分数的时候如果能较快的解出题目,往往可以使得分数快速的增加。但是pwn题的难度不单单体现在题型的多变,脚本编写的困难,以及各种的知识点的深度掌握,还体现在pwn题学习的时间长见效慢,学习耗时长,不易取得成果。不过只要一步一个脚印的学习,学习前人的各种漏洞利用脚本编写的思路,也是可以在相对较短的时间里取得一定的成就的。
PWN基础
c语言基础(c语言的危险函数)
操作系统架构
Python
常见工具的掌握(ida)
浅层的编译原理
常见的汇编指令
PWN challenges
栈、堆的利用
脚本的编写(pwntool使用)
保护机制的绕过(pie,nx等)
PWN+RE的形式
虚拟机保护
例题
很显然,通过read函数进行栈溢出,寻址可以使用ida也可以使用gdb动态调试
RE的个人理解
reverse题目可以看作是pwn题目的另一种利用方式,在一定层面上与pwn题目有一定的异曲同工。常见的pwn题目主要是Linux系统下的elf文件,而re题目往往是Windows下的EXE格式的文件分析。当然,这个并不绝对,因为有时候也会出现分析bin文件的题目,或者Android题目的逆向。
RE基础
汇编语言基础
c语言基础
常见工具的掌握(ida,od)
常见的算法(xor,base64/32等)
出题人自己设计的算法主要在代码中提现,有时会以一种数学游戏的形式出现,类似数独之类
RE challenges
算法的逆向分析
虚拟机的绕过
壳,花指令
动态调试查看寄存器
例题
将我们输入的东西,和v11到v34的值进行异或,最后的结果要等于v35就是”hang_dian_xin_gong_ctf!!”
总结
这段时间的学习其实更多的还是基于理论上的,或者更多的是看别人的解题过程和思路,这其实是不正确的一种方式。CTF竞赛相交于常规的其他专项竞赛,突出的一个特点就是实践性要求特别高,就如同电竞比赛一样,有时候需要一个熟能生巧。
pwn和re个人感觉相重的知识点占比是很大的,因此我一般将二者结合起来一起学习,其实这也是ctf比赛的一个普遍趋势。