SQL注入漏洞—SQL注入简介与原理

一、SQL注入基础
1.1 什么是SQL注入漏洞

SQL注入漏洞从1998年圣诞节大火以来长盛不衰,虽然开发人员想出各种方法对他进行围追堵截,却始终无法将其赶尽杀绝,SQL注入的根本原因就是将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再讲这些参数传递给后台的SQL服务器加以解析并执行。

1.2 简单的拓扑结构

  1. 数据库管理系统/数据库:这是整个架构的核心,存储和管理数据。数据库管理系统(DBMS)负责数据的存储、检索、更新和维护。

  2. 数据库服务器:数据库服务器是运行数据库管理系统的物理或虚拟服务器。它处理来自客户端的数据库请求,执行SQL查询,管理数据的访问和安全。

  3. 网站:这可能是指一个Web应用程序,它作为数据库和客户端之间的中间层。网站可以提供用户界面,允许用户通过Web浏览器与数据库交互。

  4. WEB服务器:WEB服务器负责处理HTTP请求和响应,它可能托管网站,并与数据库服务器通信以获取数据或执行操作。

  5. 客户端:客户端可以是用户的个人电脑、移动设备或其他终端设备。它们通过Web浏览器或专用客户端软件与WEB服务器进行交互,间接地与数据库服务器通信。

  6. 用户1的PC 和 用户2的PC:这些代表使用数据库服务的最终用户。他们通过客户端软件或Web浏览器访问数据库。

  7. 黑客的PC:这可能表示一个潜在的安全威胁,黑客可能试图通过非法手段访问或破坏数据库。

在这个拓扑结构中,数据流通常是这样的:

  • 用户通过他们的PC(用户1的PC和用户2的PC)访问网站。
  • 网站作为前端应用程序,处理用户的请求,并将这些请求转发给WEB服务器。
  • WEB服务器与数据库服务器通信,执行数据库操作,如查询、更新等。
  • 数据库服务器处理这些操作,并将结果返回给WEB服务器。
  • WEB服务器将结果发送回用户,完成数据的请求和响应循环。

这种多层架构有助于分离关注点,提高安全性和可维护性。例如,如果数据库服务器直接暴露给互联网,它可能会面临更多的安全风险。通过使用WEB服务器作为中介,可以更好地控制访问和实施安全措施。

1.3 SQL注入漏洞是怎样形成的

  1. 用户输入:用户通过网站提交了一个请求,例如请求查看ID为36的文章。这个请求包含了一个参数,即文章的ID。

  2. 动态构造SQL语句:应用程序根据用户输入的参数动态构造SQL查询语句。在这个例子中,如果应用程序直接将用户输入拼接到SQL语句中,可能会形成如下的SQL语句:

  3. SELECT * FROM Article WHERE id = 36;

    如果用户输入的是36,那么一切正常。但是,如果用户输入的是恶意构造的SQL代码,比如36'; DROP TABLE Article; --,那么SQL语句就会变成:

    SELECT * FROM Article WHERE id = 36'; DROP TABLE Article; --;

    这里,恶意用户利用了SQL语句的分号(;)来结束正常的查询,然后添加了删除表的命令。

  4. 执行恶意SQL:如果应用程序没有对用户输入进行适当的验证和过滤,那么这个恶意构造的SQL语句就会被执行。在这个例子中,DROP TABLE Article; 会删除整个Article表,导致数据丢失。

  5. 数据库执行:数据库服务器执行了这个恶意的SQL语句,因为它看起来像是一个合法的查询请求。

  6. 返回结果:数据库执行了恶意的SQL语句,可能会返回错误信息或者执行了预期之外的操作。

  7. 展示给用户:客户端可能会收到一个错误页面或者被删除的数据,这取决于应用程序如何处理数据库的错误。

常见SQL注入过程如下:

1.4 SQL注入的危害

绕过登陆验证:使用万能密码登陆网站后台等;

获取敏感数据:获取网站管理员账号、密码等;

文件系统操作:列目录,读取、写入文件等;

注册表操作:读取、写入、删除注册表等。

1.5 SQL分类

1)根据注入的方式来分类: get注入、post注入、cookie注入

  1. GET注入

    • 概念:GET注入发生在用户通过URL传递参数时,攻击者可以在URL的查询字符串中插入恶意代码或数据。
    • 示例:如果一个网站的搜索功能允许用户通过URL的查询参数来搜索内容,攻击者可以在查询参数中添加SQL代码或其他恶意脚本,如http://example.com/search?query=1' AND 1=0 UNION SELECT * FROM users WHERE 1=1 --
    • 风险:恶意代码可能会被执行,导致数据泄露、数据库被破坏或其他安全问题。
  2. POST注入

    • 概念:POST注入是通过HTTP POST请求提交表单数据时发生的,攻击者在表单数据中插入恶意代码或数据。
    • 示例:在登录表单中,用户提交用户名和密码,攻击者可以在POST数据中添加额外的字段和值,例如username=normaluser&password=normalpass&admin=true,尝试绕过权限检查。
    • 风险:如果应用程序没有正确验证和清理输入数据,恶意数据可能会被用于权限提升、数据操纵等。
  3. Cookie注入

    • 概念:Cookie注入是攻击者通过操纵HTTP Cookie中的值来注入恶意数据或脚本。
    • 示例:如果应用程序使用Cookie来存储会话信息或用户偏好,攻击者可能会尝试篡改Cookie值,例如通过客户端脚本或通过在浏览器中直接编辑Cookie来实现。
    • 风险:恶意的Cookie值可能会被用来进行会话劫持、跨站脚本攻击(XSS)或其他基于会话的攻击。

2)注入方式分类(根据注入的方式、是否有直接反馈、以及注入的复杂性来区分):有回显的注入、盲注、二次盲注、报错注入、堆叠注入、宽字节注入

  1. 有回显的注入

    • 这种注入发生在攻击者能够直接从数据库的错误消息或查询结果中看到他们注入的SQL代码的效果。例如,如果注入导致数据库返回一个错误消息,攻击者可以看到注入的SQL片段被执行了。
  2. 盲注

    • 盲注是指攻击者无法直接从数据库获得关于注入的反馈,而是需要通过应用程序的行为来推断注入的效果。这通常涉及到构造一系列的条件语句,然后观察应用程序的响应时间或行为变化来判断条件是否为真。
  3. 二次盲注

    • 二次盲注是一种特殊的盲注,攻击者利用现有的盲注漏洞来进一步获取信息。例如,如果攻击者已经能够通过盲注确定某些数据的存在,他们可能会使用二次盲注来获取这些数据的实际内容。
  4. 报错注入

    • 报错注入是利用数据库的错误消息来获取信息的注入技术。攻击者构造特定的SQL语句,触发数据库的错误,然后从错误信息中提取数据库的结构、版本或其他敏感信息。
  5. 堆叠注入

    • 堆叠注入发生在攻击者能够向现有的SQL语句后面添加额外的SQL语句。如果应用程序没有正确终止或清理用户输入,攻击者可以添加分号(;)后跟新的SQL语句,从而执行多个命令。
  6. 宽字节注入

    • 宽字节注入是一种利用多字节字符集(如UTF-8)中的宽字节字符来绕过输入验证的注入技术。攻击者可以通过在输入中使用特定的宽字节字符来改变SQL语句的结构,从而绕过某些类型的输入过滤。
1.6 SQL注入简单检测

利用单引号'、双引号" 或 \ 来检测是否存在注入,如果爆出SQL错误或出现不回显,大概率存在SQL注入漏洞

哪些地方可能存在漏洞

最普遍的注入漏洞是由于参数值过滤不严导致的。

Cookie注入漏洞普遍存在于ASP的程序中。

参数名、目录名、文件名等注入漏洞通常存在于有网站路由的程序中

1.7 判断注入漏洞的依据

二、SQL注入简单利用
2.1 SQL注入流程

1)判断是否存在SQL注入,与注入的类型

  1. 先看类型,第一种有报错注入的,用 ‘ 先来判断,如果报错就说明有SQL注入
  2. 遇到盲注需要用逻辑语句,and语句,例如 
and 1=1 and 1=2,OR 3*2*0=6 AND 000909=000909 --'

2)判断SQL注入是字符型还是数字型

  1. 字符型注入:

    • 原理:当输入参数为字符串时,如果SQL语句中使用单引号来闭合参数值,且攻击者能够通过构造输入来改变SQL语句的结构,通常就是字符型注入。
    • 判断方法:可以通过在输入参数后添加单引号(如 '),如果这导致SQL查询出错或页面报错,可能是因为单引号闭合了参数值,导致SQL语句结构被破坏。此外,如果添加 ' AND 1=1 或 ' AND 1=2 后页面的响应不同,这可能表明存在字符型注入漏洞。
  2. 数字型注入:

    • 原理:当输入参数为数字时,如果攻击者能够通过修改数字参数来影响SQL语句的逻辑,这通常是数字型注入。
    • 判断方法:可以通过修改数字参数(如 id=3 改为 id=3'),如果页面报错,可能是因为SQL语句尝试将字符串 ' 作为数字值的一部分,导致语法错误。如果添加 AND 1=1 或 AND 1=2 后页面的响应不同,这可能表明存在数字型注入漏洞

3)爆裂数(Explode Column Count)

  1. 使用ORDER BY子句来确定数据库表中的列数。通过逐步增加ORDER BY后面的数字,直到遇到错误,可以推断出正确的列数。例如,如果ORDER BY 3没有错误,而ORDER BY 4导致错误,那么可以知道表有3列。

4)获取数据库名

利用SQL函数DATABASE()来获取当前数据库的名称。在联合查询(UNION SELECT)中使用这个函数,可以返回当前数据库的名字

5)爆表名(Explode Table Names)

使用UNION SELECT结合group_concat()函数,从information_schema.tables表中获取当前数据库的所有表名。这里的group_concat()函数用于将多个结果合并为一个字符串。查询条件where table_schema=database()确保只获取当前数据库的表名。

5)爆列与爆值

爆列和爆值是SQL注入攻击的关键步骤,它们允许攻击者绕过应用程序的正常逻辑,直接与数据库交互,从而获取他们想要的数据。为了防止这些攻击,开发者应该对用户输入进行严格的验证和过滤,使用参数化查询,并限制数据库的权限。

  1. 爆列(Exploring Columns)

    • 爆列是指攻击者尝试确定数据库表中列的数量和类型的过程。在SQL注入攻击中,攻击者首先需要了解目标数据库表的结构,包括表中有多少列以及每列的数据类型。
    • 这通常通过使用ORDER BY子句来实现。攻击者通过改变ORDER BY子句中的数字,来确定数据库表的列数。例如,如果ORDER BY 1没有导致错误,而ORDER BY 2导致错误,那么攻击者可以推断出表只有一列。
    • 爆列的目的是为后续的注入攻击提供必要的信息,比如在进行联合查询(UNION attack)时,需要知道查询结果需要与原查询的列数和数据类型相匹配。
  2. 爆值(Extracting Values)

    • 爆值是指攻击者利用SQL注入漏洞从数据库中提取数据的过程。一旦攻击者了解了数据库表的列数和数据类型,他们就可以构造更复杂的SQL语句来获取敏感信息。
    • 爆值可以通过联合查询(UNION attack)来实现,攻击者构造一个UNION SELECT语句,将原查询的结果与他们想要提取的数据结合起来。例如,如果攻击者知道用户表中有两列,他们可以构造一个查询来获取用户名和密码:
      ' UNION SELECT username, password FROM users --
    • 爆值还可以通过其他技术实现,比如基于时间的盲注(Blind SQL Injection),攻击者通过构造特定的SQL语句,根据页面响应时间的变化来推断数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法08 广/宽度优先搜索及相关问题详解

这是《C算法宝典》算法篇的第08节文章啦~ 如果你之前没有太多C基础,请点击👉专栏:C语法入门,如果你C语法基础已经炉火纯青,则可以进阶算法👉专栏:算法知识和数据结构👉专栏&#xff…

2024三掌柜赠书活动第二十五期:Rust 游戏开发实战

目录 目录 前言 Rust语言概念 关于《Rust 游戏开发实战》 Rust系统编程的核心点 Rust开发的关键技术和工具 内容简介 作者简介 书中前言/序言 内容介绍 《Rust 游戏开发实战》全书速览 图书目录 结束语 前言 技术圈最近的编程语言新秀当属Rust莫属,Rus…

祝贺!FISCO BCOS伙伴科大讯飞获国家科学技术进步奖一等奖

6月24日,2023年度国家科学技术奖励大会在京召开,金链盟理事单位、开源工作组成员单位、FISCO BCOS产业应用合作伙伴科大讯飞作为第一完成单位的“多语种智能语音关键技术及产业化”项目获得国家科学技术进步奖一等奖。 这是深度学习引发全球人工智能浪潮…

多路h265监控录放开发-(14)通过PaintCell自定义日历控件继承QCalendarWidget的XCalendar类

首先创建一个新类XCalendar继承QCalendarWidget类&#xff0c;然后在UI视图设计器中把日历提升为XCalendar&#xff0c;通过这个函数自己设置日历的样式 xcalendar.h #pragma once #include <QCalendarWidget> class XCalendar :public QCalendarWidget { public:XCal…

“一站式企业服务平台”全景解析

在当今市场竞争日益激烈、商业环境瞬息万变的大经济环境下&#xff0c;企业在经营过程中常常面临政策不知道摸不清、资源获取困难、融资渠道狭窄、市场开拓不畅、政务办理繁琐等诸多问题&#xff0c;为了解决这些问题&#xff0c;帮扶企业发展&#xff0c;同时优化区域营商环境…

【Spring】SpringCloudAlibaba学习笔记

Nacos Nacos是一个更易于构建云原生应用的动态服务发现/服务配置和服务管理平台核心功能: 服务注册: Nacos Client会通过发送REST请求向Nacos Server注册自己的服务, 提供自己的元数据, 如ip地址/端口等信息; Nacos Server收到注册请求后, 就会把这些信息存储在Map中服务心跳:…

前端基础--Vue2

前端技术发展史(了解) 1.前端历史 1.1.静态网页 1990 html 1.2.异步刷新-操作dom 1995 javascript 1.3.动态网站 Asp/jsp&#xff08;java&#xff09;,php等&#xff0c;后台臃肿 1.4.Ajax成为主流 异步请求 1.5.Html5 被认为是互联网的核心技术之一。HTML产生于19…

12,SPI

Flash芯片&#xff1a;W25Q64&#xff0c;可以看成一个储存器 W25Q64芯片和单片机之间的通信方式是SPI SPI:串行同步全双工&#xff0c;主从通信 判断一个设备是不是SPI通信&#xff0c;看是否有这几个线&#xff1a;SCK&#xff0c;CS&#xff0c;MISO&#xff0c;MOSI SCK…

探索Android架构设计

Android 应用架构设计探索&#xff1a;MVC、MVP、MVVM和组件化 MVC、MVP和MVVM是常见的三种架构设计模式&#xff0c;当前MVP和MVVM的使用相对比较广泛&#xff0c;当然MVC也并没有过时之说。而所谓的组件化就是指将应用根据业务需求划分成各个模块来进行开发&#xff0c;每个…

Three.js鼠标拖动设置骨骼姿态

实现 根据SkinnedMesh生成Mesh 作为射线检测的目标&#xff08;射线检测SkinnedMesh存在不足 无法应用骨骼形变的顶点 &#xff09;点击模型 获取点击位置对应的骨骼拖拽鼠标设置骨骼旋转角度&#xff08;使用TransformControl选中点击的骨骼 设置轴为XYZE 并隐藏控件 主动触发…

马面裙的故事:汉服如何通过直播电商实现产业跃迁

【潮汐商业评论/原创】 波澜壮阔的千里江山在马面裙的百褶上展开&#xff0c;织金花纹在女性的步伐之间若隐若现&#xff0c;从明清到现代&#xff0c;如今马面裙又流行了回来&#xff0c;成为女性的流行单品&#xff0c;2024年春节期间&#xff0c;马面裙更是成为华夏女孩们的…

仓库管理系统14--仓库设置

1、添加窗体 <UserControl x:Class"West.StoreMgr.View.StoreView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.openxmlformats.…

Str.format()方法

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 在Python2.6之后&#xff0c;提供了字符串的format()方法对字符串进行格式化操作。format()功能非常强大&#xff0c;格式也比较复杂&…

选择第三方软件测试机构做验收测试的好处简析

企事业单位在自行开发完软件系统或委托软件开发公司生产软件之后&#xff0c;有一个必经流程就是验收测试&#xff0c;以验证该产品是否符合用户需求、是否可以上线。为了客观评估所委托生产的软件质量&#xff0c;第三方软件测试机构往往成为企事业单位做验收测试的首选&#…

Bad owner or permissions on C:\\Users\\username/.ssh/config > 过程试图写入的管道不存在。

使用windows连接远程服务器出现Bad owner or permissions 错误 问题&#xff1a; 需要修复文件权限 SSH 配置文件应具有受限权限以防止未经授权的访问 确保只有用户对该.ssh/config文件具有读取权限 解决方案&#xff1a; 在windows下打开命令行&#xff0c;通过以下命令打开文…

PS使用批量脚本生成海报实践

前言 设计朋友有需求做一批邀请函&#xff0c;有几十个人名&#xff0c;需要把人名加到海报中&#xff0c;PS里一个一个添加人名很麻烦&#xff0c;于是来问我有没有什么办法能够批量去添加。 希望把人名加到红框区域内 尝试用ps的脚本进行处理 准备 PS(版本2021&#xff0c;…

HTML静态网页成品作业(HTML+CSS)——企业摄影网介绍网页(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有3个页面。 二、作品演示 三、代…

Micro-ROS是什么?

Micro-ROS是ROS&#xff08;Robot Operating System&#xff0c;机器人操作系统&#xff09;生态系统的一个重要组成部分&#xff0c;专为微控制器&#xff08;Microcontrollers&#xff09;设计的轻量级ROS版本。它的目标是在资源有限的嵌入式平台上实现ROS 2的功能&#xff0…

各省药品集中采购平台-地方药品集采分析数据库

国家第十批药品集中采购的启动时间暂未明确&#xff0c;但即将到来&#xff0c;在5月&#xff0c;国家医保局发布了《关于加强区域协同做好2024年医药集中采购提质扩面的通知》&#xff0c;其中明确指出将“开展新批次国家组织药品和医用耗材集中带量采购&#xff0c;对协议期满…

转转游戏MQ重构:思考与心得之旅

文章目录 1 背景1.1 起始之由1.2 重构前现状1.3 问题分析 2 重构2.1 目标2.2 制定方案2.2.1 架构设计2.2.2 实施计划2.2.3 测试计划 2.3 部分细节设计 3. 总结 1 背景 游戏业务自 2017 年启航&#xff0c;至今已近乎走过七个春秋&#xff0c;历经漫长岁月的发展&#xff0c;不…