Nmap是个强大的扫描工具

1、用主机名和IP地址扫描

用主机名和IP地址进行扫描大概是最为常见的一种扫描方式,示例:nmap www.baidu.com

这样可以得到被扫描目标的端口、服务和Mac信息

j4y

2、列出详细信息

使用-v参数来让nmap返回更详细的信息

j4y

3、扫描多个目标

如果你已经知道了多个目标的IP或者主机名,你可以直接在命令后面添加多个需要扫描的目标。示例:nmap 61.135.169.121 103.95.221.36

j4y

如果你并不知道,只是需要扫描整个子网的网段或者是某个IP范围内的目标,可以使用通配符*来扫描。示例:nmap 192.168.0.*这样nmap就会自动扫描从192.168.0.0到192.168.0.255的所有目标,然后给出信息。

j4y

可是如果在这个子网里你已经知道某台机器的信息,不想再次扫描,需要用到-exclude参数来排除一些目标。示例:nmap 192.168.0.* --exclude 192.168.0.1

j4y

如果你并不想扫描整个子网,而是同一子网下的多个目标,可以对IP地址的最后一位进行添加来执行扫描。示例:nmap 192.168.0.1,2,3这样nmap就会对这三个目标进行扫描。又或者可以使用nmap 192.168.0.1-10这样来指定多个扫描的目标也是可以的。
如果你已经有了一个信息列表,也可以保存成txt文件,而无需手动输入。示例:nmap -iL object.txt这样nmap就会对你txt文件中的每个目标进行扫描。

4、得到目标的系统信息

得到目标系统的信息是必不可少的,我们为了得到系统信息和路由跟踪,需要-A参数来实现。示例:nmap -A 192.168.0.1

当然,nmap是通过配对来实现操作系统信息的判别,所以nmap有时并不能准确识别出真实的信息,不提供任何信息或者提供好几种可能性都是正常的。

-A并不是唯一的选择,-O和-osscan-guess都可以进行操作系统信息的探测。

j4y

5、检测目标保护措施

现在已经过了洪水攻击和DDoS的嚣张时刻,虽然大规模DDoS依旧恐怖,但是已经不在是首选的攻击手段。

因为防护性的考虑,所以如果存在过滤规则或者防火墙的目标都会对数据包进行过滤。那么我们怎么知道目标是否存在这类的防护手段呢?

我们可以采用-sA和-PN两个参数来进行探测扫描。

6、扫描在线主机

扫描一个网段的过程中,如果目标并没有上线,有可能一无所获,所以在扫描之前可以先判断是否有主机存活。我们采用-sP参数来判断存活主机都有哪些。示例:nmap –sP192.168.0.*

7、快速扫描

Nmap大多数扫描都是非常迅速的,但也有时会出现极其缓慢的情况,那么如果我只是想初步进行判断,而不是深入分析的话,一次快速扫描可以捕捉到你想要的大多数信息。

示例:namp –F192.168.0.1

这个参数扫描的范围仅限定在nmap-services这个文件中的端口,如果一般不加参数的命令,扫描范围是1000个最有可能开放的端口。

8、判断版本

新的软件版本一般来讲会提供更好的性能和体验,所以紧跟时代形势,使用新版本的软件对我们来说也是至关重要的一点。

我们可以通过-V来对安装的nmap版本进行查看,如果升级的话可以采用apt-get update(默认你使用的是Kali)

9、特殊扫描

如果你只是关心某个端口的开启情况,就没有必要让nmap从头到尾扫描一遍,则可以使用-p选项来指定你想要的那个端口。示例:nmap –p80 192.168.0.1或者nmap –p 80,443 192.168.0.1又或者nmap –p80-160 192.168.0.1

按顺序扫描可以使用-r来实现,这样nmap不会随机进行扫描。示例:nmap –r192.168.0.1

只扫描TCP端口和UDP端口分别使用-p T:80,8888和-sU 53来实现对某个特定端口的扫描。

10、扫描本机的网络接口

本机的网络信息是不是只有ifconfig一个选择呢?显然不是,nmap也提供了-iflist来检测本机的信息。示例:nmap -iflist

11、目标服务详细信息

目标开启的服务的版本也是我们应该关注的问题,在特定版本下所存在的漏洞都是我们应该加以利用的工具。

 示例:nmap –sV192.168.0.1

12、所谓ACK和SYN扫描

 Ping的请求现在会被大多数的防火墙所拦截,直接丢弃数据包。但是我们可以采用TCPACK和TCP SYN的方式来进行扫描。

