在CTF中,pwn主要是指通过程序本身的漏洞,编写利用脚本破解程序拿到系统的权限(shell),从而获得flag(通常为目标目录下文件内的一段随机字符串)这就要求我们对程序的各种函数,内存地址,堆栈空间,文件的结构有足够的了解。
0x01知识储备
● c语言
● python
● 汇编语言
● Linux操作系统
● 数据结构和算法
c语言是当前比赛中pwn项目最常用的语言,IDA pro反汇编后得到的也是c语言的伪代码,所以c语言的熟练掌握会对程序的分析有很大帮助。
python主要用于编写exp(攻击)脚本,另外python有一个pwntools的python库是几乎每个pwn选手必备的。
前面虽说有c语言的伪代码,但是很多情况下伪代码并不能给我们提供所有有效信息,这时候我们就不得不直接分析汇编指令了。
Linux操作系统能够提供各种辅助指令来获取信息,了解操作系统还能加深我们对堆栈的理解。
较难的程序中大多包含了复杂的数据结构与算法,需要我们迅速且准确在其中找出漏洞,这也就需要我们熟悉各种数据结构与算法并能在一定的魔改下依旧做出判断。
0x02必备工具
● IDA pro: 新手入门必备,能对程序进行静态调试(也能动态调试),查看伪代码等信息。
● pwngdb:Linux系统下gdb调试的一个插件,能对程序进行动态调试,查看程序函数的调用,栈内信息等等,新手使用需要一定时间的熟悉。
● pwntools:前面已经介绍,一个python的第三方库,极大的便利了我们exp的编写
● 虚拟机:主要是用来装Linux操作系统的,因为许多pwn的题目在Linux的环境下更利于我们去分析,操作起来也更方便,实际上一般是windows和linux系统结合起来进行分析。
0x03基本漏洞学习
● 整数溢出
● 栈溢出
● ROP(返回导向式编程)
● 格式化字符串漏洞
● 堆溢出
0x04入门书籍推荐
● 从0到1CTFer成长之路(Nu1L战队)
● 有趣的二进制
● C Primer Plus
0x05刷题网站推荐
XCTF(攻防世界) https://adworld.xctf.org.cn/
Bugku CTF 首页 - Bugku CTF
Jarvis OJ Jarvis OJ
ctf.show ctf.show
BUUCTF BUUCTF在线评测
CTFHub CTFHub
前三个网站题目比较基础(攻防世界还有进阶区),适合新手,后面三个网站题库丰富,CTFHub上还有许多真题还有各种比赛的日程。
新手入门前期学习以刷题为主,帮助深入了解知识。