【问题标题】:Sybase database password "recovery" [closed]Sybase 数据库密码“恢复”[关闭]
【发布时间】:2014-02-01 18:33:50
【问题描述】:

我对 Windows 上的 sybase 数据库具有 DBA 权限。

我还有一个不知道密码的用户。

我经常使用一个确实知道密码的应用程序,它使用密码自动登录到应用程序。但是,我无法在应用程序或其 dll/文件/注册表/等的任何位置找到该密码。

我显然不想只更改用户的密码,因为应用程序中的密码无法更新(据我所知)。

我希望能够以该用户身份登录数据库。

数据库服务器是否有任何日志记录设置以明文形式记录密码?或者我可以用来获取密码的任何其他方法(可能通过 login_procedure)? 我也可以只获取密码的哈希值(+salt)。

【问题讨论】:

  • 这与软件开发有何关系,即您在代码方面遇到的问题?
  • "数据库服务器是否有任何日志记录设置以明文形式记录密码?" -- 如果有,我不想成为该服务器上的用户。以明文形式存储密码通常是个坏主意。 (我不会说“总是”,因为大多数规则都有例外......但是是的,几乎总是。)
  • @RobertHarvey,好问题,我一直在尝试使用其他 SQL 查询和过程以及通过 Visual Studio 和 Process Monitor 进行调试来查找数据库。此外,一旦找到,我将在我自己的应用程序中使用此密码来访问数据库。所以,虽然我一直在尝试自己解决我的代码问题,但我确实理解您是否需要将此问题作为 Off Topic 结束。
  • @BrianS,我同意。不幸的是,我正处于迫切需要以明文形式获取密码的情况之一。

标签: passwords sybase sqlanywhere password-recovery


【解决方案1】:

没有 SAP Sybase 支持的方式来获取明文密码。您可以通过查询master..syslogins.passwords 列来查看哈希密码。

一种可能的解决方法是创建一个新用户,并将其别名为数据库内的相关用户。

sp_addalias 是你用来做类似事情的命令。

您可以查看哈希密码

【讨论】:

  • 我确定有方法;我很难相信 sybase 数据库和服务器是坚不可摧的。我可能需要很长时间才能弄清楚如何设置一个假的 sybase 服务器,这应该允许我获取连接字符串......但我不知道从哪里开始才能做到这一点。
  • 我也可以使用密码哈希,顺便说一句。
  • Select password from syslogins 为所有用户返回 NULL
  • 使用SELECT password from sys.sysuser 找到它。谢谢。
  • 哦,您使用的是 SQLAnywhere?我的答案是针对 Sybase ASE,对此感到抱歉。
【解决方案2】:

您无法获取明文密码,因为它没有记录在任何地方,我们也不会存储它。 ISYSUSER 系统表中存储的是密码的 SHA-256 hash,因此无法从中获取密码。 (而且它不仅仅是密码的哈希值 - 它包括一个随机盐。)

但是,如果您具有 DBA 权限,则无论如何您都可以在数据库中执行任何操作。如果您需要以该特定用户的身份进行连接,您可以以具有 DBA 权限的用户身份进行连接,然后使用SETUSER 语句。

免责声明:我在 SAP 工作,从事 SQL Anywhere 工程。

【讨论】:

  • 对,我认为它有盐,但我不确定它存储在哈希中的时间或位置。我的猜测是第一个字节(0x01)并不重要,接下来的 72 个包含散列和盐,其中 64 个字符代表散列,剩下 8 个字符(4 字节十六进制)盐。我尝试了超过 600000 种哈希方法试图重现无济于事,哈哈。
  • 一些背景信息:我有大约 400 个文件,它们都有一个名为 auto_user 的用户,都使用相同的(未知)密码(至少我 认为每个都一样)。此用户和密码是由第 3 方应用程序创建的。虽然我可以获得对所有这些文件的 DBA 访问权限,但这是一个艰苦的过程,因为 DBA 用户名和密码在每个文件上都不同 - 我不想维护这个(敏感)信息。
  • 就无法从哈希中获取密码而言......我实际上可以运行一台高性能机器或 10 台机器数周以尝试暴力破解它.所以如果我能得到 has 算法,那实际上会有很大帮助(显然我知道你不会发布它,我只是想解释一下我的意图)。
【解决方案3】:

https://www.thegrideon.com/qb-internals-sql2.html

如前几部分中多次强调的那样,QuickBooks 公司文件是 SQL Anywhere 数据库文件,但 QB 凭据不直接用于 SQL Anywhere。用户名转换为十六进制字符串,密码根据QB密码计算并转换为十六进制字符串。

默认对“管理员”与空密码转换为 SQL Anywhere: UID=41646d696e 密码=064e7afebcfbae000b22c7c85e5560f89a2a028000 QuickBooks 2018 和 2019 (SQL Anywhere 17) 的 PWD 格式不同: 密码=074c99f858df3c75f8add53fe5b3413e25cb3c2f98ec3545ae8dbe5bebda83d9fa00

SQL Anywhere UID 和 PWD 计算器是 QuickBooks 取证功能的一部分。

【讨论】:

    【解决方案4】:

    另一个选项可能是反编译应用程序并查找密码。我不知道谁会在他们的头脑中将密码硬编码到程序代码中,但听起来这就是这里发生的事情?或者,如果是内部开发的应用程序,您是否可以访问源代码?

    如果 发生了这种情况,并且您有能力重新编译应用程序,请使用密钥环(Mac、Linux)或 DPAPI (Windows) 来安全(尽可能)存储加密的应用程序代码之外的密码实例。您将能够对其进行更改,并且一些设法入侵并访问源代码或二进制文件的随机人员将无法像我建议您尝试的那样检查程序。

    我也意识到这是一篇旧帖子,您现在要么解决了问题,要么继续前进。 ;-)

    【讨论】:

    • 该应用程序是 QuickBooks Desktop,它无需用户密码即可访问底层 SQL Anywhere 服务器。我们还没有解决这个问题,只是解决了它。
    • 哦,快书。节哀顺变。 ;-)
    • 我想知道他们是否只是在进行从 Windows Everyone 组到 DBA 之类的登录映射并使用集成身份验证?只是大声沉思。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2012-10-20
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多