《Java表达式攻防下的黑魔法-release.pdf》由会员分享,可在线阅读,更多相关《Java表达式攻防下的黑魔法-release.pdf(44页珍藏版)》请在三个皮匠报告上搜索。
1、Java表达式攻防下的黑魔法演讲人:刘镇东(yzddMr6)刘镇东(yzddMr6),现就职于阿里云云安全能力建设团队l AntSword开发组核心成员,开源工具As-Exploits、WebCrack、Webshell-venom等作者,2022补天白帽大会演讲者l 目前主要从事RASP、恶意流量攻防研究,以及阿里云恶意文本检测引擎的建设l GITHUB: BLOG:l MAIL:自我介绍目录/CONTENTS背景介绍Magic in EL Expression表达式注入的武器化利用表达式注入下的绕过l Java灵活的表达式虽然带来了开发和使用的便捷性,但如果没有对输入进行过滤就直接解析执行
2、,则会引发严重的安全问题l 攻击者利用Java表达式注入漏洞可以实现任意代码的执行,或者利用表达式构造隐蔽的WebShell后门实现对服务器的长期控制l 历史上EL表达式、SpEL表达式、OGNL表达式等都曾引发过严重的安全问题,所以Java表达式下的攻防一直是安全人员研究的重点背景介绍CVE-2022-22947CVE-2022-22980CVE-2018-16621CVE-2018-14667CVE-2021-26084CVE-2017-9791CVE-2022-26134CVE-2017-1000112.CVE-2017-5638CVE-2017-8046CVE-2018-1273Mag
3、ic in EL Expressionn EL表达式是JSP 2.0规范的一部分,在Tomcat、WebLogic等中间件中默认支持,适用范围极广。n 借助强大的EL表达式,我们可以让JSP WebShell拥有很多动态特性,让我们的WebShell更加隐蔽灵活,逃过大多数引擎的检测关于EL表达式支持EL表达式的中间件.EL表达式的动态执行特性$.getClass().forName(javax.script.ScriptEngineManager).newInstance().getEngineByName(js).eval(java.lang.Runtime.getRuntime().ex
4、ec(open/)ERROR:无法解析Object中的方法getEngineByNameEL表达式的动态执行逻辑org.apache.jasper.runtime.PageContextImpl#proprietaryEvaluate -org.apache.el.parser.AstValue#getValue -org.apache.jasper.el.JasperELResolver#invoke -javax.el.BeanELResolver#invoke -java.lang.reflect.Method#invoke以点号为分隔符,解析成一个个的节点EL表达式的动态执行逻辑org
5、.apache.jasper.runtime.PageContextImpl#proprietaryEvaluate -org.apache.el.parser.AstValue#getValue -org.apache.jasper.el.JasperELResolver#invoke -javax.el.BeanELResolver#invoke -java.lang.reflect.Method#invoke循环反射,base为每轮递归反射之后保存的对象EL表达式的动态执行逻辑org.apache.jasper.runtime.PageContextImpl#proprietaryEva
6、luate -org.apache.el.parser.AstValue#getValue -org.apache.jasper.el.JasperELResolver#invoke -javax.el.BeanELResolver#invoke -java.lang.reflect.Method#invokel resolver数组主要保存具体的节点处理,比如说list的处理,array节点的处理等。在这里用到的是BeanELResolverl resolve成功后会在context做一个标记,告诉上文这里的节点被找到了EL表达式的动态执行逻辑org.apache.jasper.runtim