dvwa部署暴力破解(网络安全)_win7靶场实验报告怎么写-爱代码爱编程
目录
一、实验目的与要求
- 能描述暴力破解;
- 能应用Low等级、Medium等级的暴力破解手工和自动化方法;
- 能应用High等级的暴力破解自动化方法及Impossible等级修复方法;
- 能用算法描述暴力破解过程(范围、动作、结果)。
二、实验原理与内容
- 暴力破解原理
暴力破解的原理就是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录。关键点是字典的构建。
暴力破解可分为手工破解、自动化破解和自己撰写工具自动化破解。关键点是需要了解HTTP的请求数据包,响应数据包的规律。 - 实验内容
利用Kali Linux对DVWA的Brute Force模块展开实验,包括:
- Low等级、Medium等级的手工破解、自动化破解;
- High等级的自己撰写工具自动化破解;
- Impossible等级的机制以及修复、防御暴力破解的方法。
- 报告撰写规范程度、书面表达、排版规范,逻辑清晰。
三、实验设备与软件环境
- 笔记本;
- VMware WorkStation Pro;
- Windows7或其他Windows系统;
- Kali Linux 2021版本或其他Kali Linux版本;
- VC9VC11VC14集合;
- PhpStudy2018;
- DVWA-1.9;
- OWASP ZAP_2_10或其他版本。
- FireFox浏览器;
- Max Hackbar;
- Proxy Switcher;
四、实验过程与结果
1、搭建DVWA靶场环境
(1)安装windows的虚拟环境
我这里使用的是windows server 2003的虚拟实验环境,我们还需要安装phpstudy,这样我们就可以直接运行php环境。然后安装DVWA靶场,修改配置文件。详细配置内容可以参考首页PDF,压缩包在以下链接。
DVWA部署https://pan.baidu.com/s/1Hz84Qjtc1Ba5-LhhLN5Mzw?pwd=2333
(2)安装Kali虚拟环境
安装kali来当做我们的攻击机,使用Kali现有的渗透工具BurpSuite,来对DVWA靶场进行攻击。我们通过Kali的火狐浏览器去访问搭建好的Windows服务器的IP地址,访问DVWA靶场如图所示表示访问成功。
2、破解准备
(1)首先我们需要在windows的虚拟机确保打开phpstudy。
(2)在浏览器的网络设置里手动配置代理和端口号,目的是使我们的渗透工具BurpSuite可以进行抓包操作。
3、暴力破解等级—low
(1)我们首先打开渗透工具BurpSuite,利用它来对输入的用户名和密码进行抓包和攻击。我们第一步点击Proxy(代理),该模块主要用于拦截浏览器的http会话内容,给其他模块功能提供数据。第二步点击Intercept(拦截),该模块的作用是拦截所有通过代理的网络流量,如客户端的请求数 据、服务器端的返回信息等。第三步点击Intercept is off,目的是将拦截请求开关打开。
(2)首先我们先将靶场的等级设置为low。注意,在设置等级的时候需要将浏览器代理暂时关闭,在对目标页面抓包时再打开代理。
接着我们点击左侧的Brute Force模块,在这里进行用户的登录操作,我们在不知道密码的情况下时登录不上去的,显然这就是我们需要攻击的页面了。我们到BurpSuite工具确认拦截请求开关是否已经打开,在确保打开的情况下我们到DVWA下尝试进行登录操作,用户名和密码可以随便输入。
我们点击Login登录就会自动跳转到BurpSuite工具,我们就可以看到在刚刚的登录页面抓取到的请求信息,其中我们主要需要攻击的是username(用户名)和password(密码)。
(3)我们在抓取到的请求信息页面下右击,选择Send to Intruder,该模块是用于自动对Web应用程序自定义的攻击。
接着我们来到Intruder模块,在这里我们可以看到刚才发送过来的请求信息,点击Attack type我们可以看到有四种攻击模式,分别为Sniper、Battering ram、Pitchfork、Cluster bomb。这里我们选择最后一种Cluster bomb来攻击。
首先我们选择Cluster bomb,双击选择我们需要攻击的地方,比如输入的用户名和密码,然后在右边选择添加,就可以在Payloads里对爆破的点以及类型进行设置。
(4)进入Payload模块,因为我们选择的是集束炸弹攻击模式,也就是Cluster bomb,所以我们可以添加2个有效负载集,选择的类型是Simple list。这里我们先添加第一列常见的字典。
然后我们选择第2个有效负载集,类型同样是Simple list,添加第2列字典后就可以对页面进行攻击。
(5)接着我们就可以看到页面正在被破解,破解完成后,我们可以通过查看和对比长度来确定正确的用户名和密码,与其他长度相差甚大的则是正确答案。
(6)输入攻击后得到的用户名和密码,登陆成功,暴力破解成功。
4、暴力破解等级—Medium
(1)我们先查看一下网页php源码,通过源码可以知道该等级和上一等级基本无差,但是多了防止SQL注入的防御手段和延迟爆破时间。所以我们可以根据上一等级的方法来进行爆破即可,时间稍微增加了点。
(2)想要破解加快,我们可以进入Resource pool模块,我们选择重新设置新的线程数为50,然后开始攻击,就可以加快破解速度。
(3)查看长度来筛选正确的用户名和密码。
5、暴力破解等级—high
方法一:
(1)我们将DVWA等级设置为high后,在登录页面查看源代码,我们可以看到high等级是在medium的基础上将sleep修改为随机的时间,并且增加了个token的校验来阻止CSRF的攻击,所以每次刷新页面的时候,我们都需要获取页面上的token。
(2)和前几个等级的操作一样,将拦截到的请求发送到Intruder,这次我们的破解方式不使用集束炸弹,因为它会把token值和我们的用户名和密码一起相乘,但是token使用一次就失效了,所以我们不使用这个方法。我们可以使用Pitchfork(鱼叉)来进行攻击,选择Pitchfork然后添加密码和token值后进入到Payloads。
(3)我们进入到Payloads后选择第一个有效负载集,类型是Simple list,然后在下面将常用的密码字典添加进去。
然后我们选择第二个有效负载集,因为token值每次都不一样,所以我们不能使用Simple list类型。我们要点击进入Setting模块,找到Redirections点击always允许Redirections,就是允许跟踪重定向。
接着在Grep-Extract中点击add,刷新响应包,找到并选择token值复制,点击ok。
通过这个表达式可以将token拿出来。
(4)我们回到Payloads,在第二个有效负载集我们类型选择Recursion grep,然后将刚刚复制的token粘贴到Payload Options[Recursion grep]模块。
(5)因为我们是一个不断变化的token,所以我们请求的时候不能很多次,我们需要到Rescource Pool中创建每次只能请求一个的新线程。
(6)最后我们可以点击开始攻击。查看长度得到密码,破解成功。
方法二:
(1)我们可以通过python来写脚本实现自动化破解。代码如下:
from bs4 import BeautifulSoup
import requests
header = {
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0',
'Cookie':'security=high;PHPSESSID=bhnifs4d4kn7n5plr2bul13fq3'#自己的cookie
}
url = "http://192.168.139.133/dvwa/vulnerabilities/brute/index.php" #IP修改为windows虚拟机IP
def get_token(url,headers):
r = requests.get(url,headers=header)
html = r.content.decode()
soup = BeautifulSoup(html,"html.parser")
user_token = soup.find_all('input')[3]["value"]
return user_token
i = 0
for admin in open("H:..\\users.txt"):#储存用户字典的本机地址
for line in open("H:..\\password.txt"):#输出密码字典的本机地址
u_token = get_token(url,header)
username = admin.strip()
password = line.strip()
payload = {'username':username,'password':password,"Login":'Login','user_token':u_token}
i = i + 1
Response = requests.get(url,params=payload,headers=header)
print(i,'用户名:'+username,"密码:"+password,len(Response.content.decode()))
user_token = get_token(url,header)
(2)运行代码,破解成功。
6、暴力破解等级—impossible分析
(1)impossible等级机制
我们通过查看impossible等级的源码可以分析到它通过多个机制来防止暴力破解。
错误登录次数限制。登录3次失败后,账户会锁住15秒。
达到最大错误次数后account_locked 变为 true,将用户账户锁定,则在登录过程中会检查上次登录时间和锁定时间。在还没到lockout_time设定的时间间隔中不允许登录。
使用MD5加密
在登录失败的情况下,代码通过sleep设置一个随机的延迟2秒到4秒的时间,这样可以防止暴力破解者通过快速尝试大量不同的用户名和密码组合。
通过stripslashes函数来去除反斜杠输入,这样可以防止我们通过SQL注入攻击。
(2)防御暴力破解的方法
主要的防御手段有设置验证码,设置错误密码次数,规定密码长度和密码复杂度,将MD5加密改成哈希表加密。
操作异常问题与解决方案
问题1:破解high等级时发送的请求过多。
解决:设置线程数量。