您现在的位置是:网站首页> 编程资料编程资料

Nmap备忘单 从探索到漏洞利用 第四章 绕过防火墙_工具使用_网络安全_

2023-05-24 301人已围观

简介 Nmap备忘单 从探索到漏洞利用 第四章 绕过防火墙_工具使用_网络安全_

这是我们的Nmap备忘单的第四部分(Part 1、 Part 2、 Part 3)。本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等。在此之前,我们应该了解一下防火墙的一些基础知识以便绕过它。

什么是防火墙?

防火墙是用来控制网络访问的软件或硬件。分为以下两类:1、基于主机的防火墙;2、基于网络的防火墙。

基于主机的防火墙

这是在单台主机上运行的软件,用来控制入站流量(从网络向主机)和出站流量(从主机向网络)。这些软件安装于操作系统之上,常见例子就是Linux上面的iptables和Windows上的Zone Alarm。

基于网络的防火墙

这些可以是硬件设备或软件,或者硬件设备和软件相结合。用来保护来自于未受保护的入站通信。

防火墙被安装在受保护和不受保护的网络之间,它们会查看所有的通信,并通过设置规则来控制入站和出站的通信。

扫描防火墙

为了有效地扫描防火墙,我们必须检查所有开放端口,服务和状态。在使用Nmap扫描时也要采取行动,设置时间选项来确定防火墙的存在。所以你可以看到下面有关Nmap扫描结果的表格,我们可以很容易地知道防火墙是否存在。

1.png

通过谷歌搜索时候我才知道,下面的IP地址是由WAF(Web应用防火墙),以及某些IDS保护下。我们试图以某种强力攻击(SQL注入)。我们提交一些特殊字符时,它都会被显示“失败的防火墙认证”。我们才知道这个东西可以用HTTP动词篡改来绕过。我们将稍后讨论。

Clipboard Image.png

首先我们使用选项-Pn进行扫描。

Clipboard Image.png

发现有被过滤的端口,因此我们肯定服务器有防火墙保护,我们扫描指定端口获得更多的信息。

Clipboard Image.png

让我们做一个内部网络扫描。首先,我们将检查扫描版本:

Clipboard Image.png

通过指定时间选项和端口选项发现了更多服务。

Clipboard Image.png

观察:

扫描防火墙给内部网络提供的各种服务,包括DNS,SSH,HTTPS和Web代理。这些都是在内部网络中的所有PC可以访问。它也在80端口运行透明代理,所以并不需要客户端的浏览器更改设置。

逃避或绕过防火墙

bypass或规避或逃避无非是进入系统的另一种方式。管理员使用防火墙或IDS / IPS阻止恶意攻击或垃圾邮件。但是从攻击者的角度来看,他会想办法绕过防火墙规则;Nmap有很多办法绕过防火墙。

1、碎片化

Nmap发送8个字节的数据包绕过防火墙/IDS/IPS。这种技术已经很古老了,但是在防火墙配置不当的时候依旧有用。

Nmap -f host

Clipboard Image.png

MTU,最大传输单元,它是碎片化的别名,我们可以指定它的大小。

Nmap --mtu 16 host

Clipboard Image.png

上面的Nmap扫描使用16字节的数据包而不是8个字节。所以我们可以指定自定义数据包大小为8的倍数。

2、诱饵

这种类型的扫描是非常隐蔽且无法察觉。目标由多个假冒或伪造IP地址进行扫描。这样防火墙就会认为攻击或扫描是通过多个资源或IP地址进行,于是就绕过了防火墙。

Clipboard Image.png

诱饵在初始的ping扫描(使用ICMP,SYN,ACK等)使用,在实际的端口扫描阶段使用。诱饵在远程操作系统检测(-O)期间也使用。诱饵不在版本检测工作或TCP连接扫描中使用。

这实际上在目标看来是由多个系统同时扫描,这使得防火墙更难追查扫描的来源。

有两种方式来执行诱饵扫描:

1.nmap –D RND:10 TARGET

Clipboard Image.png

2.nmap –D decoy1,decoy2,decoy3 target

Clipboard Image.png

以下网络抓包显示多个诱饵将欺骗防火墙。

Clipboard Image.png

3、空闲扫描

攻击者将首先利用一个空闲的系统并用它来扫描目标系统。

扫描的工作原理是利用某些系统中采用可预见的IP序列ID生成。为了使空闲扫描成功,僵尸主机的系统必须是在扫描时间处于闲置状态。对于任何疑问,请参考之前的文章。

