自動化獲得微軟漏洞賞金的經歷
時間在2020年,當時使用xray,發現它的的反射型xss掃描很好用,于是想知道原理,好奇探索了下大概的xss掃描規則。在xss掃描器成長記.md https://x.hacking8.com/post-371.html有講述,
xray會先發送一個隨機字符串,根據在html/js中反射的位置構造一個無害的payload,判斷payload在標簽中的位置,就能判斷出是否存在反射xss,后面驗證的payload自行去構造就好了。
xray沒開源,我就自己寫一個了,然后加了一個爬蟲,自己爬自己掃,通過爬蟲的數據,發現很多地方還有可以優化的地方,又看了一些公開的xss的報告,把很多奇葩條件下的xss掃描規則都加了進去。當時自己的機器都是2H1G的小機器,想提高效率,于是學習用分布式,但是又由此帶來了很多第三方的數據庫,隊列什么的,更加壓迫了我機器的性能..做了這么多,成果也很喜人,各大src,微軟都有,運氣好也獲得了微軟1000多刀的賞金。
xss掃描器經歷
基于語義檢查反射xss這部分代碼其實早已在w13scan上公開了:https://github.com/w-digital-scanner/w13scan/blob/master/W13SCAN/scanners/PerFile/xss.py
檢測流程:
- 將參數變為隨機數,探測隨機數是否回顯

- 判斷可否xss,content-type是否是html

- 再次根據GET,POST,COOKIE進行請求,確定參數的回顯位置
- 如果語義分析不到回顯的位置,可以直接構造一個xss,看是否存在即可

- 語義分析得到位置,根據不同位置生成不同的payload,并進行二次探測最終確認xss是否存在
不過公開的是第一版的代碼,后面我又對代碼進行過多次整改,適配了很多種情況。
- js文本內容轉義
var s1="1\"
- 回顯內容在注釋里,可使用換行進行bypass
- 多個反射點特殊構造bypass
- https://brutelogic.com.br/blog/multi-reflection-xss/
- 針對大量回顯參數進行優化,之前是發現一個回顯參數就請求測試一次,但是一個頁面如果有大量回顯的情況,會發送很多無用包。
- 如果有多個輸出點并且在同一行,js中 反斜杠\未被轉義 就能被賦予意義。

- 一些可以輸出替換的點

等等..
工程化經歷
xss掃描器完畢后,加上爬蟲,一個簡單的流程圖如下

給后端添加bugbounty的目標域名,整個系統就能自己轉起來,自動搜索子域名,自動爬蟲,自動xss掃描,自動檢測更新。
技術棧主要用的是python,現在總結起來的構成有以下,使用到的技術:
域名收集
- https://github.com/projectdiscovery/subfinder
域名爆破+驗證
- https://github.com/boy-hack/ksubdomain
爬蟲
- https://github.com/0Kee-Team/crawlergo
后端:
- django+mongodb
分布式:
- celery
- celery狀態監控:flower
- 消息隊列:rabbit MQ
容器化
- docker
自動發布
- fabric
進程監控
- supervisor
demo階段后端一開始用的是leancloud服務,直接把掃到的數據存里面

后面覺得成果不錯,就開始用自己的數據庫了。
界面和成果
當時做了簡單的界面,填寫src的地址等等就可以自動監控,成果也很喜人,基本上很多src的都檢測到了。

「子域名搜索」

「漏洞頁面」
會把xss的類型和測試payload展示,方便知道是哪些方法找到xss的

「漏洞詳情」
把請求包詳情展示,包括發送包,因為有時候復現不出來,大概率是和請求頭某些參數有關系。


一些成果

微軟賞金經歷
當時分布式都是用的國內機器,掃國外的很多都超時,所以就選了微軟一家,國內訪問速度還可以。當時沒想很多,就把微軟幾個官方域名加了進去,讓它自己去爆破自己去掃,還是有不少的,重點是一個月全部大更新一次再去掃,都有不一樣的東西。
提交漏洞的記錄:

找到微軟的網站漏洞,提交后它會在每月在線服務致謝中展示(xss也算噢)

它也定義了有賞金的網站,網站在這里會得到賞金。(我發現了好幾個微軟主戰的xss,但都沒賞金..)
- www.office.com - protection.office.com - onedrive.live.com - onedrive.com - portal.azure.com - manage.windowsazure.com - azure.microsoft.com/en-us/blog - portal.office.com - outlook.office365.com - outlook.office.com - outlook.live.com - outlook.com - sharepoint.com - lync.com - officeapps.live.com - www.yammer.com - sway.com - sway.office.com - tasks.office.com - teams.microsoft.com - asm.skype.com - msg.skype.com - skyapi.live.net - skype.com - storage.live.com - apis.live.net - settings.live.net - policies.live.net - join.microsoft.com
后面按部就班的提交給微軟咯,有一個域名我當時還不知道有賞金,就當普通的提交了,后面微軟給我發來了賞金計劃通知。一個xss獎勵了1200美刀。

Ps :后面我還想憑著xss沖一沖微軟最有價值的研究者,因為平均提交三個漏洞就能進入了,我提交了6個,但是后面發現它的機制是平均報告的volume或分數要超過同比的50%,xss分數少,可能就沒過吧。。
為啥不做了
國內當時刷了一圈xss,但賞金都特別小,想刷國外,但就得把系統在國外vps部署一套,分布式的隊列也得放到國外,它連國內的隊列基本都超時,也覺得xss漏洞還是挺小,還是 反射xss,沒有rce來的有成就感。后面做別的事情就忘了繼續這個項目了。
現在還想做
還沒有用這個技術刷國外的src是個遺憾,現在我也在構思自己的src平臺,想把這個重新拾起,并且現在crawlergo也開源了,我可以做更多事情,比如直接在瀏覽器層面注入js來檢測dom-xss等等,把爬蟲的數據存下來,可以像google語法那樣搜自己想要的東西。現在也可以買一些性能好的服務器,不用像以前拼命優化算法壓榨自己的主機,連起個redis都要糾結好一會。