ctf中pwn入门指南

前言

下面给出的学习路线都是根据我的学习经历总结出来的(肯定有很多问题,仅供参考),我本身学习pwn不到一年时间,学习时间不长,中间踩过很多的坑,给社团想学pwn的新人做个参考.

基础

语言:

c :c语言是必须得会的。推荐书籍《c程序设计语言》,也可以看看网课,中国大学mooc,b站上都有很多的资源。
c++ :推荐先看基础网课,然后再看《c++ prime》,看个大概就好..看的太仔细不用也很容易忘..
python : 有了前面的铺垫,学python就会很快,廖雪峰的python教程,《Python编程从入门到实践》等都不错。
汇编 : 用王爽的《汇编语言》来入门是不错的. 不过这本书是16位汇编,入门后还得找找32位,64位汇编资料来看看。这里说的汇编都是asm汇编.
上面学的都只是语法,还得做做oj上面的题,能够用编程语言把自己的想法表达出来。会写汇编也很重要,写shellcode必备.

系统知识

《深入理解计算机系统》 : 这本书覆盖了计算机系统的方方面面.
《程序员的自我修养-链接,装载与库》 :这本书主要讲了平台上的文件格式,源代码是如何到可执行文件的,动态链接静态链接等.
《加密与解密》 :这本书可以看看其中的工具篇和逆向分析技术篇,逆向分析技术篇详细说明了函数调用约定,函数调用栈帧,c++虚函数等东西.
操作系统原理 :找网课看看

ctf中大部分的pwn题都是linux平台上的,那么懂得linux的基本操作也是必不可少的.常用的命令,权限控制,linux的系统调用等…百度和b站找找教程就行了.参考书籍《鸟哥的Linux私房菜基础篇》(真的是只是参考书籍,太厚了…,遇到了不懂的就翻翻就好了)
懂的上面这些就可以学习基本的二进制漏洞了.

扎实的逆向基础是非常重要..

工具:

IDA pro : 静态分析工具,有本书是专门讲IDA的《IDA pro权威指南》,这个工具很复杂.
gdb : 动态调试工具,学会调试是很重要的.
pwndbg,peda … : gdb的插件,github上可以找到.
pwntools :python的一个库,主要的用途是跟程序进行交互和方便调试.
checksec :linux自带的检查文件开启的保护的工具
ropper,ROPgadget : 查找程序中gadget的工具
one_gadget : 查找libc中的onegadget..
等等等…

ctf中漏洞学习过程:

基本类型:

栈溢出原理
ROP
格式化字符串漏洞原理
格式化字符串漏洞任意读写.
整数溢出
glibc heap的一些利用.
_IO_FILE结构的利用.

偏向实战:

webserver
虚拟机逆向…
内核提权..ctf中常常是写的驱动的问题.
魔改的JS引擎.
等等等.

实战.

找到自己感兴趣的方向:windows桌面应用..浏览器安全..内核安全..虚拟机逃逸..iot智能设备…等等等
这些需要你有扎实的编程基础,计算机系统知识,对闭源软件的逆向能力