使用Burpsuite擴展Hackvertor繞過WAF並解密XOR
前言
最近,我一直在忙於開發自己的一個Burp擴展Hackvertor。這是一個具有基於標籤轉換功能的編碼器,相比起Burp內置的解碼器它的功能要強大的多。通過標籤的轉換編碼,可以讓你輕鬆的將編碼後的內容傳遞給下一個外部標籤,從而執行多級編碼操作。
例如,要將字元串編碼為base64,只需使用base64標籤:
<@base64_0>test<@/base64_0>
你也可以進行多級編碼,例如你想將字元串轉換為十六進位,然後對其進行base64編碼。只需先使用hex標籤,然後再使用base64標籤即可完成:
<@base64_1><@hex_0(" ")>test<@/hex_0><@/base64_1>
hex標籤有一個分隔符參數,用於分隔各個十六進位字元串 - 「test」將被作為分隔符和空格傳遞給標籤函數。
Hackvertor 使用
當Hackvertor被成功載入後,會在Burp中創建一個名為Hackvertor的新Tab。Hackvertor中有一個輸入框和一個輸出框,你只需輸入要轉換的文本並單擊選擇相應的轉換標籤,轉換結果就會出現在輸出框中。
繞過 Cloudflare WAF
最近,我又改進了Hackvertor,以讓其支持在repeater等工具的實際請求中使用。你只需右鍵單擊repeater request,並選擇Hackvertor菜單在請求中添加標籤,在發送請求之前它將自動進行轉換。你也可以在Intruder中使用它們,首先在repeater中定義它們然後再將它們發送到Intruder。你甚至還可以在proxy中使用它們,但默認情況下是關閉的。如果你想要打開它,可以在Burp主菜單中選擇Hackvertor菜單,然後單擊「Allow tags in Proxy」即可。
下面,我將為大家演示如何在repeater中使用標籤來繞過Cloudflare WAF。我們將以下網址發送給repeater:https://waf.party/xss/xss.php?x=
並在等號後輸入以下代碼:
<img/src/onerror=alert(1)>
在repeater request中選中alert(1),然後啟用Hackvertor BApp,右鍵單擊所選文本,然後單擊Hackvertor,XSS,以及throw_eval。這會將標籤添加到請求中,現在你點擊go按鈕,將會看到響應包含:
<img/src/onerror=window.onerror=eval;throw"=alertx281x29">
如果你想檢查它的實際工作情況,只需要右鍵單擊request editor並從上下文菜單和複製URL中選擇Hackvertor,這將在轉換所有標籤後生成一個URL。如果你使用Burp的複製URL複製命令,那麼它僅會複製帶有標籤的URL。
rotN 解碼
這個問題源於我可愛的女兒,自2016年以來我時常會穿著那件我最喜愛的BSides ManchesterT恤,在這件T恤的正面印有一大串密密麻麻的二進位數字,每當女兒看到這些數字的時候她都會問我:」爸爸這些數字是什麼意思?」。我通常會告訴她這是二進位數字,並詢問她是否要解碼它們。然後,我會帶著她開始在Hackvertor中輸入這些數字進行解碼。解碼後我發現這是一個base64編碼的字元串,看起來像是一個經過rot編碼的字元串。我們對rot編碼的字元串進行了爆破,並對消息進行了解碼。但這引發了我的思考,是否可以讓Hackvertor自動解碼rot編碼的字元串。
想要實現這個功能,Hackvertor就需要能夠從隨機混亂的組合字元中識別類似英語的單詞。為此,我創建了一個is_like_english標籤。起初,我以為只要使用bigrams(二元語法)和trigrams(三元語法)就可以輕鬆做到這點,但我發現這並沒有我想像的那麼簡單。我開始在谷歌上搜索解決方案,經過一番搜索我找到了一個非常棒的網站,他們使用quadgrams(四元語法)來識別英語單詞。此外,該網站還提供了一些 簡單的python代碼,它們會根據對單詞和quadgrams的分析生成得分。我用Java重寫了這些代碼,並在Hackvertor中實現了它。
下一步要做的是改進自動解碼器。自動解碼器就是一個標籤,可自動嘗試確定字元串的編碼方式並對其進行多次解碼。我添加了一個簡單的正則表達式,用於查找一個或多個a-z的字元,後面跟空格,逗號或連字元。然後循環25次爆破rot編碼的字元串,並得到相應的分數。之後再根據得分計算它們的平均值,如果最佳分大於平均值加二十,那麼它將自動解碼rot編碼的字元串。放心,我是不會告訴你們答案的,想知道的話就自己動手操作一遍。
<@auto_decode_0>01010111 01101101 00110101 01101000 01100011 01001000 01010110 01111001 01011010 01101101 01100100 01111001 01011010 01010011 01000010 01000111 01100101 01101101 00110101 00110101 01100101 01010011 00110001 01000111 01100011 01000111 00110101 00110101 01100011 01101001 01000010 01010011 01100001 00110010 01001110 01111001 01011010 01011000 01011010 00110110 01100011 01101101 01000110 01101110 01100010 01101110 01101011 01100111 01010111 01101101 00110101 01110111 01100100 01011000 01011010 01101000 01100011 01100111 00111101 00111101<@/auto_decode_0>
下面是另一件T恤上的二進位字元串,想要知道答案同樣需要你自己動手。
<@auto_decode_10>01011010 01101110 01100001 01110000 01110101 01110010 01100110 01100111 01110010 01100101 00101100 00100000 01100110 01100010 00100000 01111010 01101000 01110000 01110101 00100000 01100111 01100010 00100000 01101110 01100001 01100110 01101010 01110010 01100101 00100000 01110011 01100010 01100101<@/auto_decode_10>
解密 XOR repeating key 加密
為了完成James向我發起的解密repeating XOR加密的挑戰,我在知名密碼學站點Practical cryptography學習了所有關於XOR和頻率分析的知識。第一步是確定key的長度,你可以為各個候選鍵使用頻率分析來確定。這裡我使用30作為最大猜測key長度。我將每個字元都存儲在了頻率表中,並每次當它們出現在密文中時遞增它們。當你擁有所有頻率時,你就可以計算出每個列和頻率的重合因子(或漢明距離)。
我花了大量的時間嘗試提高key猜測的準確性,並多次重寫了相關代碼。在trusted signal blog的這篇文章中提到,可以通過使用前5-6個候選鍵的最大公分母來提高準確性確定key長度。但在我的測試中,我無法做到這點。無論如何,一旦你獲取到了key長度,你只需循環遍歷密文和每個字元並進行xor加密,然後根據字元結果為其分配一個分數。這裡我要感謝Alexey Hellman,我的大部分代碼都是基於他的xortool實現的。
最後,使用我的is_like_english函數來確定文本的分數。這僅適用於小文本,對於大文本是無效的。這是因為文本越大,得到的ngram分數就越低。因此我將固定值更改為平均值之間的差異百分比,這樣一來無論密文長度是多少都將可以正常執行。但如果密文過小,XOR解密同樣將失敗,這是因為沒有足夠的密文來執行頻率分析,無法確定解密的每個字元的key長度和分數導致的。如果你有更好的解決辦法,請隨時向我提交pull request。
以下是一個演示示例,我xor加密了一個key,然後對其進行了hex編碼。粘貼到輸入框後,Hackvertor將自動解碼十六進位,猜測key長度,然後自動解密XOR加密。
<@auto_decode_8>1C090C1E05041C101C523D296324212F000D020C04061D001C216F36383668231619064521010606376F3724732E080D0F561617171A003B3B3A6B3630110C18031717074F1037292C39366808174C0545061B00523E2E372E7D68231A4B03161B1A0852313A373F3A26064E0E120217541C1133212D223D2F41170E150D1C1B031D35366F6B2A27144308170B521D0B173C3B2A2D2A68150B0E5613170616523E2E372E203C41151E1A0B17060E103B232A3F3A2D124D4B391000541D17212A22393020041118560300111E07372137272A68140D08191317064F10202E2D2F732604144B00101E1A0A00332D2A273A3C1843081A0401070A01723B2B2A276823161906451B074F063A2A632D3A3A12174B020A52060A023D3D3765<@/auto_decode_8>
*參考來源:portswigger
,
FB小編secist編譯,轉載請註明來自FreeBuf.COM
※安全沒有邊界 | ISC 2018互聯網安全大會Day 3報道
※2018撞庫攻擊現狀:不到一年出現數百億登錄嘗試
TAG:FreeBuf |