3.1 任意文件删除测试
示例 - 存在任意文件删除漏洞代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.File" %>
<%
File file = new File(request.getParameter("file"));
out.println(file.delete());
%>
3.2 FileSystem任意文件删除测试
示例 - 存在任意文件删除漏洞代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.File" %>
<%@ page import="java.lang.reflect.Method" %>
<%
String file = request.getParameter("file");
Method m = Class.forName("java.io.DefaultFileSystem").getMethod("getFileSystem");
m.setAccessible(true);
Object fs = m.invoke(null);
Method m2 = fs.getClass().getMethod("delete", File.class);
m2.setAccessible(true);
out.print(m2.invoke(fs, new File(file)));
%>
攻击者通过参入file
参数即可删除服务器中的任意文件:
攻击者通过反射调用 Filesystem 并执行delete
方法,用来绕过对 File 对象 delete
方法的防御。