手機瀏覽器直接喚起微信方案調研

原出處:http://wuwb.me/javascript

 

背景

雙十二前一天半夜,正準備睡覺,公司運營打電話過來,說發現第三方公司有頁面能夠訪問直接喚起微信。說完在公司的聊天工具裏發來一段鏈接,叫我調研一下能不能實現,若是能實現,雙十二立刻能夠用起來。php

分析

鏈接是個微博短鏈: http://t.cn/RTqAzl8。放瀏覽器裏訪問,解析出完整的地址:
http://r.jpwx.kim/wb/0e7d51958ac79557b5ecafc582ab62d0.html。打開調試器看了下,頁面中除了百度統計代碼外,核心代碼以下:html

 

[javascript]  view plain  copy
 
  1. if(!/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent) && / baiduboxapp/i.test(navigator.userAgent)){  
  2. window.location.replace('bdbox://utils?action=sendIntent&minver=7.4¶ms=%7B%22intent%22%3A%22weixin%3A%2F%2Fdl%2Fbusiness%2F%3Fticket%3Dt59a2235a3662135bfb0e8f7edccc22c5%23wechat_redirect%23wechat_redirect%23Intent%3Bend%22%7D');  
  3. }else{  
  4. window.location.replace('weixin://dl/business/?ticket=t59a2235a3662135bfb0e8f7edccc22c5#wechat_redirect#wechat_redirect');  
  5. }  
  6. setTimeout(function(){document.getElementById("loading").style.display="none";},3000);  



 

代碼的邏輯是,判斷不是蘋果的設備,而且訪問 UA 中包含 baiduboxapp 字符,修改頁面鏈接爲java

bdbox://utils?action=sendIntent&minver=7.4&params=%7B%22intent%22%3A%22weixin%3A%2F%2Fdl%2Fbusiness%2F%3Fticket%3Dt59a2235a3662135bfb0e8f7edccc22c5%23wechat_redirect%23wechat_redirect%23Intent%3Bend%22%7Dweb

不然修改頁面鏈接爲api

weixin://dl/business/?ticket=t59a2235a3662135bfb0e8f7edccc22c5#wechat_redirect#wechat_redirect瀏覽器

由於研究微信喚起,先不看 baiduboxapp,直接看微信喚起短鏈 weixin://dl/business,谷歌搜索下發現是微信第三方公衆號臨時會話接口。這是一個內部的隱藏接口。連接中看到短鏈有個 ticket 參數,多刷新幾回頁面,ticket 參數會發生變化,可是喚起頁面的鏈接沒有變。如今關鍵點成了怎麼根據本身的頁面生成合法的 ticket 參數。安全

在想怎麼生成 ticket 的時候,天然會想到微信是如何解析這個參數的,看看能不能從解析的邏輯中反推出生成的邏輯。服務器

找了客戶端的同事,反編譯安卓微信客戶端,發現客戶端裏的邏輯很簡單,拿到短鏈後,直接傳遞給微信服務器,服務器就返回了 真實的地址微信

https://open.weixin.qq.com/sns/webview?url=http%3A%2F%2Fun.m.jd.com%2Fcgi-bin%2Fapp%2Fappjmp%3Fto%3Dp.imtt.qq.com%252fh%253fd%253d7%2526b%253dtrade%2526type%253dsite%2526id%253d4061%2526u%253d%252568%252574%252574%252570%25253a%25252f%25252fvip.3.js.cn%252Fyyzs87.php%253Fticket%253D6148523063446f764c3364344c6d707764336775636d566b4c3364344c7a426c4e3251314d546b314f47466a4e7a6b314e5464694e57566a59575a6a4e546779595749324d6d51774c6d68306257772f644430784e54457a4d4451334d7a4d7a%2526from%253dshare%2526bid%253d13276%2526pid%253d1226104-1438221658%2526_wv%253d1027%2526sid%253dfavewofji%2526type%253d3%2526rnd%253d0.8738031948450953&appid=wxae3e8056daea8727&ts=1513047962&nonce=rjWsn6jYHv&sig=1c3d50cc9b948b2736398e1c1c66c32a&key=ad88abc27c4d295460ca3b05b7ed7a9a723ec81fbdb1e45386946920883a470f9b6e90cd75da4f05b8394a798f4b9446e673410a32c660224c93802cc47f427aa043de1c15cde5463ce4ad0ee5fecdd0&uin=MzY5MDEwNDExNQ%3D%3D&scene=0&version=26050839&pass_ticket=hKkz2FEs91MHFXEbW0vcmXwsfnKdDGqmvpQ1GG0cIYlqNFr5OcrssuH8DwD%2FSFmW

