[SUCTF 2019]EasySQL1

目录

set sql_mode的用法(||的用法为逻辑或)

*,1的用法(||的用法为逻辑或)


白天写题目,晚上留四个小时实践,(名次不重要,过程才重要)网上说的,觉得挺对的

开局一张,填空题

首先分析一下,这个是什么提交的,拿出我的burp

ok,是post,提交数据应该都是post,那又有什么关系呢,都说了是sql注入,为什么我找不到他的闭合符号,

'--+闭合不了,闭合了一个就是正常显示了,666,看答案有过滤

看到后端源代码了,源代码这样,很好奇是怎么猜出来的

select $_GET['query'] || flag from flag

直接就越级挑战了,之前的sql注入都不适合了

先把答案写下来、这里有sql注入关键字字典

SQL注入过滤关键字的Fuzz字典_sql注入过滤关键字字典-CSDN博客

set sql_mode的用法(||的用法为逻辑或)

1;set sql_mode=PIPES_AS_CONCAT;select 1
1;show databases;

先爆破一下过滤哪些关键字,按照下面的博客写的

然后有这么多被过滤了,就算不过滤我也不一定会写,具体在下面的博客

有;没有被过滤,那就是可以进行堆叠注入

PIPES_AS_CONCAT:将 || 或运算符 转换为 连接字符,即将||前后拼接到一起。

那么如果他是或运算符,那结果就是不会返回flag值吗,

输入1返回这个

也就是||本来的作用是逻辑或的意思,也就是两边有一个条件为真,则结果为真

但是查询的结果又是那个条件呢,那这个的结果应该是查询1在flag的值吧,因为没有出现flag信息

select 1||flag from Flag

那想执行后面的语句的话就需要使用,PIPES_AS_CONCAT

最后使用select 1拼接后面的语句,最后就将1的值和flag的值全都显示出来

1;set sql_mode=PIPES_AS_CONCAT;select 1

但是怎么做这个题目就非常奇怪,怎么猜出来他后面的语句就很牛逼。就不纠结是怎么猜出来了

插入之后的语句应该是这样的,先查询1的值,再将||符号设置为连接符,也就是查询1和flag的值        

select 1;sql_mode=PIPES_AS_CONCAT;select 1||flag from flag;

简化的查询结果是这样

*,1的用法(||的用法为逻辑或)

考点是sql_mode参数,还有个堆叠注入,至于*,1的那种解法,很麻烦,还是写一下把

这种方法是不更改||逻辑或的用法

判断一下为什么会,我的理解是||符号是逻辑或的意思,也就是1||flag,判断1为真,flag为假

我感觉Flag表中是含有flag的列的,flag中也是会有内容的

所以

select *,1||flag from Flag

所以就查找所有的值,并且创建名字为1的列,内容也为1,这个列是临时的,并不会创建到表中

这个目的就是为什么查找Flag表中的所有的值

select *,1 from Flag

随机找了个表测试了一下

列是临时的

我尝试查找||的用法,询问ai,有发现mysql中0值为假,非0值为真,c语言中也是一样的

所以就是1,2,3这些数字是为真的,0是为假的,那flag是为真还是假

在MySQL中,1||flag表达式中,只要flag不是0或者NULL,整个表达式的结果都为真。

逻辑运算符||是逻辑或(OR)操作符,用于连接两个条件。当两边的任意一个条件为真时,整个表达式就为真。在MySQL中,非零值被视为真,而零和NULL被视为假。因此,在这个表达式中,如果flag的值不是0且不是NULL,那么整个表达式的结果就为真。

例如:

如果flag的值为1,那么1||1显然为真。
如果flag的值为非零的其他数值,如5,那么1||5也为真。
如果flag的值为0,那么1||0为假,因为此时两个操作数中有一个为假。
如果flag的值为NULL,那么1||NULL也为假,因为在MySQL中,NULL与任何值进行逻辑运算的结果都是NULL,而NULL在布尔上下文中被视为假。
需要注意的是,虽然||可以用作逻辑运算符,但在MySQL中,它更常用作字符串连接操作符。为了避免混淆,建议在涉及逻辑运算时使用OR关键字而不是||。

经过我的测试,select *,1||value from sys_config,并不会增加1的列,反而增加了逗号后面的内容,也就是||在mysql中不起作用,已经起作用了,就是查找1的值,只是将1||value,其实查找的1的值,

[SUCTF 2019]EasySQL | CTF Writeup (gitbook.io)

反而是使用一个|这种可以查到值

两个||只能查到1的值

这篇挺详细的

buuctf-[SUCTF 2019]EasySQL 1(小宇特详解)-CSDN博客

[SUCTF 2019]EasySQL1 题目分析与详解_[suctf 2019]easysql 1-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值