【MySQL注入-01】

目录

一、基础知识

1、MySQL元数据

2、MySQL注释

3、MySQL时间延迟函数

4、MySQL条件判断函数

5、MySQL字符串函数

6、SQL注入类型


一、基础知识

1、MySQL元数据

INFORMATION_SCHEMA是每个MySQL实例中的数据库,该实例存储有关MySQL服务器维护的所有其他数据库的信息。你只能读取该数据库内容,不能修改、增加、删除等操作。

每个MySQL用户都有权访问这些表,但只能看到表中与用户具有适当访问权限的对象相对应的行。

扫描二维码关注公众号,回复: 2586254 查看本文章
常见的表
表名 字段名1 字段名2 字段名3
schemata    存放所有数据库名 SCHEMA_NAME    数据库名 DEFAULT_CHARACTER_SET_NAME    字符集  
tables    存放所有表名 TABLE_SCHEMA    数据库名 TABLE_NAME    表名  
columns    存放所有字段名 TABLE_SCHEMA    数据库名 TABLE_NAME    表名 COLUMN_NAME    字段名

注入常用查询语句:

1、查询所有数据库名:select schema_name from information_schema.schemata;

2、查询该数据库里的表名:select table_name from information_schema.tables where table_schema = 'jd';

3、查询该表里的字段名:select column_name from information_schema.columns where table_schema = 'jd' and table_name = 'user';

4、查询该表里的数据:select username,password from jd.user;

2、MySQL注释

单行注释:#

单行注释:--空格

多行注释:/**/

注意:当后端过滤了空格,可以用多行注释绕过空格限制:

select * from users where id = 1/**/or/**/1=1;

3、MySQL时间延迟函数

BENCHMARK()函数:测试某些特定操作的执行速度,参数是需要执行的次数和表达式。

demo:select benchmark(10000000,password('123456'));    执行本条sql语句,明显感觉延迟了几秒才出结果。

sleep(N)函数可以让语句运行N秒钟。

demo:sleep(5);    过了5秒钟,才返回了结果。

4、MySQL条件判断函数

语法格式:IF(表达式,v1,v2)    如果表达式为True,则返回v1值,如果表达式为False,则返回v2值。

语法格式:IFNULL(v1,v2)    如果v1不为null,则返回v1值,反之。

5、MySQL字符串函数

获取指定长度的字符串:left(s,n)    返回字符串s开始的最左边n个字符。

获取指定长度的字符串:right(s,n)    返回字符串s开始的最右边n个字符。

获取字符串长度:length(str)    返回字符串的字节长度。

合并字符串:concat(s1,s2,......)    返回结果为连接参数产生的字符串。

合并字符串:concat_ws(x,s1,s2,......)      x是其他参数的分隔符。

替换字符串:insert(s1,x,len,s2)    返回字符串s1,其子字符串起始于x位置和被字符串s2取代的len字符。

删除指定字符串:trim(s1 from s)    删除字符串s中两端所有的子字符串s1。

比较字符串大小:strcmp(s1,s2)    若所有的字符串都相同,则返回0,第一个小于第二个,则返回-1,其他情况返回1。

获取子字符串:substring(s,n,len)    从字符串s返回一个长度同len字符相同的子字符串,起始于n。

获取子字符串:mid(s,n,len)与substring(s,n,len)的作用相同

字符串逆序:reverse(s)

6、SQL注入类型

SQL注入按照不同的出发点有很多分类,我喜欢按照盲注和非盲注进行分类。

非盲注类型:

1、基于错误的SQL注入:此类是开发中写入了数据库错误信息输出代码。

2、联合查询类型:支持union联合查询的数据库

3、堆叠查询类型:支持多条语句查询 如:select version();select database(),但php+mysql不支持堆叠查询。

盲注类型:

1、基于布尔的盲注

2、基于时间的盲注

3、基于报错的盲注

常见确认SQL注入点demo:

id=1/*ddd*/    如果返回结果和id=1一样,有可能是数据库解析了注释符,可能存在注入。

name=ad' 'min    MySQL数据库字符串连接用空格,如果返回结果和name=admin一样,则可能存在注入

id=1+1    如果返回的数据和id=2则存在注入

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/81281337