期待以下回答能對你有所助力!
黑客技術是個很龐大的概念,包括不同的方向,每個方向又可以劃分成多個領域,隨著技術的進步,每個領域都可以無限細分,不同的領域之間也在不斷交叉。因此如果將黑客技術的方向、領域、知識用結構圖表示,會得到一張錯綜復雜、密密麻麻的網狀圖。看到這樣的知識結構圖,估計大部分初學者都會被成功勸退,想要繼續學習的人也會因不知從何學起而迷茫。本文將以密碼在線攻擊為例,通過分析每個實施步驟,梳理需要學習的具體知識,幫助初學者找準方向。
構建密碼字典
無論是在線攻擊還是離線攻擊,構建密碼字典都是破解密碼過程中最核心的環節,字典的好壞直接決定了密碼破解的效率和成功率。密碼攻擊的本質就是暴力破解,即用密碼組合窮舉的方式不停地去試探,直到“試”出正確的密碼。密碼組合的窮舉需要耗費大量的CPU資源,為了減輕CPU的壓力并方便重復利用,通常將窮舉的密碼組合保存在文檔里,這個文檔稱為密碼字典。
下面以構建日期字典為例:形如19951213的日期密碼由8位數字的排列組合,理論上來說有1億(10的8次方)個組合方式,但因為年月日都有各自的取值范圍,實際的組合數并沒有想象中那么多,比如19590101到20181231之間總共只有2萬多個不同的組合。除了日期集合,還可以構建電話號碼集合、英文單詞集合、姓氏拼音集合。還可以對不同集合進行組合,構建更復雜的密碼,例如將姓氏拼音與日期組合成形如Chen19951213的密碼。
編程構建密碼字典的過程很簡單,比如日期字典只需要用三個循環嵌套就能完成;實現不同集合元素的組合,需要使用數組或鏈表等數據結構;將生成的密碼保存到文檔,需要了解I/O知識。總結一下:構建密碼字典只需要用到流程控制、數組或鏈表、I/O流等最基礎的編程知識,使用C、Java、Python等任何一種語言都能輕松實現。
搭建網站
密碼在線攻擊其實就是將字典中的用戶名和密碼按照特定格式組裝,然后向網站登錄界面發送登錄請求,直至成功的過程。未經對方同意攻擊網站的做法是違法行為,所以請大家搭建自己的網站用于測試和學習。搭建網站的過程也并不復雜,目前主流的解決方案如Apache+Tomcat可以直接拿來使用,另外還需要學習配置數據庫,實現登錄功能。需要學習的知識如下:
Web系統的基本架構:最簡單的Web系統可分為表示層(頁面)、邏輯層(用戶名和密碼驗證)、數據層(數據庫),需要了解不同層級的功能、工作流程、數據交換等方面的知識。
數據庫的配置:對主流數據庫如Oracle,MySQL,SQL Server都要有所了解,還需要掌握SQL語句的編寫;
登錄頁面的編寫:學習HTML、JSP、PHP等頁面語言,會編寫簡單的登錄界面,當然可以從網上下載,修改后使用;
驗證功能的實現:學習Web開發,比如JavaWeb(我只會這個),用sevlet實現明文密碼的加密和用戶名、密碼的驗證。
在線攻擊
密碼在線攻擊不是在登錄頁面里靠手動輸入用戶名密碼,而是通過編程實現。不知道大家平時有沒有發現這樣一個問題:在登錄網站時,瀏覽器的地址欄里只會顯示域名,并不會顯示登錄頁面的url。實現對頁面的在線攻擊要有的放矢,因此必須先找到登錄頁面的完整url。此外網站服務器的IP、協議、端口、頁面請求方式、失敗時的返回信息都必須在攻擊之前掌握。所有這些都可以通過數據抓包和解析來實現,需要的知識有:
HTTP協議:兩種請求方法GET和POST,報文的格式;
抓包解析程序的編寫:Java、Python都有大量用于抓包的庫,可以直接使用,也可以自己動手編寫,當然這要建立在對TCP、HTTP充分理解的基礎上,另外需要學習的知識:正則表達式;
密碼碰撞程序的編寫:在線攻擊的最后一步就是編寫程序從字典中循環提取用戶名和密碼,組裝成Request向登錄頁面發起攻擊,接受并分析Reponse,沒有發現失敗信息說明攻擊成功,這一步也只需要最基本的編程知識。
總結
學習技術需要有工匠精神,在一個小的領域精益求精,任何人皆可成為大師。以上列出的知識框架是入門級的,但是每個知識點都值得深入挖掘探索。比如:在了解攻擊原理之后采取技術手段提高網站的安全性,然后尋找新的攻擊破解的辦法,如此往復。這樣“左右互搏”的學習方式,不僅能保持學習興趣,還能提高學習效率。很多讀者在之前文章的評論里詢問如何入門,如果你真的對黑客技術感興趣并愿意學習,不妨從密碼在線攻擊的例子學起,在與自己的較量中不斷進步。