欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

如何通过滥用SSL TLS绕过Web应用程序防火墙

来源: 作者: 时间:2019-02-24 21:00 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助


介绍
近些年来,Web安全已经逐渐变成了IT安全领域里非常重要的一个部分。Web应用的优势就在于开发人员可以在较短的时间内集成各种关键服务,而且维护难度也比传统的桌面端应用程序要低很多。除了设计新的Web标准之外,企业对Web应用的安全需求也在不断变化。在这篇文章中,我们将跟大家介绍一种针对防火墙的新型绕过技术。
漏洞背景
近期,我对某公司的网络防火墙进行了测试,该公司所部署的基础设施架构如下:

当我拿到我所需要的数据信息之后,我打算尝试一些不同的绕过方法来对其基础设施进行渗透测试。除了一些常规的WAF测试方法之外,我准备利用SSL Cypher来绕过WAF。当我第一次登录WAF时,系统弹出了一个“Unsupported SSL Ciphers”警告信息,这就非常有意思了,查看了详细的产品文档之后,我获取到了该设备支持的所有SSL Cypher,但是在开始之前我想跟大家简单介绍一下SSL连接的工作机制。
SSL握手由下面三个主要步骤组成:
ClientHello/ServerHello阶段
握手过程由客户端发送的ClientHello消息开始,这条消息包含了服务器端需要的全部信息。服务器端受到连接消息之后会响应一条ServerHello消息,其中包含了客户端所需要的信息。除此之外,服务器还会返回需要使用到的相关Cypher套件版本以及SSL版本。
证书交换
连接初始化完成之后,服务器需要向客户端提供身份验证信息,服务器会给客户端发送SSL证书,客户端会验证证书的真实性,并确定是否可以信任该证书,然后继续完成连接。
密钥交换
此时安全信道以建立成功,服务器和客户端会交换用于加密和解密数据的密钥。
攻击思路
我的攻击思路如下:如果我使用一个“不被WAF支持”的SSL Cypher来跟目标Web服务器进行初始化连接,而这个Web服务器实际上是支持这个Cypher版本的,那么WAF就无法识别我所进行的攻击了,因为它无法查看到真实的请求数据。
因此,在查看了防火墙厂商所提供的详细技术文档之后,我提取出了所有支持的SSL Cypher,相关内容如下所示。
SSLv3
SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_DES_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_RSA_EXPORT_WITH_RC4_40_MD5
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
TLS/1.0-1.2
TLS_RSA_WITH_NULL_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_EXPORT1024_WITH_RC4_56_MD5
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_RC4_128_MD5= { 0x000x04 }
TLS_RSA_WITH_RC4_128_SHA= { 0x000x05 }
TLS_RSA_WITH_DES_CBC_SHA= { 0x000x09 }
接下来要做的就是识别目标Web服务器所支持的SSL Cypher了,这一步有很多种方法可以实现,但我选择利用sslscan这款工具,因为它安装起来比较简单,而且还可以提供非常多的详细数据。
pwn@thinkpad:~$sudo apt install sslscan
Readingpackage lists... Done
Buildingdependency tree      
Readingstate information... Done
Thefollowing NEW packages will be installed:
  sslscan
0upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Needto get 26,7 kB of archives.
Afterthis operation, 81,9 kB of additional disk space will be used.
Get:1http://al.archive.ubuntu.com/ubuntu bionic/universe amd64 sslscan amd641.11.5-rbsec-1.1 [26,7 kB]
Fetched26,7 kB in 0s (73,8 kB/s) 
Selectingpreviously unselected package sslscan.
(Readingdatabase ... 177002 files and directories currently installed.)
Preparingto unpack .../sslscan_1.11.5-rbsec-1.1_amd64.deb ...
Unpackingsslscan (1.11.5-rbsec-1.1) ...
Processingtriggers for man-db (2.8.3-2) ...
Settingup sslscan (1.11.5-rbsec-1.1) ...
pwn@thinkpad:~$sslscan http://target/ | grep Accept
上述命令可以列举出目标Web服务器支持的所有SSL/TLS版本以及Cypher。通过将sslscan的扫描结果与产品文档数据进行对比之后,我发现了Web应用防火墙不支持但Web服务器支持的Cypher:
Accepted TLSv1 256 bits ECDHE-RSA-AES256-SHA
为了测试我的攻击思路是否正确,我创建了一条WAF规则,它会屏蔽请求路径为/ssl-cipher-test的网络请求。
访问这条路径之后,连接便会被成功屏蔽:

利用这种绕过技术的最快方法就是指定客户端所使用的Cypher,只留下一个就可以了。你可以利用curl的“—ciphers”命令来指定需要使用的Cypher,这里我指定使用ECDHE-RSA-AES256-SHA:

[1] [2]  下一页


