短路语法 [SUCTF 2019]EasySQL1

news2025/1/22 19:41:19

打开题目

输入字符的时候啥也不回显。只有输入数字的时候页面有回显

但是当我们输入union,from,sleep,where,order等,页面回显nonono,很明显过滤了这些关键词

 最开始我的思路是打算尝试双写绕过

1;ununionion  select 1,2,3

发现依旧被过滤了。

那我们试试堆叠注入

1;show databases;

发现页面有6个数据库

1;show tables;

有一个名为Flag的表

那我们试试能不能直接查看Flag的表结构

1;desc `Flag`;

同样,这里被过滤了flag字段,所以我们不能直接查询到Flag表下的字段

上面的测试我们知道from和order都被过滤了

本来想试试句柄handler命令查询的,结果一试,handler也被过滤了。

那就用不了堆叠注入,也用不了联合查询。

解法一

看了大佬的wp后知道

既然输入字符无回显,输入数字才有回显。

他的后端既然能做到数字回显,字母不回显,说明有一个 或 结构,而且不直接回显flag,但作为一道题目,from一定是from flag

所以大佬猜测的后端为:

select $_POST['query'] || flag from Flag

结合我们刚刚上面做的堆叠注入的查询知道,确实有个名为Flag的表

所以上面的猜测成立,不会是from别的地方。

我们对上面的代码简单审计一下,$query 是通过 POST 请求获取的用户输入,所以后端通过获取用户输入的数据,这里的“或”符号(“ | | ”)的意思是,作为逻辑或用于短路逻辑,如果前者的语句为真,则整个语句为真,不理会后面的语句是真还是假直接输出结果。

所以我们这直接利用短路语法

payload:

*,1

这里的原理是

sql=select.post['query']."||flag from Flag";
如果$post['query']的数据为*,1,sql语句就变成了select *,1||flag from Flag,
就是select *,1 from Flag,这样就直接查询出了Flag表中的所有内容
输入  *,1   这里会增加一个临时列,他的列名为1,然后那一列的值都为1。

当我们只关心数据表有多少记录行而不需要知道具体的字段值时,类似“select 1 from table_Name”是一个很不错的SQL语句写法,它通常用于子查询。这样可以减少系统开销,提高运行效率,因为这样子写的SQL语句,数据库引擎就不会去检索数据表里一条条具体的记录和每条记录里一个个具体的字段值并将它们放到内存里,而是根据查询到有多少行存在就输出多少个“1”,每个“1”代表有1行记录,同时选用数字1还因为它所占用的内存空间最小,当然用数字0的效果也一样。在不需要知道具体的记录值是什么的情况下这种写法无疑更加可取。
 

得到flag

解法二

payload:

1;set sql_mode=PIPES_AS_CONCAT;select 1

这里看英文就知道这里把管道符||当做了连接符号

我们原先猜测的后端代码为

select $_POST['query'] || flag from Flag

变成了

select $_POST['query'] and flag from Flag

在 SQL 注入攻击中,concat 是一个用于连接字符串的 SQL 函数。它接受两个或多个字符串作为参数,并返回这些字符串连接在一起的结果。

知识点:

  • “ || ”符号的三种用法

<1>作为符号命令执行上下文在一些特殊的上下文中,特别是在 命令执行或 shell 脚本 中, ||  可以表示一个截断符号,只有在前一个命令失败(返回非零状态码)时才执行下一个命令。

例如:command1 || command2

如果 command1 失败(返回非零状态码),则执行 command2。这种用法可以用于处理错误情况或依赖于前一个命令的成功执行。

<2>作为逻辑或:|| 表示逻辑或运算符,即只要两边的表达式之一为真,整个条件就为真。

例如:

if condition1 or condition2:
    # 如果 condition1 或 condition2 为真,则执行这里的代码

只要 condition1 或者 condition2 中有一个为真,整个条件就为真,而不需要等待另一个条件的计算结果。

<3>用于短路逻辑:在某些情况下,|| 可能被用于实现短路逻辑,这意味着如果第一个表达式为真,就不再计算第二个表达式。如果第一个表达式为假,那么才会计算第二个表达式。这种行为利用了逻辑或的性质,只要有一个条件为真,整个表达式就为真。

例如:var result = expression1 || expression2;

在这里,如果 expression1 为真,expression2 将不会被计算

  • 短路语法:

举例说明:

“||”运算符检查第一个表达式是否返回“true”,如果是“true”则结果必为“true”,不再检查其他内容。“a/0”是个明显的错误!但短路运算“||”先执行“a==b”判断,返回“true”,遂造成短路,也就不进行“a/0”操作了,程序会打出"That's in my control."。这个时候,交换一下“||”左右两边的表达式,程序立即抛出异常“java.lang.ArithmeticException: / by zero”。

