漏洞证明

1.漏洞需要开启后台四方格功能

2.发表新帖子,在帖子标题中设置为payload

3.然后在首页鼠标放在帖子准备点击我们刚才的发表的帖子时,触发onmouseover事件,执行我们的代码。

漏洞分析

鼠标放在帖子上准备点击时,触发onmouseover事件。onmouseover事件中调用的showTip函数最终调用到了_showTip函数

_showTip函数中使用getAtrribute取了tip属性值,然后又放入innerHTML。
重点是getAtrribute函数获取属性值时会自动解码实体编码后的值,这样

就变成

另外此漏洞中的payload只能用

而不能用


这是由于Discuz中dhtmlspecialchars函数实现问题。

这个差异可以这么解释

而上面tip属性值就是两次dhtmlspecialchars了标题的值,输入存到数据库一次,输出时一次。


漏洞总结

1.dhtmlspecialchars函数和实际的htmlspecialchars函数有差异
2.getAttribute函数会将属性值解码

 

作者: 4nim4l