BUUCTF系列 // [SUCTF 2019] EasySQL

前言

本题知识点:SQL堆叠注入 & sql_mode

WP

打开题目页面是熟悉的 SQL 注入界面

在这里插入图片描述
既然是 SQL 注入,那么还是先按照大概的流程试试基本的探测姿势

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一番尝试后,发现共有三种可能的回显,分别为 ‘Nonono.’,空以及返回 Array。并且大部分的关键字都被过滤掉了,故考虑堆叠注入

又经过一番努力,发现基本上我会的方法都被过滤掉了。。。

查了查网上的 WP,没想到口径还挺统一的,似乎是比赛时这题泄露了源码。。。题目的关键查询代码如下:

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

发现就算看了源码还是没啥思路(捂脸), 只好从 payload 中反推一下解题的思路,payload 如下:

1;set sql_mode=PIPES_AS_CONCAT;select 1

把它放入题目的查询语句,拼接一下:

select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag
关于 sql_mode

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

在这里插入图片描述
大概就是未配置 sql_mode 之前,|| 是作为 或 运算符,当前面一个字段查询到数据时,后面一个字段的查询就不会再执行。当调整 sql_mode 后,|| 就相当于字符串拼接符,相当于是将前一个字段(例如:select 1 from Flag)和后一个字段(例如:select flag from Flag)的查询结果拼接在一起

在这里插入图片描述
PS:
除了上述官方给出的 payload 之外,众多 WP 还提到了一个同样可以得到 flag 的非预期解 *,1,把它放入题目的查询语句,拼接一下就成了:

select *,1||flag from Flag
相当于
select *,1 from Flag

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值