BUUCTF-[SUCTF2019]EasySQL

Posted upstream秦玉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUUCTF-[SUCTF2019]EasySQL相关的知识,希望对你有一定的参考价值。

[SUCTF2019]EasySQL

这个连闭合都测试不出来,就有点无从下手了。

额,随手输了一个1;show tables;出来了表名。一通操作之后,点开了别人的wp,学习了一波。

然后知道了题目中的查询语句是怎么样的了,

sql="select".post[\'query\']."||flag form Flag"

并且知道了,这个是拼接出来的语句,此处||的作用相当于是or;

解法一:

额,既然知道了闭合方式,尝试构造

首先,观察,我们可以传递一个*进去,查询所有数据,如果有限制,随后在做修改;其次,我们需要将||flag给“吃掉”

于是构造出payload:qurey=*,1

即可获得flag:

image-20210601030847508

*,1说明

  • *,1作用

    *代表查询搜有数据;1是跟||flag做判断,进行了运算。由于1这一列是“存在”的(是临时增加的),得到1;

    所以语句select *,1||flag from Flag成了select *,1 from Flag

  • *,*行不行

    不行,且不知道原因

  • 数字不能出现在*前,即1,*是错误的

    额,知道原因,说不清楚;意思就是说,临时增加的列,不能够对原来的表造成任何影响。如果临时增加的列在了*前面那么原来的列的序号就会发生改变。如图:image-20210601034210338

  • *,12,2可行

解法二:

playload:query=1;set sql_mode=pipes_as_concat;select 1

说明:

PIPES_AS_CONCAT:将“||”视为字符串的连接符号,而不是操作符号,这个和Oracle数据库是一样的,也和字符串拼接函数Concat相似。

注意:这里的payload不能拆分,单独执行

image-20210601035141232

因为,select 99和两个ARRAY,足以说明已经将||视为连接符号

反思:

哇,由于以前做的题类型,都是对限制条件进行注入和绕过,还没有做过注入,所以,想也想不到是构造查询的列。

再加上,对于我来说,第一步,必然是找闭合方式,如果闭合方式找不到,也就没法做题了(只是对我来说),别说盲注什么的了,就连下一步的勇气都没了。

参考:https://blog.csdn.net/weixin_44866139/article/details/105857487

以上是关于BUUCTF-[SUCTF2019]EasySQL的主要内容,如果未能解决你的问题,请参考以下文章

BUUCTF[SUCTF 2019]EasySQL

BUUCTF-web

BUUCTF-WEB

buuctf刷题之旅—web—EasySQL

题解记录-BUUCTF|Web (持续更新中)

刷题记录:[SUCTF 2019]EasySQL (欠)