目录

堆溢出点

伪造空闲堆块

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

如何利用

参考资料


堆溢出点

图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. SAP ERP 6.0 EHP7 SR2(WINDOWS MSSQL版)安装说明

    原文 by 枫竹丹青 ⋅ 1.安装准备 1.1.版本说明 本文是描述在一个Windows虚拟机.SQL Server数据库环境下,安装SAP ERP 6.0 EHP7 SR2服务器,安装完成虚拟机文件 ...

  2. 基于HTML5 Canvas可撕裂布料效果

    分享一款布料效果的 HTML5 Canvas 应用演示,效果逼真.你会看到,借助 Canvas 的强大绘图和动画功能,只需很少的代码就能实现让您屏息凝神的效果. 在线预览   源码下载 实现的代码. ...

  3. Android——Android Bundle类(转)

    今天发现自己连Bundle类都没有搞清楚,于是花时间研究了一下. 根据google官方的文档(http://developer.android.com/reference/android/os/Bun ...

  4. Java运行结果测试

  5. NodeJS与Javascript时代

    如果你一直在关注互联网的相关技术,你应该会有这样一种感觉,web技术正在发生着变革,虽然我们不愿相信,但一个事实已经越来越清晰的摆在了眼前:LAMP组合的时代将要成为历史,在web诞生的二十年间,它影 ...

  6. SQL on Hadoop 的真相(2)

    转自:http://blog.jobbole.com/87159/ 这是一组系列博客,目的是详尽介绍 SQL-on-Hadoop .该系列的第一篇会介绍一些存储引擎和在线事务处理(简称 OLTP )相 ...

  7. php -- 修改字符串的编码格式

    网上的都是这样用的 $content = iconv("utf-8","gb2312",$content); 这样做其实也对着了,看着确实是把utf-8转化为g ...

  8. CONTEST23 2014xmoi邀请赛(被pj虐哭)

    http://www.luogu.org/contest/show?tid=23 表示被普及的虐瞎了T_T_T_T_T_T_T_TT_T_T_T_T_T_T_T_T 33名100多分滚粗 各种贪心神题 ...

  9. Virtual Box下安装Oracle Linux 6.3

    Oracle Linux 6.3已经公布快2年了,其功能有非常大的提升,增强了KVM,文件卷的在线resizing,LVM支持 raid4, 5, 6.支持很多其它的虚拟CPU数以及更大内存,详细能够 ...

  10. 兔子--android中百度地图的开发

    效果: API Key的申请地址:http://lbsyun.baidu.com/apiconsole/key 申请注意事项: 安全码:以下界面的SHA1  fingerprint值+;+包名 比如: ...