DVWA系列Brute Force

DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。

brute Force "暴力破解"是指黑客利用密码字典,使用穷举法猜解出用户口令,是现在最为广泛使用的攻击手法之一,如2014年轰动全国的12306“撞库”事件,实2质2就2是2暴力破解攻击。

1、首先打开DVWA(可利用metasploitable2靶机)登录(admin、 password)

2、在view source中观察不同安全等级的代码,可以发现如下信息。

Low Brute Force Source

<?php

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

    $user = $_GET['username'];
    
    $pass = $_GET['password'];
    $pass = md5($pass);

    $qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
    $result = mysql_query( $qry ) or die( '<pre>' . mysql_error() . '</pre>' );

    if( $result && mysql_num_rows( $result ) == 1 ) {
        // Get users details
        $i=0; // Bug fix.
        $avatar = mysql_result( $result, $i, "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>";
    }

    mysql_close();
}

?>

low级别是一个简单的登录的代码,仅仅对密码进行了MD5加密。没有任何过滤。

Medium Brute Force Source

<?php

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

    // Sanitise username input
    $user = $_GET[ 'username' ];
    $user = mysql_real_escape_string( $user );

    // Sanitise password input
    $pass = $_GET[ 'password' ];
    $pass = mysql_real_escape_string( $pass );
    $pass = md5( $pass );

    $qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
    $result = mysql_query( $qry ) or die( '<pre>' . mysql_error() . '</pre>' );

    if( $result && mysql_num_rows($result) == 1 ) {
        // Get users details
        $i=0; // Bug fix.
        $avatar = mysql_result( $result, $i, "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>";
    }

    mysql_close();
}

?>

medium级别的代码和low级别的代码比较不同点在于加了层mysql_real_escape_string( );

mysql_real_escape_string();

http://www.w3school.com.cn/php/func_mysql_real_escape_string.asp(函数的解释和使用方式) 

由此可见该函数的功能为防止SQL Injection攻击,

1、也就是你必须验证用户的输入

2、操作数据的时候避免不必要的字符导致错误

High Brute Force Source

<?php

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

    // Sanitise username input
    $user = $_GET[ 'username' ];
    $user = stripslashes( $user );
    $user = mysql_real_escape_string( $user );

    // Sanitise password input
    $pass = $_GET[ 'password' ];
    $pass = stripslashes( $pass );
    $pass = mysql_real_escape_string( $pass );
    $pass = md5( $pass );

    $qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';";
    $result = mysql_query($qry) or die('<pre>' . mysql_error() . '</pre>' );

    if( $result && mysql_num_rows( $result ) == 1 ) {
        // Get users details
        $i=0; // Bug fix.
        $avatar = mysql_result( $result, $i, "avatar" );

        // Login Successful
        echo "<p>Welcome to the password protected area " . $user . "</p>";
        echo '<img src="' . $avatar . '" />';
    } else {
        // Login failed
        sleep(3);
        echo "<pre><br>Username and/or password incorrect.</pre>";
        }

    mysql_close();
}

?>

high级别的代码和medium级别相比又加了stripslashes()函数

stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。

对于这个可以先弱口令、万能密码测试。如果无果,则进行暴力破解。

3、首先配置burp suite,我使用的是这个版本的burp。此处解释下burp的使用,https://blog.csdn.net/weixin_38079422/article/details/80729158

4、正式进行暴力破解,输入猜测的用户名和密码(根据已经收集的相关信息)

使用burp 截包

右键发送到intruder

给需要测的部分加$符,然后添加字典

点击start attack

等待,得出结果。

可以看到password的响应包长度(length)“与众不同”,可推测password为正确密码,手工验证登陆成功。

发布了9 篇原创文章 · 获赞 1 · 访问量 1018

猜你喜欢

转载自blog.csdn.net/crystal919/article/details/88773913