MySQL数据库的SQL注入漏洞解析

news2024/11/14 13:51:36

说明:本文仅是用于学习分析自己搭建的SQL漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 

一、SQL注入原理

        SQL注入是指客户端对用户输入提交数据内容的合法性没有判断或过滤不严格,导致服务端拼接了用户伪造的SQL语句内容,且服务端将这些伪造的sql语句发给数据库执行(实现欺骗数据库服务器执行非授权的任意操作),数据库返回伪造的sql语句执行结果给服务器端,服务端将结果又返回给客户端。导致数据泄露或数据破坏,甚至导致主机完全被接管的一种安全漏洞。

        SQL注入总结起来就是:没有对用户输入提交数据内容的合法性进行严格的判断或过滤,就直接将这些伪造的数据内容带入到数据库执行,导致数据泄露或损坏,甚至导致完全接管主机的一种安全漏洞。

        SQL注入自 20 世纪 90 年代末至今一直都是研究热点,是流行范围最广、威胁最大的攻击类型之一,因为它可能被用来攻击任何使用基于 SQL 的数据库的 Web 应用或网站,而大多数 Web 应用和网站都使用基于 SQL 的数据库 。

二、SQL注入分类

2.1、布尔型注入

数据类型分类:数字型、字符型、搜索型、XX型、Json类型

2.1.1、数字型

        我们在使用数字型进行注入测试的时候,并不是直接根据页面显示的内容为数字就判断为数字,因为也有可能是字符类型的伪数字,需要我们多种尝试测试(一般页码是数字)。

-- 数字型拼接测试命令1
or 1=1#

-- 数字型拼接测试命令2
or 1=1 -- 

说明:【#】【--】是SQL语句中的注释符,主要用于SQL语句作用说明或者将sql语句注释掉,被注释的内容就不会被执行了。测试命令中之所以要在后面再添加上注释符号,主要是用于将注释符后面的内容直接注释掉,不会被数据库执行。

# 数字型示例

# 正常SQL语句为:
select * from pikachu.member where id=1;

# SQL数字型注入命令1为:
select * from pikachu.member where id=1 or 1=1#;

# SQL数字型注入命令2为:
select * from pikachu.member where id=1 or 1=1 -- ;

2.1.2、字符型

        字符型注入是:可以直接先添加【'】进行测试,如果报SQL语法错误,则继续使用拼接命令测试是否可以获取到内容,若可以获取到内容则表示成功。

-- 字符型拼接测试命令1
' or 1=1#

-- 字符型拼接测试命令2
' or 1=1 -- 
#字符型示例:

-- 正常的SQL语句为:
select * from pikachu.member where username='allen';

