0


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']){caseMYSQL:// Check database$query="SELECT first_name, last_name FROM users WHERE user_id = '$id';";$result=mysqli_query($GLOBALS["___mysqli_ston"],$query)ordie('<pre>'.((is_object($GLOBALS["___mysqli_ston"]))?mysqli_error($GLOBALS["___mysqli_ston"]):(($___mysqli_res=mysqli_connect_error())?$___mysqli_res:false)).'</pre>');// Get resultswhile($row=mysqli_fetch_assoc($result)){// Get values$first=$row["first_name"];$last=$row["last_name"];// Feedback for end userecho"<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}mysqli_close($GLOBALS["___mysqli_ston"]);break;caseSQLITE: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 userecho"<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注入漏洞

标签: sql web安全 安全

本文转载自: https://blog.csdn.net/qq_51550750/article/details/122925031
版权归原作者 qq_51550750 所有, 如有侵权,请联系我们删除。

“SQL注入(1)--判断是否存在SQL注入漏洞”的评论:

还没有评论