Web安全:SQL注入漏洞详解,SQL注入常见功能、危害、分类、判断注入点、注入方式

news2024/9/25 15:25:08

「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等12个知识域的一百多个知识点,持续更新。

这一章节我们需要知道SQL注入常出现在那些功能,如何判断注入点,注入的分类有哪些以及具体的注入方式。

在这里插入图片描述

SQL注入的原理其实很简单:在传给后端的「参数」中构造「SQL语句」,改变原有的「SQL语法结构」,实现对数据库的操作。

SQL注入

  • 1、SQL注入常出现在哪些功能?
  • 2、SQL注入危害
  • 3、SQL注入分类
  • 4、判断是否存在SQL注入
  • 5、SQL注入方式
  • 6、SQL注入防御
    • 6.1、预编译

1、SQL注入常出现在哪些功能?

凡是涉及「数据库操作的功能」,都有可能存在SQL注入,比如:

  1. 搜索框等查询功能。
  2. 用户注册/用户登录功能。
  3. 密码找回功能。
  4. 用户资料修改功能。
  5. 以及其他同质化功能。

「流量」的角度来看,SQL注入经常出现在:

  1. Get请求传递的参数
  2. Post请求的表单里
  3. Cookie
  4. HTTP请求头的 User-Agent、X-Forworded-For、以及其他传递数据的字段。

2、SQL注入危害

SQL注入的危害主要取决于对数据的操作。

1)首先是数据的查询操作,也就是脱库,对应的危害是敏感信息泄露。

2)其次是数据的修改操作,比如把字段的值改为改成网页链接,对应的危害是网页篡改和挂马。

3)再就是数据的删除操作,删掉数据库的数据,导致系统瘫痪。

4)再就是写入后门文件,拿服务器的权限,远程控制。

3、SQL注入分类

根据输入的 「参数」类型,可以把SQL注入分为:「数值型」注入、 「字符型」注入。

  • 数值型注入:数值+括号型
  • 字符型注入:单引号字符型、双引号字符型、单引号字符串+括号型、双引号字符串+括号型

1)比如下面这个根据ID查询用户的功能。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xw240yvV-1645149522105)(E:\data\TyporaPages\image-20220212164303912.png)]
后台对应的SQL如下,「字段类型」是数值型,这种就是数值型注入。

select * from user where id = 1;

2)比如下面这个登录功能,输入的用户名和密码是字符串。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FF5m4MCS-1645149253353)(E:\data\TyporaPages\image-20220212164911231.png)]
后台对应的SQL如下,「字段类型」是字符型,这种就是字符型注入。

select * from user 
where username = 'zhangsan' and password = '123abc';

因为值可以用单双引号、括号包裹,所以在数值型注入和字符型注入的基础上,还存在以下变种:

1)值使用「单引号」包裹时,叫做单引号字符型注入:

select * from user where username = 'zhangsan';

2)值使用「双引号」包裹时,叫做双引号字符型注入:

select * from user where username = "zhangsan";

3)值使用括号包裹数值型,叫数值+括号型注入:

select * from user where id = (1);
select * from user where id = ((1));
包裹多个括号……

4)值使用括号和单引号包包裹,叫单引号字符串+括号型注入:

select * from user where username = ('zhangsan');
select * from user where username = (('zhangsan'));
包裹多个括号……

值使用括号和双引号包裹,叫双引号字符串+括号型注入;

select * from user where username = ("zhangsan");
select * from user where username = (("zhangsan"));
包裹多个括号……

4、判断是否存在SQL注入

在参数中输入「单/双引号」,页面有报错就有可能存在注入点:

  • 输入单引号报错:数值型注入 或 单引号字符型注入
  • 输入双引号报错:数值型注入 或 双引号字符型注入

1)对于「数值型」注入,在参数中添加单、双引号都会报错。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xkJShOct-1645349676655)(E:\data\TyporaPages\image-20220212171335494.png)]
在这里插入图片描述

2)对于「单引号字符型」注入,在参数中添加单引号会报错,而添加双引号时不会报错。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TGCfOzyU-1645349676664)(E:\data\TyporaPages\image-20220212170231652.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QuGDhppn-1645349676666)(E:\data\TyporaPages\image-20220212170944397.png)]

3)对于「双引号字符型」注入,在参数中添加单引号不会报错,而添加双引号时会报错。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G95sRyQa-1645349676669)(E:\data\TyporaPages\image-20220212171608874.png)]
在这里插入图片描述

