往往我们做pwn题,都是拿到可执行文件(elf)和其依赖文件libc.so,工欲善其事必先利其器,利用好的工具,可以事半功倍。在此列出自己做pwn题的ubuntu配置:
对于可执行文件(elf),可以从三个不同的方向入手:
1) 运行程序,了解程序逻辑;
2) gdb调试,动态调试程序;
3) IDA静态分析,理解程序逻辑。
以上三步主要涉及漏洞挖掘,这是最基础的部分,也是方向和手段最多的部分。如果我们可以找到漏洞,那么一起好说。
利用工具:
peda :gdb插件,调试神器,谁用谁知道。
vim : 安装插件,为后续编写exploit。
安装vim插件:https://github.com/ma6174/vim
速度可能较慢,耐心等待,效果图:
安装peda插件:https://github.com/longld/peda
安装命令:
git clonehttps://github.com/longld/peda.git ~/peda
echo"source ~/peda/peda.py" >> ~/.gdbinit
echo"DONE! debug your program with gdb and enjoy"
截图:
利用peda调试事半功倍。
在分析程序时,往往少不了IDA Pro来静态分析程序,或者F5查看程序的伪代码,程序下载:http://www.52pojie.cn/thread-450156-1-1.html
此版本为linux下ida pro,但是没有F5功能,我往往是将IDA Pro安装在windows下,ubuntu作为虚拟机来运行,充分利用各自的优势。
windows下IDA Pro下载地址:链接: http://pan.baidu.com/s/1dFBgpjz 密码: sgjs
以上是漏洞挖掘,主要是靠人工手动的来分析程序寻找漏洞,另外还可以通过fuzzing测试,来让程序产生crash,从而能更快速的定位问题,常见的fuzzing工具有:
peach :高度定制,万能fuzzing工具;
Trinity :用于fuzzing linux内核驱动;
sulley/kitty-fuzzer等,请自行google。
常见的pwn漏洞堆溢出、栈溢出、use after free、格式化字符串、命令注入以及竞态(常见于多线程)等程序漏洞,在程序漏洞利用常利用python脚本来编写exploit,也有大牛专门写了pwn的python库——pwntools。
下载地址:https://github.com/Gallopsled/pwntools
说明指导文档:https://pwntools.readthedocs.org/
安装:
apt-get update
apt-get install python2.7 python-pippython-dev git libssl-dev
pip install --upgradegit+https://github.com/Gallopsled/pwntools.git
可能安装不太顺利,多安装几次。
在程序栈溢出中我们通常会用到ROP编程,所谓的rop编程就是控制eip跳转同时利用程序本身或者libc库来构造代码片段执行指令达到程序构造的目的。而这些代码片段称为gadget,寻找可用的gadget有下面等工具:
1) ROPEME: https://github.com/packz/ropeme
2) Ropper: https://github.com/sashs/Ropper
3) ROPgadget: https://github.com/JonathanSalwan/ROPgadget/tree/master
4) rp++: https://github.com/0vercl0k/rp
本人比较喜欢用Ropper/ROPgadget,Ropper依赖包主要有filebytes、capstone等,安装pwntools时一般会安装capstone,安装命令pip install capstone安装成功后,执行ropper/ROPgadget时往往会出错。
解决方法:
pip uninstall capstone来卸载capstone,然后到github上下载安装包手动安装:https://github.com/aquynh/capstone
make && make install 来安装capstone,然后进去目录
在此目录下: sudo python setup.py install,安装成功后ROPgadget/Ropper就可以成功运行了。