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编辑
,原因: