某视频网站,我在随处逛逛后发现了一个通过发送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