BUUCTF-[SUCTF2019]EasySQL

[SUCTF2019]EasySQL

BUUCTF-[SUCTF2019]EasySQL

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

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

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

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

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

解法一:

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

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

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

即可获得flag:

BUUCTF-[SUCTF2019]EasySQL

*,1说明

  • *,1作用

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

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

  • *,*行不行

    不行,且不知道原因

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

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

  • *,12,2可行

解法二:

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

说明:

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

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

BUUCTF-[SUCTF2019]EasySQL

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

反思:

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

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

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

上一篇:python 学习 初入爬虫


下一篇:一个简单的mfc单页界面文件读写程序(MFC 程序入口和执行流程)