码迷,mamicode.com
首页 > 系统相关 > 详细

伪造堆块绕过unlink检查(ctf-QiangWangCup-2015-shellman)

时间:2017-01-08 12:34:25      阅读:1553      评论:0      收藏:0      [点我收藏+]

标签:err   corrupt   margin   isp   linux   strong   释放   http   9.png   

目录

堆溢出点

伪造空闲堆块

释放时重写指向伪造堆块的指针

如何利用

参考资料

 


堆溢出点

技术分享

图1           堆溢出点

  在edit函数中,没有对输入的长度和原来的长度做判断。


伪造空闲堆块

正常的堆块布局

技术分享

图2           正常堆块布局

溢出后内存布局

技术分享

图3           溢出后堆块布局


释放时重写指向伪造堆块的指针

    FD = P->fd;                                          BK = P->bk;                                          if (__builtin_expect (FD->bk != P || BK->fd != P, 0))                    malloc_printerr (check_action, "corrupted double-linked list", P, AV);      else {                                              FD->bk = BK;                                          BK->fd = FD;

  这样就使得string_ptr1=&string_ptr1-0x18


如何利用

编辑string1的内容

技术分享

图4           修改string_ptr1的内容

    可以看到,由于string_ptr1指向了& string_ptr1-0x18,所以我们修改内容时候,再一次将string_ptr1指针的值修改了。修改为指向free的GOT表项。

查看string1内容

    此时查看string_ptr1的内容就可以把free函数的地址打印出来了。

再一次编辑string1的内容

    这个时候编译string1意味着什么呢?意味着修改free的GOT表项中的地址。那么随后的free调用,起始就是调用我们写入的函数。我们写入system地址

释放string3

    free(string_ptr3)意味着什么?

    system(“/bin/sh;”)


参考资料

[1] linux堆溢出实例分析

http://tyrande000.how/2016/03/21/linux%E5%A0%86%E6%BA%A2%E5%87%BA%E5%AE%9E%E4%BE%8B%E5%88%86%E6%9E%90/

 

伪造堆块绕过unlink检查(ctf-QiangWangCup-2015-shellman)

标签:err   corrupt   margin   isp   linux   strong   释放   http   9.png   

原文地址:http://www.cnblogs.com/shangye/p/6261606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!