nmap从入门到实战

一、Nmap基础

1.1、Nmap的简介

Nmap是由Gordon Lyon设计并实现,在1997年开始发布并开源的一个安全扫描软件,Gordon Lyon最初设计Nmap的目的只是打造一个端口扫描工具。但随着时间的推移,Nmap的功能越来越全面,在2009年Nmap发布了标致未来趋势的一个版本5.0版本。这个版本代表着Nmap从最开始的扫描软件变成一个全面的网络安全工具组件。
##1.2、Nmap的基本操作
Nmap使用其实特别简单,只需咋需要下输入nmap +目标地址就可以执行扫描任务,如下:

nmap 192.168.0.1
Starting Nmap 7.30 ( https://nmap.org ) at 2018-11-25 14:21 CST
Nmap scan report for 192.168.0.1
Host is up (0.0049s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 1.50 seconds

在扫描的结果中,生成了关于192.168.0.1主机的报告信息。包括;主机是up的,说明这台主机目前处于联网状态,并且有一个80端口是处于开放状态并可以提供http服务进行访问。

1.3、指定范围扫描

1.3.1连续范围扫描

nmap -sn 192.168.0.1-255
备注:sn参数表示主机是否活跃

Starting Nmap 7.30 ( https://nmap.org ) at 2018-11-25 15:26 CST
Nmap scan report for 192.168.0.1
Host is up (0.0077s latency).
Nmap scan report for 192.168.0.103
Host is up (0.049s latency).
Nmap done: 250 IP addresses (2 hosts up) scanned in 20.02 seconds

1.3.2、对子网连续段进行扫描

命令语法:nmap [ip地址/子网掩码]
nmap -sn 192.168.0.1/24

1.3.3 不连续段扫描

命令语法:nmap 【扫描段1 扫描段2 扫描段3】
nmap -sn 192.168.0.1 192.168.0.99 192.168.0.111

1.3.4 排除某个扫描目标

命令语法:nmap 【目标地址】 --exclude [目标地址]
nmap -sn 192.168.0.0/24 --exclude 192.168.0.111

1.3.5 对文件进行扫描

命令语法:nmap -iL [文本文件]
nmap -sn -iL ip.txt
备注:ip.txt 需要制定路径

1.3.6 随机确定扫描目标

命令语法:nmap -iR [目标的数量]
nmap -sn -iR 5
备注:随机的对互联网5个地址进行扫描

二、活跃主机探测

2.1.1基于ARP协议的活跃主机探测原理

ARP协议位于TCP/IP协议的数据链路层和网络层中间的协议,该协议主要目的是物理地址和逻辑地址的转换工作。我们都在 知道在网络上同一网段的主机进行通讯使用逻辑地址(mac地址),不同网段的主机通讯需要使用逻辑地址通讯(IP地址)。而ARP在中间起到桥梁的作用。
nmap基于ARP活跃主机探测的原理:通过构造ARP广播数据包,如果得到对方的回应说明主机为活跃主机。
这种方式的优点是精准度高,几乎没有噪音。缺点是:扩展性差,不能对扩网段主机进行扫描

2.1.2基于ARP主机探测

ARP探测命令语法:nmap -PR [目标主机]
ARP探测实例:nmap -PR 172.16.1.

2.2基于ICMP协议的活跃主机探测

icmp不管是运维还是开发人员应用最为广泛的协议,几乎每天都在使用。icmp报文可以分为两类:1是差错。2是查询。而查询是我们应用非常多的。包括请求和应答
请求和应答又包括响应请求和应答时间戳请求和应答地址掩码请求和应答

2.2.1通过icmp请求和应答进行主机发现

该种方式主要是使用icmp协议。发送请求,如果得到对方主机的回应,说明主机处于活跃状态。其实就是使用的ping命令来完成的。
这种方式的优点是:方便、快捷,系统集成工具,缺点是:在互联网上基本被防火墙过滤造成准确度很低

基于ICMP协议探测命令语法:nmap -PE 【目标】
实例:nmap -PE 172.16.26.55

2.2.2基于时间戳的请求和应答

这种方式的优点是:方便、快捷,缺点是:在互联网上基本被防火墙过滤造成准确度很低

命令语法:nmap -PP [目标]
实例:nmap -PP  -sn 172.16.26.55

2.2.3基于地址掩码请求应答

命令语法:nmap -PM 【目标】
实例:nmap -PM 172.16.1.55

2.3 基于TCP协议的活跃主机探测

tcp是面向连接的、基于字节流的传输层通讯协议,tcp之所以是连接可靠的协议是因为基于三次握手协商。
tcp三次握手
在nmap中常用的tcp扫描有两种,分别是tcp ack扫描和tcp syn扫描。

2.3.1 基于tcp syn扫描探测

nmap中使用 -PS选项向目标主机发送一个syn标志的数据包,默认探测的目标端口是80(端口可以更改),内容为空。如果收到数据包说明目标主机在线,如果没有收到数据包,说明主机不在线。
基于tcp扫描是最强的扫描技术,服务器,可能会过滤icmp协议。但是几乎没有服务器会屏蔽tcp的syn数据包,因为这是网络通讯所必须使用的协议。

命令语法:nmap -PS 【端口1,端口2,端口3】【目标主机IP】
案例:nmap -PS 172.16.1.55 
备注使用默认的端口进行探测

2.3.2 基于tcp ack扫描

tcp ack扫描使用的是tcp三次握手中的ACK标志位,而tcp syn 使用的是SYN标志位。在实际环境中只有A向B发送syn之后,B才会回应ACK数据包。这种方式是A直接发送ACK给B,B因为没有收到syn一般回复RST,这种通讯模式不符合tcp通讯的逻辑规律,所以该种模式非常容易被防火墙拦截。

命令语法:nmap -PA 172.16.1.55

2.4 基于UDP协议的活跃主机探测

UDP协议是一个传输层协议,与TCP相反,UDP是一个面向无连接的协议。该协议简单很多,没有tcp协议的三次握手,导致业务中经常出现的对udp端口无法进行扫描,不能确定其是否开放。但是nmap的强大之处是可以使用nmap对主机进行发现和探测,当一个udp端口收到一个udp数据包时候,如果该端口是关闭的,就给源发送一个icmp端口不可达数据包,如果该端口是开放的,就丢弃数据包,不返回任何信息。这种方式就可以完成udp主机探测,缺点是扫描结果可靠性非常低。
###2.4.1基于upd进行扫描探测

命令语法:nmap -PU 【目标】
案例:nmap -sn -PU 10.10.26.55

2.5 基于IP协议的活跃主机探测

IP协议是tcpip协议的载体,tcp、udp、icmp以及应用层协议都是封装成IP数据包在网络上进行传输。ip数据包的格式如下:
ip数据包的格式
ip数据包的格式
在ip协议中有一个协议部分,用于标识是哪个协议向ip传送数据,比如:tcp、udp、icmp等。
在nmap中允许向目标主机发送IP数据包来探测对方主机是否处于活跃状态。

命令语法:nmap -sn -PO 【协议编号】 【目标IP地址】
案例:nmap -sn -PO 1,6 10.10.26.55

这种形式发送的数据包内容是空的,非常容易被防火墙等安全设备检测并过滤,为了解决这个问题,可以指定数据大小添加随机生成的数据

命令语法:nmap --data-length [长度数值] [目标IP地址]
案例:nmap --data-length 66 172.16.36.6

2.6总结

nmap是一个非常强大的工具,以上是我看了《诸神之眼 nmap网络安全审计技术解密》之后写下的一点总结吧。以后还会持续的更新。
其实研究nmap一点要研究他的本质,在nmpa中提供了一种方法--pachket-trace选项,通过它可以观察nmap发出去那些包,收到哪些数据包,可以让你更深入的研究nmap。
使用sctp的PY选项对目标主机进行扫描

root@ubuntu1:/# nmap -sn -PY 122.114.9.2
Starting Nmap 7.01 ( https://nmap.org ) at 2018-11-27 02:48 UTC
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 2.06 seconds

通过扫描发现该主机是不活跃的,但是真实的情况这台主机是处于活跃状态的,导致原因是目标主机不支持sctp协议。如下源主机发送的请求但是没有收到对方的回复数据包。

root@ubuntu1:/# nmap -sn -PY 122.114.9.2 --packet-trace

Starting Nmap 7.01 ( https://nmap.org ) at 2018-11-27 02:59 UTC
SENT (0.0244s) SCTP 172.16.36.185:44449 > 122.114.19.242:80 ttl=48 id=25483 iplen=52 
SENT (1.0255s) SCTP 172.16.36.185:44450 > 122.114.19.242:80 ttl=44 id=15676 iplen=52 
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 2.05 seconds

使用同样的方法对内网主机进行扫描,被扫描的主机也没有安装sctp协议。但是结果却大大出乎我们的意料之外

root@ubuntu1:/# nmap -sn -PY 172.16.36.6

Starting Nmap 7.01 ( https://nmap.org ) at 2018-11-27 03:02 UTC
Nmap scan report for bogon (172.16.36.6)
Host is up (0.00046s latency).
MAC Address: FA:16:3E:18:4B:2F (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds

同时是没有安装sctp协议,为什么内网主机就有回复的数据包呢,可以使用--packet-trace看一下究竟是什么原因导致的。

root@ubuntu1:/# nmap -sn -PY 172.16.36.6 --packet-trace

Starting Nmap 7.01 ( https://nmap.org ) at 2018-11-27 03:02 UTC
SENT (0.0272s) ARP who-has 172.16.36.6 tell 172.16.36.185
RCVD (0.0277s) ARP reply 172.16.36.6 is-at FA:16:3E:18:47:2F
Nmap scan report for bogon (172.16.36.6)
Host is up (0.00048s latency).
MAC Address: FA:16:3E:18:4B:2F (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.26 seconds

通过以上分析,你就更加明白nmap的原理了。
nmap不管在何种情况下都会探测是否属于统一子网环境,如果是处于统一子网环境nmap直接使用arp进行探测,因为nmap认为在局域网中arp是最为精准的。

三、nmap端口扫描

3.1nmap端口定义

在nmap给出6中端口的不同状态。

状态描述
open表明该端口处于开放状态,可以接收相应的报文数据包
closed表明该端口是不可访问的,没有程序在监听
filtered存在防火墙等设备对目标数据包进行了过滤,无法判断是否开放状态
unfiltered表明目标端口是不可访问的,无法判断是否开放相应端口,一般ack扫描会出这种情况
open or filtered无法确定端口是开放还是被过滤
closed or filtered无法确定端口是开放还是被过滤,一般只在idle扫描中会出现

3.2 nmap端口扫描

扫描方法描述
-sS/sT/sA/sW/sM指定使用tcpsyn/connect()/ack/window/maimon scans的方式对目标主机进行扫描
-sUUDP方式扫描端口
-sN/sF/sX使用tcp Null、FIN/Xmas scans等方式协助探测对方tcp端口状态
-scanflags定制tcp包的flags
-sI<zombie host[:probeport]>指定使用Idle scan扫描目标主机
-sY/sZ使用sctp init/cookie-echo扫描sctp协议端口情况
-sO使用ip协议扫描目标主机支持的协议
-b使用ftp扫描方式
-p扫描指定端口
-F快速扫描,仅仅扫描top100端口
-r随机扫描,不容易被安全设备检测到
–top-ports扫描开放概率最高的端口个数

3.2.1 SYN扫描

在nmap进行端口扫描中,syn扫描是一种非常好的扫描方式,这种扫描非常准确而且速度快。更重要的是这种扫描方式不会在目标网络的安全设备上被报警
syn扫描原理

syn扫描语法:nmap -sS 【目标地址】
实例:nmap -sS 122.114.19.242

3.2.2 connect扫描

connect扫描语法:nmap -sS 【目标地址】
实例:nmap -sS 122.114.19.242

connect 扫描
connect 扫描方式语SYN扫描方式非常相似,只是在tcp三次握手阶段,syn扫描没有完成三次握手,而connect扫描完成类三次握手,这种方式缺点是容易被对端防火墙拦截或检测。优点是不需要使用管理员权限就可以执行命令。

命令语法:nmap -sT [目标主机]
实例:nmap -sT 10.10.36.55

UDP扫描
udp扫描方式因协议无连接,不可靠性,造成udp扫描到准确率非常低。

命令语法:nmap -sU [target]
案例:nmap -sU 10.10.36.55

FIN扫描放送
tcp fin扫描方式是向目标主机直接发送Fin数据包,对于目标端口如果处于关闭状态,会发送一个RST数据包,表明该端口处于关闭状态

命令语法:nmap -sF [target]
案例:nmap -sF 10.10.36.55

NULL扫描
tcp null扫描方式是想目标系统发送一个不包含任何标志到数据包,目标系统会向源主机发送一个RST
数据包,表明该端口处于关闭状态。

命令语法:nmap -sN [target]
案例:nmap -sN 10.10.36.55

xmas tree扫描
tcp xmas tree扫描方式是向目标端口发送一个含有FIN/URG/PUSH标志位到数据包,对于关闭的端口目标主机返回RST数据包,表示改端口是处于关闭状态。

nmap -sX [target]
nmap -sX 10.10.36.55

idle扫描
该种方式非常隐蔽,扫描着不需要相目标主机发送任何数据包,需要依靠第三方主机对目标进行扫描。

  1. 检测第三方ip.id的值并记录下来
    2.在本机伪造一个源主机为第三方主机到数据包,兵将数据包发送到目标主机端口
    3.查看第三方主机到ip id值是否有变化。
    在这个工程中,需要伪造第三方数据包,在nmap中可以使用decoy scanning (-D)的功能,可以隐藏字自己到身份。通过这种方式目标日志服务器上记录的是第三方地址,这样就可以达到隐藏自己信息到目的。

nmap指定扫描得端口

端口选项描述
-F[target]扫描常见到100个端口
-p[port]指定一个端口
-pU:[udp ports],T:[tcp ports]使用协议扫描指定端口
-p*扫描所有端口
–top-ports[number]扫描常用端口

扫描常见到100个端口

command:nmap -F [target]
case:nmap -f 172.16.36.55

指定一个端口

command:nmap -p [port or portname] [target]
case:    nmap -p 8080,90 172.16.36.55

使用协议指定端口

command:nmap -p U:[udp ports],T:[tcp ports] [target]
case:    nmap -sU -sT -p U:4500,T:22 172.16.36.55

扫描所有端口

command:nmap -p "*" [target]
case:    nmap -p * 172.16.36.55

如上是最经常使用到nmap扫描技术。

四、远程操作系统检测

在nmap进行远程主机检测,是利用tcp或在udp协议,通过向目标系统发送数据包,远程主机回应得数据包猜测系统。一般通过检查初始序列号(ISN),TCO选项/ip标示符(ID)数字签名/显示拥塞通知(ECN
)窗口大小等。每个操作系统对于这些探针都会做出不同到响应。通过nmap提取到这些特种并写入到数据库中。nmap回尝试验证如下参数:

名称描述信息
供应商名称系统供应商名称,例如红旗linux
操作系统系统名词。例如:windows/linux
系统版本系统到版本信息 例如:win7 winxp
设备类型路由器/打印机/扫描仪

在扫描中nmap默认使用tcp syn方式进行主动方式的扫描。并会将扫描结果保存到Nmap-os-db操作系统指纹数据库文件中,在以后进行扫描中nmap会将目标系统到扫描结果与该数据库到值进行比较,从而得出目标操作系统到类型
对目标系统到扫描

command:nmap -F -O [target]
case:    nmap -f -O 172.16.36.55

在nmap中扫描操作系统到可选项有几个:

选项描述
–osscan-limit对满足同时具有open和close的端口为条件得主机进行系统探测
–osscan-guess猜测最接近目标到操作系统类型
–max-retries对操作系统检测尝试到次数,默认为5次
命令语法:nmap -O [target]
命令语法:nmap -sV -F --fuzzy --osscan-guess [target]
命令语法:nmap -O -F --fuzzy --osscan-guess [target]

nmap 确定操作系统类型基本是通过猜测到方式获取**-osscan-guess**,并不能100%给到真实到操作系统,在这种情况下,nmap会输出目标系统到指纹文件,并给出操作系统得可能性。

##nmap进行服务发现
nmap在进行服务识别需要三个步骤

  1. 端口扫描
  2. 进行服务识别,发送探针报文,得到确认值
  3. 进行版本识别,发送探针报文,得到确认值,分析服务的版本信息
    在nmap中提供了非常精准的服务和版本检测选项
命令语法:nmap -sV [target]
                  nmap -A [target]
备注:-sV 是版本探测
          -A  操作系统探测和服务探测

在使用sV扫描时,会发送一系列报文,每个报文都会赋予一个1~9之间的数值,数值越高,服务越被正确识别,默认是值是7,高强度扫描会花费更多的时间。
为了提高扫描的速度,nmap中也提供了轻量级扫描模式

nmap --version-light -sV
相当于:nmap --version-intensity 2

这种模式速度快很多,但是扫描成功率低了很多。

nmap --version-all -sV
相当于:nmap --version-intensity 9

对每个端口尝试探测所有报文。

nmap --version-trace -sV
nmap -packet-trace -sV

该命令可以打印出正在进行扫描的详情调试信息

五、nmap高级技术与防御措施

接下来进入nmap高级功能的介绍,很多人只知道nmap端口扫描很强大,不知道的是nmap提供逃避防火墙或者躲避IDS规则的功能和技巧。nmap有无所不能的强大功能,废话不多少。

  1. nmap -f [target]
    参数-f可以对nmap发送的探测数据包进行分段处理,讲一个数据包分成几个小包发送,使目标防火墙或者ips更难以发现和阻拦。
命令语法:nmap -f 【target】
实例:nmap -f 172.16.1.55
备注:该功能不能再Windows主机上运行
  1. nmap -mtu (指定mtu大小)
    在网络中以太网的最大mtu是1500,如果应用层一次的数据大于1500,就需要对报文进行分片。在nmap中使用-mtu选项指定mtu的大小,同时mtu的值必须是8的整数倍。
命令语法:nmap -mtu [mtu大小] [target]
实例:   nmap -mtu 64 172.16.36.55
  1. nmap -D 诱饵ip1,诱饵ip2,诱饵ip3,自己的IP
    使用诱饵IP地址隐藏真实的IP地址,在进行信息收集阶段,扫描的源ip地址可能被对方的ids记录。有个方法是同时伪造大量的源IP地址对目标地址进行扫描。同时也可以加入自己的真实ip地址进行伪造,最好把自己的真实地址放到第六个伪造地址以后,这样一些ids就不会发现真实的IP地址。
    值得注意的是,诱饵主机必须是处于在线状态,否则这次扫描就会变成syn洪水攻击。
命令语法:nmap -D RND:<number> [target]
案例:nmap -D RND:8 172.16.36.55

使用互联网上随机找的8个IP地址对目标IP进行扫描。
4. nmap --source-port [portnumber]; -g [portnumber]
在网络中有些配置不当导致,运行互联网的某个源端口可以访问一个公司的业务系统,例如,一个公司,运行互联网的21端口访问公司的服务器系统,这就给攻击者造成了可乘之机,可以使用--source-port 或者-g,nmap就可以通过这个源端口发送数据包,对目标进行探测扫描

命令语法:nmap --source-port [portnumber] [target]
案例:    nmap --source-port 21 172.16.36.55
         nmap -g 1029 172.16.36.55
  1. –data-length 指定发送报文的大小,让fw任务是正常的数据
command:nmap --data-length <number> <target>
case: nmap --data-length 50 172.16.36.55

6、–ttl 指定ttl值进行欺骗

command: nmap --ttl <value> <target>
case:nmap --ttl 254 172.16.36.55

7、–spoof-mac <mac address,prefix,or vendor name> 伪造mac地址进行欺骗

command:nmap -sS --spoof-mac 0 172.16.36.55
case:nmap -sS --spoof-mac 0 172.16.36.55
spoof参数含有
0选择一个随机mac地址

公众号

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值