首页 > 其他分享 >DVWA之 Brute Force通关(低中高)

DVWA之 Brute Force通关(低中高)

时间:2024-07-12 20:57:56浏览次数:15  
标签:Force 低中 Brute ston GLOBALS user pass mysqli ___

Brute Force(暴力破解)

暴力破解:暴力破解(Brute Force Attack)是一种通过尝试所有可能的组合来破解密码或密钥的攻击方法。它的基本思想是系统地、逐一尝试每一种可能的组合,直到找到正确的密码或密钥为止。

LOW 

(1)随便输入账号尝试的同时进行burp抓包

在这里我们可以看到是使用get获取参数,且是明文传输,没有验证码类的验证机制,所以可以使用爆破

(2)抓到包后,右键点击Send to Intruder,将抓到的包转到Intruder

在存在爆破点的地方再添加上我们想要他存在的变量。

选择合适的攻击类型,在这里我选择的是第四个:Cluster bomb

由此,low完成

 Medium

<?php

// 检查是否有Login参数

if (isset($_GET['Login'])) {

    // 获取用户名,并使用mysqli_real_escape_string函数进行转义处理,防止SQL注入

    $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)) ? "" : ""));

    // 获取密码,并使用mysqli_real_escape_string函数进行转义处理,防止SQL注入

    $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);

    // 构建SQL查询语句

    $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";

    // 执行查询语句,并将结果保存在result变量中

    $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 {

        // 登录失败,延时2秒后输出错误信息

        sleep(2);

        echo "<pre><br />Username and/or password incorrect.</pre>";

    }

    // 关闭数据库连接

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);

}

?>

关于Medium难度,它的源码中对于登录这一方面并没有做太多的改动,因此它的爆破过程与Low难度的过程基本一样,想要尝试的朋友可以参考Low难度中的爆破过程,区别是每一次登录失败后会延时2s,别的就没有什么改动了,总体过程影响不大。

  另外在这个Medium难度的源码中,它对防止注入做了很多的工作,像比如说,它使用了mysql_real_escape_string 函数,这个函数可以对字符串中的函数进行转义,一定程度上可以防止sql注入,到这个地方会不会想到在Low难度中是否可以通过注入来绕过,可以去试一下。(我在这个地方用了万能密码发现是可以的,在Username处:admin' or '1'='1,在Password处随便填点东西,像123这样的都行,这样就可以成功登陆了)

High

<?php

// 检查是否有Login参数

if (isset($_GET['Login'])) {

    // 检查Anti-CSRF令牌是否有效

    checkToken($_REQUEST['user_token'], $_SESSION['session_token'], 'index.php');

    // 获取并转义用户名输入,防止SQL注入

    $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)) ? "" : ""));

    // 获取并转义密码输入,防止SQL注入

    $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)) ? "" : ""));

    // 使用MD5对密码进行哈希处理

    $pass = md5($pass);

    // 构建SQL查询语句

    $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";

    // 执行查询语句,并将结果保存在result变量中

    $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 {

        // 登录失败,随机延时0到3秒后输出错误信息

        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);

}

// 生成Anti-CSRF令牌

generateSessionToken();

?>

继续抓包试试看

与之前不同的是high多了一个user-token 

  • 随机延时

    • 登录失败时,随机延时0到3秒再输出错误信息,防止暴力破解攻击。

  • 生成Anti-CSRF令牌

    • 使用generateSessionToken函数生成新的CSRF令牌。

在这个难度中,首先从代码中可以发现是加了token验证的。针对这种带有token验证的,我们也可以使用Burp去爆破,接下来是具体的一些步骤:

1,burp抓包

选择pitchfork

payload1

payload2

蓝色框里面的token数值是找的(方法如下)

先点击add,然后点击refetch response 接着ctrl +f  token

出来后把它选中复制同时点击OK

接着使用单线程

开始攻击

标签:Force,低中,Brute,ston,GLOBALS,user,pass,mysqli,___
From: https://blog.csdn.net/LIU6636LIU/article/details/140388309

