• pwnable第17题到第21题知识点记录


    第十七题 memcpy

    点击此链接查看解题过程

    首先记录一下做这道题需要了解的知识点:

    asm volatile

    在fast_memecpy函数中有一个函数调用为:asm volatile
    “asm” 表示后面的代码为内嵌汇编,“volatile” 表示编译器不要优化代码后面的指令, 保留原样。该函数有四个参数,中间用:隔开,函数格式为__asm__ volatile(汇编语句模板: 输出部分: 输入部分: 破坏描述部分),其中汇编语句模块是必须存在的一个参数,更多内容可以点击此链接查看

    MOVDQA

    接下来是MOVDQA汇编指令,该指令在执行时必须对齐16字节边界,否则会生成一般保护性异常,而本题的解决方案也主要是针对这个指令。

    malloc堆分配

    堆分配过程

    在使用malloc函数进行堆分配时由于堆还需要包含一些头部信息和相关数据(保存在header中),因此molloc(size)分配的实际大小应该是大于size的,在32位系统中molloc的header长度通常为4字节,而64位系统中为8字节,同样,在molloc分配数据的字节对齐时32位系统是以8字节为单位而64位系统是以16字节为单位,这也是为什么当这个程序如果拉取到64位的本地系统时是能够正常运行的原因。
    通读整个程序,发现程序如果能够正常执行10的话就能输出正确的代码,当在线运行时输入数据后可以发现当执行到第五次的时候程序就直接中断执行。
    在这里插入图片描述
    这是因为在执行前四次时由于size<64因此fast_memcpy直接调用slow_memcpy来执行,而第五次时由于数据大于64且不能达到16个字节对齐,因此会发生异常。

    由于我安装的是64位系统,无法复现漏洞过程,因此在这也只能说一下原理:
    由于MOVDQA汇编指令在执行过程中需要16字节对齐,由下面的代码可以看出用户需要先输入一个数据,然后使用malloc分配size长度的空间,而malloc在32位系统下进行字节分配的时候是以8个字节为单位进行空间分配的,如果长度不足8个字节依然会按照8个字节分配,同时还有一个长度为4字节的header。因此分配的实际值在满足16字节对齐满足一下两种情况的一种即可
    a)(size+4)%16==0
    b)(size+4)%16>8 (此时也会分配一个完整的16字节的长度)
    在这里插入图片描述

    编写代码如下:

    for i in range(4,14):
        low = pow(2,i-1)
        high = pow(2,i)
        #print low,high
        
    
        for j in range(low+1,high):
    
            if((j+4)%16==0 or (j+4)%16>=9):
                print (j)
                break
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    执行程序得到结果:
    在这里插入图片描述
    在这里插入图片描述

    答案:1_w4nn4_br34K_th3_m3m0ry_4lignm3nt

    遇见问题

    调试gcc时报错fatal error: bits/libc-header-start.h: No such file or directory 27 | #inclu

    在这里插入图片描述
    这是因为gcc缺少一些库函数导致的,直接运行下面的代码进行下载对应的库函数即可

    sudo apt install gcc-multilib
    
    • 1
  • 相关阅读:
    PhalAPI学习笔记 ——— 第三章细致讲解使用PSR-4规范自定义你的命名空间
    【数据结构与算法】无重复字符的最长子串
    网络安全-对称加密和非对称加密基础
    Python入门教程之基本语法详解,收藏慢慢学~
    Microsoft宣布将在开发人员会议上专注于.NET Aspire
    基于STM32人脸识别系统方案设计(程序代码+设计说明书)
    14.it的用法
    Python是信奥的基础吗,学习信奥要不要先学python
    软考考生注意!2022年下半年报名详细流程来了!
    JVM学习笔记(1)——类加载子系统
  • 原文地址:https://blog.csdn.net/weixin_42877778/article/details/126352786