ret2libc2
先checksec,还是开了NX,就不能用shellcode了。

看ida

gets存在栈溢出漏洞,cyclic计算一下地址偏移量

偏移地址仍然是112,那么填充112个垃圾数据就能劫持返回地址。

在ida里看到有system的plt地址,但是没有找到/bin/sh,所以要手动把/bin/sh填充进去,然后有了binsh的地址,就能作为system的参数,这样就变成了ret2libc1。
然后是写ROPgadgets再次调用gets,把/bin/sh输入bss段里,这里bss段刚好有一个buf2可以放。

接下来是找到gets的地址。

就可以写exp啦
这里有两种方法,参见https://www.jianshu.com/p/c4780335b842
第二种用到栈堆平衡,就要先把gets的参数pop出来,pop到哪都无所谓,所以就ROP找一找pop的指令

随便用一个短的pop ebx
1 | |
ret2libc2
http://example.com/2021/03/14/ret2libc2/