在这种技术中会隐藏攻击者的IP地址。

Nmap –P0 -sI zombie target

Clipboard Image.png

我们使用tcpdump来捕获所有网络流量。

Tcpdump -i interface

Clipboard Image.png

4、选项–source-port

每个TCP数据包带有源端口号。默认情况下Nmap会随机选择一个可用的传出源端口来探测目标。该–source-port选项将强制Nmap使用指定的端口作为源端口。这种技术是利用了盲目地接受基于特定端口号的传入流量的防火墙的弱点。端口21(FTP),端口53(DNS)和67(DHCP)是这种扫描类型的常见端口。

Nmap --source-port port target

Clipboard Image.png

5、随机数据长度:

附加随机数据长度,我们也可以绕过防火墙。许多防火墙通过检查数据包的大小来识别潜伏中的端口扫描。这是因为许多扫描器会发送具有特定大小的数据包。为了躲避那种检测,我们可以使用命令–data-length增加额外的数据,以便与默认大小不同。在下图中,我们通过加入25多个字节改变数据包大小。

Clipboard Image.png

nmap --data-length target

捕获数据流量

Clipboard Image.png

6、随机顺序扫描目标:

选项–randomize-host用于随机 顺序扫描指定目标。–randomize-host有助于防止因连续 扫描多个目标而防火墙和入侵检测系统检测到。

nmap --randomize-hosts targets

Clipboard Image.png

7、MAC地址欺骗:

每台机器都有自己独特的mac地址。因此这也是绕过防火墙的另一种方法,因为某些防火墙是基于MAC地址启用规则的。为了获得扫描结果,您需要先了解哪些MAC地址可以使用。这可以通过手动或先进的模糊测试完成。我更喜欢模糊测试,用Python实现非常容易。我们只需要手工导入正则表达式到Python中,然后自动化执行。

特别是–spoof-MAC选项使您能够从一个特定的供应商选择一个MAC地址,选择一个随机的MAC地址,或者设定您所选择的特定MAC地址。 MAC地址欺骗的另一个优点是,你让你的扫描隐蔽,因为你的实际MAC地址就不会出现在防火墙的日志文件。

nmap -sT -PN –spoof-mac aa:bb:cc:dd:ee:ff target

Clipboard Image.png

Mac地址欺骗需要以下参数:

2.png

8、发送错误校验

在某些防火墙和IDS / IPS,只会检查有正确校验包的数据包。因此,攻击者通过发送错误校验欺骗IDS / IPS。

nmap --badsum target

Clipboard Image.png

9、Sun-RPC 扫描

什么是Sun RPC?Sun RPC(远程过程调用)是一种Unix协议,用来实现多种服务比如NFS。最初由Sun开发,但现在广泛使用在其他平台上(包括Digital Unix的)。也被称为开放式网络计算(ONC)。

Sun RPC包带有一个RPC编译器,自动生成服务端和客户端的存根。

nmap带有将近600个RPC程序的数据库。许多RPC服务使用高端口编号或者使用UDP协议,RPC程序还有严重的远程利用漏洞。所以网络管理员和安全审计人员往往希望了解更多在他们的网络内有关任何RPC程序。

我们可以通过以下命令获得RPC的详细信息:

rpcinfo/rpcinfo --p hostname

Clipboard Image.png

nmap通过以下三个步骤跟开放的RPC端口直接通信,然后获取信息。

1)使用TCP或者UDP扫描开放的端口。

2)-sV选项检查使用Sun RPC协议的开放端口。

3)RPC暴力破解引擎会逐一向nmap-rpc数据库中记录的端口发送空命令,来判断RPC程序。当nmap猜测错误,会收到一条错误消息,指出请求的端口并没有运行PRC程序。当nmap耗尽了所有已知的记录,或者端口返回了非RPC的数据包,nmap才会放弃。

SSL后处理器扫描

NMAP具有检测SSL加密协议的能力,进行版本检测时会自动启用这个功能。正如先前讨论的RPC扫描,只要检测一个适当的(SSL)端口自动执行将SSL后处理器扫描。

命令:

nmap -Pn -sSV -T4 –F target

Clipboard Image.png

NMAP服务探针文件格式

Nmap使用本地文件来存储版本检测探针和匹配字符串。虽然nmap自带的nmap-services足以满足大多数用户,理解文件格式有助于渗透测试人员添加新的规则到扫描引擎中。#号开始的行用于注释和忽略。

