前言
本来是想一个个关卡讲下去,后来自己测试了一下,发现第二、三、四这三关跟第一关,起始原理是一样的,只不过是单引号,双引号,带不带括号的区别,只要我们带入的语句能够把sql查询语句完美闭合并且执行我们想要的结果,就可以。
那这一节就把上一节课的后续表名、列名、用户名、密码也查询出来
在这之前先了解几个mysql语句
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 连接输出结果
我们的攻击语句构造如下
以第一关为例
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字段,这就是我们要的用户名和密码字段
总体来说,整个流程并不难,主要是要对sql的查询语句熟悉,以及一些函数的使用。配合上我们上节测试得出的sql查询语句,就可以构造我们想要的攻击代码。
1、如过觉得文章帮助到了你,请帮忙手动转发,谢谢各位老铁支持
2、禁止使用该文章用于非法用途