0x2 微信API接口概述

一、獲取接口調(diào)用憑據(jù)

  1. 功能描述

image

  1. 淺談獲取access_token
    獲取接口調(diào)用憑證實質(zhì)就是獲取access_token。在微信接口開發(fā)中,許多服務(wù)的使用都離不開Access Token,Access Token相當(dāng)于打開這些服務(wù)的鑰匙,正常情況下會在7200秒內(nèi)失效,重復(fù)獲取將導(dǎo)致上次獲取的Token失效,本文將首先介紹如何獲取Access Token。按微信官方的說明,access_token是公眾號的全局唯一接口調(diào)用憑據(jù),公眾號調(diào)用各接口時都需使用access_token。開發(fā)者需要進(jìn)行妥善保存。access_token的存儲至少要保留512個字符空間。access_token的有效期目前為2個小時,需定時刷新,重復(fù)獲取將導(dǎo)致上次獲取的access_token失效。

  2. 公眾平臺的API調(diào)用所需的access_token的使用及生成方式說明

二、如何獲取access_token值?

  1. tips注意

  2. 獲取Access Token
    獲取Access Token接口的網(wǎng)址如下:

    https請求方式: GET
    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=[APPID]&secret=[APPSECRET]

    給師傅們看下在一些站點的網(wǎng)頁源代碼泄露的appid和appsecret參數(shù)值,長什么樣子。

image

  1. 請求參數(shù)
    我們需要使用上面的獲取Access Token接口的網(wǎng)址,然后分別填入上面的兩個appid和appsecret參數(shù),如下詳情:

    屬性 類型 必填 說明
    grant_type string 填寫 client_credential
    appid string 小程序唯一憑證,即 AppID,可在「微信公眾平臺 – 設(shè)置 – 開發(fā)設(shè)置」頁中獲得。(需要已經(jīng)成為開發(fā)者,且?guī)ぬ枦]有異常狀態(tài))
    secret string 小程序唯一憑證密鑰,即 AppSecret,獲取方式同 appid
  2. 返回參數(shù)
    成功之后,師傅們就可以看到GET傳參請求成功的回顯結(jié)果,回顯得到的參數(shù)如下:

    屬性 類型 說明
    access_token string 獲取到的憑證
    expires_in number 憑證有效時間,單位:秒。目前是7200秒之內(nèi)的值。
  3. 返回數(shù)據(jù)示例
    正常情況下,微信會返回下述JSON數(shù)據(jù)包給公眾號:

    {
       "access_token":"ACCESS_TOKEN",
       "expires_in":7200
    }

image

錯誤時微信會返回錯誤碼信息,JSON數(shù)據(jù)包實示例如下(該示例為AppID無效錯誤):

   {
       "errcode":40013,
       "errmsg":"invalid appid"
   }

image

  1. 常見的錯誤碼

    錯誤碼 錯誤描述 解決方案
    -1 system error 系統(tǒng)繁忙,此時請開發(fā)者稍候再試
    40001 invalid credential access_token isinvalid or not latest 獲取 access_token 時 AppSecret 錯誤,或者 access_token 無效。請開發(fā)者認(rèn)真比對 AppSecret 的正確性,或查看是否正在為恰當(dāng)?shù)墓娞栒{(diào)用接口
    40013 invalid appid 不合法的 AppID ,請開發(fā)者檢查 AppID 的正確性,避免異常字符,注意大小寫
    40002 invalid grant_type 不合法的憑證類型
    40125 不合法的 secret 請檢查 secret 的正確性,避免異常字符,注意大小寫
    40164 調(diào)用接口的IP地址不在白名單中 請在接口IP白名單中進(jìn)行設(shè)置
    41004 appsecret missing 缺少 secret 參數(shù)
    50004 禁止使用 token 接口
    50007 賬號已凍結(jié)
    61024 第三方平臺 API 需要使用第三方平臺專用 token
    40243 AppSecret已被凍結(jié),請登錄小程序平臺解凍后再次調(diào)用

image

三、實現(xiàn)方法

下面的代碼我們封裝了企業(yè)訂閱號、媒體訂閱號、個人訂閱號、測試號的憑證調(diào)用。同時使用的Senparc.WeiXin SDK接口直接獲取憑證的方式,大家可供參考,得到的憑證我是存在了數(shù)據(jù)庫中,同時支持多公眾號統(tǒng)一維護(hù)。

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;
                    //方式二,直接調(diào)用微信的接口方法
                    //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;
                    //方式二,直接調(diào)用微信的接口方法
                    //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)
        {
        }
    }
}

