插件名称: Discuz! 7.2/X1 心情墙插件
插件地址: 未知
漏洞说明: Discuz! 7.2/X1 心情墙插件SQL注入及持久型XSS漏洞。
SQL注入比较鸡肋,要求GPC为off(目前这样的网站几乎绝版了)
XSS因为是持久型的,只要管理员打开此应用即会触发。利用XSS怎么操作就见仁见智了。
详细说明:
由Discuz!认证的(http://addons.discuz.com/workroom.php)第三方开发团队“潮流少年工作室 Teen Studio”出品的心情墙插件(https://discuz.dismall.com/forum. ... ead&tid=1632898),因变量未初始化及过滤不严导致SQL注入及跨站脚本漏洞。
#
moodwall.inc.php
SQL注入,除下面代码这一处外,本文件还有很多处这样的或是$_POST得到后直接用的情况。惨不忍睹。
1. elseif($action == 'edit_mood' && moodid) {
2.
3. //moodid未初始化,直接代入sql查询
4.
5. $check = $db->result_first("SELECT * FROM {$tablepre}moodwall WHERE id='$moodid' AND uid='$discuz_uid'");
6.
7. if(!$check || !$moodid) {
8.
9. showmessage('moodwall:moodwall_inc_php_2', 'plugin.php?id=moodwall&action=user_mood');
10.
11. }
12.
13. $sql = "SELECT * FROM {$tablepre}moodwall WHERE id='$moodid'";
14.
15. $query = $db->query($sql);
16.
17. $moodlist_edit = array();
18.
19. while($mood_edit = $db->fetch_array($query)) {
20.
21. $moodlist_edit[] = $mood_edit;
22.
23. }
XSS
1. $uid=$_POST[uid];
2.
3. $username=$_POST[username];
4.
5. $bgpic=$_POST[bgpic];
6.
7. $mood=$_POST[mood];
8.
9. $message=$_POST[message];
10.
11. $dateline=time();
12.
13. //$_POST得到数据直接入库,前端出库代码也没有做过滤,这里就不贴了。
14.
15. $db->query("INSERT INTO {$tablepre}moodwall (uid,username, bgpic, mood, message, dateline) VALUES ('$uid', '$username', '$bgpic', '$mood', '$message', '$dateline')");
漏洞证明:
随意找一个安装此应用的网站:
/plugin.php?id=moodwall&action=edit_mood&moodid=2'
发表心情处直接插入html代码
"><script>alert(/xss/)</script>
修复方案:
过滤啊过滤,初始化啊初始化。
强烈建议Discuz!团队对第三方的应用做严格的审查后再在自己的官方论坛上发布。Discuz!败在插件上也不是一次两次了。 |