class Logic{
    public ststic void main(String[] args){
        int a=1;
        int b=1;
        if(a==b || b<a/0){
            System.out.println("That's in my control.");
        }else{
            System.out.println("Oh,That's Impossible!!!");
        }
    }
}

参考文章:java中“&&”和“||”短路详解_java中||-CSDN博客

  • 在计算机逻辑语言中,1代表逻辑真,0代表逻辑假

  • select 1 from table_Name的原理

在我自己本地的数据库下有个users表,表的结构如下

我们用select 1 from users;

这个语句在这里的作用就是查询users表下有多少行数据,有多少行就输出多少行的1,而select 1 from就是建立一个临时列,这个列的所有初始值都设为1。而为什么选用数字1呢,因为数字1所占的内存最小。用其他数字效果也是一样的。

而使用select *,1 from users;

也就是本题的payload,效果如下

select *,1 from users;

这个语句显示了users表下的所有列,以及我们的临时列1

  • sql_mode

sql_mode 是一个MySQL系统变量,用于设置数据库操作的不同方面

文章参考wp为:[SUCTF 2019]EasySQL 1 Writeup(超级详细)-CSDN博客

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

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

相关文章

TS-08-A-2D、TS-08-B-1H插装式电磁比例溢流阀放大器

TS-08-A-2D、TS-08-B-1H插装式电磁比例溢流阀放大器持续的电磁铁、高效能的电磁铁结构、可选的线圈电压和终端、工业化通用插孔、紧凑的结构。 螺纹插装式、先导滑阀式减压溢流阀&#xff0c;利用可变电流输入可实现指定范围内的输出压力连续调节。输出压力与 DC 电流输入成比…

[Jenkins] 物理机 安装 Jenkins

这里介绍Linux CentOS系统直接Yum 安装 Jenkins&#xff0c;不同系统之间类似&#xff0c;操作命令差异&#xff0c;如&#xff1a;Ubuntu用apt&#xff1b; 0、安装 Jenkins Jenkins是一个基于Java语言开发的持续构建工具平台&#xff0c;主要用于持续、自动的构建/测试你的软…

Linux学习教程(第三章 Linux文件和目录管理)1

第三章 Linux文件和目录管理&#xff08;初识Linux命令&#xff09; 对初学者来说&#xff0c;管理 Linux 系统中的文件和目录&#xff0c;是学习 Linux 至关重要的一步。 为了方便管理文件和目录&#xff0c;Linux 系统将它们组织成一个以根目录 / 开始的倒置的树状结构。Li…

【架构师】的修炼之道都需要学习哪些?看看这些就够了

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

代码随想录图论|130. 被围绕的区域 417太平洋大西洋水流问题

130. 被围绕的区域 **题目&#xff1a;**给你一个 m x n 的矩阵 board &#xff0c;由若干字符 ‘X’ 和 ‘O’ &#xff0c;找到所有被 ‘X’ 围绕的区域&#xff0c;并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 题目链接&#xff1a;130. 被围绕的区域 解题思路&#xff1a…

《向量数据库指南》——2023云栖大会现场,向量数据库Milvus Cloud成关注焦点

近期,广受关注的2023 云栖大会正式收官,来自全球各地的开发者集聚一堂,共同探索 AI 时代的更多可能性。 云栖大会是由阿里巴巴集团主办的科技盛宴,是中国最早的开发者创新展示平台。据悉,今年云栖大会的主题为“计算,为了无法计算的价值”,共吸引了全球 44 个国家和地区…

用封面预测书的价格【图像回归】

今天&#xff0c;我将介绍计算机视觉的深度学习应用&#xff0c;用封面简单地估算一本书的价格。 我没有看到很多关于图像回归的文章&#xff0c;所以我为你们写这篇文章。 距离我上一篇文章已经过去很长时间了&#xff0c;我不得不承认&#xff0c;作为一名数据科学家&#x…

OceanBase杨冰:完全自研,才能逢山开路遇水搭桥

11月16日&#xff0c;在OceanBase2023年度发布会上&#xff0c;OceanBase CEO杨冰介绍&#xff0c;中国数字经济的蓬勃发展催生了对分布式数据库的强大需求&#xff0c;这种需求也牵引了OceanBase坚定投入自主研发&#xff0c;从而推动树立了分布式数据库的四项新标准。 据了解…

Harmony SDK API 版本 与 Harmony OS 版本对照表,及如何查看鸿蒙手机Harmony SDK Api 版本

