文中涉及講解burp爆破模塊介紹可能不太準確,請大佬批評指正
就dvwa靶場而言,兩個常見漏洞讓我有了新的認知
第一個接觸的漏洞為弱口令漏洞,常見情況下,人們口中的弱口令可能為“姓名縮寫”“123456”“生日簡寫等”接觸了dvwa,知道了弱口令不止這些,為此我接觸到了各種各樣的弱口令字典,如github的fuzzdict和burp自帶的字典等,一般來說,弱口令可用的場景為常見登陸窗口,拿dvwa舉例子
大概為這樣,常規破解不應該為手動測試,更多的為工具測試,例如burp抓包后的破解方式,說到burp的抓包,更多的算是有一點代碼審計能力,抓dnva登陸包為下
此為完整的抓包頁面,默認情況下,我們只能抓到請求包,然后根據此請求包再攔截請求包對應的響應包
要想爆破出弱口令,應選擇此請求包后右鍵放入攻擊模塊,也就是inteuder模塊
放入后有4種攻擊方式
狙擊手模塊
為單一模塊攻擊,只能攻擊用戶名或密碼其中一個,使用場景為已知密碼或已知用戶名的情況下
撞擊物模塊
與狙擊手模塊相似,不過狙擊手只能用來爆破其中一個的數據,而撞擊物為二者相同攻擊,為用戶名和密碼相同下使用
交叉模塊
為雙模塊攻擊,可以同時攻擊用戶名和密碼兩者,適用于只有一個弱口令字典情況下對用戶名和密碼都不知道的情景
集束炸彈模塊
同樣為雙模塊攻擊,不過他適用于兩個字典的擁有者,并且對登錄窗口的用戶名信息 密碼信息有一些模糊的猜測情況下使用
言歸正傳
進行爆破前還有一個步驟,為設定要爆破的位置,此時需要一些分析請求包的基礎,以下數據包進行示例
第一行為請求行,標明路徑和請求方式還有http版本,后面的username對應著用戶名,password為密碼
第二行為要請求的域名,你要向誰發起請求,此行為誰的域名,例如你要對百度發起搜索去請求,那么第二行為baidu.com
......
選好位置示例
然后跳到位置旁邊的payload模塊,因為這里不知道靶場的用戶名和密碼,不過有些相關猜測,應該為很簡單的弱口令,有些模糊概念,而且作者有好幾本字典,所以攻擊類型為集束炸彈,圖中第一行位置模塊選擇攻擊類型,payload模塊導入字典
看圖中第一個問號,下有一個payload集,默認為1,點擊向下箭頭還會有2,這代表著你選中的內容順序,我喜歡將用戶名先選中,為payload1,密碼第二個選、為payload2
第二個問號代表字典導入,從文件中加載為導入文件按鈕,而從列表中添加為導入burp自帶的字典,其他的我們目前用不到,不多介紹
這里為導入后顯示
然后點擊右上角開始攻擊按鈕
會彈出這個窗口,代表爆破正在進行中
Ps:此圖狀態碼302為錯誤,因為作者在爆破前忘記設置難度了qwq,已更正,正常爆破響應碼為200
這里有一個很有意思的現象,因為判斷一個弱口令是否登錄會查看它的長度,長度只有獨一無二才會代表登錄成功,但是作者在等待途中迫不及待查看長度,發現有好幾個長度獨一無二的(一般來說,錯誤的長度基本是差不多)查看詳情后發現均為帶單引號的有,這代表存在sql注入點
可以進行萬能密碼嘗試
進行嘗試后發現可以登錄
這就很有意思,至于為什么burp的萬能密碼沒有成功,因為它使用的是admin’or”=”?注意,他前面有個單引號,所以沒有閉合,引起數據庫報錯,這算是一種解決方法(后續會有關于SQL的解法,這里不多闡述)
正常解法:
我們跑了大概一萬多種,暫停后查看,發現有兩個與眾不同的長度
發現基本大差不差,唯一的是大小寫不同,用這個登錄,發現登陸成功
所以在dvwa的低級難度,解決了這個靶場
我們換到中級難度,查看這個靶場,因為這個靶場之前有sql注入,這次我們先排查它
發現單引號沒有引起數據庫報錯,所以這次不存在sql萬能密碼注入,我們再次進行burp抓包,看看請求包是否有改變
發現username和password都是明文傳輸,這里還可以用burp進行爆破,同樣的步驟不多贅述(作者抓包破解一半發現爆破出了問題,查看源代碼(后續會單獨說明)是加入了sleep參數,也就是說發送登錄請求間隔為兩秒,可以在burp設置一下時間延遲參數,只要時間足夠,密碼會出來的)直接跳到高級難度步驟
因為中等難度沒有sql注入,所以高級肯定沒有,這里繼續抓包查看密碼是否為明文傳輸
發現多了token校驗,token就像我們的身份證,具有唯一性,但是這有刷新的機制,所以這里還需要繞過token驗證(每一次請求的token都是隨機的)這次我們不在爆破用戶名,所以password值為payload1,而usertoken為payload2。模式可能我講的不是很準確,各位觀眾大大可以看看別人文章,模式我們選擇交叉模式,注意,這里一定要把用戶名填寫為正確的admin,而不是亂輸入,因為我們這次不爆破用戶名!
具體步驟為 (算是本章重難點,所以全流程,全解析演示一遍,很重要的地方作者可能也理解錯誤,如果不對,請各位批評指正)
1 輸入正確的用戶名和錯誤密碼,抓包(用戶名一定要正確!!!)
2 放到intruder模塊,選擇交叉模塊(一定是這個模塊,因為它的特性)
3 定位payload1和2的位置(方便展示,作者password為payload1 usertoken為payload2)
3.5 Payload正常導入對應字典
在payload2中(重點)
先選擇類型為遞歸提取,選擇這個類型是因為token為隨時隨地變化的,不是固定,而遞歸提取會將這一過程自動化,雖然提高了難度,但是這個過程避免了手動的進程,提升效率,而遞歸提取,需要正則表達式,這個后期不能疏忽
4 選擇intruder的設置模塊
劃到下邊,找到檢索-提取一欄,點擊添加按鈕
5 選擇添加正則表達式 下 的獲取響應
6 會出現網頁代碼,下滑找到usertoken字樣,將token值勾選,burp會自動轉換為正則表達式,所以這步一定在勾選時注意(不能多,也不能少)
7選中后確定,發現檢索-提取 功能欄出現了正則表達式
8繼續下滑,找到重定向,將跟隨重定向選擇為總是
(之所以選擇重定向,是因為我們的user-token是每次刷新的,需要用到重定向來幫助我們提取新的user-token,而且我們選擇的遞歸提取依賴于重定向,不啟用重定向則提取到無用數據,導致token爆破失敗)
9在這些都完成的情況下,就可以點擊開始攻擊了,進行爆破
結果
這里能夠清晰地看到,前兩位長度不同,是因為payload1也就是密碼字典沒有運行,所以他倆長度為4787,而查看第2個請求,payload1為password,payload2為usertoken,并且與其他不相同,我們嘗試用這個登錄
成功登錄
代碼分析,低難度
大概意思為,出一個登錄窗口,分別為輸入用戶名(username)和密碼(password)的輸入框,并且將密碼以MD5值的形式返回數據庫,生成一個sql數據庫語句,意思是將用戶輸入的用戶名和密碼和數據庫存在的用戶和密碼進行對比,如果數據庫存在且只有一條數據匹配,則會提取用戶頭像值,并重定向于新窗口,出現歡迎信息:Welcome to the password ?protected incorrect area字樣
中等難度
基本沒有什么變化,不過多了sql敏感詞匯的校驗和延遲時間(已圖中標藍)
高級難度
不同的是,增加了動態刷新token的交互代碼(已圖中標藍)