SQL注入(1) 您所在的位置:网站首页 怎么寻找漏洞的方法 SQL注入(1)

SQL注入(1)

2023-12-24 22:26| 来源: 网络整理| 查看: 265

什么是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 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 在这里插入图片描述

$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注入漏洞



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有