1. 漏洞描述
duxcms是一款采用PHP开发,基于HMVC规则开发适合中小企业、公司、新闻、个人等相关行业的网站内容管理,它的后台登录处存在sql注入,黑客可通过这个漏洞获取管理员密码、直接任意用户登录后台等攻击
2. 漏洞触发条件
1. 用户名 -1" union select 1,2,3,'c4ca4238a0b923820dcc509a6f75849b',5,6,7,8,9,10,11# /* 这里的md5就是数字1的md5 */ 2. 密码: 1
3. 漏洞代码分析
/admin/module/loginMod.class.php
//登陆检测
public function check()
{
if(empty($_POST['user']) || empty($_POST['password']))
{
$this->msg('帐号信息输入错误!',0);
}
//获取帐号信息
/*
这里是漏洞关键,程序未对用户的输入进行正确的过滤、转义
*/
$info = model('login')->user_info($_POST['user']);
//进行帐号验证
if(empty($info))
{
$this->msg('登录失败! 无此管理员帐号!',0);
}
if($info['password'] <> md5($_POST['password']))
{
$this->msg('登录失败! 密码错误!',0);
}
if($info['status']==0)
{
$this->msg('登录失败! 帐号已禁用!',0);
}
//更新帐号信息
$data['logintime']=time();
$data['ip']=get_client_ip();
$data['loginnum']=intval($info['loginnum'])+1;
model('login')->edit($data,intval($info['id']));
//更新登录记录
model('log')->login_log($info);
//设置登录信息
$_SESSION[$this->config['SPOT'].'_user']=$info['id'];
model('user')->current_user(false);
$this->msg('登录成功!',1);
}4. 防御方法
/admin/module/loginMod.class.php
//登陆检测
public function check()
{
if(empty($_POST['user']) || empty($_POST['password']))
{
$this->msg('帐号信息输入错误!',0);
}
//sql注入防御
$_POST['user'] = addslashes($_POST['user']);
$_POST['password'] = addslashes($_POST['password']);
//获取帐号信息
/*
这里是漏洞关键,程序未对用户的输入进行正确的过滤、转义
*/
$info = model('login')->user_info($_POST['user']);
//进行帐号验证
if(empty($info))
{
$this->msg('登录失败! 无此管理员帐号!',0);
}
if($info['password'] <> md5($_POST['password']))
{
$this->msg('登录失败! 密码错误!',0);
}
if($info['status']==0)
{
$this->msg('登录失败! 帐号已禁用!',0);
}
//更新帐号信息
$data['logintime']=time();
$data['ip']=get_client_ip();
$data['loginnum']=intval($info['loginnum'])+1;
model('login')->edit($data,intval($info['id']));
//更新登录记录
model('log')->login_log($info);
//设置登录信息
$_SESSION[$this->config['SPOT'].'_user']=$info['id'];
model('user')->current_user(false);
$this->msg('登录成功!',1);
}如果本篇文章帮到了你,那么,请点击右侧的百度分享,让我们一起帮助更多的朋友!

