注入之mysql报错Floor报错分析

完整的payload:
http://www.xishaonian.cn/sql.php?id=1+and(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

简化后:select count(*),(floor(rand(0)*2))x from table order by x;



MYSQL官方文档指出rand和group by不能一起用,为啥不能够一起用呢?因为一个是随机的一个是排序的。你咋让随机的进行排序呢。是吧。所以是不行滴。floor注入也就是主要利用这一点。

(floor(rand(0)*2))x :

  • rand(0)*2 就是说取随机数0(该数字被称之为随机因子,如图一所示)乘2。floor是向下取正。
  • 本来rand(0)的值是:0.15522042769493574
  • 乘2以后是:0.3104408553898715
  • 向下取正以后就是0
  • 后面的x是别名,等价于 (floor(rand(0)*2)) as x;(如图二所示)
  • 所以得出:(floor(rand(0)*2))x会等于0(如图二所示)
  • 图一:
  • 图二:


那么都分析了还有一个count(*)还没分析呢。

count和group by 合在一起用就会建立一个虚拟表,来数(shǔ)数(shù)。
大概的虚拟表如下所示(其中key是主键,是不可以重复的):

他首先会在自己内部自己创建一个虚拟的表,1代表有,0代表无。一、二、三、四、五.....如此数下去。数到最后也就0的就会结束。

(floor(rand()*2));出现的是0和1随机出现的,但(floor(rand(0)*2))出现的则是固定的为0

一篇相似的文章:http://www.2cto.com/article/201604/498394.html

时间: 2024-11-08 22:36:12

注入之mysql报错Floor报错分析的相关文章

【学习笔记】MYSQL的floor报错原理分析总结

参考链接:http://mp.weixin.qq.com/s?__biz=MzA5NDY0OTQ0Mw==&mid=403404979&idx=1&sn=27d10b6da357d72304086311cefd573e&scene=1&srcid=04131X3lQlrDMYOCntCqWf6n#wechat_redirect 网上关于floor报错的文章很多,但都是利用语句,介绍原理的文章大多一笔带过,不过我终于找到一篇像样的原理文章,于是参考着来理解原理,参考的

导入MySQL测试数据库employee报错

导入MySQL测试数据库employee 报错 下载地址:https://launchpad.net/test-db/ 上传解压: [[email protected] ~]# tar xf employees_db-full-1.0.6.tar.bz2 [[email protected] ~]# cd employees_db 使用mysql命令行工具,导入建库建表语句和数据 employee.sql中是建库建表语句,默认使用的是InnoDB引擎,可以自行修改 [[email protect

MYSQL 添加外键报错

2014年6月16日 10:48:51 出错的部分提示摘录: #1452 - Cannot add or update a child row: a foreign key constraint fails result 2 when explaining filename '#sql-3d5_204369' 解决办法: pma 中同时执行两条语句: set foreign_key_checks = 0; ALTER TABLE `table_name` ADD CONSTRAINT `fk_n

mac系统中搭建apache+mysql+php的开发环境,安装mysql后,登录报错:mac ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

php新手在mac系统中搭建apache+mysql+php的开发环境(按照这篇博客来操作的:http://my.oschina.net/joanfen/blog/171109?fromerr=xvCsafCe),在安装配置mysql完毕后,登录mysql,报错:mac ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO),折腾很久,终于解决,随手记录下,备忘. 解决方法: 第一步:如

MySQL root密码重置 报错:mysqladmin: connect to server at 'localhost' failed的解决方案

===========================================================二,忘记本地root的登录密码解决过程:1.编辑/mysql/my.ini在[mysqld] 配置部分添加一行skip-grant-tables 2.保存后重启mysql[[email protected] etc]# service mysqld restartShutting down MySQL.                                      

Mysql连接数不够(报错连接数太多)

Mysql连接数不够(报错连接数太多): 查看当前连接数: netstat -anp | grep 3306 | wc -l 查看mysql配置的最大连接数(默认为151): show variables like 'max_connections'; 修改连接数(建议设为600,即1000以内): vi /etc/my.cnf ([mysqld]在写入) max_connections = 600:wq /etc/init.d/mysql restart 原文地址:http://blog.51

Linux中mysql进入命令行报错:MYSQL ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.99.192' (111)

场景:在Linux中安装mysql01和mysql02,通过VIP虚出一个VIP=192.168.99.192,mysql01为主ip为192.168.99.153,mysql02为备机ip为192.168.99.154 此时VIP在mysql01上通过 mysql01上连接VIP :mysql -h 192.168.99.192 -P 3306   结果是可以正常进入mysql命令行: 通过mysql02上远程连接VIP 会在界面上报错:mysql error 2003(HY000):Can'

mysql 插入中文字段报错 "Incorrect string value: '\\xE6\\xB5\\x8B\\xE8\\xAF\\x95...' for column 'title' at row 1"

1. 查看一个 database 或一个 table 的编码show create database mytestdb;show create table testapp_article; mysql> show create table testapp_article;+-----------------+-----------------------------------------------------------------------------------------------

MySQL 设置root密码报错:mysqladmin: connect to server at 'localhost' failed

MySQL 设置root密码报错:mysqladmin: connect to server at 'localhost' failed 1.安装完MySQL设置root密码报错如下 [root@vm172-31-0-6 data]# mysqladmin -uroot password "linux@123" mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root