hwb_2019_mergeheap

本文详细分析了hwb_2019_mergeheap中的函数,包括add、Show、Del和Merge。重点讨论了Merge函数中strcat和strcpy的潜在安全问题,如何利用这些函数的特性进行堆溢出和内存泄漏,以及如何通过这些漏洞修改malloc_hook来实现任意地址写。文章还介绍了构造payload的过程,包括泄露libc地址和绕过tcache_bin的技巧。
摘要由CSDN通过智能技术生成

hwb_2019_mergeheap

又是一道好题,很喜欢,但是也证明了我很菜。

在这里插入图片描述

全开

函数分析:

main():

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

ADD():

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

Show():

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

Del():

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

Merge():

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

  • 首先看到add函数里面,第一眼看过去没有问题的,如果说超过预输入长度,就直接跳过,但是如果等于输入长度,末尾就不会置0。
  • 然后是Show函数,show函数使用的是puts函数,puts函数就可能用来泄露libc或者是main_arena的地址或者是其他的东西
  • Del函数比较严谨,没有野指针,也没有Double_Free,应该是没有UAF或者说Double_Free之类的漏洞。
  • Merge函数如题目所说。应该就是最重要的一个函数,漏洞点也应该在里面。关键函数就是两个str函数,一个strcpy,一个strcat,两个函数都有一个性质,就是遇到’\x00’才会截断。利用这个性质可以做很多事情。

思路分析:

知道了上面这些函数之后,就可以开始构建思路了。首先,需要泄露一次libc地址,不然没办法做。在2.27之中,还是需要先绕过tcache_bin,然后才能去到unsorted_bin之中。先malloc8个,free 7个进入tcache_bin,然后再free一个使其进入unsorted_bin之中。在这里插入图片描述

这样就能使得0再tcache_bin之中。然后再malloc(0x8)大小的chunk,并且填满,因为在之前的add函数之中,只要len(字符串) == 输入长度,最后一位就不会变成’\x00’。这样就能在puts的时候,把unsorted_bin之中残存的Main_Arena的地址一起泄露出来。

然后就是需要做到修改malloc_hook的地址了,这里就需要利用到add()以及merge()的两个漏洞了。

如果说我们add(0x40,‘a’*0x40)&&add(0x48,‘a’*0x48),然后再merge两个函数,根据两个函数中的性质,也就是strcat只会被’\x00’截断,因此就可能会把下一个chunk的size给一起复制出来,利用这一点,就能做到堆重叠,然后任意地址改。

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

在这里插入图片描述

​ 这就是修改成功的结果,然后就能对 __ free_hook进行修改为任意值

最后上exp:

# -*- coding: UTF-8 -*-
from pwn import *
from LibcSearcher import *
context.log_level = 'debug'
local_file  = './mergeheap'
libc = ELF('/home/Desktop/Libc/U18/libc-2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值