【白帽子学习笔记11】DVWA Brute Force【暴力破解】
【白帽子学习笔记11】DVWA Brute Force
Brute Force 就是暴力破解的意思,尝试常用的用户名和必然然后使用工具一个一个的去尝试
LOW级别
通过解析源码我们可以发现代码没有任何的安全防范措施,可以用万能密码试一下
试了一下admin’# 直接过 =。=
源码解析
<?phpif( isset( $_GET[ 'Login' ] ) ) {// 获取用户名$user = $_GET[ 'username' ];// 获取密码,然后进行md5加密$pass = $_GET[ 'password' ];$pass = md5( $pass );// 查看数据库是否有相关的信息$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";// 返回结果$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );if( $result && mysqli_num_rows( $result ) == 1 ) {// 获取用户细节$row = mysqli_fetch_assoc( $result );$avatar = $row["avatar"];// 如果登陆成功echo "<p>Welcome to the password protected area {$user}</p>";echo "<img src=\"{$avatar}\" />";}else {// 如果登陆失败echo "<pre><br />Username and/or password incorrect.</pre>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>
可以发现这里的代码就是简单的获取用户名和密码去数据库中进行查询而已
万能密码原理
用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行SQL语句。
用户登录时,后台执行的数据库查询操作(SQL语句)是:
Select user_id,user_type,email From users Where user_id=’用户名’ And password=’密码';
- 由于网站后台在进行数据库查询的时候没有对单引号进行过滤,当输入用户名
admin
和万能密码2’or’1
时,执行的SQL语句为:
Select user_id,user_type,email From users Where user_id=’admin’ And password=’2’or’1’
。 - 由于SQL语句中逻辑运算符具有优先级,
=
优先于and
,and
优先于or
,且适用传递性。因此,此SQL语句在后台解析时,分成两句:
Select user_id,user_type,email From users Where user_id='admin'And password='2'
和'1'
,两句bool值进行逻辑or运算,恒为TRUE。
SQL语句的查询结果为TRUE,就意味着认证成功,也可以登录到系统中。
输入用户名admin'#
,密码都不用输,即可登录成功。
Medium级别
源码解析
<?phpif( isset( $_GET[ 'Login' ] ) ) {// Sanitise username input$user = $_GET[ 'username' ];// 转义用户名和密码$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// Sanitise password input$pass = $_GET[ 'password' ];// 转义用户名和密码$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// 密码进行Md5加密$pass = md5( $pass );// Check the database$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );if( $result && mysqli_num_rows( $result ) == 1 ) {// Get users details$row = mysqli_fetch_assoc( $result );$avatar = $row["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>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?>
源码解析(原文地址):
1、mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符;如果不进行转义,意味着任何用户无需输入合法的密码即可登陆。使用该函数来预防数据库攻击,基本防止了SQL注入;
2、同时,$pass做了MD5校验,杜绝了通过参数password进行sql注入的可能性;
3、但依然没有加入有效的防爆破机制,只是不能采用SQL注入的方式登录;
暴力破解
如果进行暴力破解的话,web工具当然首选Burp Intruder了。kali就有自带这个工具直接使用即可。具体的使用教程我也找了挺久的,一开始可能比较懵逼,我这里就放几个图,不细说了
现在进行用户名的添加,你可以选择直接从文件中导入也可以直接输入,我这里就随便输入几个
接下来添加密码字典
哎嘿,就可以发现一个小家伙的Length不对劲了,这个就是密码。之后就可以用这个密码尝试登陆了。
High 级别
这里直接说结果吧,High以上的版本都无法进行暴力破解,下面我们来看看源码到底是什么样的。
<?phpif( isset( $_GET[ 'Login' ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Sanitise username input$user = $_GET[ 'username' ];// 删除由 addslashes() 函数添加的反斜杠,可用于清理从数据库中或者从 HTML 表单中取回的数据。$user = stripslashes( $user );// 转义SQL语句中使用的字符串中的特殊字符$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// Sanitise password input$pass = $_GET[ 'password' ];// 删除由 addslashes() 函数添加的反斜杠,可用于清理从数据库中或者从 HTML 表单中取回的数据。$pass = stripslashes( $pass );// 转义SQL语句中使用的字符串中的特殊字符$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));// 进行md5加密$pass = md5( $pass );// Check database$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );if( $result && mysqli_num_rows( $result ) == 1 ) {// Get users details$row = mysqli_fetch_assoc( $result );$avatar = $row["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>";}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}// Generate Anti-CSRF token
generateSessionToken();?>
我们抓包看一下包的内容:可以看到添加了随机生成的user_token, 这种东西一般和时间有关,当然了通过解析js文件我们也可以获取user_token的加密方式,然后通过python去进行暴力破解也不算不可以。
Impossible
这个级别增加了登陆次数的验证,从根本上防御了暴力破解
总结–放暴力破解的有效手段
1、限制尝试次数
2、验证码(验证码存在技术被破解的风险,仅用于增加每次尝试的成不)
3、PDO技术
PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据。PDO随PHP5.1发行,在PHP5.0的PECL扩展中也可以使用,无法运行于之前的PHP版本。
【白帽子学习笔记11】DVWA Brute Force【暴力破解】相关推荐
- dvwa brute force(暴力破解)
介绍 暴力破解其实没有什么神秘的,也是大家都有的一个四位方式,比如说我们有时候会忘记我们的手机密码,这个时候我们就会从我们之前使用的密码中一个个去试着解锁,这就是暴力破解的精髓所在了,也就是枚举猜解. ...
- python白帽子学习笔记(整合)
python白帽子学习笔记(整合) 学习笔记目录 python白帽子学习笔记(整合) 前言 一.基础篇 1.正则表达式 2.列表 3.元组带上了枷锁的列表 4.奇葩的内置方法 5.格式化字符 6.序列 ...
- 【白帽子学习笔记14】SQL注入常用语句
[白帽子学习笔记14]SQL注入常用语句 目前网站中使用的最多的数据库要算是 ACCESS.SQL Server(MSSQL).MySQL 这三个了,所以这里的手工注入,我就以他们三个数据库来分成三 ...
- 网易web白帽子学习笔记
部分转载他人 一.web基础知识 1.1.1web介绍 world wide web 万维网 web1.0 个人网站.门户站点 静态页面 web2.0 微博.博客交互式页面 随之而来有一些安全问题: ...
- DVWA之Brute Force(暴力破解)
目录 Low Medium High Impossible 暴力破解是指使用穷举法,举出所有的可能的结果,然后逐一验证是否正确! Low 源代码: <?php if( isset( $_GET[ ...
- Kali渗透测试之DVWA系列2——Brute Force(暴力破解)
目录 一.暴力破解原理 二.实验环境 三.实验步骤 安全等级:LOW 安全等级:Medium 暴力破解的四种方式 安全等级:High 安全等级:Impossible 防止暴力破解的有效手段 一.暴力破 ...
- (白帽子学习笔记)前渗透——文件上传upload labs
读者需知 1.本文仅供学习使用,由于传播和利用此文所造成的损失均由使用者本人负责,文章作者不为此承担责任 2.本文参考了一些文章,如有侵权请联系本人删除 第一关--前端验证 1.将浏览器中的JS代码禁 ...
- (白帽子学习笔记)前渗透——SQL注入
读者需知 1.本文仅供学习使用,由于传播和利用此文所造成的损失均由使用者本人负责,文章作者不为此承担责任 2.本文参考了一些文章,如有侵权请联系本人删除 注入详解 目录 注入详解 SQL注入 SQL注 ...
- DVWA靶场Brute Force 暴力破解审计通关教程
如果你想搭建靶场可以购买蓝易云服务器搭建
最新文章
- 如何在 Linux下进行文件切割操作?
- 远程办公在美国有多受欢迎?有人宁愿降薪 50% 也不愿再回办公室
- 是什么浪费了我的时间
- discuz如何去掉论坛的网页后缀名称forum.php
- spring配置文件_SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件...
- 评分卡建模—拒绝推断
- 飞飞php2.8采集失败_飞飞影视系统火车头采集器采集发布免登录接口
- 命名空间“Microsoft.Office”中不存在类型或命名空间名称“Interop”(是否缺少程序集引用?...
- 【终极方法】Unknown initial character set index ‘255‘ received from server. Initial client characte
- “一次编写,随处运行” Intel HTML5技术研讨会
- LVS-NAT和LVS-DR模式的实现详解
- OpenShift 4 - 部署Mirror Registry并复制Image
- volatile和原子操作
- Vmware VirtualCenter Server服务无法自动启动
- 女孩子偷偷学好软件测试,想要年薪30w也没有很难!
- 在asp.net web api 2 (ioc autofac) 使用 Serilog 记录日志
- 在Java中将字符串转换为日期,将日期转换为字符串
- CCS软件安装教程(超级详细)
- Linux发行版简介
- 全自动抠图换背景软件下载_抠图换背景app