山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(十四)-任意文件下载漏洞(2)


前言:

前面的博客记录学习任意文件下载漏洞相关知识,并思考如何构造任意文件下载漏洞环境。本篇博客记录下任意文件下载漏洞的实现过程与关键代码。


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,测试成功。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌兮_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值