後面就是微信內置 webview 瀏覽器訪問這個地址,解析出最後的落地頁 http://uatv2.tcwx.i-mybest.com/qrimg/mmj2.html。

解析路基全在服務端,也沒能分析出什麼。看下解析出來的鏈接有什麼能夠分析的。從 https://open.weixin.qq.com/sns/webview***到 http://uatv2.tcwx.i-mybest.com/qrimg/mmj2.html中間調整了好幾回。

http://t.cn/RTqAzl8 -> 微博短鏈
http://r.jpwx.kim/wb/0e7d51958ac79557b5ecafc582ab62d0.html -> 生成長鏈接
weixin://dl/business/?ticket=*** -> 能夠經過京東開放平臺手 Q 喚起接口生成, http://jos.jd.com/api/list.htm?id=203
https://open.weixin.qq.com/sns/webview?url=*** -> 微信的域名,微信開發平臺,微信服務端生成
http://un.m.jd.com/cgi-bin/app/appjmp?to=*** -> 京東的域名,QQ 域名跳轉漏洞
http://p.imtt.qq.com/h?u=*** -> QQ 的域名 QQ任意跳轉漏洞,15年紕漏,實際上13年就已經存在的漏洞,低風險,至今沒有修復。。
http://vip.3.js.cn/yyzs87.php?*** -> 第三教室 老版本織夢 CMS 系統漏洞?
http://wx.jpwx.red/wx/**** -> 沒法訪問,開了域名WHOIS隱私服務,看不到信息,須要拿掃描器掃下看裏面可能有什麼,不過到前面一步,後面的已經不重要了
http://uatv2.tcwx.i-mybest.com -> 廣州麥優網絡科技有限公司 漏洞 艾客,廣州壹豆網絡科技有限公司,微信社羣營銷實效解決方案提供商

好了,這樣整個流程都通了。

本身拼一個鏈接測試一下,經過京東的鏈接跳轉到百度:http://un.m.jd.com/cgi-bin/app/appjmp?to=p.imtt.qq.com%2Fh%3Fd%3D7%26b%3Dtrade%26type%3Dsite%26id%3D4061%26u%3Dhttp%3A%2F%2Fwww.baidu.com

如今關鍵問題是京東開發平臺生成 weixin://dl/business/?ticket= 鏈接的時候有個白名單機制,嘗試了幾種鏈接,都沒法經過白名單驗證。

找了一個京東雲服務平臺的諮詢,獲得的答覆是喚起微信的接口,如今被人惡意調用,存在很大的安全風險,京東內部已經創建了白名單和黑名單的機制,打擊惡意調用行爲,不接受也不會透露白名單。

後續

前面搜索相關內容的時候還查到 51萬年曆,陌陌,招商銀行都有生成 weixin://dl/business/?ticket= 鏈接的服務。想到既然京東的接口是 手Q 給的,那 手Q 本身必然也有接口權限,而且應該會有其餘相似京東的合做客戶會有權限,像前面幾家公司。

後面運營又給了幾個鏈接,解析出來的地址是 http://app.game.qq.com 域名下的,確認了前面的猜測。

相關文章
相關標籤/搜索