-- SQL字符型注入命令1为(我们拼接命令中的'用于闭合前面的查询内容,后面的or 1=1是恒为真的条件,#用于注释掉后面的sql语句内容,不让数据库执行):
select * from pikachu.member where username='allen'or 1=1#';

-- SQL字符型注入命令1为:
select * from pikachu.member where username='allen'or 1=1 -- ';

2.1.3、搜索型

        搜索型也就是我们经常使用的模糊查询,即SQL语句中使用的【like '%需搜索的内容%'】,即匹配一个或任意多个内容。

# 搜索型拼接测试命令1
需要搜索的值%' or 1=1 #' 

# 搜索型拼接测试命令2
%需要搜索的值%' or 1=1 #'

# 搜索型拼接测试命令3
%' or 1=1 #'

2.1.4、XX型

        xx型是由于SQL语句的拼接方式不同导致的(比如:使用了括号将内容包起来):

# XX型拼接测试命令1:
') or 1=1#

# XX型拼接测试命令2:
') or 1=1 -- 
# XX型示例:

# 正常的SQL语句
select * from pikachu.member where username=('allen');

# XX型测试命令:
select * from pikachu.member where username=('allen') or 1=1#;

2.1.5、Json型

# json注入拼接测试命令:
json={"键":"值' or 1=1 #"}

2.2、联合查询注入

        联合查询是指使用带有【union】关键字的注入,适合查询有具体显示列数量的注入。

# 联合拼接测试命令
'union select 需要填充的字段数量#
# 联合查询示例

# 正常SQL
select username,email from pikachu.member where username='allen' 

#联合查询SQL(获取到当前的登录用户名称和数据库名称)
select username,email from pikachu.member where username='allen' union select  user(),database();

2.3、基于错误注入

        报错注入是指客户端界面上没有显示具体内容的位置,但是会显示数据库执行SQL语句的报错信息,可以通过数据库的指定函数制造错误,从而从报错信息来获取数据库的指定数据内容。

注意错误注入的前提条件是:【后台服务器没有屏蔽数据库报错信息,在语法发生错误时会直接输出在前端,并且错误信息里面可能会包含库名、表名等相关信息】

MySQL常用的报错函数获取数据
序号 Mysql常用的报错函数 说明
1 Updatexml() 返回替换的 XML 片段
2 extractvalue() 使用 XPath 表示法从 XML 字符串中提取值
3 floor() 用来获取整数

MySQL :: MySQL 5.7 Reference Manual :: 12.11 XML Functionsicon-default.png?t=O83Ahttps://dev.mysql.com/doc/refman/5.7/en/xml-functions.html

-- SQL注入的完整流程(适用于SQL的布尔型注入、错误注入、还有insert\update\delete注入)

# 1、获取MySql数据库的版本命令:
' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) #

# 2、获取当前数据库的连接用户命令:
' and updatexml(1,concat(0x7e,(select user()),0x7e),1)#

# 3、获取当前连接的数据库名称命令:
' and updatexml(1,concat(0x7e,(select database()),0x7e),1)#

# 4、获取到MySql指定数据库的所有表名称࿱

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

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

相关文章

FreeRTOS内部机制学习01(任务创建的细节以及任务调度的内部机制)

文章目录 前言:首先要谢谢韦东山老师的无私奉献,让我学到了很多东西,我做这个笔记是害怕我会忘记,所以就记录了下来,希望对大家有帮助!关于寄存器CPU内部的寄存器这些寄存器到底要保存一些什么?…

Leetcode67---二进制求和

https://leetcode.cn/problems/add-binary/description/ 给出的两个二进制,我们可以从最后开始往前运算。 给当前短的一位前面补充0即可。 class Solution {public String addBinary(String a, String b) {//给的就是二进制字符串 最后一位开始遍历 如果没有就补充…

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念,以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么?通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容,主要就是BTP的实际操作流程,比如账号注册,登录&#…

Dify.ai:部署自己的 AI 应用、知识库机器人,简单易用

Dify.ai:部署自己的 AI 应用、知识库机器人,简单易用 今天,来分享下 Dify.AI 这个产品,一句话介绍:可供普通人简单易用的部署生成出一个 AI 应用。这是一种使用人工智能技术来帮助团队开发和运营 AI 应用的工具。 什么是 Dify.ai Dify.ai 是一个易于使用的 LLMOps 平台…

资料分析系统课-刘文超老师

1、考试大纲 2、解题的问题->解决方法 3、统计术语 基期量与现期量:作为对比参照的时期称为基期,而相对于基期的称为现期。描述具体数值时我们称之为基期量和现期量。 增长量:是指基期量与现期量增长(或减少)的绝对量。增长量是具体值&…

如何将代理IP设置为ISP:详细指南

在当今互联网时代,代理IP已经成为许多用户保护隐私和提升网络体验的重要工具。而ISP(Internet Service Provider)的代理IP更是因为其高质量和稳定性备受青睐。本文将详细介绍如何将代理IP设置为ISP,让你在网络世界中享受更优质的上…

通信工程学习:什么是SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制

SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制 SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制是三种不同的调制方式,它们在通信系统中各有其独特的应用和特点。以下是对这三种调制方式的详细解释: 一、SSB单边带调制 1、SSB单边带…

C语言——文件

学习目标: 学会文件的读写 例如: 学会文件的读写 学习内容: fgerc:一次读一个 fgets:一次读一行 fread:一次读多个 、 文件拷贝到文件夹:

4.4 版本管理器——VM实现

VM层通过VersionManager,向上层提供api接口以及各种功能,对于VM上层的模块(是使用了VM层接口的上层模块),那么操作的都是Entry结构 而VM依赖于DM,所以VM视角里(在自我实现里面)&…

C++数据结构重要知识点(5)(哈希表、unordered_map和unordered_set封装)

1.哈希思想和哈希表 (1)哈希思想和哈希表的区别 哈希(散列、hash)是一种映射思想,本质上是值和值建立映射关系,key-value就使用了这种思想。哈希表(散列表,数据结构)&a…

鸿蒙轻内核M核源码分析系列十五 CPU使用率CPUP

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 轻内核M核源码分析系列一 数据结构-双向循环链表 轻内核M核源码分析系列二 数据结构-任务就绪队列 鸿蒙轻内核M核源码分析系列三 数据结构-任务排序链表 轻…

三维布尔运算对不规范几何数据的兼容处理

1.前言 上一篇文章谈过八叉树布尔运算,对于规范几何数据的情况是没有问题的。 在实际情况中,由于几何数据来源不一,处理和生成方式不一,我们无法保证进行布尔运算的几何数据都是规范的,对于不规范情况有时候也有需求…

个股场外期权的行权时间是什么时候?

今天带你了解个股场外期权的行权时间是什么时候?场外个股期权的行权日并没有一个固定的日期,它主要取决于期权合约的具体条款和规定。 个股场外期权 个股场外期权是指在场外交易市场进行的、以单个股票为标的资产的期权合约。这种期权与在交易所交易的…

@Cacheable踩坑,服务停住,~lock

1、问题: 方法使用Cacheable注解,服务每次重启后,调到这个方法都服务停住了,日志也不打了。 2、原因: 服务停止住了,发现redis会生成key~lock的锁,永不过期,也没有删除。 例如以下…

【2025】公司仓库管理系统的设计与实现(公司仓库信息管理系统,仓库信息系统,管理系统,信息管理系统,货物仓管系统)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

【IEEE出版】2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛(NPSIF 2024,10月30-11月1)

2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛将于2024年10月30-11月1日于海南博鳌举办。 会议的历史悠久,致力于促进电力系统领域的研究和开发活动,同时也着眼于促进全球各地研究人员、开发人员、工程师、学生和从业人员之间的科学信息…

适合新手进阶,借助ChatGPT撰写学术论文全流程指南,附顶级提示词使用攻略

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。 学术论文的写作涉及深入研究、分析…

ECCV`24 | 蚂蚁集团开源风格控制新SOTA!StyleTokenizer:零样本精确控制图像生成

文章链接:https://arxiv.org/pdf/2409.02543 代码&数据集链接: https://github.com/alipay/style-tokenizer 亮点直击 介绍了一种名为StyleTokenizer的新方法,用于在扩散模型中进行风格控制。这种方法允许通过一个任意参考图像实现对生成…

元学习(meta learning)(一)

元学习从字面的意思就是“学习”的“学习”,也 就是学习如何学习。大部分的深度学习就是在不断的调整超参数,或者在决定网络架构,改变 学习率等等。实际上没有什么好方法来调这些超参,今天工业界最常拿来解决调整超参数的 方法是买…

dpdk——数据平面开发套件

数据平面开发工具包 (DPDK) 是一个 Linux Foundation 项目,它由多个库组成,用于加速在各种 CPU 架构上运行的数据包处理。 网络性能、吞吐量和延迟对于各种应用程序至关重要,包括无线和有线基础设施、路由器、负载均衡…