2021 天翼杯 overheap

本文介绍了一个在glibc 2.34版本下的Off-by-Null漏洞,并详细讲解了如何通过House of Banana技巧来进行攻击。文章展示了如何利用此漏洞泄露堆地址,劫持_rtld_global结构体中的link_map结构体,最终实现任意代码执行。

在这里插入图片描述

保护显然

add在这里插入图片描述大小不能超过0x1000

show
在这里插入图片描述
正常

edit
在这里插入图片描述
它的输入函数
在这里插入图片描述
有个off by null。

free
在这里插入图片描述
free函数也正常。

所以说完了就是2.34版本下的一道off by null。

高版本要注意什么
首先是2.32开始对tcache和fastbin的fd指针进行了异或加密,异或的内容其实就是堆地址,所以我们首先必须泄露heap地址。
tcache_entry->next中存放的chunk地址为与自身地址进行异或运算后所得到的值。

2.34开始取消了malloc_hook和free_hook。
我们只能把想法转向IO_FILE。

那么我们来细看
要解决的第一个问题居然是程序跑不了。
在这里插入图片描述
问题在哪呢?
在这里插入图片描述
他给了个他已经patch过的程序。
在这里插入图片描述
IDA也看得出来。

那就把东西都拉进来,然后给他权限。
在这里插入图片描述
就可以了。

所以因为在libc2.34的条件下,我们能利用的方式只有house of banana、house of pig。
这个题里面我们用到的是house of banana。

而且house of banana要注意小细节。
我们在使用house of banana的时候主要是劫持_rtld_global结构体中的link_map结构体,但是我们其实在劫持link_map结构体的时候最重要的是劫持它第一个内容,l_addr结构体,所以其实我们完全可以直接劫持l_addr结构体,也完全可以不用劫持link_map

这次用的就是这个手法。

exp

# -*- coding: utf-8 -*-
from pwn import*

context.log_level='debug'
context.arch='amd64'
context.os = "linux"

pc = "./overheap"

context.binary=pc
context.terminal=["gnome-terminal",'-x','sh','-c']

local = 1
if local:
    r = process(pc)
    elf = ELF(pc)
    libc = elf.libc
    
else:
    r = remote
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值