作者:dxbaicai
PWN一直是CTF比赛中较难的点,相比WEB等较为直观的题型,PWN要求对程序运行的底层有一定了解,并且需要掌握c、汇编、编译原理等较多底层知识,入门后还得进一步学习pwntools等python库等,所以一直显得很难上手。这里作者就以自己近期从0开始学习的经验出发,带着大家一起上手。工欲善其事必先利其器,为了便于调试和理解,本篇先说明怎样准备一个PWN调试用环境。
kali-linux-2019.3-amd64(虚拟机)
这里有个坑,最新的gcc-9.x版本在编译的时候会在栈中插入一些自己的内容,对于新手入门来说不是很友好,所以这里我们选择较早的版本。
vi /etc/apt/sources.list # 增加如下内容 deb http://ftp.us.debian.org/debian/ jessie main contrib non-free deb-src http://ftp.us.debian.org/debian/ jessie main contrib non-free
apt-get update apt-get install gcc-4.8 g++-4.8 g++-4.8-multilib装好之后可以用gcc -v测试一下是否显示4.8版本。
apt install gdb
# 此处的/home/pwn/peda安装路径可以自行更改 git clone https://github.com/longld/peda.git /home/pwn/peda echo "source /home/pwn/peda/peda.py" >> ~/.gdbinit同样,装完使用gdb命令测试一下,应该会显示gdb-peda$ 。
这里有另外一个坑,虽然python3也能安装pwntools,而且python2现在已进入不推荐阶段,但是做CTF-PWN的时候建议大家还是暂时先使用python2.7,python3实测会出现一些奇怪的兼容性问题,并且pwntools官方也是建议用python2.7的。
kali自带python2.7.x,这里不需要再额外安装python。
部分站点有梯子速度会快很多,建议有条件的准备下。
wget https://bootstrap.pypa.io/2.6/get-pip.py python2 get-pip.py
cd pwntools-binutils-master/generic chmod +x install.sh # 这里参数选择与你的环境对应的,不过现在一般都是amd64 ./install.sh amd64
pip install --upgrade pip pip install --ignore-installed psutil --user pip install matplotlib pip install --upgrade pwntools
python >>> from pwn import * >>> asm('mov eax, 0') # 应该会输出如下内容 b'\xb8\x00\x00\x00\x00'
到了这里你就装好了CTF-PWN所需要的基本环境了,下一步就可以自己写一个简单的c程序来练习栈溢出PWN了。
[培训]科锐逆向工程师培训班38期--远程教学预课班将于 2020年5月28日 正式开班!
最后于 10小时前 被dxbaicai编辑 ,原因: 找不到的敏感词。。