在数值型、字符型注入的基础上,尝试不同的引号+括号组合,判断出注入点类型,就可以构造SQL语句测试了。

SQL恒成立时页面正常显示,SQL恒不成立时页面异常显示,就说明存在注入:

  • ?id=1 and true – a 页面正常显示
  • ?id=1 and false – a 页面异常(空)显示

5、SQL注入方式

根据利用方式可以分为:

  • 联合注入:使用union关键字拼接多条查询语句。
  • 报错注入:使用报错函数执行SQL语句。
  • 布尔盲注:改变SQL的恒等条件,根据页面响应判断SQL执行结果。
  • 时间盲注:使用延时函数,根据页面响应时间判断SQL执行结果。

6、SQL注入防御

SQL注入的防御分为三个方面::参数过滤 , 预编译 以及 限制权限和报错

  1. 「参数过滤」以各种厂商的WAF以及代码逻辑为主,比如替换空格、关键字、双写、大小写、特殊字符转义等。
  2. 「预编译」主要依赖各种框架,比如Java的mybatis框架 和 PHP的 thinkphp框架
  3. 限制「权限」「报错」是指限制数据库的权限,以及控制数据库的报错信息,报错信息不要对外展示

6.1、预编译

SQL注入的核心是用户输入的参数改变了SQL的语法结构。而预编译,可以防止语法结构被改变。
SQL在执行前,需要先进行语法结构编译,正常情况下,用户输入的参数会参与语法结构编译,如果参数中包含SQL语法关键词,就会改变SQL的语法结构。

预编译的逻辑是先编译完SQL语法结构,再拼接用户的参数。用户输入的参数不参与语法编译过程,就无法改变语法结构,从而防止SQL注入。

详细原理可以查看我的另一篇文章: 预编译防止SQL注入的原理

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

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

相关文章

nginx--rewrite

功能 Nginx服务器利用ngx_http_rewrite_module 模块解析和处理理rewrite请求,此功能依靠PCRE(Perl Compatible Regular Expressions),因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之一,用于实现URL的重写&#xff0…

上位机图像处理和嵌入式模块部署(树莓派4b下ros安装方法)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 随着嵌入式开发板算力越来越强,很多的同学开始用树莓派做一些ros开发的工作。目前来说,ros有两个版本,分别是ro…

ChatGPT 4.0 直接用 !!!Code Copilot编程大模型、DALL-E AI绘图、绘制流程图、上传文件

嗨,你好呀,我是哪吒。 这一年最让人揪心的热点,就是各种层出不穷的AI技术。 原以为它只是短暂霸屏,但现实却赤裸裸展示了,什么叫AI抢走你的饭碗,连招呼都不打一声! 什么策划方案、公众号文案、营销卖点、…

电脑切换窗口快捷键,让你轻松驾驭多个任务

在使用电脑时,经常需要切换不同的窗口,以便快速地访问不同的应用程序或任务。为了提高效率,掌握一些电脑切换窗口快捷键是非常重要的。本文将介绍三种在电脑上切换窗口的方法,帮助您更加高效地进行多任务处理。 方法1:…

SAP PP学习笔记11 - PP中的MRP相关概念,参数,配置

上文讲了作业区的概念及配置。 SAP PP学习笔记08 - 作业区(工作中心Work Center),作业区Customize-CSDN博客 SAP PP学习笔记09 - 作业区(工作中心Work Center)Customize2(管理码,班次顺序&…

菜鸡学习netty源码(五)—— EventLoop

1.EventLoop的类关系图 2. EventExecutor /*** 返回自身的对象* Returns a reference to itself.*/OverrideEventExecutor next();/*** 获取所属的EventExecutorGroup* Return the {link EventExecutorGroup} which is the parent of this {link EventExecutor},*/EventExecuto…

EPICS DataBase详解

1、分布式EPICS设置 1) 操作界面:包括shell命令行方式(caget, caput, camonitor等)和图形界面方式(medm, edm, css等)。 2)输入输出控制器(IOC) 2、IOC 1) 数据库:数据流,基本上周期运行 2)sequencer:基…

ThingsBoard如何接受设备通过TCP发送的报文

