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

全开
函数分析:
main():
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HojXJBm9-1647949112512)(F:\MarkDownS\HEAP\hwb_2019_mergeheap\hwb_2019_mergeheap\image-20220322190334034.png)]](https://i-blog.csdnimg.cn/blog_migrate/111c4bd8ba184528b6d521e9e3b090b2.png)
ADD():
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mXA9RbcZ-1647949112513)(F:\MarkDownS\HEAP\hwb_2019_mergeheap\hwb_2019_mergeheap\image-20220322190406710.png)]](https://i-blog.csdnimg.cn/blog_migrate/a63006a334fe1a4fdb08b96d32ad7775.png)
Show():
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YZDyMim-1647949112514)(F:\MarkDownS\HEAP\hwb_2019_mergeheap\hwb_2019_mergeheap\image-20220322190426476.png)]](https://i-blog.csdnimg.cn/blog_migrate/cd7cbe6892eaba95436b0850ae1a0a2e.png)
Del():
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9yVAUu6V-1647949112515)(F:\MarkDownS\HEAP\hwb_2019_mergeheap\hwb_2019_mergeheap\image-20220322190632417.png)]](https://i-blog.csdnimg.cn/blog_migrate/d2513698ab598c7d16510729f567372d.png)
Merge():
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Ek52GwD-1647949112516)(F:\MarkDownS\HEAP\hwb_2019_mergeheap\hwb_2019_mergeheap\image-20220322190700648.png)]](https://i-blog.csdnimg.cn/blog_migrate/15e405fa0ceb37032b1955beb470eeb8.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)]](https://i-blog.csdnimg.cn/blog_migrate/fe6f23c66df2410c68246d34e943e3ad.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.27-64.so')
select = 0
if select ==

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

被折叠的 条评论
为什么被折叠?



