一、sql注入
1、概述
SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,主要是针对程序代码没有对用户提交的参数进行过滤,导致不需要账号密码即可执行sql语句达到获取到数据库中的数据。
2、sql注入类型
1)整形
输入参数的值为整形
2)字符型
输入参数的值是字符串
区别:目前学习只能感觉在闭合点有区别外,其他也没啥
3、sql注入种类
常见的有:
1)union注入攻击
2)报错注入
3)布尔盲注堆
4)时间盲注
二、sql注入判断思路
1、判断注入点
1)and 1=1 和 and 1=2联合使用判断
2)单引号判断
2、判断查询语句是字符型还是整数型
字符型不会去执行加减法,所以可以利用’+’或者’-’号来判断。
例如:?id=2-1
与?id=1
返回的值是一样的就是整数型
3、闭合方式
整数型貌似不用去使用东西刻意闭合,只需使用注释符号把剩下的语句失效就行了。字符型的需要看报错信息来闭合,如果没有报错信息就得自己fuzz了哈哈哈。
4、判断当前表中字段数量
当order by后的数字超过字段数量就会报错,group by也有这种效果,可以当做waf绕过吧。
5、找回显点
在order by判断出数量后,使用union select来判断回显点。
三、information_schema库
1、概述
information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据库的数据),例如数据库名、表名、列的数据类型、访问权限等。
2、information_schema.schemata表
information_schema.schemata表存放着数据库中数据库的信息。
查询所有数据:select schema_name from information_schema.schemata;
相当于在mysql命令行中执行:show databases;
3、information_schema.tables表
information_schema.tables表中存放系统中的所有表。查找某个数据库中所有的表:select table_name from information_schema.tables where table_schema = 'databaseName';
4、information_schema.columns表
查询表中所有的字段:select column_name from information_schema.columns where table_schema = 'databaseName'and table_name = 'tableName';
5、查询表中的所有数据
有了库名和表名还有字段名,所以可以直接使用:select [字段1,字段2,...] from databaseName.tableName;