【网络安全】「漏洞原理」(一)SQL 注入漏洞之概念介绍
前言
严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。
【点击此处即可获取282G网络安全零基础入门资料】
SQL 注入介绍
SQL 注入(SQL Injection) 是一种常见的网络攻击技术,它利用应用程序对用户输入数据的处理不当,向数据库中注入恶意代码,从而达到攻击数据库的目的。
通常情况下,应用程序接收用户输入数据,将其作为参数传递给数据库执行 SQL 查询语句。如果应用程序没有正确地过滤和验证用户的输入,攻击者就可以通过构造恶意输入,将 SQL 代码注入到查询语句中,从而执行恶意操作,比如删除、修改或者泄露数据库中的敏感信息。
例如,假设一个应用程序接收用户输入的用户名和密码,然后通过以下 SQL 查询语句验证用户是否存在:
1.SELECT * FROM users WHERE username = ‘ u s e r n a m e ′ A N D p a s s w o r d = ′ username' AND password = ' username′ANDpassword=′password’
如果应用程序没有对用户输入进行过滤和验证,那么攻击者可以通过构造恶意输入,将 SQL 代码注入到查询语句中,例如
1.username = ‘admin’ OR 1=1 --’
2
这个恶意输入将查询语句变为:
1.SELECT * FROM users WHERE username = ‘admin’ OR 1=1 --’ AND password = ‘$password’
这个查询语句中的 OR 1=1 将始终返回 True,因此该查询将返回所有用户的信息,而不仅仅是管理员账户信息。攻击者可以利用这种方式来绕过身份验证、获取敏感信息或者进行其他恶意操作。
运行结果:

注入漏洞分类
常见的 SQL 注入类型包括:数字型和字符型。但不管注入类型如何,攻击者的目的只有一个,那就是绕过程序限制,使用户输入的数据带入数据库执行,利用数据库的特殊性获取更多的信息或者更大的权限。
数字型注入
数字型 SQL 注入发生在应用程序将用户输入作为数值类型(如整数、浮点数)直接插入到 SQL 查询语句中时,攻击者可以通过在用户输入中添加特定的SQL语法来修改查询。例如,考虑以下示例的查询:
1.SELECT * FROM users WHERE id = $user_id;
如果应用程序没有正确验证和过滤用户提供的 $user_id 值,攻击者可以在输入中注入额外的 SQL 代码,如下所示:
1.$user_id = 1'
SQL 语句为 SELECT * FROM users WHERE id = 1’,这样的语句肯定会报错,导致脚本程序无法从数据库中正常获取数据,从而使得原来的页面出现异常;

2.$user_id = 1 and 1 = 1
SQL 语句为 SELECT * FROM users WHERE id = 1 and 1 = 1,语句正常执行,返回数据与原始请求无差异;

3.$user_id = 1 and 1 = 2
SQL 语句为 SELECT * FROM users WHERE id = 1 and 1 = 2,语句正常执行,但却无法查询出数据,因为 and 1 = 2 始终为假,所以返回数据与原始请求存在差异;

如果以上三个步骤全部满足,则程序就可能存在 SQL 注入漏洞;
不过,也不需要过于担心,因为这种数字型注入最多出现在 ASP、PHP 等弱类型语言中,弱类型语言会自动推导变量类型;而对于 Java、C# 这类强类型语言,如果试图把一个字符串转换为 int 类型,则会抛出异常,无法继续执行。所以,强类型的语言很少存在数字型注入漏洞。
字符型注入
数字型与字符型注入最大的区别在于:数字型不需要单引号闭合,而字符串类型一般使用单引号来闭合。
例句如下所示:
SELECT * FROM users WHERE username = ‘admin’;
字符型注入最关键的是如何闭合 SQL 语句以及注释多余的代码。
当攻击者进行 SQL 注入时,如果输入 admin and 1=1,则无法进行注入,因为 admin and 1=1 会被数据库当做查询的字符串,SQL 语句如下所示:
1.SELECT * FROM users WHERE username = 'admin and 1=1';
运行结果:

只要是字符串类型注入,都必须闭合单引号以及注释多余的代码。
SQLMap
SQLMap 是一款开源的自动化 SQL 注入工具。它可以用来检测和利用 Web 应用程序中的 SQL 注入漏洞。
SQLMap 可以自动进行漏洞检测、漏洞利用和数据库提权等操作,它支持各种不同类型的数据库,并且具有强大的功能和灵活的配置选项。

下面是使用 SQLMap 的一些步骤:
步骤1:收集目标信息。
在进行安全检查之前,需要收集目标 Web 应用程序的相关信息,如 URL、参数等。这些信息将在后续的步骤中使用。
步骤2:进行漏洞扫描。
使用以下命令启动 SQLMap 并进行漏洞扫描:
sqlmap -u <target_url>
运行结果:

