【问题标题】:Hacker got into my site黑客进入了我的网站
【发布时间】:2014-08-17 23:46:05
【问题描述】:

我最近创建的一个网站遭到黑客入侵和污损。他们进入了一个自制的 CMS 来管理网站。他们能够检索我的用户名和密码的散列版本并将其发布在 Facebook 上。

现在我的问题是,他们是如何使用散列密码进入网站的?他们不需要先解密吗?他们为什么不在他们的 Facebook 帐户上发布密码的解密版本(当我看到很多其他网站张贴在那里并显示他们的人类可读密码时)。

这是我的验证码:

SELECT * FROM Admin WHERE Username = '$_POST[Username]' // This finds the username

if ($row[Password] == md5($_POST[Password])) {
    Save Sessions here
}

虽然我现在已将 mysql_real_escape_string 添加到 SQL 查询中,因为这可能是漏洞。

有什么想法吗?

【问题讨论】:

  • 也许这更适合security.stackexchange.com
  • 不要使用 md5,使用某些版本的 sha。
  • 是的,没有转义是个大问题。比mysql_real_escape_string 更好的是准备好的语句和参数化查询。 This is a good place to start on that topic.
  • 这是一个旁白,但为了更难破解您的散列密码(无论您使用的是 SHA 还是 MD5),您还应该使用盐并进行多次传递。
  • 好的。感谢您的提示!我会试试这些。

标签: security md5


【解决方案1】:
SELECT * FROM Admin WHERE Username = '$_POST[Username]'

如果这个 ^ 真的是你的实际选择语句,那就是 SQL 注入。再简单不过了。尽管您似乎对他们得到您的哈希并不太感到震惊,但我认为您的问题的根源是关于他们如何只使用哈希进入您的网站。

这里有几个选项:

  • 彩虹桌
  • 在数据库中为自己创建一个新用户(sql 注入,记住)
  • 更改哈希(sql 注入)
  • 简单的离线暴力破解或字典攻击
  • 恶意代码重写(不太可能,因为您事后一直在仔细阅读代码)
  • 可能涉及 XSS 或会话劫持的其他可能性(您是否清理输入数据?您是否保护您的会话?)

任你选。一旦黑客有了 SQL 注入这样的良好立足点,就会出现许多新的攻击媒介。

另外,我想知道——在上帝的绿地上,这个黑客到底在想什么将他们的不幸事件发布到 Facebook 上?这是朋友还是什么?如果是这样,也许你应该问他们他们是怎么做到的。如果不是……我真的需要这么说吗……你有你的男人/女孩——正义时间。

【讨论】:

  • +1 用于在数据库中为自己创建一个新用户(sql 注入,记住)和更改哈希(sql 注入)
  • 但是,mysql_query() 不会阻止 SQL 注入吗?不,黑客是一个只针对网站并发现漏洞的组织。他们有一个 Facebook 页面。现在,我怎么知道它是谁只用一个 facebook 页面?对于正义时间部分。
  • @NitroChummy 是的...但如果您已经被黑客入侵,这将无济于事
  • 是的,克里斯在哪个帐户上? mysql_query() 防止 SQL 注入或通过他们的 fb 页面找到某人?
  • 仅仅因为您有 SQL 注入并不意味着攻击者可以完全控制您的数据库。在这种情况下,SQL 注入位于 SELECT 语句中,这意味着攻击者只能选择数据。因此,无需插入(“在数据库中为自己创建新用户”)或更新(“更改哈希”)数据。
【解决方案2】:

这与您的实际密码无关。只有SQL injection vulnerability 可以被利用来获取访问权限。我会告诉你怎么做。

假设您的 Admin 表只有两列,那么您只需要一个 UNION 来注入用户名和适合所提供密码的密码哈希:

$_POST['Username'] = "' UNION SELECT 'Admin','5ebe2294ecd0e0f08eab7690d2a6ee69"
$_POST['Password'] = "secret"

这里提供的用户名完全符合注入发生的上下文条件。这将是结果查询:

SELECT * FROM Admin WHERE Username = '' UNION SELECT 'Admin','5ebe2294ecd0e0f08eab7690d2a6ee69'

结果集将是一条带有注入用户名Admin 和MD5 哈希5ebe2294ecd0e0f08eab7690d2a6ee69 的记录。

因此,请确保您受到 SQL 注入的保护。

【讨论】:

  • 该死!!!!一个 mysql_real_escape_string 现在会阻止这种情况吗?他们怎么能找回我保存的哈希密码?
  • @NitroChummy 是的,它会阻止它。正如已经说过的,他们不需要您的实际密码,因为他们可以提供他们自己的密码哈希来测试给定的密码。但是如果他们知道了,SQL 注入可以做很多事情,甚至可以盲目地读取数据,只要你的脚本的行为不同,无论你输入的是有效用户名还是无效用户名。你绝对应该检查你的日志,看看是否有任何异常。
【解决方案3】:

问题可能是您使用 md5 对密码进行了哈希处理,这很容易发生冲突和过时。如果他们有您的散列密码,他们可以找到一个产生相同散列的字符串,即使它不是您的实际密码。

使用更强大的哈希算法(如 SHA 和盐)来防止彩虹攻击。

【讨论】:

  • 谢谢。我会试试这个。我是安全方面的新手。
猜你喜欢
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 2015-12-06
  • 1970-01-01
相关资源
最近更新 更多