Nmap
尽量看官方文档,网上很多文章中的内容可能并不准确。
扫多个地址用空格分隔
root@gbb:~# nmap ip1 ip2
扫描一个 list 文本,文本内的地址要以空格、tab、或换行分隔。
root@gbb:~# cat 1
www.baidu.com
www.raingray.com
172.16.4.0/24
172.16.4.195-254
root@gbb:~# nmap -iL 1
常用选项
- -A,用来检测操作系统(-O)及其服务版本的探测(-sV)
- -sS (TCP SYN扫描),当 SYN 扫不了就用下面 TCP/UDP 选项
- -sT,扫 TCP,TCP 会建立完整连接
- -sU,扫 UDP,都是以 -s 开头的选项可以写作,-sSV 就等同于 -sS -sV 两个选项。
- -n,不对 ip 进行反向解析,避免解析浪费时间。
- -p,-p 用于指定端口,比如 -p 80,-p 1-1000,-p-等同于-p 1-65535
- -Pn,跳过主机发现的过程,不管主机是不是存活,直接进行端口扫描、版本检测或操作系统检测。在老版本中 -P0 也是一样的作用。
- --open,仅显示开放(或可能开放)的端口
- -sn(-sP),在老版本 nmap 中叫 -sP,发送 ICMP 探测主机存活,不进行端口扫描。
-sn会发送icmp echo请求、tcp syn to port 443、tcp ack to port 80和 icmp timestamp 请求组成。当由非特权用户执行时,只有SYN包被发送(使用连接调用)到目标上的端口 80 和 443。当特权用户试图扫描本地以太网上的目标时,除非指定了 --send ip,否则将使用 arp 请求。 - -oN filename,将结果输出到文件,也可以叫做扫描日志。
- --resume filename,恢复中断的扫描,人家是按照你上次扫描的日志(-oN filename)进度接着扫。
- -T,调整扫描速度,一共五个挡位,默认为 T3,一般网络良好情况下使用 T4。在 T3 及以上级别都会被 IDS/IPS 检测到流量。
- -vv,显示扫描详细日志。
例子
# 用 nmap 先收集一个段存活的主机的地址,然后针对性的进行扫速度会快。
nmap -PU 145.1.51.12/24 -On xx主机存活扫描结果
# 不进行主机存活测试(发送一个icmp和80),优先扫常用端口对TCP syn扫描 1-65535,UDP123、161、53、5060 已经打开的端口
nmap -Pn -n --open -sS -sU -r -p T:1-65535,U:123,161,53,5060 -iL /root/filename
NES
调用 NES 脚本,在线文档 https://nmap.org/nsedoc/scripts/
Kali 中脚本目录 /usr/share/nmap/scripts/
,Windows 对应的也是 Nmap 安装目录中 scripts 目录。
nmap --script=vuln #可以扫漏洞,调用时不用加文件后缀。
nmap -sC #等同于 --script=default 可以拿 --script-help=default 来看都用了哪些脚本。
常用脚本介绍
...
常用套路
使用 whatweb 来探测存活应用。
whatweb
帮你把所有域名或 IP 测试一遍能不能访问(80 or 443)
-i #读取文件
-p title #筛选出有title字段的页面
一个坑是,在使用 awk 处理数据可能会有问题,这时可以把color取消掉--color=never
。
用 Nmap 扫描结果取出IP
awk '{print $5}' scan_result_file | grep ^[0-9] > xx_ip
取出端口
awk -F '/' '{print $1}' scan_result_file | grep ^[0-9] | sort -n | uniq > xx_port
将 IP 后面添加冒号用于 whatweb 扫描
sed -i 's/$/:/g' xx_ip
使用 whatweb 进行 Web 应用发现,碰到 443(https)怎么处理?不可能直接访问 443 端口吧,这样会报错的!其次这里逻辑有问题它测试的次数是基于 port 数量的一一对应,并不是每个 IP 都会测试 xx_port 中所有端口。
cat xx_port | xargs -n 1 whatweb -p title --no-errors --color=never -i xx_ip --url-suffix | grep -v '\[ Unassigned' > xx_active
#扫描单个 IP 的话直接在后面加上冒号就行
cat xx_port | xargs -n 1 whatweb --color=never -p title xx.xx.xx.xx: --url-suffix
这个脚本是对 nmap 扫描结果处理的改进版,用循环来解决每个 IP 探测指定文件中的端口。
#!/bin/bash
# get ip
awk '{print $5}' $1 | grep ^[0-9].[0-9].[0-9].[0-9] > process_nmap_ip && sed -i 's/$/:/g' process_nmap_ip
# get port
awk -F '/' '{print $1}' $1 | grep ^[0-9] | grep -v service | sort -n | uniq > process_nmap_port
if [ $? -eq 0 ]
then
echo "port address process complete"
else
echo "port address process fialed"
fi
# get active web applications
line=`wc -l process_nmap_ip | awk '{print $1}'`
while [ $line -gt 1 ]
do
for ip in `cat process_nmap_ip`
do
cat process_nmap_port | xargs -n 1 whatweb -p title --no-errors --color=never $ip --url-suffix |\
grep -v '\[ Unassigned' >> whatweb-micro-active
line=$[ $line - 1 ]
done
done
if [ $? -eq 0 ]
then
echo "whatweb test completed"
else
echo "whatweb test failed"
fi
挑出错误页面(不一定是 404)用 https 访问一次,可能会有惊喜。
grep -v '404' | awk '{print $1}' | sed 's/http/https/g' | xargs -n 1 whatweb -p title --no-errors --color=never | grep -v '\[ Unassigned' >> active
其实这个完全可以用 Python 多线程写个脚本代替 whatweb,有空再补充。
httpx
一个 http 工具,默认使用 HTTP 1.1 发送请求,当目标存活输出 URL。
首先会用 https 发送请求,无法发送退行至 http。这个工具很好的解决了探测 Web 应用的需求。
选项
- -l: 在文本中读取目标,内容可以是域名或加上 schema 的完整 URL。
- -title: 在结果中显示 title
- -status-code: 显示状态码
- -content-length: 显示内容长度
- -H: 指定 Http Header 工具在默认情况下 UA 是带特征的,可以重复指定一个值替换掉
- -follow-redirects: 有重定向时跟进
- -no-color: 输出结果不显示颜色,颜色会被当作字符记录在结果中不方便后续文本处理。
- -silent: 不显示工具 Banner 信息,直接输出结果。
- -threads: 设置线程。
- -o: 保存结果。
- -ports: 指定要扫描的端口。
echo "http://www.jinlz.com:80/bbs/dispbbs.asp?boardid=8&ID=140805&replyID=140805" | ./httpx.exe -title
-status-code -content-length -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" -follow-redirects -no-color -silent -o resul t.txt
一些常用套餐
周期性扫描,用日期作为文件有区分扫描结果。
nmap --open -n -Pn -sS -p- -T4 -iL ip > result-`date +%Y%m%d`
参考链接
- 上一篇: Linux-DNS服务
- 下一篇: sqlmap