[初级]sql注入之堆叠注入、运算符干扰[SUCTF 2019]EasySQL1

本文介绍了SUCTF 2019比赛中EasySQL1题目的解决过程,涉及堆叠注入技术。通过分析提示和尝试不同注入方法,最终确定输入值参与了SQL查询的OR运算,成功获取flag。

平台

BUUCTF ctf 的一个在线测试平台:点我进入

题目介绍

题目编号:[SUCTF 2019]EasySQL1
进入题目之后发现只有一个文案:Give me your flag, I will tell you if the flag is right. 还有一个文本框和一个提交的按钮。应该毫无疑问是在这里进行注入了。
题目的展示
当我们随意填写值的时候,比如 aaa 没有任何的显示,当我们填写的是数字会出现 Array ( [0] => 1 ) 这个信息很关键,说明这时候应该是查询到有值返回显示的。

猜想1 填写的数字是条件如id

因为是数字才会有值显示,不是数字没有值显示,猜测我们填写的是id值,然后尝试了几个数字后显示的都是一样的内容,感觉这个猜想不成立。

猜想2 使用报错注入、union注入

既然前面的猜想不成立,那么就使用常规手段去注入,使用union注入时,显示 nonono,然后输入 select、from、uinon等关键字时,发现有些关键字会显示 nonono,这个应该是有sql关键字的识别。

猜想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 ) 可以看到时存在堆叠注入的,但是因为有sql关键字的识别,所以这个堆叠注入也只能看看库表的情况。

猜想4 输入的是select 后面的值

当我们输入数字的时候,会显示 Array ( [0] => 1 ) ,那么这个值是怎么来的呢?
当我们输入:** 1,2,3**的时候显示的是 Array ( [0] => 1 [1] => 2 [2] => 1 ) 可以看到显示查询到的信息有3列,分别是 1,2,1前面的1,2应该是我们输入的1,2 那么后面的1应该是计算出来的,和我们填写一个数字的时候的逻辑是一致的,那么我们可以尝试 ,1 查询当前表的字段
当我们输入:
,1 显示的是:Array ( [0] => flag{4c2e8cf2-f879-463f-930c-7f5a555fffb6} [1] => 1 ) flag直接出来了。

题目解释

这道题和猜想4是一致的,虽然不知道计算的逻辑是什么,但是这个并不影响解题,只要给一个值计算,我们拿其他的值展示即可。
sql语句是 select input || flag from flag;
input是我们的输入,计算的逻辑是一个或的运算

总结

这道题并不难,主要是靠猜。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值