• duxcms SQL Injection In /admin/module/loginMod.class.php


    目录

    1. 漏洞描述
    2. 漏洞触发条件
    3. 漏洞影响范围
    4. 漏洞代码分析
    5. 防御方法
    6. 攻防思考

    1. 漏洞描述

    duxcms是一款采用PHP开发,基于HMVC规则开发适合中小企业、公司、新闻、个人等相关行业的网站内容管理,它的后台登录处存在sql注入,黑客可通过这个漏洞获取管理员密码、直接任意用户登录后台等攻击

    Relevant Link:

    http://www.wooyun.org/bugs/wooyun-2010-063055


    2. 漏洞触发条件

    1. 用户名
    -1" union select 1,2,3,'c4ca4238a0b923820dcc509a6f75849b',5,6,7,8,9,10,11#
    /*
    这里的md5就是数字1的md5
    */
    
    2. 密码: 1


    3. 漏洞影响范围
    4. 漏洞代码分析

    /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);        
    }


    5. 防御方法

    /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);        
    }


    6. 攻防思考

    Copyright (c) 2014 LittleHann All rights reserved

  • 相关阅读:
    ASP.NET Web应用程序与ASP.NET Web服务应用程序的区别
    【你必须知道的.NET】:【大话String】
    获取SQLServer数据库中所有表
    Window_Open详解收藏
    关于数据实现批量删除
    asp.net mvc 图形解析说明原理
    【转载】:C#语言
    泛型参数的约束
    SQL 常用函数小结
    [转载]:C#两种不同的存储过程调用方法
  • 原文地址:https://www.cnblogs.com/LittleHann/p/4353611.html
Copyright © 2020-2023  润新知