我在参与一个私人漏洞赏金计划时,发现 LIMIT 子句中存在一个 SQL 盲注入,这个漏洞利用起来非常棘手。我们的输入被传递给一个 SQL 查询,如下所示:
SELECT whatever_column FROM whatever_table LIMIT {{our_input}}
我们无法使用多个语句,而且在 MySQL 的 LIMIT 子句中也无法进行子查询。起初,除了注意到响应中的偏移量变化之外,我什么也做不了1 OFFSET 2#
,但这不足以证明其影响。
我在网上搜索了所有可以利用 limit 子句中的 MySQL 注入的方法,但我所发现的只是一种使用 MySQL 5.x 中的过程的技术,而该技术在较新版本的 MySQL 中不再起作用,因为我们不再可以在 LIMIT 子句之后使用过程。
那么现在该怎么办?我查看了 MySQL 8.x 文档,发现了一些非常有趣的事情:
. . . [LIMIT {[offset,] row_count | row_count OFFSET offset}] [into_option] [FOR {UPDATE | SHARE} [OF tbl_name [, tbl_name] ...] [NOWAIT | SKIP LOCKED] | LOCK IN SHARE MODE]
明白我们要做什么了吗?我们可以使用这样的payload:
vuln_param = 1 + FOR + SHARE + OF + table_name#
如果表存在,我们将收到 200 响应代码。如果不存在,我们将收到 500 错误。
我使用 python 自动破解数据库中的表,并能够提取 4 个有效的表名。
笔记 :
此技术仅提取查询中使用的表,但如果选项不足,它会非常方便。如果您受到严格的 WAF 限制,则可以使用此方法提取一些有效的表名。
原文始发于微信公众号(红云谈安全):在受限 SQL 注入场景中枚举 MySQL 8.x 和 9.x 中表名的有趣技术
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论