什么是SQL注入
不论是学习后端开发/数据库/网络安全,SQL注入安全隐患反复被提起 到底什么是SQL?
维基百科的定义: ![在这里插入图片描述](https://img-blog.csdnimg.cn/7e155af04c4040fa9d14fdf2784135c0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTE1NTA3NTA=,size_20,color_FFFFFF,t_70,g_se,x_16)
(1)什么是SQL? SQL是用来操控数据库的语言 (2)举一个例子,现在我们要查询电影“长津湖”的票房数据: 先想象一下开发人员是如何书写代码从数据库中拿到数据的: 作为一名黑客如何思考? ![在这里插入图片描述](https://img-blog.csdnimg.cn/ad16b4c30e9944ac8625b0a083485d11.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTE1NTA3NTA=,size_20,color_FFFFFF,t_70,g_se,x_16)
SQL注入靶场练习- DVWA(1)
【1】首先将security调为low: (记住要点击“submit”)
【2】然后挑战模块SQL Injection ![在这里插入图片描述](https://img-blog.csdnimg.cn/7099a456c1954e1f97183be81c5bbc7d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTE1NTA3NTA=,size_10,color_FFFFFF,t_70,g_se,x_16)
首先尝试正常的 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b8b36840c5674615bba2a70226609180.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTE1NTA3NTA=,size_20,color_FFFFFF,t_70,g_se,x_16)
【3】尝试查看源码: ![在这里插入图片描述](https://img-blog.csdnimg.cn/dfaa330b27d24e4c847031b82daa8c7e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTE1NTA3NTA=,size_20,color_FFFFFF,t_70,g_se,x_16)
我将源码粘贴到了下面:
SQL Injection Source
vulnerabilities/sqli/source/low.php
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( '' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '' );
// Get results
while( $row = mysqli_fetch_assoc( $result ) ) {
// Get values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
echo "ID: {$id}First name: {$first}Surname: {$last}";
}
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 "ID: {$id}First name: {$first}Surname: {$last}";
}
} else {
echo "Error in fetch ".$sqlite_db->lastErrorMsg();
}
break;
}
}
?>
内容非常多,但是只需要关注SQL语句select ![在这里插入图片描述](https://img-blog.csdnimg.cn/245f9b821ec34d2ebd0fb276716c25e5.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTE1NTA3NTA=,size_20,color_FFFFFF,t_70,g_se,x_16)
$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语句 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3c743275c31e4486afff82544e5405b7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTE1NTA3NTA=,size_20,color_FFFFFF,t_70,g_se,x_16)
用户输入的数据为1’ and 1=2 # 这时候SQL语句在原有查询完成后会有判断 1=2(这明显是错误的),如果判断正确才会有输出 ![在这里插入图片描述](https://img-blog.csdnimg.cn/af3c378cd6aa409fbb0f23207ce5f88c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXFfNTE1NTA3NTA=,size_20,color_FFFFFF,t_70,g_se,x_16)
这时候没有任何回显了,说明判断是错误的,这时候确定存在SQL注入漏洞
总结: 两次尝试1=1正常输出,1=2错误输出,证明SQL语句生效,存在SQL注入漏洞
|