dedecms 5.7 edit.inc.php漏洞处理

漏洞代码分析

/plus/guestbook.php

//修改留言
if($action=='admin')
{
    include_once(dirname(__FILE__).'/guestbook/edit.inc.php');
    exit();
}

\plus\guestbook\edit.inc.php

//这里没有判断$g_isadmin,而是错误地信任了用户的输入: action = "admin"
else if($job=='editok') 
{
  $remsg = trim($remsg);
  //这里没有对$msg过滤,导致可以任意注入
  $dsql->ExecuteNoneQuery("update `#@__guestbook` set `msg`='$msg', `posttime`='".time()."' where id='$id' "); 
  ShowMsg("成功更改或回复一条留言!",$GUEST_BOOK_POS);
  exit();
}

 

防御方法

\plus\guestbook\edit.inc.php

else if($job=='editok')
{
  $remsg = trim($remsg);
  /* 验证$g_isadmin */
  if($remsg!='')
  {
    //管理员回复不过滤HTML
    if($g_isadmin)
    {
      $msg = "<div class=\\'rebox\\'>".$msg."</div>\n".$remsg; 
      //$remsg <br><font color=red>管理员回复:</font>
    }
    else
    {
      $row = $dsql->GetOne("SELECT msg From `#@__guestbook` WHERE id='$id' ");
      $oldmsg = "<div class=\\'rebox\\'>".addslashes($row['msg'])."</div>\n";
      $remsg = trimMsg(cn_substrR($remsg, 1024), 1);
      $msg = $oldmsg.$remsg;
    }
  }
  /* */
  /* 对$msg进行有效过滤 */
  $msg = addslashes($msg);
  /* */
  $dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
  ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
  exit();
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注