namp工具的细究

nmap主机端口开发探测神器,一直在使用它来主机发现和端口开放探测,不知道其原理,这次就来仔细地了解一下它的真面目。

主机发现

基于arp协议

arp协议位于TCP/IP的协议族的网络层,主要解决逻辑地址和物理地址的转换关系。
当目标主机与我们处于同一网段时,使用arp协议扫描速度快,结果也精准。

nmap -PR 192.168.1.0/24

扫描结果

Nmap scan report for RP-LINK.lan (192.168.1.1)
Host is up (0.0024s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http
MAC Address: 78:A3:51:11:9A:BA (Shenzhen Zhibotong Electronics)

Nmap scan report for LAPTOP-1I94N8QB.lan (192.168.1.128)
Host is up (0.0095s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3389/tcp open ms-wbt-server
5357/tcp open wsdapi
MAC Address: 98:E7:F4:57:26:48 (Hewlett Packard)

Nmap scan report for 192.168.1.189
Host is up (0.0069s latency).
All 1000 scanned ports on 192.168.1.189 are closed
MAC Address: 78:36:CC:51:05:C9 (Unknown)

Nmap scan report for 192.168.1.211
Host is up (0.0052s latency).
All 1000 scanned ports on 192.168.1.211 are closed
MAC Address: EC:D0:9F:FD:1E:BD (Xiaomi Communications)

Nmap scan report for DESKTOP-HTFCR1N.lan (192.168.1.234)
Host is up (0.017s latency).
Not shown: 993 filtered ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
902/tcp open iss-realsecure
912/tcp open apex-mesh
3389/tcp open ms-wbt-server
MAC Address: A0:D3:7A:6C:61:AA (Intel Corporate)

dnet: Failed to open device lo0
QUITTING!

基于ICMP协议

ICMP协议位于TCP/IP协议族中的网络层,是在IP主机、路由器之间传递控制消息。

ICMP的报文种类 类型的值 ICMP报文的类型
差错报文 3 终点不可到达
4 源抑制
11 超时
12 参数失灵
5 重定向
查询报文 8或0 响应请求或应答
13或14 时间戳请求或应答
17或18 地址掩码请求或应答
10或9 路由器询问或通告

1.ICMP响应请求和应答
用来测试发送和接收两端链路及目标主机TCP/IP协议是否正常。
-PE 和ping实质上一样

nmap -PE 192.168.1.0/24

2.ICMP时间戳请求和应答
ICMP时间戳允许系统向另外一个系统查询当前时间。

nmap -PP 192.168.1.0/24

3.地址掩码请求和应答。
ICMP地址掩码请求用源主机发送,用于无盘系统在引导过程中获取自己的子网掩码。大多数主机在收到请求时都发送一个应答。

nmap -PM 192.168.1.0/24

基于TCP/IP协议

1.TCP位于传输层的协议,面向连接可口的、基于字节流的传输层控制协议。

1)TCP SYN扫描
向目标主机发送一个SYN标志的数据包(内容为空,默认端口80)

nmap -sn -PS[端口号(默认为80)] 192.168.1.0/24

结果

Nmap scan report for RP-LINK.lan (192.168.1.1)
Host is up (0.028s latency).
MAC Address: 78:A3:51:11:9A:BA (Shenzhen Zhibotong Electronics)
Nmap scan report for PLK-AL10-ec350dc5c6e55ec3.lan (192.168.1.105)
Host is up (0.071s latency).
MAC Address: F8:23:B2:8E:8A:D1 (Huawei Technologies)
Nmap scan report for 192.168.1.128
Host is up (0.028s latency).
MAC Address: 98:E7:F4:57:26:48 (Hewlett Packard)
Nmap scan report for 192.168.1.211
Host is up (0.079s latency).
MAC Address: EC:D0:9F:FD:1E:BD (Xiaomi Communications)
Nmap scan report for DESKTOP-B0PU34P.lan (192.168.1.214)
Host is up (0.17s latency).
MAC Address: 44:6D:57:ED:08:3C (Liteon Technology)
Nmap scan report for HUAWEI_MAIMANG_5.lan (192.168.1.241)
Host is up (0.10s latency).
MAC Address: 00:5A:13:AD:6E:D7 (Huawei Technologies)
Nmap scan report for DESKTOP-RG8DNUJ.lan (192.168.1.225)
Host is up.
Nmap done: 256 IP addresses (7 hosts up) scanned in 39.62 seconds

2)
2.TCP ACK
向目标主机发送一个TCP/ACK数据包,存活的主机会返回一个RST数据包。