相关文章

  • CodeForces - 1984F
    分析考虑相邻两个字符带来的约束。若为"SS",则满足$|b_i-b_{i+1}|\lem$若为"PP",则满足\(|b_{i+1}-b_i|\lem\)若为"PS",则满足\(tot_a=b_i+b_{i+1}\)若为"SP",则满足\(tot_a+a_{i}+a_{i+1}=b_i+b_{i+1}\)发现可以枚举"PS"的位置来确定\(to......
  • Codeforces Round 957 (Div. 3)
    E-Novice'sMistake题意为寻找n*a-b=("n"+"n"+...){a个n的字符串-b的长度}即为"2"⋅20−18="22222222222222222222"−18=22=2⋅20−18使用暴力枚举每个n相加的长度和又因为n<=100a<=100000所有答案t的值必定小于1e6所以对每个a进行枚举对于每个答案t进行判断是否成立其......
  • CodeForces - 1987F1 & CodeForces - 1987F2
    分析首先显然有dp状态\(g_i\)表示前\(i\)个数,能进行最大的操作次数。转移有\(g_i=\max\limits_{j=1}^{i-1}(g_j+\frac{i-j}{2})[2|(i-j)]\)但这里显然缺少转移条件。经过基本观察,发现若\(i\)操作过,满足条件:\(a_i\equivi(mod\2)\)\(i\)左侧操作过\(\frac{i-......
  • Codeforces Round 957 (Div. 3)
    推荐个C++编程仓库模板https://github.com/yxc-s/programming-templateA.OnlyPluses总结:为什么优先增加最小的数,它们的乘积会是最优的呢?可以这么理解,假如只有两个数a和b,b>a,那么a+1,就增加一份b。如果b+1,只能增加1份a。因为b>a,所以增加小的数是最优的。voidsolve(){......
  • Codeforces Round #956 (Div. 2)题解
    A.ArrayDivisibility需要让满足$k\midj$的所有\(a_j\)的和整除k,只需要让每个\(a_j\)整除k就可以了,可以让\(a_j=j\)#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'typedefpair<int,int>pii;typedefunsignedlonglo......
  • CodeForces - 1986G1 & CodeForces - 1986G2
    经过基本观察,可得当点对\((i,j)\)合法时,有\(a_i|b_j,a_j|b_i\),其中\(a_i=i/gcd(p_i,i),b_i=p_i/gcd(p_i,i)\),证明显然。如何维护?考虑开\(mp_{x,y}\)表示\(x=a_i\),\(y|b_i\)的个数。对于点\(i\)点对个数即为\(\sum\limits_{d|b_i}mp_{d,a_i}\)时间复杂度为\(O(nlog......
  • CodeForces - 1984E
    题目大意每次在每个联通块中选一个点\(u\),删除这个点使得联通块分成若干个联通块,再从联通块中选点\(v\),在新树上连接\(u,v\),求新树叶节点的最大个数。分析易转化为求原树的最大独立集,设\(f_{u,0/1}\)为以1为根时不选/选\(u\)的最大独立集。显然有:\[dp_{u,0}=\sum\li......
  • 高考后第一次Codeforces Round 952 (Div. 4)
    ACreatingWords思路:拿一个容器交换两数值即可#include<bits/stdc++.h>usingnamespacestd;constintN=100001;chara[N],b[N];intmain(){intn;scanf("%d",&n);while(n--){scanf("%s%s",a,b);charjia......
  • Franka Robot demo 力控 force_control.cpp
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<array>#include<iostream>#include<Eigen/Core>#include<franka/duration.h>#include<franka/......
  • Codeforces Round 954(Div. 3)
    CodeforcesRound954(Div.3)目录CodeforcesRound954(Div.3)\(C\).UpdateQueries\(D\).MathematicalProblem\(E\).BeautifulArray方法一:贪心+滑动窗口方法二:DP\(C\).UpdateQueries对索引数组\(ind\)去重排序对字符串\(c\)排序顺序遍历索引数组,将\(s[ind[i]......