mysql注入——显错注入

一,sql注入的本质

注入攻击的本质是:把用户输入的数据当作代码执行。

注入的两个关键条件:

1,用户能控制输入。

2,原本程序要执行的代码,拼接了用户输入的数据。

sql注入就是在自带的系统数据库中查询库,表,字段,内容的过程

mysql内置自带库版本>=5

msyql库 保存账户信息,权限信息,存储过程,event,时区等信息

sys库包含了一系列存储过程,自定义函数以及视图来帮助我们快速了解系统的元数据信息

performance_schema库用于收集数据库服务器的性能参数

information_schema库存储了关于mysql服务器维护的所有其他数据库的信息,如数据库,表,表的数据类型与访问权限等。

查询数据库名称语句

select schema_name from information_schema.schemata

注入OOM故障 MySQL mysql报错注入原理_注入OOM故障 MySQL


查表

select table_name from information_schema.tables where table_name=库名

注入OOM故障 MySQL mysql报错注入原理_sql注入_02


查列

select column_name from information_schema.columns where table_name=表名

注入OOM故障 MySQL mysql报错注入原理_sql注入_03


查数据

select 列名 from 库名.表名

注入OOM故障 MySQL mysql报错注入原理_数据库_04


二,sql注入类型概括

按照注入点类型来分类

(1)数字型注入点

在 Web 端大概是 http:///news.php?id=1 这种形式,其注入点 id 类型为数字,所以叫数字型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where id=1。组合出来的sql注入语句为:select * from news where id=1 and 1=1

(2)字符型注入点

在 Web 端大概是 http:///news.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name=‘admin’。注意多了引号。组合出来的sql注入语句为:select * from news where chr=‘admin’ and 1=1 ’ ’

闭合单引号chr=‘admin’ union select 1,2,3,4 and ‘1’='1 ====> chr=‘admin’(闭合前面单引号) union select 1,2,3,4 and ‘1’=‘1’

(3)搜索型注入点

这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有“keyword=关键字”,有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like ‘%关键字%’。

组合出来的sql注入语句为:select * from news where search like ‘%测试 %’ and ‘%1%’=’%1%’

测试%’ union select 1,2,3,4 and ‘%’=’

三,sql注入基本流程

1,判断是否存在注入点

and 1=1 页面返回正常

and 1=2 页面返回不正常

URL后加单引号’ “ --+页面返回不正常

or sleep(5)页面5秒钟后正常显示

2,猜解字段数

利用order by 排序

order by 1 以第一个字段排序

select * from users order by 1;

注入OOM故障 MySQL mysql报错注入原理_字段_05


第一个字段为id order by 1 就以第一个id字段来排序id从小到大排序

order by 2 以第二个字段排序

注入OOM故障 MySQL mysql报错注入原理_sql注入_06


第二个字段为username字段内容为字符串

就以字符串开头的26字母排序

当我们输入order by 4时

注入OOM故障 MySQL mysql报错注入原理_注入OOM故障 MySQL_07


发现没有第四个字段那么数据表内就只有三个字段

注入OOM故障 MySQL mysql报错注入原理_注入OOM故障 MySQL_08


3,联合查询寻找输出点

union select 1,2,3,4#

tips:union select 联合查询前面语句要为假

注入OOM故障 MySQL mysql报错注入原理_注入OOM故障 MySQL_09


找到网站的输出点

在我们语句2的位置输入要查询数据的语句

union select 1,database(),3,4#

注入OOM故障 MySQL mysql报错注入原理_数据库_10


数据库名就显示出来了

4,mysql的函数及用法

注入OOM故障 MySQL mysql报错注入原理_注入OOM故障 MySQL_11


注入OOM故障 MySQL mysql报错注入原理_注入OOM故障 MySQL_12


sql注入测试中常用函数

group_concat()返回属于一组的列值连接组合而成的结果

注入OOM故障 MySQL mysql报错注入原理_注入OOM故障 MySQL_13


ascii() 返回字符串的ASCII值

注入OOM故障 MySQL mysql报错注入原理_字段_14


database() 返回当前数据库名

注入OOM故障 MySQL mysql报错注入原理_字段_15


user() 或者 system_user()返回当前数据库登陆用户名

注入OOM故障 MySQL mysql报错注入原理_sql注入_16


注入OOM故障 MySQL mysql报错注入原理_字段_17


version()返回msyql数据库版本

注入OOM故障 MySQL mysql报错注入原理_字段_18


sleep(n) 让数据库运行n秒后返回结果

注入OOM故障 MySQL mysql报错注入原理_数据库_19


注入OOM故障 MySQL mysql报错注入原理_字段_20


@@dataidir 返回数据库安装绝对路径

注入OOM故障 MySQL mysql报错注入原理_注入OOM故障 MySQL_21


@@basedir返回数据库数据存储绝对路径

注入OOM故障 MySQL mysql报错注入原理_注入OOM故障 MySQL_22