less-5
首先输入id=1和id=1’未报错,均显示You are in.....(如下图所示)
由上图可以看到,如果运行返回结果正确的时候只返回you are in...,不会返回数据库当中的信息了,所以我们不能之前所采用的在less-4之前的方法了。
再输入id=888,可以看到页面如下所示,没有显示位,无法使用联合查询。
接着我们输入id=2’如下图所示,页面出现SQL语句报错,在这里我们就可以使用一种新的注入方式:报错注入
首先在这里我们先对sql语言进行一个理解:
select concat((select database()));
真正执行的时候,先从子查询进行。因此执行select database() 这个语句就会把当前的数据库查出来,然后把结果传入到concat函数。这个函数是用来连接的。比如concat(‘a’,’b’)那结果就是ab了。
我们这里以数据库security为例,执行一下,如下图所示,就可以看到数据库是security
然后我们测试一下concat的用法:
输入select concat (“string”,”qaq”);可以看到输出结果就是把引号里面的内容连接起来了。
接下来我们测试rand随机函数是怎么用的,我们多执行几次找规律。
由上图执行结果可以看到,输出的结果都是随机的,且都是0到1之前的小数
接下来取整函数floor()上场了,我们随便输入一个小数取整
由上图可以看到取整数成功!然后我们看看双注入查询中的一个简单组合
因为rand()随机函数输出结果是在0到1之间,那么如果我们要使rand()随机函数输出结果是在0到2之间,那么我们就可以写成rand()*2了,如果我们对 rand()*2函数进行取整的话,那么输出结果一定是0或者1。
来,我们一起来尝试一下
输入select concat((select database()),floor(rand()*2));
再多尝试下
由上图我们可以看到输出结果不是security0就是security1。
接下来我们先查询下security数据库中有哪些表。
我们这里以emails表为例
输入select concat((select database()),floor(rand()*2)) from emails;
这里我在后面加了from emails(表名),那么返回结果是security0或security1的一个集合。数目是由表本身有几条结果决定的。比如一个管理表里有5个管理员。这个就会返回五条记录,这里emails表里有8个用户,所以返回了8条。
那么我们在后面添加from information_schema.schemata,就会返回6条结果,因为information_schema.schemata这个表里包含了mysql的所有数据库名,有6个数据库即就返回6条结果(如下图所示)
接下来我们可以加上group by语句了,group by是一个用来分组的语句,当然分组的话我们应该要起个组名对吧?那么如果我想实现把information_schema.schemata表里的security0分到一组,security1分到一组,分为两组起名为hh该怎么做呢?
输入:select concat((select database()), floor(rand()*2))as hh from information_schema.schemata group by hh;
由上图可以看到已经展示出来了一个分组,但是information_schema.schemata里面的表的数目没有一个具体的显示以及一个统计,所以我们应该使用聚合函数count(*)
select count(*),concat((select database()), floor(rand()*2))as hh from information_schema.schemata group by hh;
由上图看到,完全就是一个很好的总结,可以很明显的看到security0有4个,security1有2个。
我们也可以查询数据库的版本
可以查询数据库表的用户
现在我们可以开始注入了
尝试爆数据库名称
输入:
id=1' union select null,count(*),concat((select database()),floor(rand()*2))as hh from information_schema.schemata group by hh --+
多刷新几次
爆数据库下的表名称
首先我们输入id=1' union select null,count(*),concat((select table_name from information_schema.schemata where table_schema='security'),floor(rand()*2))as hh from information_schema.tables group by hh--+来试试
这里显示了输出结果超过一行,那么我们就应该用到limit了,还记得前面的limit怎么用的嘛?忘记了再倒回去看前面的less-1哦
这里我们输入:
id=1' union select null,count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 3,1),floor(rand()*2))as hh from information_schema.tables group by hh--+
好的,从上面我们可以看到把表users1爆出来了,多刷新几次发现爆出来的表,我们就会发现,爆出来的结果要么是users1要么是users0,这不就达到了我们想要的结果了吗?
下面我们就可以来查询users表下面的字段了
输入id=1' union select null,count(*),concat((select username from users limit 3,1),floor(rand()*2))as hh from information_schema.tables group by hh--+
以上就是我们通过报错注入来实现我们想要的东西~
随机推荐
- socket-02
# -- coding: utf-8 -- _author__ = "HuaQiang Yan" import socket def handle_request(client): ...
- Redis实现实时热点查询
Redis内存淘汰 定义: 指的是用户存储的一些键被可以被Redis主动地从实例中删除,从而产生读miss的情况 机制存在原因: Redis最常见的两种应用场景为缓存和持久存储 首先要明确的一个问题是 ...
- SpringBoot系列教程web篇之全局异常处理
当我们的后端应用出现异常时,通常会将异常状况包装之后再返回给调用方或者前端,在实际的项目中,不可能对每一个地方都做好异常处理,再优雅的代码也可能抛出异常,那么在 Spring 项目中,可以怎样优雅的处 ...
- idea springboot启动报SLF4J:Failed to load class “org.slf4j.impl.StaticLoggerBinder”
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artif ...
- DatabaseGeneratedOption
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 添加时 获取值 自增 默认值,,后期无法修改如:Id(AUTO_INCREMENT, ...
- python+selenium实现自动化百度搜索关键词
通过python配合爬虫接口利用selenium实现自动化打开chrome浏览器,进行百度关键词搜索. 1.安装python3,访问官网选择对应的版本安装即可,最新版为3.7. 2.安装seleniu ...
- Dubbo使用javassist生成动态类
在服务(本地和远程)暴露的时候会调用proxyFactory.getInvoker方法 具体位置: 本地暴露:ServiceConfig#exportLocal line:538 远程暴露: Serv ...
- GoLang基础数据类型---字典
Map 是 Go 中的内置类型,它将键与值绑定到一起.可以通过键获取相应的值. 如何创建 map? 可以通过将键和值的类型传递给内置函数 make 来创建一个 map.语法为:make(map[Key ...
- Gradle 翻译 build dependencies 依赖 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Spring-Cloud之Eureka注册与发现-2
一.Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其 ...