實驗等級:
中級
任務場景:
【任務場景】
小王接到磐石公司的邀請,對其公司的伺服器進行滲透測試,當前需要對該伺服器運行的資料庫服務程序進行滲透測試,驗證當連接該伺服器的資料庫服務,登錄認證的時候,是否存在弱口令。
任務分析:
【任務分析】
在需要對該伺服器運行的資料庫服務程序進行滲透測試,驗證當連接該伺服器的資料庫服務,登錄認證的時候,是否存在弱口令,可以通過以下2個步驟:
1、通過工具或自行開發腳本的方式生成字典;
2、通過生成的字典對資料庫服務登錄認證是否存在弱口令進行驗證。
預備知識:
【預備知識】
在破解密碼或密鑰時,逐一嘗試用戶自定義詞典中的可能密碼(單詞或短語)的攻擊方式。與暴力破解的區別是,暴力破解會逐一嘗試所有可能的組合密碼,而字典式攻擊會使用一個預先定義好的單詞列表(可能的密碼)。
月黑風高之夜,一個小偷拿著從倉庫管理員那兒偷來的一串鑰匙,躲過崗哨摸到庫房,看著庫房大門掛著的大鎖,哪一把鑰匙才能打開門呢?顯然最直接的方法就是一把一把的試,直到打開為止,或者所有鑰匙都打不開,無功而返。
這件事兒對小偷來說略顯機械枯燥,而且時間拖久了還有被抓的危險。可這樣的重複勞動正適合計算機幹——對了,這種方法就是網絡安全領域裡「字典攻擊」的原型。
當黑客試圖進入目標系統時被告知需要提供口令,而他對此並不知曉(正如上面那位小偷並不確定鑰匙是哪一把),他可以採用這樣的方法:將收藏的備選口令集(這個口令集可能包含著成千上萬個備選口令)輸入到他的程序中,依次向目標系統發起認證請求,直到某一個口令可以通過認證——或者所有這些口令均無效,宣告此方法失敗並結束本次入侵行為(或者繼續查找系統有無別的弱點)。
分析上文的場景,實施一次字典攻擊需要具備兩個要素:
1. 黑客了解認證方式(包括認證協議以及地址、埠等信息),如同小偷需要知道庫房在哪兒,房門掛著的是大銅鎖還是密碼鎖,甚至虹膜、指紋識別?拿著一串金屬鑰匙想打開生指紋識別鎖顯然不現實。
2. 黑客擁有比較全面的口令集,包含著各類常見的弱口令,或者目標系統經常出現的組合口令,或者目標系統曾經洩露的口令集。這樣才有更多的嘗試機會。通常一次字典攻擊的實施還是很耗費時間的,特別是目標系統的口令不那麼常見。P086-Python安全滲透測試-利用Python實現字典攻擊滲透測試
任務實施:
P086-Python安全滲透測試-利用Python實現字典攻擊滲透測試
實驗環境說明:
滲透機:p10_bt5-7-1(BT5)用戶名:root 密碼:123456
靶 機:p10_win2003-7-1(Windows 2003)用戶名:administrator 密碼:123456
第一步,打開網絡拓撲,啟動實驗虛擬機,分別查看虛擬機IP位址:
BT5
Windows 2003
第二步,通過工具或自行開發腳本的方式生成字典
a、通過superdic工具生成字典,選擇字典中需要的字符
b、通過superdic工具生成字典,選擇密碼的長度
c、自行開發腳本的方式生成字典,以6位密碼,包含『3』『6』『9』三個字符的字典為例
第三步,通過Python腳本語言自行開發滲透測試工具,實現對資料庫服務登錄認證是否存在弱口令進行驗證,首先導入必要的Python模塊
第四步,定義全局變量Found = 0
第五步,定義函數mssqlconn,該函數的作用為嘗試連接伺服器的SQL服務
關於pymssql模塊的使用方法如下:
conn = pymssql.connect(server, user, password, database)
# server 資料庫伺服器名稱或IP
# user 用戶名
# password 密碼
# database 資料庫名稱
第六步,定義main函數,該函數的作用為參數解析以及調用函數mssqlconn
第七步,定義main函數執行的條件,確保main函數僅在模塊__main__當中執行
第八步,執行腳本,如果存在SQL服務登錄認證弱口令,則獲取SQL伺服器SA帳號登錄密碼