步骤3:获取数据库。
sqlmap -u <target_url> --dbs
使用 --dbs 参数读取数据库。
步骤4:选择数据库。
根据漏洞扫描的结果,选择一个数据库进行深入检查。假设选择数据库名为 db_name。
步骤5:探测数据库信息。
运行以下命令来收集有关选定数据库的信息:
sqlmap -u <target_url> -D db_name --tables
命令将列出目标数据库中的所有表。
步骤6:选择一个表。
选择要进一步探测的表。假设选择表名为 table_name。
步骤7:提取表数据。
运行以下命令来提取选定表的数据:
sqlmap -u <target_url> -D db_name -T table_name --dump
命令将提取并显示选定表的所有数据。
要获得更多输出并了解 SQLMap 正在做什么,可以使用 -v 标志增加详细级别 0-6(默认 1)。
0: Show only Python tracebacks, error and critical messages.
1: Show also information and warning messages.
2: Show also debug messages.
3: Show also payloads injected.
4: Show also HTTP requests.
5: Show also HTTP responses’ headers.
6: Show also HTTP responses’ page content.

防止措施
SQL 注入攻击的问题最终归于用户可以控制输入,有输入的地方,就可能存在风险。
要防止SQL注入,可以采取以下措施:
1,使用参数化查询或预编译语句:使用参数化查询或预编译语句可以将用户输入作为参数传递给数据库,而不是将其直接拼接到 SQL 查询语句中,这样可以防止恶意用户通过输入特殊字符来修改原始查询。
2.输入验证和过滤:对于用户输入的数据,进行验证和过滤,确保只接受预期的数据类型和格式,使用正则表达式、白名单过滤或黑名单过滤等方法来限制输入的内容。
3.最小权限原则:为数据库用户分配最小的权限,避免给用户过多的权限,限制用户的操作范围。
4.定期更新和修复漏洞:及时关注数据库和应用程序的安全公告,及时更新和修复已知的漏洞。
5.强化安全意识培训:通过培训和教育,提高开发人员和相关人员对 SQL 注入漏洞的认识和理解,及时更新和运行常规的安全检查工具。
后记
本文介绍了 SQL 注入的概念,划分了数字型和字符型注入两种类型,并介绍了 SQLMap 工具的使用。同时,提出了防止 SQL 注入的措施,通过综合采取这些措施,我们可以建立更安全的应用程序,并保护数据的安全性。
以上就是 SQL 注入漏洞之概念介绍 的所有内容了,希望本篇博文对大家有所帮助!
严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。
网络安全学习路线
对于零基础想入门网络安全的小伙伴,我为大家准备了一份网络安全学习资料,包括视频教程、成长路线、工具安装包、面试题等。
需要的小伙伴,👉点击此处即可获取哦👈





