本菜鸟最近学习了缓冲区溢出的知识,打算针对wiki上基本ROP的攻击过程做一个复现,在这之前,首先要配置解pwn题的相关环境。本文就用kali虚拟机进行环境配置,这里做一个总结:
kali相关的配置和工具下载
软件源更新
更新软件源,编辑/etc/apt/sources.list ,更换为阿里云/清华等国内镜像,这样后续下载软件的时候就不用走国外的源了,速度会快很多,指令为:
vim /etc/apt/sources.list
然后添加如下两条(我这里添加了阿里云镜像):
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
添加之后的效果如下,改完之后别忘了输入:wq保存:
更改完之后,还要运行如下命令更新:
sudo apt-get update
安装docker(可跳过)
docker是应用容器引擎,用于模拟远程测试环境,虽然这次用不到docker相关的内容,但迟早是需要的,安装命令如下:
apt-get install docker docker-compose
启动docker:
service docker start
查看docker有啥镜像(此时应该啥也没有)
这样就基本可以了。
安装git
git是版本控制软件,主要用来从Github上下载开源程序,命令如下:
apt install git
安装结束后,输入git,如果出现以下界面,就安装好了:
安装pwntools
pwntools是一个python的库,方便解pwn题的时候编写漏洞利用的exp,在python2和python3中都支持,我们这里就安装在python3中就可以了,命令如下:
python3 -m pip install --upgrade pwntools
安装好之后,输入python,进入python3环境,试一试这个库能不能用,输入如下代码:
from pwn import *
asm("xor eax, eax")
如上图,成功输出对应的bytes流,说明pwntools安装成功。
安装gdb并添加插件peda
安装gdb
命令如下,一共六条命令,按顺序执行即可,首先下载gdb压缩包,本文安装的是12.1版本:
wget http://ftp.gnu.org/gnu/gdb/gdb-12.1.tar.gz
然后解压:
tar -zxvf gdb-12.1.tar.gz
解压后进入gdb-12.1目录下:
cd gdb-12.1
添加python配置,需要根据python的具体版本进行修改,我的是python3.10,不知道自己python版本的直接命令行输入python,进入解释器的时候会提示。
./configure --with-python='/usr/bin/python3.10'
最后运行如下两条命令,make的时间可能比较长,耐心等待一会。
make
sudo make install
安装完成后,输入gdb,如果能进入到gdb的命令行界面,就说明成功了
添加插件peda
peda可以在调试程序的时候清除的看到寄存器、代码段、栈区的存储内存情况,是一个很方便的gdb插件工具。运行如下两行命令使用git获取peda,并添加到gdb环境,这样在下次在启动gdb的时候就自动进入gdb-peda模式:
git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
安装完成之后,输入gdb,看看是否自动进入gdb-peda模式,如果是下图的状态,就成功了:
如果输入gdb,发现还是仅仅是gdb的命令行界面,可能是并未将peda添加到gdb环境中,我们可以查看以下gdb的配置文件.gdbinit,命令如下:
vim ~/.gdbinit
保证这个文件的内容里面有peda源,就像下图这样 :
特别注意两点:
1.peda的路径要正确,我这里是安装到了/root/peda/peda.py ,读者安装的时候要填写自己的安装路径。
2.source /(peda的路径)/peda.py 这一行的两端不要有双引号!
更改完成之后(别忘了:wq保存),重新运行gdb试试,应该没有问题了:
结语
本文用kali配置了解pwn题的相关环境,包括kali相关配置、pwntools的下载和gdb-peda的下载配置。在后续的章节中,我们将做一些基本的ROP(Return Oriented Programming)题目,其主要思想是在栈缓冲区溢出的基础上,通过利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程,最终获取shell。希望大家多多支持!
版权归原作者 Bossfrank 所有, 如有侵权,请联系我们删除。