【发布时间】: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