白帽故事 · 2024年5月5日

端口扫描,你真的会用了吗?

背景介绍

你是否使用与别人相同的端口扫描却没有得到理想的结果?深入了解端口扫描策略,将使你从初学者转变为’高手’。端口扫描器有很多,比如 naabu、rustscan、masscan等等,在某些领域,一种工具可能比另一种工具更好,但为什么要重新发明轮子? nmap 基本可以满足你的日常所需,它在速度和覆盖范围也具有很好的平衡性。

很多新手都说nmap很慢,但没有多少人知道nmap的某些功能可以使其比 naabu speed-wise 更好用,让我们逐步分解端口扫描策略,让你在端口扫描这件事上‘与众不同’。

选择目标

在漏洞挖掘中通常会使用几种方法——要么选择一个程序,要么同时对多个目标程序进行漏洞挖掘。

在本文中,将主要针对第二种方法,对于多个目标,笔者一般使用 bbscope 来获取主要目标,如果只收集来自 Bugcrowd 的公共程序,可以使用:

bbscope bc -b <TOKEN> | tee bbscope.txt

然后手动将 bbscope.txt 收集的结果过滤到两个不同的文件中:

  • ips.txt — 包含 IP 和 IP 范围
  • hosts.txt — 包含多个来自公共漏洞赏金计划的网站(已排除通配符域,只留下了 www 站点或主页)

file

扫描主机

使用 nmap 运行的第一个命令是针对主机名的,nmap使用如下命令:

nmap -iL hosts.txt -Pn --min-rate 5000 --max-retries 1 --max-scan-delay 20ms -T4 --top-ports 1000 --exclude-ports 22,80,443,53,5060,8080 --open -oX nmap.xml

上面命令的作用是:

  • -iL ports.txt — 传递包含主机​​名的文件
  • -Pn — 跳过主机发现
  • -min-rate 5000 — 这定义了每个请求发送的数据包数量,更多会提高速度,但设置太多有时可能会丢失端口或被防火墙阻止
  • -max-retries 1 — 默认情况下,nmap 将进行多次重试,因此使用 1 甚至 0 会大大提高其速度
  • -max-scan-delay 20ms — 每次扫描之间的时间
  • -T4 — nmap 速度选项,最大是 T5,从速度和覆盖范围的平衡性考虑,建议选T4
  • -top-ports 1000 — 扫描最常见的 1000 个端口
  • -exclude-ports 22,80,443,53,5060,8080 — 用以排除哪些端口
  • -open — 仅检查那些未被过滤或关闭的
  • -oX nmap.xml — 以 XML 格式保存输出

以上对 500 台主机进行了测试,扫描只花了大约 6 分钟。

file

获得 XML 输出后,下一步要做的就是将该 XML 文件解析为 IP:PORT 格式,需要写一个自动脚本,从标准输入获取文件并使用 xmlint 库来获取 ipv4 IP,对于每个找到的 IP,还将匹配打开的端口并将输出打印到屏幕:

curl -s 'https://gist.githubusercontent.com/ott3rly/7bd162b1f2de4dcf3d65de07a530a326/raw/83c68d246b857dcf04d88c2db9d54b4b8a4c885a/nmap-xml-to-httpx.sh' | bash -s - nmap.xml

以上命令将从 gist 请求脚本,并在传递 nmap.xml 文件时使用 bash 执行,最终结果会像下面:

123.321.22.100:1333
13.32.222.13:1334
123.31.222.103:1335
...

另外,还可以将其传输到 httpx 检查响应状态:

curl -s 'https://gist.githubusercontent.com/ott3rly/7bd162b1f2de4dcf3d65de07a530a326/raw/83c68d246b857dcf04d88c2db9d54b4b8a4c885a/nmap-xml-to-httpx.sh' | bash -s - nmap.xml | httpx -mc 200

扫描IP范围

现在尝试对 IP 和 IP 范围文件执行相同的命令,使用相同的选项,但输出文件会有所不同:

nmap -iL ips.txt -Pn --min-rate 5000 --max-retries 1 --max-scan-delay 20ms -T4 --top-ports 1000 --exclude-ports 22,80,443,53,5060,8080 --open -oX nmap2.xml

对于以上扫描,超过 23000 个 IP 地址,共花费了 5 个多小时。建议睡觉的时候把这样的扫描在后台运行。

file

当然,也不要太过度的进行 nmap 扫描,因为过多的端口扫描可能会让网络提供商对你的网络速度进行限制,接下来同样要做的是转换为 XML 输出:

curl -s 'https://gist.githubusercontent.com/ott3rly/7bd162b1f2de4dcf3d65de07a530a326/raw/83c68d246b857dcf04d88c2db9d54b4b8a4c885a/nmap-xml-to-httpx.sh' | bash -s - nmap2.xml

更好的扫描体验

建议1

很多人可能认为axiom端口扫描的一个不错的选择,但在使用axiom之前最好做好控制,这实际上违反了许多云厂商的服务条款,你的帐户可能会因使用端口扫描而被‘冻结’。

建议2

理想情况下,你可能希望使用计算机上的 cron 计划任务来每天扫描主要目标一次或两次,为了使过程更简单,建议查看 crontab.guru 网站,学习 cron 语法,然后在终端中打开 crontab 粘贴你想要定期运行的脚本。

例如,下面的 cron 作业将每 12 小时运行一次指定的 nmap 命令:

file

建议3

如果想快速扫描大量 IP,建议尝试使用 nullt3r 的 jfscan 工具,它将 nmap 与 Masscan 合并在一起,将使你的‘任务’变得更加轻松,但记住,这是以覆盖范围来换取速度。

以上内容由骨哥翻译并整理,希望对你有所帮助。

更多工具

原文:https://infosecwriteups.com/port-scanning-for-bug-bounties-b28b23ce9fbf