今天我收到了一封非常令人不快的电子邮件,其中有一个人已经获得了我所有的数据库用户记录,并且他附上了部分屏幕截图作为证据,其中包含与数据库相同的确切信息。
我将如何开始查看问题所在? 那是什么类型的黑客攻击?
任何帮助表示感谢。
答案 0 :(得分:3)
听起来像SQL注入(最有可能是url或表单参数)。
您可以使用工具来测试您的网站,例如sqlmap,可能需要一段时间才能运行。
您最有可能在不清理网址和表单变量的情况下生成查询。通常可以通过为特定url或表单参数添加单引号来找到SQL注入。
编辑:还有一种替代方案,我在很多年前看到,一个网站正在使用fopen
,允许用户通过代理图像请求(以防止它被但是在fopen中,他们没有检查传递的URL请求(作为URL变量)实际上是URL。从日志中可以清楚地看出黑客做了什么:
/proxy.php?url=proxy.php
) - 这返回了proxy.php的源代码。找到包含的文件。 答案 1 :(得分:1)
要了解如何在不查看源代码的情况下发现SQL注入漏洞,请阅读“SQL Injection Attacks by Example”和“SQL Injection Walkthrough”。要防止SQL注入,请使用PDO驱动程序和prepared statements,其参数无法注入。
只有预准备语句中的标量值才能转换为参数。语法的其他部分(例如,表和列名称,列表,ASC和DESC顺序说明符)不能参数化。对于这些,不要将用户输入直接传递到语句中。相反,请使用白名单:
$orderDirs = array('up' => 'ASC', 'down' => 'DESC', '' => '');
if (isset($orderDirs[$_REQUEST['dir']])) {
$orderDir = $orderDirs[$_REQUEST['dir']];
} else {
$orderDir = $orderDirs[''];
}
$query = $db->prepare("SELECT foo, bar FROM blag WHERE baz > ? ORDER BY foo $orderDir");
答案 2 :(得分:1)
我假设您所指的网站是您个人资料中的网站pokerbanda。我看到你正在运行wordpress 3.0.1(由朋友的工具whatweb报告)。
我还注意到,针对低于3.0.2的wordpress版本报告了一个SQL注入漏洞,因此您的应用程序可能容易受到攻击;看看secunia's vulnerability report。
作为第一步,我建议您升级到最新版本的wordpress。您还应该加入他们用于宣布发布的任何邮件列表,并尝试保持最新,特别是对于任何安全修复程序。
答案 3 :(得分:0)
他可以通过SQL注入进入。
答案 4 :(得分:0)
听起来像SQL注入。这意味着您在代码中的某个位置将未经过处理的用户输入传递给SQL查询。像这样:
$sql = "SELECT field FROM table WHERE field = '" . $_GET['formfield'] . "'";
在这种情况下,用户可以提交您的表单,以便formfield
变量包含以下内容:
' OR 1=1;--
这意味着传递给您的数据库的SQL变为:
SELECT field FROM table WHERE field = '' OR 1=1;--'
使查询匹配该表中的所有内容,返回所有内容,因为1=1
始终返回true。 --
用于表示SQL注释,以便数据库在注入SQL后忽略任何内容,即结束'
。
它可能会变得更糟,因为你也可以注入这样的东西:
'; DROP TABLE table; --
';
将关闭您的初始查询,然后新的查询DROP TABLE table;
将会运行,如果该表存在则会销毁该表。
检查执行SQL查询的任何位置的代码,包括直接从用户收到的数据。你应该使用一种叫做“预备语句”的东西来处理这些注射事件。
答案 5 :(得分:0)
我假设您使用MySQL。您现在可以采取几种措施来防止: 1.更改您的用户名和密码以访问de database 2.使用mysql_real_escape_string()转义您在网站中执行的每个查询。这有助于防止和SQL注入。
为了用户的安全,另一个建议是使用md5()加密他们的密码。请记住,许多人在网络上使用相同的密码,因此请注意这一点。
最后,我建议你学习如何使用框架进行PHP编码(比方说CodeIgniter或PHP)。其中许多工具已经内置了一些功能,可以帮助您与数据库进行安全交易。
希望它有所帮助!祝你好运!
答案 6 :(得分:0)
可能是SQL注入。
避免它们的最简单方法是在SQL语句中使用转义任何用户提供的文本,例如使用mysql_real_escape_string,pg_escape_string等
答案 7 :(得分:0)
使用公共可写文件夹进行SQL注入是最糟糕的组合。
可以很容易地指示MySQL在公共可写文件夹中编写PHP文件。该PHP文件可以简单地下载一个更大的PHP文件,这是一个后门。从那里,他们可以扫描您的文件系统中的密码,并做任何他们想做的事情。
要找到问题:
您还需要提醒所有用户他们的信息已被盗用。如果您以纯文本形式存储密码(这是一件可怕的事情),那么黑客可以开始登录他们的PayPal帐户,因为很多人都会重复使用密码。