首页 > 数据库 >[SUCTF 2019]EasySQL

[SUCTF 2019]EasySQL

时间:2023-07-19 19:55:10浏览次数:33  
标签:SUCTF 语句 Flag EasySQL flag 2019 mode sql select

[SUCTF 2019]EasySQL

题目来源:buuctf

题目类型:web

涉及考点:SQL注入、堆叠注入

1. 题目给了一个输入框,先随便传点东西进去

  • 传入数字回显如下:
  • 传入flag回显如下:
  • 传入字符无回显

没什么其他线索了,还是爆破一下看看过滤了哪些字符:

返回长度为507的字符都是被过滤了的,包括union、sleep、extractvalue,那么union注入、时间盲注、报错注入都用不了了,这时候想到可以试试堆叠注入

2. 尝试堆叠注入

  • 爆库名:
1;show databases;
  • 爆表名:
1;show tables;

感觉就在Flag表里了,但是 flag 又被过滤了

我们明确一下目标,现在我们需要查询 Flag 表中的 flag 字段

即:select flag from Flag

尝试了几个绕过方法无果,只能看看其他师傅的wp,发现这题需要猜测后端的查询语句

3. 猜测后端语句

后端查询语句如下:

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

下面说一下这样猜测的原因:(有点马后炮的意思)

首先在第一步我们知道,传入数字有回显,传入字符无回显,那么可以推测查询语句中有 或结构(||)

在或结构中,如果左右两边都是字符串,则会报错(当表中无相应列时),对应到本题就是传入字符无回显

例如,我们构造语句select abc||flag from flag,当表中没有abc列时,在数据库中会有报错如下:

Unknown column 'abc' in 'field list',这里只是举例说明了为什么可以猜测具有或结构

其次是在做堆叠注入时我们已经知道具有表Flag,因此后续肯定是from Flag

4. 在知道后端语句的情况下,我们构造payload

法一:

比较简单的做法是,payload直接构造:

*,1

这样传入之后,后端语句就变成了:

select *,1 from flag

因为1||flag相当于把flag截断了

传入后得到flag:

法二:

第一次见到这种做法,涨知识了,利用了sql_mode,这里简单介绍一下:

sql_mode是一组语法校验规则,个人理解是它可以设定一些sql的语法规则,常见的几个sql_mode如下:

sql_mode的值 作用
ONLY_FULL_GROUP_BY 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
NO_ZERO_DATE mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
ERROR_FOR_DIVISION_BY_ZERO 在insert或update过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时Mysql返回NULL
PIPES_AS_CONCAT 将 || 视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样是,也和字符串的拼接函数concat相类似
ANSI_QUOTES 不能用双引号来引用字符串,因为它被解释为识别符

那么我们将sql_mode的值设为PIPES_AS_CONCAT时,后端查询语句就相当于:

select concat($_POST['query'],flag) from flag

那么构造payload如下:

1;set sql_mode=PIPES_AS_CONCAT;select 1

其中1可以换成任意数字

这个构造会使得后端语句变成这样:

select 1;
set sql_mode=PIPES_AS_CONCAT;
select concat(1,flag) from flag;

为了方便查看我将这段分为三行,实际上他们处在同一行,因为第一行的分号将语句分隔了,所以我们在第三行要补上一个select

同时需要注意,这里写concat只是方便理解,实际上它还是 1||flag,只是 || 这是并不是 或,而是用作字符串连接

最终得到flag:(将1去掉即可)

flag{adff8126-a76e-4af2-b59c-b48f1c728329}

日期:2023.7.19

作者:y0Zero

标签:SUCTF,语句,Flag,EasySQL,flag,2019,mode,sql,select
From: https://www.cnblogs.com/bkofyZ/p/17566576.html

