常回家看看之堆溢出
  YOkriIV1Am1d 29天前 32 0

💧对于堆溢出,有很多漏洞可以和它打配合可以说是堆里面很常见的漏洞,常见的有off_by_null,House系列(后续学习到了会继续更新这个系列),unlink,等等

今天来看一个,堆溢出修改指针,导致libc泄露以及通过指针来修改got表的题目

题目连接我放下面了,对堆有兴趣的可以去看看✔️

题目链接🔗:https://pan.baidu.com/s/1_j2gw22PQHK-PiC8HUcVvg?pwd=d2wt 
提取码:d2wt

接下来分析一下题目,首先看一下保护

32位,got可以修改,其实对于堆题目,有很多都是,保护全开的,这在堆里面很常见,都是我们还是要看保护,got可以修改,那么我们可以修改free或者malloc的got表,如果不能修改got表,我们还可以考虑__free_hook和__malloc_hook

32位ida静态看一下

有一些功能函数,我们具体看一下,add函数

注意这里是申请了两个chunk,第一个大小是我们输入的,第二个是0x80固定的大小,然后我们输入的name保存到了第二个chunk,而且这里把第一个chunk的指针放到了第二个chunk的数据里面,继续看

这里对输入的chunk的判断依据大小是name chunk和我们输入数据chunk之间的距离,如果先申请一些chunk把他们隔开那么就可以实现很大的堆溢出

update函数这里也是这样判断的

delete函数,把chunk1,2都进行了free

show函数可以进行name和text的打印

❗思路:我们知道申请chunk的时候会首先到bin里面去找,如果没有在从Topchunk里面切割一块,如果申请的大小超过0x20000,那么就不是mmap分配了,释放的时候如果两块chunk物理相邻,那么会把他们进行合并,如果我们申请一个0x80大小的堆块,(chunk1,2现在都是0x80),释放的时候他们就会合并成一个0x100的chunk,如果我们再次申请那么就会申请到这里,中间再申请一个0x80大小的chunk和一个0x8的chunk(用来存放/bin/sh),那么再次申请0x100大小chunk的时候name chunk就会跑到最后面,他们之间有0x80*3+0x10大小的空间,足够我们溢出了

 

 

进行了合并

指针修改之前

修改之后

chunk1的指针换成了free_got表地址,那么打印chunk1的时候就可以进行泄露,之后修改chunk1那么就可以进行修改free_got表为system,最后free chunk2(/bin/sh)

就可以获得shell

exp:

 

常回家看看系列持续更新..........

 

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: BUUCTF-WEB(9-14) 下一篇: BUUCTF-WEB(4-8)
  1. 分享:
最后一次编辑于 29天前 0

暂无评论

推荐阅读
  5NWiQFAVeqgX   2024年05月17日   22   0   0 网络安全
  pTtIhLb24H2d   2024年05月17日   31   0   0 网络安全
  OKgNPeBk991j   2024年05月18日   42   0   0 网络安全
  rKgO6TN7xbYO   2024年05月17日   34   0   0 网络安全
  5NWiQFAVeqgX   2024年05月17日   36   0   0 网络安全
  5NWiQFAVeqgX   2024年05月17日   28   0   0 网络安全
  owpmXY9hzjPv   29天前   29   0   0 网络安全
  owpmXY9hzjPv   29天前   30   0   0 网络安全
YOkriIV1Am1d