诸神之眼-nmap详细使用介绍3!Nmap高阶操作(防火墙规避和脚本使用)! (*╹▽╹*) 信息收集 ~ 其四

473 阅读13分钟

文章目录

Nmap防火墙规避

Nmap虽然没有直接提供检测、破坏防火墙的方法,但我们可以利用Nmap的一些功能进行伪装,绕过防火墙的封锁。

发送分段数据包(-f)

将原本的数据包进行分段发送,分段后,每段的数据都不完整,增加过滤规则和防火墙的检测难度,但需要注意的是:

  1. 一些老旧的系统可能无法正常处理分包后的数据,甚至导致卡死。
  2. Windows系统中的Nmap对发送分段扫描的包支持并不好,最好在纯Linux系统中使用。(WSL中的kali完全无法使用分段数据包)

语法: nmap -f 目标
例: nmap -f 129.211.85.3
在这里插入图片描述
PS: 为了加快扫描速度,和让发送的扫描数据包数量减少,方便我们查看抓包后的区别,我在上述使用了-sn参数,功能是只进行主机发现,不进行端口扫描。
在这里插入图片描述

限制最大传输单元(-mtu)

最大传输单元(Maximum Transmission Unit,MTU),有些服务器可能对所能接受数据服务单元的最大尺寸做出了一些限制,这时候,我们就可以使用-mtu进行相应的限制,将多出的数据进行分包,来避免被规则限制拦截。这种方法的原理和分段数据包比较像,只是手动设置了分包的数据大小。所以上述分段数据包有的特性,这里也都有。
但需要注意的是,-mtu的值必须是8的整数倍。

语法: nmap -mtu 数据大小 目标
例: nmap -mtu 16 129.211.85.3
在这里插入图片描述

在这里插入图片描述

诱饵主机(-D)

我在之前的博客中提到过,nmap只能进行主动扫描,所以每次我们扫描目标主机的时候都可能会产生一个记录,为了避免被对方主机发现我们而将我们IP进行封锁,我们可以使用诱饵主机,伪造多个主机一起发送请求,这样就算目标主机知道有人在扫描它,但它也并不知道是那台主机在扫描它。
但需要注意的是

  1. 在版本检测(-sV)和TCP连接扫描(-sT)时,无法使用诱饵主机。
  2. 只有在同一网络中存在众多主机的时候,诱饵扫描才有有一定用处,如果只有两个主机时,使用诱饵主机就没有任何实际意义。
  3. 使用太多的诱饵并没有太大意义,反而会造成扫描结果的不准确,一般使用十个左右的诱饵数量,将主机IP放在第六个以后最好,因为很多常用的端口扫描检测器不会报告第六个位置之后的IP。

我们可以指定诱饵主机的诱饵IP进行namp -D 诱饵IP,诱饵IP,...,主机IP 目标
nmap -sn -D 222.222.222.222,111.111.111.111 129.211.85.3
在这里插入图片描述
也可以让nmap自动生成诱饵IPnmap -D RND:诱饵主机数量 目标
nmap -sn -D RND:10 129.211.85.3
在这里插入图片描述
在这里插入图片描述

源端口欺骗(-g)

源端口欺骗和诱饵主机完全不同,他不是伪造多个端口访问,而是让我们伪造成指定端口发出的数据,如果你买过一些大厂的主机应该知道,他们有比较完善的防火墙,但我们个人开发者一般会开放一些端口一共我们方便使用,不只是我们会这样,一些比较专业产品也会有这种情况。比如一个个人防火墙会默认运行53(DNS)端口,WindowsXP系统自带的防火墙会允许88(Kerberos)端口。面对这样的安全漏洞,nmap当然给我们提供了相应的扫描方法。
源端口欺骗有两个参数分别是-g--source-port(它们作用完全一致)。只要找到一个被遗忘在安全检查机制之外的端口,就可以使用源端口欺骗技术进行扫描,大部分TCP和UDP的扫描都支持此参数。
使用方法: nmap -g 伪装端口 目标
nmap -g 3306 -p 80 129.211.85.3
在这里插入图片描述

在这里插入图片描述

MAC地址欺骗(--spoof-mac)

MAC地址介绍

