示例 - 存在任意文件复制漏洞代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ page import="java.io.IOException" %><%@ page import="java.nio.file.Files" %><%@ page import="java.nio.file.Path" %><%@ page import="java.nio.file.Paths" %><pre><%try {Path path = Files.copy(Paths.get(request.getParameter("source")), Paths.get(request.getParameter("dest")));out.println(path);} catch (IOException e) {e.printStackTrace();}%></pre>
攻击者传入恶意的source和dest参数可以实现复制任何文件到任意的目录,比如攻击者可以在用户中心上传一张内容为WebShell恶意代码的1.jpg图片文件,然后通过漏洞将1.jpg图片文件,复制到同级目录并更新名称为1.jsp的可解析脚本文件,访问1.jsp文件即可实现控制服务器的目的,如下图:
在实际环境中,应用系统可能根据需求在配置文件如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,如下图:
