[pwn]堆:Use After Free

30 篇文章 2 订阅
25 篇文章 4 订阅

Use After Free:time_formatter writeup

UAF漏洞就是Use After Free,再释放后继续使用,Use After Free会引发各种奇怪的现象,根据场景的不同并没有一种统一的利用方式。下面看题目:time_formatter

日常惯例,先查看安全策略:
在这里插入图片描述
开启了canary、NX、ASLR,然后查看一下程序逻辑:
在这里插入图片描述
很常见的堆菜单,下面查看一下各种功能:
在这里插入图片描述
setformat的功能,首先是输入一个字符串并为它申请空间然后将全局变量ptr指向这个空间,函数中使用了strdup函数,这个函数的功能是将字符串拷贝到malloc的位置:
在这里插入图片描述
然后是filter函数(都是我改的名字),filter函数检测是否有规定范围外的字符,有的话就失败,重新来:
[外链图片转存失败(img-H107jeSx-1567783731649)(time_formatter_wp.assets/1567673565647.png)]
接下来是settime函数,就是输入一个数字,然后用一个全局变量保存它:
在这里插入图片描述
然后是setzone函数,直接读入一个字符串并为它申请空间,并使用一个全局变量保存它,但没有filter函数的检验
在这里插入图片描述
然后是printtime函数:
在这里插入图片描述
可见之前输入的format会被拼接入命令之中,存在命令注入,但setformat函数有filter检验,无法输入;,|等注入的字符。

接着往下看,exit函数:
在这里插入图片描述
exit函数中先将ptr和value两个全局变量指向的地址free掉,free掉之后也没有将悬挂指针清空,然后询问是否要退出,选否还可以继续玩,还有这种操作?所以这里存在UAF漏洞,但却没有double free,因为每次重新申请都会自动将指针指向新的空间,指针数量也不够double free+unlink利用。

利用思路:

先用setformat申请一段空间让ptr指向它,什么内容都行:
在这里插入图片描述
然后调用exit free掉这段空间,但ptr的指向并没有变,但不真正退出,选择n:
在这里插入图片描述
然后调用没有输入校验的setzone函数输入命令注入语句’;/bin/sh #(这里单引号是截断之前的单引号,类似sql注入:
在这里插入图片描述
那么现在ptr就指向命令注入的语句了,成功绕过了检测,然后调用printtime函数就能getshell,都不用写exp,直接手工操作就行,操作顺序如下:

  1. 输入1,选择set format

  2. 输入回车,什么也不输入

  3. 输入5,退出

  4. 输入n,不真的退出

  5. 输入3,选择set zone

  6. 输入’;/bin/sh # ,然后回车确定

  7. 输入4,选择print time

  8. 获得shell:
    在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值