攻防世界-PWN进阶区-hacknote(pwnable.tw)

本文介绍了攻防世界中一道7星难度的PWN题目——hacknote,主要利用未初始化的指针(Use-After-Free, UAF)漏洞来获取shell。首先分析了题目的保护机制和程序功能,接着详细讲解了如何通过控制函数指针,利用fastbin攻击,创建和删除note来构造payload,最终实现system函数的调用并执行`sh`,从而获取shell。需要注意不同平台的libc差异,以确保漏洞利用的成功率。" 110603754,10293400,Clion配置与Makefile项目的编译调试,"['Clion配置', 'C/C++开发', 'Makefile', '编译工具', '调试工具']
摘要由CSDN通过智能技术生成

攻防世界中这道题是pwnable.tw上面的原题,虽然在攻防世界上难度为7星,不过实际上这题不算难,只需要利用UAF就可以完成。

题目分析


题目链接:https://pan.baidu.com/s/1T-mIVLkxvyZ_7VvlBuInZQ
提取码:azyd


checksec:
在这里插入图片描述
保护机制比前几题弱了很多

main:
在这里插入图片描述
hacknote实现了三个功能:
1.添加(上限为5)
在这里插入图片描述
在新建note时,程序会先申请一个8bytes大小的空间,然后把打印的函数指针放入前4个bytes,后四个bytes放note的内容的指针。
2.删除(删除之后没有将指针置空,明显的UAF漏洞)
在这里插入图片描述
3.显示
在这里插入图片描述
打印内容的函数:
在这里插入图片描述
因为本题使用了函数指针,这使得题目难度降低许多。我们只需要控制函数指针,就能得到shell

漏洞利用

  1. 创建两个大小为0x80的note,此时堆结构如下:

在这里插入图片描述
在这里插入图片描述
然后将它们delete,这样两个note的块就进入了fastbin
此时fastbin为note[0]<-note[1]

  1. 创建一个大小为0x8的note,为note[2], note[2]与note[1]指向相同的位置,并且note[2]的内容指向note[0]相同的位置,构造payload=p32(my_puts) + p32(read_got),就能获得read的地址从而计算system的地址
    在这里插入图片描述
  2. 把note[2]删除,创建note[3],note[3]也与note[1]指向相同的位置,并且note[3]的内容也指向note[0]相同的位置,构造payload = p32(system) + ‘||sh’
    在这里插入图片描述
    这里说一下为什么用 “||sh”:

在show函数中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值