目录

堆溢出点

伪造空闲堆块

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

如何利用

参考资料


堆溢出点

图1           堆溢出点

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


伪造空闲堆块

正常的堆块布局

图2           正常堆块布局

溢出后内存布局

图3           溢出后堆块布局


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

    FD = P->fd;                                      \
BK = P->bk; \
if (__builtin_expect (FD->bk != P || BK->fd != P, )) \
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)的更多相关文章

  1. Glibc堆块的向前向后合并与unlink原理机制探究

    i春秋作家:Bug制造机 原文来自:Glibc堆块的向前向后合并与unlink原理机制探究 玩pwn有一段时间了,最近有点生疏了,调起来都不顺手了,所以读读malloc源码回炉一点一点总结反思下. U ...

  2. 内存保护机制及绕过方法——通过伪造SEHOP链绕过SEHOP保护机制

    1.1    SEHOP保护机制 1.1.1    SEHOP工作原理: SEHOP保护机制的核心就是检查SEH链的完整性,其验证代码如下: BOOL RtlIsValidHandler(handle ...

  3. 内存保护机制及绕过方案——从堆中绕过safeSEH

    1.1    SafeSEH内存保护机制 1.1.1    Windows异常处理机制 Windows中主要两种异常处理机制,Windows异常处理(VEH.SEH)和C++异常处理.Windows异 ...

  4. java利用反射绕过私有检查机制实行对private、protected成员变量或方法的访问

    在java中,如果类里面的变量是声明了private的,那么只能在被类中访问,外界不能调用,如果是protected类型的,只能在子类或本包中调用,俗话说没有不透风的墙.但是可以利用java中的反射从 ...

  5. git commit报错解决,绕过代码检查

    上一个项目用的svn,新项目用了git,很开心,终于学习了git了,本以为把git都学会了,但是还是遇到了一个不在自己学习的知识点范围内的问题,最后是同事帮忙解决的. 问题:第一次代码commit的时 ...

  6. SE37 绕过权限检查 ALINK_CALL_TRANSACTION

  7. linux下堆溢出unlink的一个简单例子及利用

    最近认真学习了下linux下堆的管理及堆溢出利用,做下笔记:作者作为初学者,如果有什么写的不对的地方而您又碰巧看到,欢迎指正. 本文用到的例子下载链接https://github.com/ctfs/w ...

  8. Dance In Heap(二):一些堆利用的方法(上)

    0×00 前面的话 在前面的文章里我们稍微有点啰嗦的讲解了堆中的一些细节,包括malloc.free的详细过程,以及一些检查保护机制,那在这篇文章里,我们就开始结合这些机制,以64位为例来看一看如何对 ...

  9. windows程序员进阶系列:《软件调试》之Win32堆的调试支持

    Win32堆的调试支持 为了帮助程序员及时发现堆中的问题,堆管理器提供了以下功能来辅助调试. 1:堆尾检查(Heap Tail Check) HTC,在堆尾添加额外的标记信息,用于检测堆块是否溢出. ...

随机推荐

  1. 每日英语:China Grapples With Genetically Modified Foods

    A Chinese agricultural official's unsupported claims about the carcinogenic risks of consuming genet ...

  2. CentOS 6.2下log4cplus的使用

    一.简介 log4cplus是一款优秀的基于C/C++的开源日志库.log4cplus具有线程安全,不用但心在多线程状态下写日志问题:使用灵活,可通过配置文件设置日志级别下输出位置,还可以在程序运行时 ...

  3. [转]__cdecl与__stdcall

    来自Programming Windows 5th Edition The WinMain function is given a type of WINAPI (as is every Window ...

  4. RabbitMQ之主题(Topic)【译】

    在上一节中,我们改进了我们的日志系统,替换使用fanout exchange仅仅能广播消息,使得选择性的接收日志成为可能. 虽然使用direct exchange改进了我们的系统,但是它仍然由他的局限 ...

  5. [转]Python中函数的值传递和引用传递

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

  6. 使用asp.net调用谷歌地图api

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...

  7. 【BZOJ】1034: [ZJOI2008]泡泡堂BNB(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1034 弱的比弱的强就用,强的比强的强就用: 否则弱的和强的比. 输的情况就是2n-ans(b,a), ...

  8. sdut 2159:Ivan comes again!(第一届山东省省赛原题,STL之set使用)

    Ivan comes again! Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 The Fairy Ivan gave Say ...

  9. systemd新的系统管理方案

    http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html http://www.ruanyifeng.com/blog ...

  10. Leetcode: Merge/Insert Interval

    题目 Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[ ...