相关文章

  • WPS Office 2019 v11.8.2.12014
    下载地址:https://pan.baidu.com/s/18T2jwDAjeqy-ebT5u18zVA#list/path=%2F软件介绍WPSOffice2019博湖县政府专用版,无需序列号,免激活长期授权,这是目前最新的WPS政府专用版。WPSOffice是款一免费的办公软件套件,全面涵盖了文字处理、电子表格,演示文稿、PDF以及云服务等功能。WP......
  • Office 2019 学习
    3.2.1Office2010应用程序的启动与退出1)启动 通过“开始“菜单中的快捷方式启动 通过桌面快捷方式启动 通过关联文档启动 通过核心启动程序winword.exe2)退出 1“文件”选项卡——“关闭”命令(Ctrl+W组合键) 注意:只关闭相应的文档窗口而不退出应用程序 2“文件”选项......
  • P6227 [BalticOI 2019 Day1] 山谷
    P6227[BalticOI2019Day1]山谷Description给一棵树,一个根,一些特殊补给点,一些询问。求解如下问题:断掉一条边\(u\tov\),这样以后你能否从给定的\(R_i\)走到根,若能输出escaped。不能到达根且不能到达任何一个特殊补给点输出oo。若不能到达根但可以到达特殊补给点输出边权和......
  • 「JOISC 2019 Day4」蛋糕拼接 3 题解
    先考虑这个式子:\(\sum_{j=1}^{M}|C_{k_{j}}-C_{k_{j+1}}|\)一定是在\(C\)有序时取到,具体证明很简单各位读者自己证明。那么现在式子变成:\(\sum{V}+2\times({C_{\max}-C_{\min}})\)这个时候一个常见的技巧是将\(C\)排序。这个时候就可以定义状态:\(dp_{i,j}=\s......
  • [GUET-CTF2019]KO
    直接给了一个txt文件,打开直接是ook的编码不知道为啥在随波上面直接用brainfuck就直接出来又用了一下ook的解码网站也是一样的网址:Brainfuck/Ook!Obfuscation/Encoding[splitbrain.org]结束......
  • 远程登陆virtualbox虚拟机windows server 2019
    1.virtualbox网络设置2.启用远程桌面3.获取远程ip4.本机使用mstsc远程登陆......
  • [GXYCTF2019]Ping Ping Ping
    [GXYCTF2019]PingPingPing题目来源:buuctf题目类型:web涉及考点:命令执行1.题目页面如下:我们将其作为参数传入,/?ip=127.0.0.1,回显如下:接下来通过命令行查看目录:/?ip=127.0.0.1;ls2.发现了flag.php,直接查看/?ip=127.0.0.1;catflag.php发现空格被过滤了,我们采取以下......
  • 【2023.07.14】Atcoder:past201912 - 第一回 アルゴリズム実技検定(div4+区域赛难度)过题
    G-Division解法一:位运算+状压枚举(赛时思路)范围显然,可以跑\(2^n\)的算法,考虑位运算状态压缩。以\(\mathcalO(2^n\cdot2^n)\)的复杂度分别枚举位于第一组、第二组中的人,随后计算每一种分组的快乐值,代码较长,赛时敲了半个小时,不过好在一发过了。总结:其实代码里面的剪枝完......
  • [强网杯 2019]随便注
    [强网杯2019]随便注题目来源:buuctf题目类型:web涉及考点:SQL注入、堆叠注入1.先简单介绍一下堆叠注入在SQL语句中,分号用来表示一条语句的结束。那么当我们结束一条语句之后,继续构造下一条语句,可不可以一起执行呢?这就是堆叠注入,简单来说,就是把多条SQL语句一起上传。例如,我们......
  • CVE-2019-11043(PHP远程代码执行漏洞)复现
    一、漏洞介绍1、相关背景在web早期,页面都是以静态页面为主(如:HTML),没有动态页面的说法,所有还没有动态语言(如:PHP、JSP等)后来Ngnix为支持PHP语言就将有出现php页面的请求给PHP相关程序来进行处理,然后将处理后的结果反馈给用户。而解决PHP的相关程序就是cgi协议,有了cgi协议以后......