前言:
前面的博客记录学习任意文件下载漏洞相关知识,并思考如何构造任意文件下载漏洞环境。本篇博客记录下任意文件下载漏洞的实现过程与关键代码。
3、编写“任意文件下载漏洞”后台
构建任意文件下载漏洞的基本思路是,在项目根目录中,新建一个 flag 文件夹,用于存放用户请求下载的内容,然后在该文件夹的上级目录中,新建文件 flag.txt ,测试者需要点击下载后,使用 burpsuite 抓包,并且修改下载的文件为上层目录文件,得到 flag。
根据上面提供的思路,主要实现代码如下:
indexController.java:接收请求"/“,”/index",“/index.html”,匹配到 FileDownload.html
package com.example.filedownload.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class indexController {
@RequestMapping(value = {"/","/index.html","/index.html"})
public String FileDownload(){
return "FileDownload";
}
}
FileDownloadController.java
package com.example.filedownload.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@Controller
public class FileDownloadController {
@RequestMapping("/Download")
public void MVCDownload(@RequestParam("filename") String filename,
HttpServletRequest request, HttpServletResponse response) throws IOException {
byte[] bytes = new byte[10];
int len = -1;
try {
InputStream inputStream = new FileInputStream("D:\\Code\\SDUWeb\\FileDownload\\flag\\" + filename);
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
response.addHeader("content-Type", "application/octet-stream");//二进制文件
response.addHeader("content-Disposition", "attachment;filename=" + filename);
while ((len = inputStream.read(bytes)) > 0) {
response.getOutputStream().write(bytes, 0, len);
}
response.getOutputStream().close();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、编写“任意文件下载漏洞”前台
FileDownload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件下载</title>
</head>
<body>
<a href="http://localhost:8080/Download?filename=flag?.txt">点击下载flag.txt?</a>
</body>
</html>
5、运行测试
浏览器:Firefox
抓包工具:burpsuite
首先启动 burpsuite
配置监听代理
Firefox 配置代理
启动项目
Firefox 浏览器访问
点击下载后,burpsuite 拦截到该请求的数据包
把请求下载的文件修改为上级目录中的 flag 文件
forWord,发现已经下载好 flag 文件
打开该文件
得到 flag,测试成功。