XSS绕过单引号限制

作者在某视频网站发现可通过发送get请求进行iframe连接的网页,尝试利用js伪代码制造XSS,获取cookie。但网站对引号转义、截断HTML实体编码。作者通过将代码字符转成ASCII码再转回字符,绕过引号限制,最后处理URL中+号编码问题,成功实现XSS注入获取cookie。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

某视频网站,我在随处逛逛后发现了一个通过发送get请求来进行iframe连接的网页

有iframe。第一个想到的就是通过js伪代码来制造xss

所以我就简单写了一个alert

可以成功执行。没有过滤javascript:。那么我们尝试获取cookie。

也可以。并没有做过滤。那我们稍微修改一下。让cookie发到我的服务器不就可以盗取用户凭据了吗。

简单的写了个发送cookie的js代码

接收端代码

设置header 404就可以在执行完后返回404 NOT FOUND的报错。也许可以伪装一下恶意服务器。

 

直接贴入js代码。发现报错了。。

查看代码。发现转义了引号

虽然转义了引号。在javascript伪代码中。由于是在html里的。所以可以使用html实体编码来进行绕过啊。

将引号进行html实体编码

运行。还是报错。。。

查看源码。发现该网站遇到html实体编码就直接截断了

 

对比一下看得更直观

 

 

转义了引号。html实体编码也被截断了。。。那这还怎么玩呢。。。

 

不要慌。毕竟这个网站过滤还是不够充分。不能用引号。意味着不能使用字符串。但是没说不能使用数字啊。之前测试注入点的时候不就是用数字1来alert的吗

 

所以产生了一个大胆的想法:先将代码字符转成ascii码。然后再一个个用函数转回字符。最后使用eval函数将其执行。

首先确认一下eval是否被过滤了。

由此推断。eval大概率没有被过滤。

接着构建我们的payload。

js中字符转ascii码的函数为

charCodeAt()

 

将js代码按字符转成ascii码:由于很长。就写个js来跑吧

 

 

转成ascii码后。我们再将其转回字符。这样子在输入的时候就没有单引号。就不会受单引号转义的限制。

js ascii码转字符的函数:

String.fromCharCode()

 

由于太多ascii码了。就写个简单的js来帮我们拼接下字符串吧。。。

 

生成了。。好长一坨

 

丢进url。尝试XSS注入

 

发现一个报错

查看源码。发现+号变成了空格

这是因为在url中。+号被解析成空格了。要是想要用原本的+号就要用url编码即可。

重新将payload换成url编码。如下

就是将+号换成其对应的url编码 %2b。

 

丢入url中进行xss注入。成功获取cookie

<think>好的,用户想了解如何通过XSS漏洞绕过WAF防护机制。首先,我需要回忆一下相关的知识,确保信息准确。根据提供的引用内容,绕过WAF的方法主要有提交方式绕过、混淆伪装、编码转换、利用协议特性等。 用户可能对WAF的工作原理不太清楚,可能需要简单解释一下WAF如何检测恶意输入,比如基于正则表达式或规则库。然后,分点说明不同的绕过技术,每个方法都需要具体的例子,比如在提交方式绕过中,提到GET和POST的区别,或者如何在Cookie中注入。 要注意避免提供可用于实际攻击的详细代码,保持讨论在理论层面。同时,强调这些方法仅用于学习,并提醒遵守法律。可能需要检查引用内容中的例子是否正确,例如混淆伪装的例子是否有误,比如使用<img/src=1 onerror=alert(1)>这样的变体来绕过过滤。 另外,引用中的资料提到的一些方法,比如大小写混淆、标签属性分割,这些都需要具体说明。同时,注意不同WAF可能有不同的规则,所以绕过方法可能因情况而异。 最后,用户可能需要防御建议,所以需要补充如何防范这些绕过手段,比如输入验证、输出编码、CSP等。确保回答结构清晰,分点列出绕过方法和防御措施,并正确引用来源。</think>### 如何绕过WAF实现XSS攻击? #### 一、WAF的检测机制与绕过原理 WAF通常通过正则表达式匹配、关键字过滤或行为分析来拦截XSS攻击载荷。绕过核心在于**混淆恶意代码**或**利用检测逻辑漏洞**,例如: 1. **语法拆分**:如`<scr<script>ipt>`可绕过简单关键字过滤[^3] 2. **编码转换**:使用HTML实体编码、Unicode转义等,如`< → \u003c` 3. **协议混淆**:利用JavaScript伪协议`javascript:alert(1)`的变体 #### 二、具体绕过方法 1. **提交方式绕过** - 将恶意载荷从GET请求改为POST请求或HTTP头部(如Referer) - 示例:通过修改Cookie值注入`Cookie: name=<script>alert(1)</script>`[^1] 2. **标签属性混淆** ```html <img/src="x"onerror=alert(1)> <!-- 省略空格和引号 --> <svg/onload=alert`1`> <!-- 使用反引号 --> ``` 3. **编码嵌套技术** ```javascript // 多重URL编码 %253Cscript%253Ealert(1)%253C/script%253E // Base64解码注入 <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="> ``` 4. **利用JavaScript语法特性** ```javascript // 字符串拼接 window['al'+'ert'](1) // Unicode编码 \u0061\u006c\u0065\u0072\u0074(1) ``` 5. **WAF规则库盲区利用** - 使用冷门HTML标签:`<details open ontoggle=alert(1)>` - 新浏览器API:`<audio src=1 onratechange=eval(`alert(1)`)>`[^2] #### 三、防御建议 1. **输入验证**:白名单校验数据类型(如仅允许数字) 2. **输出编码**:根据上下文使用HTML/URL/JavaScript编码 3. **CSP策略**:通过`Content-Security-Policy`限制脚本来源 4. **WAF规则优化**:使用语义分析而非单纯正则匹配
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值