示例 - 存在任意文件复制漏洞代码:
<%@ 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,如下图: