作者:H.R.P
前言
今天(2021.11.28)NCTF的题目让我大开眼界,上来最低利用版本都是2.31,新生都如此生猛了吗,由于我比较菜只搞定了这个ezheap,2.33版本的题目我也是第一次做,花了1个小时fuzz出了这个玩意是异或加密然后又花了30多分钟去理顺逻辑,算是收获满满吧
由于这个2.33的利用我在网上并没有看见有文章发布,我就写一下供各位pwn学习参考。
前置知识
UAF,异或加密,hook利用
版本新增保护介绍
2.33版本的glibc不同于以往,对于堆块地址的释放之后,对于同一大小的fastbin以及tcache有效的fd永远只有一个,剩余的bin照旧。
对于2.33版本下对于fastbin以及tcache的fd指针会被进行异或操作加密,用来异或的值随堆地址发生改变。
举例利用
例题:NCTF2021 ezheap
漏洞分析
如下存在UAF漏洞,对于heap的size位置零,但是指针未置零,可以造成堆复用
tips:可以利用glibc-all-in-one配合patchelf来建立题目的运行环境
命令如下
1 | css复制代码patchelf --set-interpreter ./glibc-all-in-one/libs/2.33-0ubuntu5_amd64/ld-2.33.so --set-rpath ./glibc-all-in-one/libs/2.33-0ubuntu5_amd64 ezheap |
再说点骚操作,题目一般只给libc没有ld,可以直接把all in one的libc替换成题目给的,然后再去patchelf就可以使用上题目的libc了
低于2.33常规思路攻击
通常的思路就是先free一次但是heaparry指针保留,再申请回来就有一个新的指针指向同一个地址,直接uaf任意地址申请,attack free hook 梭哈getshell
2.33绕过方法
First 堆地址的泄露
首先申请两个chunk,然后直接free掉,此时这两个堆的fd位置的内容如下
1 | c复制代码0x5569374d8290: 0x0000000000000000 0x0000000000000091 |
由于UAF漏洞的存在,直接泄露出chunk0和chunk1的fd,然后进行异或操作我们可以得到 heap:0x5569374d82a0
也就是此时chunk0的content addr,这个地址我们先记录下来
(由于我脚本是分多次启动打断点调试,数据不是同一批,具体可以自己去用脚本去调试)
Second 获取某个堆块的对应的异或key值
我们继续进行,假设我们已经填充好了tcache并且释放了一个chunk进入了unsortedbin,目前的heap如下
1 | c复制代码pwndbg> heap |
bin状态如下
1 | c复制代码pwndbg> bin |
此时用第一步方法得到的堆地址是 0x5650e8eb52a0
然后为了形成堆复用,我们会再去add一个0x90的chunk,此时的heaparry如下
1 | c复制代码pwndbg> x/32gx 0x40a0+0x5650e8348000 |
接着我们可以看下当前的bin情况如下
1 | c复制代码pwndbg> bin |
我们刚才泄露的地址是 0x5650e8eb52a0 现在tc最新的地址是 0x5650e8eb5570
我们现在可以得到key值就是key=0x5650e8eb5570^0x5650e8eb52a0=0x5650e8f25
上面我也提到了这个key是变化的,因此我们还要爆破下,但是爆破是可以找到范围的,我们可以利用常规的错误打法
先看看泄露的key和需要的key的一个偏移(很好玩的是这个偏移也是随机的)
我们再来一次之前的操作然后得到的最新的泄露key是0x5612a9a54
我们看看错误的bin如下
1 | python复制代码pwndbg> bin |
正确的free hook地址:0x7f8e7a497e20
libc_key=0x7f8e7a497e20^0x7f8b1b63e5e4=0x5612a9bc4
hex(0x5612a9bc4-0x5612a9a54)=0x170
我试了很多次的调试,libc_key有0x170,-0x170,0x190,-0x190当然实际情况实际调试,只要调试出来的值就是有可能的偏移
最后把free_hook^libc_key=encrypto_free_hook 然后常规套路直接getshell
exp
1 | python复制代码from pwn import * |
题目附件下载链接
链接:pan.baidu.com/s/1YKqJOuGZ…
提取码:urk1
说明
关于合天网安实验室
合天网安实验室(www.hetianlab.com)-国内领先的实操型网络安全在线教育平台 真实环境,在线实操学网络安全 ; 实验内容涵盖:系统安全,软件安全,网络安全,Web安全,移动安全,CTF,取证分析,渗透测试,网安意识教育等。
相关实验练习
本文转载自: 掘金