如何用短信完成XSS?
Verizon Messages(Message+)是Verizon推出的一款開(kāi)放跨平臺(tái)信息交換應(yīng)用程序,它允許用戶(hù)在更多的無(wú)線(xiàn)設(shè)備中交換和共享信息。目前,該軟件客戶(hù)端支持跨平臺(tái)使用,包括移動(dòng)設(shè)備、桌面設(shè)備和Web端,并提升了VZW文字短信的用戶(hù)體驗(yàn)度。
Verizon的郵件信息服務(wù)是跨平臺(tái)的,此前只能夠通過(guò)采用電話(huà)撥號(hào)的方式進(jìn)行發(fā)送和接收,而新的應(yīng)用程序?qū)⒃试S用戶(hù)通過(guò)互聯(lián)網(wǎng)在更多的無(wú)線(xiàn)設(shè)備上接收消息,并允許用過(guò)通過(guò)計(jì)算機(jī)對(duì)郵件賬戶(hù)進(jìn)行管理。此外,跨平臺(tái)的統(tǒng)一消息的應(yīng)用程序可能有助于防止客戶(hù)移動(dòng)到其他網(wǎng)絡(luò),并與其他應(yīng)用程序如iMessage、黑莓信使和Skype開(kāi)展競(jìng)爭(zhēng),這也有助于提升Verizon的市場(chǎng)競(jìng)爭(zhēng)力。
但是這款應(yīng)用除了SMS短消息之外,還提供了一些其他的額外功能,而這些功能是我非常感興趣的。
在我安裝好了Android端App并完成注冊(cè)之后,我又登錄了Web端App并開(kāi)始使用這款應(yīng)用。使用了一段時(shí)間之后,我發(fā)現(xiàn)該應(yīng)用會(huì)通過(guò)Web端和移動(dòng)端的接口顯示包含鏈接的消息預(yù)覽通知。這些鏈接支持圖片和視頻等資源,但我更感興趣的是應(yīng)用將會(huì)如何解析這些鏈接。
我感覺(jué)從Web端App著手會(huì)比較容易一些,所以我自己給自己發(fā)送了一些測(cè)試鏈接。
這樣一來(lái)情況就很明朗了:Web端的HTML頁(yè)面就是負(fù)責(zé)解析這些鏈接的服務(wù)器端,解析完成之后便會(huì)返回URL地址的Open Graph屬性。下面給出的是響應(yīng)數(shù)據(jù)的部分內(nèi)容:
- {
- "webPreview":{
- "valid":true,
- "url":"http://money.cnn.com/2017/05/13/technology/ransomware-attack-nsa-microsoft/index.html",
- "title":"Ransomware: World reels from massive cyberattack",
- "description":"Organizations around the world were digging out Saturday from whatexperts are calling one of the biggest cyberattacks ever. ",
- "imageUrl":"/vma/web2/attachment/WebPreview.do?id=KDvS9ip4Afj6fPMTClAzqhegDyT9mSaM0zrQQfrBu8EbtJ0Xu_DyughZu53i-vOLkSeEpbLIk756f4o6igDFp0VHU5kVYFnJoeshsfy7eR3Q8XGwTY_rsu3FHEAAI4DJEmqYl7yBEqeWKSTYUnl48LRpXAokSGi1LWdWZqP0Bovl_EVMpdWB2JfnUz8Qxb0d&mdn=3026323617",
- "imageDim":{
- "width":420,
- "height":236
- }
- }
- }
正如你所看到的,響應(yīng)信息中包含UI界面預(yù)覽信息圖片所對(duì)應(yīng)的Open Graph屬性。請(qǐng)注意,上面的“imageUrl”實(shí)際上是Verizon的服務(wù)器所返回的代理圖片(并非來(lái)自外部服務(wù)器),而這種代理技術(shù)可以讓服務(wù)商更好地控制顯示在用戶(hù)瀏覽器中的圖片內(nèi)容。
由于預(yù)覽屬性“attachment”是異步獲取的(內(nèi)容呈現(xiàn)在客戶(hù)端),因此我決定在這里用DOMXSS攻擊向量嘗試一下,因?yàn)殚_(kāi)發(fā)人員有可能會(huì)忽略這個(gè)影響因素。接下來(lái),我又給自己發(fā)送了一些測(cè)試鏈接,這一次的鏈接中包含一些特殊字符,我想看一看這一次WebApp將如何處理和呈現(xiàn)這些內(nèi)容。我在測(cè)試鏈接的查詢(xún)字符串中插入了一些單引號(hào),此時(shí)我突然發(fā)現(xiàn)我貌似可以利用單引號(hào)來(lái)破壞上述錨點(diǎn)元素的href屬性。下面是一個(gè)簡(jiǎn)單的Payload示例:
- http://i.imgur.com/0wmSPiU.jpg?'onmouseover='alert(document.cookie)'style='position:fixed;top:0;left:0;width:100%;height:100%;'class='1'target='2
下面是網(wǎng)頁(yè)解析的結(jié)果:
通過(guò)讓錨點(diǎn)以?xún)?nèi)聯(lián)的形式強(qiáng)制覆蓋用戶(hù)的整個(gè)屏幕,我們可以利用“onmouseover”事件在打開(kāi)消息的一瞬間觸發(fā)代碼執(zhí)行:
這也就意味著,攻擊者可以利用一個(gè)精心制作的文字短信來(lái)控制目標(biāo)用戶(hù)的整個(gè)頁(yè)面,這將導(dǎo)致攻擊者完全控制用戶(hù)的會(huì)話(huà)以及所有相關(guān)的功能,包括偽造用戶(hù)身份發(fā)送和接收SMS消息。
因?yàn)槲业腜oC已經(jīng)可以正常工作了,所以我開(kāi)始分析應(yīng)用的javaScript源碼并嘗試找到導(dǎo)致該問(wèn)題出現(xiàn)的原因。
注意其中“href”屬性的值都被單引號(hào)包裹起來(lái)了,雖然現(xiàn)在也有幾種方法能夠解決這個(gè)問(wèn)題,但在這里最合適的方法應(yīng)該是使用DOMAPI。
- var a =document.createElement('a');
- a.setAttribute('href',g);
- a.innerText = b[f].original;
披露
我將PoC以及問(wèn)題的測(cè)試截圖/視頻發(fā)送給了Verizon,與往常一樣,Verizon的技術(shù)人員迅速給我提供了回復(fù),并感謝我將漏洞及時(shí)上報(bào)給他們,然后迅速修復(fù)了這個(gè)問(wèn)題。
更新
貌似Verizon最終還是選擇了使用DOM API來(lái)解決這個(gè)問(wèn)題。