骑士人才系统 sql注入导致任意用户密码修改 wap_password.php: elseif ($act == 'save_password') { require_once(QISHI_ROOT_PATH.'include/fun_user.php'); $arr['username']=$_SESSION['username']; $arr['oldpassword']=trim($_POST['oldpassword'])?trim($_POST['oldpassword']):exit('请输入旧密码!'); $arr['password']=trim($_POST['password'])?trim($_POST['password']):exit('请输入新密码!'); if ($arr['password']!=trim($_POST['password1'])) exit('两次输入密码不相同,请重新输入!'); //edit_password()修改密码的方法 $info=edit_password($arr); 我们跟进到这个函数edit_password: fun_user.php: function edit_password($arr,$check=true) { global $db,$QS_pwdhash; if (!is_array($arr))return false; $user_info=get_user_inusername($arr['username']); $pwd_hash=$user_info['pwd_hash']; $password=md5(md5($arr['oldpassword']).$pwd_hash.$QS_pwdhash); if ($check) { $row = $db->getone("SELECT * FROM ".table('members')." WHERE username='{$arr['username']}' and password = '{$password}' LIMIT 1"); if(empty($row)) { return -1; } } $md5password=md5(md5($arr['password']).$pwd_hash.$QS_pwdhash); if ($db->query( "UPDATE ".table('members')." SET password = '$md5password' WHERE username='".$arr['username']."'")) return $arr['username']; write_memberslog($_SESSION['uid'],$_SESSION['utype'],1004,$_SESSION['username'],"修改了密码"); return false; } 看见没有这里的意思是如果我们找到了username,那么我们底下就update该用户的密码 我们到注册页面: 注册完毕后 我们的意图就是更改test的密码 然后我们发送url: http://localhost/74cms_v3.5.1_20141015/upload/wap/personal/wap_password.php?act=save_password post: oldpassword=xxxxx&password=yyyy&password1=yyyy test用户的密码就被修改给yyyy了 登陆 看看:
解决方案:加强过滤 |
-
上一篇: web安全实践(3)再谈基于http的服务器架构剖析 - 网站安全 - 自学php网
下一篇: Web安全实践(2)基于http的web架构剖析 - 网站安全 - 自学php网
还没有人抢沙发呢~