Python攻防之弱口令、自定義字典生成及網站暴庫防護!

第十五篇第八張黑底程序圖出現了錯誤更正為:

自幼受貴州大山的薰陶,養成了誠實質樸的性格。經過寒窗苦讀,考入BIT,為完成自己的教師夢,放棄IT、航天等工作,成為貴財一名大學教師,並想把自己所學所感真心傳授給自己的學生,幫助更多陌生人。

一.基礎概念

1.暴力破解法

暴力破解法又稱為窮舉法,是一種針對密碼的破譯方法。暴力破解被認為是打開系統或網站最直接、最簡單的攻擊之一,而且由於弱密碼一直存在,攻擊者樂此不彼。破解任何一個密碼也都只是時間問題,密碼越複雜時間越漫長。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

2.Web賬號和口令

字典是按照特定組合方式生成包含很多密碼的字典文件,包括字符型、數字型、組合型等,Web賬號常見口令如admin、test、guest、administrator、666666、123456等。通常管理員會選擇容易記住的口令好,這會造成賬號和口令被暴力破解;而且密碼會存在一些規則,比如長度 、字符要求等,這也會造成一些組合的洩露。

密碼通常是以常見密碼為母本,結合密碼組合規則生成。假設網站域名為 http://demo.study.com,可能的密碼組合方式包括:demo、study、demo123、demoadmin、demo@admin、study123、study666等等,接著再使用BP進行暴力破解。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

3.暴庫

指通過一些技術手段或者程序漏洞得到數據庫的地址,並將數據非法下載到本地。黑客非常樂意於這種工作,為什麼呢?因為黑客在得到網站數據庫後,就能得到網站管理賬號,對網站進行破壞與管理,他們也能通過數據庫得到網站用戶的隱私信息,甚至得到服務器的最高權限。

網站後臺管理入口常用的關鍵字包括:admin.asp、manage.asp、login.asp、conn.asp等,可以通過網站圖片屬性、網站鏈接、網站管理系統(CMS)、robots.txt文件進行查找,包括谷歌瀏覽器的搜索語法:“inurl: asp?id=”、“intitle:後臺管理”;也可以通過wwwscan、御劍、阿D注入工具等查找。

4.Google hacker

Google提供了強大的搜索功能,可以獲取精準的結果。如果訪問不了,也可以通過百度獲取相關內容,但是結果遠沒有谷歌精準。常見方法如下:

intitle:eastmount

搜索網頁標題包含eastmount字符的網頁。

inurl:cbi

搜索包含特定字符cbi的URL。

intext:cbi

搜索網頁正文內容包含特定字符cbi的網頁。

filetype:ppt

搜索制定類型的文件,返回所有以ppt結尾的文件URL。

site

找到與指定網站有聯繫的URL。常用示例:inurl:login.asp、inurl:asp?id=、inurl:login.asp intilte:貴州,如下圖所示查詢後臺登錄頁面。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

5.弱口令(weak password)

通常認為容易被別人猜測到或被破解工具破解的口令均為弱口令。弱口令指的是僅包含簡單數字和字母的口令,例如“123”、“abc”等,因為這樣的口令很容易被別人破解,從而使用戶的計算機面臨風險,因此不推薦用戶使用。

常見弱口令有:

數字或字母連排或混排,鍵盤字母連排(如:123456,abcdef,123abc,qwerty,1qaz2wsx等);

生日,姓名+生日(利用社工非常容易被破解);

短語密碼(如:5201314,woaini1314等)。

下圖引用至freebuf網站,它是2015年公佈過最弱密碼排行榜(此網站要求密碼6-18位),同時也推薦讀者學習下面兩篇文章。

安全科普:淺談弱口令的危害 - freebuf 深信服實驗室

使用Kettle模型清洗全國弱口令Top 1000 - freebuf 水熊科技

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

弱口令很容易被他人猜到或破解 ,所以如果你使用弱口令,就像把家門鑰匙放在家門口的墊子下面,這種行為是非常危險的。深信服實驗室給出瞭如下的安全建議:

針對管理人員,應強制其賬號密碼強度必須達到一定的級別;

建議密碼長度不少於8位,且密碼中至少包含數字、字母和符號;

不同網站應使用不同的密碼,以免遭受“撞庫攻擊”;

避免使用生日,姓名等信息做密碼,遠離社工危害。

二.Python調用exrex庫生成密碼

下面簡單介紹Python調用exrex庫生成密碼。exrex是一個命令行工具和python模塊,它生成與給定正則表達式等匹配的所有或隨機字符串。具有以下特徵:

生成所有匹配的字符串

生成隨機匹配字符串

計算匹配字符串的數量

簡化正則表達式

其安裝方法直接調用“pip install exrex”指令即可,如下圖所示。

https://github.com/asciimoo/exrex

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

下面是exrex庫的一個入門代碼。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

它的輸出結果如下圖所示,最重要的是通過 exrex.generate(’[Pp][a@]ssw[Oo]rd’) 組合密碼。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

exrex庫是對re.DEBUG模式下進行的歸類和分析,從而匹配內容,其原理相當於下面這個代碼。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

輸出結果如下圖所示,literal 97 對應的ascii碼的“a”字母,接著匹配字母“b”。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

三.高精度字典生成

