第十五篇第八張黑底程序圖出現了錯誤更正為:
自幼受貴州大山的薰陶,養成了誠實質樸的性格。經過寒窗苦讀,考入BIT,為完成自己的教師夢,放棄IT、航天等工作,成為貴財一名大學教師,並想把自己所學所感真心傳授給自己的學生,幫助更多陌生人。
一.基礎概念
1.暴力破解法
暴力破解法又稱為窮舉法,是一種針對密碼的破譯方法。暴力破解被認為是打開系統或網站最直接、最簡單的攻擊之一,而且由於弱密碼一直存在,攻擊者樂此不彼。破解任何一個密碼也都只是時間問題,密碼越複雜時間越漫長。
2.Web賬號和口令
字典是按照特定組合方式生成包含很多密碼的字典文件,包括字符型、數字型、組合型等,Web賬號常見口令如admin、test、guest、administrator、666666、123456等。通常管理員會選擇容易記住的口令好,這會造成賬號和口令被暴力破解;而且密碼會存在一些規則,比如長度 、字符要求等,這也會造成一些組合的洩露。
密碼通常是以常見密碼為母本,結合密碼組合規則生成。假設網站域名為 http://demo.study.com,可能的密碼組合方式包括:demo、study、demo123、demoadmin、demo@admin、study123、study666等等,接著再使用BP進行暴力破解。
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:貴州,如下圖所示查詢後臺登錄頁面。
5.弱口令(weak password)
通常認為容易被別人猜測到或被破解工具破解的口令均為弱口令。弱口令指的是僅包含簡單數字和字母的口令,例如“123”、“abc”等,因為這樣的口令很容易被別人破解,從而使用戶的計算機面臨風險,因此不推薦用戶使用。
常見弱口令有:
數字或字母連排或混排,鍵盤字母連排(如:123456,abcdef,123abc,qwerty,1qaz2wsx等);
生日,姓名+生日(利用社工非常容易被破解);
短語密碼(如:5201314,woaini1314等)。
下圖引用至freebuf網站,它是2015年公佈過最弱密碼排行榜(此網站要求密碼6-18位),同時也推薦讀者學習下面兩篇文章。
安全科普:淺談弱口令的危害 - freebuf 深信服實驗室
使用Kettle模型清洗全國弱口令Top 1000 - freebuf 水熊科技
弱口令很容易被他人猜到或破解 ,所以如果你使用弱口令,就像把家門鑰匙放在家門口的墊子下面,這種行為是非常危險的。深信服實驗室給出瞭如下的安全建議:
針對管理人員,應強制其賬號密碼強度必須達到一定的級別;
建議密碼長度不少於8位,且密碼中至少包含數字、字母和符號;
不同網站應使用不同的密碼,以免遭受“撞庫攻擊”;
避免使用生日,姓名等信息做密碼,遠離社工危害。
二.Python調用exrex庫生成密碼
下面簡單介紹Python調用exrex庫生成密碼。exrex是一個命令行工具和python模塊,它生成與給定正則表達式等匹配的所有或隨機字符串。具有以下特徵:
生成所有匹配的字符串
生成隨機匹配字符串
計算匹配字符串的數量
簡化正則表達式
其安裝方法直接調用“pip install exrex”指令即可,如下圖所示。
https://github.com/asciimoo/exrex
下面是exrex庫的一個入門代碼。
它的輸出結果如下圖所示,最重要的是通過 exrex.generate(’[Pp][a@]ssw[Oo]rd’) 組合密碼。
exrex庫是對re.DEBUG模式下進行的歸類和分析,從而匹配內容,其原理相當於下面這個代碼。
輸出結果如下圖所示,literal 97 對應的ascii碼的“a”字母,接著匹配字母“b”。
三.高精度字典生成
假設存在一個網站(https://demo.eastmount.com/),它的字典可能是由demo和eastmount組合而成,下面我們編寫一個代碼對它的密碼進行組合。
本地定義了一個 pass.txt 文件夾,用於存放常見的密碼。
通過上面代碼組合生成如下的密碼,可以看到它由demo、eastmount和我們自定義的詞典組成。
但是,未來修改密碼比較繁瑣,我們希望將核心的生產規則寫入配置文件,為後期使用提供方便,所以接下來我們創建一個 rule.ini 文件,其內容如下所示。其中,# 表示註釋,提示這算是一個字典文件,而最重要的一行代碼是我們的生成字典規則。
接著我們繼續補充上面代碼,讀取文件分析該規則(|{dic})(|#|@)(|{pwd})(|#|@)(|201[6789]),它是由dic、特殊字符、pwd和年份組成的。
輸出結果如下所示:
四.Selenium實現網站暴力登錄
接下來作者將講述一個Python調用Selenium自動化爬蟲庫實現某網站暴力登錄的案例。為了第五部分BurpSuite工具使用方便,這裡尋找的目標網站為HTTP類型。假設通過社會工程學方法獲取了某用戶名,如yangxiuzhang,這裡需要暴力獲取它密碼,實現登錄。
注意:很多高校和政務網站系統都存在弱口令漏洞,通過工號、學號結合常見密碼很容易進行暴力獲取。所以建議大家的密碼儘量複雜,而且不要一個密碼所有網站通用。
1.生成密碼
假設某網站的密碼由三部分組成——字母、數字、下劃線,如下圖所示(社會工程學探索密碼信息)。
這裡作者的密碼設置為 Yxz123456_,則暴力獲取密碼的構造方法為:
1.構建常用弱口令密碼:[‘123456’, ‘111111’, ‘666666’, ‘12345678’, ‘qwerty’, ‘123456789’, ‘abc123’];
2.生成作者的名字簡稱,含大小寫,如YXZ、yxz、Yxz、yXZ等;
3.構建特殊字符串;
4.三種方式進行隨機組合,從而構造密碼詞典;很多網站甚至不需要組合,通過常見弱口令如“123456”即可登錄。
最終生成的密碼如下所示:
同時本地保存生成的密碼,如下圖所示。
2.自動登錄
下面是調用selenium實現的自動登錄功能,對應的HTML源代碼如下圖所示。
用戶名:< input id=“user_name” />
密碼:< input id=“password”>
完整代碼如下所,建議讀者學習下Python的Selenium自動化操作庫,它廣泛應用於自動化測試、爬蟲中。
注意,該網站有兩種形式提示我們錯誤信息,這裡採用URL判斷,如果出現“login_error”表示錯誤的密碼,否則成功登陸。同時,作者將 pass_out.txt 輸出的密碼精簡為6個,簡單演示即可。
輸出結果如下圖所示:
哎,同學們啊!綠色網絡需要我們共同維護,建議大家瞭解它們背後的原理,更好地進行防護。法網恢恢疏而不漏,該賬號成功被鎖定,但是它背後的原理和方法是值得學習且可行的,也推薦大家自行搭建環境測試復現。如果您是網站的開發者或管理員,更應該知道弱口令的危害,更應該去做保護您客戶安全,做好密碼暴庫防護。
五 .BurpSuite網站密碼暴庫
該部分參考前文實現:[網絡安全自學篇] 三.Burp Suite工具安裝配置、Proxy基礎用法及暴庫示例
下面以某網址為例,進行簡單的暴庫測試。注意,它是HTTP的登錄請求。
第一步,用Burp Suite進行攔截請求,找到請求參數進行篡改。
BoxUserName=15200000000
TextBoxPwd=111111
第二步,在界面中鼠標右鍵,在彈出菜單中選擇“Send to Intruder”(Ctrl+I),此時會將請求數據分發給Intruder模塊,並且Intruder變紅。
第三步,使用Burp Suite工具中的Intruder模塊進行破解參數配置,運行破解任務併成功破解用戶名和密碼。
(1)在Intruder模塊中選擇Positions選項,單擊“Clear”按鈕清楚相關默認參數前後的特殊符號“§”。
(2)鼠標選中請求數據頁面中的Password參數值(需要進行暴力破解的密碼值),單擊“Add§”按鈕進行位置標記。
TextBoxPwd=§111111§
(3)選擇Payloads選項,單擊“Load items form file”,在彈出的對話框中選擇暴力破解密碼文件並單擊“打開”按鈕,將破解密碼列表導入。
(4)單擊“Start attack”按鈕開始破解測試。
(5)在彈出的窗口“Intruder attack”中可以根據返回長度Length的不同判斷破解是否成功,這裡隱藏的密碼是“013579”,它的長度最大並且為最終密碼。注意,Length越大那麼密碼吻合就越大。
也可以通過查看Response返回信息或Status返回狀態的不同信息判斷是否成功。
錯誤的密碼返回信息:
正確的密碼返回信息:
(6)通過破解的密碼嘗試登陸。
(7)如果密碼是經過MD5加密的,如上面第三部分測試的網站,則需要進行如下設置。在“Payload Processing”中點擊“Add”添加哈希MD5加密。
此時點擊攻擊如下圖所示,是經過加密的匹配。
六.總結
希望這篇文章對你有所幫助,這是Python網絡攻防非常基礎的一篇博客,後續作者也將繼續深入學習,製作一些常用的小工具供大家交流。作者B站的視頻推薦幾乎都是網絡安全和Python編程,這個算法寫得不錯,最近擠空閒的時間看了100多部視頻。Python攻防之弱口令、字典暴庫還在撰寫中,論文匯報的PPT也快100頁了,接下來需要學會精簡和總結。種一棵樹最好的時間是十年前,其次是現在,忙點好,加油。
閱讀更多 地表嘴強程序員 的文章