看雪wifi万能钥匙CTF年中赛 第四题 writeup
来源:互联网 发布:上海快三遗漏数据 编辑:程序博客网 时间:2024/04/28 20:20
这个题和这次秋季赛的第四题很类似,都是利用的堆的unlink来溢出,然后system(“/bin/sh”)来提权的
所以打算先学习这个,然后再去自己做秋季赛第四题
官方writeup和题目下载链接
主要是看了这篇writeup:double free解法
double free,就是free两次(废话)
先来分析程序流程,再来说double free是个什么原理
name是提示我们输入的,menu是显示程序几个主要功能的选择项的(一般的pwn题都是这种格式)
点开menu,看到这个
结合IDA分析功能,1是创建新的堆块,2是删除,3是修改堆块内容,4没用
创建功能这里很重要:
totalnums是说总共创建了多少个堆块,在之前的if语句中有判断不能超过4个
6020c0地址这里保存的是每个堆块的大小,调试下可以看到
0xa0 = 160,0x64 = 100
下面两行代码有点绕,主要是6020e0和6020e8被IDA分开了,弄成了两个数组显示弄糊涂了
一个地址是6020e0,另一个是6020e8,所以在结构体中是相邻的
6020e8这个地方是个flag的标记,说明这个堆块是否用过了,6020e0这里是个指针,保存的是我们输入的堆块内容的地址的值
所以,我们可以利用IDA的struct,来方便我们识别
http://blog.csdn.net/hgy413/article/details/7104304
上面那个链接讲述了怎么使用
先在struct中新建个heap的struct,其中两个元素一个指针,一个flag标记,都是8个字节
然后去修改IDA中的显示
右击,set item type,输入你的struct名称,这里是heap
然后rename一下就好了
看到6020f0这一行,00603060是一个地址,保存了我们输入的堆块内容,后面的1是个标记,说明我们的第一个堆块是使用过的
这个函数的目前功能是没有问题的
分析delete函数
这里很明显就是少了一个判断条件:当你要free一个堆块的时候,一定要判断这个堆块的flag标记是否为1
这里的if语句没有这个判断,所以当第一次free了某个堆块之后,这里的flag标记改变为0,但是仍然可以free第二次,就造成了漏洞
于是,我们可以利用这个漏洞,进行unlink的操作(基本的堆块原理参考前面链接writeup)
我们的任务是,找到一个全局变量p,这个p指向堆的某个地址,想要对unlink进行操作
看到上图,构造的逻辑已经非常清楚了,我们怎么找到的P指针,结合double free的writeup,我们可以控制到想要写入的地址。
- 看雪wifi万能钥匙CTF年中赛 第四题 writeup
- 由看雪.Wifi万能钥匙 CTF 2017 第4题分析linux double free及unlinking漏洞
- 某新生院赛CTF 移动题writeup
- 实验吧CTF逆向题1000writeup
- 08067ctf 补题 Web Writeup
- 看雪ctf记录第一题
- 看雪2017CTF第十题
- WIFI万能钥匙协议分析
- wifi 万能钥匙面试题目
- wifi万能钥匙原理猜想
- WIFI万能钥匙协议分析
- CUIT CTF WriteUp-Code100
- 360 CTF Writeup
- 0ctf simpleapk writeup
- 0ctf r0ops writeup
- 0ctf flagen writeup
- 0ctf login writeup
- 9447 ctf writeup
- 类与对象
- 组合模式(Composite)-----基于JAVA语言
- 漫射光
- 机器学习基石_课后练习答案链接
- Java
- 看雪wifi万能钥匙CTF年中赛 第四题 writeup
- 五年增长50倍,云栖小镇是怎么炼成的?
- Android 实现弧形View或者ImageView
- 31岁做副市长,面试了4000多顶尖CEO,她总结了一套职场好运真经|72问
- 远程主机强迫关闭了一个现有的连接
- SQL基础语句---1th
- 达摩院:阿里巴巴的科技雄心
- 相对路径和绝对路径
- 零基础入门深度学习 | 第二章:线性单元和梯度下降