[SUCTF 2019]EasySQL1 题目分析与详解

一、题目介绍

1、题目来源:

BUUCTF网站,网址:https://buuoj.cn/challenges

2、题目描述:

通过以上信息,拿到flag。


二、解题思路

首先打开靶机,尝试输入1查看回显,回显如图所示:

尝试将 1 和 or 一起输入,即 1 or 1=1。

显示 nonono,表明 or 被过滤了,这时我们就需要检查哪些关键字被过滤掉了,来判断此时应该使用什么注入方式。

首先利用 Burpsuite 进行抓包。

利用关键字字典对query进行爆破。

爆破完成,查看response,Length=560的关键字都是被过滤掉的。

得出最终结论,被过滤的关键字有:

prepare|flag|unhex|xml|drop|create|insert|like|regexp|outfile|readfile|where|from|union|update|delete|if|sleep|extractvalue|updatexml|or|and|&|" 作者:雨落雪辰 https://www.bilibili.com/read/cv11014857/ 出处:bilibili

由此观之,报错注入,union联合注入,盲注皆不可行,所以我们尝试进行堆叠注入

堆叠注入:将多条SQL语句放在一起,并用分号;隔开。

进行堆叠注入,先尝试查看数据库名称。

成功查询到数据库的名称,这表明堆叠注入是可行的,我们接着顺势查询表明。

看到表Flag,我们基本可以确定,flag在表Flag中。我们首先想到利用from来查询Flag,可是通过抓包分析可知,from关键字被过滤掉了,所以只能另寻他法。

此时我们想到,开始时我们输入1有会显,我们不妨再尝试输入0试试。

输入0发现无回显,我们尝试输入字母试试。

输入abc发现依然没有回显。这时我们可以总结出一条规律,输入非0数字--有会显,输入0或字母--没有回显,我们由此可以猜测后端代码含有 ||或运算符


补充:|| 或or 运算符讲解:

select command1 || command2 

情况一:若command1为非0数字,则结果为1。

情况二:若command1为0或字母,command2为非0数字,则结果为1。

情况三:command1和command2都不为非0数字,则结果为0。


通过以上分析,我们可以判断后端代码中存在或运算符。

查看本题的后端代码,事实与我们的判断相吻合。

$sql = "select ".$post['query']."||flag from Flag"; 

方法一:使用 sql_mode 中的 PIPES_AS_CONCAT 函数。

PIPES_AS_CONCAT:将 || 或运算符 转换为 连接字符,即将||前后拼接到一起。

select 1 || flag from Flag的意思将变成 先查询1 再查询 flag,而不是查询1flag,只是查询的结果会拼接到一起,不要弄混淆了。

所以查询语句如下:

1;sql_mode=PIPES_AS_CONCAT;select 1

查询结果如下:

1的查询结果为1,被flag的查询结果拼接到了一起,get到flag。


方法二:利用非预期漏洞获取flag。

1、非预期漏洞的概念:

若输入1,1。那么sql语句就变成了 select 1, 1 || flag from Flag。其中由 [1] 和 [1 || flag] 两部分组成,而非 [1,1] || [flag]。非预期漏洞是利用数据库对符号判断的不准确形成的漏洞。

2、如何拿到flag:

输入 *,1 后,sql语句就变成了 select * , 1 || flag from Flag。

其中分为两部分: (1) select * from Flag(2) select 1 || flag from Flag。

select * from Flag 通过查看表Flag中的所有数据可以 get到flag。

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
wav文件是一种常见的音频文件格式,它是由Microsoft和IBM共同定义的。下面是对wav文件格式的详解: 1. 文件头(Header):wav文件的前44个字节是文件头,包含了文件的基本信息。文件头的结构如下: - ChunkID(4字节):文件标识,通常为"RIFF"。 - ChunkSize(4字节):文件大小,即整个文件的大小减去8个字节(ChunkID和ChunkSize本身的大小)。 - Format(4字节):文件格式,通常为"WAVE"。 - Subchunk1ID(4字节):子块标识,通常为"fmt "。 - Subchunk1Size(4字节):子块大小,即除去Subchunk1ID和Subchunk1Size本身的大小。 - AudioFormat(2字节):音频格式,常见值为1表示PCM(脉冲编码调制)。 - NumChannels(2字节):声道数,常见值为1表示单声道,2表示立体声。 - SampleRate(4字节):采样率,即每秒采样的样本数。 - ByteRate(4字节):数据传输速率,即每秒传输的字节数。 - BlockAlign(2字节):数据块对齐,即每个采样的字节数。 - BitsPerSample(2字节):样本位数,即每个采样的位数。 2. 数据块(Data Chunk):文件头之后的部分是音频数据块,包含了实际的音频采样数据。数据块的结构如下: - Subchunk2ID(4字节):子块标识,通常为"data"。 - Subchunk2Size(4字节):子块大小,即音频数据的大小。 - Data(变长):音频数据,以二进制形式存储。 在wav文件中,音频数据以采样点的形式存储,每个采样点的值表示音频信号在该时间点上的幅度。采样点的位数(BitsPerSample)决定了每个采样点的精度,位数越高,精度越高,音频质量也越好。 总结起来,wav文件格式通过文件头和数据块来存储音频数据,其中文件头包含了文件的基本信息,数据块存储了实际的音频采样数据。通过解析文件头和读取数据块中的采样数据,可以对wav文件进行分析和处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值