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

sqli-labs靶场通关笔记:第46-53关 order by注入

目录

第46关 order by注入

第47关 '闭合的order by注入 

第48关 无报错回显的数字型order by注入

第49关 无报错回显的'闭合型order by注入

第50关 基于order by的堆叠注入

第51关 '闭合的报错注入或堆叠注入

第52关 数字型盲注或堆叠注入

第53关 '闭合的盲注或堆叠注入


第46关 order by注入

输入?sort=1和?sort=2看一下页面显示。发现返回的数据相同,但是顺序不同,猜测可能是利用了order by排序语句。当sort=1时是根据第一列的字段id来排序,sort=2时根据username字段排序。

 在参数后面加上单引号,回显了报错信息,那么使用报错注入试试吧。

第47关 '闭合的order by注入 

和上关的区别是使用了单引号包裹,要注意的是,这会导致 SQL 语句将$id当作一个字符串常量来处理,而不是列名或排序索引。由于字符串常量没有实际的排序意义,MySQL 会忽略这个排序条件,通常会按照表中数据的默认顺序返回结果,也就是插入数据时的顺序或者存储引擎决定的物理顺序。所以,无论你输入什么值,返回的结果顺序都不会改变。

第48关 无报错回显的数字型order by注入

利用布尔盲注,构造表达式来影响排序结果。

#如果数据库名长度>5,则按第一列排序,否则按第二列排序;
order by if(length(database())>5,1,2)

这里数据库名长度是8,大于5会按第一列排序,写大于10也会按照第一列排序。因为MySQL 优化了常量表达式:当 IF 的两个分支都是常量时,MySQL 可能认为无论条件如何,排序规则都不变,因此忽略条件判断。所以应该避免使用常量作为排序键,改用与数据相关的表达式。

正确的语法构造是:

#如果条件为真,按 id 列排序,否则按 username 列排序;
order by if(length(database())>5,id,username)

第49关 无报错回显的'闭合型order by注入

这关可以利用时间盲注,但是注意点较多。

?sort=1' and if(length(database())<10,sleep(0),sleep(5)) --+

1.将IF判断设置为,true马上响应,false延迟响应。因为order by是对结果集进行排序,每一行都会计算一次,所以会导致多次延迟(行数次延迟),而且MySQL在排序时可能会优化,利用sleep函数时页面会一直处于长时间加载状态,最终会超过服务器允许的最大响应时间,而被强制终止,返回 500 错误。

2.order by 后面不能直接跟and,它的语法结构只接受列名、表达式或数字位置。不过可以在排序表达式里使用包含and的逻辑条件来实现更复杂的排序规则。

3.这条注入语句破坏了原本正常的order by逻辑。原本order by期望的是列名,注入后变成了一个布尔表达式和 sleep 函数的组合,数据库无法按此进行有效的排序,所以结果可能会是乱序。

第50关 基于order by的堆叠注入

本关使用了mysqli_multi_query函数,那么直接堆叠注入。

 

第51关 '闭合的报错注入或堆叠注入

第52关 数字型盲注或堆叠注入

第53关 '闭合的盲注或堆叠注入

这三关就是把前面的几关结合在一起,使其有多种解题方法。

http://www.dtcms.com/a/291603.html

相关文章:

  • 一文详解REST风格
  • 青少年科学世界名刊分析评介:《生物技术世界》
  • 机器学习中的数据预处理:从入门到实践
  • Spring 对数组和集合类的自动注入
  • 234、回文链表
  • 使用AI把普通的条形柱状图,丰富成“好看高大上”的条形柱状图
  • 解决win10下Vmware虚拟机在笔记本睡眠唤醒后ssh连接不上的问题
  • PyQt5—QInputDialog 学习笔记
  • 印度给巴铁断水,中国悄然开建雅鲁藏布江水电站,纯属巧合!
  • Python 标准库之 os 模块全面讲解
  • 大模型为什么出现幻觉?
  • 在Anolis8.6上源码编译安装部署OpenVAS(GVM)未完待续
  • 华为云CCE-PV使用OBS存储类之坑
  • Android NDK ffmpeg 音视频开发实战
  • 语义化版本规范(SemVer)
  • 【计算机组成原理】符号位OF、ZF、CF、SF详解
  • c语言 进阶 动态内存管理
  • stream event
  • Playwright-MCP浏览器会话复用全解析
  • swiper js无缝滚动---解决播放总是有间隔、动画一闪一跳的问题
  • 3.组合式API父子通信
  • 【免费版】开启 Youtube 双语字幕
  • 神经网络——非线性激活
  • Java学习-----AIO模型
  • STM32小实验四--按键控制LED灯
  • tar 解压:Cannot change ownership to uid 1000, gid 1000: Operation not permitted
  • 2021-06-27 51单片机外部中断0控制数码管0自增到9
  • 知识之镜:当检索生成照见人类认知的深渊
  • C++ 分配内存释放内存
  • LinkedList的模拟实现(双向链表Java)