參考文章如下:

四、獲取微信服務(wù)器IP地址

1. 淺談

  1. 如果公眾號基于安全等考慮,需要獲知微信服務(wù)器的IP地址列表,以便進(jìn)行相關(guān)限制,可以通過該接口獲得微信服務(wù)器IP地址列表或者IP網(wǎng)段信息。
  2. 由于出口IP及入口IP可能存在變動,建議用戶每天請求接口1次,以便于及時更新IP列表。為了避免造成單點故障,強(qiáng)烈建議用戶不要長期使用舊的IP列表作為api.weixin.qq.com的訪問入口。

2. 獲取微信API接口 IP地址

使用固定IP訪問api.weixin.qq.com時,請開發(fā)者注意運(yùn)營商適配,跨運(yùn)營商訪問可能會存在高峰期丟包問題。

image

API接口IP即api.weixin.qq.com的解析地址,由開發(fā)者調(diào)用微信側(cè)的接入IP接口調(diào)用請求說明。

http請求方式: GET
https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=ACCESS_TOKEN

參數(shù)說明

參數(shù) 是否必須 說明
access_token 公眾號的access_token

返回說明

正常情況下,微信會返回下述JSON數(shù)據(jù)包給公眾號:

{
    "ip_list":[
        "IP1",
        "IP2",
        "IP3",
        "IP4",
        ......
    ]
}

image

參數(shù)說明

錯誤時微信會返回錯誤碼等信息,JSON數(shù)據(jù)包示例如下(該示例為AppID無效錯誤):

{
    "errcode":40013,
    "errmsg":"invalid appid rid: 66dbb72e-7529f8ad-47f1afb9"
}

image

2. 獲取微信callback IP地址

請開發(fā)者確保防火墻、ddos攻擊白名單IP內(nèi)已添加回調(diào)IP,以避免誤攔截的情況出現(xiàn)。

callback IP即微信調(diào)用開發(fā)者服務(wù)器所使用的出口IP接口調(diào)用請求說明。

http請求方式: GET
https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN

參數(shù)說明

參數(shù) 是否必須 說明
access_token 公眾號的access_token

五、在線測試接口的地址

下面這個在線的測試接口的地址是微信公眾和小程序的官方測試使用的網(wǎng)址,相比上面的需要記住GET傳參的url,下面的在線的測試接口的地址更加方便,且功能點也全。

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

image

比如我之前挖edu找到的這個body請求包,里面有appid和appsecret參數(shù),那么就可以直接放到上面的在線網(wǎng)址使用了。

image

image

0x4 某EDU站點實測

一、信息收集+資產(chǎn)收集

針對于去找微信API接口相關(guān)APPid和appSecret泄露,然后可以成功獲取access_token值的目標(biāo)資產(chǎn),這里簡單給師傅們演示下使用FOFA進(jìn)行相關(guān)資產(chǎn)和目標(biāo)的檢索。

FOFA使用下面的檢索語法如下:

(body="appId"&& body="appSecret")&& body="access_token"

使用fofa檢索,可以看到可以匹配到127個獨立的IP,當(dāng)然這個語法不是固定的,師傅們可以去自己完善相關(guān)語法,有好的語法的師傅們也可以在評論區(qū)進(jìn)行相互交流學(xué)習(xí)。

image

