目录
用法:nmap [扫描类型] [选项] {目标指定内容}
一、目标指定:
-iL <输⼊⽂件名>
-iR <主机数量>
--exclude <主机 1 [, 主机 2][, 主机 3],...>
--excludefile <排除⽂件>
二、主机发现:
-sL
-sn
-Pn
-PS/PA/PU/PY [端⼝列表]
-PE/PP/PM
-PO [协议列表]
-n/-R
--dns-servers <服务器 1 [, 服务器 2],...>
--system-dns
--traceroute
三、扫描技术:
-sS/sT/sA/sW/sM
-sU
-sN/sF/sX
--scanflags <标志>
-sI <僵⼫主机 [: 探测端⼝]>
-sY/sZ
-sO
-b
四、端口指定及扫描顺序:
-p <端⼝范围>
--exclude-ports <端⼝范围>
-F
-r
--top-ports <数量>
--port-ratio <⽐例>
五、服务 / 版本检测:
-sV
--version-intensity <级别>
--version-light
--version-all
--version-trace
六、脚本扫描:
-sC
--script=
--script-args==v1,[n2=v2,...]>
--script-args-file=filename
--script-trace
--script-updatedb
--script-help=
七、操作系统检测:
-O
--osscan-limit
--osscan-guess
八、定时与性能:
-T<0 - 5>
--min-hostgroup/max-hostgroup <⼤⼩>
--min-parallelism/max-parallelism <探测数量>
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <时间>
--max-retries <尝试次数>
--host-timeout <时间>
--scan-delay/--max-scan-delay <时间>
--min-rate <数量>
九、防火墙 / 入侵检测系统规避与欺骗:
-f; --mtu <值>
-D <诱饵 1, 诱饵 2 [, 我⾃⼰],...>
-S
-e <接⼝>
-g/--source-port <端⼝号>
--proxies ,[url2],...>
--data <⼗六进制字符串>
--data-string <字符串>
--data-length <数字>
--ip-options <选项>
--ttl <值>
--spoof-mac
--badsum
十、输出:
-oN/-oX/-oS/-oG <⽂件>
-oA <基本名>
-v
-d
--reason
--open
--packet-trace
--iflist
--append-output
--resume <⽂件名>
--noninteractive
--stylesheet <路径 / URL>
--webxml
--no-stylesheet
十一、其他:
-6
-A
--send-eth/--send-ip
--privileged
--unprivileged
-V
-h
十二、示例:
nmap -v -A scanme.nmap.org
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
nmap -v -iR 10000 -Pn -p 80
# ⽤例
⼀、红队渗透步骤
主机发现
端口扫描
详细信息扫描
# 原理
一、没有nmap进行主机发现(Linux bash命令为例)
二、没有nmap进行端口扫描
1. 使用进行旧版nc端口扫描
可以传入主机名、IP 地址、网络等。
例如: scanme.nmap.org 、 microsoft.com/24 、192.168.0.1;10.0.0 - 255.1 - 254
-iL <输⼊⽂件名>
:从主机 / ⽹络列表中读取输⼊内容。
-iR <主机数量>
:随机选择⽬标主机。
--exclude <主机 1 [, 主机 2][, 主机 3],...>
:排除指定的主机 / ⽹络。
--excludefile <排除⽂件>
:从⽂件中的列表排除相关内容。
-sL
:列表扫描 - 仅列出要扫描的⽬标。
-sn
:Ping 扫描 - 禁⽤端⼝扫描。
-Pn
:将所有主机视为在线状态 - 跳过主机发现步骤。
-PS/PA/PU/PY [端⼝列表]
:对给定端⼝进⾏ TCP SYN/ACK、UDP 或 SCTP 发现操作。
-PE/PP/PM
:ICMP 回显、时间戳和⼦⽹掩码请求发现探测。
-PO [协议列表]
:IP 协议 Ping。
-n/-R
:从不进⾏ DNS 解析 / 总是进⾏ DNS 解析(默认:有时进⾏)。
--dns-servers <服务器 1 [, 服务器 2],...>
:指定⾃定义 DNS 服务器。
--system-dns
:使⽤操作系统的 DNS 解析器。
--traceroute
:追踪到每个主机的跃点路径。
-sS/sT/sA/sW/sM
:TCP SYN/Connect ()/ACK/Window/Maimon 扫描。
-sU
:UDP 扫描。
-sN/sF/sX
:TCP Null、FIN 和 Xmas 扫描。
--scanflags <标志>
:⾃定义 TCP 扫描标志。
-sI <僵⼫主机 [: 探测端⼝]>
:空闲扫描。
-sY/sZ
:SCTP INIT/COOKIE-ECHO 扫描。
-sO
:IP 协议扫描。
-b <FTP 中继主机>
:FTP 反弹扫描。
-p <端⼝范围>
:仅扫描指定的端⼝。
例如:-p22;-p1 - 65535;-p U:53,111,137,T:21 - 25,80,139,8080,S:9
--exclude-ports <端⼝范围>
:从扫描中排除指定的端⼝。
-F
:快速模式 - 扫描的端⼝⽐默认扫描的要少。
-r
:按顺序扫描端⼝ - 不随机排列。
--top-ports <数量>
:扫描 <数量> 个最常⻅的端⼝。
--port-ratio <⽐例>
:扫描⽐ <⽐例> 更常⻅的端⼝。
-sV
:探测开放端⼝以确定服务 / 版本信息。
--version-intensity <级别>
:设置从 0(轻度)到 9(尝试所有探测)的强度。
--version-light
:限制为最有可能的探测(强度为 2)。
--version-all
:尝试每⼀个单独的探测(强度为 9)。
--version-trace
:显⽰详细的版本扫描活动(⽤于调试)。
-sC
:等同于 --script=default。
--script=<Lua 脚本>
:<Lua 脚本> 是⼀个由逗号分隔的⽬录、脚本⽂件或脚本类别列表。
--script-args=<n1=v1,[n2=v2,...]>
:为脚本提供参数。
--script-args-file=filename
:在⽂件中提供 NSE 脚本参数。
--script-trace
:显⽰所有发送和接收的数据。
--script-updatedb
:更新脚本数据库。
--script-help=<Lua 脚本>
:显⽰关于脚本的帮助信息。
<Lua 脚本> 是⼀个由逗号分隔的脚本⽂件或脚本类别列表。
-O
:启⽤操作系统检测。
--osscan-limit
:将操作系统检测限制在有希望的⽬标上。
--osscan-guess
:更积极地猜测操作系统。
选项中涉及的 <时间> 单位为秒,或者可以在数值后附加 'ms'(毫秒)、's'(秒)、'm'(分钟)或 'h'(小
时)(例如 30m)。
-T<0 - 5>
:设置定时模板(数值越⾼速度越快)。
--min-hostgroup/max-hostgroup <⼤⼩>
:并⾏主机扫描组的⼤⼩。
--min-parallelism/max-parallelism <探测数量>
:探测并⾏化。
--min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <时间>
:指定探测往返时间。
--max-retries <尝试次数>
:限制端⼝扫描探测的重传次数。
--host-timeout <时间>
:在经过这段时间后放弃对⽬标的扫描。
--scan-delay/--max-scan-delay <时间>
:调整探测之间的延迟。
--min-rate <数量>
:每秒发送数据包的速度不低于 <数量>。
-f; --mtu <值>
:对数据包进⾏分⽚(可指定 MTU 值)。
-D <诱饵 1, 诱饵 2 [, 我⾃⼰],...>
:⽤诱饵掩盖扫描。
-S <IP 地址>
:伪造源地址。
-e <接⼝>
:使⽤指定的接⼝。
-g/--source-port <端⼝号>
:使⽤给定的端⼝号。
--proxies <url1,[url2],...>
:通过 HTTP/SOCKS4 代理转发连接。
--data <⼗六进制字符串>
:在发送的数据包上附加⾃定义负载。
--data-string <字符串>
:在发送的数据包上附加⾃定义 ASCII 字符串。
--data-length <数字>
:在发送的数据包上附加随机数据。
--ip-options <选项>
:发送带有指定 IP 选项的数据包。
--ttl <值>
:设置 IP ⽣存时间字段。
--spoof-mac <MAC 地址 / 前缀 / ⼚商名称>
:伪造你的 MAC 地址。
--badsum
:发送带有错误 TCP/UDP/SCTP 校验和的数据包。
-oN/-oX/-oS/-oG <⽂件>
:分别以普通、XML、脚本⼩⼦、可搜索格式将扫描结果输出到给定的⽂件名 中。
-oA <基本名>
:同时以三种主要格式输出。
-v
:提⾼详细程度级别(使⽤ -vv 或更⾼级别可获得更强效果)。
-d
:提⾼调试级别(使⽤ -dd 或更⾼级别可获得更强效果)。
--reason
:显⽰端⼝处于特定状态的原因。
--open
:只显⽰开放(或可能开放)的端⼝。
--packet-trace
:显⽰所有发送和接收的数据包。
--iflist
:打印主机接⼝和路由(⽤于调试)。
--append-output
:追加到指定的输出⽂件⽽不是覆盖它们。
--resume <⽂件名>
:恢复⼀个中断的扫描。
--noninteractive
:禁⽤通过键盘进⾏的运⾏时交互。
--stylesheet <路径 / URL>
:将 XML 输出转换为 HTML 的 XSL 样式表。
--webxml
:参考 Nmap.org
上的样式表以获得更具可移植性的 XML。
--no-stylesheet
:防⽌将 XSL 样式表与 XML 输出关联。
-6
:启⽤ IPv6 扫描。
-A
:启⽤操作系统检测、版本检测、脚本扫描和追踪路由。--datadir <⽬录名>
:指定⾃定义 Nmap 数据⽂件的位置。
--send-eth/--send-ip
:使⽤原始以太⽹帧或 IP 数据包发送。
--privileged
:假设⽤⼾具有完全的特权。
--unprivileged
:假设⽤⼾没有原始套接字特权。
-V
:打印版本号。
-h
:打印此帮助概要⻚⾯。
nmap -v -A scanme.nmap.org
:详细地对 scanme.nmap.org
进⾏操作系统检测、版本检测、脚
本扫描和追踪路由。
nmap -v -sn 192.168.0.0/16 10.0.0.0/8
:详细地对 192.168.0.0/16 和 10.0.0.0/8 ⽹段进⾏ Ping 扫描
(不进⾏端⼝扫描)。
nmap -v -iR 10000 -Pn -p 80
:详细地随机选择 10000 个⽬标,将所有⽬标视为在线状态,只扫描端⼝ 80。
使用nmap进行分阶段分任务的扫描,避免流量过大,让目标服务器发现
主机发现
nmap -sn 127.0.0.0/24
端口扫描
nmap -sT --min-rate 10000 -p- 127.0.0.1 -oA nmapsc/ports
1.扫描⽅式:-sS与-sT
-sS以SYN包的形式,-sT以TCP三次握⼿的形式
-sS扫描速度更快但不稳定,-sT相对较慢但是稳定
2.--min-rate 指定最⼩发包速率
3.-p 指定ip 后⾯的-是 1-65535端⼝的缩写,不写的话就会扫描nmap默认的⼏个端⼝
4.-o 格式化输出 后⾯的A是all的缩写,或将所有形式输出 但是⼀般的不会有多种形式输出
详细信息扫描
nmap -sT -sV -sC -O -p22,80,443 127.0.0.1 -oA nmapsc/detail
该扫描是比较重的扫描所以指定发现端口。
1.-sV 扫描各服务的版本2.-sC 使⽤nmap默认脚本进⾏扫描
3.-O 扫描⽬标机器的操作系统
udp扫描
namp -sU --top-ports 20 127.0.0.1 -oA nmapsc/udp
该扫描是对UDP协议进行发现,避免遗漏信息丢失攻击面
1.-sU 使⽤UDP的扫描⽅式
2.--top-ports 20 针对常⻅的20个端⼝进⾏扫描
脚本扫描
nmap --script=vuln -p22,80,443 127.0.0.1 -oA nmapsc/vuln
使用脚本进行漏洞扫描,vuln是nmap中默认扫描漏洞的一个常用脚本。
nmap -sn 192.169.3.0/24 其实是封装的系统的ping命令
for i in {1..254};do ping -c 1 -W 1 192.168.3.$i;done
解析:-c ->count数量 1 -W ->超时时间 1
bash循环语法: for i in {};do 命令;done
执行后发现Ctrl+c并不能停止,这里涉及到控制台信号的知识
可以按下Ctrl+z让这些命令放到后台去执行
然后输入命令 kill -9 %1 (%1是指最近执行的命令,结束进程)
进一步进行筛选优化执行(使用grep进行特征筛选)
for i in {1..254};do ping -c 1 -W 1 192.168.3.$i | grep from;done
1. 使用进行旧版nc端口扫描
nmap --min-rate 1000 -p- 192.168.3.100
使用旧版nc进行端口扫描
kali中旧版nc使用 (并用来进行端口扫描) (1-65535中找就相当于大海捞针所以就必须对信息进行过滤)
nc.teaditional -vv -z 192.168.3.120 1-65535
解析: -vv 详细信息输出 -z 零数据传输
所以需要搜索出一些开放的端口和一些未开放的端口,筛选出文本特征,然后利用grep进行筛选
nc.teaditional -vv -z 192.168.3.120 1-65535 2>&1| grep -v refused
解析: grep 后面的 -v ,是反向的意思,就是将匹配到refused的数据删除。
2>&1 是⼀个重定向操作,它的作⽤是将标准错误输出( 2 )重定向到标准输出( 1 )的位置。这样做的⽬的是把原本会输出到标准错误输出(通常是显⽰错误信息等)的内容也合并到标准输出流中,以 便后续可以统⼀进⾏处理。
2.使用伪设备进行端口扫描
for i in {1..65535};do (echo < /dev/tcp/192.168.3.120/$i) &>/dev/null && printf " [+]The Open Port is:%d " "$i" || printf ".";done
解析:&& 需要前面的命令成功执行才会执行后面的命令