介绍

由于最近因为疫情影响,以及最近琐碎事情特别多,所以断更了一段时间,所以最近断断续续的学了一些pwn&re的知识。不过由于电脑不在身边,以下基本都是只存在于纸面上以及一些道听途说的的理论。

个人其实之前是个很纯粹的web手平时顶多也就做做misc,这次学习基本上可以说是从0开始的。

PWN题的个人理解

pwn题一向为比赛中难度较大的题目,尤其是在动态分数的时候如果能较快的解出题目,往往可以使得分数快速的增加。但是pwn题的难度不单单体现在题型的多变,脚本编写的困难,以及各种的知识点的深度掌握,还体现在pwn题学习的时间长见效慢,学习耗时长,不易取得成果。不过只要一步一个脚印的学习,学习前人的各种漏洞利用脚本编写的思路,也是可以在相对较短的时间里取得一定的成就的。

PWN基础

c语言基础(c语言的危险函数)

操作系统架构

Python

常见工具的掌握(ida)

浅层的编译原理

常见的汇编指令

近期对CTF-PWN/RE一些反思与总结_系统架构

近期对CTF-PWN/RE一些反思与总结_系统架构_02

近期对CTF-PWN/RE一些反思与总结_c语言_03

近期对CTF-PWN/RE一些反思与总结_汇编指令_04

近期对CTF-PWN/RE一些反思与总结_c语言_05

近期对CTF-PWN/RE一些反思与总结_汇编指令_06

PWN challenges

栈、堆的利用

脚本的编写(pwntool使用)

保护机制的绕过(pie,nx等)

PWN+RE的形式

虚拟机保护

例题

近期对CTF-PWN/RE一些反思与总结_动态调试_07

很显然,通过read函数进行栈溢出,寻址可以使用ida也可以使用gdb动态调试

RE的个人理解

reverse题目可以看作是pwn题目的另一种利用方式,在一定层面上与pwn题目有一定的异曲同工。常见的pwn题目主要是Linux系统下的elf文件,而re题目往往是Windows下的EXE格式的文件分析。当然,这个并不绝对,因为有时候也会出现分析bin文件的题目,或者Android题目的逆向。

RE基础

汇编语言基础

c语言基础

常见工具的掌握(ida,od)

常见的算法(xor,base64/32等)

出题人自己设计的算法主要在代码中提现,有时会以一种数学游戏的形式出现,类似数独之类

RE challenges

算法的逆向分析

虚拟机的绕过

壳,花指令

动态调试查看寄存器

例题

近期对CTF-PWN/RE一些反思与总结_系统架构_08

将我们输入的东西,和v11到v34的值进行异或,最后的结果要等于v35就是”hang_dian_xin_gong_ctf!!”

总结

这段时间的学习其实更多的还是基于理论上的,或者更多的是看别人的解题过程和思路,这其实是不正确的一种方式。CTF竞赛相交于常规的其他专项竞赛,突出的一个特点就是实践性要求特别高,就如同电竞比赛一样,有时候需要一个熟能生巧。

pwn和re个人感觉相重的知识点占比是很大的,因此我一般将二者结合起来一起学习,其实这也是ctf比赛的一个普遍趋势。


A lion doesn't concern himself with the opinions of a sheep.