appid和secret泄露未授权调用api服务
2023-5-17 10:56:40 Author: moonsec(查看原文) 阅读量:38 收藏

appid和secret泄露未授权调用api服务

1微信参考

https://developer.work.weixin.qq.com/document/path/90665

https://xz.aliyun.com/t/11092

简介

企业微信提供了通讯录管理、客户联系、身份验证、应用管理、消息推送、素材管理、OA、效率工具、企业支付、企业互联、会话内容存档、电子发票、家校沟通、家校应用、政民沟通等API,企业可以使用这些API,为企业接入更多个性化的办公应用

企业微信的corpid secret 泄露,可能会导致以下安全问题:

  1. 攻击者可以通过这些信息获取企业微信的 access_token 和其他敏感信息,如用户信息、聊天记录等,从而进行恶意操作或者攻击。

  2. 攻击者可以伪造企业微信的身份,冒充企业微信的管理员进行欺诈或者诈骗行为,对企业造成损失。

  3. 攻击者可以在企业微信中注入恶意代码,通过漏洞等方式进行攻击和非法操作。

获取的配置文件内容

public static final String QQ_APPID = "10******4";

  public static final String QQ_APPKEY = "d6c19e95b******6fdec2142c";

  public static final String WECHAT_APPID = "wx7ac******8006d5";

  public static final String WECHAT_SECRETID = "36b957c0aa32******00f56c93106";

   public static final String WEIBO_APPKEY = "18******670";

  public static final String WEIBO_RedirectURI = "xxx";

  public static final String WEIBO_SERCET = "631b06d026c******6bffecfb0ac";

参数介绍

corpid

每隔企业都拥有唯一的corpid,获取此信息可在管理后台"我的企业"-"企业管理"下查看"企业ID"

secret

secret是企业应用里面用于保障数据安全的"钥匙",每一个应用都有一个独立的访问密钥,为了保证数据的安全,secret务必不能泄露。查看Secret需要在手机企业微信查看

access_token

access_token是企业后台去企业微信的后台获取信息时的重要票据,由corpidsecret产生。所有接口在通信时都需要携带此信息用于验证接口的访问权限

根据官方文档获取access_token需要使用到corpidcorpsecret

https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

每个应用有独立的secret,获取到的access_token只能本应用使用,所以每个应用的access_token应该分开来获取

企业微信APi查询

access_toekn权限查询

可根据企业微信API查询access_token权限

https://open.work.weixin.qq.com/devtool/query

每个secret对应了每个独立的应用,如果用上面生成的access_token请求未授权的应用会导致报错。48002API接口无权限调用

错误码可根据企业微信API接口查询

https://open.work.weixin.qq.com/devtool/query?e=60020

获取企业微信API域名IP段就需要拥有"审批"权限,获取"审批"Secret生成access_token

获取企业微信API域名IP

https://qyapi.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=

获取部门列表

https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=

id对应部门idparentid对应所属部门id

获取部门成员列表

https://qyapi.weixin.qq.com/cgi-bin/user/simplelist?access_token=

获取部门成员详情

https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=

所有人的姓名、手机号、头像、企业微信二维码、邮箱

更详细API信息参考:

https://developer.work.weixin.qq.com/document/path/90193

在学习完企业微信corpidcorpsecret泄露之后,发现在配置文件中的appidsecret原来是微信小程序

2微信小程序

参考:

https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

返回状态码:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Global_Return_Code.html

简介

微信小程序的WECHAT_APPID WECHAT_SECRETID泄露,可能会导致以下安全问题:

  1. 被攻击者可以通过这些信息获取小程序的 access_token 和其他敏感信息,如用户信息等,从而进行恶意操作或者攻击。

  2. 攻击者可以伪造小程序的身份,冒充小程序开发者进行欺诈或者诈骗行为,对用户造成损失。

  3. 攻击者可以在小程序中注入恶意代码,通过漏洞等方式进行攻击和非法操作。

获取接口调用凭证

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

获取微信服务器IP地址

https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=ACCESS_TOKEN

微信会返回下述JSON数据包给公众号:

接口在线调试

获取access_token

https://mp.weixin.qq.com/debug/

获取关注者列表接口

除了可以获取access_token和服务器地址,其他都是未授权未找到其他授权接口

3科大讯飞

参考

https://www.xfyun.cn/doc/platform/xfyunreadme.html#%E5%B9%B3%E5%8F%B0%E7%89%B9%E8%89%B2

简介

