【网络安全学习】 SQL注入01:基础知识

💻 1. 什么是SQL注入

SQL注入是一种针对Web程序中数据库层的安全漏洞的攻击方式。它利用了程序对用户输入数据合法性的判断或过滤不严,允许攻击者在设计不良的程序中添加额外的SQL语句,从而执行计划外的命令或访问未授权的数据。攻击者可以通过恶意拼接SQL语句,欺骗数据库服务器执行非授权的任意查询,进一步得到相应的数据信息。

❗️ 2. SQL注入的原理

SQL 注入是利用应用程序中对**用户输入数据的不当处理,**破坏了应用程序与数据库之间预期的正常交互,通过操纵输入来执行恶意的 SQL 操作。

SQL注入基本会满足以下的条件:

  • 参数用户可控:也就是说,从前端传给后端的参数内容是用户可以控制的;

  • 参数带入数据库查询:传入的参数需拼接到SQL语句,且带入到数据库查询。

当应用程序在构建 SQL 查询语句时,直接将用户输入的数据拼接到 SQL 语句中,而没有进行适当的验证、过滤或转义,攻击者就可以通过精心构造恶意的输入数据来改变原本预期的 SQL 语句逻辑

例如,如果一个应用程序根据用户输入的用户名来查询数据库验证登录,正常的 SQL 语句可能是:

SELECT * FROM users WHERE username = 'John'

但如果没有对用户输入进行处理,攻击者输入 ' OR 1=1 -- ,那么最终的 SQL 语句可能变成:

SELECT * FROM users WHERE username = '' OR 1=1 --'

这里的 OR 1=1 总是为真,-- 是注释符,用于注释掉后面的剩余部分。这就导致可以绕过正常的认证逻辑,获取到所有用户的信息,或者执行其他非法的数据库操作。

💻 3. 简单演示

正常查询vince字段,结果显示也是正常的:

在这里插入图片描述

如果我们输入:vince' union select user(),database() #

在这里插入图片描述

数据库的账号和密码便会显示出来。

👀 4. 判断是否存在注入

我们可以通过一些简单的方法来初步判断一个应用是否存在 SQL 注入漏洞。例如,在输入框中输入一些特殊字符,如**单引号 '**观察系统的反馈。如果系统出现错误提示,且错误信息中包含了与数据库相关的详细内容,那么这可能是一个潜在的注入点。

另外,还可以尝试输入一些逻辑运算符,如

id=1 and 1=1

id=1 and 1=2

id=1 or 1=1

id='1' or '1'='1'

id="1" or "1"="1"

观察返回的结果是否有所不同。如果前者返回正常结果,而后者返回异常或无结果,也可能意味着存在注入漏洞。

🎬 几种sql注释符

井号 # :单行注释,需要与url中的#区分,常编写为%23

--空格 :单行注释,注意是两个短线+空格的组合

/*()*/ :多行注释,至少存在两处的注入,/**/常用来作为空格

📚 5. 注入流程

判断是否存在注入并且判断注入类型

判断字段数:order by

确定回显点:union select 1,2

查询数据库信息:@@version @@datadir

查询用户名,数据库名:user() database()

文件读取:union select 1,load_file('c:\\windows\\win.ini')#

写入webshell:select...into outfile...

PS:使用sql注入遇到转义字符串的单引号或者双引号,可使用HEX编码绕过。

✨ 6. SQL注入分类

按照SQLMap中的分类来看,SQL注入只要分为以下几种类型:

  • UNION query SQL injection:可联合查询注入
  • Stacked queries SQL injection:可多语句查询注入,堆叠查询
  • Boolean-based blind SQL injection:布尔型注入
  • Error-based SQL injection:报错型注入
  • Time-based blind SQL injection:基于时间延迟注入

📚 7. 注入数据类型的区分

int整型

select * from users where id = 1

string字符型

select * from users where username='admin'

like搜索型

select * from tables_01 where title like '%标题%'

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

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

相关文章

Docker搭建私有仓库harbor(docker 镜像仓库搭建)

Harbor介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目…

Android statsd 埋点简析

源码基于:Android U 0. 前言 最近在研究 Android 自带的系统数据指标采集功能,框架依旧很严谨、完美,这里做个分享。 1. Android S 之后变化 stats 的代码从 framework 或 system/core 中转移到了 packages/modules/StatsD 目录中。 2. 框架…

IEC104转MQTT网关轻松将IEC104设备数据传输到Zabbix、阿里云、华为云、亚马逊AWS、ThingsBoard、Ignition云平台

随着工业4.0的深入发展和物联网技术的广泛应用,IEC 104(IEC 60870-5-104)作为电力系统中的重要通信协议,正逐步与各种现代监控、管理和云平台实现深度融合。IEC104转MQTT网关BE113作为这一融合过程中的关键设备,其能够…

动手学深度学习V2每日笔记(模型选择+过拟合和欠拟合)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1K64y1Q7wu/?spm_id_from333.788.recommend_more_video.0&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&a…

通过IEC104转MQTT网关轻松接入阿里云平台

随着智能电网和物联网技术的飞速发展,电力系统中的传统IEC 104协议设备正面临向现代化、智能化转型的迫切需求。阿里云作为全球领先的云计算服务提供商,其强大的物联网平台为IEC 104设备的接入与数据处理提供了强大的支持。本文将深入探讨钡铼网关在MQTT…

linux查看某个是否被占用以及释放端口

