Burp Xss Scanner插件开发思路分享(附下载)
字数 1627 2025-08-18 11:37:16

Burp XSS Scanner插件开发思路与实现详解

0x00 前言

Burp Suite虽然自带XSS检测功能,但其Payload和检测数量不可控。本文介绍如何开发一款自定义Burp XSS检测插件,主要特点包括:

  • 对每个参数只需发送一次Payload即可检测分隔符逃逸
  • 支持DOM XSS检测
  • 使用Java HtmlUnit进行页面渲染分析

0x01 检测思路概述

  1. 发送包含'"<>特殊字符的HTTP请求
  2. 分析响应中这些字符的过滤情况
  3. 对于HTML和JS内容XSS可直接分析响应
  4. 对于DOM XSS需要使用HtmlUnit渲染页面并hook关键JS函数

0x02 HTML-Content XSS检测

基本原理

通过分析响应中特殊字符的过滤情况,判断是否存在XSS漏洞。

HtmlUnit的自动修正问题

HtmlUnit会自动修正错误的HTML语法,这会影响检测结果:

测试案例1

<?php
$url = $_GET['url'];
echo "TTT`

渲染后结果:
```html
<html>
 <head/>
 <body>
  
</html>

解决方案

  • 闭合前面的标签:test.php?url='"/>TTT'"<>TTT
  • 使用标签包裹Payload:test.php?url='"/><TTT'"TTT>

过滤情况检测

当某些字符被过滤时(如<>"被替换),可采用以下策略:

  1. 使用未被过滤的字符(如单引号'
  2. 观察HtmlUnit如何处理修正后的标签

过滤案例

<?php
$url = $_GET['url'];
$url = str_replace("<","00",$url);
$url = str_replace(">","11",$url);
$url = str_replace("\"","22",$url);
echo "`