【以上资料需要的小伙伴点击此处即可获得】
相关文章:
【网络安全】「漏洞原理」(一)SQL 注入漏洞之概念介绍
前言 严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。 【点击此处即可获…...
Go语言错误处理最佳实践
错误处理实践 我们在go语言中设计error的处理体系时候, 一般都会去做下面两点 直接使用errors.New()生成error接口的值 扩展error接口, 并定义扩展error接口的实现类型 error接口是什么? go语言的error是一个接口类型, 其源码如下: type error interface {Error() string…...
python结合excel数据轻松实现接口自动化测试
在刚刚进入测试行业的时候,最开始也是做功能测试,我想很多伙伴和我一样,觉得自动化测试都很高端,很神秘。迫不及待的想去学习作自动化测试。 以前比较常用数据库python做自动化,后面发现excel个人觉得更加适合&#x…...
构建精致 Chrome 插件:开箱即用的 TypeScript 模板 | 开源日报 No.51
tonsky/FiraCode Stars: 72.7k License: OFL-1.1 Fira Code 是一种免费的等宽字体,具有编程连字符。 Fira Code 提供了丰富多样的箭头和标点符号调整功能。Fira Code 支持各种不同的字符变体、风格集和其他字体特性,以满足用户个性化需求。Fira Code …...
在Windows下自己从源码编译Python3.10.13成安装包
文章目录 (一)Python 3.10 的生命周期(一)下载源码(二)准备环境(三)编译(3.1)解压源码到目录(3.2)下载依赖(PCBuild&#…...
WIN10如何搭建自己的博客
引言: 路线说明: 在CSDN,博客园,简书等平台,可以直接在上面发表,用户交互做的好,写的文章百度也能搜索的到,这样速度也是最快的,不费心运营啥的。缺点是比较不自由&…...
uniapp 首页制作
uniapp拨打固定的电话 function Hotline() {// 拨打电话uni.makePhoneCall({phoneNumber: 19969547693})}页面跳转 //普通跳转function homepage() {uni.navigateTo({url: /pages/homepage/homepage});}//二、uni.redirectTo关闭当前页面,跳转到应用内的某个页面。…...
意大利航天飞行器公司【Sidereus】完成510万欧元融资
来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,位于意大利萨莱诺的航天飞行器公司Sidereus Space Dynamics今日宣布已完成510万欧元融资。 本轮融资由Primo Space和CDP Venture Capital Sgr领投,通过Italia Venture II - Fondo Impr…...
10-网络篇-DHCP获取的参数详解
一个设备接入路由器局域网时,是通过DHCP获取网络信息,从而完成网络配置的获取。如下图所示为windows系统通过DHCP所要获取的网络配置:IP、子网掩码、网关、DNS服务器。任何设备要上网前,都需要知道这几个参数,下面对这…...
MVCC底层原理
MVCC多版本并发控制机制 多版本多个undo日志 什么时候会获取到事务id 事务id的生成并不是通过begin/start/transaction命令得到的,是在执行第一个修改操作或者加入排他锁操作,才会向mysql申请真正的事务id,mysql内部是严格按照事务的启动顺…...
云原生Docker容器管理
目录 docker容器的管理 容器创建 查看容器的运行状态 启动容器 创建并启动容器 终止容器运行 删除容器 容器的进入 查看容器详细信息 复制到容器中 从容器复制文件到主机 容器的导出与导入 导出 导入 相当于一个进程,性能接近于原生,几乎没有损…...
1.Cesium For Unity插件安装
1.Unity安装 先安装Unity Hub,然后在里面安装Unity。 2.新建工程 新建项目 选择项目类型 3. 导入Cesium包 打开新建的项目,在菜单栏选择Edit->Project Settings->Package Manager.并添加Cesium的包信息。 Name: Cesium URL: https://unity.pkg.cesium.com Sco…...
浅述安防视频可视化场景中TSINGSEE青犀AI智能化应用的分析
随着社会的不断发展和安防需求的不断提升,安防视频可视化场景已经成为人们关注的焦点。而随着人工智能、大数据等技术的不断发展,智能化应用在安防视频可视化场景中的应用也越来越多。本文将分析安防视频可视化场景中的智能化应用,主要包括以…...
百度飞浆ResNet50大模型微调实现十二种猫图像分类
12种猫分类比赛传送门 要求很简单,给train和test集,训练模型实现图像分类。 这里使用的是残差连接模型,这个平台有预训练好的模型,可以直接拿来主义。 训练十几个迭代,每个批次60左右,准确率达到90%以上…...
多服务器云探针源码(服务器云监控)/多服务器多节点_云监控程序python源码
源码简介: 多服务器云探针源码(服务器云监控),支持python多服务器多节点,云监控程序源码。它是一款很实用的云探针和服务器云监控程序源码。使用它可以帮助管理员能够快速监控和管理各种服务器和节点,实用性强。 源码链接: 网盘…...
ESP8266 WiFi物联网智能插座—下位机软件实现
目录 1、软件架构 2、开发环境 3、软件功能 4、程序设计 4.1、初始化 4.2、主循环状态机 4.3、初始化模式 4.4、配置模式 4.5、运行模式 4.6、重启模式 4.7、升级模式 5、程序功能特点 5.1、日志管理 5.2、数据缓存队列 本篇博文开始讲解下位机插座节点的MCU软件…...
微信小程序--下拉选择框组件封装,可CV直接使用
一、起因 接到的项目需求,查看ui设计图后,由于微信小程序官方设计的下拉选择框不符合需求,而且常用的第三方库也没有封装类似的,所以选择自己自定义组件。在此记录一下,方便日后复用。 ui设计图如下: 微信官方提供的选择框 对比发现并不能实现我们想要的功能。 二、自定义组件…...
代码随想录算法训练营第五十九天 |647. 回文子串、516.最长回文子序列、动态规划总结篇
一、647. 回文子串 题目链接/文章讲解:代码随想录 思考: 1.确定dp数组(dp table)以及下标的含义 如果本题定义dp[i] 为 下标i结尾的字符串有 dp[i]个回文串的话: 会发现很难找到递归关系,dp[i] 和 dp[i-1]…...
互联网性能和可用性优化CDN和DNS
当涉及到互联网性能和可用性优化时,DNS(Domain Name System)和CDN(Content Delivery Network)是两个至关重要的元素。它们各自发挥着关键作用,以确保用户能够快速、可靠地访问网站和应用程序。在本文中&…...
使用 ErrorStack 在出现报错 ORA-14402 时产生的日志量
0、测试结论: 测试结果:设置 ErrorStack 级别为 1 时产生 Trace 的日志量最小,大小为 308K,同时在 alert 日志中也存在记录。 1、准备测试数据: sqlplus / as sysdba show pdbs alter session set containerpdb; …...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
