作者:bsmali4
xssfork簡介
xssfork 作為 sicklescan 的一個功能模塊,其開發主要目的是用于檢測 xss 漏洞。
傳統的 xss 探測工具,一般都是采用 payload in response 的方式,即在發送一次帶有 payload 的 http 請求后,通過檢測響應包中 payload 的完整性來判斷,這種方式缺陷,很多。
第一:不能準確地檢測 dom 類 xss
第二:用類似于 requests 之類的庫不能真正的模擬瀏覽器
第三:網頁 js 無法交互
怎么解決?如果能夠用瀏覽器代替這個模塊,去自動hook是最好的。所幸,我了解到 phantomjs,當然現在 google 瀏覽器也支持 headless 模式,類似的,你也可以采用 google 瀏覽器去做檢測。
原理
對于這類 fuzz 過程,基本都是預先準備好一些 payload,然后加載執行。對于這類 io 型密集的掃描模型,后端使用多線程就比較適用,但是由于 phantomjs 你可以理解為一個無界面的瀏覽器,在加載的時候,其缺陷也比較明顯,比較吃內存,用它來發包自然不像 requests 庫輕量。
編碼腳本
由于基礎的 payload 模塊,我收集了71個。

基礎 payload 會在現有的基礎上,會添加上各種閉合的情況。

除了這些基礎的 payload,xssfork 還提供了幾個編碼腳本,查看腳本,可以看 help

現階段提供了10進制,16進制,隨機大小寫,關鍵字疊加四個腳本。
10hex_encode
將 html 標簽內部字符10進制化
<a href=javascript:alert(65534);>aaa</a>

其效果如下

16hex_encode
將 html 標簽內部字符16進制化
uppercase
隨機大小寫將 <script>alert(65534);</script> 轉換成 <ScRIPt>alert(65534);</ScRIpT>
addkeywords
主要是應對過濾為 replace('keyword>s','') 的情況,<script>alert(65534);</script> 變成 <<script>script>alert(65534);</script>當然默認開啟的是輕量模式,即只返回一個payload,開啟重量模式,可以生成更加豐富的pyaload,效果如下
<script>alert(65534);</script>
<script>alert(65534);</ScrIpt>
<ScrIpt>alert(65534);</sCrIpt>
<scRiPt>alert(65534);</script>
<ScrIpt>alert(65534);</script>
演示
場景1.反射型xss

場景2.大小寫繞過

場景3.dom型xss

場景3.post類型

場景4.需要驗證cookie

post類型
python xssfork.py -u "xx" -d "xx"
存儲型
python xssfork.py -u "xx" -d "xxx" -D "輸出位置"
帶cookie
python xssfork.py -u "xx" -c "xx"
說明
開源只為分享,請勿將本腳本做任何商業性質的集成。開發的時候,有可能很多情況沒有考慮到,如果你有更好的建議或者發現bug,可以聯系我郵箱root@codersec.net ,xssfork.codersec.net網站還在建設中,github不要吝嗇你的star。
開源地址 https://github.com/bsmali4/xssfork ,記得不要吝嗇你的star
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/359/