示例 - 存在恶意文件写入漏洞的代码:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%@ page import="java.io.File" %>
  3. <%@ page import="java.io.FileOutputStream" %>
  4. <%
  5. File file = new File(request.getParameter("f"));
  6. FileOutputStream fos = new FileOutputStream(file);
  7. fos.write(request.getParameter("c").getBytes());
  8. fos.flush();
  9. fos.close();
  10. out.println(file.getAbsoluteFile() + "\t" + file.exists());
  11. %>

2.1 跨目录写入文件测试

攻击者可能期望跨目录写入文件,如写入 SSH KEY、写入计划任务等等方式进行进一步的攻击。
请求:http://localhost:8000/modules/filesystem/file-w.jsp?f=../../a.rar&c=aaa,如下图:
3.写文件 - 图13.写文件 - 图2

2.2 绝对路径写入文件测试

攻击者通过传入恶意的参数fc参数可以使用绝对路径在服务器上写入恶意的WebShell后门或其他文件,请求:http://localhost:8000/modules/filesystem/file-w.jsp?f=/tmp/2.txt&c=webshell,如下图:
3.写文件 - 图3