pwn,通过二进制/系统调用等方式获得目标主机的shell;
需要的工具:
pwntools:这个是基于python2工具,是写exp和poc的利器,安装可以参考链接:http://www.linuxdiyf.com/linux/21166.html :
在终端输入:
git clone https://github.com/Gallopsled/pwntools
cd pwntools
python setup.py install
IDA Pro :强大的反编译工具;
gdb:Linux调试中必要用到的,这个里面可以安装一个pwndbg或gdb-peda的插件(安装参考链接:http://blog.csdn.net/gatieme/article/details/63254211)会更方便:
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
objdump,file和readelf:可以很快的知道elf程序中的关键信息;
checksec:可以很方便的知道elf程序的安全性和程序的运行平台;
#检测elf的基本信息:file
检测文件是多少位程序;
如果64位的Linux等无法运行32位程序,参考链接:https://blog.csdn.net/qq_40827990/article/details/83216139
readelf命令可以看到更加详细的内容;
#检测elf的安全性:checksec
参考链接:https://www.jianshu.com/p/8a9ef7205632
【1】RELRO:RELRO会有Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表,设置符号重定向表格为只读或在程序启动时就解析并绑定所有动态符号,从而减少对GOT(Global Offset Table)攻击。RELRO为” Partial RELRO”,说明我们对GOT表具有写权限
【2】Stack:如果栈中开启Canary found,那么就不能用直接用溢出的方法覆盖栈中返回地址,而且要通过改写指针与局部变量、leak canary、overwrite canary的方法来绕过
【3】NX:NX enabled如果这个保护开启就是意味着栈中数据没有执行权限,以前的经常用的call esp或者jmp esp的方法就不能使用,但是可以利用rop这种方法绕过
【4】PIE:PIE enabled如果程序开启这个地址随机化选项就意味着程序每次运行的时候地址都会变化,而如果没有开PIE的话那么No PIE (0x400000),括号内的数据就是程序的基地址
【5】FORTIFY:FORTIFY_SOURCE机制对格式化字符串有两个限制(1)包含%n的格式化字符串不能位于程序内存中的可写地址。(2)当使用位置参数时,必须使用范围内的所有参数。所以如果要使用%7$x,你必须同时使用1,2,3,4,5和6。