1、概述 2、案例 2.1、阐述 2.2、导入依赖 2.3、构建Netty服务链接,接受的端口为8092 2.4、对数据进行相应的处理发送到ThingsBoard客户端 2.5、通过TCP链接工具 ​2.6、查看遥测数据 1、概述 TCP(Transmission Control Protocol,传输…

关于 c++的模板库中的数组模板 is_array_v的测试

&#xff08;1&#xff09;该模板的源代码如下&#xff1a; template <class> // determine whether type argument is an array bool is_array_v false;template <class _Ty, size_t _Nx> bool is_array_v<_Ty[_Nx]> true;template <class _Ty>…

屏蔽罩材质和厚度对屏蔽效能的影响

​ 一&#xff0e;屏蔽效能的影响因素 屏蔽效能的影响因素主要有两个方面&#xff1a;屏蔽材料的特性和厚度&#xff1b;如下图所示&#xff0c;电磁波经过不同媒介时&#xff0c;会在分界面形成反射&#xff0c;穿过界面的电磁波一部分被反射回去&#xff0c;这部分能量损失…

nginx--反向代理

反向代理 指的是代理外网用户的请求到内部的指定web服务器器&#xff0c;并将数据返回给用户的一种方式&#xff0c;这是用的比较多的一种方式 模块和功能 ngx_http_proxy_module&#xff1a; 将客户端的请求以http协议转发至指定服务器进行处理。ngx_stream_proxy_module&…

自学错误合集--MessageSource国际化接口

java后端自学错误总结 一.MessageSource国际化接口总结 一.MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口&#xff0c;提供了国际化信息的能力。MessageSource用于解析 消息&#xff0c;并支持消息的…

hadoop启动后没有namenode,datanode等解决方法

之前用的是虚拟机&#xff0c;在虚拟机上安装的hadoop&#xff0c;但是后来&#xff0c;电脑恢复出厂设置了&#xff0c;什么都重新开始。就在本地安装 Linux 子系统。 但是&#xff0c;有时候start-dfs.sh后&#xff0c;jps出现错误。 像这种拒绝连接 解决办法就是如下&…

智慧隧道建设中,如何提升隧道广播清晰度,解决隧道广播有效发布问题

近年来&#xff0c;我国高速公路智慧隧道建设步伐加快&#xff0c;全国各地高速公路运营单位纷纷加大投资力度&#xff0c;进行智慧隧道建设&#xff0c;提高隧道智能化水平。通过高清视频监控、AI视频识别、雷视融合、全域轨迹、激光雷达、火灾报警、气体检测、亮度检测、自动…

倪海厦(二)以果决其行,放空自己。

研究任何学问&#xff08;事物&#xff09;&#xff0c;批判去看&#xff0c;假设--验证--结果。以果决其行&#xff01;&#xff01;&#xff01;放空自己。学而后思&#xff0c;思学并进。 其实总结下来&#xff0c;也正如倪老师所说&#xff0c;以果决其行&#xff0c;我们…

STM32F1之FLASH闪存

目录 1. 简介 2. 闪存模块组织 3. FLASH基本结构 4. FLASH解锁 5. 使用指针访问存储器 6. 程序存储器全擦除 7. 程序存储器页擦除 8. 程序存储器编程 9. 选项字节 1. 简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&#xff0c;通过…

第 129 场 LeetCode 双周赛题解

A 构造相同颜色的正方形 枚举&#xff1a;枚举每个 3 3 3\times 3 33的矩阵&#xff0c;判断是否满足条件 class Solution {public:bool canMakeSquare(vector<vector<char>>& grid) {for (int i 0; i < 2; i)for (int j 0; j < 2; j) {int c1 0, c…

一款 NodeJS 版本管理工具 NVM (Windows)

一、简介 Node Version Manager&#xff08;NVM&#xff09;是一种用于管理多个 NodeJS 版本的工具。在日常工作中&#xff0c;我们可能同时在进行多个不同的项目开发&#xff0c;每个项目的需求不同&#xff0c;依赖与不同版本的NodeJS 运行环境。这种情况下&#xff0c;维护…

通过DataGrip将mysql表结构信息转存excel 复制select结果的insert插入语句

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的专栏 总结 | 提效 | 拓展&#xff0c;在这个系列专栏中记录了博主在学习期间总结的大块知识点&#xff0c;以及日常工作中遇到的各种技术点 ┗|&#xff40;O′|┛ &#x1f306; 内容速览 1 查询表结构信息&#xff0c;并…