
大模型新基座,基于FastAPI,利用Python開發MCP服務器
淺談獲取access_token
獲取接口調用憑證實質就是獲取access_token。在微信接口開發中,許多服務的使用都離不開Access Token,Access Token相當于打開這些服務的鑰匙,正常情況下會在7200秒內失效,重復獲取將導致上次獲取的Token失效,本文將首先介紹如何獲取Access Token。按微信官方的說明,access_token是公眾號的全局唯一接口調用憑據,公眾號調用各接口時都需使用access_token。開發者需要進行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前為2個小時,需定時刷新,重復獲取將導致上次獲取的access_token失效。
公眾平臺的API調用所需的access_token的使用及生成方式說明
tips注意
獲取Access Token
獲取Access Token接口的網址如下:
https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=[APPID]&secret=[APPSECRET]
給師傅們看下在一些站點的網頁源代碼泄露的appid和appsecret參數值,長什么樣子。
請求參數
我們需要使用上面的獲取Access Token接口的網址,然后分別填入上面的兩個appid和appsecret參數,如下詳情:
屬性 | 類型 | 必填 | 說明 |
---|---|---|---|
grant_type | string | 是 | 填寫 client_credential |
appid | string | 是 | 小程序唯一憑證,即 AppID,可在「微信公眾平臺 – 設置 – 開發設置」頁中獲得。(需要已經成為開發者,且帳號沒有異常狀態) |
secret | string | 是 | 小程序唯一憑證密鑰,即 AppSecret,獲取方式同 appid |
返回參數
成功之后,師傅們就可以看到GET傳參請求成功的回顯結果,回顯得到的參數如下:
屬性 | 類型 | 說明 |
---|---|---|
access_token | string | 獲取到的憑證 |
expires_in | number | 憑證有效時間,單位:秒。目前是7200秒之內的值。 |
返回數據示例
正常情況下,微信會返回下述JSON數據包給公眾號:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200
}
錯誤時微信會返回錯誤碼信息,JSON數據包實示例如下(該示例為AppID無效錯誤):
{
"errcode":40013,
"errmsg":"invalid appid"
}
常見的錯誤碼
錯誤碼 | 錯誤描述 | 解決方案 |
---|---|---|
-1 | system error | 系統繁忙,此時請開發者稍候再試 |
40001 | invalid credential access_token isinvalid or not latest | 獲取 access_token 時 AppSecret 錯誤,或者 access_token 無效。請開發者認真比對 AppSecret 的正確性,或查看是否正在為恰當的公眾號調用接口 |
40013 | invalid appid | 不合法的 AppID ,請開發者檢查 AppID 的正確性,避免異常字符,注意大小寫 |
40002 | invalid grant_type | 不合法的憑證類型 |
40125 | 不合法的 secret | 請檢查 secret 的正確性,避免異常字符,注意大小寫 |
40164 | 調用接口的IP地址不在白名單中 | 請在接口IP白名單中進行設置 |
41004 | appsecret missing | 缺少 secret 參數 |
50004 | 禁止使用 token 接口 | |
50007 | 賬號已凍結 | |
61024 | 第三方平臺 API 需要使用第三方平臺專用 token | |
40243 | AppSecret已被凍結,請登錄小程序平臺解凍后再次調用 |
下面的代碼我們封裝了企業訂閱號、媒體訂閱號、個人訂閱號、測試號的憑證調用。同時使用的Senparc.WeiXin SDK接口直接獲取憑證的方式,大家可供參考,得到的憑證我是存在了數據庫中,同時支持多公眾號統一維護。
List<KeyValuePair> parmeters = new List<KeyValuePair>
{
new KeyValuePair(WeixinOfficialAccountTable.FieldDeleteMark, 0)
};
var listOfficialAccount = BaseEntity.GetList(RDIFrameworkService.Instance.WeixinBasicService.GetOfficialAccountDTByValues(parmeters));
if(listOfficialAccount != null && listOfficialAccount.Count() > 0)
{
foreach(WeixinOfficialAccountEntity entity in listOfficialAccount)
{
try
{
if(entity.Category == (int)WeChatSubscriberEnum.EnterpriseSubscriber)
{
if(!string.IsNullOrEmpty(entity.AppId) && !string.IsNullOrEmpty(entity.AppSecret))
{
//方法一:使用Senparc.WeiXin SDK的方法
entity.AccessToken = Senparc.Weixin.QY.CommonAPIs.CommonApi.GetToken(entity.AppId, entity.AppSecret).access_token;
//方式二,直接調用微信的接口方法
//var url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", "client_credential".AsUrlData(), entity.AppId.AsUrlData(), entity.AppSecret.AsUrlData());
//AccessTokenResult result = Get.GetJson(url);
//entity.AccessToken = result.access_token;
entity.ModifiedOn = DateTime.Now;
returnValue += RDIFrameworkService.Instance.WeixinBasicService.UpdateOfficialAccount(entity);
}
}
else
{
if(!string.IsNullOrEmpty(entity.AppId) && !string.IsNullOrEmpty(entity.AppSecret))
{
//方法一:使用Senparc.WeiXin SDK的方法
entity.AccessToken = Senparc.Weixin.MP.CommonAPIs.CommonApi.GetToken(entity.AppId, entity.AppSecret).access_token;
//方式二,直接調用微信的接口方法
//var url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", "client_credential".AsUrlData(), entity.AppId.AsUrlData(), entity.AppSecret.AsUrlData());
//AccessTokenResult result = Get.GetJson(url);
//entity.AccessToken = result.access_token;
entity.ModifiedOn = DateTime.Now;
returnValue += RDIFrameworkService.Instance.WeixinBasicService.UpdateOfficialAccount(entity);
}
}
}
catch(Exception ex)
{
}
}
}
參考文章如下:
使用固定IP訪問api.weixin.qq.com時,請開發者注意運營商適配,跨運營商訪問可能會存在高峰期丟包問題。
API接口IP即api.weixin.qq.com的解析地址,由開發者調用微信側的接入IP接口調用請求說明。
http請求方式: GET
https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=ACCESS_TOKEN
參數說明
參數 | 是否必須 | 說明 |
---|---|---|
access_token | 是 | 公眾號的access_token |
返回說明
正常情況下,微信會返回下述JSON數據包給公眾號:
{
"ip_list":[
"IP1",
"IP2",
"IP3",
"IP4",
......
]
}
參數說明
錯誤時微信會返回錯誤碼等信息,JSON數據包示例如下(該示例為AppID無效錯誤):
{
"errcode":40013,
"errmsg":"invalid appid rid: 66dbb72e-7529f8ad-47f1afb9"
}
請開發者確保防火墻、ddos攻擊白名單IP內已添加回調IP,以避免誤攔截的情況出現。
callback IP即微信調用開發者服務器所使用的出口IP接口調用請求說明。
http請求方式: GET
https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN
參數說明
參數 | 是否必須 | 說明 |
---|---|---|
access_token | 是 | 公眾號的access_token |
下面這個在線的測試接口的地址是微信公眾和小程序的官方測試使用的網址,相比上面的需要記住GET傳參的url,下面的在線的測試接口的地址更加方便,且功能點也全。
https://mp.weixin.qq.com/debug
比如我之前挖edu找到的這個body請求包,里面有appid和appsecret參數,那么就可以直接放到上面的在線網址使用了。
針對于去找微信API接口相關APPid和appSecret泄露,然后可以成功獲取access_token值的目標資產,這里簡單給師傅們演示下使用FOFA進行相關資產和目標的檢索。
FOFA使用下面的檢索語法如下:
(body="appId"&& body="appSecret")&& body="access_token"
使用fofa檢索,可以看到可以匹配到127個獨立的IP,當然這個語法不是固定的,師傅們可以去自己完善相關語法,有好的語法的師傅們也可以在評論區進行相互交流學習。
然后在fofa里面找到了一個edu的站點,后面也是對該edu的站點進行一個測試。
通過上面對fofa的測繪,然后找到的上面的這個edu的站點,像這樣的直接右擊網頁源代碼,然后在源代碼里面檢索appid參數,可以看到下面的源代碼中找到了相關參數。
然后就是先獲取接口調用憑證(access_token)。
https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=[APPID]&secret=[APPSECRET]
使用上面的參數直接調用,發現顯示40164狀態碼,意思是調用接口的IP地址不在白名單中,那就說明這個appid存在,但是被限制了。
這個時候我就在想了,既然這個edu的站點存在appid和appSecret參數值泄露,且這個是微信小程序的相關API接口,那么有沒有可能這個學校的微信小程序可以找到別的appid參數,且沒有做限制,畢竟不同的小程序,做的防護也不一樣。
我這里直接使用微信小程序去挨個找這個學校的微信小程序的接口,看看有沒有接口可以找到相關泄露appid和appSecret值的接口,然后去獲取access_token值。
后面在小程序拿到這個GET傳參的接口,/mobile/serve/wechat/getConfig,里面可以獲取到一個微信小程序的appid和appSecret值。
然后直接再次使用上面的獲取接口調用憑證(access_token)
https請求方式:GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=[APPID]&secret=[APPSECRET]
http請求方式: GET
https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=ACCESS_TOKEN
參考文檔:https://developer.work.weixin.qq.com/document/path/92520
這篇文章讀到這里就已經結束了,希望上面的文章對師傅們有幫助。師傅們可以多去找找相關站點漏洞,然后去看看我寫的的相關傳參使用的接口,然后去試試能不能成功打出相關API漏洞的泄露。可以嘗試去微信小程序去找找相關的appid泄露值,然后去使用我們的傳參,然后先去獲取token值,然后再去利用微信開發者文章去獲取別的對于的泄露的敏感信息,其中還有一個在線的使用站點,上面的文章中也給師傅們了,那個使用起來比較方便。歡迎師傅們在評論區多交流學習!
文章中涉及的敏感信息均已做打碼處理,文章僅做經驗分享用途,切勿當真,未授權的攻擊屬于非法行為!文章中敏感信息均已做多層打碼處理。傳播、利用本文章所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,作者不為此承擔任何責任,一旦造成后果請自行承擔。
申明:本公眾號所分享內容僅用于網絡安全技術討論,切勿用于違法途徑,所有滲透都需獲取授權,違者后果自行承擔,與本號及作者無關,請謹記守法。
歡迎加入星球一起交流,券后價僅40元!!!即將滿100人漲價長期更新,更多的0day/1day漏洞POC/EXP
原文轉載自:https://mp.weixin.qq.com/s/neunfzjm77Fo8StlLcYcZg