赞
踩
Nmap虽然没有直接提供检测、破坏防火墙的方法,但我们可以利用Nmap的一些功能进行伪装,绕过防火墙的封锁。
将原本的数据包进行分段发送,分段后,每段的数据都不完整,增加过滤规则和防火墙的检测难度,但需要注意的是:
语法: nmap -f 目标
例: nmap -f 129.211.85.3
PS: 为了加快扫描速度,和让发送的扫描数据包数量减少,方便我们查看抓包后的区别,我在上述使用了-sn
参数,功能是只进行主机发现,不进行端口扫描。
最大传输单元(Maximum Transmission Unit,MTU),有些服务器可能对所能接受数据服务单元的最大尺寸做出了一些限制,这时候,我们就可以使用-mtu
进行相应的限制,将多出的数据进行分包,来避免被规则限制拦截。这种方法的原理和分段数据包比较像,只是手动设置了分包的数据大小。所以上述分段数据包有的特性,这里也都有。
但需要注意的是,-mtu
的值必须是8的整数倍。
语法: nmap -mtu 数据大小 目标
例: nmap -mtu 16 129.211.85.3
-D
)我在之前的博客中提到过,nmap只能进行主动扫描,所以每次我们扫描目标主机的时候都可能会产生一个记录,为了避免被对方主机发现我们而将我们IP进行封锁,我们可以使用诱饵主机,伪造多个主机一起发送请求,这样就算目标主机知道有人在扫描它,但它也并不知道是那台主机在扫描它。
但需要注意的是
-sT
)时,无法使用诱饵主机。我们可以指定诱饵主机的诱饵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
--spoof-mac
)除了IP可能会被封锁外,我们的MAC地址也是让对方识别我们的一个标识,所以nmap也相应的提供了MAC地址伪装技术。首先我们来了解一下MAC地址的一些规则,
组织唯一标识符
(OUI)由IEEE(电气和电子工程师协会)分配给厂商,它包含24位。IEEE会保证他在个个厂家之间不会冲突。扩展唯一标识符
(EUI)由厂家自行分配,厂家会保证此标识符在个个设备之间不会重复。MAC地址也有三种利用方式:
nmap的MAC地址欺骗技术用法很多,下面我来一一介绍,不过首先要知道的是,我们使用mac的地址欺骗技术会使得主机发现技术失效,所以我们如果要使用MAC地址需要写到-Pn
参数,此参数可以手动设定目标主机为活跃主机,跳过主机发现阶段。
0
。这应该是使用最多的参数了,它会自动帮我们随机生成一个mac的地址。nmap -Pn --spoof-mac 0 129.211.85.3
12位(十六进制,偶数,两个一组,每组使用:冒号隔开)
。手动指定MAC,最好是你非常了解MAC地址的规则,否则,最好不要自己写。可以利用一些在线的MAC地址生成器生成想要类型的MAC地址。nmap -Pn --spoof-mac C0:75:C8:07:2A:16 129.211.85.3
6位(十六进制)
。指定组织唯一标识符(OUI)让nmap自动生成一个扩展唯一标识符。下列我使用的B8:C3:85
是华为MAC组织唯一标识符(OUI)。nmap -Pn --spoof-mac B8:C3:85 129.211.85.3
厂商名称
。使用指定厂商的MAC地址。不过因为这里厂商名严格区分大小写,使用起来并不是很方便。nmap -Pn --spoof-mac Apple 129.211.85.3
--data-length
)默认情况下,Nmap发送的数据报文为空,这种空数据包会被一些安全检测机制拦截,nmap为了避开这种拦截,提供了填充一些随机数据的功能。不过需要注意的是这个选项会使得很多ping和端口扫描变慢。
使用方法: nmap --data-length 数据长度 目标
nmap -sn --data-length 50 152.32.251.110
--ttl
)存活时间(time-to-live域)它主要指的是可以存活的跳数,用来预防环路出现。我们发送的数据包每经过一个正常使用TCP/IP协议的主机,ttl
都会减一,如果ttl
被减到零,我们的数据包就会被丢弃,并像我们的主机返回一个失败的信息。
用法: nmap --ttl 数量 目标
如果跳数过少,可能我们的数据包还没到达目标主机ttl就被减少到零。如下:
nmap -sn -ttl 10 152.32.251.110
使用TTL技术可以检测我们的主机和目标主机之间经过了几跳。
-sI
)这种扫描可以算是当前最复杂的一种扫描方式,也是隐蔽性最好的扫描方式,具体的扫描原理可以在Nmap官网中查看。想要做到完全隐身的空闲扫描,携带(-Pn
)参数是必须的,因为ping 数据包会从攻击者的实际地址发送到目标。除此之外,我们还需要找到僵尸主机中没有防火墙存在的主机,并且我们和僵尸主机之间保证很少会有通信产生,否则可能会影响结果的准确性。虽然空闲扫描的技术原理很精妙,但因为过于严苛的使用条件,导致我们很少会真正用到,我手头上当前并未有关闭防火墙的主机,我尝试使用了没有关闭防火墙的Windows和Linux主机,都无法充当僵尸主机,这里就不做实际演示了。
nmap -sI 僵尸主机IP:端口号 -Pn 目标主机
我们进行nmap扫描后,如果需要把结果进行保存,可以使用nmap提供的几种方法:
保存为文本文件-oN
: nmap -sn -oN "保存路径" 目标
如: nmap -sn -oN "C:\网安相关软件\Nmap\保存的数据\文本文件.txt" 152.32.251.110
保存为XML文件-oX
: nmap -sn -oX "保存路径" 目标
保存为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
)类别中,包含了:
banner
直译为横幅、旗帜,他是指目标的一些软件开发商、软件名称、版本、服务类型等信息,可以看做为服务器的用户画像信息。此脚本就是用来收集服务器的这些信息。剩下还很多,我就不一一介绍了,如果想查看每个类型的所有脚本,可以在配置编辑器中输入脚本类型后查看已自动勾选的所有脚本
除此之外,nmap的脚本还支持<表达式>,比如通配符*
、和运算符not
、or
、and
比如可以使用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
语言并不流行,想读懂源码,我们需要付出较大的学习成本。不过我们可以使用一些调试参数,来查看我们使用的脚本究竟干了一些啥,发送和接收了什么数据等。
--script-trace
: 跟踪调试脚本,并不是所有脚本都会输出脚本的跟踪调试信息。-d[1-9]
: 调试模式,数字最大,调试信息越详细,比如:nmap --script http-git -d9 152.32.251.110
--packet-trace
: 查看所有发送和接收的数据包。Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。