Winamp栈溢出漏洞

漏洞发生在查看版本信息功能,加载whatsnew.txt文件时,使用strcpy复制时没有考虑复制的边界大小造成溢出

原始的whatnew.txt保存版本更新信息

触发漏洞的whatsnew.txt文件内容,保留了version,填充了很多A(\x41)和\x90以及shellcode

OD载入winamp.exe,查找关键字符whatsnew.txt

查找前后汇编代码,找到wfopen操作,在之前的malloc分配空间位置设置断点

运行,点击Help –about winamp — Version history触发断点

单步执行,首先创建0x20000 size,然后wfopen()要读取的文件为同目录下的whatsnew.txt

F8执行,有一处fread函数,读取whatsnew.txt内容,然后将内容复制到ecx地址处

查看此时ecx地址的数据内容变为了shellcode

F8执行,有一处strncmp字符比较

比较的字符是winamp的版本号前9个字符是否是Winamp 5.

继续执行到lstrcpynA字符拷贝函数处

此时栈空间内容,将str2内容复制到str1

执行到retn,程序返回地址为0x070E86AD

查看栈空间,这个地址在nde.dll中

执行,命令为call esp

此时esp值为0xB9EF60

此地址处的命令就是shellcode

运行就会弹出calc

您可能还喜欢...