目录
nmap简介
Nmap是一款开源、免费的网络探测、安全审计工具。
主要作用
- 探测一组主机是否在线
- 扫描主机端口,嗅探所提供的网络服务
- 推断主机所用的操作系统
nmap原理
**理解:**nmap安装在电脑之后,电脑就可以使用nmap发送数据包,nmap在探测远程机器时会发送大量的数据包,并且通过输入的命令进行判断,判断nmap输入的命令中是否包含域名,若包含域名,则需要利用DNS服务器进行域名解析,然后发送ICMP Echo Request来探测主机存活性,若判断该主机存活,就会发送对应的其他数据包到远程机器,远程机器就会根据接收到的数据包做出对应的响应发送到nmap,nmap就会根据返回的响应进行解析得到对应的机器信息
**nmap官网:**https://nmap.org/
namp使用
**语法:**nmap [options] 域名信息/IP地址
options
- **--dns-servers dns地址:**指定特定dns服务器解析域名
- **--script 脚本名称:**使用nmap的脚本
- **-e 网卡名:**指定网卡进行探测
- **-Pn:**不触发防火墙安全机制的扫描,停止之前的ICMP请求
- **-p m-n:**扫描m-n范围之间的所有端口(当然也可以仅指定一个端口扫描)
- **-p m,n:**扫描m端口和n端口
- -p T:m ,Un **:**指定tcp协议探测m号端口,udp协议探测n号端口
- **-p 协议名:**扫描对应协议的所有端口
- **-p-:**对该服务的所有端口进行探测
- **-sV:**识别目标机器的服务信息
- **-A:**使用侵略性的策略进行探测(操作系统识别、端口服务指纹识别)
- **-v:**持续输出返回的解析(按回车来查看)
- **-Tn:**n的范围为1-5,探测速度由慢到快
- **-sC:**使用nmap脚本进行探测
- **-O:**探测目标机器上的操作系统信息
- **-sP CIDR:**进行批量扫描(使用此参数后面需要接的时CIDR,不需要接IP地址)
- **-sn CIDR:**对该网络中所有主机进行ping扫描,验证存活性
- **-oX xxx.xml:**nmap探测结果输出到xxx.xml文件中
- **-d debug:**启动调试模式(debug范围0-9)
**nmap技术查看:**nmap -h
nmap列举远程机器开放端口
普通扫描
**扫描scanme.nmap.org信息:**nmap scanme.nmap.org
**注意:**nmap进行探测之前要把域名通过DNS服务器解析为IP地址,我们也可以使用指定的DNS服务器进行解析(使用--dns-servers参数指定)
**指定dns扫描域名:**nmap --dns-server 8.8.8.8 scanme.nmap.org
扫描范围端口
**前言:**对于默认的端口范围,并不能够满足日常工作的需要。可以使用-p m-n来指定m-n之间的所有端口。
**扫描0-100之间的端口:**nmap -p 0-100 scanme.nmap.org
对几个端口探测
**扫描服务的80,135端口:**nmap -p 80,135 scanme.nmap.org
对所有端口进行探测
**扫描服务的所有端口:**nmap -p- 192.168.1.4
指定协议探测端口
**语法:**nmap -p T:25,U53 scanme.nmap.org
**解释:**对于scanme.nmap.org服务,以tcp协议探测25号端口,udp协议探测53号端口(有对应协议的端口则显示,没有则不显示)
扫描对应协议的所有端口
**扫描ssh协议端口:**nmap -p ssh scanme.nmap.org
**注意:**协议名写可以用通配符(s*代表所有以s开头的协议端口都被扫描)
端口状态
nmap识别目标机器上服务的指纹
服务指纹
- 为了确保有一个成功的渗透测试或网络设备监控,必须要知道目标系统中服务的指纹信息。服务指纹信息包括服务端口号,服务名和版本等
- 通过分析目标往nmap发送的数据包中某些协议标记、选项和数据,我们可以推断发送这些数据包的操作系统等
- nmap通过向目标主机发送多个UDP和TCP数据包并分析其响应来进行操作系统指纹识别工作
识别目标机器服务信息
**识别scanme.nmap.org服务信息:**nmap -sV scanme.nmap.org
注意:-sV表示识别目标机器上的服务信息
nmap侵略性探测
探测目标机器操作系统、服务等
**语法1:**nmap -A -v -T4 scanme.nmap.org
- **-A:**使用侵略性的策略进行探测(操作系统识别、端口服务指纹识别)
- **-v:**持续输出返回的解析(按回车来查看)
- **-Tn:**n的范围为1-5,探测速度由慢到快
**语法2:**nmap -sC -sV -O scanme.nmap.org
- **-sC:**使用nmap脚本进行探测
- **-sV:**识别目标机器的服务信息
- **-O:**探测目标机器上的操作系统信息
发现局域网中存活的主机
前言
- 一个局域网中肯定连接着多台设备,可以使用ping命令来进行地址探测,但是若一个网络很大,这样的探测就很费劲
- CIDR无类别域间路由,其可以快速表示一个网络(172.16.1.1/24表示在172.16.1.1-172.16.1.255之间所有的主机IP地址)
nmap主机发现
对该网络中所有主机ping扫描
**语法1:**nmap -sP CIDR
**语法2:**nmap -sn CIDR
**注意:**扫描过程中nmap使用了TCP SYN扫描、ICMP echo Request来探测主机存活
**案例:**nmap -sP 192.168.1.1/24
nmap结果输出
**语法:**nmap -sn CIDR -oX test.xml
**理解:**对该网络中所有主机进行ping扫描,同时将结果输出到test.xml中
**执行:**nmap -sn 192.168.1.1/24 -oX test.xml
由此观之多出来个test.xml文件。
NSE脚本的使用
NSE介绍
- NSE为nmap脚本引擎,内置了很多可以用来扫描的,特定任务的脚本。通过NSE可以不断拓展nmap的扫描策略,加强nmap的功能
- Nmap中使用--script参数来指定调用的脚本,并且脚本存储在Nmap安装路径下的script文件夹中,对于kail linux存储在/usr/share/nmap/script/下
使用脚本获取服务title
**语法:**nmap --script http-title scanme.nmap.org
**注意:**以上通过nmap使用http-title脚本进行探测,还可以使用其他脚本进行探测。到目前为止可以用的有589个脚本,每个脚本都有其独特的功能。
脚本总结
- **http-title:**获取服务的title
- **http-headers:**获取服务的请求头
nmap使用多个分类脚本
**前言:**对于目标使用多个分类脚本进行探测,可以更快的找到目标的信息及弱点
**语法:**nmap -sV --script vuln scanme.nmap.org
分类脚本
- **vuln:**漏洞分类脚本
- **--script="version,discovery":**版本信息分类脚本
NSE调试功能使用
**语法:**nmap -sV --script vuln -d 3 192.168.1.4
注意:
- -d debug表示调试模式启动,debug范围0-9
- 这样可以更加细致的查看脚本的过程
NSE更新
**语法:**nmap --script-updatedb
**作用:**更新脚本引擎
使用特定网卡进行探测
前言
- nmap是一款可扩展性强的工具,并且有些NSE脚本支持嗅探。但是这种功能需要网卡支持混杂模式才可以。或者当计算机上有两张网卡,并且两张网卡对应着不同网络
- nmap中提供了切换特定网卡功能的参数-e
查看所有网卡
**语法:**nmap --iflist
指定网卡进行探测
**语法:**nmap -e 网卡名 CIDR
**解释:**指定网卡可以对不同的网段进行探测,前提是电脑必须有多个网卡,设置多个网段
**注意:**若不指定网卡那么就会依次尝试向这些网卡发送数据包,若联通就会继续探测,若不连通就会换下一张网卡进行探测
对比扫描结果ndiff
前言: 对比某个网络进行探测的时候,有可能之前探测过的结果,经过探测之后,需要对之前的结果与现在的结果进行对比,找到两次的不同点(**目的:**监视网络变化,以达到网络监控的目的)
ndiff工具
前言
- 在nmap整个工程中,除了主要的nmap工具外,还包括很多其他的工具,接下来要使用nidiff工具
- ndiff主要作用就是比较两个nmap的xml文件,比较他们的不同点
**查看ndiff帮助:**ndiff -h
使用方法
这里用windows扫描kail(192.168.1.5)
**探测kail操作系统和服务:**nmap -A -v -T4 192.168.1.5 -oX kail1.xml
**kail启动一个服务,监听8000端口:**nc -l -p 8000
**探测kail操作系统和服务:**nmap -A -v -T4 192.168.1.5 -oX kail2.xml
**比较nmap两次扫描的结果:**ndiff kail1.xml kail2.xml
注意:-代表kail1文件内容,+代表kail2文件中的内容