在进行nmap扫描工具的使用之前,我们首先要了解一下TCP、ICMP协议以及一些常见的端口号
TCP协议:
其中:源端口占16位,端口号范围就是0-65535(2的16次幂)
目的端口占16位
接下来就是nmap的学习了
1.Nmap进行探测之前要把域名通过DNS服务器解析为ip地址,也可以使用指定的DNS服务器进行解析。使用--dns–servers参数来指定
比如:nmap–dns–servers8.8.8.8nmap.org
2.对于已经知道主机存活或者防火墙开启的机器,可以使用-Pn参数来停止探测之前的ICMP请求,已达到不触发防火墙安全机制。
3.对于默认的端口范围,可以使用-pm-n来指定探测端口范围为m-n之间的所有端口
比如:nmap–p1-1000nmap.org
4.使用nmap–sVip地址来识别目标主机的服务信息
使用nmap–A–v–T4ip地址(侵略性的扫描)进行更加详细的服务信息
使用nmap-sC-sV–oip地址(侵略性的扫描)来探测目标主机的操作系统、服务等信息
其中sC表示使用nmap脚本进行探测,sV表示探测目标主机的服务信息,o表示探测目标机的操作系统信息。
小提示:我们可在命令行输入nmap–h来查看nmap自带的帮助信息
Nmap扫描过程:Nmap扫描目标的方式
注意:下面的截图中介绍了CIDR
参数:
-iL
-iR
一、主机发现
一个局域网中肯定连接着多台设备,那么我们如何获取哪些设备正在开机状态呢?
你肯定想到了使用pingip地址进行探测的,但是如果一个网络很大的情况下,这样的手工探测会显得很费时费力。那么我们就可以利用nmap所给的参数对特定的服务进行探测啦!
主机发现原理:一般通过发送ARP、ICMP、TCPsyn/ack或UDP组合到目标主机,根据主机存活
发送包的回应确认主机是否存在
比如:nmap–sP192.168.27.1.1/24
上面是nmap两个简单扫描例子,仅反馈了一些简单的信息,但是对于其他的数据收集,nmap里面有详细的参数可以实现,下面将开始讲解一些常用参数的使用:
扫描参数:
1.-sL不做扫描,仅完成DNS解析和网址的转换
2.-sP(Ping扫描)
发送一个ICMP回声请求和一个tcp报文到80端口。如果非特权用户执行,就发送一个SYN报文(用connect()系统调用)到目标主机的80端口;当特权用户扫描局域网上的目标主机时,会发送ARP请求(-PR)
3.-PN不用ping
4.-Ps(TCPSYNPing)发TCP协议SYN标记的空包(80端口)
5.-PA(TCPACKPing)发TCP协议ACK标记的空包(80端口)
-发送一个设置了SYN标志位空TCP报文,默认端口80
-发送一个设置了TCP的ACK标志位的空报文,默认端口80
-以上两个参数一般用于绕过状态检测防火墙,可以两者结合使用
6.-PU(UDPPing)
-目标机器的端口是关闭的,UDP探测应该马上得到一个icmp端口无法到达的回应报文,穿过设置了TCP过滤的防火墙
7.-PE-PP-PMICMPpingTypes扫描
使用ICMPEcho扫描方式nmap-PE-v127.0.0.1
使用ICMP地址掩码ping扫描nmap-PM-v127.0.0.1
8.-P0(无ping扫描)
-禁止主机发现,并对每一个指定目标的ip地址进行深度扫描
如果想知道协议是如何判断目标主机是否存在使用--packet-trace
nmap-p0--packet-trace127.0.0.1
9.-PR(ARPping)
10.-PYSCTPINITping扫描nmap-PY-v127.0.0.1
通过向目标发送INIT包,根据目标主机的返回情况判断目标主机是否存活
设置参数:
--traceroute-n(禁止DNS反向解析,不会对目标ip地址做反向域名解析)nmap-n127.0.0.1-R(DNS解析所有的地址,默认不解析不在线的IP)nmap-R-sL127.0.0.1--system-dns(使用系统DNS)namp--system-dns127.0.0.1127.0.0.2--dns-servers
-6扫描IPV6地址nmap-6fe80::d920:6c18:1f7f:3d7c
nmap--traceroute-v127.0.0.1
二、端口扫描
端口状态的详细解释:
1.Open,端口开启,有程序监听此端口2.Closed,端口关闭,数据能到达主机,但是没有程序监听此端口。3.Filtered,数据未能到达主机。4.Unfiltered,数据能到达主机,但是Nmap无法判断端口开启还是关闭。5.Open|filtered,端口没有返回值,主要出现在UDP,IP,FIN,NULL和Xmas扫描6.Closed|filtered,只出现在IPIDidle扫描。
使用命令:nmap–p80nmap.org对其80端口进行探测
nmap–p1-100nmap.org对端口1-100进行探测
nmap–p-nmap.org对所有端口进行探测
通过名称范围扫描(扫描以s开头的服务)namp–ps*nmap.org
指定协议探测端口nmap–pT:25,U:53nmap.org
通过协议名来扫描端口nmap–psshnmap.org
注意上面的适用范围.
小插入:
使用nmap探测web服务的title信息
命令:nmap--script脚本名称目标
NSE的脚本分类可以打开nmap.org/nsedoc这个网站进行详细的查看
三、服务和版本探测
有时候nmap探测出来的服务和版本信息并不是非常准确,不过我们可以通过加参数的方式使其精确
1.-sV:探测开放端口的服务和版本信息可以借助-A选项进行操作系统探测和版本探测.结果信息更详细和直观.
2.--version-intensity<0-9>:设置探测深度,默认是7。数值越大,强度越大。
6.--allports全端口版本扫描
四、操作系统探测
1.-O:启动操作系统识别。
2.--osscan-limit:对指定的目标进行操作系统检测(该选项仅在使用-O或-A进行操作系统检测时起作用.)nmap-O--osscan-limit127.0.0.1/243.--osscan-guest
--osscan-guess;--fuzzy推测系统版本(当无法准确识别的时候,nmap会从最接近数据中取值,大胆的猜测目标系统.)
例如:nmap-O--osscan-guess127.0.0.1
五、防火墙/IDS躲避和哄骗
1.-f报文分段nmap-sX-v-F127.0.0.1(ping扫描目标主机)
如果在无法获知目标主机的端口是否开放.此时尝试使用报文分段进行扫描.
例如:nmap-f-v127.0.0.1
2.--mtu指定偏移大小
例如:nmap--mtu16127.0.0.1
3.-DIP欺骗(IP欺骗的语法如下:Nmap-D[decoy1,decoy2...|RND:number][目标])
(使用-D选项可以指定多个ip地址,或者使用RND随机生成几个地址,在指定的诱饵之间使用逗号进行分割,需要注意的是在进行版本检测或者TCP扫描的时候诱饵是无效的.)
例如:nmap-DRND:11127.0.0.1
随机的方法容易发现,接下来将指定几个IP地址对目标实施扫描来达到更好的效果.
例如:nmap-D127.0.0.1,127.0.0.2,127.0.0.253127.0.153.1
通过抓包的方法看到nmap正在使用我们指定的ip进行对目标主机的扫描,可以使用ME选项指定自己的真实IP.
例如:nmap-D127.0.0.1,127.0.0.2,127.0.0.253,ME127.0.153.1
4.-sI源地址欺骗(使用-sI选项可以进行源地址欺骗,如果Nmap无法确定你的原地址,Nmap会给出相应的提示,我们使用-sI选项指定需要发包的接口ip地址.)
例如:nmap-sIxssm.me:80127.0.0.1
5.--source-port源端口欺骗(使用--source-port选项可以进行源地址欺骗,也可以用-g选项,只需要提供端口,nmap就可以从端口发数据,)
例如:nmap--source-port53127.0.0.1
6.--data-length指定发包长度(使用--datalength可以在发送报文的时候指定发包长度,tcp包是40字节,ICMPEcho有28个字节.)
例如:nmap--data-length30127.0.0.1
例如:nmap--randomize-hosts127.0.0.1-200
8.--spoof-macMAC地址欺骗
使用该选项就可以进行MAC地质欺骗,冒失指定一个MAC地址会引起管理员怀疑,这是可以用字符串'0'随机分配一个MAC地址,也可以指定一个MAC地址进行欺骗,.MAC地址最好是存在的,这样才能起到欺骗的效果,使用--spoof-mac选项可以用参数包括0,MACAddress,VendorName。
0表示随机生成一个MAC地址,MACAddress表示用户手动指定一个MAC地址,VendorName表示从指定厂商生成一个MAC地址.
例如:nmap-sT-PN--spoof-mac0127.0.0.1
六、输出结果
使用命令:nmap–snCIDR–oXtest.xml对该网络中所有的主机进行ping扫描,以探测主机存活性,同时将结果输出到test.xml文件中,以便后续使用