1. nmap 安装:
官网下载安装包后执行安装命令
rpm -ivh nmap-7.93-1.x86_64.rpm
ps:我安装的时候最新版本为 nmap-7.94-1,这个版本需要安装 python3,但是安装好后依旧会报错:python >= 3.0 is needed by nmap-7.94-1.x86_64,查了下是 7.94-1 的 bug,所以改为安装 7.93-1
2. 测试命令
nmap 官网给出了使用示例:
nmap -sU --script dns-fuzz --script-args timelimit=2h <target>
这个命令会先去扫描所有 UDP 端口(使用抓包工具能看到它在往各个端口发 UDP 包),UDP扫描需要等待超时时间,光执行 nmap -sU 就已经非常耗时了。
dns 服务已经确定了使用 53 端口,完全没有必要测试往其他 UDP 端口发送请求的场景。所以命令中加入 -p 53 参数,指定对 53 端口进行测试:
nmap -sU -p 53 --script dns-fuzz --script-args timelimit=2h <target>
3. 测试结果
(1) xml 输出结果示例
nmap -sU -p 53 -oX output.xml --script dns-fuzz --script-args timelimit=60s x.x.x.x
(2) nse 脚本输入结果示例
nmap -sU -p 53 -oN output.txt --script dns-fuzz --script-args timelimit=60s x.x.x.x
4. 优化方向
dns-fuzz 会构造随机的 dns 请求包,但是有点太过于随机了,我认为对 dns 服务的测试存在局限性。nmap 命令中 --script 参数后可以跟自己写的脚本,可以考虑自己对脚本做一些优化。
5. 关于官网提供的 dns-fuzz 脚本
--script dns-fuzz 使用的脚本可以从官网上下载,但是下载后如果文件名保存为 dns-fuzz.nse,使用 --script dns-fuzz.nse 执行命令,会出现这样的错误:Server didn't response to our probe, can't fuzz。从接收请求的 dns 机器上抓包看到请求的是 scanme.nmap.org,dns 服务中没有这个 zone,所以不响应,超时,导致 nmap 端接收到了这样的报错。
同样的代码,名称叫 dns-fuzz.nse 就发送的是 scanme.nmap.org,换个名称发送的就是错误格式的随机域名查询,直接执行 --script dns-fuzz 也是错误格式随机域名。
大致看了下脚本,脚本中的内容也是对 scanme.nmap.org 的查询,目前还不清楚随机域名的机制是什么。