JSP Webshell中的编码问题

🏷️ 365bet现金信誉网 📅 2025-10-17 00:37:39 ✍️ admin 👀 1410 ❤️ 914
JSP Webshell中的编码问题

前言前面提及了最普通的JSP Webshell的构造,以及通过分析在java编译过程中对unicode编码的解码过程学习了一些在JSP中的关于unicode编码的绕过方法

这里主要是通过学习了在动态生成java文件的过程中,针对标准的JSP语法和XML格式的语法的编码的获取和解码进行编码~~~~

embed encoding这里主要是使用在JSP页面中支持的编码进行多次不同的编码进行混淆

主要是Y4tacker师傅的研究成果进行一些代码上面的复现

针对编码的探测主要集中在generateJava方法(通过jsp页面生成等价的servlet页面)中

根据注释的内容我们可以明白主要是通过两步

step1: 首先解析jsp中的所有指令

step2: the whole translation unit

指令的解析集中在ParserController#parseDirectives

我们这仅关注一些关于编码的内容

这里的jspConfigPageEnc变量,是通过getJspConfigPageEncoding方法中Jsp config中获取的,也就是在web.xml中的标签中的内容

之后就是通过determineSyntaxAndEncoding来探测我们需要处理的是标准的JSP语法还是通过XML语法编写的jsp页面,并且获取他们所使用的编码

并通过isXml和sourceEnc分别来保存探测的结果,默认不是xml格式

可以通过在jsp config中的来判断,或者通过.jspx / .tagx这两个后缀作为标志

如果是JSP语法格式,就从jsp-config中获取特定的编码,如果在jsp-config中并没有指定具体的编码,将在后面通过BOM进行探测

https://en.wikipedia.org/wiki/Byte_order_mark#Byte_order_marks_by_encoding

上面是通过jsp-config中的配置进行编码的获取的

而如果没有如上面的后缀,只是一个简单的.jsp后缀,而且也没有在jsp-config中使用标签进行显示的指明

将会通过EncodingDetector进行编码的自动探测

在Y4tacker师傅中,环境是tomcat 8.0.50版本的,是通过XMLEncodingDetector类对象进行自动探测的,该类在高版本中被遗弃甚至移除

但是不影响,我们关注EncodingDetector

对于auto detect核心是通过processBom进行BOM的解析

通过stream流中的前四个字节进行编码的判断,如果探测失败,默认是UTF-8编码

支持有很多编码--UTF-16BE / UTF-16LE / UTF-8 / ISO-10646-UCS-4 / CP037 ......等等

通过BOM探测失败,默认为UTF-8编码

以上就是第一处的编码的解析,即通过BOM对stream流进行探测

紧接着就是就是通过XML形式的语法,通过获取他的encoding属性值

这里主要是逻辑是:

如果在

当然如果没有该属性值,则还是指定为前面通过BOM判断出的编码

而对于encoding的值的获取

最后上面获取的编码方法保存在sourceEnc中,而是否是通过BOM探测到编码通过isBomPresent来标识

接下来会继续判断是否是在解析一个XML语法的文件

核心是通过创建一个JspReader,通过hasJspRoot方法检测在JSP页面中是否存在有xxx:root标签,如果有则证明正在解析的是一个XML语法,将isXml置为true

这里规定了标签一定要是第一个元素,之后通过切片获取xx

参考https://tttang.com/archive/1840/#toc__7

https://y4tacker.github.io/2022/05/16/year/2022/5/JspWebShell%E6%96%B0%E5%A7%BF%E5%8A%BF%E8%A7%A3%E8%AF%BB/#%E5%86%99%E5%9C%A8%E5%89%8D%E9%9D%A2

https://www.eclipse.org/articles/Article-Internationalization/how2I18n.html

https://yzddmr6.com/

Webshell攻防下的黑魔法-yzddmr6

🎯 相关推荐

意大利巴西世界杯,意大利历届世界杯排名
过敏反应及其防治
det365手机版

过敏反应及其防治

📅 06-30 👀 9142
如何在微信上充值有限额吗?微信充值金额规则详解