SQL注入(1)--判断是否存在SQL注入漏洞

什么是SQL注入

不论是学习后端开发/数据库/网络安全,SQL注入安全隐患反复被提起
到底什么是SQL?

维基百科的定义:
在这里插入图片描述

(1)什么是SQL?
SQL是用来操控数据库的语言
在这里插入图片描述
(2)举一个例子,现在我们要查询电影“长津湖”的票房数据:
在这里插入图片描述
在这里插入图片描述
先想象一下开发人员是如何书写代码从数据库中拿到数据的:
在这里插入图片描述
作为一名黑客如何思考?
在这里插入图片描述
在这里插入图片描述

SQL注入靶场练习- DVWA(1)

【1】首先将security调为low:
在这里插入图片描述
(记住要点击“submit”)

【2】然后挑战模块SQL Injection
在这里插入图片描述

首先尝试正常的
在这里插入图片描述

【3】尝试查看源码:
在这里插入图片描述

在这里插入图片描述
我将源码粘贴到了下面:


SQL Injection Source
vulnerabilities/sqli/source/low.php
<?php

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

    switch ($_DVWA['SQLI_DB']) {
        case MYSQL:
            // 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"]);
            break;
        case SQLITE:
            global $sqlite_db_connection;

            #$sqlite_db_connection = new SQLite3($_DVWA['SQLITE_DB']);
            #$sqlite_db_connection->enableExceptions(true);

            $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
            #print $query;
            try {
                $results = $sqlite_db_connection->query($query);
            } catch (Exception $e) {
                echo 'Caught exception: ' . $e->getMessage();
                exit();
            }

            if ($results) {
                while ($row = $results->fetchArray()) {
                    // 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>";
                }
            } else {
                echo "Error in fetch ".$sqlite_db->lastErrorMsg();
            }
            break;
    } 
}

?>



内容非常多,但是只需要关注SQL语句select
在这里插入图片描述

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

关注:
SELECT first_name, last_name FROM users WHERE user_id = ‘$id’;

$id就是用户输入的 内容。

判断有没有SQL注入漏洞:
在这里插入图片描述
用户输入的数据为1’ and 1=1 #
这时候SQL语句发生了变化,在原有查询完成的 基础上会判断1 = 1(这显然是正确的),如果判断正确则才会有输出
#作用是注释(移除)后续SQL语句,去掉后面可能会造成影响的 SQL语句

在这里插入图片描述

在这里插入图片描述
用户输入的数据为1’ and 1=2 #
这时候SQL语句在原有查询完成后会有判断 1=2(这明显是错误的),如果判断正确才会有输出

在这里插入图片描述

这时候没有任何回显了,说明判断是错误的,这时候确定存在SQL注入漏洞

总结:
两次尝试1=1正常输出,1=2错误输出,证明SQL语句生效,存在SQL注入漏洞

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值