如果你想搭建靶场可以购买蓝易云服务器搭建
LOW
Brute Force 暴力破解
首先暴力破解的话,有破坏加密的,有破解其他类的账户类型等等的,那么这里是破解账户密码
那么暴力破解的概念也非常的好理解就是单纯的对账户和密码上的尝试破解,用到的就是用不同的账户和密码去进行登录看看那个能登录成功
代码分析
<?php
//if判断
//这里用到了isset函数,这个函数用于检测的是返回值是否为空,就是用于检测变量是否已设置并且非 NULL
if( isset( $_GET[ 'Login' ] ) ) {
// Get username
//这里就是设置了一个user变量作用是获取用户输入的用户名称
$user = $_GET[ 'username' ];
// Get password
#这里就是设置了一个pass变量作用是获取用户输入的密码
$pass = $_GET[ 'password' ];
//这里设置的密码验证,将用户输入的密码进行MD5加密【用于与数据库进行校验,数据库的密码信息是md5的】
$pass = md5( $pass );
// Check the database
//设了一个MySQL的查询语句查询的是在user表查询条件user是不是等于来自变量user的值,password是不是用户输入的密码
$query = "SELECT * FROM `users` WHERE user = '$user' AND passwor d = '$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判断
if( $result && mysqli_num_rows( $result ) == 1 ) {
// Get users details【获取用户详细信息】
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];
// Login successful
//登录成功就进去
//提示Welcome to the password protected area 正常用户名称
echo "<p>Welcome to the password protected area {$user}</p>";
//输出一个照片
echo "<img src=\"{$avatar}\" />";
}
else {
// Login failed
//登录失败就提示Username and/or password incorrect.
echo "<pre><br />Username and/or password incorrect.</pre>";
}
//账户密码验证完关闭与数据库的连接【让别人验证连】
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>
看到这个代码好像也没有讲到暴力破解的东西
是的,是没说哈哈哈哈哈
但是流程还是要走的
那么暴力破解还是要看他的数据包
这个就是我们登录的数据包
可以看见username和Password
他们对应的值都没有加密【就算加密其实也是就要破的,只不过麻烦了一点点】
GET /vulnerabilities/brute/?username=1&password=1&Login=Login HTTP/1.1
Host: dvwa.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
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
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Referer: http://dvwa.com/vulnerabilities/brute/
Cookie: PHPSESSID=t5s977oj3kedvdi788a3pl5s95; security=low
Upgrade-Insecure-Requests: 1
首先抓取登录数据包
我们直接右键发送到测试器模式上
我们添加这两个1为爆破点
按照配置就可以了
然后我们点击payloads
这里有1和2
分别是我们第一个选择的username和第二选择的Password
所以1就是username2就是password
来到这一步我们就需要配置爆破的字典了
字典是什么牛马呢?
字典是什么?
这里说字典,通俗一点来说就是两个文件,一个文件存在着大量的用户账户,另一个存在的大量的密码
弱口令就是,绕过去猜他的账户和密码是什么
演示
比如我们的账户字典里面是admin admin1 admin2…等等,而我们的密码字典是123,1234,12345
好
当我们去弱口令的时候啊
就是一个一个去比对
一个一个账户去试
账户是admin密码是123
账户是admin密码是1234
账户是admin密码是12345
账户是admin1密码是123
就这样一个一个去试
导入字典
下面就需要导入字典就可以了
点击这个就可以导入字典了
1号导入用户字典【字典晚上下载,我前面的文章也有分享字典】
导入完后更换到2号
导入密码字典
导入完毕后点击右上角的启动按钮
进行爆破
这样他就进行了爆破
那么怎么查看哪些账户和密码是成功的呢
点击Length
返回值长度排序
我们发现这有一条数值和其他数值不一样的
他是4704其他的是比他小的4666
那么这个4704对应的账户和密码可能就是正确的,【数值越大可能他就是正确的账户密码】
验证一下
返回的是一张图片和一段话
Welcome to the password protected area admin
这就是简单级别的暴力破解
在账户和密码的基础上的
Medium
Brute Force 暴力破解
和LOW级别的一样操作
High
Brute Force 暴力破解
代码分析
Brute Force Source
vulnerabilities/brute/source/high.php
<?php
if( isset( $_GET[ 'Login' ] ) ) {
// Check Anti-CSRF token
//这里多了一个token值
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Sanitise username input
$user = $_GET[ 'username' ];
$user = stripslashes( $user );
$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 = stripslashes( $pass );
$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)) ? "" : ""));
$pass = md5( $pass );
// Check database
$query = "SELECT * FROM `users` WHERE user = '$user' AND passwor d = '$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 successful
echo "<p>Welcome to the password protected area {$user}</p>";
echo "<img src=\"{$avatar}\" />";
}
else {
// Login failed
sleep( 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
//生成Token
generateSessionToken();
?>
LOW级别代码
<?php
//if判断
//这里用到了isset函数,这个函数用于检测的是返回值是否为空,就是用于检测变量是否已设置并且非 NULL
if( isset( $_GET[ 'Login' ] ) ) {
// Get username
//这里就是设置了一个user变量作用是获取用户输入的用户名称
$user = $_GET[ 'username' ];
// Get password
#这里就是设置了一个pass变量作用是获取用户输入的密码
$pass = $_GET[ 'password' ];
//这里设置的密码验证,将用户输入的密码进行MD5加密【用于与数据库进行校验,数据库的密码信息是md5的】
$pass = md5( $pass );
// Check the database
//设了一个MySQL的查询语句查询的是在user表查询条件user是不是等于来自变量user的值,password是不是用户输入的密码
$query = "SELECT * FROM `users` WHERE user = '$user' AND passwor d = '$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判断
if( $result && mysqli_num_rows( $result ) == 1 ) {
// Get users details【获取用户详细信息】
$row = mysqli_fetch_assoc( $result );
$avatar = $row["avatar"];
// Login successful
//登录成功就进去
//提示Welcome to the password protected area 正常用户名称
echo "<p>Welcome to the password protected area {$user}</p>";
//输出一个照片
echo "<img src=\"{$avatar}\" />";
}
else {
// Login failed
//登录失败就提示Username and/or password incorrect.
echo "<pre><br />Username and/or password incorrect.</pre>";
}
//账户密码验证完关闭与数据库的连接【让别人验证连】
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>
那么high级别这关
最大的区别在于tkoen
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌
,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
操作
首先一样是先抓包
然后发送到测试器模式下
右键选择
那么需要设置三个爆破点
照图设置
设置好后
点击options
并找到
Grep-Extract
点击add
刷新后我们要找到token部分
并且我们还要把值赋值下来
后面有用
bdfe35f735cfe61010fba7de600c4850
然后点击OK
然后呢往下面划
找到
Redirections
点上这个Always
然后设置线程
点击Resource Pool
弄完后点击
payloads
就需要设置账户密码什么的了
账户和密码和前面差不多
但是tokon
有的不一样
类型选择Recursive grep
设置完这些后
点击启动
长度最长的
一个对应值
我们尝试登录试试
返回了一张图片和
Welcome to the password protected area admin