emlog后台漏洞,可无视验证码爆破密码

  • 内容
  • 相关

 

 大家可能为了防止黑客对emlog博客后台暴力破解,在后台添加了验证码功能。

但即使在Emlog后台添加了验证码,也不安全,就跟没添加一样的。攻击者依然可以使用爆破工具批量猜测密码

代码分析

登录页面,在admin/globals.php

//登录验证
if ($action == 'login') {
	$username = isset($_POST['user']) ? addslashes(trim($_POST['user'])) : '';
	$password = isset($_POST['pw']) ? addslashes(trim($_POST['pw'])) : '';
	$ispersis = isset($_POST['ispersis']) ? intval($_POST['ispersis']) : false;
	$img_code = Option::get('login_code') == 'y' && isset($_POST['imgcode']) ? addslashes(trim(strtoupper($_POST['imgcode']))) : '';
 
    $loginAuthRet = LoginAuth::checkUser($username, $password, $img_code);
    
	if ($loginAuthRet === true) {
		LoginAuth::setAuthCookie($username, $ispersis);
		emDirect("./");
	} else{
		LoginAuth::loginPage($loginAuthRet);
	}
}

LoginAuth::checkUser是关键函数 我们看他实现的过程

是在include\lib\loginauth.php文件

public static function checkUser($username, $password, $imgcode, $logincode = false) {
        session_start();
        if (trim($username) == '' || trim($password) == '') {
            return false;
        } else {
            $sessionCode = isset($_SESSION['code']) ? $_SESSION['code'] : '';
            $logincode = false === $logincode ? Option::get('login_code') : $logincode;
            if ($logincode == 'y' && (empty($imgcode) || $imgcode != $sessionCode)) {
                return self::LOGIN_ERROR_AUTHCODE;
            }
            $userData = self::getUserDataByLogin($username);
            if (false === $userData) {
                return self::LOGIN_ERROR_USER;
            }
            $hash = $userData['password'];
            if (true === self::checkPassword($password, $hash)){
                return true;
            } else{
                return self::LOGIN_ERROR_PASSWD;
            }
        }
		
}


SESSION验证方面都不错,当登录失败会调用loginPage方法

public static function loginPage($errorCode = NULL) {
        Option::get('login_code') == 'y' ?
        $ckcode = "<span>验证码</span>
        <div class=\"val\"><input name=\"imgcode\" id=\"imgcode\" type=\"text\" />
        <img src=\"../include/lib/checkcode.php\" align=\"absmiddle\"></div>" :
        $ckcode = '';
        $error_msg = '';
        if ($errorCode) {
			//unset($_SESSION['code']);
            switch ($errorCode) {
                case self::LOGIN_ERROR_AUTHCODE:
                    $error_msg = '验证错误,请重新输入';
                    break;
                case self::LOGIN_ERROR_USER:
                    $error_msg = '用户名错误,请重新输入';
                    break;
                case self::LOGIN_ERROR_PASSWD:
                    $error_msg = '密码错误,请重新输入';
                    break;
            }
        }
        require_once View::getView('login');
        View::output();
    }



但是整个登录流程并没有立即对验证码的SESSION进行销毁。便导致了漏洞的产生


利用:整个流程中,只需要获取一次验证码,接下来就不用获取便可爆破了。

为了证实猜想,用易语言写了个简单的工具

b6c31471764689.png 

先获取一次验证码

将密码随机写入脚本,进行登录验证,可以看到,调试出来的就是我们爆破信息,第六个空就是我们正确密码爆破成功的标志

解决办法

登录验证的代码上销毁验证码的session即可 admin/globals.php

unset($_SESSION['code']);


b6c31471764759.png

此时我们在用程序爆破测试

可以看到,除了第一个密码错误以外,其他都需要验证码

71421471764806.png

转小草博客

本文标签:

版权声明:若无特殊注明,本文皆为《森七》原创,转载请保留文章出处。

本文链接:emlog后台漏洞,可无视验证码爆破密码 - http://www.mosq.cn/post-58.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注。采用输入QQ快速评论,有人回复邮件通知。

评论

12条评论
  1. avatar

    杨娟 Lv.1 Chrome 55.0.2883.87 Chrome 55.0.2883.87 Windows Windows 回复

    你的改了吗?我觉得应该爆破试试

    1. avatar

      Ricky.D. Lv.1 Chrome 61.0.3163.100 Chrome 61.0.3163.100 Windows Windows 回复

      感谢大佬的分享

      1. avatar

        梓熙博客 Lv.1 回复

        虽然说可以无视验证码进行无数次爆破,但是我的后台密码是随机密码生成的,莫非他能导入10乘10次方的密码数量吗?[滑稽]

        1. 森七 回复

          回复了梓熙博客:这也和密码强弱有关啦,太复杂的记不住,像我的密码就是123456[滑稽]

      2. avatar

        雨染蓝枫叶 Lv.1 QQbrowser QQbrowser Unknown Unknown 回复

        没看懂  是删除 unset($_SESSION['code']);      ????

        1. 森七 QQbrowser QQbrowser Android 4.4.4 Android 4.4.4 回复

          回复了雨染蓝枫叶:销毁即删除嘛

        2. 雨染蓝枫叶 Lv.1 QQbrowser QQbrowser Unknown Unknown 回复

          回复了森七:刚看下  我的里面本来就没有[微笑]

      3. avatar

        特惠吧 Lv.2 回复

        感谢分享,谢谢了

        1. avatar

          李明 Lv.6 回复

          昨晚博客被攻击挂了[愤怒]

          1. 森七 回复

            回复了李明:[流泪]可怕

        2. avatar

          Arlene 凉夏 Lv.5 回复

          来看看

          1. avatar

            emlog Lv.1 回复

            感谢分享