在 Linux 系统中&#xff0c;可以使用多种方法来检查某个端口是否被占用&#xff0c;并释放该端口。以下是详细的步骤&#xff1a; 1. 检查端口是否被占用 使用 netstat sudo netstat -tuln | grep <port_number>例如&#xff0c;要检查端口 8080 是否被占用&#xff…

UML通信图建模技术及应用例

新书速览|《UML 2.5基础、建模与设计实践》 在对系统的动态行为进行建模时&#xff0c;通信图常被用于按组织结构对控制流进行建模。与顺序图一样&#xff0c;一个单独的通信图只能显示一个控制流。 使用通信图建模时可以遵循如下策略&#xff1a; &#xff08;1&#xff09…

WinDbg用户模式调试基础

WinDbg用户模式调试基础 在前面的文章中&#xff0c;介绍了如何使用WinDbg分析蓝屏原因https://www.cnblogs.com/zhaotianff/p/15150244.html 不过那会都是在网上找的资料&#xff0c;东拼西凑出来&#xff0c;并没有系统的去学习WinDbg。 最近在学习内核开发这一块的内容&…

Arrays.asList()创建的集合不能使用remove函数

Arrays.asList() 创建的集合确实不能直接使用 remove 方法&#xff0c;这是因为该方法返回的集合是一个固定大小的列表&#xff0c;背后由一个数组支持。由于数组的长度是固定的&#xff0c;所以这个列表也不能增加或减少元素。 以下是详细解释和解决方案&#xff1a; 原因 …

顺序表的实现和操作

目录 一.前言 二. 顺序表的优缺点 三. 顺序表的定义和初始化 四.顺序表的相关操作 一.前言 首先介绍下线性表的定义&#xff0c;线性表是具有相同特性的数据元素的一个有限序列。而我们的顺序表就是线性表的一种&#xff0c;是线性表的顺序存储结构。所谓顺序存储就是把逻辑…

Photos框架 - 自定义媒体选择器(UI列表)

引言Photos框架 - 自定义媒体资源选择器&#xff08;数据部分&#xff09;-CSDN博客 关于自定义媒体选择器上一篇博客我们已经介绍了使用Photos获取媒体资源数据和处理媒体资源数据&#xff0c;有了数据&#xff0c;UI的实现就比较灵活了&#xff0c;我就以上面的设计样式为例…

LabVIEW操作系列1

系列文章目录 我的记录&#xff1a; LabVIEW操作系列 文章目录 系列文章目录前言五、特殊用法5.1 取值范围表示5.2 对输入值取值范围进行限定5.3 控制多个While循环停止运行。5.4 获取按钮上的文本5.5 获取按钮上的文本【进阶】 六、使用步骤1.引入库2.读入数据 七、其余功能7.…

数学建模基础:数据的分析与模型构建

引言 在当今数据驱动的世界中&#xff0c;数学建模已成为解决复杂问题的关键工具。本篇文章将探讨数学建模的基础知识&#xff0c;特别是数据处理与拟合模型的重要性和方法。 第一部分&#xff1a;数据的重要性 数据是数学建模的基石。在开始任何建模工作之前&#xff0c;我…

Spring源码(六)--Bean生命周期相关的接口

Bean生命周期相关的接口 Bean生命周期接口相关的这些类和接口&#xff0c;都可以多看看。 Bean工厂实现应该尽可能支持标准的Bean生命周期接口。 整套初始化方法及其标准顺序为: * * <li>BeanNameAwares {code setBeanName}* <li>BeanClassLoaderAwares {code se…

2.5 openCv -- 使用 OpenCV 合并(混合)两张图片

目标 在本教程中,您将学习: 什么是线性混合及其用途;如何使用 addWeighted() 函数合并两张图片。理论 注释 下面的解释来自 Richard Szeliski 的书籍《计算机视觉:算法与应用》。 从我们之前的教程中,我们已经了解了一些像素运算符。一个有趣的二元(双输入)运算符是线…

【Python selenium过极验五子棋】自动化过五子棋人机验证,享受丝滑的落子,秒了

文章日期&#xff1a;2024.07.25 使用工具&#xff1a;Python 文章类型&#xff1a;自动化过极验五子棋 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法…

Spring Boot(八十二):SpringBoot通过rsa实现API加密

项目中使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密 。 下面开始代码演示 1 接口加密 1.1 新建一个springboot项目 1.2 添加依赖 <dependency>&l…

如何做校园圈子小程序,需要哪些功能?可打包APP小程序H5,源码交付,支持二开!

独立学校首页 支持每个学校独立首页!每个学校都可以拥有专属首页&#xff0c;打造不同风格的学校首页展示效果 多业务覆盖 可实现校园内外卖、跑腿、超市、药店水果、快餐店等业务全覆盖!所有配送业务平台都可开展 多站点运营 支持多学校多站点运营&#xff0c;各分站管理员可独…

【Docker】CentOS7环境下的安装

环境展示 安装 配置仓库 sudo yum install -y yum-utils # docker官方key文件下载 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 建议使用阿里云key文件下载 sudo yum-config-manager --add-repo https://mirrors.aliyun.…

Python小工具——监听某网站的数据变化并进行邮件通知

目录 一、需求描述 二、解析 三、实例代码 一、需求描述 监听自考网2024年广东省6月份的毕业生学历注册进度&#xff0c;这是网址&#xff1a;https://www.chsi.com.cn/xlcx/count_zk.jsp&#xff0c; 如上图所示&#xff0c;我们想知道这个红色的空格啥时候被填满&#xf…