[SUCTF 2019]EasySQL 1

2023-11-01 14:47:38 浏览数 (1)

题目环境:

把你的旗子给我,我会告诉你旗子是不是对的。

判断注入类型 1' 回显结果

不是字符型SQL注入

1 回显结果

数字型SQL注入

查所有数据库,采用堆叠注入 1;show databases;

查看所有数据表 1;show tables;

尝试爆Flag数据表的字段 1;show columns from Flag;

回显错误

到这里,大佬们直接猜出了后端语句 select $_GET['query'] || flag from Flag 我直接好家伙,大佬果然是大佬 ||就是SQL里面的逻辑或运算符 解法1: *,1 那么传到后端语句就是 select *,1 || flag from Flag 这里我问了下文心一言,看完我也理解了

这段SQL代码的含义是:从Flag表中选择所有的列,以及由列flag的值与数字1进行连接生成的新列。 具体来说: select *:选择所有的列。 1 || flag:这是SQL中的字符串连接操作。它将数字1与flag列的值进行连接。对于每一行,都会生成一个新的字符串,这个字符串是数字1后跟着flag列的值。如果flag列的值本身是一个字符串,那么这两个字符串将被连接起来。 from Flag:从Flag表中选择数据。 因此,这段代码的输出结果将包含Flag表的所有列,以及一个名为“1”的列,该列的值是flag列的值与数字1的连接。

大致意思,就是查看数据表Flag的所有列内容,然后添加了一个由列flag的值与数字1进行连接生成的新列,这个新的列名就叫1,那么猜测或者说就是flag被过滤,我们还能查到flag列的值,因为flag的值复制到了新的列1。 *,0

可以明显看到新的列名0和flag的值连接起来了 *,1

对吧,新列名为1 *,2

还是为1,所有还可以看出Flag数据表的列只能是两个 解法2: 既然题目内置的是逻辑或运算符,那咱们直接把它改成字符串连接符不就好了嘛(滑稽) 使用set方法定义sql_mode参数设置,PIPES_AS_CONCAT字符串连接符select 1查询第一列 1;set sql_mode=PIPES_AS_CONCAT;select 1 回显结果:

可以明显看出解法1和解法2的回显结果有明显不同

0 人点赞