House of Force:
修改top chunk
的size
域,来达到我们任意地址读写的目的.
1. welcome
2. menu
3. new
4. edit
5. delete
漏洞点: 在welcome
阶段存在一个内存泄露和复制过量的数据
第一个漏洞点
分析: 当我们输入0x40
字符时, strcpy
会将字符和v2地址
一同复制到v2指向的空间. 随后会将v2
打印出来, 这就是内存泄露.
第二个漏洞点
分析: 同样当我们输入0x40
到s
中去, strcpy(v2, &s)
就会将0x40个字符 + v2地址 + v3内容
一同复制进v2
,造成复制过多的数据, 这个地方就是修改 top chunk size
.
小例子
相关内存:
结论: top chunk size
在0x804b020
,我们完成可以向s1中输入过量的数据改变top chunk size
.
整体思路
修改top chunk size
为0xffffffff
, malloc一个赋值, 使top chunk
分配到.bss
段附近.
0x804b120
中存放的是content
指针, 通过修改这些指针, 达到任意读写目的.
步骤一: 泄露heap地址, 修改top chunk size
步骤二: 修改top chunk的值
步骤三
思路: 修改原0x804b120
处存储的指针, 将free@got
修改为print@plt
, 泄露atoi
函数地址
步骤四: 修改atoi为system函数地址
步骤五: 发送"/bin/sh\x00"
改变top chunk
至.bss
是什么算的?
0x804b0a0 - 8 - (leak + 0x48*3 -8) - 12
原因: 咱们的目的是为了返回0x804b0a0
, top chunk
必须为0x804b098
, 程序中还会为你申请的空间+4, 还要有8字节的header
,所以是减12, 另外的就是单纯的算距离了.
Link1
Link2
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-4-9 18:37
被baolongshou编辑
,原因: