【网络安全】「漏洞原理」(一)SQL 注入漏洞之概念介绍

news2024/11/13 21:59:54

前言

严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。

点击此处即可获取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 = ' usernameANDpassword=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 注入漏洞之概念介绍 的所有内容了,希望本篇博文对大家有所帮助!
严正声明:本博文所讨论的技术仅用于研究学习,旨在增强读者的信息安全意识,提高信息安全防护技能,严禁用于非法活动。任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。

网络安全学习路线

对于零基础想入门网络安全的小伙伴,我为大家准备了一份网络安全学习资料,包括视频教程、成长路线、工具安装包、面试题等。
需要的小伙伴,👉点击此处即可获取哦👈
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上资料需要的小伙伴点击此处即可获得】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1080282.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊MySql索引的类型以及失效场景

文章目录 概念常见的索引1.B树索引2.哈希索引3.全文索引4.空间索引5.聚集索引 如何设计合理&#xff1f;1.明确索引需求2.选择索引列3.选择索引类型4.考虑索引维护开销5.设计联合索引6.删除不必要索引7.关注索引统计信息8.测试查询效果 常见不生效场景1.全表扫描2.索引列计算3.…

容器轻松上阵,优雅下线才是胜负之道

概述 优雅关闭&#xff1a; 在关闭前&#xff0c;执行正常的关闭过程&#xff0c;释放连接和资源&#xff0c;如我们操作系统执行shutdown。 目前业务系统组件众多&#xff0c;互相之间调用关系也比较复杂&#xff0c;一个组件的下线、关闭会涉及到多个组件。 对于任何一个线…

(2022|NIPS,CogLM,分层,LoPAR,icetk)CogView2:通过分层 Transformer 更快更好地文本到图像生成

CogView2: Faster and Better Text-to-Image Generation via Hierarchical Transformers 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.…

基于SpringBoot+Vue的教师人事档案管理系统

1 简介 基于SpringBootVue的教师人事档案管理系统&#xff0c;教师人事档案管理系统利用信息的合理管理&#xff0c;动态的、高效的、安全的实现了教师的各种需求&#xff0c;改变了传统的网上查看方式&#xff0c;使教师可以足不出户的在线查看最适合自己个人档案、奖惩信息、…

百度一面:谈谈 @Transactional 的原理和坑

百度一面&#xff1a;谈谈 Transactional 的原理和坑 这篇文章&#xff0c;会先讲述 Transactional 的 4 种不生效的 Case&#xff0c;然后再通过源码解读&#xff0c;分析 Transactional 的执行原理&#xff0c;以及部分 Case 不生效的真正原因。 项目准备 下面是 DB 数据和…

js的BoM事件(二)

js的BoM事件&#xff08;二&#xff09;&#xff0c;上一篇的补充 一.alert,confirm二.prompt三.open四.close 一.alert,confirm 实例&#xff1a; alert(hi); confirm(message);二.prompt <body><button ></button><script>var btndocument.querySe…

dbeaver 插入别名设置禁用

1&#xff0c;前提 最近换了一个数据库连接工具&#xff0c;初次使用&#xff0c;非常别扭。 2&#xff0c;问题 首先遇到的第一个问题是 每次输入from table时&#xff0c;后面就会自动添加一个表别名 tt&#xff0c;然后语句就变成这样 from table tt &#xff0c;所以每次…

全面深入了解自动化测试

一、自动化测试 在软件测试中&#xff0c;自动化测试指的是使用独立于待测软件的其他软件来自动执行测试、比较实际结果与预期并生成测试报告这一过程。在测试流程已经确定后&#xff0c;测试自动化可以自动执行的一些重复但必要测试工作。也可以完成手动测试几乎不可能完成的…

飞凌嵌入式受邀参加「NXP创新技术论坛」

2023年10月10日&#xff0c;「NXP创新技术论坛」在深圳湾万丽酒店举行&#xff0c;飞凌嵌入式作为NXP金牌合作伙伴受邀参加此次论坛&#xff0c;与众多智能工业行业的伙伴深入交流市场趋势与行业洞察&#xff0c;共同促进未来市场的发展。 本次论坛&#xff0c;飞凌嵌入式展示了…

GaussDB向量数据库为盘古大模型再添助力

在今年7月7日的华为开发者大会2023(Cloud)期间,华为云盘古大模型3.0正式发布。目前盘古大模型已在政务、金融、制造、医药研发、气象等诸多行业发挥巨大价值。此次华为云发布的GaussDB向量数据库,具备一站式部署、全栈自主创新优势,不仅如此,它的ANN算法在行业排名第一,…

龙讯旷腾:如何建立基于第一性原理的正向研发模式,原子级计算伴随的时间和空间尺度增长将带来的变革

2023年10月8-11日&#xff0c;由中国材料研究学会主办的第四届中国新材料产业发展大会在浙江温州隆重举行。来自全国各地的6000余名新材料专家、企业家、投资家、当地高等院校和企事业单位的代表以及51位两院院士出席了本次大会。龙讯旷腾总经理吕海峰特邀做“先进材料数字化研…

点击、拖曳,15分钟搞定BI零售数据分析

早几年做数据分析还很依赖IT&#xff0c;过程复杂、耗时长、灵活性差&#xff0c;但这几年随着BI智能数据分析技术的成长&#xff0c;零售数据分析发生了翻天覆地的变化&#xff0c;其中最直观的一点就是&#xff1a;点击、拖曳&#xff0c;15分钟内就能搞定BI零售数据分析。 …

uCOSIII实时操作系统 五 任务API(任务创建和删除)

任务创建和删除 引入&#xff1a;一个任务的三要素是任务主体函数&#xff0c;任务栈&#xff0c;任务控制块&#xff0c;那么怎样吧这个三要素联系在一起呐&#xff1f; 任务创建&#xff1a; 在UCOSIII中我们通过函数OSTaskCreate()来创建任务。 作用&#xff1a;任务控制块…

有root权限的共享服务器,返现福利

以下是目前各类型服务器配置与价格目录&#xff1a; 可咨询文末微信号领取返现福利&#xff0c;注册链接&#xff1a; 西柚云超算https://www.xiyoucloud.net/aff/YADJJHWA 微信号&#xff1a;生信小博士

需求解析思路

需求&#xff1a;如果一个学生N天没学习了 根据question_user_submit_record&#xff08;N配置&#xff09;&#xff0c;公众号推送通知到java8c.com学习 由于写代码需要严谨快速&#xff1a; 当前写代码方式&#xff1a;先写controller&#xff0c;再写sql语句&#xff0c;…

Postman历史版本下载

1. 下载对应版本的postman 历史版本下载 请把下面链接的"版本号"替换为指定的版本号&#xff0c;例如&#xff1a;8.8.0 Windows64位 ​https://dl.pstmn.io/download/version/版本号/win64​ Windows32位 https://dl.pstmn.io/download/version/版本号…

SpringBoot+Dubbo+Nacos 开发Demo

1、是什么 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架&#xff0c;使得应用可通过高性能的RPC实现服务的输出和输入功能&#xff0c;可以和Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架&#xff0c;它提供了三大核心能力&#xff1a;面向接口的…

MinIO的安装与使用

文章目录 1.MINIO是什么&#xff1f;2.MINIO安装3.启动脚本4.打开MINIO页面5.MC命令6.MINIO备份脚本 1.MINIO是什么&#xff1f; MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。 MinIO与…

智能导诊系统、智能在线问诊系统源码

一、需求背景 目前各大城市的著名医院吸引越来越多的患者&#xff0c;咨询台的服务需求也随之增加。医院虽然设置了少数咨询台&#xff0c;但由于患者人数众多&#xff0c;咨询台往往无法满足患者咨询要求&#xff0c;护士工作量巨大&#xff0c;医院巨大的规模也让咨询台数量…

佳音通讯400电话中心:在线自选,惠及企业

在当今竞争激烈的商业环境中&#xff0c;企业需要提供卓越的客户服务来脱颖而出。而一个高效的400电话中心则成为了越来越多企业的选择。佳音通讯400电话中心官方网站是企业选择400电话服务的首选平台&#xff0c;提供了在线自选功能&#xff0c;让企业能够根据自身需求灵活选择…