DVWA之SQL注入的步骤

1. 查找注入点

    以dvwa靶场的low级别为例:
123在这里插入图片描述

1.1 判断注入的类型

    判断是否存在注入点并检验是字符型还是数字型
先输入正确的User ID:1,2,3 点 Submit 后,将正常显示信息
在这里插入图片描述
    输入错误的数据,例如9,10,11……结果是不显示(空白)
在这里插入图片描述

  1. 输入1’,出现报错
    在这里插入图片描述
    说明此处是注入点,接受相关参数未经正确处理直接带入数据库进行查询操作。
  2. 通常sql 注入漏洞会被分为2种类型 :数值型字符型
        输入1 and 1 = 2, 因为1=2为假,如果是数值型,按道理来讲页面会出现报错,但页面如下,没有报错
    在这里插入图片描述
        输入1’ and ‘1’ =’2,页面如下,则说明存在字符型注入
    在这里插入图片描述

字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。

因此,我们可以猜测(仅是猜测)这里的sql语句应该是:

SELECT (某字段)FROM (某个表)WHERE userid = ‘’;

查看源代码

<?php
if( isset( $_REQUEST[ 'Submit' ] ) ) {
    // Get input
    $id = $_REQUEST[ 'id' ];
    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    $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"]);
}?>

第6行可以看出,语句为

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

2. 获取字段数(order by 取临界值)

    通过order by看当前表中存在多少列,ORDER BY 语句用于根据指定的列对结果集进行排序。可以这么理解,如访问id=1 order by 3,页面返回与id=1相同的结果,输入id=1 order by 4,页面返回与id=1不同的结果,则字段数为3。

  1. 输入1’ order by 2# ,页面正常显示 (这里的#号是注释符,注释后面的引号)
    在这里插入图片描述
  2. 输入1’ order by 3# ,出现报错页面
    在这里插入图片描述
    这样我们就可以判断查询结果值为两列。

2.1 确定显示的位置(SQL语句查询之后的回显位置)

    输入1’ union select 1,2#
在这里插入图片描述
上图可以看到有两个回显,因此我们可以在回显处1和2中显示我们想要获得的信息

3. 查询当前的数据库,以及版本

注:mysql5以上默认在数据库中存放一个information_schema 的数据库,这个数据库中,需要记住三个表名,分别是SCHEMATA、TABLES和COLUMNS。

  1. SCHEMATA表存储用户创建的所有数据库的库名,只要记住该表中的字段
    SCHEMA_NAME,这个表中记录了数据库库名。

  2. TABLES表存储用户创建的所有数据库 库名和表名,字段分别为:
    TABLES_SCHEMA和TABLES_NAME

  3. COLUMNS表中存储用户创建的所有数据库的库名、表名、字段名,字段名分别为:
    TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME.

    输入1’ union select version(),database()#
在这里插入图片描述
在回显处,看到了数据库为dvwa,版本是5.5.53

4. 查询数据库中的表

    输入1’ union select table_name,2 from information_schema.tables where table_schema =‘dvwa’#
在这里插入图片描述
    可以看到一个users的表,根据字面意思,里面应该存放的是用户的信息,这是我们想要得到的,所以我们就针对这个users的表继续深入。

5. 查询表中的字段

    输入1’ union select column_name,2 from information_schema.columns where table_name =‘users’#
在这里插入图片描述
可以看到,在users表里面有user和password字段,我们继续尝试查看这两个字段的内容

    输入1’ union Select user,password from users#

在这里插入图片描述

可以看到密码被加密,可以使用相应工具进行解密;这里做个演示,以用户gordonb为例:
在这里插入图片描述
解密结果为abc123
到此成功拿到用户名密码相关信息。

    本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/weixin_43847838/article/details/109833310。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。*

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归去来兮-zangcc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值