nmap -sn -PA 192.168.1.0/24

2.UDP协议
udp协议非面向连接的,不可靠的简单的传输层协议。当一个dup端口收到一个udp数据包时,如果是关闭的,就会给源端口发回一个ICMP端口不可达数据包,如果是开放的,就会丢弃这个数据包,不返回任何信息。

nmap -PU 192.168.1.0.24

基于SCTP协议6

SCTP是传输层上的协议,与TCP完成的任务是相同的。 但存在很大 不同

tcp sctp
单地址连接 多地址连接
基于字节流 基于消息流
只能支持一个流 同时支持多个流
通过三次握手实现连接 通过四次握手实现连接

支持stcp协议的主机并不多,不建议使用

nmap -sn -PY 192.168.1.0/24

使用IP协议

所有的tcp udp icmp IGMP数据都是以ip数据包格式传输。 数据包中协议域的长度为8位,标识哪个协议想ip发送数据,ICMP为1,IGMP为2,TCP为6,UDP为7。

nmap默认使用ICMP(1) IGMP(2) IP-IN-IP(4)

nmap -sn -PO 192.168.1.0/24
```
## nmap中dns协议
1.nmap默认只会对活跃的主机进行dns转换,强制所有主机无论是否活跃都做dns转换可用-R
```bash
nmap -R 45.32.7.5-24

2.ip都转换为域名会耗费大量时间,无须转换用-你

nmap -n 45.32.7.5-24

主机发现技术分析

–packet-trace可以通过它就可以观察nmap发出的数据包和收到的数据包。

nmap -sn -PS 192.168.1.0/24
```
观察结果时,发现nmap没有发送syn数据包。原来nmap的设计思路时: 先 判断目标主机与nmap所在的主机是否在同一网段,如果相同的话,则直接使用ARP扫描模式。

# 端口扫描
## 端口的分类
公认端口(Well Known Ports)
即一般意义上的常用端口。从0到1024;这些端口通常紧密地绑定在一些特定的系统服务中。
注册端口(Registered Ports)
指的是从1025到49151的端口。松散着绑定一些服务。这些端口大部分没有明确定义服务对象,而且程序可以通过自己的需要定义使用哪些端口,很多远程控制软件和木马程序都会使用它们。
动态或私有端口( Dynamic or Private Ports)
49152到65535。正常情况下服务不会被分配到这些端口上,但很多木马喜欢。
## 端口状态的定义
open:表明该端口有应用程序接收TCP链接或者UDP报文。
closed:端口可访问,可以接受nmap探测报文并做出响应。相比较而言没有应用程序在端口监听。
filtered:设备过滤了数据包,设备可能是路由器、防火墙甚至专门的软件。
unfiltered: 目标端口是可以访问的,但是无法判断open还是closed.(ACK扫描时才会出现)
open|filtered:无法确定端口是开放的还是被过滤了,开放的端口不响应就是一个例子。
closed|filtered: 无法确定端口是关闭还是被过滤了。只有在使用idle扫描时才会发生这种情况。
## 端口扫描方法
### SYN扫描
nmap默认的扫描方式,扫描极快,一秒钟可以扫描上千个端口,也不会在主机上留下扫描痕迹。


目标主机应答| 端口状态
---|---
SYN/ACK|open
RST|closed
没有应答|过滤
ICMP无法抵达错误(类型3,代码1,2,3,4,10,13)|filtered
```bash
nmap -sS 45.32.8.31
```
### Tcp Connect扫描
跟syn扫描类似,只是完成 了tcp的三次握手。
```bash
nmap -sT 45.32.8.31

udp扫描

相当慢

nmap -sU 45.32.8.31

目标主机应答 端口状态
UDP应答 open
没有应答 open 或者filtered
ICMP端口无法抵达错误(类型3,代码3) closed
ICMP无法抵达错误(类型3,代码1,2,9,10,13) filtered

TCP FIN扫描

向目标端口发送一个FIN数据包,按照RFC793规定,对所有关闭的端口,目标系统应该返回RST标志。

nmap -sF 45.32.8.31

NULL 扫描

向目标端口发送一个不包含任何标志的数据包。按照RFC793规定,对所有关闭的端口,目标系统应该返回RST标志。

nmap -sN 45.32.8.31