通过向目标主机的端口发送ACK包,如果收到RST包,说明该端口没有被防火墙屏蔽;没有收到RST包,说明被屏蔽。

SYN称为半开放扫描,因为这种技术使得Nmap不需要通过完整的握手,就能获得远程主机的信息。Nmap发送SYN包到远程主机,但是它不会产生任何会话.因此不会在目标主机上产生任何日志记录,因为没有形成会话。这个就是SYN扫描的优势。
示例:nmap –PS192.168.0.1

依旧只关心特定端口的扫描应该怎么做呢?示例:nmap –PA–p 80 192.168.0.1或者nmap –PS–p 80 192.168.0.1

13、隐蔽扫描

大张旗鼓的多次扫描容易被防火墙记录下来,然后强行过滤,为了降低被发现的概率,我们可以采用隐蔽扫描。

示例:nmap –sS 192.168.0.1

14、使用TCP SYN扫描常用端口

示例:nmap –sT 192.168.0.1

15、TCP空扫描

示例:nmap -sN 192.168.0.1

16、完整扫描

一次完整全面的扫描包括主机存活、操作系统版本探测、应用程序版本探测、端口扫描等等。

示例:nmap –T4–A –v 192.168.0.1

扫描速度共有6个(0-5)等级,一般来讲可以使用T4,速度越快越可能被过滤和屏蔽。-v是显示冗余信息

17、主机发现的详细参数

-sL:List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。

-sn:Ping Scan 只进行主机发现,不进行端口扫描。

-Pn:将所有指定的主机视作开启的,跳过主机发现的过程。

-PS/PA/PU/PY[portlist]:使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。

-PE/PP/PM:使用ICMPecho, timestamp, and netmask 请求包发现主机。-PO[protocollist]:使用IP协议包探测对方主机是否开启。

-n/-R:-n表示不进行DNS解析;-R表示总是进行DNS解析。

--dns-servers<serv1[,serv2],...>: 指定DNS服务器。

--system-dns:指定使用系统的DNS服务器

--traceroute:追踪每个路由节点

18、端口扫描详细参数

TCP FIN/Xmas/NULL扫描。这三种扫描方式被称为秘密扫描(Stealthy Scan),因为相对比较隐蔽。FIN扫描向目标主机的端口发送的TCP FIN包或Xmas tree包/Null包,如果收到对方RST回复包,那么说明该端口是关闭的;没有收到RST包说明端口可能是开放的或被屏蔽的(open|filtered)。

其中Xmas tree包是指flags中FIN URG PUSH被置为1的TCP包;NULL包是指所有flags都为0的TCP包。

-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimonscans的方式来对目标主机进行扫描。
-sU: 指定使用UDP扫描方式确定目标主机的UDP端口状况。

-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密扫描方式来协助探测对方的TCP端口状态。

--scanflags <flags>: 定制TCP包的flags。

-sI <zombiehost[:probeport]>: 指定使用idle scan方式来扫描目标主机(前提需要找到合适的zombie host)

-sY/sZ: 使用SCTP INIT/COOKIE-ECHO来扫描SCTP协议端口的开放的情况。

-sO: 使用IP protocol 扫描确定目标机支持的协议类型。

-b <FTP relay host>: 使用FTP bouncescan扫描方式

19、版本检测详细参数

-sV:指定让Nmap进行版本侦测

--version-intensity<level>: 指定版本侦测强度(0-9),默认为7。数值越高,探测出的服务越准确,但是运行时间会比较长。

--version-light:指定使用轻量侦测方式 (intensity 2)

--version-all:尝试使用所有的probes进行侦测 (intensity 9)

--version-trace:显示出详细的版本侦测过程信息。

20、规避检测

现在防火墙和IDS的检测能力也并非没有长进,为了防止被检测出来,我们需要完整的规避检测的方案。

20.1 分片(Fragmentation)

将可疑的探测包进行分片处理(例如将TCP包拆分成多个IP包发送过去),某些简单的防火墙为了加快处理速度可能不会进行重组检查,以此避开其检查。

20.2 IP诱骗(IP decoys)

在进行扫描时,将真实IP地址和其他主机的IP地址(其他主机需要在线,否则目标主机将回复大量数据包到不存在的主机,从而实质构成了拒绝服务攻击)混合使用,以此让目标主机的防火墙或IDS追踪检查大量的不同IP地址的数据包,降低其追查到自身的概率。注意,某些高级的IDS系统通过统计分析仍然可以追踪出扫描者真实IP地址。

