2013-05-17 187 views
0

我目前正在建設一個客戶Authenication包,而無需使用任何庫只是爲了瞭解該協議真的,我送我的計算驗證數據包時,由接入混淆拒絕回答MySQL服務器。 Mysql服務器只是一臺運行在我的計算機上的本地服務器,用於測試目的。這裏是我發送的信息:MySQL協議客戶端/服務器Authenication - 令牌生成從客戶端

測試密碼是'花生'。

階段1個散列 = b14ab480028768cb748fd97de56144a304eb8a1a

階段2哈希 = fd62797ed464c2843942a9167cc0521779d68862 - 這是正確的,但沒有在數據庫中的*。

鹽&階段2哈希 = RC8/$一個VR \ W |?.jN)〜cVcfd62797ed464c2843942a9167cc0521779d68862

SHA1(鹽+ 2階段散列)XOR階段1個散列 = 4B19199ECEB929469EA89C0E942D8D5B9ACBE237

字符串發送到服務器進行驗證,以十六進制:

\ X3A \ X00 \ X00 \ X01 - 斯坦DARD報頭(有效負載長度/序列號)

\ X02 \ X04 \ X80 \ X00 - 兼容性標誌

\ X00 \ X00 \ X00 \ X01 - 最大數據包大小

\ X08 - 字符集

\ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ x00 \ x00 \ x00 - 23字節填充符

\ X72 \ x6F \ x6F \ X74 \ X00 - 用戶名零終止

\ X14 - 標記的長度(20個字節)

\ X4B \ X19 \ X19 \ x9E \ XCE \ xB9 \ X29 \ X46 \ x9E \ xA8 \ x9C \ x0E \ X94 \ X2D \ x8D \ x5B \ x9A \ XCB \ XE2 \ X37 - 令牌

當我把這個字符串,服務器剛剛送出#28000訪問被拒絕的錯誤。

這可能是一個訪問權限問題?試圖獲得root訪問權限的遠程用戶,是否需要啓用?

我已經改變WAIT_TIMEOUT/connect_timeout等,並仍然沒有喜悅,這些被設置成60秒]連接超時設置。

我不確定是否應該用星號或不用來計算SHA1(Salt + Stage 2 Hash),就像在數據庫中顯示密碼之前的*一樣。我已經嘗試了兩種方式,但它仍然沒有驗證。

我現在已經沒有想法了,唯一能做的另一件事就是編寫另一個程序來處理客戶端令牌作爲Mysql服務器,但我想我會首先仔細檢查這裏。

我一直在這個工作了一段時間,很難過。

任何幫助非常感謝。我通常不會在論壇發帖,所以它是一種新的體驗,如果我沒有遵守禮節,我會很抱歉。

問候

詹姆斯

回答

0

沒有尋找到的協議文檔自己很難在這裏看到的任何錯誤。它可以是從排序到錯誤的填充,長度和其他計算等任何事情。服務器沒有提供有關登錄失敗原因的更多細節,因爲這會將信息泄露給潛在的攻擊者。

我建議你抓住MySQL源代碼,看看他們是如何在他們的命令行應用程序中執行的。有關一些介紹和下載鏈接,請參閱http://dev.mysql.com/doc/internals/en/guided-tour.html

除此之外,總是有使用Wireshark記錄網絡流量的選項,以查看股票mysql客戶端發送的內容,並將其與您擁有的內容進行比較。這可能有助於找出填充等。 請注意,如果您在Windows上工作,則可能會在本地主機上捕獲流量時出現問題,因爲IIRC Windows以某種方式快速切換流量,所以它無法通過Wireshark的網絡接口查看。在這種情況下,您可能需要在虛擬機或其他機器上設置MySQL服務器。

+0

好的,謝謝你的快速回復。查看源代碼是我的下一個端口,以模仿auth過程。所以我想我會從那裏開始。請注意:我仍然接受其他建議。 – user2393236

+0

我認爲我發送的關於填充等是正確的,因爲它基本上取自內部網站,請參閱下面的內容:http://dev.mysql.com/doc/internals/en/protocol-examples.html – user2393236

+0

它看起來像儘管它已經被Mysql嗅探併發布在他們的網站上。問題是使用新的auth方法創建的令牌,我不知道我是否正確生成它。我正在下載源文件。順便說一下,該網站參考。位於頂部,第二個客戶端 - >服務器響應。 – user2393236