然后在fofa里面找到了一個edu的站點,后面也是對該edu的站點進(jìn)行一個測試。

image

二、滲透測試

通過上面對fofa的測繪,然后找到的上面的這個edu的站點,像這樣的直接右擊網(wǎng)頁源代碼,然后在源代碼里面檢索appid參數(shù),可以看到下面的源代碼中找到了相關(guān)參數(shù)。

image

然后就是先獲取接口調(diào)用憑證(access_token)。

https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=[APPID]&secret=[APPSECRET]

使用上面的參數(shù)直接調(diào)用,發(fā)現(xiàn)顯示40164狀態(tài)碼,意思是調(diào)用接口的IP地址不在白名單中,那就說明這個appid存在,但是被限制了。

image

這個時候我就在想了,既然這個edu的站點存在appid和appSecret參數(shù)值泄露,且這個是微信小程序的相關(guān)API接口,那么有沒有可能這個學(xué)校的微信小程序可以找到別的appid參數(shù),且沒有做限制,畢竟不同的小程序,做的防護(hù)也不一樣。

我這里直接使用微信小程序去挨個找這個學(xué)校的微信小程序的接口,看看有沒有接口可以找到相關(guān)泄露appid和appSecret值的接口,然后去獲取access_token值。

image

后面在小程序拿到這個GET傳參的接口,/mobile/serve/wechat/getConfig,里面可以獲取到一個微信小程序的appid和appSecret值。

image

然后直接再次使用上面的獲取接口調(diào)用憑證(access_token)

https請求方式:GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=[APPID]&secret=[APPSECRET]
  1. 這里成功獲取到了access_token值。

image

  1. 下面就再嘗試使用剛才獲取到的access_token值,去獲取微信服務(wù)器IP地址
http請求方式: GET
https://api.weixin.qq.com/cgi-bin/get_api_domain_ip?access_token=ACCESS_TOKEN

image

參考文檔:https://developer.work.weixin.qq.com/document/path/92520

0x4 總結(jié)

這篇文章讀到這里就已經(jīng)結(jié)束了,希望上面的文章對師傅們有幫助。師傅們可以多去找找相關(guān)站點漏洞,然后去看看我寫的的相關(guān)傳參使用的接口,然后去試試能不能成功打出相關(guān)API漏洞的泄露。可以嘗試去微信小程序去找找相關(guān)的appid泄露值,然后去使用我們的傳參,然后先去獲取token值,然后再去利用微信開發(fā)者文章去獲取別的對于的泄露的敏感信息,其中還有一個在線的使用站點,上面的文章中也給師傅們了,那個使用起來比較方便。歡迎師傅們在評論區(qū)多交流學(xué)習(xí)!

文章中涉及的敏感信息均已做打碼處理,文章僅做經(jīng)驗分享用途,切勿當(dāng)真,未授權(quán)的攻擊屬于非法行為!文章中敏感信息均已做多層打碼處理。傳播、利用本文章所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負(fù)責(zé),作者不為此承擔(dān)任何責(zé)任,一旦造成后果請自行承擔(dān)。

申明:本公眾號所分享內(nèi)容僅用于網(wǎng)絡(luò)安全技術(shù)討論,切勿用于違法途徑,所有滲透都需獲取授權(quán),違者后果自行承擔(dān),與本號及作者無關(guān),請謹(jǐn)記守法。

image

歡迎加入星球一起交流,券后價僅40元!!!即將滿100人漲價長期更新,更多的0day/1day漏洞POC/EXP

原文轉(zhuǎn)載自:https://mp.weixin.qq.com/s/neunfzjm77Fo8StlLcYcZg

上一篇:

Azure API Management 與 ARM 模板的集成:實現(xiàn)基礎(chǔ)設(shè)施即代碼

下一篇:

C# .NET Core API 創(chuàng)建方法詳解|Entity Framework 多對多關(guān)系實戰(zhàn)
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊

多API并行試用

數(shù)據(jù)驅(qū)動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費