本文全为对其他大佬WP的个人理解
1.查看保护机制
可以看到NX保护是没有开启的,所以主要围绕堆栈执行来布局shellcode。
2.ida分析
通过ida的分析,可以明显的看到有堆溢出的漏洞,并且题目是没有输出的功能,就很符合题目的名字NoLeak。
3.首先申请2个chunck(chunck_0,chunck_1)再通过堆溢出,把堆布局成以下的样子。方便下一步进行unlink的操作
4.在delete了chunck_1后,伪造的fake_free_chunck会和chunck_1合并被free掉。此时堆和存放堆指针的buf[]数组如下
此时fake_chunck是和chunck_1合并被free掉,并且通过unlink操作buf[0]的值变成了buf[-3]的地址。
5.然后通过edit(chunck_0)操作,在buf[]中伪造chunck。此时edit(chunck_0),就是往buf[-3]处写入数据,因为buf[0]的值已经变成了buf[-3]的地址。
6.然后连续申请两块大小为0x100的chunck(chunck_2,chunck_3)
6.再free掉chunck_2。
7.然后通过edit(chunck_2),实现unsortedbin attack。
8.当再次申请回同样大小的chunck时,会往(0x601060+0x10)处写入main_arena+88的地址。
9.通过edit(chunck_1),把main_arena+88的地址改为__malloc_hook的地址。
10.通过edit(chunck_0),往bss区写入shellcode。
11.最后通过edit(6),修改__malloc_hook指向为shellcode的地址。此处edit(6)能够执行时因为buf[6]处数据不为0,认为是有这块chunck,但实际上我们没有申请这个chunck。
12.调用malloc函数会执行shellcode。
原文:https://www.cnblogs.com/mio-yy/p/14631860.html