Nmap常用命令及扫描原理
Posted Spe4r
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nmap常用命令及扫描原理相关的知识,希望对你有一定的参考价值。
Nmap常用参数
-sS TCP SYN扫描
-sU UDP扫描
-sA ACK扫描
-sW 窗口扫描
–scanflags RSTSYNFIN 自定义扫描
-O 检测目标操作系统类型
-sV 检测目标上运行服务的版本
-v 增加输出信息的详细程度
-vv 增加输出详细程度为2
-oA 将nmap输出保存为三种主要格式
-oN 将nmap输出保存为正常格式
-A 全部扫描 激进模式
-T<1-5> 扫描速度 扫描速度越快会被发现的几率就会越高
-p<1-65535> 扫描端口
-p- 扫描所有端口
–script 激活脚本
–script=vuln 激活vuln类别中的所有脚本
-F 100 个最常见的端口
–max-rate 50 速率 <= 50 包/秒
–min-rate 15 速率 >= 15 包/秒
–min-parallelism 100 至少 100 个并行探头
–reason 提供有关其推理和结论的更多详细信息
Nmap主机扫描
如果想使用 Nmap 来发现在线主机而不需要对实时系统进行端口扫描,可以使用nmap -sn TARGETS
扫描类型 | 示例命令 |
---|---|
ARP扫描 | sudo nmap -PR -sn MACHINE_IP/24 |
ICMP 回波扫描 | sudo nmap -PE -sn MACHINE_IP/24 |
ICMP 时间戳扫描 | sudo nmap -PP -sn MACHINE_IP/24 |
ICMP 地址掩码扫描 | sudo nmap -PM -sn MACHINE_IP/24 |
TCP SYN Ping 扫描 | sudo nmap -PS22,80,443 -sn MACHINE_IP/30 |
TCP ACK Ping 扫描 | sudo nmap -PA22,80,443 -sn MACHINE_IP/30 |
UDP Ping 扫描 | sudo nmap -PU53,161,162 -sn MACHINE_IP/30 |
Nmap端口扫描类型
在使用nmap进行端口扫描时,有三种基本的扫描类型:
- TCP连接扫描(
-sT
) - SYN半开扫描(
-sS
) - ACK扫描 (
-sA
) - UDP扫描(
-sU
) - TCP窗口扫描 (
-sW
)
此外,还有三种不太常见的端口扫描类型(用于绕过防火墙):
- TCP NULL扫描(
-sN
) - TCP FIN扫描(
-sF
) - TCP Xmas扫描(
-sX
)
TCP连接扫描原理
TCP扫描与目标执行完整的三次握手
如果Nmap发送一个带有SYN标志的TCP请求到关闭的端口,目标服务器将相应一个带有RST(重置)标志的TCP数据包,通过这个响应,Nmap可以确定端口已经关闭。
如果请求被发送到一个开放的端口,目标将响应一个设置了 SYN/ACK 标志的TCP数据包。Nmap 然后将此端口标记为打开
许多防火墙被配置为简单地丢弃
传入的数据包。Nmap 发送一个TCP SYN 请求,但什么也没有收到。这表明该端口受到防火墙的保护,因此该端口被视为已过滤
。
SYN扫描原理
SYN扫描有时被称为半开
扫描或隐形
扫描
SYN 扫描在收到来自服务器的 SYN/ACK 后发回一个 RST TCP 数据包
如果使用sudo运行Nmap,Nmap的默认扫描类型是SYN扫描,否则默认使用TCP连接扫描
UDP扫描原理
当一个数据包被发送到一个
开放
的UDP端口时,应该没有响应。发生这种情况时,Nmap 将端口称为 isopen|filtered
。换句话说,它怀疑端口是开放的,但它可能被防火墙了。如果它得到一个UDP响应(这是非常不寻常的),那么该端口被标记为open。更常见的是没有响应,在这种情况下,请求会再次发送以进行双重检查。如果仍然没有响应,则将该端口标记为open|filtered
当一个数据包被发送到一个
关闭
的UDP端口时,目标应该用一个ICMP (ping)
数据包来响应,其中包含一个端口不可达的消息。这清楚地标识了关闭的端口。
通常UDP扫描非常慢 启用--top-ports <number>
可以获得可接受的扫描时间
ICMP网络扫描
Ping扫描
Nmap 向指定网络的每个可能的 IP 地址发送一个 ICMP 数据包。当它收到响应时,它会将响应的 IP 地址标记为活动的。
执行ping扫描 将-sn
和IP范围结合使用,ip范围用字符-
或者CIDR表示法指定。例如
nmap -sn 192.168.0.1-254
nmap -sn 192.168.0.0/24
Nmap服务检测
namp -sV
将收集和确定开放端口的服务和版本信息
-sV
将强制 Nmap 继续进行TCP 3 次握手并建立连接
可以控制强度
--version-intensity <0-9>
-sV --version-light
强度为 2,
-sV --version-all
强度为 9.
NSE脚本
使用Lua语言编写
脚本类别
-
safe
:- 不会影响目标 -
intrusive
:- 不安全:可能影响目标 -
vuln
:- 扫描漏洞 -
exploit
:- 尝试利用漏洞 -
auth
:- 尝试绕过正在运行的服务的身份验证(例如匿名登录FTP服务器) -
brute
:- 尝试暴力破解运行服务的凭据 -
discovery
:- 尝试查询正在运行的服务以获取有关网络的更多信息(例如查询 SNMP 服务器)。可以在此处找到更详尽的列表。
如果运行该命令--script=safe
,则将针对目标运行任何适用的安全脚本
要运行特定脚本,我们将使用--script=<script-name>
,例如--script=http-fileupload-exploiter
。
多个脚本可以以这种方式同时运行,方法是用逗号分隔它们。例如:--script=smb-enum-users,smb-enum-shares
。
某些脚本需要参数,可以通过--script-args
给出
例如:
nmap -p 80 --script http-put --script-args http-put.url='/dav/shell.php',http-put.file='./shell.php'
Nmap 脚本带有内置的帮助菜单,可以使用nmap --script-help <script-name>
搜索脚本
Nmap 将其脚本存储在Linux上的/usr/share/nmap/scripts
/usr/share/nmap/scripts/script.db
这实际上并不是一个数据库,而是一个包含每个可用脚本的文件名和类别的格式化文本文件。
可以通过grep来查找脚本
grep "ftp" /usr/share/nmap/scripts/script.db
ls命令查找脚本
ls -l /usr/share/nmap/scripts/*ftp*
相同的技术也可用于搜索脚本类别
grep "safe" /usr/share/nmap/scripts/script.db
绕过防火墙
典型 Windows 主机将使用其默认防火墙阻止所有 ICMP 数据包
Nmap 为此提供了一个选项:-Pn
它告诉 Nmap 在扫描主机之前不要打扰它。这意味着 Nmap 将始终将目标主机视为活动的,有效地绕过 ICMP 块。
以下参数对绕过防火墙很有用:
-f
:- 用于对数据包进行分段(即,将它们拆分成更小的部分),从而降低防火墙或IDS检测到数据包的可能性。- 提供对数据包大小的更多控制:
--mtu <number>
,接受用于发送的数据包的最大传输单元大小。这必须是 8 的倍数。 --scan-delay <time>ms
:- 用于在发送的数据包之间添加延迟。如果网络不稳定,这非常有用,但也可以用于规避任何可能存在的基于时间的防火墙/IDS 触发器。--badsum
:- 这用于为数据包生成无效校验和。任何真正的 TCP/IP 堆栈都会丢弃此数据包,但是,防火墙可能会自动响应,而无需检查数据包的校验和。因此,此参数可用于确定防火墙/IDS 的存在。
保存输出
-oN | 以正常格式保存输出 |
---|---|
-oG | 以 grepable 格式保存输出 |
-oX | 以XML格式保存输出 |
-oA | 以普通、XML和 Grepable 格式保存输出 |
以上是关于Nmap常用命令及扫描原理的主要内容,如果未能解决你的问题,请参考以下文章