安全研究
安全漏洞
PHPWind wap_mod.php模块字符转换修改管理员密码漏洞
发布日期:2008-08-15
更新日期:2008-08-20
受影响系统:
PHPWind PHPWind <= 5.3描述:
PHPWind是一款国内比较流行的基于PHP的Web论坛程序。
PHPWind过分相信从数据库中取出的变量,从而可能可以更改一些数据处理流程,导致任意修改其他用户的密码,包括管理员。
问题代码在wap_mod.php中:
<code>
function wap_login($username,$password){
global $db,$timestamp,$onlineip,$db_ckpath,$db_ckdomain,$db_bbsurl;
$men=$db->get_one("SELECT m.uid,m.password,m.groupid,m.yz,md.onlineip FROM pw_members m LEFT JOIN pw_memberdata md ON md.uid=m.uid WHERE username='$username'");
if($men){
$e_login=explode("|",$men['onlineip']);
if($e_login[0]!=$onlineip.' *' || ($timestamp-$e_login[1])>600 || $e_login[2]>1 ){
$men_uid=$men['uid'];
$men_pwd=$men['password'];
$check_pwd=$password;
if($men['yz'] > 2){
wap_msg('c');
}
if(strlen($men_pwd)==16){
$check_pwd=substr($password,8,16);/*支持 16 位 md5截取密码*/
}
if($men_pwd==$check_pwd){
if(strlen($men_pwd)==16){
$db->update("UPDATE pw_members SET password='$password' WHERE uid='$men_uid'");
}
$L_groupid=(int)$men['groupid'];
Cookie("ck_info",$db_ckpath."\t".$db_ckdomain);
}else{
global $L_T;
$L_T=$e_login[2];
$L_T ? $L_T--:$L_T=5;
$F_login="$onlineip *|$timestamp|$L_T";
$db->update("UPDATE pw_memberdata SET onlineip='$F_login' WHERE uid='$men_uid'");
wap_msg('login_pwd_error');
}
}else{
global $L_T;
$L_T=600-($timestamp-$e_login[1]);
wap_msg('login_forbid');
}
} else {
global $errorname;
$errorname=$username;
wap_msg('user_not_exists');
}
Cookie("winduser",StrCode($men_uid."\t".PwdCode($password)));
Cookie('lastvisit','',0);
wap_msg('wap_login','index.php');
}
</code>
攻击者无需注册账户,只要精心构造username即可利用此漏洞。
<*来源:80sec
链接:http://www.80sec.com/release/phpwind-admin-pass-change-vul.txt
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
建议:
厂商补丁:
PHPWind
-------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://www.phpwind.net/read-htm-tid-643202.html
浏览次数:3226
严重程度:0(网友投票)
绿盟科技给您安全的保障
