堆UAF-攻防世界time_formatter

终于来到了传说中的堆,这是攻防世界里面的堆第一次,刚遇到的时候有点懵逼,看了wp也看不懂,后来才知道是堆题。。。

嗯,我回来了,哈哈哈哈,首先详细了分析了一波题目,先把重要的函数例举出来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DTDhbGV4-1637663558086)(heap_1(攻防世界time_formatter).assets/image-20211123173241460.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h6UsMhjE-1637663558088)(heap_1(攻防世界time_formatter).assets/image-20211123173518277.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLk8ujyb-1637663558089)(heap_1(攻防世界time_formatter).assets/image-20211123173504967.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bLXtRYUX-1637663558091)(heap_1(攻防世界time_formatter).assets/image-20211123173538184.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jwjIoNLE-1637663558093)(heap_1(攻防世界time_formatter).assets/image-20211123173628629.png)]

纵观全局在我菜鸟看来就只有个system(“asdadasd;/bin/sh;as21sad12e”);这个漏洞,因为system的参数由我们控制,所以就有无限可能,这里有两个全局变量,第一个被格式化为整型了,另一个是字符串类型,那么就是构造";/bin/sh;"的最好容器,嗯,如图:可以看到ida列出来对ptr的操作只有3个

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YqbisJXG-1637663558094)(heap_1(攻防世界time_formatter).assets/image-20211123174049015.png)]

分别是一个malloc后的赋值、free释放和现在的system参数,但是呢通过malloc赋值那里有格式字符的限制输入不了";",然后再看程序总共可供我们输入的有分别是1、2、3这3个接收分别对应3个全局变量,前面说了dword_602120会直接变为整型用不了,那么就只有对value赋值这个函数有操作空间了。

通过学习malloc函数定义知识知道,malloc开辟内存后需要free释放并且对返回的指针置空,如果不释放会造成内存泄漏,指针不置空则会造成内存空间复用(glibc内存重新分配),因为这里没有在释放内存对指针进行初始化处理,就可以利用堆重新分配规则使我们输入的值指向上一个free chunk的地址

嗯,看demo

首先输入1开辟一块内存进行赋值操作然后输入AAAAAAAA,就可看到通过malloc(函数中strdup就是(strcpy + malloc)的结合)我们的chunk再看看它的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-txGVSPIN-1637663558096)(heap_1(攻防世界time_formatter).assets/image-20211123180513995.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Keys8xgn-1637663558097)(heap_1(攻防世界time_formatter).assets/image-20211123180914398.png)]

然后再看看全局变量ptr的值

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3DitIn1-1637663558099)(heap_1(攻防世界time_formatter).assets/image-20211123181015972.png)]

然后再对它进行释放,这样我们再申请同样大小的内存就会让这块chunk进行重新分配了

这里再选5、输入n保证程序不退出进行free chunk,此时的chunk数据为:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1dldJuQ1-1637663558102)(heap_1(攻防世界time_formatter).assets/image-20211123181539595.png)]

那么这时再通过malloc申请一样大小的内存、我们选择3、再输入我们的’;/bin/sh’再看看heap信息是否如期所致如图:可以看到之前free 的chunk已经被重新复用了,并且地址还是指向之前的位置,上面parseheap的status显示freed有点问题,时不时会这样显示不对,但看内存数据就可以了,因为没有fd和bk所以它是使用中的chunk

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bflcs215-1637663558103)(heap_1(攻防世界time_formatter).assets/image-20211123181827620.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BZsjcAJO-1637663558105)(heap_1(攻防世界time_formatter).assets/image-20211123182021768.png)]

最后的exp:

sla = lambda delim, data: p.sendlineafter(delim, data)

sla('> ','1')
sla('Format: ','%s')
sla('> ','5')
sla('?','n')
sla('> ','3')
sla('Time zone: ',"\';/bin/sh\'")
sla('> ','4')
p.interactive()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值