Xmas Tree 扫描

向目标端口发送一个含有FIN URG PUSH标志的数据包。按照RFC793规定,对所有关闭的端口,目标系统应该返回RST标志。

nmap -sX 45.32.8.31
```
### idle扫描

```bash
nmap -Pn -p- -sI 第三方主机 目标主机

扫描指定的端口

1.扫描常见的100个端口

nmap -F 45.32.8.31

2.指定一个端口

nmap -p 80 45.32.8.31

3.使用名字来制定扫描端口。

nmap  -p smtp,http 45.32.8.31

4.扫描常用端口

nmap --top-ports  45.32.8.31
```
# 远程操作系统和服务
```bash
-O 对操作系统扫描
-A 操作系统探测和服务发现
-sV 服务和版本检测
--allports 不为版本探测时排除任何端口
--version-intensity<intensity> -sV 探测报文的轻度值,默认为7 范围0~9
--version-all 尝试每个探测 相当于version-intensity 9
--version-trace 跟踪版本扫描活动。 是--packet-trace 所得到的子集

nmap的高级使用

1.对nmap发送的探测数据包进行分段。

nmap -f 45.32.8.31

2.最大传输单元(MTU)是指一种通信协议的某层桑面所能通过的最大数据包大小(字节为单位),以太网的默认值为1500bytes.
这里的mtu的值必须8的倍数

nmap -mtu 16 45.32.8.31

3.使用诱饵主机隐蔽扫描
作为诱饵主机必须处于工作状态,否则就变成洪水攻击。在进行版本检测或tcp连接扫描时,诱饵扫描无效。

nmap -D RND:4 45.32.8.31
```
```bash
nmap -D 192.168.1.214 45.32.8.31
```
4.源端口欺骗
网络安全控制中有一种访问控制列表技术,依靠ip地址和端口来对数据包进行限制。
可以通过--source-port或-g指定源端口,来突破检测机制。
```bash
namp -g 53 45.32.8.31

5.发送报文时附加随机数据
默认情况下nmap发送的报文中只包含头部,内容部分是空的,因此tcp数据包的大小只有40字节,而ICMP ECHO 请求只有28个字节。这种内容为空的报文很容易被目标网络检测机制所发现。

nmap --data-length 20 45.32.8.31
```
6.设置IP time-to-live域
```bash
nmap -ttl 25 45.32.8.31

7.MAC地址欺骗
使用字符串“0” 将简单选择一个完全随机的MAC地址

nmap -sn --spoof-mac 0 45.32.8.31

8.扫描结果保存
1)文件本件

nmap -oN "d:\\test.txt" 45.32.8.31

2)xml文件

nmap -oX "d:\\test.xml" 45.32.8.31

3)grep文件之中

nmap -oG  "d:\\test.grep" 45.32.8.31

nse脚本

  1. 分类
分类 描述
auth 包含的都是负责处理鉴权证书(绕开鉴权)的脚本
broadcast 在局域网内探查更多服务开启状况,如CHCP DNS SQL Sever等服务的脚本
brute 针对常见的应用,如HTTP/FTP等使用暴力破解密码的脚本
default 这是使用-sC和-A参数扫描时默认的脚本,提供基本脚本扫描能力
discovery 对网络进行更多的信息收集,如SMB收集、SNMP查询等
dos 用来发起拒绝服务攻击的脚本
exploit 用来完成对目标系统安全漏洞渗透的脚本
external 针对第三方服务的脚本
fuzzer 进行模糊测试的脚本,发送异常的包到目标机,探测出潜在漏洞
intrusive 可能会引起目标系统崩溃或者对目标网络造成极大负担的脚本。这类脚本很容易被对方的防火墙或者IDS发现
malware 用来检测恶意软件的脚本
safe 在任何情况下都是安全无害的脚本
version 负责增强服务与版本扫描功能的脚本
vuln 负责检查目标机是否有常见的漏洞

2.脚本的使用
调用一个脚本

nmap --script smb-vuln-ms17-010.nse 192.168.1.0/24

调用一个分类

nmap --script discovery 45.32.8.31

3.脚本的应用
1)修改nmap默认的客户端,使用脚本判断服务器所支持的http方法。

nmap --script http-methods --script-args http.useragent="Mozilla 42" 45.32.8.31

