Hydra源碼分析學習

Hydra源碼學習

由於工作需要,閱讀了hydra的源碼,現整理一下,方便後期翻閱學習

  • Hydra的簡介及用法
    關於hydra的簡介及用法,網上有很多的資料,本次便不在贅述

  • Hydra中需要知道的幾個點

  • 1、 密碼、用戶名存儲格式
    Hydra的使用可以直接讀取用戶名錶和密碼錶,讀出數據後,每個地段中間使用’\0’進行切割,故使用printf和string.h的函數在此地不可用。
    例如:
    User表是

root
asdf
123asd

則在內存中的存儲字段爲

 Root\0asdf\0123asd

密碼錶同理。因爲鍵盤上凡是能出現的字母和符號均有可能是密碼的一部分。故使用\0進行切割,是種聰明的做法。

  • *2、 服務之間的通信機制
    對某個服務進行密碼破解時,是使用fork進程,並且創建了兩個互相通信的套接字,
    這裏寫圖片描述
    Socketpair函數是創建一對相互連接的套接字,用於本機內的進程通信。
    在子進行中開啓密碼破解服務,父進程中進行數據的接收處理。

  • 3、 用戶名、密碼的傳遞
    上面說了父子進程的作用,在子進程中獲取用戶名和密碼也是通過套接字進行數據的獲取。
    由於不只是一個進程,會存在最多32個父子程同時處理,父子進程在用戶名密碼這塊的處理使用的是一個數組
    這裏寫圖片描述
    即從套接字中獲取一對用戶名和密碼存儲在pair數組中。
    格式爲\0隔開。即root\0123456.
    在截取時,使用while循環,遇到\0結束

  • 4、 父進程的數據接收處理
    父進程使用select進行數據的接收處理,雖然select效率不如epoll高,但是考慮到最多也就32個進程。使用select萬全能夠勝任
    這裏寫圖片描述
    從子進程收到的數據,之後再分別進行處理

  • 5、 服務的密碼破解
    這部分在子進程中進行,邏輯很簡單。首先對服務的ip和port進行tcp連接,有-s參數的,會使用ssl進行連接,該處有兩個作用。1、是爲了檢測該服務是否存在或者是否正在運行中,2、針對於部分服務需要使用該套接字進行數據會話。

對於postgres和mysql這類有現成api的服務。直接使用api進行連接。成功時代表用戶名密碼正確,失敗代表不正確。

對於telnet、ftp這類的服務。使用的是數據交換的方式,將用戶名密碼封裝爲特定格式數據通過之前的套接字進行發送,然後接收返回信息。根據返回信息進行結果的判斷。

http://blog.csdn.net/libinbin_1014/article/details/52640466

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章