我最近制作的网站遭到黑客攻击和破坏。他们进入了一个自制的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查询中,因为这可能是漏洞。
有什么想法吗?
答案 0 :(得分:2)
SELECT * FROM Admin WHERE Username = '$_POST[Username]'
如果这^实际上是你的实际select语句,那就会尖叫SQL注入。这可不是那么容易。虽然你似乎没有太震惊,他们得到你的哈希,所以我会假设你的问题的根源是关于他们如何使用哈希进入你的网站。
这里有几个选项:
接受你的选择。一旦黑客像SQL注入那样有了一个很好的立足点,就会打开许多新的攻击媒介。
另外,我不得不怀疑 - 这个黑客想把他们的不幸事件发布到脸书上的是什么?这是朋友还是什么?如果是这样,也许你应该问他们是如何做到的。如果不是......我真的需要这样说......你已经得到了你的家伙/正义时间。
答案 1 :(得分:1)
这与您的实际密码无关。只有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注入的保护。
答案 2 :(得分:0)
问题可能是您使用md5对密码进行了哈希处理,这很容易发生冲突和过时。如果他们有您的哈希密码,他们可以找到产生相同哈希的字符串,即使它不是您的实际密码。
使用更强大的散列算法(如SHA和salt)来防止彩虹攻击。