Nmap介绍: Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具。软件名字Nmap是Network Mapper的简称。Nmap最初是由Fyodor在1997年开始创建的。随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一。官网为:https://nmap.org/ 。
nmap的优点:
安装配置Nmap:
主机发现 主机发现(Host Discovery),即用于发现目标主机是否在线(Alive,处于开启状态)。 主机=发现的原理与Ping命令类似,发送探测包到目标主机,如果收到回复,那么说明目标主机是开启的。Nmap支持十多种不同的主机探测方式,比如发送ICMP ECHO/TIMESTAMP/NETMASK报文、发送TCPSYN/ACK包、发送SCTP INIT/COOKIE-ECHO包,用户可以在不同的条件下灵活选用不同的方式来探测目标机。 Nmap的用户位于源端,IP地址192.168.1.108,向目标主机192.168.1.106发送ICMP Echo Request。如果该请求报文没有被防火墙拦截掉,那么目标机会回复ICMP Echo Reply包回来。以此来确定目标主机是否在线。 默认情况下,Nmap会发送四种不同类型的数据包来探测目标主机是否在线。
-sL List Scan.简单的列表扫描,仅仅是显示,扫描的IP数目,不会进行任何扫描
-sn ping扫描,用于发现主机列表
-Pn 不进行ping扫描,在线处理所有所有主机不检测主机存活。
-PS/PA/PU/PY[portlist] TCP SYN Ping/TCP ACK Ping/UDP Ping发现
-PE/PP/PM 使用ICMP echo, timestamp and netmask 请求包发现主机
-PO[prococol list] 使用IP协议包探测对方主机是否开启
-n/-R 不对IP进行域名反向解析/为所有的IP都进行域名的反响解析
--dns-servers <serv1[,serv2],...> 指定DNS服务器
--traceroute 追踪每个路由节点
主机发现参数实验
在探测外网IP的时候,使用ICMP Echo包探测。如果收到对方的回复包则代表对方存活
端口扫描是Nmap最基本最核心的功能,用于确定目标主机的TCP/UDP端口的开放情况。 默认情况下,Nmap会扫描1000个最有可能开放的TCP端口。 Nmap通过探测将端口划分为6个状态:
-sT TCP connect()扫描,这种扫描会给对方留下扫描日志,动静太大了!
-sS TCP SYN扫描(半开扫描),执行速度快,在没有入侵防火墙的网络上可以快速扫描数千个端口
-sA/sW/sM ACK/TCP窗口扫描/TCP Maimon扫描
-sU UDP扫描
-sN/sF/sX TCP NullFINand Xmas扫描
--scanflags 自定义TCP包中的flags
-sI zombie host[:probeport] Idlescan
-sY/sZ SCTP INIT/COOKIE-ECHO 扫描
-sO 使用IP protocol 扫描确定目标机支持的协议类型
-b “FTP relay host” 使用FTP bounce scan
-sS(TCP SYN 扫描) 这个是Nmap默认的扫描方式,也是最受欢迎的一个参数,该方式接收到SYN到目标端口,如果收到SYN/ACK回复的话则表明该端口处于开发状态;如果收到RST包的话说明该端口是关闭状态;如果没有收到回复的话说明该端口可能被屏蔽了。该方法不建立完整的TCP连接,相对隐蔽,效率高
这里从返回结果可以看到443端口处于开发状态,这里数据包就抓取到了SYN/ACK返回包
但是如果没有收到回复的话,就可以判断为是处于过滤状态。有去无回,这样就不能判断端口是处于开放还是关闭状态
如果对方端口返回RST包的话就是关闭状态了!
-sU(UDP 扫描) UDP扫描用于判断UDP端口的情况,向目标主机的UDP端口发送探测包,如果收到回复ICMP port unreachable就说明该端口是关闭的;如果没有收到回复,那说明该UDP端口可能是开放的或者屏蔽的。因此,通过反向排除法的方式来判断哪些UDP端口是可能处于开放状态的。
-p 特定的端口 -p80,443 或者 -p1-65535
-p U:PORT 扫描udp的某个端口, -p U:53
-F 快速扫描模式,比默认的扫描端口还少
-r 不随机扫描端口,默认是随机扫描的
--top-ports "number" 扫描开放概率最高的number个端口,出现的概率需要参考nmap-services文件,ubuntu中该文件位于/usr/share/nmap.nmap默认扫前1000个
--port-ratio "ratio" 扫描指定频率以上的端口
-sV 开放版本探测,可以直接使用-A同时打开操作系统探测和版本探测
--version-intensity "level" 设置版本扫描强度,强度水平说明了应该使用哪些探测报文。数值越高服务越有可能被正确识别。默认是7
--version-light 打开轻量级模式,为--version-intensity 2的别名
--version-all 尝试所有探测,为--version-intensity 9的别名
--version-trace 显示出详细的版本侦测过程信息
-O 启用操作系统检测,-A来同时启用操作系统检测和版本检测
--osscan-limit 针对指定的目标进行操作系统检测(至少需确知该主机分别有一个open和closed的端口)
--osscan-guess 推测操作系统检测结果,当Nmap无法确定所检测的操作系统时会尽可能地提供最相近的匹配Nmap默认进行这种匹配
-f; --mtu value 指定使用分片、指定数据包的MTU.
-D decoy1,decoy2,ME 使用诱饵隐蔽扫描
-S IP-ADDRESS 源地址欺骗
-e interface 使用指定的接口
-g/ --source-port PROTNUM 使用指定源端口
--proxies url1,[url2],... 使用HTTP或者SOCKS4的代理
--data-length NUM 填充随机数据让数据包长度达到NUM
--ip-options OPTIONS 使用指定的IP选项来发送数据包
--ttl VALUE 设置IP time-to-live域
--spoof-mac ADDR/PREFIX/VEBDOR MAC地址伪装
--badsum 使用错误的checksum来发送数据包
NSE脚本引擎(Nmap Scripting Engine)是nmap最强大,最灵活的功能之一,允许用户自己编写脚本来执行自动化的操作或者扩展nmap的功能。 nmap的脚本库的路径: Linux:/usr/share/nmap/scripts 或 /xx/nmap/scripts/ ,该目录下的文件都是nse脚本 windows:在你nmap文件夹的script目录中 NSE使用Lua脚本语言,并且默认提供了丰富的脚本库,目前已经包含了14个类别的350多个脚本。NSE的设计初衷主要考虑以下几个方面
扫描服务器的常见漏洞
nmap --script=vuln 192.168.8.135
默认脚本扫描
nmap --script=default 192.168.8.135 或者 nmap -sC 192.168.8.135
利用DNS进行子域名暴力破解
nmap --script=dns-brute www.freebuf.com
暴力破解mssql数据库
nmap -p 1433 --script ms-sql-brute --script-args userdb=E://pass//user.txt,passdb=E://pass//pass.txt 192.168.1.109
检测单个漏洞
nmap --script smb-vuln-ms17-010 192.168.1.109
普通单个目标扫描
nmap 192.168.1.106
多个目标扫描
nmap 192.168.1.106 192.168.1.108
指定端口扫描
nmap -p 80,3389,443,445,22,21 192.168.1.106
扫描一个子网,并且排除某个主机
nmap 192.168.1.0/24 -exclude 192.168.1.108
类ping扫描
nmap -sP 192.168.1.1-255
版本检测 本检测是用来扫描目标主机和端口上运行的软件的版本.它不同于其它的扫描技术它不是用来扫描目标主机上开放的端口不过它需要从开放的端口获取信息来判断软件的版本.使用版本检测扫描之前需要先用TCPSYN扫描开放了哪些端口。
nmap -sV 192.168.1.106
操作系统扫描 远程检测操作系统和软件Nmap的OS检测技术在渗透测试中用来了解远程主机的操作系统和软件是非常有用的通过获取的信息你可以知道已知的漏洞。Nmap有一个名为的nmap-OS-DB数据库该数据库包含超过2600操作系统的信息。Nmap把TCP和UDP数据包发送到目标机器上然后检查结果和数据库对照。
nmap -sO 192.168.1.106
具有OS和版本检测的扫描-A
nmap -A192.168.1.106
详细描述输出扫描 扫描的过程很无聊,这个参数是可以在扫描过程中显示扫描的结果,刷刷刷。-v和-vv扫描几乎是一样都都是列出了详细的扫描过程。
Zenmap提供了10个模板,分别是:
查看拓扑可以看到路由追踪的效果
点击端口/主机可以查看获取的端口信息和服务信息