DVWA学习暴力破解low级别

DVWA学习(一)

暴力破解low 级别

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 = mysql_query( $query ) or die( '

' . mysql_error() . '
' );

 

    if( $result && mysql_num_rows( $result ) == 1 ) {

        // Get users details

        $avatar = mysql_result( $result, 0, "avatar" );

 

        // Login successful

        echo "

Welcome to the password protected area {$user}

";

        echo "";

    }

    else {

        // Login failed

        echo "


Username and/or password incorrect.
";

    }

    mysql_close();

}

?>

PHP解释

从LOW级别的代码中可以看到,以GET的方式传送USERname和password

通过SQL从USER表中查询是否有以GET方式传输的两个值,进行MYSQL查询

查询的结果存储在一个变量中,如果查询到数据库中有这么一个记录

返回一个字段值

输出Welcome to the password protected area {$user}

DVWA学习暴力破解low级别_第1张图片

若密码错误(die()+没有一条记录)

输出

 

echo "


Username and/or password incorrect.
";

代码分析:

该代码将输入值直接带入SQL查询,依据返回记录情况判断登陆是否成功。

漏洞利用:

该代码存在SQL注入漏洞,由于没有对输入的字符做任何的过滤便直接带入SQL查询,也就是说可以在输入中构造SQL使其到数据库中查询。

漏洞细节:

admin’ or ‘a’=’a
admin#

对于low级别的理解:

这是low级别的查询语句(单引号是否可忽略)

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

若忽略单引号注入替换:

admin or 1=1

带入SQL:

 SELECT * FROM `users` WHERE user = ' admin or 1=1' AND password = '$pass'

带入数据库查询的结果:

无法查询出结果

带上单引号:

admin’ or ‘a’=’a
带入查询:

 SELECT * FROM `users` WHERE user = 'admin’ or ‘a’=’a' AND password = '$pass'

DVWA学习暴力破解low级别_第2张图片

注意带入:

Admin’#在数据库中无法查询成功

但是在DVWA中可成功爆破

原因如下:

缺少“;”

原本的;被#注释掉了

    DVWA学习暴力破解low级别_第3张图片

 

你可能感兴趣的:(DVWA学习暴力破解low级别)