[安全]复现urlcode编码绕过xss限制两个demo

本文介绍了如何绕过PHP页面中的XSS过滤,特别是当括号、常见关键字被限制时。通过利用JavaScript伪协议和URL编码技巧,可以实现反射型XSS攻击。同时,文章展示了升级后的防御策略,即限制了特定关键字,但提出了通过字符串拼接绕过的方法。这些讨论有助于理解XSS漏洞的防范与攻击手段。
摘要由CSDN通过智能技术生成

demo1:

<?php
header('X-XSS-Protection: 0');
$xss = isset($_GET['xss'])? $_GET['xss'] : '';
$xss = str_replace(array("(",")","&","\\","<",">","'"), '', $xss);
echo "<img src=\"{$xss}\">";
?>

问题描述

在页面内进行弹窗(反射型xss漏洞的特征)


解决方案:

题目利用replace函数将常见的"(",")","&","\\","<",">","'"都替换成了空格符号,而想进行弹窗操作需要利用到οnerrοr="alert(xxx)"函数。最关键的问题在于怎么绕过对于括号的限制。我们可以利用URLcode编码将括号转变为%28和%29,而URLcode编码会自动将%28和%29识别为括号,又会被限制,我们可以将%转换为相应的%25

 而这时浏览器并未将%28和%29识别过来,原因是onerror函数为一个JS函数,在JS中是不允许编码符号的,就是在onerror内部不允许进行符号的编码。故无法进行括号的编码。

解决办法是location函数来解决此问题,其可以将右侧的值转换为变量,而在JS中变量是可以进行编码的,利用JavaScript伪协议如下


demo2:

<?php
header('X-XSS-Protection: 0');
$xss = isset($_GET['xss'])?$_GET['xss']:'';
$xss = str_replace(array("(",")","&","\\","<",">","'"), '', $xss);
if (preg_match('/(script|document|cookie|eval|setTimeout|alert)/', $xss)) {
    exit('bad');
}
echo "<img src=\"{$xss}\">";
?>

解决:

此问题将上一题目进行升级,将script,alert进行限制。我们可以利用拼接字符串的形式进行绕过

只需要把urlcode无法识别的+转换为对应的%2b即可


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值