【问题标题】:case sensitive HQL injection select区分大小写的 HQL 注入选择
【发布时间】:2018-03-30 12:24:34
【问题描述】:

我是一名渗透测试人员,我发现了一个 HQL 注入点。我可以提取用户的密码哈希,但我必须或多或少地使用盲选语句来做到这一点,我在 where 中放置了一个额外的参数:

select count(userName) from DB where userName='admin' AND Password like 'INJECT%' AND '1'='1

INJECT 我只是遍历所有可能性,如果他能找到以某事开头的密码,就会得到是或否的回应。粗体部分是我可以完全控制的输入。

现在我的问题是这样的查询是不区分大小写的,而哈希是区分大小写的。 那么无论如何我可以确保仅从这个注入点执行类似查询时区分大小写吗? (所以除此之外我无法进行实际的 HQL 或 SQL 查询)。

【问题讨论】:

  • 除非您的数据库不遵守标准,否则类似查询 区分大小写。但不管怎样,你真的是在问我们如何破解密码吗?
  • 显然后端数据库确实不遵守标准......而且我并不是要破解任何东西,我有权通过黑客的眼光看待这个应用程序。所以我有一个很好的漏洞,当我有哈希时我可以展示它。除了我得到所有小写而不是区分大小写的哈希。为了让我的 POC 向管理层展示这有多糟糕,我想展示实际可用的哈希。所以我想把区分大小写的数据拿出来。 (不做坏事)
  • 好的,感谢您的回复。坦率地说,如果管理层不相信 HQL 注入是一个需要解决的问题,那么所有希望都将落空。但是您可以将password like 'INJECT% 替换为substring( password, 1, 6 ) = 'INJECT'
  • 我不确定这会做什么(我破坏了应用程序,所以他们必须在我再次测试之前修复它:P)。在您的示例中,我是否需要在 INJECT 中添加一些内容?还是它做其他事情?
  • 它与您自己的示例完全相同,但不使用不区分大小写的类似。因此,您想使用 like 的任何策略都可以通过使用 substring 和 = 来应用,希望是区分大小写的。

标签: hql sql-injection case-sensitive


【解决方案1】:

查询是否区分大小写并不是LIKE 运算符或= 或其他字符串函数的固有特征。

这与被比较的字符串排序有关。也就是说,如果比较中的任一字符串是具有区分大小写排序规则的字符串值,则比较将区分大小写。

如果您可以注入任意 SQL 表达式,那么您可以注入将字符串转换为区分大小写的排序规则的表达式。

示例:SQL Case Sensitive String Compare

根据您使用的 SQL 数据库品牌,语法可能会有所不同。您没有说明您使用的是哪个数据库(除非您是那些在您的意思是“Microsoft SQL Server”时说“SQL”的 Microsoft 用户之一)。

【讨论】:

  • 奇怪的是,这也不起作用。对于您的最后一句话,我实际上不知道他们在使用什么。很多时候,这些“灰盒”渗透测试往往有不想分享的客户,以使其“更容易”,尽管它只会让生活更轻松,结果更好。但是,嘿! :P
猜你喜欢
  • 2014-05-24
  • 1970-01-01
  • 2015-11-10
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 2011-11-25
  • 2020-12-09
  • 2014-05-22
相关资源
最近更新 更多