除了IP可能会被封锁外,我们的MAC地址也是让对方识别我们的一个标识,所以nmap也相应的提供了MAC地址伪装技术。首先我们来了解一下MAC地址的一些规则,

  1. MAC地址为六个字节,也就是48位。

  2. MAC主要分为两段,前三个字节为:

    1. 组织唯一标识符(OUI)由IEEE(电气和电子工程师协会)分配给厂商,它包含24位。IEEE会保证他在个个厂家之间不会冲突。

    2. 在组织唯一标识符(OUI)第一个字节中的最后两位分别是:

      1. I/G(Individual/Group)位,如果I/G=0,则是某台设备的MAC地址,即单播地址;如果I/G=1,则是组播地址。
      2. G/L(Global/Local,也称为U/L位,其中U表示Universal)位,如果G/L=0,则是全局管理地址,由IEEE分配给厂商使用;如果G/L=1,则是本地管理地址,是我们个人可以给设备分配的地址。
  3. 后三个字节是 扩展唯一标识符(EUI)由厂家自行分配,厂家会保证此标识符在个个设备之间不会重复。

MAC地址也有三种利用方式:

  1. 单播: 已知对方的MAC地址,进行一对一的通信。(类似:1对1的谈话)
  2. 组播: 可以对局域网中的某一组别设备进行一对多的通信。(类似:一群人开会)
  3. 广播: 无需知道对方MAC,对局域网中所有地址通信。(类似:用喇叭在街上喊:浙江温州浙江温州最大皮革厂倒闭了…)
    在这里插入图片描述
    我们从IEEE官网可以查询或下载由IEEE颁发有MAC地址。

nmap使用

nmap的MAC地址欺骗技术用法很多,下面我来一一介绍,不过首先要知道的是,我们使用mac的地址欺骗技术会使得主机发现技术失效,所以我们如果要使用MAC地址需要写到-Pn参数,此参数可以手动设定目标主机为活跃主机,跳过主机发现阶段。

  1. 参数: 0。这应该是使用最多的参数了,它会自动帮我们随机生成一个mac的地址。
    比如:nmap -Pn --spoof-mac 0 129.211.85.3
  2. 参数: 12位(十六进制,偶数,两个一组,每组使用:冒号隔开)。手动指定MAC,最好是你非常了解MAC地址的规则,否则,最好不要自己写。可以利用一些在线的MAC地址生成器生成想要类型的MAC地址。
    比如:nmap -Pn --spoof-mac C0:75:C8:07:2A:16 129.211.85.3
  3. 参数:6位(十六进制)。指定组织唯一标识符(OUI)让nmap自动生成一个扩展唯一标识符。下列我使用的B8:C3:85是华为MAC组织唯一标识符(OUI)。
    比如: nmap -Pn --spoof-mac B8:C3:85 129.211.85.3
  4. 参数:厂商名称。使用指定厂商的MAC地址。不过因为这里厂商名严格区分大小写,使用起来并不是很方便。
    比如: nmap -Pn --spoof-mac Apple 129.211.85.3
    在这里插入图片描述
    PS:MAC地址欺骗功能请不要在局域网(和目标主机在同一网段内)中使用,MAC地址的主要功能就是在局域网中寻找目标主机,如果MAC地址修改,就无法和目标主机建立正常通信。

附加随机数据(--data-length)

默认情况下,Nmap发送的数据报文为空,这种空数据包会被一些安全检测机制拦截,nmap为了避开这种拦截,提供了填充一些随机数据的功能。不过需要注意的是这个选项会使得很多ping和端口扫描变慢。
使用方法: nmap --data-length 数据长度 目标
nmap -sn --data-length 50 152.32.251.110

在这里插入图片描述

设置存活时间[time to live](--ttl)

存活时间(time-to-live域)它主要指的是可以存活的跳数,用来预防环路出现。我们发送的数据包每经过一个正常使用TCP/IP协议的主机,ttl都会减一,如果ttl被减到零,我们的数据包就会被丢弃,并像我们的主机返回一个失败的信息。
用法: nmap --ttl 数量 目标
如果跳数过少,可能我们的数据包还没到达目标主机ttl就被减少到零。如下:
nmap -sn -ttl 10 152.32.251.110

使用TTL技术可以检测我们的主机和目标主机之间经过了几跳。

空闲IdIe扫描(-sI)

这种扫描可以算是当前最复杂的一种扫描方式,也是隐蔽性最好的扫描方式,具体的扫描原理可以在Nmap官网中查看。想要做到完全隐身的空闲扫描,携带(-Pn)参数是必须的,因为ping 数据包会从攻击者的实际地址发送到目标。除此之外,我们还需要找到僵尸主机中没有防火墙存在的主机,并且我们和僵尸主机之间保证很少会有通信产生,否则可能会影响结果的准确性。虽然空闲扫描的技术原理很精妙,但因为过于严苛的使用条件,导致我们很少会真正用到,我手头上当前并未有关闭防火墙的主机,我尝试使用了没有关闭防火墙的Windows和Linux主机,都无法充当僵尸主机,这里就不做实际演示了。
nmap -sI 僵尸主机IP:端口号 -Pn 目标主机

