简要描述
Discuz!7.2/X1 第三方插件SQL注入及持久型XSS漏洞。
SQL注入比较鸡肋,要求GPC为off,XSS因为是持久型的,只要管理员打开此应用即会触发。
第三方的心情墙插件,因变量未初始化及过滤不严导致SQL注入及跨站脚本漏洞。
SQL漏洞代码图片(moodwall.inc.php)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 
 | elseif($action == 'edit_mood' && moodid) {
 
 
 $check = $db->result_first("SELECT * FROM {$tablepre}moodwall WHERE id='$moodid' AND uid='$discuz_uid'");
 
 
 
 if(!$check || !$moodid) {
 
 showmessage('moodwall:moodwall_inc_php_2', 'plugin.php?id=moodwall&action=user_mood');
 
 }
 
 $sql = "SELECT * FROM {$tablepre}moodwall WHERE id='$moodid'";
 
 $query = $db->query($sql);
 
 $moodlist_edit = array();
 
 while($mood_edit = $db->fetch_array($query)) {
 
 $moodlist_edit[] = $mood_edit;
 
 }
 
 | 
moodid未经过初始化,直接代入sql查询,可以直接输入1’,使SQL报错,判断该参数存在SQL注入,然后开始构造payload。
example:
| 1
 | /plugin.php?id=moodwall&action=edit_mood&moodid=1'
 | 
代码修复方法
对用户输入的数据进行过滤,或者使用PDO连接并做参数绑定
XSS漏洞代码图片(moodwall.inc.php)
| 12
 3
 4
 5
 6
 7
 
 | $uid=$_POST[uid];$username=$_POST[username];
 $bgpic=$_POST[bgpic];
 $mood=$_POST[mood];
 $message=$_POST[message];
 $dateline=time();
 $db->query((INSERT INTO {$tablepre}moodwall (uid,username, bgpic, mood, message, dateline) VALUES ('$uid', '$username', '$bgpic', '$mood', '$message', '$dateline')));
 
 | 
POST的代码直接传入数据库,前端出库代码也没做过滤,因此存在存储型XSS
example:
在发表心情处,直接传入
| 1
 | "><script>alert(/xss/)</script>
 | 
代码修复方法
使用addslashes、htmlspecialchars对用户post过来的数据进行过滤或者过滤数据中的特殊字符,输出时也对数据库出库数据进行过滤
原文链接:Discuz!7.2/X1 第三方心情墙插件SQL注入及持久型XSS漏洞