首页
社区
课程
招聘
[原创]#30天写作挑战#PWN:House Of Einherjar学习
发表于: 2020-9-14 08:17 15415

[原创]#30天写作挑战#PWN:House Of Einherjar学习

2020-9-14 08:17
15415

用 how2heap 的例子看一下

参考:http://blog.topsec.com.cn/pwn的艺术浅谈(二):linux堆相关/

上面文字基本表达完了,但还是调试着看一下叭


首先申请了一个 chunk a,然后在栈上伪造了一个 chunk,为了绕过 unlink 的检查,先把 fd、bk、fd_nextsize、bk_nextsize 直接写成我们 fake_chunk 的地址


image.png


然后申请一个 chunk b,因为前面申请的 chunk 的大小是 0x38,所以 chunk a 共用了 chunk b 的 chunk 头的 0x8,也就是说我们写 chunk a 的最后 0x8 字节可以直接更改掉 chunk b 的 prev_size,这里为了让他能找到我们的 fake chunk,所以用 chunk b 的地址减去 fake chunk 的地址,0x603040-0x7fffffffdca0=0xffff8000006053a0


同时假设存在一个 off by null 的漏洞,可以更改掉 chunk b 的 prev_inuse 为 0


image.png


然后我们释放掉 b,这时候 b 因为与 top chunk 挨着,会跟 top chunk 合并,然后因为 prev_inuse 是 0,所以会根据 prev_size 去找前面的 free chunk,然而 prev_size 被我们改了,他去找的时候找到的是 fake chunk,然后两个合并,新的 top chunk 起点就成了 fake chunk,再次分配的时候就会分配到 fake chunk 那里了

ps.按照这个道理 d = malloc(0x200) 这行代码还没执行的时候,p main_arena 应该看到 top 被改成了 fake chunk 地址的,但是调试的时候显示的是 chunk b 的地址,然而 malloc 之后才显示 top 为 fake chunk 的地址,然而此时 d 的地址已经是在 fake chunk 那里了,不知道为啥


再深入理解为啥会跟 top chunk 合并之类这些问题大概要把 libc 的源码看一下才能理解,等以后吧 Orz

参考:https://xz.aliyun.com/t/6556

在 read 的时候有一个 off by null


image.png


程序在 0x602140 这里记录了申请的 chunk 的 size 与指针


image.png


首先需要泄漏 libc 的地址

先申请几个,然后释放掉两个,用来获取 unsorted bin 的地址和 heap 的地址(chunk3 的 fd 指针)


image.png


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//