3.1 任意文件删除测试

示例 - 存在任意文件删除漏洞代码:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ page import="java.io.File" %>
  3. <%
  4. File file = new File(request.getParameter("file"));
  5. out.println(file.delete());
  6. %>

攻击者通过参入file参数即可删除服务器中的任意文件:
4.删除文件 - 图1

3.2 FileSystem任意文件删除测试

示例 - 存在任意文件删除漏洞代码:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ page import="java.io.File" %>
  3. <%@ page import="java.lang.reflect.Method" %>
  4. <%
  5. String file = request.getParameter("file");
  6. Method m = Class.forName("java.io.DefaultFileSystem").getMethod("getFileSystem");
  7. m.setAccessible(true);
  8. Object fs = m.invoke(null);
  9. Method m2 = fs.getClass().getMethod("delete", File.class);
  10. m2.setAccessible(true);
  11. out.print(m2.invoke(fs, new File(file)));
  12. %>

攻击者通过参入file参数即可删除服务器中的任意文件:
4.删除文件 - 图2
攻击者通过反射调用 Filesystem 并执行delete方法,用来绕过对 File 对象 delete方法的防御。