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

XSS绕过单引号限制

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

所以我就简单写了一个alert

XSS绕过单引号限制

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

XSS绕过单引号限制

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

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

XSS绕过单引号限制

接收端代码

XSS绕过单引号限制

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

 

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

XSS绕过单引号限制

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

XSS绕过单引号限制

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

将引号进行html实体编码

XSS绕过单引号限制

运行。还是报错。。。

XSS绕过单引号限制

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

XSS绕过单引号限制

 

对比一下看得更直观

 

XSS绕过单引号限制

XSS绕过单引号限制

 

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

 

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

XSS绕过单引号限制

 

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

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

XSS绕过单引号限制

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

接着构建我们的payload。

js中字符转ascii码的函数为

charCodeAt()

 

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

XSS绕过单引号限制

 

XSS绕过单引号限制

 

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

js ascii码转字符的函数:

String.fromCharCode()

 

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

XSS绕过单引号限制

 

生成了。。好长一坨

XSS绕过单引号限制

 

丢进url。尝试XSS注入

XSS绕过单引号限制

 

发现一个报错

XSS绕过单引号限制

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

XSS绕过单引号限制

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

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

XSS绕过单引号限制

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

 

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

XSS绕过单引号限制

XSS绕过单引号限制

相关文章: