Pwn-gyctf_2020_force

本文介绍了gyctf_2020_force挑战中的House_of_Force漏洞利用过程。通过malloc溢出修改top_chunk大小,泄露libc基址,然后利用堆溢出修改_top_chunk为-1,控制_malloc_hook实现one_gadget执行。分析了为何需要通过realloc_hook来满足one_gadget执行条件,以及如何配合malloc_hook和realloc_hook获取shell。
摘要由CSDN通过智能技术生成

gyctf_2020_force

这个题目是一个新的知识点,house_of_force,第一次看,以前没见过。

HOUSE_OF_FORCE:

使用条件:

  1. 能够使用溢出等手段,修改top_chunk的大小
  2. 能够自由分配chunk大小,不会被限制

基本原理:
在malloc之中,会有一个topchunk的size大小,如果说,能够malloc一个chunk的大小大于topchunk的大小(一般是0x20df1这种个大小),那么chunk就会去到vmmap映射出来的另一端地址,一般来说会在libc上面一点点。因此可以做到修改完地址之后就能泄露出libc基地址了。这之后,可以修改top_chunk的size为:-1,因为-1在计算机中储存的形式为0xfffffffffffffffffff,所以top_chunk识别出来他的size就会变得很大。然后就可以利用很大的size,使得chunk能到自己想要的地址附近,比如说可以从0x56xxxxxxx一直到0x7fxxxxxx,这样的话,就能做到不修改got表,或者说plt表,而是修改其他的,比如说_ _malloc_hook,或者说__free_hook这些东西,修改为one_gadget或者其他函数,总是还是很好用的。

函数分析:

main:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iKiScQmo-1647182929020)(F:\MarkDownS\HEAP\gyctf_2020_force\gyctf_2020_force\image-20220312234258769.png)]

add():

这东西没有限制size的大小,然后buf的read固定为0x50,所以可以找到有一个堆溢出的漏洞,很明显

puts():

在这里插入图片描述

基本没用,所以可以忽略掉

思路分析:

这个题一开始不知道有house_of_force,所以看这个题,只有add有用,所以说学到的知识基本没有用,比如说unlink,uaf,都要free或者edit函数,这里都没有,所以卡了一万年。知道了有这个漏洞之后,这个题好像就变得简单了。

首先,需要有malloc一个很大的size,泄露到libc附近的位置,然后得到libc的基地址。这之后,使用堆溢出,修改top-chunk的size为-1(很大),然后求到_ malloc_hook和heap地址的offset,接下来add(这个offset的size,就能让chunk到达 __malloc_hook的上面),然后就add想要的地址,就可以修改出 _ malloc_hook的位置,但是这个地方,有一点问题?为什么说这里直接把 _ _malloc_hook改成one_gadget不能直接实现,必须要给个realloc的hook,然后把one_gadget写到realloc_hook的位置里面,才能执行。

原因如下,一般来说,需要满足[rsp+0x30] == NULL(或者说其他偏移都行),但是这个地方如果直接是malloc就是没有满足条件,所以说,就需要用realloc来做一次中转,以此来满足one_gadget的条件,也就是先把_ _malloc_hook改成realloc,然后在realloc中写入one_gadget就能满足条件。

当向malloc_hook写one_gadget时,如果不满足one_gadget的条件时,而我们的环境不太好调整,所以无法getshell。
我们可以通过malloc_hook和realloc_hook相配合的方法来使得one_gadget生效。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值