假設存在一個網站(https://demo.eastmount.com/),它的字典可能是由demo和eastmount組合而成,下面我們編寫一個代碼對它的密碼進行組合。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

本地定義了一個 pass.txt 文件夾,用於存放常見的密碼。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

通過上面代碼組合生成如下的密碼,可以看到它由demo、eastmount和我們自定義的詞典組成。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

但是,未來修改密碼比較繁瑣,我們希望將核心的生產規則寫入配置文件,為後期使用提供方便,所以接下來我們創建一個 rule.ini 文件,其內容如下所示。其中,# 表示註釋,提示這算是一個字典文件,而最重要的一行代碼是我們的生成字典規則。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

接著我們繼續補充上面代碼,讀取文件分析該規則(|{dic})(|#|@)(|{pwd})(|#|@)(|201[6789]),它是由dic、特殊字符、pwd和年份組成的。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

輸出結果如下所示:

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

四.Selenium實現網站暴力登錄

接下來作者將講述一個Python調用Selenium自動化爬蟲庫實現某網站暴力登錄的案例。為了第五部分BurpSuite工具使用方便,這裡尋找的目標網站為HTTP類型。假設通過社會工程學方法獲取了某用戶名,如yangxiuzhang,這裡需要暴力獲取它密碼,實現登錄。

注意:很多高校和政務網站系統都存在弱口令漏洞,通過工號、學號結合常見密碼很容易進行暴力獲取。所以建議大家的密碼儘量複雜,而且不要一個密碼所有網站通用。

1.生成密碼

假設某網站的密碼由三部分組成——字母、數字、下劃線,如下圖所示(社會工程學探索密碼信息)。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

這裡作者的密碼設置為 Yxz123456_,則暴力獲取密碼的構造方法為:

1.構建常用弱口令密碼:[‘123456’, ‘111111’, ‘666666’, ‘12345678’, ‘qwerty’, ‘123456789’, ‘abc123’];

2.生成作者的名字簡稱,含大小寫,如YXZ、yxz、Yxz、yXZ等;

3.構建特殊字符串;

4.三種方式進行隨機組合,從而構造密碼詞典;很多網站甚至不需要組合,通過常見弱口令如“123456”即可登錄。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

最終生成的密碼如下所示:

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

同時本地保存生成的密碼,如下圖所示。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

2.自動登錄

下面是調用selenium實現的自動登錄功能,對應的HTML源代碼如下圖所示。

用戶名:< input id=“user_name” />

密碼:< input id=“password”>

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

完整代碼如下所,建議讀者學習下Python的Selenium自動化操作庫,它廣泛應用於自動化測試、爬蟲中。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

注意,該網站有兩種形式提示我們錯誤信息,這裡採用URL判斷,如果出現“login_error”表示錯誤的密碼,否則成功登陸。同時,作者將 pass_out.txt 輸出的密碼精簡為6個,簡單演示即可。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

輸出結果如下圖所示:

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

哎,同學們啊!綠色網絡需要我們共同維護,建議大家瞭解它們背後的原理,更好地進行防護。法網恢恢疏而不漏,該賬號成功被鎖定,但是它背後的原理和方法是值得學習且可行的,也推薦大家自行搭建環境測試復現。如果您是網站的開發者或管理員,更應該知道弱口令的危害,更應該去做保護您客戶安全,做好密碼暴庫防護。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

.BurpSuite網站密碼暴庫

該部分參考前文實現:[網絡安全自學篇] 三.Burp Suite工具安裝配置、Proxy基礎用法及暴庫示例

下面以某網址為例,進行簡單的暴庫測試。注意,它是HTTP的登錄請求。

第一步,用Burp Suite進行攔截請求,找到請求參數進行篡改。

BoxUserName=15200000000

TextBoxPwd=111111

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

第二步,在界面中鼠標右鍵,在彈出菜單中選擇“Send to Intruder”(Ctrl+I),此時會將請求數據分發給Intruder模塊,並且Intruder變紅。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

第三步,使用Burp Suite工具中的Intruder模塊進行破解參數配置,運行破解任務併成功破解用戶名和密碼。

(1)在Intruder模塊中選擇Positions選項,單擊“Clear”按鈕清楚相關默認參數前後的特殊符號“§”。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

(2)鼠標選中請求數據頁面中的Password參數值(需要進行暴力破解的密碼值),單擊“Add§”按鈕進行位置標記。

TextBoxPwd=§111111§

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

(3)選擇Payloads選項,單擊“Load items form file”,在彈出的對話框中選擇暴力破解密碼文件並單擊“打開”按鈕,將破解密碼列表導入。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

(4)單擊“Start attack”按鈕開始破解測試。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

(5)在彈出的窗口“Intruder attack”中可以根據返回長度Length的不同判斷破解是否成功,這裡隱藏的密碼是“013579”,它的長度最大並且為最終密碼。注意,Length越大那麼密碼吻合就越大。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

也可以通過查看Response返回信息或Status返回狀態的不同信息判斷是否成功。

錯誤的密碼返回信息:

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

正確的密碼返回信息:

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

(6)通過破解的密碼嘗試登陸。

(7)如果密碼是經過MD5加密的,如上面第三部分測試的網站,則需要進行如下設置。在“Payload Processing”中點擊“Add”添加哈希MD5加密。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

此時點擊攻擊如下圖所示,是經過加密的匹配。

Python攻防之弱口令、自定義字典生成及網站暴庫防護!

六.總結

希望這篇文章對你有所幫助,這是Python網絡攻防非常基礎的一篇博客,後續作者也將繼續深入學習,製作一些常用的小工具供大家交流。作者B站的視頻推薦幾乎都是網絡安全和Python編程,這個算法寫得不錯,最近擠空閒的時間看了100多部視頻。Python攻防之弱口令、字典暴庫還在撰寫中,論文匯報的PPT也快100頁了,接下來需要學會精簡和總結。種一棵樹最好的時間是十年前,其次是現在,忙點好,加油。


分享到:


相關文章: