pwn简介
CTF中的pwn指的是通过通过程序本身的漏洞,编写利用脚本破解程序拿到主机的权限。比较常见的形式就是把可执行程序运行在目标服务器上,参赛者通过网络与服务器进行交互,通过破解漏洞构造恶意数据发送到远程服务器的程序,从而控制远程服务器。这就需要对程序进行分析,了解操作系统的特性和相关漏洞,是是一个难度比较大的分支。
pwn其实上有很多种,比如linux的pwn,windows的pwn,web的pwn,Andriod的pwn,但我们主要讲linux上的elf文件的漏洞分析与利用。
基础知识
需要的基础知识如下:
- c语言
- 汇编语言
- python
- 操作系统
- linux操作
这些基础知识对一个刚进大学的大一新生来说是比较难掌握的。因为大一才开始教C语言,而汇编语言、操作系统等内容可能大二大三才教。对这些基础知识的掌握对pwn的入门与之后的深度学习影响比较大。
C语言是最基础的部分,当下的CTF比赛大部分的pwn题目使用的程序都是利用C语言或者C++完成的,IDA的反编译功能也是变成C/C++,理解并能运用C语言,对于分析程序有很大的帮助。
汇编语言,pwn是绕不过汇编的,分析程序首先面对的就是汇编,对于汇编需要有一定的基础(可以不用完全熟知掌握),按照当下来说,使用的最多的是x86的汇编,然后就是IA32,掌握这两种汇编基本上就足够了。
python,用来写exp脚本(解题脚本),实际上exp每种语言都可以写,但是python集成了一个专门用于pwn的库–pwntools,更方便使用。
linux操作,做题需要在linux环境下进行操作,所以要熟悉linux的一些操作。
经典漏洞
pwn的几大主流漏洞一定要掌握,深层掌握,后续的题目基本上是这些漏洞的深化和结合。
- 栈溢出
- 堆溢出
- ROP
- 格式化字符串漏洞
- 其余漏洞
前四种漏洞是大部分程序都存在,且很难避免的,是必须掌握的内容。
Shellcode编码
Shellcode是破解软件的一种方法,对于一些没有办法通过程序内部函数获取系统权限的软件,可以编写Shellcode来获取系统权限。
学习资料
书籍推荐
- 汇编语言第三版
- 鸟哥的linux私房菜
- 深入理解计算机系统
- 黑客攻防技术宝典(系统实战篇) 一本老书,但是很经典。
- IDA pro权威指南 IDA学习的书籍
- 黑客反汇编解密 关于反汇编和分析软件的知识
- 加密与解密 windows平台的逆向分析
学习网站推荐
- 看雪论坛 https://bbs.pediy.com
- 学破解论坛 https://www.xuepojie.com
- 吾爱破解 https://www.52pojie.cn
- i春秋 https://www.ichunqiu.com
- 实验吧 http://www.shiyanbar.com
- 漏洞银行 https://www.bugbank.cn/live
刷题网站推荐
- 实验吧 http://www.shiyanbar.com
- i春秋 https://www.ichunqiu.com
- bugku https://ctf.bugku.com
- 攻防世界 https://adworld.xctf.org.cn
- pwnable http://www.pwnable.kr/