【16】WEB安全学习----MySQL注入-1(MySQL基础知识)

目录

 

一、基础知识

1、MySQL元数据

2、注入常用查询步骤

获取数据库名

获取表名

获取字段名

查询数据

3、MySQL注释

单行注释:#

单行注释:-- 

多行注释:/* */

4、MySQL时间延迟函数

BENCHMARK()函数

SLEEP()函数

5、MySQL条件判断函数

IF(exp,v1,v2)

IFNULL(v1,v2)

6、MySQL字符串函数

ASCII(str)或ORD(str)

CHAR(n)

HEX(str/n)

MID(str,pos,len)

CONCAT(str1,str2,...)

7、其它函数

USER()

CURRENT_USER()

VERSION()

DATABASE()

8、系统变量

@@basedir

@@datadir

@@version_compile_os

@@version

@@port

@@hostname

二、SQL注入类型

非盲注类型:

基于错误的SQL注入

联合查询类型

堆叠查询类型

盲注类型:

基于布尔的盲注

基于时间的盲注

基于报错的盲注


一、基础知识

1、MySQL元数据

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

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

information_schema数据库中常见的表
表名 字段名1 字段名2 字段名3
schemata    存放所有数据库名 SCHEMA_NAME    数据库名    
tables    存放所有表名 TABLE_SCHEMA    数据库名 TABLE_NAME    表名  
columns    存放所有字段名 TABLE_SCHEMA    数据库名 TABLE_NAME    表名 COLUMN_NAME    字段名

2、注入常用查询步骤

获取数据库名

SELECT schema_name from information_schema.schemata;

获取表名

SELECT table_name from information_schema.tables WHERE table_schema='user';

获取字段名

SELECT column_name from information_schema.columns WHERE table_schema='user' and table_name='users';

查询数据

SELECT username,passwd FROM user.users;

3、MySQL注释

单行注释:#

单行注释:-- 

多行注释:/* */

注意使用注释符来绕过程序限制:如使用/**/来绕过空格过滤

SELECT passwd FROM user.users WHERE id=1/**/or/**/1=1;

4、MySQL时间延迟函数

时间延迟函数可以用于盲注中,判断SQL语句是否被执行了。

BENCHMARK()函数

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

如:执行9999999次sha1加密需要4秒多时间

SLEEP()函数

可以让语句运行自定义秒钟。

5、MySQL条件判断函数

IF(exp,v1,v2)

 如果表达式为True,则返回v1值,如果表达式为False,则返回v2值。

IFNULL(v1,v2)

 如果v1不为null,则返回v1值,反之。

6、MySQL字符串函数

ASCII(str)或ORD(str)

返回字符串最左侧字符的代码

CHAR(n)

返回数字对应的字符

HEX(str/n)

返回十进制或字符串值的十六进制表示形式

MID(str,pos,len)

返回指定的子字符串

SUBSTR/SUBSTRING(str,pos,len)

返回指定的子字符串,和MID函数一样

CONCAT(str1,str2,...)

返回连接字符串

7、其它函数

USER()

查看用户列表

CURRENT_USER()

查看当前用户

VERSION()

查看当前数据库版本信息

DATABASE()

查看当前数据库

8、系统变量

@@basedir

MySQL的安装路径

@@datadir

MySQL数据库文件保存路径

@@version_compile_os

操作系统平台信息

@@version

MySQL数据库版本信息

@@port

MySQL数据库开放端口

@@hostname

查看服务器主机名

二、SQL注入类型

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

非盲注类型:

基于错误的SQL注入

此类是开发中写入了数据库错误信息输出代码。

联合查询类型

支持union联合查询的数据库

堆叠查询类型

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

盲注类型:

基于布尔的盲注

通过输入的不同值,有两种返回情况,可通过返回状态查看SQL是否被执行。

基于时间的盲注

如果返回状态统一,不能通过布尔进行判断,可插入时间函数,查看页面执行时间进行判断

基于报错的盲注

提供报错的情况下

猜你喜欢

转载自blog.csdn.net/a15803617402/article/details/82774164
今日推荐