通关栈溢出(五):Winamp 5.572栈溢出漏洞利用
光说不练假把式,从现在开始会写一些漏洞的利用
第一篇文章会从POC的角度分析漏洞并利用。
Target:Winamp
Version:5.572
Detail: Stack overflow
Target
Winamp是一款音乐播放软件,在他的5.572版本中存在一个栈溢出。
它的表现形式是:
当用户点击Help->Abount winamp->Version History时会读取whatsnew.txt文件,并将读取到的数据放置到本地的一个数组中,只是这个过程使用了strcpy函数,从而造成缓冲区溢出。
从网络上得到如下的POC:
1 | # 这里的Shellcode和下方的jmp esp我已修改。calc.exe |
POC也就是whatsnew.txt,由4部分构成,第一部分是Version,这个在之后会讲到。第二部分时填充缓冲区的A字符,第三部分是jmp esp,第四部分是弹出计算器的Shellcode。
Attacking
使用恶意构造的whatsnew.txt替换程序原始的txt文件,重新运行程序,点击Version History,成功溢出。结果如下:
Analysis
使用OllyDbg打开winamp.exe,并运行。
既然程序会读取whatsnew.txt,那么我们就全局搜索这个关键字,看在哪里调用了它。
上滑到text列表的顶部,右键,选择search text,输入whatsnew.txt
能得到如下的两个结果,双击跟进并给他们下断点。
这时候我们点击程序的Version History,发现程序段在了004015B2这个位置,顺着代码继续静态分析。我们能看到程序使用malloc在堆中创建了20000DWROD的空间。
并使用strncmp比较txt文件中的前9个字节,判断是否是Winamp 5.开头,这也是为什么POC中会存在版本号的原因。
最后一步就是执行strcpy,这里就不用再介绍啦。