DVWA系列---Brute Force暴力破解

- 日理万妓 2023-07-01 10:56 81阅读 0赞

文章目录

    • 一、low级别
    • 二、medium级别
    • 三、high级别
        • Token简述

实验使用bp进行抓包暴力破解,并提前写好账号密码字典。

一、low级别

安全措施:无任何防护措施

1、使用bp抓包
在这里插入图片描述
2、发送至intruder并添加参数,选择形式
在这里插入图片描述
3、增加线程后,实施攻击
在这里插入图片描述
根据响应长度,判断出正确账号密码。

(查看源代码)

  1. <?php
  2. if( isset( $_GET[ 'Login' ] ) ) {
  3. // Get username
  4. $user = $_GET[ 'username' ];
  5. // Get password
  6. $pass = $_GET[ 'password' ];
  7. $pass = md5( $pass );
  8. // Check the database
  9. $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
  10. $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>' );
  11. if( $result && mysqli_num_rows( $result ) == 1 ) {
  12. // Get users details
  13. $row = mysqli_fetch_assoc( $result );
  14. $avatar = $row["avatar"];
  15. // Login successful
  16. echo "<p>Welcome to the password protected area { $user}</p>";
  17. echo "<img src=\"{ $avatar}\" />";
  18. }
  19. else {
  20. // Login failed
  21. echo "<pre><br />Username and/or password incorrect.</pre>";
  22. }
  23. ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
  24. }
  25. ?>

二、medium级别

安全措施:添加登录失败休眠操作

与low级别方法相同,只不过比较耗时。
在这里插入图片描述
结果:
在这里插入图片描述
(查看源代码)

  1. <?php
  2. if( isset( $_GET[ 'Login' ] ) ) {
  3. // Sanitise username input
  4. $user = $_GET[ 'username' ];
  5. $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)) ? "" : ""));
  6. // Sanitise password input
  7. $pass = $_GET[ 'password' ];
  8. $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)) ? "" : ""));
  9. $pass = md5( $pass );
  10. // Check the database
  11. $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
  12. $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>' );
  13. if( $result && mysqli_num_rows( $result ) == 1 ) {
  14. // Get users details
  15. $row = mysqli_fetch_assoc( $result );
  16. $avatar = $row["avatar"];
  17. // Login successful
  18. echo "<p>Welcome to the password protected area { $user}</p>";
  19. echo "<img src=\"{ $avatar}\" />";
  20. }
  21. else {
  22. // Login failed
  23. sleep( 2 );
  24. echo "<pre><br />Username and/or password incorrect.</pre>";
  25. }
  26. ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
  27. }
  28. ?>

三、high级别

安全措施:加入Token预防CSRF,重定向

在这里插入图片描述在这里插入图片描述

Token简述

Token:Token名为令牌,是在会话、登时每次都产生的一个特定格式的随机数,用于身份验证。

比如在本次high级别的登陆中,每次登陆后都会产生一个不同的token,而且该token是由服务器产生,将之发送给客户端,此后每次客户端访问数据,就避免了频繁地验证用户名密码,只需要验证token就可以了。

token可以用于防护CSRF攻击,但是,token不可以预防暴力破解,因为每次会话的token都会发送至前端,只需要递归地在前端接收token作为下次访问的token值就可以实施暴力破解了。

1、当加入token后,直接对账号密码进行爆破,会产生302重定向
在这里插入图片描述
2、因此需要将token也添加为参数,并设置重定向参数。
在这里插入图片描述
3、在options中设置参数 Grep-Extract 用于获取每次的token
在这里插入图片描述
4、由于token的值是由服务器决定的,因此需要使用递归式获取token并将其作为新请求的token值,将token参数的载荷类型设置为递归获取,并将上一步最新获取的token值作为首次token
在这里插入图片描述
5、重定向设置为 always在这里插入图片描述
6、开始攻击,发现报错,原因是递归式载荷不能使用多线程
在这里插入图片描述
7、将线程改为1
在这里插入图片描述
8、重新攻击
在这里插入图片描述
找到账户密码。

(查看源代码)

  1. <?php
  2. if( isset( $_GET[ 'Login' ] ) ) {
  3. // Check Anti-CSRF token
  4. checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
  5. // Sanitise username input
  6. $user = $_GET[ 'username' ];
  7. $user = stripslashes( $user );
  8. $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)) ? "" : ""));
  9. // Sanitise password input
  10. $pass = $_GET[ 'password' ];
  11. $pass = stripslashes( $pass );
  12. $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)) ? "" : ""));
  13. $pass = md5( $pass );
  14. // Check database
  15. $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
  16. $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>' );
  17. if( $result && mysqli_num_rows( $result ) == 1 ) {
  18. // Get users details
  19. $row = mysqli_fetch_assoc( $result );
  20. $avatar = $row["avatar"];
  21. // Login successful
  22. echo "<p>Welcome to the password protected area { $user}</p>";
  23. echo "<img src=\"{ $avatar}\" />";
  24. }
  25. else {
  26. // Login failed
  27. sleep( rand( 0, 3 ) );
  28. echo "<pre><br />Username and/or password incorrect.</pre>";
  29. }
  30. ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
  31. }
  32. // Generate Anti-CSRF token
  33. generateSessionToken();
  34. ?>

发表评论

表情:
评论列表 (有 0 条评论,81人围观)

还没有评论,来说两句吧...

相关阅读