讯飞开放平台作为开放的智能交互技术服务平台,致力于为开发者打造一站式智能人机交互解决方案。用户可通过互联网、移动互联网,使用任何设备、在任何时间、任何地点,随时随地享受讯飞开放平台提供的“听、说、读、写……”等全方位的人工智能服务。目前,开放平台以“云+端”的形式向开发者提供语音合成、语音识别、语音唤醒、语义理解、人脸识别等多项服务。

国内外企业、中小创业团队和个人开发者,均可在讯飞开放平台直接体验先进的语音技术,并简单快速集成到产品中,让产品具备“能听会说会思考会预测”的功能。

科大讯飞语音合成API的凭据,如果这些凭据泄露,恶意用户可以使用它们来访问您的语音合成API,这可能会导致以下风险:

  1. 访问API的使用限制:如果您的API使用计划有访问限制,攻击者可能会使用您的API密钥来绕过访问限制,并访问您的API,这可能会导致您的API使用量超过了您的预算或计划限制。

  2. 访问敏感数据:如果您的语音合成API与敏感数据有关,则攻击者可以使用您的API密钥来访问或篡改这些数据,这可能会导致隐私和合规性方面的问题。

  3. 消费资源:攻击者可以使用您的API密钥来消费您的资源,例如使用您的服务器来进行暴力破解或发起分布式拒绝服务攻击(DDoS攻击),这可能会导致您的API不可用或降速。

private final String hostUrl = "https://tts-api.xfyun.cn/v2/tts";private final String appid = "59****5";private final String apiSecret = "1a3f18***************0b554509";private final String apiKey = "c30779b1****************05eb80";

科大讯飞的功能包括:

  1. 语音识别:将人类语音转化为计算机可识别的文本。

  2. 语音合成:将计算机生成的文本转化为自然流畅的语音。

  3. 语音评测:对人类语音进行自然度、流畅度、准确度等多方面的评估。

  4. 语音唤醒:通过唤醒词来激活设备,并开始语音交互。

  5. 语音分析:对音频进行分析和处理,如音频去噪、音频降噪等。

  6. 语音翻译:将一种语言的文本或语音翻译成另一种语言的文本或语音。

  7. 语音交互:通过语音交互技术,实现人机对话、语音搜索等功能。

除此之外,科大讯飞还提供了人工智能领域的其他解决方案,如人脸识别、图像识别、机器翻译等,这些技术可以应用于安防、金融、医疗、教育、交通等领域,为企业和个人提供更加便捷、智能的服务

关于以上的每一个功能都分别有不同的服务接口

  1. 语音识别: ws[s]: //iat-api.xfyun.cn/v2/iat

  2. 语音合成: ws[s]: //tts-api.xfyun.cn/v2/tts

  3. 语音评测: wss://ise-api.xfyun.cn/v2/open-ise

  4. 自然语言处理:https://audit.iflyaisol.com/audit/v2/syncText

  5. 文字识别: http[s]: //api.xf-yun.com/v1/private/sf8e6aca1

  6. 图像识别:http://tupapi.xfyun.cn/v1/scene

获取接口调用凭证

这里仅用语音合成做演示

golang代码

packagemain

import (
"crypto/hmac"

"crypto/sha256"
"encoding/base64"

"fmt"
"net/url"
"time")