Nmap的格式化输出

我们进行nmap扫描后,如果需要把结果进行保存,可以使用nmap提供的几种方法:

  1. 保存为文本文件-oN: nmap -sn -oN "保存路径" 目标
    如: nmap -sn -oN "C:\网安相关软件\Nmap\保存的数据\文本文件.txt" 152.32.251.110
    在这里插入图片描述
  2. 保存为XML文件-oX: nmap -sn -oX "保存路径" 目标
  3. 保存为grep文件-oG: nmap -sn -oG "保存路径" 目标

除此之外,我们还可以使用nmap可视化(Zenmap)的保存功能
在这里插入图片描述

脚本使用

Nmap扩展脚本: NSE(Nmap Scripts Extend),极大的增强了Nmap的使用场景,这是Nmap脱颖而出的关键技术,Nmap扩展脚本基于lua语言开发,内部封装的lua解释器,所以我们如果想要自己写一个Nmap扩展脚本,需要使用lua开发,不过你不会lua也不要担心,nmap为我们准备了数百个已经写好的脚本供我们日常使用。Nmap默认将脚本存放在\Nmap\scripts路径中。

脚本分类

分类描述
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

选择和查看脚本

如果你并不了解有哪些脚本,脚本功能是什么,可以在Zenmap中配置编辑器中查看脚本及其说明
在这里插入图片描述
在命令行中我们使用脚本有多重方式,--script <文件名> | <类别> | <目录> | <表达式>
文件名: nmap --script http-git 152.32.251.110 (用于发现git服务)
目录: nmap --script I:\网安\Nmap\scripts 152.32.251.110
类别: 默认(default)类别。nmap --script default 152.32.251.110
在这里插入图片描述
默认(default)类别中,包含了:

  1. banner.NSE: banner直译为横幅、旗帜,他是指目标的一些软件开发商、软件名称、版本、服务类型等信息,可以看做为服务器的用户画像信息。此脚本就是用来收集服务器的这些信息。
  2. broadcast-ping.NSE: 此脚本会使用广播ping的方式来发现网络中的主机。
  3. dns-recursion.NSE:针对DNS服务器,看其是否允许第三方的查询。(允许的话可能会存在DNS放大攻击)
  4. upnp-info.NSE:尝试通过UPnP来提取系统信息。
  5. Firewalk.NSE: 使用IP协议中的TTL过期机制来尝试发现防火墙设备。

剩下还很多,我就不一一介绍了,如果想查看每个类型的所有脚本,可以在配置编辑器中输入脚本类型后查看已自动勾选的所有脚本
在这里插入图片描述
除此之外,nmap的脚本还支持<表达式>,比如通配符*、和运算符notorand

比如可以使用nmap --script http-*为所有http-开头的脚本、nmap --script "http-* and not http-git"为除了http-git以外的http-开头脚本等。

脚本传参

传参参数: --script-args
除此之外,我们还能使用文件的形式进行传参: --script-args-file
这里我们使用http-methods的脚本的http.useragent脚本参数的说明
在这里插入图片描述
我们先使用常规不携带参数时尝试扫描目标nmap -p80 --script http-methods 114.67.84.105
在这里插入图片描述

在这里插入图片描述
会发现在请求信息中,我们的nmap诚实的告诉了对方,我们在拿扫描器扫描你User-Agent: Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)\r\n如果我们想要模仿真实浏览器访问,需要更换这个请求头,这时候,我们就需要用到传参nmap -p80 --script http-methods --script-args http.useragent="Mozilla/5.0 (Windows NT 10.0; Win64; x64)" 114.67.84.105
在这里插入图片描述
nmap -p80 --script http-methods --script-args-file I:\网安\临时数据\nmap脚本参数.txt 114.67.84.105
在这里插入图片描述

脚本调试

如果我们想一探脚本的原理,并非一定要去阅读其源码,因为lua语言并不流行,想读懂源码,我们需要付出较大的学习成本。不过我们可以使用一些调试参数,来查看我们使用的脚本究竟干了一些啥,发送和接收了什么数据等。

  1. --script-trace: 跟踪调试脚本,并不是所有脚本都会输出脚本的跟踪调试信息。
  2. -d[1-9]: 调试模式,数字最大,调试信息越详细,比如:nmap --script http-git -d9 152.32.251.110
  3. --packet-trace: 查看所有发送和接收的数据包。

Nmap中一些常用的NSE脚本