BUUCTF web-[SUCTF 2019]EasySQL

46 篇文章 0 订阅
5 篇文章 0 订阅
本文介绍了如何在遇到SQL注入问题时,通过改变||的逻辑作用来获取所需数据。作者分享了两种解题方法:一是利用数字1和*创建新列并查询;二是设置sql_mode为pipes_as_concat,使得||变为字符串拼接而非逻辑或。通过这些技巧,可以成功读取Flag表的内容,展示了SQL注入攻防中的知识和策略。
摘要由CSDN通过智能技术生成

[SUCTF 2019]EasySQL

在这里插入图片描述
输入 show tables# 爆表我们发现了Flag表
在这里插入图片描述1;show columns from Flag;# 查询Flag表的内容
在这里插入图片描述
不给我们查,应该是过滤了某些关键字。
我再试了试order by 联合联合查询,依然是返回NO,没辙,学习开始:

这题关键:要想办法让 ||不是逻辑或

解法一:

直接输入 **,1就可的flag

题解:

内置的sql语句为:
sql=“select”.post[‘query’]."||flag from Flag";

如果$post[‘query’]的数据为*,1,sql语句就变成了
select *,1||flag from Flag

select *,1 from Flag

也就是直接查询出了Flag表中的所有内容

ps:
通过大佬们的blog知道:
这道题目需要我们去对后端语句进行猜测

1、输入非零数字得到的回显1和输入其余字符得不到回显,来判断出内部的查询语句可能存在有||

2、进一步进行猜测即为select post进去的数据||flag from Flag(含有数据的表名,通过堆叠注入可知),需要注意的是,此时的||起到的作用是or的作用。

解法二:

输入的内容为:
1;set sql_mode=pipes_as_concat;select 1

题解:

我们执行的语句分别为:
select 1
set sql_mode=pipes_as_concat
select 1||flag from Flag

其中set sql_mode=pipes_as_concat;的作用为将||的作用由or变为拼接字符串
这个模式下进行查询的时候,使用字母连接会报错,使用数字连接才会查询出数据,因为这个 || 相当于是将 select 1 和 select flag from flag 的结果拼接在一起.
读出flag

知识点:

在这里插入图片描述select任何一个常数都会在表中新建一列,然后查询出那一列的内容

2.sql_mode:它定义了 MySQL 应支持的 SQL 语法,以及应该在数据上执行何种确认检查,其中的PIPES_AS_CONCAT将 ||视为字符串的连接操作符而非 “或” 运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值