最新版雷池WAF文件上传绕过-jsp篇

渗透技巧 5个月前 admin
329 0 0


免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。本次测试仅供学习使用,如若非法他用,与平台和本文作者无关,需自行负责。

大家可以把安全绘景设为星标,这样就可以及时看到我们最新发布内容啦!

最新版雷池WAF文件上传绕过-jsp篇


一、简介

雷池Web应用防火墙是一款免费的WAF,它具备简单易用、强大可靠的特点。该系统基于业界领先的语义引擎检测技术,并以反向代理接入方式提供服务。长亭科技耗时近十年打造了这一产品,核心检测能力依托智能语义分析算法驱动。雷池的安装配置非常简单,同时提供卓越的防护效果。因此,越来越多的网站选择接入雷池,尤其受益于其社区版的免费优势。

二、环境

安装

在线安装:bash -c “$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/setup.sh)”

牧云助手安装:https://rivers.chaitin.cn/

安装部分比较简单,不做详细演示。

配置

有两处需要配置,一个是防护的站点,另一个是防护的等级。

防护站点配置:域名可以使用通配符,端口是雷池的访问端口,上游服务器就是后端真实业务的地址,因为雷池工作方式是反向代理,所以需要转发到后端真实业务地址上。

最新版雷池WAF文件上传绕过-jsp篇

防护等级配置:根据实际需求配置防护等级即可。

最新版雷池WAF文件上传绕过-jsp篇

测试环境:Linux(Centos)+雷池最新版+最高防护。

最新版雷池WAF文件上传绕过-jsp篇

注意:因为雷池社区版不支持Windows和Mac,所以所有的测试都是基于Linux。

最新版雷池WAF文件上传绕过-jsp篇

Web环境:docker搭建(java-sec-code),jdk/1.8.0_102、Apache Tomcat/8.5.11,不同版本之间可能会存在测试结果不一致的情况。

测试时间:2023/11/25

三、测试

绕过

先正常上传jsp文件看看防护是否生效,可以看到设置的防护已生效,被拦截了。

最新版雷池WAF文件上传绕过-jsp篇

对于文件上传的绕过,主要为Content-Type请求头和Content-Disposition描述行。

Content-Type请求头可以使用双写、大小写、特殊字符(空格、制表符)等进行绕过,测试发现双写、大小写无法绕过,但添加特殊字符(空格、制表符)可以绕过。

利用在boundary=后面添加空格绕过:

最新版雷池WAF文件上传绕过-jsp篇

利用在boundary=后面添加制表符绕过:

最新版雷池WAF文件上传绕过-jsp篇

Content-Disposition描述行可以利用的绕过方式较多,例如多属性名、多描述行、切换属性名引号、属性名添加特殊字符、语言特性、容器特性、系统特性等。测试发现多filename、分词符(;)、容器特性均可绕过。

利用双写filename绕过:

最新版雷池WAF文件上传绕过-jsp篇

利用分词符截断绕过:

最新版雷池WAF文件上传绕过-jsp篇

利用容器解析特性绕过:

最新版雷池WAF文件上传绕过-jsp篇

拓展

当使用了commons-fileupload组件且版本>1.3时,可以通过Base64编码和QP编码来绕过上传文件名的限制。简单来说就是:当filename以=?开头时,就会通过传入的不同方式进行解析,格式为=?charset?B/Q?xxx?=,其中charset是编码,B代表Base64编码,Q代表QP编码,xxx则是对应的编码值。例如:=?gbk?Q?=74=65=73=74=2e=6a=73=70?=

这里借用y4tacker师傅的脚本来快速生成对应编码后的值:

import base64
name = "test.jsp"encode = name.encode("utf-8")b = base64.b64encode(encode)print("=?utf-8?B?"+b.decode()+"?=")

res = ""for i in encode.decode("gbk"): tmp = hex(ord(i)).split("0x")[1] res += f"={tmp}"print("=?gbk?Q?"+res+"?=")

利用QP编码绕过:

最新版雷池WAF文件上传绕过-jsp篇

注:docker中没有对应的解析库导致文件名无法解码,但思路可行。

命令执行

上传后缀绕过后必须要shell可用才是真正的绕过,这里提供一种绕过内容检测的思路,通过jspx的CDATA和HTML实体化编码特性绕过。

最新版雷池WAF文件上传绕过-jsp篇

注:因为靶场将文件上传到/tmp/目录下无法解析,这里我直接在测试服务器上的tomcat目录中新建了一个1.jspx文件(文件内容一致)进行测试。

文件正常解析并执行命令:

最新版雷池WAF文件上传绕过-jsp篇

因为在公网服务器上直接放一个webshell太吓人,所以截了图就关掉了,重新启动了一个靶场环境(docker还是相较于更安全且需要登录)来测试命令执行。

雷池社区版目前只能部署在Linux服务器上,而Linux系统中执行命令的绕过方式有非常多的方式,我这里简单列举几个:单引号、双引号、反引号、括号、其他符号、环境变量等。本地测试如下:

最新版雷池WAF文件上传绕过-jsp篇

直接执行命令肯定是拦截的。

最新版雷池WAF文件上传绕过-jsp篇

在命令中间随便加一点不影响解析的符号即可绕过。

最新版雷池WAF文件上传绕过-jsp篇 最新版雷池WAF文件上传绕过-jsp篇 最新版雷池WAF文件上传绕过-jsp篇

读取敏感文件时,直接读肯定被拦截。

最新版雷池WAF文件上传绕过-jsp篇

可以通过通配符、垃圾字符等绕过。

最新版雷池WAF文件上传绕过-jsp篇 最新版雷池WAF文件上传绕过-jsp篇 最新版雷池WAF文件上传绕过-jsp篇

四、总结

本次测试时间比较匆忙,如有错误,请师傅们斧正。整体测试结果显示,雷池WAF相较传统的WAF更为强大,并且通过语义分析变得更智能化,增加了绕过的难度。在综合本次整体测试的观察中,主要利用了一些特性(例如语言、中间件、系统等)来绕过WAF的解析,从而使恶意文件、内容和命令得以逃逸。然而,文章中所提及的思路只是这些特性中的一小部分,其他的思路留给师傅们自行挖掘。

参考链接:

https://y4tacker.github.io/2022/02/25/year/2022/2/Java%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%A4%A7%E6%9D%80%E5%99%A8-%E7%BB%95waf(%E9%92%88%E5%AF%B9commons-fileupload%E7%BB%84%E4%BB%B6)/

广

0/1daypoc退

最新版雷池WAF文件上传绕过-jsp篇 最新版雷池WAF文件上传绕过-jsp篇 最新版雷池WAF文件上传绕过-jsp篇

原文始发于微信公众号(安全绘景):最新版雷池WAF文件上传绕过-jsp篇

版权声明:admin 发表于 2023年11月29日 上午11:04。
转载请注明:最新版雷池WAF文件上传绕过-jsp篇 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...