排除指令

版本扫描中会排除指定的端口。它只能使用一次,在所有的探针指令的最上方,位于文件顶部。端口应该用逗号分隔。

语法:Exclude

探针指令

语法:Probe

例子:

Probe TCP GetRequest q|GET / HTTP/1.0\r\n\r\n|

Probe UDP DNSStatusRequest q|\x10|

Probe TCP NULL q||

探针指令告诉nmap发送指定字符串去识别服务。参数如下:

<协议>

这必须是TCP或UDP。 NMAP只使用匹配它试图扫描服务的协议的探针。

<探测器名称>

这是一个纯英文名称。

<探测字符串>

告诉Nmap发送什么。它必须有一个q,用分隔符标记字符串的开始和结束。它允许下列标准转义字符C或Perl的字符串:\\ , \a, \b, \f, \n, \r, \t, \v,和\xHH( H是任何十六进制数字)。Nmap的探针也有空内容探针比如上面的第三个例子,这个TCP空探针用来接收服务返回的banner。如果你的分隔符(在这些例子中是|)需要在探测字符串中,你需要选择不同的分隔符。

语法:match []

Examples:

match ftp m/^220.*Welcome to .*Pure-?FTPd (\d\S+\s*)/ p/Pure-FTPd/ v/$1/ cpe:/a:pureftpd:pure-ftpd:$1/

match ssh m/^SSH-([\d.]+)-OpenSSH[_-]([\w.]+)\r?\n/i p/OpenSSH/ v/$2/ i/protocol $1/ cpe:/a:openbsd:openssh:$2/

match mysql m|^\x10\x01\xff\x13\x04Bad handshake$| p/MySQL/ cpe:/a:mysql:mysql/

match chargen m|@ABCDEFGHIJKLMNOPQRSTUVWXYZ|

match uucp m|^login: login: login: $| p/NetBSD uucpd/ o/NetBSD/ cpe:/o:netbsd:netbsd/a

match printer m|^([\w-_.]+): lpd: Illegal service request\n$| p/lpd/ h/$1/

match afs m|^[\d\D]{28}\s*(OpenAFS)([\d\.]{3}[^\s]*)| p/$1/ v/$2/

 

匹配指令

匹配指令告诉Nmap如何根据之前发送探针后服务器的响应来识别服务。每一个探针后可跟随数十或数百个匹配的语句。匹配指令包括:可选的版本说明,应用程序名称,版本号,以及Nmap报告的其他信息。该参数这个指令如下:

<服务>

这是简单的模式匹配的服务名称。比如ssh、smtp、http或snmp。

<模式>

该模式被用来确定接收到的响应是否与先前给出的服务参数相匹配。格式如Perl,使用语法为m/[regex]/[opts]。“m”告诉Nmap一个匹配的字符串开始。正斜杠(/)是一个分隔符。该正则表达式是一个Perl风格的正则表达式。目前可以配置的选项是‘i’(不区分大小写),‘s’(.也可以匹配换行符)。在Perl这两个选项具有相同的语义。用括号包围需要捕获的字符串,比如版本号。

<版本信息>

部分实际上包含几个可选字段。每个字段始于一个确认字母(如h为“主机名”)。接下来是一个分隔符,优选的分隔符是斜杠(’/'),除非是在斜杠会在内容中体现。接下来是字段的值,然后是分隔符。下表描述了六个字段:

3.png

软匹配指令

语法:softmatch

样例:

softmatch ftp m/^220 [-.\w ]+ftp.*\r\n$/i

softmatch smtp m|^220 [-.\w ]+SMTP.*\r\n|

softmatch pop3 m|^\+OK [-\[\]\(\)!,/+:<>@.\w ]+\r\n$|

软匹配指令和匹配指令的格式类似,主要区别在于软匹配成功之后仍会继续扫描,但只会发送与匹配成功的服务有关的探针,这有助于获得更多信息,比如版本号。

端口和SSL端口指令

语法:port

样例:

ports 21,43,110,113,199,505,540,1248,5432,30444

ports 111,4045,32750-32810,38978

这个命令告诉nmap通过哪些端口去标识服务。语法类似于nmap的-p选项。

语法:sslports

样例:sslports 443

这个是用来探测ssl服务的端口。

totalwaitms指令

语法:totalwaitms

样例:totalwaitms 5000

这个指

-六神源码网