示例 - 存在任意文件复制漏洞代码:

    1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    2. <%@ page import="java.io.IOException" %>
    3. <%@ page import="java.nio.file.Files" %>
    4. <%@ page import="java.nio.file.Path" %>
    5. <%@ page import="java.nio.file.Paths" %>
    6. <pre>
    7. <%
    8. try {
    9. Path path = Files.copy(Paths.get(request.getParameter("source")), Paths.get(request.getParameter("dest")));
    10. out.println(path);
    11. } catch (IOException e) {
    12. e.printStackTrace();
    13. }
    14. %>
    15. </pre>

    攻击者传入恶意的sourcedest参数可以实现复制任何文件到任意的目录,比如攻击者可以在用户中心上传一张内容为WebShell恶意代码的1.jpg图片文件,然后通过漏洞将1.jpg图片文件,复制到同级目录并更新名称为1.jsp的可解析脚本文件,访问1.jsp文件即可实现控制服务器的目的,如下图:
    5. 文件/目录复制、移动 - 图1
    在实际环境中,应用系统可能根据需求在配置文件如web.xml中或代码层面如filter设置某些目录(如上传目录、资源目录等)禁止对 .jsp 脚本文件等可执行文件进行解析,因此,攻击者需要将恶意文件移动或复制到其他能够执行的目录进行解析。请求:http://localhost:8000/modules/filesystem/files-copy.jsp?source=/tmp/1.jsp&dest=/Users/yz/Desktop/apache-tomcat-8.5.31/webapps/ROOT/1.jsp,如下图:
    5. 文件/目录复制、移动 - 图2