山东大学软件学院项目实训-创新实训-山大软院网

家电修理 2023-07-16 17:23www.caominkang.com电器维修

目录
  • 前言
  • 2、项目配置
  • 3、编写XSS漏洞后端代码
    • 3.1、反射型XSS
    • 3.2、存储型XSS
    • 3.3、修复后的安全代码
  • 4、编写XSS漏洞前端代码
    • 4.1、反射型XSS
    • 4.2、存储型XSS
  • 5、运行测试
    • 5.1、反射型XSS漏洞测试
    • 5.2、存储型XSS漏洞测试
    • 5.3、修复后测试

前言

继上一篇博客,本篇博客记录下实际搭建XSS漏洞靶场环境。


2、项目配置

前端使用vue框架,后端使用springboot框架搭建

pom.xml

  
   .apache.tomcat.embed
   tomcat-embed-jasper
   provided
  
  
   javax.servlet
   jstl
  

  
   .mybatis.spring.boot
   mybatis-spring-boot-starter
   2.2.2
  

  
   mysql
   mysql-connector-java
   runtime
  
  
   .projectlombok
   lombok
   true
  

  
   .baomidou
   mybatis-plus-boot-starter
   3.5.1
  

  
   .hutool
   hutool-all
   5.7.20
  
  
   .auth0
   java-jt
   3.10.3
  

vuevue.config.js

// 跨域配置
module.exports = {
 devServer: {    //记住,别写错了devServer//设置本地默认端口  选填
  port: 8080,
  proxy: {     //设置代理,必须填
   '/api': {     //设置拦截器  拦截器格式   斜杠+拦截器名字,名字可以自己定
    target: 'http://localhost:9090',  //代理的目标地址
    changeOrigin: true,     //是否设置同源,输入是的
    pathRerite: {       //路径重写
     '^/api': ''      //选择忽略拦截器里面的内容
    }
   }
  }
 }
}

3、编写XSS漏洞后端代码

经过小组讨论,我们决定实现反射型XSS漏洞和存储型XSS漏洞两个基本漏洞的靶场,对于反射型XSS漏洞,其实现较为简单,仅需将用户从前端输入到后端的payload返回到前端渲染,不进行过滤,即可构造XSS漏洞靶场。对于存储型XSS,可以通过将用户输入的payload存储到数据库中,待其他用户访问取出,即可触发XSS漏洞,类似于评论的功能点易出现此类型漏洞。我们采用存储到cookie的方式来实现存储型XSS漏洞,其基本原理与存储到数据库类型相似。

3.1、反射型XSS
package .sducsrp.csrp.controller.BUGcontroller;

import .sducsrp.csrp.mon.Constants;
import .sducsrp.csrp.mon.Result;
import .springframeork.stereotype.Controller;
import .springframeork.util.StringUtils;
import .springframeork.eb.bind.annotation.;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
@RestController
@RequestMapping("/xss")
public class XssController {
 
 @PostMapping("/reflect")
 public @ResponseBody  Result reflect(@RequestBody String xss) {
  System.out.println(xss+":ok1");

  Result res=ne Result(Constants.CODE_200,null,xss);
  return res;
 }

3.2、存储型XSS

漏洞代码

@RequestMapping("/stored/store")
public @ResponseBody Result store(@RequestBody String xss, HttpServletResponse response) {
 Cookie cookie = ne Cookie("xss", xss);
 response.addCookie(cookie);

 Result res=ne Result(Constants.CODE_200,null,"Set param into cookie,访问/stored/sho验证一下");
 return res;
}

验证代码

@RequestMapping("/stored/sho")
public @ResponseBody Result sho(@CookieValue("xss") String xss) {
 System.out.println(xss);
 Result res=ne Result(Constants.CODE_200,null,xss);
 return res;
}

3.3、修复后的安全代码
@RequestMapping("/safe")
@ResponseBody
public static String safe(String xss) {
 return encode(xss);
}

private static String encode(String origin) {
 origin = StringUtils.replace(origin, "&", "&");
 origin = StringUtils.replace(origin, "<", "<");
 origin = StringUtils.replace(origin, ">", ">");
 origin = StringUtils.replace(origin, """, """);
 origin = StringUtils.replace(origin, "'", "'");
 origin = StringUtils.replace(origin, "/", "/");
 return origin;
}

4、编写XSS漏洞前端代码

前端采用vue框架

4.1、反射型XSS