根据题目猜测这是一道SQL注入的题目
输入一个单引号触发报错,根据报错信息得知闭合条件就是一对单引号
继续构造表达式,得出一共包含两个回显位
构造表达式求出当前数据库的名称,但是根据回显数据和实践来看,此题是对select进行了过滤,并且不区分大小写
过滤了select就意味着联合注入,报错注入等都不能使用了,不过还有一个堆叠注入
通过堆叠注入查询到一共包含两个表
继续构造表达式,查看words表中包含的字段,注意是使用的反引号包裹words表
发现一共是包含两个字段:id 和 data
1';show columns from `words`;#
再查看1919表中的字段信息,发现只有一个flag表
但是想要查询flag表中的数据,要用到select了呀,这是真不知道怎么办了,但是经过查询得知,当我们查询时,一共有两个回显数据,结合我们刚才查询words和1919表中的字段数可以知道这个页面的查询语句就是:select id,data from words where id =
得知这个特性之后,就可以利用堆叠注入执行sql语法,先将words表的名字改为其他的名字,然后将1919表改为words,并且将1919表中新建一个字段id,并把flag改为data,结合页面sql查询语法,就可以获取flag信息
1';alter table `words` rename to `123`;alter table `1919810931114514` rename to `words`;alter table words add id int(10);alter table words flag data varchar(20);--+
因为在1919表中并没有实现id的值对,所以我们通过查询所有数据就可以得到flag
这只是一种方法,也是最简单的一种方法