Joomla 网站被黑了?
Joomla Site Hacked?
我们有一段时间没有接触过我们的 Joomla 网站了。当我去添加新内容时,我们遇到了以下问题。初始页面显示正常,但无论何时单击任何菜单项或 link,我们都会显示以下俄语文本:
Иайл ключевиков keys/sharperdevelopment.com.txt пуст или не существует。 Пропишите туда хотя бы один ключевик.
转换为:
文件关键字keys/sharperdevelopment.com.txt为空或不存在。规定至少一个关键字。
有人知道这是黑客问题还是配置问题吗?网页上的查看源显示没有其他 HTML 只是上面显示的文本。
我们的 Joomla 版本刚刚升级为:Joomla! 3.4.8 稳定
该网站是SharperDevelopment.com
当然,这是在我们遇到新的潜在客户之前发生的。如有任何帮助或建议,我们将不胜感激。
如果您的网站在更新之前遭到黑客攻击,您将需要梳理文件系统以查找已修改 and/or 添加的文件。
上传 Joomla 3.4.8 的全新副本无法解决此问题。
我假设 linux 因为那是我 运行 的时候。我管理多个 LAMP 服务器,每个服务器托管多个域。
保存备份并将其标记为已感染。这样做是因为该站点虽然已被感染但仍在运行。
第一件事...
run tail -f path/to/logs/* | grep POST
您需要查看谁在您网站上发布奇怪的文件。
关闭自动换行。
发布到的每个发现都需要直观地查看。
joomla 文件以 <?php\n
开头,然后注释 header。如果您看到一串 PHP 代码,则需要将其删除。
这是我经常看到的发布到的一些文件的列表。
nnnnnnnnnnnnnnnnn.php
alias.php
article.php
css.php
blog66.php
defines.php < Joomla file that has been modified.
dirs.php
footer4.php
functions14.php
global.php
lib87.php
trust.php
functions.php
/includes/defines.php 不应该是一个长文件。如果你看到 //istart 那么你需要删除从那一点开始的所有内容。
您需要对使用 eval 或 GLOBAL 的文件进行 grep。还应检查 istart。这些命令很可能会输出大量数据,因此将其通过管道传输到 less。
find /home -iname \*.php | xargs pcregrep -M "^<?php.*\n.*fun"
find /home/ -iname \*.php | xargs grep "eval("
find ./ -iname \*.php | xargs grep "globals"
管到 less 这样的作品。
find ./ -name \*.php | xargs grep -r "eval(" | less
grep -r "eval(" | less
您将查找包含这样但更长的编码字符串的文件:(发布的代码无效)1ktebHkKHMh7oMftoPA4evcfEoVJs4sUmcTtLCl5Jq0IGoKAUnbzDC1f6C2rJpduyVxvDvRsEztPwSUb6ey73tAVtx8A6BPK+SwyqR/edx3BsfPnmsfbwCFG2kYk
很多时候文件会以 eval base64_decode 和 gzuncompress 结束。
许多合法文件使用 eval 和 base64 解码。如果您看到一个非常长的编码数据块,它很可能是恶意文件。一段时间后,您将能够看到看起来不正确的图案。
一些文件可能也有 google 机器人的用户代理。我最近一直看到这个所以寻找字符串 googlebot
以下字符串的 grep 文件。
74.125
lnkfarm.pw # this is an actual host. It has been reported to Interpol
您可以备份您获得的任何文件,并根据 joomla 的 github 存储库检查它们。
https://github.com/joomla/joomla-cms
同时检查 mailq 是否有由垃圾邮件机器人引起的延迟邮件,这就是许多这些文件的用途..
我还添加了如下 iptables 规则来最初阻止它。
-A INPUT -p tcp -m tcp --dport 80 -m string --string "POST /libraries/joomla/exporter.php" --algo bm --to 90 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m tcp --dport 80 -m string --string "POST /modules/bmvlfj.php" --algo bm --to 90 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m tcp --dport 80 -m string --string "POST /modules/7595mb.php" --algo bm --to 90 -j REJECT --reject-with icmp-port-unreachable
可能还有很多其他方法可以搜索恶意文件,但这是我现在拥有的方法。
清除所有恶意文件后,进行备份,然后更新所有扩展。之后我会再次检查您的文件并将 Joomla 文件的新副本加载到您的网站上,然后在您的网站目录中搜索最旧的文件。
确定一切正常后,更改所有密码并进行备份。不要在本地存储备份。
补充回答,也许对你有帮助:
您的问题:
Joomla Site Hacked?
尝试 Eyesite 扩展。它为您的 J!网站目录树和以后,如果有任何变化,它 e-mails 你直到你协调变化。 (多久一次,这取决于您 – 您使用 cron
设置检查时间表。)这样您就可以收到预警,尤其是在像您这样的网站上,在很长一段时间内变化最少。
我很好奇你发现了什么?我有一个在 3.4.7 之后启动的 Joomla 3 站点(我认为 .8 在 .7 之后很快就出现了,我认为它可能是一个修复程序)。我在这里学到了什么 >>> http://forum.joomla.org/viewtopic.php?f=706&t=902833
根据这些信息,我关闭了 SEF,网站运行正常(好吧,不太好,因为我想使用 SEF)。
我也担心被黑,但该线程上的其他发帖人似乎认为这是托管问题(我们使用的是 BH)。
更新:好像有人在我找到解决方案后发帖。
http://forum.joomla.org/viewtopic.php?f=706&t=902833#p3352730
这修复了我的网站。干杯!
如果您 运行 您自己的服务器,您可以使用 incrond
实时监控文件更改。您将需要编写一个脚本来生成要监视的目录列表:
PARAM="IN_CREATE,IN_DELETE,IN_MODIFY,IN_MOVED_FROM,IN_MOVED_TO,IN_ATTRIB"
CMD='/path/to/mail/script file change detected in: $@/$# with event [$%]|Web files changed'
OUTPUT=/etc/incron.d/www-changes
WEBROOT=/var/www
# generate config
find $WEBROOT -type d -print0 | xargs -0 -I{} echo "{} $PARAM $CMD" > $OUTPUT
如果您不 block front end access 访问不应浏览的目录,您将被黑客入侵。以下目录应阻止前端访问:
bin|cli|components|includes|language|layouts|libraries|logs|plugins|tmp
您还应该禁用 运行前端可访问目录中的脚本:
images|media|modules|templates
然后您可以使用 incrond
监控错误日志以获取对禁止文件的访问并阻止攻击者。
使用来自 I-Blocklist with ipset
will also help. I block approximately 120,000
abusive ip's in a fraction of a second. It is also useful to block tor
nodes 的列表。
如果您使用 ipset
,您应该将阻止规则放在 iptables raw
table 以获得更好的性能而不是 input
& output
table 许多指南显示不正确。
运行 Hiawatha Webserver作为网络服务器或反向代理也会阻止很多攻击。
您的 /var/www
应该安装 noexec,nosuid
以防止攻击者 运行 上传他们设法上传的脚本。
使用 php-fpm
中的 chroot
功能来限制攻击者可用的文件。要在 chroot
运行 中找到 dns
分辨率所需的文件列表:
strace php /path/to/file-below
<?php
header( "Content-Type: text/plain" );
echo( gethostbyname( "google.com" )."\n" );
print_r( getdate() );
?>
我们有一段时间没有接触过我们的 Joomla 网站了。当我去添加新内容时,我们遇到了以下问题。初始页面显示正常,但无论何时单击任何菜单项或 link,我们都会显示以下俄语文本:
Иайл ключевиков keys/sharperdevelopment.com.txt пуст или не существует。 Пропишите туда хотя бы один ключевик.
转换为:
文件关键字keys/sharperdevelopment.com.txt为空或不存在。规定至少一个关键字。
有人知道这是黑客问题还是配置问题吗?网页上的查看源显示没有其他 HTML 只是上面显示的文本。
我们的 Joomla 版本刚刚升级为:Joomla! 3.4.8 稳定 该网站是SharperDevelopment.com
当然,这是在我们遇到新的潜在客户之前发生的。如有任何帮助或建议,我们将不胜感激。
如果您的网站在更新之前遭到黑客攻击,您将需要梳理文件系统以查找已修改 and/or 添加的文件。
上传 Joomla 3.4.8 的全新副本无法解决此问题。
我假设 linux 因为那是我 运行 的时候。我管理多个 LAMP 服务器,每个服务器托管多个域。
保存备份并将其标记为已感染。这样做是因为该站点虽然已被感染但仍在运行。
第一件事...
run tail -f path/to/logs/* | grep POST
您需要查看谁在您网站上发布奇怪的文件。
关闭自动换行。
发布到的每个发现都需要直观地查看。
joomla 文件以 <?php\n
开头,然后注释 header。如果您看到一串 PHP 代码,则需要将其删除。
这是我经常看到的发布到的一些文件的列表。
nnnnnnnnnnnnnnnnn.php
alias.php
article.php
css.php
blog66.php
defines.php < Joomla file that has been modified.
dirs.php
footer4.php
functions14.php
global.php
lib87.php
trust.php
functions.php
/includes/defines.php 不应该是一个长文件。如果你看到 //istart 那么你需要删除从那一点开始的所有内容。
您需要对使用 eval 或 GLOBAL 的文件进行 grep。还应检查 istart。这些命令很可能会输出大量数据,因此将其通过管道传输到 less。
find /home -iname \*.php | xargs pcregrep -M "^<?php.*\n.*fun"
find /home/ -iname \*.php | xargs grep "eval("
find ./ -iname \*.php | xargs grep "globals"
管到 less 这样的作品。
find ./ -name \*.php | xargs grep -r "eval(" | less
grep -r "eval(" | less
您将查找包含这样但更长的编码字符串的文件:(发布的代码无效)1ktebHkKHMh7oMftoPA4evcfEoVJs4sUmcTtLCl5Jq0IGoKAUnbzDC1f6C2rJpduyVxvDvRsEztPwSUb6ey73tAVtx8A6BPK+SwyqR/edx3BsfPnmsfbwCFG2kYk
很多时候文件会以 eval base64_decode 和 gzuncompress 结束。
许多合法文件使用 eval 和 base64 解码。如果您看到一个非常长的编码数据块,它很可能是恶意文件。一段时间后,您将能够看到看起来不正确的图案。
一些文件可能也有 google 机器人的用户代理。我最近一直看到这个所以寻找字符串 googlebot
以下字符串的 grep 文件。
74.125
lnkfarm.pw # this is an actual host. It has been reported to Interpol
您可以备份您获得的任何文件,并根据 joomla 的 github 存储库检查它们。
https://github.com/joomla/joomla-cms
同时检查 mailq 是否有由垃圾邮件机器人引起的延迟邮件,这就是许多这些文件的用途..
我还添加了如下 iptables 规则来最初阻止它。
-A INPUT -p tcp -m tcp --dport 80 -m string --string "POST /libraries/joomla/exporter.php" --algo bm --to 90 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m tcp --dport 80 -m string --string "POST /modules/bmvlfj.php" --algo bm --to 90 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -m tcp --dport 80 -m string --string "POST /modules/7595mb.php" --algo bm --to 90 -j REJECT --reject-with icmp-port-unreachable
可能还有很多其他方法可以搜索恶意文件,但这是我现在拥有的方法。
清除所有恶意文件后,进行备份,然后更新所有扩展。之后我会再次检查您的文件并将 Joomla 文件的新副本加载到您的网站上,然后在您的网站目录中搜索最旧的文件。
确定一切正常后,更改所有密码并进行备份。不要在本地存储备份。
补充回答,也许对你有帮助:
您的问题:
Joomla Site Hacked?
尝试 Eyesite 扩展。它为您的 J!网站目录树和以后,如果有任何变化,它 e-mails 你直到你协调变化。 (多久一次,这取决于您 – 您使用 cron
设置检查时间表。)这样您就可以收到预警,尤其是在像您这样的网站上,在很长一段时间内变化最少。
我很好奇你发现了什么?我有一个在 3.4.7 之后启动的 Joomla 3 站点(我认为 .8 在 .7 之后很快就出现了,我认为它可能是一个修复程序)。我在这里学到了什么 >>> http://forum.joomla.org/viewtopic.php?f=706&t=902833
根据这些信息,我关闭了 SEF,网站运行正常(好吧,不太好,因为我想使用 SEF)。
我也担心被黑,但该线程上的其他发帖人似乎认为这是托管问题(我们使用的是 BH)。
更新:好像有人在我找到解决方案后发帖。
http://forum.joomla.org/viewtopic.php?f=706&t=902833#p3352730
这修复了我的网站。干杯!
如果您 运行 您自己的服务器,您可以使用 incrond
实时监控文件更改。您将需要编写一个脚本来生成要监视的目录列表:
PARAM="IN_CREATE,IN_DELETE,IN_MODIFY,IN_MOVED_FROM,IN_MOVED_TO,IN_ATTRIB"
CMD='/path/to/mail/script file change detected in: $@/$# with event [$%]|Web files changed'
OUTPUT=/etc/incron.d/www-changes
WEBROOT=/var/www
# generate config
find $WEBROOT -type d -print0 | xargs -0 -I{} echo "{} $PARAM $CMD" > $OUTPUT
如果您不 block front end access 访问不应浏览的目录,您将被黑客入侵。以下目录应阻止前端访问:
bin|cli|components|includes|language|layouts|libraries|logs|plugins|tmp
您还应该禁用 运行前端可访问目录中的脚本:
images|media|modules|templates
然后您可以使用 incrond
监控错误日志以获取对禁止文件的访问并阻止攻击者。
使用来自 I-Blocklist with ipset
will also help. I block approximately 120,000
abusive ip's in a fraction of a second. It is also useful to block tor
nodes 的列表。
如果您使用 ipset
,您应该将阻止规则放在 iptables raw
table 以获得更好的性能而不是 input
& output
table 许多指南显示不正确。
运行 Hiawatha Webserver作为网络服务器或反向代理也会阻止很多攻击。
您的 /var/www
应该安装 noexec,nosuid
以防止攻击者 运行 上传他们设法上传的脚本。
使用 php-fpm
中的 chroot
功能来限制攻击者可用的文件。要在 chroot
运行 中找到 dns
分辨率所需的文件列表:
strace php /path/to/file-below
<?php
header( "Content-Type: text/plain" );
echo( gethostbyname( "google.com" )."\n" );
print_r( getdate() );
?>