2018年8月12日 星期日

當 thc-hydra 遇到中文字( hydra 真的不認識中文字嗎?)

我在2014年寫了一篇「實例說明:利用 Hydra 暴力破解網站登入密碼」,得到許多網友青睞,給了諸多互動,也讓我有機會探索之前不曾注意的細節,在此向各位說聲謝謝
hydra是利用網頁回應的訊息來判斷是否成功登入,該篇博文只處理「純英文」情境,就算遇到中文訊息,也可以利用網頁的其他元素內容(如class="warn")應付,因此,從來沒有仔細思索hydra與中文訊息的關係。
但最近踢到鐵板了,某個產品的後台登入頁,在登入失敗時只回應中文訊息(見圖1),原本以為使用下列的句法可以進行暴力測試:
hydra -s 260 -l root -p root@password 待測的URL http-post-form "/cgi-bin/admin/sessmgr.cgi:user=^USER^&pwd=^PASS^&act=login&savepwd=1:登入失敗"
圖1
結果~~每一組 ID/Password 都成功(其實是誤判)!原來hydra不認識「登入失敗」這幾個字。上網找了很久,得到的答案是「hydra不支援多位元組字集(MBCS)」,但真的不支援嗎?我就是不死心。直接查看hydra的源碼,發現它是儲存在 char* 型別,心想「如果將中文拆成單一byte是不是就可以了呢?」果不其然,就是這樣
有關hydra的語法(用法)在此就不多說了,有需要的朋友請參考「實例說明:利用 Hydra 暴力破解網站登入密碼」。
直接介紹如何將中文拆成單一byte。
  1. 利用hydra -v -V -d 參數輸出詳細訊息,以便取得中文字的內碼:
    hydra -vVd -s 260 -l root -p root@password 待測的URL http-post-form "/cgi-bin/admin/sessmgr.cgi:user=^USER^&pwd=^PASS^&act=login&savepwd=1:登入失敗" > D:\tmp\nta_hydra1.txt
    這裡單純使用 -l -p 只測試一組帳密。 上面使用輸出重導向 > D:\tmp\nta_hydra1.txt 將訊息寫入文字檔,方便搜尋比較。
  2. 利用notepad++從輸出的文字檔中找到未登入前(使用GET取得登入頁),及hydra用POST送出登入請求後所回應的登入失敗,登入失敗時,頁面多出了「e799 bbe5 85a5 e5a4 b1e6 9597 efbc 8ce8 ab8b e987 8de6 96b0 e8bc b8e5 85a5 e5b8 b3e8 999f e5af 86e7 a2bc」(參考圖2),這一段恰好是「登入失敗,請重新輸入帳號密碼」的UTF-8編碼,其中前12Byte就是「登入失敗」
    圖2

  3. 因此,將上面句法改成下面的樣子就可以正常測試了:
    hydra -vVd -s 260 -L 帳號字典檔 -P 密碼字典檔 待測的URL http-post-form "/cgi-bin/admin/sessmgr.cgi:user=^USER^&pwd=^PASS^&act=login&savepwd=1:\xe7\x99\xbb\xe5\x85\xa5\xe5\xa4\xb1\xe6\x95\x97"
    hydra要以內碼方式輸入資料,只需在內碼前頭加上 \x 即可,例如 \xe7,所以將「登入失敗」以內碼表示就成了「\xe7\x99\xbb\xe5\x85\xa5\xe5\xa4\xb1」。
  • hydra可以利用Byte內碼方式指定MBCS文字,以後遇到中文網頁,不必再費心尋找獨特的網頁元素來代替中文字,直接用中文內碼就好了!
  • 由於直接使用內碼,所以面對英文、UTF-8或Big5的中文都可以處理,不必擔心內碼轉換問題。
PS1:這裡講「內碼」雖然不夠精準,但請您別挑剔了!
PS2:新版的thc-hydra-win可以從Github下載: https://github.com/maaaaz/thc-hydra-windows/releases

沒有留言:

張貼留言