结果:
```html

检测逻辑总结

  1. 检查是否能逃逸当前分隔符
  2. 根据HtmlUnit的修正行为调整Payload
  3. 使用正则匹配判断可利用性

0x03 JS-Content XSS检测

基本原理

JS上下文中的XSS检测相对简单,因为错误的JS语法不会被自动修正。

测试案例

<?php
$url = $_GET['url'];
?>
<script>var a = <?php echo $url;?></script>

Payload:test.php?url=000111"'<TTT'"TTT>

响应:

<html>
 <head>
  <script>//<![CDATA[
var a = "000111"'<TTT'"TTT>script>
 </head>
 <body/>
</html>

检测方法

  1. 使用正则表达式匹配Payload中的特殊模式
  2. 判断是否能逃逸当前分隔符(如引号、分号)

正则示例

  • 匹配标签:<ttt(.*?)'"ttt(.*?)>
  • 逃逸分号检测:'(.*?)ttt(ttt(.*?)'

0x04 DOM XSS检测

检测挑战

DOM XSS需要通过JS执行才能发现,传统响应分析无法检测:

  • document.write
  • innerHTML
  • eval
  • location相关操作
  • setTimeout/setInterval

解决方案:JS函数Hook

通过修改返回报文,Hook关键JS函数来监控可疑操作。

实现技术

  1. 继承FalsifyingWebConnection类修改响应
  2. 在响应中添加Hook代码

核心代码结构

public class WebConnectionListener extends FalsifyingWebConnection {
    public WebConnectionListener(WebClient webClient) throws IllegalArgumentException {
        super(webClient);
    }
    
    @Override
    public WebResponse getResponse(WebRequest request) throws IOException {
        WebResponse response = super.getResponse(request);
        // 修改响应内容
        return createWebResponse(...);
    }
}

关键函数Hook实现

  1. eval函数Hook
var _eval = eval;
window.eval = function(string) {
    append("eval",string);
    _eval(string);
};
  1. setTimeout Hook
var _setTimeout = setTimeout;
window.setTimeout = function(code,millisec) {
    append("settimeout",code);
    _setTimeout(code,millisec);
};
  1. location操作Hook
  • location.href赋值:
location.__defineSetter__('href', function(url) {
    append("location",url);
});
  • location.replace调用:
var _replace = function(url){
    append("location.replace",url);
};
  1. location直接赋值
    通过修改响应报文,将location = "xss"转换为location.href = "xss"

结果收集

添加自定义append函数收集检测结果:

function append(type,payload){
    if(payload.indexOf("111000")>-1) {
        var para=document.createElement("p");
        var node=document.createTextNode(type + payload);
        para.appendChild(node);
        var element=document.getElementsByTagName("html")[0];
        element.appendChild(para);
    }
}

0x05 完整实现要点

  1. HtmlUnit配置
WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
  1. 页面渲染与捕获
try {
    HtmlPage page = webClient.getPage(url);
    System.out.println(page.asXml());
} catch (ScriptException e) {
    System.out.println(e.getFailingLine());
    System.out.println(e.getPage().asXml());
}
  1. Payload设计
  • 包含可识别的标记(如"TTT")
  • 包含所有特殊字符('"<>
  • 适应HtmlUnit的自动修正特性

0x06 检测流程总结

  1. 发送包含特殊字符的Payload
  2. 对响应进行三种检测:
    • HTML上下文检测
    • JS上下文检测
    • DOM型XSS检测(通过函数Hook)
  3. 分析结果并报告漏洞

0x07 扩展思路

  1. 增加更多上下文检测(如CSS、URL上下文)
  2. 完善Payload生成策略
  3. 添加更多JS函数Hook(如setIntervalinnerHTML等)
  4. 优化结果分析逻辑,减少误报

通过这种自定义插件开发,可以实现比Burp自带功能更灵活、更全面的XSS检测能力,特别是对DOM XSS的检测能力显著提升。

Burp XSS Scanner插件开发思路与实现详解 0x00 前言 Burp Suite虽然自带XSS检测功能,但其Payload和检测数量不可控。本文介绍如何开发一款自定义Burp XSS检测插件,主要特点包括: 对每个参数只需发送一次Payload即可检测分隔符逃逸 支持DOM XSS检测 使用Java HtmlUnit进行页面渲染分析 0x01 检测思路概述 发送包含 '"<> 特殊字符的HTTP请求 分析响应中这些字符的过滤情况 对于HTML和JS内容XSS可直接分析响应 对于DOM XSS需要使用HtmlUnit渲染页面并hook关键JS函数 0x02 HTML-Content XSS检测 基本原理 通过分析响应中特殊字符的过滤情况,判断是否存在XSS漏洞。 HtmlUnit的自动修正问题 HtmlUnit会自动修正错误的HTML语法,这会影响检测结果: 测试案例1 : 解决方案 : 闭合前面的标签: test.php?url='"/>TTT'"<>TTT 使用标签包裹Payload: test.php?url='"/><TTT'"TTT> 过滤情况检测 当某些字符被过滤时(如 < 、 > 、 " 被替换),可采用以下策略: 使用未被过滤的字符(如单引号 ' ) 观察HtmlUnit如何处理修正后的标签 过滤案例 : 检测逻辑总结 检查是否能逃逸当前分隔符 根据HtmlUnit的修正行为调整Payload 使用正则匹配判断可利用性 0x03 JS-Content XSS检测 基本原理 JS上下文中的XSS检测相对简单,因为错误的JS语法不会被自动修正。 测试案例 : Payload: test.php?url=000111"'<TTT'"TTT> 响应: 检测方法 使用正则表达式匹配Payload中的特殊模式 判断是否能逃逸当前分隔符(如引号、分号) 正则示例 : 匹配标签: <ttt(.*?)'"ttt(.*?)> 逃逸分号检测: '(.*?)ttt(ttt(.*?)' 0x04 DOM XSS检测 检测挑战 DOM XSS需要通过JS执行才能发现,传统响应分析无法检测: document.write innerHTML eval location 相关操作 setTimeout/setInterval 解决方案:JS函数Hook 通过修改返回报文,Hook关键JS函数来监控可疑操作。 实现技术 继承 FalsifyingWebConnection 类修改响应 在响应中添加Hook代码 核心代码结构 : 关键函数Hook实现 eval函数Hook : setTimeout Hook : location操作Hook : location.href 赋值: location.replace 调用: location直接赋值 : 通过修改响应报文,将 location = "xss" 转换为 location.href = "xss" 结果收集 添加自定义 append 函数收集检测结果: 0x05 完整实现要点 HtmlUnit配置 : 页面渲染与捕获 : Payload设计 : 包含可识别的标记(如"TTT") 包含所有特殊字符( '"<> ) 适应HtmlUnit的自动修正特性 0x06 检测流程总结 发送包含特殊字符的Payload 对响应进行三种检测: HTML上下文检测 JS上下文检测 DOM型XSS检测(通过函数Hook) 分析结果并报告漏洞 0x07 扩展思路 增加更多上下文检测(如CSS、URL上下文) 完善Payload生成策略 添加更多JS函数Hook(如 setInterval 、 innerHTML 等) 优化结果分析逻辑,减少误报 通过这种自定义插件开发,可以实现比Burp自带功能更灵活、更全面的XSS检测能力,特别是对DOM XSS的检测能力显著提升。