ret2libc1
知识点:基本ROP/cyclic计算地址偏移/ROPgadget/有’/bin/sh’与call _system情况下的系统调用
先checksec
是32位程序,开启了栈堆不可执行保护,打开ida
gets函数存在栈溢出,用cyclic计算偏移地址。
首先生成一个比较大的cyclic值。
复制到ret2libc1的gdb里,实现栈溢出。
这里的小箭头指向的就是要跳转的指令的地址,因为填充的数据不可跳转,就停在了这里,这里的0x62616164就是我们填充进去的cyclic中的某一小段,我们找到这一小段在cyclic中的地址,就可以算出需要填充多少垃圾数据,即劫持返回地址的偏移量。
因此我们需要填充112个垃圾数据。
接下来寻找反汇编程序中是否含有/bin/sh与system函数
那么有了system和/bin/sh就可以写exp了,这一题跟系统调用不一样,本题是直接使用call system函数,/bin/sh应该放在栈中作为函数参数,但是系统调用需要把参数放入寄存器中,以int 80h作为函数参数。
exp
1 |
|
ret2libc1
http://example.com/2021/03/10/ret2libc1/