去评论
dz插件网

Discuz!X3.x全版本后台UC漏洞SQL注入写文件[截至X3.4 R20191201]

admin
2020/08/10 09:14:29
1、简述
Discuz! X系列全版本 截止到 Discuz! X3.4 R20191201 UTF-8
二次注入
利用条件有限,还是挺鸡肋的。
2、复现环境
同上
3、漏洞复现

报错注入:


写文件:


4、漏洞分析
漏洞原因:经过addslashes存入文件中,从文件中取出字符,转义符号丢失,造成二次注入
由前几个的分析已经明白了dz的路由形式,此处的路由解析如下:?action=xxx => ../admincp_xxx.php
跟进source/admincp/admincp_setting.php,2566行,接收参数修改UC_APPID值。
  1. $configfile = str_replace("define('UC_APPID', '".addslashes(UC_APPID)."')", "define('UC_APPID', '".$settingnew['uc']['appid']."')", $configfile);

  2.         $fp = fopen('./config/config_ucenter.php', 'w');
  3.         if(!($fp = @fopen('./config/config_ucenter.php', 'w'))) {
  4.             cpmsg('uc_config_write_error', '', 'error');
  5.         }
  6.         @fwrite($fp, trim($configfile));
  7.         @fclose($fp);

成功写入恶意UC_APPID后,执行更新读取新的配置信息,3415行:
  1. if($updatecache) {

  2.         updatecache('setting');

最后在uc_client/model/base.php的note_exists方法中触发注入
  1. function note_exists() {
  2.         $noteexists = $this->db->result_first("SELECT value FROM ".UC_DBTABLEPRE."vars WHERE name='noteexists".UC_APPID."'");
  3.         if(empty($noteexists)) {
  4.             return FALSE;
  5.         } else {
  6.             return TRUE;
  7.         }
  8.     }