前言 : 因为期末考试加上复习的原因,接近一个月没有做pwn题了,放寒假就回来在物理机上面装了个ubuntu(折腾了几天,不过装好了做题环境还是挺好用的),打算这个寒假学习完堆知识.来年好好上课(大三压力大!)有空打打比赛.
例题 : lctf2016_pwn200
house-of-spirit
利用条件:
(1)想要控制的目标区域的上方空间与下方空间都是可控的内存区域
(2)存在可将堆变量指针覆盖指向为上方可控空间,从而达到将非可控空间与可控空间进行合并变成fake_chunk(有点像unlink)
(3)释放堆块,将伪造的堆块释放入fastbin的单链表里面,重新拿出获得该块空间控制权
(4)更改之前非可控空间的数据,达到劫持程序执行流(getshell)
利用场景:

伪函数分析:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zsw822SQ-1641886903801)(house-of-spirit(pwn200)].assets/image-20220111123853145.png)](https://i-blog.csdnimg.cn/blog_migrate/b8c1e9b147b0e80743aced2e83c140d6.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QyWcHvP6-1641886903802)(house-of-spirit(pwn200)].assets/image-20220111124218134.png)](https://i-blog.csdnimg.cn/blog_migrate/fa585b455ba2a22b1200f584a94aa259.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-STk6xCWQ-1641886903802)(house-of-spirit(pwn200)].assets/image-20220111124304526.png)](https://i-blog.csdnimg.cn/blog_migrate/d4fb94597e28fb7e008902a03a64dfa0.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-coir4eDY-1641886903803)(house-of-spirit(pwn200)].assets/image-20220111124514819.png)](https://i-blog.csdnimg.cn/blog_migrate/d6ccebbaf8d43db3521e95cc08c8f2a2.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kdSROTg0-1641886903804)(house-of-spirit(pwn200)].assets/image-20220111124553791.png)](https://i-blog.csdnimg.cn/blog_migrate/487714849f8bea73c93104ba5dbac4af.png)
本题利用思路:
- 通过"who are u" 写入shellcode,并泄漏rbp地址
- 通过"me your id ~ "布局fake chunk的next chunk的size绕过检查
- 通过"give me money ~"布局fake chunk的size以便伪造free chunk,并修改全局堆指针指向fake chunk 的mem位置
- 释放 + 重获fake chunk 拿到用作于堆块的栈空间
- 修改返回地址为shellcode指针
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l4xNqgvc-1641886903804)(house-of-spirit(pwn200)].assets/image-20220111144017235.png)](https://i-blog.csdnimg.cn/blog_migrate/f4ade87129400bd82bb987bdaed0f9b3.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bVxmJMKj-1641886903805)(house-of-spirit(pwn200)].assets/image-20220111152443499.png)](https://i-blog.csdnimg.cn/blog_migrate/1dd8b818602e930dbea15af1bdb18d5d.png)
最终exp:
# -*-coding:utf-8 -*
from pwn import *
context.log_level = 'debug'
context.arch = 'amd64'
SigreturnFrame(kernel = 'amd64')
binary = "./pwn200"
global p
local = 1

本文介绍了一种利用House of Spirit漏洞的方法,通过构造fake chunk绕过检查,并修改全局堆指针指向伪造的内存区域,最终实现getshell。具体步骤包括泄漏rbp地址、布局fake chunk、释放和重新获取伪造的堆块。
最低0.47元/天 解锁文章
1014

被折叠的 条评论
为什么被折叠?



