大力出奇蹟——Python暴力猜解Web應用

盜號這種事向來都讓人有些著迷,經常想像拿到別人密碼之後各種翻箱倒櫃,做一些惡趣味的事......然而沒有一種萬能的方法達到這個目的,挖洞利用門檻高,有時也沒這個必要,所以暴力猜解就成為唯一的選擇。字典?暴力猜解?讓我們來用Python大幹一番!

本教程由GeekJinj發布在實驗樓,完整教程及在線練習地址:Python暴力猜解Web登錄

一、實驗說明

本實驗使用wordpress作為測試對象,使用模擬登陸和暴力猜解來獲取wordpress管理員的登錄密碼。

1.1 知識點

  1. wordpress安裝配置
  2. 模擬登陸
  3. Python requests/threading/itertools/Queue 包的使用
  4. 多線程暴力破解

1.2 效果圖

1.3 實驗準備

1)下載並安裝wordpress

首先安裝並我們用到的CMS即wordpress,以下簡稱wp。

$ sudo apt-get updaten$ sudo apt-get install wordpressn$ sudo cp /usr/share/wordpress /var/www/html -rfn$ cd /var/www/html/n$ sudo chown -R www-data:www-data wordpressn$ sudo touch /etc/wordpress/config-localhost.phpn

2)配置資料庫及 wordpress 賬號

使用mysql資料庫作為 wordpress 的資料庫,創建 wordpress 將會用到的資料庫和相應的資料庫用戶賬號並分配許可權。

$ sudo service mysql startn$ mysql -u rootn>create database wordpress;n>create user wordpress@localhost identified by 666;n>grant create,drop,insert,delete,update,select on wordpress.* to wordpress@localhost;n

然後按 ctrl + D ,退出 mysql。

3)配置部署 wordpress

在 wordpress 的配置文件中指定資料庫用戶的賬號和密碼,並創建後台管理員賬號。

$ cd /var/www/html/wordpressn$ sudo vim wp-config.phpn

在配置文件中找到以下幾行,並添加對於密碼的設定:

保存配置後,啟動apache2服務,然後再瀏覽器中輸入http://localhost/wordpress/wp-admin/install.php配置管理員用戶名與密碼。

$ sudo service apache2 startn

此處我們設置賬號為shiyanlou,6位密碼為syl666,設置好後點擊Install WordPress即可。

如果瀏覽器沒有自動跳轉,可手動輸入http://localhost/wordpress/wp-login.php進入登錄頁,可使用之前配置的賬號來登入後台。

二、破解過程分析

需要理清登陸過程,弄懂破解原理才能夠在使用時得心應手,以下從兩個方面展開。

2.1 登錄分析

在瀏覽器中輸入http://localhost/wordprss/wp-login.php進入登錄頁,通過右鍵菜單中的檢查元素打開firefox調試工具,跳轉到網路選項卡。接著在瀏覽器中輸入錯誤的密碼,查看請求參數。

登錄時發送的的cookie:

無論是輸入正確的密碼還是錯誤的密碼,這些登錄需要提交的參數是不會改變的。並且只要登錄成功,伺服器一定會返回包含sessionid的cookie。

2.2 破解分析

暴力猜解簡述

暴力破解法就是列舉法,將口令集合中的每一個口令一一嘗試直到登錄成功;有時候結合字典效率高一點,不過字典不一定猜得准。可以說它是一種「笨」辦法,但有時候卻是唯一的辦法。它是在查找漏洞一籌莫展的時候,在漏洞利用不順利的時候你所能依靠的方法。一個固若金湯的網站可能幾乎找不到漏洞,但粗心的管理員卻有可能使用了弱口令,就算我們沒找到攻破整套系統的方法,但是只要知道了管理員的口令,同樣能夠達到修改系統的最終目的。

破解流程

暴力破解可以自動化平時手動一個個試密碼的過程,並且程序的速度更快,破解的一般流程如下。

口令空間

口令由字元組成,這些字元構成的所有的字元串組成了口令空間。以數字密碼為例,字符集合為0~9的阿拉伯數字,密碼長度為6時共有10^6種可能性,要暴力破解就是一一嘗試這10萬個口令直到找到正確的口令。假設在一般條件下一次登錄的http請求和響應耗時1s,那麼10w個請求將耗時277個小時,按一天24小時算,摺合成11天。如果使用11個線程並行破解,就只需要1天的時間。當然物理硬體性能越好,破解速度越快。由於這種破解方法建立在"猜"之上,因此口令數量很龐大,這點不可避免。但是結合人的行為習慣,可以從社會工程學的角度上減少組成口令的字符集的大小,從而減小口令空間。

由於虛擬機環境限制,簡化下複雜度。假定這個wordpress由實驗樓團隊維護,那麼管理員作為團隊成員更有可能會用syl這三個字元;有空會玩LOL,可能會更加傾向於使用數字6;並且他要經常登錄後台進行管理,為了省事將密碼設置的比較短,6位左右的長度。我們使用lsy6作為他口令的字符集合來編寫程序實現猜解過程。

三、用Python實現猜解過程

本項目猜解過程的完整代碼和詳細步驟,可以在實驗樓查看並在線完成:Python暴力猜解Web登錄

系統化的Python學習路徑:Python研發工程師

更多經典練手項目:全部課程 - 實驗樓

微信關注公眾號[實驗樓],手機查看海量項目教程。


推薦閱讀:

C++學習第一課,之「Hello world」
比特幣入門教程
操作系統如何介入到我的程序的?
如何學python-第八課 流程式控制制-For,While,循環語句,初見『函數』

TAG:Python | 网络安全 | 编程 |