搜索
查看: 4029|回复: 0

dedecms后台Getshell

[复制链接]

45

主题

26

回帖

166

积分

注册会员

积分
166

注册会员活跃会员

发表于 2018-4-18 15:47:38 | 显示全部楼层 |阅读模式 来自 甘肃陇南
  1. dede/sys_info.php中
  2. //保存配置的改动
  3. if($dopost=="save")
  4. {
  5.     if(!isset($token)){
  6.         echo 'No token found!';
  7.         exit;
  8.     }
  9.     if(strcasecmp($token, $_SESSION['token']) != 0){
  10.         echo 'Token mismatch!';
  11.         exit;
  12.     }
  13.     foreach($_POST as $k=>$v)
  14.     {
  15.         if(preg_match("#^edit___#", $k))
  16.         {
  17.             $v = cn_substrR(${$k}, 1024);
  18.         }
  19.         else
  20.         {
  21.             continue;
  22.         }
  23.         $k = preg_replace("#^edit___#", "", $k);
  24.         $dsql->ExecuteNoneQuery("UPDATE `#@__sysconfig` SET `value`='$v' WHERE varname='$k' ");
  25.     }
  26.     ReWriteConfig();
  27.     ShowMsg("成功更改站点配置!", "sys_info.php");
  28.     exit();
  29. }
复制代码
在选择更改配置后,通过foreach($_POST as $k=>$v)接受参数,并且将参数内容写入了数据库,之后进入ReWriteConfig();。
  1. //更新配置函数
  2. function ReWriteConfig()
  3. {
  4.     global $dsql,$configfile;
  5.     if(!is_writeable($configfile))
  6.     {
  7.         echo "配置文件'{$configfile}'不支持写入,无法修改系统配置参数!";
  8.         exit();
  9.     }
  10.     $fp = fopen($configfile,'w');
  11.     flock($fp,3);
  12.     fwrite($fp,"<"."?php\r\n");
  13.     $dsql->SetQuery("SELECT `varname`,`type`,`value`,`groupid` FROM `#@__sysconfig` ORDER BY aid ASC ");
  14.     $dsql->Execute();
  15.     while($row = $dsql->GetArray())
  16.     {
  17.         if($row['type']=='number')
  18.         {
  19.             if($row['value']=='') $row['value'] = 0;
  20.             fwrite($fp,"\${$row['varname']} = ".$row['value'].";\r\n");
  21.         }
  22.         else
  23.         {
  24.             fwrite($fp,"\${$row['varname']} = '".str_replace("'",'',$row['value'])."';\r\n");
  25.         }
  26.     }
  27.     fwrite($fp,"?".">");
  28.     fclose($fp);
  29. }
复制代码
这里的代码将前面插入数据库的数据直接取出,没有再做验证。在while($row = $dsql->GetArray()),有两个分支,当$row['type']=='number'时,会往文件中直接写入,其他情况下会进行一次str_replace("'",'',$row['value'])将单引号替换掉。所以我们考虑使用第一个分支,选择一个默认为数字的参数。

比如使用参数cfg_ftp_port,它表示采用的ftp端口,

查看配置文件 data/config.cache.inc.php


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
个性
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表