const (
STATUS_FIRST_FRAME = 0 // 第一帧的标识

STATUS_CONTINUE_FRAME = 1 // 中间帧标识

STATUS_LAST_FRAME = 2 // 最后一帧的标识)

typeWsParam struct {
APPID string
APIKey string

APISecret string
Text string


CommonArgs map[string]string
BusinessArgsmap[string]string
Data map[string]interface{}}

func NewWsParam(appid,apikey, apisecret, text string) *WsParam {
return &WsParam{

APPID: appid,
APIKey: apikey,
APISecret: apisecret,
Text: text,



CommonArgs: map[string]string{"app_id": appid},

BusinessArgs: map[string]string{"aue": "raw","auf": "audio/L16;rate=16000", "vcn":"xiaoyan", "tte": "utf8"},
Data: map[string]interface{}{"status": 2, "text":""},
}}

func (p *WsParam)create_url() string {
urlStr :="wss://tts-api.xfyun.cn/v2/tts"


//生成RFC1123格式的时间戳

date := time.Now().UTC().Format(time.RFC1123)
// 拼接字符串

signature_origin := fmt.Sprintf("host: %s\n","ws-api.xfyun.cn")
signature_origin +=fmt.Sprintf("date: %s\n", date)
signature_origin+= fmt.Sprintf("GET %s HTTP/1.1", "/v2/tts")



// 进行hmac-sha256进行加密

signature := hmac.New(sha256.New, []byte(p.APISecret))
signature.Write([]byte(signature_origin))
signature_sha :=base64.StdEncoding.EncodeToString(signature.Sum(nil))



authorization_origin := fmt.Sprintf("api_key=\"%s\",algorithm=\"%s\", headers=\"%s\",signature=\"%s\"",
p.APIKey,"hmac-sha256", "host date request-line",signature_sha)
authorization :=base64.StdEncoding.EncodeToString([]byte(authorization_origin))



// 将请求的鉴权参数组合为字典

v := url.Values{}
v.Add("authorization",authorization)
v.Add("date", date)
v.Add("host", "ws-api.xfyun.cn")



// 拼接鉴权参数,生成url

urlStr = urlStr + "?" + v.Encode()
//fmt.Printf("date: %s\nv: %v\n", date, v)
//此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致

// fmt.Println("websocket url :", urlStr)



return urlStr}

func main() {
wsParam := NewWsParam("xxx", "xxxx", "xxx","要转换的文字")

str := wsParam.create_url()
fmt.Println(str)}

获取鉴权接口,可以直接使用wss在线网站进行使用

wss://tts-api.xfyun.cn/v2/tts?authorization=YXBpX2tleT0iYzMxxxxxxxxxxxxxxxxxxxRlIHJlcXVlc3QtbGluZSIsIH************************NcjZJandrWksxTE1UbGR5Szh6cz0i&date=Sun%2C+14+May+2023+09%3A16%3A07+UTC&host=ws-api.xfyun.cn

POST请求参数, 文本内容,需进行base64编码。app_id需要修改

{

"common": {
"app_id": "xxx"

},
"business": {
"aue": "raw",

"vcn": "xiaoyan",
"pitch":50,
"speed": 50
},
"data":{
"status": 2,
"text":"5q2j5Zyo5Li65oKo5p+l6K+i5ZCI6..."
}}

返回结果是合成后的音频片段,采用base64编码。可使用脚本导出mp3格式

即时通

即时通信SDKAppID是腾讯云即时通信服务分配给开发者的应用唯一标识符。如果该AppID泄露,攻击者可能会利用该AppID进行恶意操作,例如:

  1. 篡改消息:攻击者可以使用泄露的AppID伪造发送方身份,向用户发送恶意消息,如诱导用户点击恶意链接或下载恶意文件,从而实施钓鱼攻击。

  2. 消耗资源:攻击者可以使用泄露的AppID向腾讯云服务器发送大量请求,占用服务器资源,造成服务不可用或延迟等问题。

  3. 其他攻击:攻击者可以通过其他手段,如针对即时通信接口的攻击等,进一步实施攻击行为

参考:

https://tcc.tencentcs.com/im-api-tool/index.html#/v4/group_open_http_svc/get_appid_group_list

https://cloud.tencent.com/document/product/269/1520

项目中暂还没遇到,没有安装环境这里只简单写了一下

需要SDKAppIDprivateKey

即时通需要生成UserSigUserSig需要SDKAppIDprivateKey通过计算生成

脚本下载地址:https://github.com/tencentyun/tls-sig-api-v2-golang/tree/master

使用API联调工具进行测试

QQ

QQ需要引导用户登录才可以获取到Authorization Code,然后根据Authorization Code获取

Access Token。根据Access Token才可以调用API获取用户的信息。

QQ并没有研究出来有用的信息,暂时跳过

参考:

https://wiki.connect.qq.com/%e5%bc%80%e5%8f%91%e6%94%bb%e7%95%a5_server-side

https://connect.qq.com/sdk/webtools/index.html

微博

引用chatgpt的回答,结果和QQ的机制类似

要通过Weibo App Key 获取授权登录的access_token,需要进行以下步骤:

  1. 在微博开放平台创建应用,并获取 App Key App Secret

  2. 引导用户使用微博授权登录,获取到用户的微博帐号和授权码 code

  3. 使用授权码 code,以及 App Key App Secret,向微博授权服务器发起请求,获取 access_token。具体请求方式可以参考微博开放平台提供的接口文档。

  4. 获取到 access_token 后,可以使用该 token 访问微博开放平台提供的各种接口,包括获取用户信息、发送消息等。

参考:

https://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5

5.关注公众号

公众号长期更新安全类文章,关注公众号,以便下次轻松查阅

觉得文章对你有帮助 请转发 点赞 收藏


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMjc0NTEzMw==&mid=2653587163&idx=1&sn=bbfddf9fa1f13ccee41db3cf7bee2fea&chksm=811b9099b66c198f78ad45692d88d48f900994c3c6d9cfab4f2a47a7b242926b34dcc464e354#rd
如有侵权请联系:admin#unsafe.sh