DVWA系列(一)——使用Burpsuite进行Brute Force(暴力破解)
Brute Force(暴力破解)简介:暴力破解一般是指穷举法,顾名思义,暴力破解的原理就是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录。理论上来说,只要字典足够庞大,枚举总是能够成功的!但实际发送的数据并不像想象中的那样简单——“ 每次只向服务器发送用户名和密码字段即可!”,实际情况是每次发送的数据都必须要封装成完整的 HTTP 数据包才能被服务器接收。但是你不可能...
目录:
一、暴力破解简介
二、实验环境
三、实验步骤
安全等级:LOW
安全等级:Medium
一、暴力破解简介:
暴力破解一般是指穷举法,顾名思义,暴力破解的原理就是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录。理论上来说,只要字典足够庞大,枚举总是能够成功的!
但实际发送的数据并不像想象中的那样简单——“ 每次只向服务器发送用户名和密码字段即可!”,实际情况是每次发送的数据都必须要封装成完整的 HTTP 数据包才能被服务器接收。但是你不可能一个一个去手动构造数据包;
所以在实施暴力破解之前,我们需要先去获取构造HTTP包所需要的参数,然后扔给暴力破解软件构造工具数据包,然后实施攻击就可以了。
Web暴力破解通常用在已知部分信息,尝试爆破网站后台,为下一步的渗透测试做准备。
Burp Suit中四种暴力破解的方式的区别:
四种暴力破解方式的区别:
- 一个字典,两个参数,先匹配第一项,再匹配第二项【sniper】
- 一个字典,两个参数,同用户名同密码【battering ram】
- 两个字典,两个参数,同行匹配,短的截止【pitch fork】
- 两个字典,两个参数,交叉匹配,所有可能【cluster bomb】
下面我们利用BUR破碎特的Intruder模块对密码进行暴力破解。
一、实验环境:
1、Windows服务器:Win7,IP地址:192.168.85.192,并启动phpstudy服务;
2、测试机:物理机Windows 10 ,远程登录DVWA,并安装启动代理服务器BurpSuite,开启代理;
二、实验步骤:
(一)安全等级:LOW
1、从物理机通过浏览器远程登录DVWA页面,将安全级别设置为LOW级别;
网址:http://192.168.85.192/DVWA/security.php
账户:admain
密码:password
2、查看源码;
如下图所示的源码为上一个网页实现功能的源码;
3、可以发现在LOW级别存在SQL注入漏洞;
通过对源码的分析,可以得到如下结果:
- 针对用户输入的用户名和密码,服务器没有进行过滤操作;
- 没有任何的防爆破机制,存在明显的SQL注入漏洞,可利用SQL注入漏洞登录(使用空密码登录);
万能账户:
- admin’ or ‘1’='1
- admin’ #
万能账户登录成功
(二)安全等级:Medium
四种暴力破解方式的区别:
- 一个字典,两个参数,先匹配第一项,再匹配第二项【sniper】
- 一个字典,两个参数,同用户名同密码【battering ram】
- 两个字典,两个参数,同行匹配,短的截止【pitch fork】
- 两个字典,两个参数,交叉匹配,所有可能【cluster bomb】
查看源码
源码分析:
- mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符;如果不进行转义,意味着任何用户无需输入合法的密码即可登陆。使用该函数来预防数据库攻击,基本防止了SQL注入;
- 同时,$pass做了MD5校验,杜绝了通过参数password进行sql注入的可能性;
- 但依然没有加入有效的防爆破机制,只是不能采用SQL注入的方式登录;
1、使用账号:admain,密码:123456789,尝试进行登录,并使用BurpSuite对数据包进行拦截。
2、将获得的数据包导入到intreder中;
3、清空参数;
在Position选项中设置需要破解的变量。Burpsuite会自动设置许多变量,单击‘Clear’按钮,把默认变量全部清除;
4、添加所选参数,选择第一种方式Sniper进行暴力破解;
选中输入任意用户名和密码,单‘Add’按钮将其设置为需要破解的变量。使用Sniper攻击类型。
5、添加字典
- Add:手动输入字典;
- Load:加载外部字典,需选择加载路径;
- Add from list:Burp Suite自带的字典;
6、爆破。请求长度不同的可能为正确密码(用户名或者密码输入错误的情况下);
7、用破解的密码尝试登陆;
使用Cluster bomb爆破类型进行破解
1、抓包;
2、导入intruder中;
3、清空参数,选择Cluster bomb爆破方式;
4、添加所选参数,使用Cluster bomb攻击方式(两个字典、两个参数,交叉匹配,所有可能);
5、添加字典;
5.1> 添加用户名字典
5.2> 添加密码字典
6、暴力破解,请求长度不同的可能为正确密码(用户名或者密码输入错误的情况下);
7、用破解的用户和密码尝试登陆;
安全等级:High
查看源码;
源码分析:
- mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符;
- stripslashes() 函数删除由 addslashes() 函数添加的反斜杠,可用于清理从数据库中或者从 HTML 表单中取回的数据。
通过抓包分析如下:
- 通过抓包可以看到,登录验证时提交了四个参数:username、password、Login以及user_token,增加了爆破的难度;
- 这就要求我们发送的每个请求包中都包含随机生成的token值,因此无法简单地使用Burpsuite进行暴力破解。可以尝试使用python脚本,使用爬虫将服务器每次返回的user_token抓取到;
python获取token的值脚本如下:
from bs4 import BeautifulSoup
import requests,re
#构造数据包
attack_ip = input('输入DVWA所在IP:')
header={'Host': f'{attack_ip}',
'Cache-Control': 'no-cache, must-revalidate',
'If-None-Match': "307-52156c6a290c0",
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Accept': '*/*',
'Referer': f'http://{attack_ip}/DVWA/vulnerabilities/brute/index.php',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Cookie': 'security=high; PHPSESSID=355dbnek6b5vnjce6181eg9k07'}
requrl = f"http://{attack_ip}/DVWA-master/vulnerabilities/brute/index.php"
def get_token(URL,header):
#req = urllib.Request(url=URL,headers=header)
response = requests.get(url=URL,headers=header)
print (response.status_code,end=' ')
the_page = response.text
# print(the_page)
print (len(the_page))
#使用正则表达式获得token值
token = re.findall(r"user_token.*?value='(.*?)'",the_page)
# print(token[0])
return token[0]
user_token = get_token(requrl,header)
i=0
for line in open('常用密码.txt'):
URL = f"http://{attack_ip}/DVWA-master/vulnerabilities/brute/index.php"+"?username=admin&password="+line.strip()+"&Login=Login&user_token="+user_token
# print(URL)
i = i+1
print (i,'admin',line.strip(),end = ' ')
user_token = get_token(URL,header)
Impossible
源码分析:
- Impossible级别的代码加入了可靠的防爆破机制,当检测到频繁的错误登录后,系统会将账户锁定,爆破也就无法继续;
- 同时采用了更为安全的PDO(PHP Data Object)机制防御sql注入,这是因为不能使用PDO扩展本身执行任何数据库操作,而sql注入的关键就是通过破坏sql语句结构执行恶意的sql命令;
防止暴力破解的有效手段:
- 限制尝试次数;
- 验证码(验证码存在被技术的破解风险,仅用于增加每次尝试的成本);
- PDO技术;
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)