Harmony SDK API 版本 与 Harmony OS 版本对照表 Harmony OSHarmony SDK APIHarmony 4.09Harmony 3.19Harmony 3.08Harmony 3.0 pre7Harmony 2.2.06Harmony 2.1.05Harmony 2.04 具体到真机上可能会有差异&#xff0c;如我的手机OS版本是2.0&#xff0c;按照上面表应该是4&…

jsp中使用PDF.js实现pdf文件的预览

本文介绍的是在使用jsp作为模板引擎的spring-mvc项目中&#xff0c;如何利用 PDF.js实现pdf文件的预览。 1、下载 PDF.js Getting Started (mozilla.github.io) 下载解压后其中有两个目录&#xff0c;直接将这两个文件夹放到项目的web资源目录中。此时相当于把PDF.js这个项目也…

使用Kohya_ss训练Stable Diffusion Lora

Stable Diffusion模型微调方法 Stable Diffusion主要有 4 种方式&#xff1a;Dreambooth, LoRA, Textual Inversion, Hypernetworks。 Textual Inversion &#xff08;也称为 Embedding&#xff09;&#xff0c;它实际上并没有修改原始的 Diffusion 模型&#xff0c; 而是通过…

Android 14 Beta 1

Android 14的第一个 Beta 版&#xff0c;围绕隐私、安全、性能、开发人员生产力和用户定制等核心主题构建&#xff0c;同时继续改进平板电脑、可折叠设备等大屏幕设备的体验。我们一直在完善 Android 14 的功能和稳定性方面取得稳步进展&#xff0c;现在是时候向开发者和早期采…

软件系统集成指南

软件产品集成是将各种软件组件、模块和代码组装成最终可执行、可应用的软件产品的过程。这个过程涉及到将工作产品转化为产品的组装过程。在软件工程中&#xff0c;产品集成是一个重要的环节&#xff0c;通过持续性集成&#xff0c;将产品集成的过程常态化、自动化。做好产品集…

收集整理微信小程序源码精选8500套(不同行业的源码集合)/带后台+含搭建开发教程

这下面分享的是精心收集整理的微信小程序源码精选8500套&#xff0c;它含有不同行业的源码集合&#xff0c;带后台&#xff0c;而且含搭建开发教程。可以转存起来&#xff0c;需要的时候直接搜索关键词查找就行了&#xff0c;方便得很。 很多伙伴学习小程序不知怎么开始&#…

【Vue-Demo】倒计时3秒后返回首页

首页path:/ 倒计时结束后要清除计时器&#xff0c;防止内存泄漏&#xff1a; if (this.count 0) {clearInterval(this.timer); }<!-- ErrorJump.vue --> <template><h2>Error&#xff1a;找不到页面&#xff01;</h2><h4>{{ count }}S后<R…

01序列 卡特兰数

解法&#xff1a; 将01序列置于坐标轴上&#xff0c;起始点为原点。0表示向右走&#xff0c;1表示向上走。这样就可以将前缀0的个数不少于1的个数就可以转换为路径上的点&#xff0c;横坐标大于纵坐标&#xff0c;也就是求合法路径个数。 注意题目mod的数是质数&#xff0c;所…

【嵌入式项目应用】__单片机STM32有什么好的裸机程序架构思路推荐?

目录 前言 没设计好程序架构&#xff0c;根本做不稳定。 按照我的思维&#xff0c;我会这样去设计程序&#xff1a; 那这样的好处是什么&#xff1f; (*&#xffe3;︶&#xffe3;)创作不易&#xff01;期待你们的 点赞、收藏和评论喔。 前言 在我刚出来的时候&#x…

Android笔记(十三):结合JetPack Compose和CameraX实现视频的录制和存储

在“Android笔记&#xff08;八&#xff09;&#xff1a;基于CameraX库结合Compose和传统视图组件PreviewView实现照相机画面预览和照相功能”&#xff0c;文中介绍了拍照功能的实现&#xff0c;在本文中将介绍结合JetPack Compose和CameraX实现视频的录制。 新建一个项目 在项…

nn.Embedding()的原理

nn.Embedding()的原理&#xff1a; 定义一个Embedding&#xff1a; embeddings nn.Embedding(num_embeddings10, embedding_dim3)vocab_size : 10 输出维度为&#xff1a; 3 假定输入inputs如下&#xff1a; inputs torch.tensor([[1,3,6, 8],[9,1,3,5] ],dtypetorch.lo…

达索系统SOLIDWORKS Electrical机电一体化协同设计

一秒读懂 SOLIDWORKS Electrical 问题点 电气、机械设计各自为政数据传递困难&#xff0c;存在设计错误 CHALLENGE电气设计面临挑战 问题点&#xff1a;电气、机械设计各自为政数据传递困难&#xff0c;存在设计错误 原理图绘制完毕后&#xff0c;再绘制接线图,人工统计BOM&a…