4.nse脚本规则
1)Prerule()规则,这个规则的执行要早于nmap的扫描,因此这类脚本不会调用nmap扫描得到的任何结果。执行的顺序是先脚本,后nmap扫描
2)Hostrule()规则,这个规则实在nmap已经完成了主机的发现之后执行的,根据主机发现的结果来触发该类脚本。执行的顺序是先nmap发现,后脚本。
3)Portrule()规则,执行了端口扫描或版本侦测时才会触发的脚本,这个规则的执行与端口的状态联系紧密。执行的顺序是先nmap端口扫描后脚本。
4)Postrule()规则,但所有的扫描都结束以后才会执行的脚本。
3.一个不错nse脚本编译工具Halcyon
5.将写的脚本添加到nmap中:将写好的 *.nes 文件 放在nmap安装目录的scripts文件夹中,再nmap中运行

Nmap --script-updatedb

5.lua语言

nse中的api

nmap中的api的核心功能就是向脚本提供关于主机和端口的信息。
nmap引擎会向脚本传递乳腺连个Lua table类型的参数:
host table
port table

host table

host.os          包含目标的操作系统类型   
host.ip 包含了目标的ip的地址
host.nmae 包含了目标的反向dns主机名
host.targetname 包含了目标主机在命令行中的名字
host.directly_connected 目标计算机是否与我们同在一个子网
host.mac_addr 目标的mac地址,只有处于同于网段才有效
host.mac_addr_src 使用的计算机的mac地址
host.interface_mtu 网络中的MTU的值
host.bin_ip 目标的ip地址
host.bin_ip_src
host.times 目标的时序数据
host.traceroute 只有在指定--traceroute

port table

port.number 标识了目标端口的编号
port.protocol 目标端口的类型udP或tcp
port.service 保存了端口上运行的服务
port.version 通过服务扫描发现的版本信息,需要-sV扫描
port.state 保存了端口上运行的状态

nse的库文件

这些库文件实现了代码分离和重构,涵盖了几乎当前所有的流行的协议、常见的字符串处理操作,甚至包含了用来实现对用户名和密码进行破解的brute库文件。

常见的Nse库文件

shortport    收集常见的端口规则信息
comm 与目标机进行通信,数据交换
http 完成所有对http的相关安全检测操作
stdNSE 包含了NSE开发中各种有用的功能,涉及与定时、 并发、输出和字符串处理相关 的函数。
openSSL 用来绑定OpenSSL的借口,主要用来进行加密。
target 这个库的主要目的是管理新发现目标的扫描队列
creds 用来保存脚本在执行时发现的登录凭证
vluns 提供关于主机的安全漏洞方面的消息

nse中的数据文件

指定数据目录的所在位置

nmap --datadir D:\office\nmap-7.60\nselib\data -sC -sV 45.32.8.31

nmap选择数据文件的顺序
优先级1:选项–datadir所指定的目录
2:环境变量所指定的位置
3:安装目录
4:在编译时定义的目录

web审计数据文件

1.http-fingerprints.lua
这个文件时一个lua table形式保存的数据文件,在这个文件中包含了一些常见的web应用信息,包含这些用用中关键文件所在的位置
2.http-sql-error.list
包含一些标识错误的字符串,主要被脚本http-sql-injection所使用。
3.http-web-files-extensions.lst
http-spider库文件在对页面进行扫描的过程 中狗就会使用该文件。包含了200多个常见的web应用扩展名。
4.http-devframework-fingerprints.lua
检测目标web应用所使用的语言
5.http-folders.txt
包含了九百多个HTTP常见的目录名,被脚本http-iis-webdav-vuln所调用,检测iis5/6类型服务器上传漏洞
6.vhosts-default.lst
脚本http-vhosts用这个数据文件来判断目标服务器是一个虚拟机还是一个真正的web服务器
7.wp-plugins.lst
包含了五万多个常见的wordpress初见的名称,脚本http-wordpress-plugins 利用此文件来对采用wordpress建站的服务器进行暴力穷举攻击
如果不特殊指定–srcipt-args http-wordpress-plungins.search ,此脚本只会读取前100个

DBMS-auding数据文件

1.mysql-cis.audit
主要根据CIA MYSQL V1.0.2 benchmark来检测mysql数据库的配置安全性。 mysql-audit脚本就是用了这个文件。
2.oracle-default-accounts.lst
用来验证oracle数据库的用户名。 被oracle-brute 和oracle-brute-stealth两个脚本所调用
3.oracle-sids
包含了常见的 oracle数据库实例名

namp脑图

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器