介绍
近些年来,Web安全已经逐渐变成了IT安全领域里非常重要的一个部分。Web应用的优势就在于开发人员可以在较短的时间内集成各种关键服务,而且维护难度也比传统的桌面端应用程序要低很多。除了设计新的Web标准之外,企业对Web应用的安全需求也在不断变化。在这篇文章中,我们将跟大家介绍一种针对防火墙的新型绕过技术。
漏洞背景
近期,我对某公司的网络防火墙进行了测试,该公司所部署的基础设施架构如下:

当我拿到我所需要的数据信息之后,我打算尝试一些不同的绕过方法来对其基础设施进行渗透测试。除了一些常规的WAF测试方法之外,我准备利用SSL Cypher来绕过WAF。当我第一次登录WAF时,系统弹出了一个“Unsupported SSL Ciphers”警告信息,这就非常有意思了,查看了详细的产品文档之后,我获取到了该设备支持的所有SSL Cypher,但是在开始之前我想跟大家简单介绍一下SSL连接的工作机制。

无奈人生安全网

SSL握手由下面三个主要步骤组成:
ClientHello/ServerHello阶段
握手过程由客户端发送的ClientHello消息开始,这条消息包含了服务器端需要的全部信息。服务器端受到连接消息之后会响应一条ServerHello消息,其中包含了客户端所需要的信息。除此之外,服务器还会返回需要使用到的相关Cypher套件版本以及SSL版本。
证书交换
连接初始化完成之后,服务器需要向客户端提供身份验证信息,服务器会给客户端发送SSL证书,客户端会验证证书的真实性,并确定是否可以信任该证书,然后继续完成连接。
密钥交换
此时安全信道以建立成功,服务器和客户端会交换用于加密和解密数据的密钥。
攻击思路
我的攻击思路如下:如果我使用一个“不被WAF支持”的SSL Cypher来跟目标Web服务器进行初始化连接,而这个Web服务器实际上是支持这个Cypher版本的,那么WAF就无法识别我所进行的攻击了,因为它无法查看到真实的请求数据。 无奈人生安全网
因此,在查看了防火墙厂商所提供的详细技术文档之后,我提取出了所有支持的SSL Cypher,相关内容如下所示。
SSLv3
SSL_RSA_WITH_NULL_MD5
SSL_RSA_WITH_NULL_SHA
SSL_RSA_WITH_RC4_128_MD5
SSL_RSA_WITH_RC4_128_SHA
SSL_RSA_WITH_DES_CBC_SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA
SSL_RSA_EXPORT_WITH_RC4_40_MD5
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA
TLS/1.0-1.2
TLS_RSA_WITH_NULL_SHA256
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_EXPORT1024_WITH_RC4_56_MD5
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA
TLS_RSA_WITH_AES_128_CBC_SHA256
TLS_RSA_WITH_AES_256_CBC_SHA256
TLS_RSA_WITH_RC4_128_MD5= { 0x000x04 }
TLS_RSA_WITH_RC4_128_SHA= { 0x000x05 }
TLS_RSA_WITH_DES_CBC_SHA= { 0x000x09 }
接下来要做的就是识别目标Web服务器所支持的SSL Cypher了,这一步有很多种方法可以实现,但我选择利用sslscan这款工具,因为它安装起来比较简单,而且还可以提供非常多的详细数据。 内容来自无奈安全网
pwn@thinkpad:~$sudo apt install sslscan
Readingpackage lists... Done
Buildingdependency tree      
Readingstate information... Done
Thefollowing NEW packages will be installed:
  sslscan
0upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Needto get 26,7 kB of archives.
Afterthis operation, 81,9 kB of additional disk space will be used.
Get:1http://al.archive.ubuntu.com/ubuntu bionic/universe amd64 sslscan amd641.11.5-rbsec-1.1 [26,7 kB]
Fetched26,7 kB in 0s (73,8 kB/s) 
Selectingpreviously unselected package sslscan.
(Readingdatabase ... 177002 files and directories currently installed.)
Preparingto unpack .../sslscan_1.11.5-rbsec-1.1_amd64.deb ...
Unpackingsslscan (1.11.5-rbsec-1.1) ...
Processingtriggers for man-db (2.8.3-2) ...
Settingup sslscan (1.11.5-rbsec-1.1) ...
pwn@thinkpad:~$sslscan http://target/ | grep Accept
上述命令可以列举出目标Web服务器支持的所有SSL/TLS版本以及Cypher。通过将sslscan的扫描结果与产品文档数据进行对比之后,我发现了Web应用防火墙不支持但Web服务器支持的Cypher: 内容来自无奈安全网
Accepted TLSv1 256 bits ECDHE-RSA-AES256-SHA
为了测试我的攻击思路是否正确,我创建了一条WAF规则,它会屏蔽请求路径为/ssl-cipher-test的网络请求。
访问这条路径之后,连接便会被成功屏蔽:

利用这种绕过技术的最快方法就是指定客户端所使用的Cypher,只留下一个就可以了。你可以利用curl的“—ciphers”命令来指定需要使用的Cypher,这里我指定使用ECDHE-RSA-AES256-SHA:
www.wnhack.com

[1] [2]  下一页 内容来自无奈安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。