我最近制作的一个网站遭到黑客攻击和污损。他们进入了一个自制的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查询中,因为这可能是一个漏洞。
有什么想法吗?
发布于 2012-11-29 10:28:56
SELECT * FROM Admin WHERE Username = '$_POST[Username]'
如果这个^真的是您实际的select语句,那么它就是SQL注入。没有比这更简单的事情了。虽然你看起来对他们得到你的哈希并不太吃惊,所以我假设你问题的根源是关于他们是如何使用哈希进入你的网站的。
这里有几个选项:
在数据库中为自己创建一个新的用户(sql tables
选你所选。一旦黑客有了SQL注入这样一个良好的立足点,许多新的攻击载体就会出现。
此外,我还想知道--这个黑客到底在想什么,把他们的不幸经历发布到facebook上?这是你的朋友还是什么?如果是这样的话,也许你应该直接问他们是怎么做到的。如果不是..。我真的需要这么说吗..。你已经得到了你的男人/女孩--正义的时间。
发布于 2012-11-29 13:58:21
这与您的实际密码无关。只有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注入的保护。
发布于 2012-11-29 10:23:57
问题可能是您使用md5散列密码,这很容易发生冲突和过时。如果他们有你的散列密码,他们可以找到一个产生相同散列的字符串,即使它不是你的实际密码。
使用更强的散列算法,如SHA和salt,以防止彩虹攻击。
https://stackoverflow.com/questions/13617778
复制相似问题