微信接口测试拓展

背景

最近收到一个SRC提交的漏洞,泄露了微信小程序的appkey和appSecret;于是乎为了搞清楚影响,漏洞风险和利用方式,便有了这篇文章;

在了解漏洞风险之前先来了解一下微信的几个平台;

微信公众号平台

微信公众平台开发概述 | 微信开放文档 (qq.com)

微信公众平台接口调试工具 (qq.com)

这个界面是微信公众号平台提供的在线接口调试工具,可以看到功能挺丰富的,公众号后台的大部分功能都可以通过接口的方式调用,第一个接口就是通过appid和secret兑换access_token,然后后面的接口都是通过access_token来请求数据;

微信接口测试拓展_第1张图片
微信接口测试拓展_第2张图片

我这边登录自己的公众号后台,在APPSecret这里可以看到官方对于这个APPSecret的描述,也就是=密码;

微信接口测试拓展_第3张图片
微信接口测试拓展_第4张图片
微信接口测试拓展_第5张图片

但是我们配置到后面,可以看到需要配置ip白名单,才可以成功调用,下面的调用情况对比,就是把当前ip配置到白名单前后的对比;也就是说即使拿到了公众号的id和secret,但是不是白名单中的请求ip也是无法成功调用;

我这里是重置后必须要配置白名单才可以调用成功,但是我以前也遇到过拿到了id和secret确实可以调用成功的,不过这个不晓得对应公众号后台是怎么配置的;

微信接口测试拓展_第6张图片
微信接口测试拓展_第7张图片

然后自己以前也是跟这个白帽子类似,弄了个脚本拿到数据测试一下,能换token,哦吼,也就是数据有效存在风险,但是自己其实没有使用过,也不清楚具体风险是啥;然后关于白帽子提到的2000次调用限制,这个也确实有的,我自己测试了之后调用一次使用次数就少一次了;但是这里是公众号的id、secret;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-shJOjc9w-1687338883860)(%E5%BE%AE%E4%BF%A1%E6%8E%A5%E5%8F%A3%E6%B5%8B%E8%AF%95%E6%8B%93%E5%B1%95%2017e828cb60d74f65aa8147f6869dfb0f/Untitled%207.png)]

微信开放平台

微信调试工具 (qq.com)

微信登录

白忙活,注册了半天结果要花300才给用;

微信接口测试拓展_第8张图片

微信登录

具体还是看这篇指导文章;可以看到创建应用或者其他程序以调用微信开放平台提供的能力;能力包含了微信登录、分享、发朋友圈等,具体可以参考官方文档或者接口调试工具;

微信接口测试拓展_第9张图片

微信接口测试拓展_第10张图片
微信接口测试拓展_第11张图片

这里的Android证书和包名以及iOS的Bundile ID,会成为id和secret调用时候的凭据,应用配置完成后会生成对应的id和secret,不知道这里会不会提示这个数据的重要,目前在官方文档和后台都没有看到对于此数据的重要性描述;看接口文档也是直接写到代码里,没有提示需要额外处理;

微信接口测试拓展_第12张图片
微信接口测试拓展_第13张图片

通过获取的应用id和secret直接调用对应的接口,会提示如下;

微信接口测试拓展_第14张图片

微信auth2认证流程

准备工作 | 微信开放文档

微信接口测试拓展_第15张图片

漏洞影响

通过以上分析,因为泄露的是开发平台的应用id、secret,可以确定漏洞风险影响有限,然后涉及的应用为公版老版本,现存量活跃用户很少;然后漏洞实际可能造成的影响很小,或者说无法利用;然后目前github已经删除敏感信息,但是微信开发平台不支持重置。

测试脚本

下面为文章中使用的测试脚本;也是以前测试时候用的脚本。。。

# /usr/bin/env python3
# author:samli
# date:20220107
# -*- coding: utf-8 -*

import os
import sys
import re
import requests
import json

def main(appId, appSecret):
    url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s" % (appId, appSecret)
    r = requests.get(url, timeout=10)
    #print (r.json())
    token = r.json().get('access_token')
    print (type(token))

    url = "https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=%s" % (token)
    api_domain_ip = requests.get(url, timeout=10)
    print("Domain ip:\n")
    print( api_domain_ip.json())

    url = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=%s" % (token)
    get_current_selfmenu_inf = requests.get(url, timeout=10)
    print("Current menu:\n")
    print(get_current_selfmenu_inf.json())

if __name__ == '__main__':
    print ("Usage:checkWXSDK.py AppId AppSecret \n")

    appId = sys.argv[1]
    appSecret = sys.argv[2]
    print ("You AppId:" + appId)
    print ("You AppSecret:" + appSecret)
    main(appId , appSecret)

你可能感兴趣的:(微信,安全分析)