20.3 IP伪装(IP Spoofing)

顾名思义,IP伪装即将自己发送的数据包中的IP地址伪装成其他主机的地址,从而目标机认为是其他主机在与之通信。需要注意,如果希望接收到目标主机的回复包,那么伪装的IP需要位于统一局域网内。另外,如果既希望隐蔽自己的IP地址,又希望收到目标主机的回复包,那么可以尝试使用idle scan或匿名代理(如TOR)等网络技术。

20.4 指定源端口

某些目标主机只允许来自特定端口的数据包通过防火墙。例如FTP服务器配置为:允许源端口为21号的TCP包通过防火墙与FTP服务端通信,但是源端口为其他端口的数据包被屏蔽。所以,在此类情况下,可以指定Nmap将发送的数据包的源端口都设置特定的端口。

20.5 扫描延时

某些防火墙针对发送过于频繁的数据包会进行严格的侦查,而且某些系统限制错误报文产生的频率(例如,Solaris 系统通常会限制每秒钟只能产生一个ICMP消息回复给UDP扫描),所以,定制该情况下发包的频率和发包延时可以降低目标主机的审查强度、节省网络带宽。

20.6 其他技术

Nmap 还提供多种规避技巧,比如指定使用某个网络接口来发送数据包、指定发送包的最小长度、指定发包的 MTU、指定TTL、指定伪装的MAC地址、使用错误检查和(badchecksum)。

-f;--mtu <val>: 指定使用分片、指定数据包的MTU.

-D<decoy1,decoy2[,ME],...>: 用一组IP地址掩盖真实地址,其中ME填入自己的IP地址。

-S<IP_Address>: 伪装成其他IP地址

-e<iface>: 使用特定的网络接口

-g/--source-port<portnum>: 使用指定源端口

--data-length<num>: 填充随机数据让数据包长度达到Num。

--ip-options<options>: 使用指定的IP选项来发送数据包。

--ttl<val>: 设置time-to-live时间。

--spoof-mac<mac address/prefix/vendor name>: 伪装MAC地址

--badsum:使用错误的checksum来发送数据包(正常情况下,该类数据包被抛弃,如果收到回复,说明回复来自防火墙或IDS/IPS)。

22、定制数据包

Nmap 提供–scanflags 选项,用户可以对需要发送的TCP探测包的标志位进行完全的控制。可以使用数字或符号指定TCP标志位:URG, ACK, PSH,RST, SYN,and FIN。

另外使用--ip-options可以定制IP包的options字段。使用-S指定虚假的IP地址,-D指定一组诱骗IP地址(ME代表真实地址)。-e指定发送探测包的网络接口,-g(--source-port)指定源端口,-f指定使用IP分片方式发送探测包,--spoof-mac指定使用欺骗的MAC地址。--ttl指定生存时间。

23、扫描路由器

Nmap 内部维护了一份系统与设备的数据库(nmap-os-db),能够识别数千种不同系统与设备。所以,可以用来扫描主流的路由器设备。

23.1扫描路由器TFTP

示例:nmap –sU–p 69 –nvv target

大多数的路由器都支持TFTP协议(简单文件传输协议),该协议常用于备份和恢复路由器的配置文件,运行在UDP 69端口上。使用上述命令可以探测出路由器是否开放TFTP。

23.2扫描路由器操作系统

与通用PC扫描方式类似,使用-O选项扫描路由器的操作系统。-F用于快速扫描最可能开放的100个端口,并根据端口扫描结果进一步做OS的指纹分析。

示例:nmap -O -F -n 192.168.1.1

24、扫描Web站点

Web是互联网上最广泛的应用,而且越来越多的服务倾向于以Web形式提供出来,所以对Web安全监管也越来越重要。目前安全领域有很多专门的Web扫描软件(如AppScan、WebInspect、W3AF),能够提供端口扫描、漏洞扫描、漏洞利用、分析报表等诸多功能。而Nmap作为一款开源的端口扫描器,对Web扫描方面支持也越来越强大,可以完成Web基本的信息探测:服务器版本、支持的Method、是否包含典型漏洞。功能已经远远超过同领域的其他开源软件,如HTTPrint、Httsquash。

目前Nmap中对Web的支持主要通过Lua脚本来实现,NSE脚本库中共有50多个HTTP相关的脚本。

示例:nmap -sV -p 80 -T4 --scripthttp*,defaultscanme.nmap.org