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

Andrew.Hann發表於2015-03-20

目錄

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

 

相關文章