GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So finden Sie veraltete Joomla-Versionen auf Ihrem Server, um das Risiko eines Hackerangriffs zu verringern

Heute möchte ich mich auf ein Thema konzentrieren, das zu großen Problemen durch gehackte Accounts, Spam-Mails etc. führen kann:Veraltete Joomla-Installationen auf Ihrem Server.

Dies gilt natürlich auch für andere Software. Die genannte Methode sollte für andere Software ähnlich funktionieren. Seit Joomla ist im Internet weit verbreitet, insbesondere auf Shared Hosting Systeme CMS (Content Management System) , dieses Howto behandelt bisher nur Joomla.

Voraussetzungen

Sie benötigen mindestens die Tools bc und sed, die nicht immer standardmäßig installiert sind.

Lassen Sie uns beginnen

Zunächst stellt sich eine Frage:Wie erkenne ich die Joomla-Version anhand der installierten Dateien?

Dies hängt von der installierten Version von Joomla ab. Bis jetzt habe ich drei verschiedene Dateien gefunden, die die Versionsinformationen enthalten:
/libraries/joomla/version.php
/libraries/cms/version/version.php
/includes/version.php

Die wichtigsten Zeilen dieser Dateien sind die Versionsnummer und die Nebenversion die in folgenden Variablen enthalten sind:
var $RELEASE ='1.0';
var $DEV_LEVEL ='12';

Im nächsten Schritt suchen wir auf der offiziellen Website nach der neusten Version von Joomla. Zum Zeitpunkt der Erstellung dieses Howtos gibt es drei Versionsgruppen:1.5 (1.5.26), 2.5 (2.5.17) und 3.2 (3.2.1).

Finden Sie Joomla-Installationen auf Ihrem Server

Eine Sache, die alle Joomla-Installationen gemeinsam haben, ist der Ordnername "components", also suchen wir nach allen Ordnern mit diesem Namen. Gleichzeitig ignorieren wir alle Komponentenordner, die in einem Unterordner "administrator" enthalten sind. Der Basispfad /var/www muss angepasst werden, wenn die Webseiten auf Ihrem Server nicht darin liegen.

find /var/www/ -type d -name 'components' ! -wholename '**/administrator/components'

Dieser Befehl gibt Ihnen eine Liste aller dieser Ordner. Der Befehl dirname ist geeignet, um den Pfad zu erhalten, der den Komponentenordner enthält. Dies ist der Basispfad der Joomla-Installation.

Wir tun dies in einer Schleife für alle gefundenen Komponentenordner:

for L in `find /var/www/ -type d -name 'components' ! -wholename '**/administrator/components'`; do
    D=`dirname $L`;
fertig

Haupt- und Nebenversion abrufen

Um die Version Ihrer Installation zu erhalten, verwenden wir die kombinierten Befehle "grep" und "sed".

Zuerst prüfen wir, welche der drei zuvor erwähnten Dateien im Installationspfad vorhanden ist.

F=$D/libraries/joomla/version.php;
F2=$D/libraries/cms/version/version.php;
F3=$D/includes/version.php;
if [[ -e "$F" || -e "$F2" || -e "$F3" ]]; then
    if [[ -e "$F" ]]; dann
        F=$F;
    elif [[ -e "$F2" ]]; dann
        F=$F2;
    elif [[ -e "$F3" ]]; then
        F=$F3;
    fi
else
    echo "Keine Joomla-Versionsdatei gefunden.";
fi

Jetzt lesen wir die Haupt- und Nebenversion aus dieser Datei:

VERSION=`grep '$RELEASE' $F | sed -r "s/^.*=\s*'(.*)'.*$/\1/g"`;
SUBVERSION=`grep '$DEV_LEVEL' $F | sed -r "s/^.*=\s*'(.*)'.*$/\1/g"`;

Versionen vergleichen

Da Versionsnummern keine ganzen Zahlen sind, können wir sie innerhalb des Bash-Skripts nicht mit -lt usw. vergleichen. Stattdessen müssen wir ein externes Programm namens bc:

verwenden

ISOK=1;
if [[ $(echo "if (${VERSION} <1.5) 1 else 0" | bc) -eq 1 ]]; then
    # Version ist niedriger als 1.5
    ISOK=0;
elif [[ $(echo "if (${VERSION} ==1.5) 1 else 0" | bc) -eq 1 &&$(echo "if (${SUBVERSION} <26) 1 else 0" | bc) -eq 1 ]]; dann
    # Version ist 1.5.x, aber niedriger als 1.5.26
    ISOK=0;
### und so weiter - weitere Versionsprüfungen
sonst
    ISOK=1;
fi

Das vollständige Skript

Jetzt können wir alle Teile zu einem gebrauchsfertigen Skript zusammenbauen und einige kleinere Verbesserungen hinzufügen. Das Skript sucht nach allen Joomla-Versionen im angegebenen Basispfad und gibt Informationen über den Status aus. Von einer Version 1.5.26 kann man natürlich nicht sprechen als "aktuell" markiert, da es sich aber um die aktuellste Version des 1.5-Zweigs handelt und ein Update auf den 2.5- oder 3.x-Zweig teilweise sehr aufwendig ist, markiert dieses Skript diese Version als "OK". Sie können dies ändern, wenn Sie möchten.

Hier ist eine Beispielausgabe des Skripts:

[INFO] Version 1.5.26 in /var/www/xxx ist ok.
[WARNUNG] veraltete Joomla-Version 1.0.12 in /var/www/yyy
[WARN] veraltete Joomla-Version 1.5.14 in /var/www/zzz
[WARN] veraltete Joomla-Version 2.5.8 in /var/www/aaa
[WARN] veraltete Joomla-Version 1.5.10 in /var/www/bbb

Und jetzt:das komplette Drehbuch. Einfach als "joomlascan.sh" speichern und über

aufrufen

bash joomlascan.sh

Wenn Sie als zusätzliches Argument einen Dateinamen angeben (z. B. bash joomlascan.sh list.csv), erhalten Sie eine Datei namens list.csv, die eine Liste aller veralteten Installationen enthält:

/var/www/yyy;1.0.12;1.5.26
/var/www/zzz;1.5.14;1.5.26
/var/www/aaa;2.5.8;2.5.17
/var/www/bbb;1.5.10;1.5.26

Tipp:
Wenn Sie ISPConfig 3 verwenden, sollten Sie den BASEPATH auf BASEPATH="/var/www/clients/client*/web*" ändern.

#!/bin/bash

# current version 1.5.x
CUR15=26
# aktuelle version 2.5.x
CUR25=17
# aktuelle version 3.2.x
CUR3=1

#base path of the websites
BASEPATH="/var/www/"

# write to csv file (optional argument)
OUTFILE=$1

if [[ "$OUTFILE" != "" ]] ; then
    # empty CSV file
    echo -n "" > $OUTFILE ;
fi

for L in `find ${BASEPATH} -type d -name 'components' ! -wholename '**/administrator/components' | grep -v '/tmp/'` ; do
    D=`dirname $L` ;
    F=$D/libraries/joomla/version.php ;
    F2=$D/libraries/cms/version/version.php ;
    F3=$D/includes/version.php ;
    ISOK=0 ;
    SHOWNEWEST="" ;
    IMPORTANCE=0 ;
    if [[ -e "$F" || -e "$F2" || -e "$F3" ]] ; then
        if [[ -e "$F" ]] ; then
            F=$F ;
        elif [[ -e "$F2" ]] ; then
            F=$F2 ;
        elif [[ -e "$F3" ]] ; then
            F=$F3 ;
        fi
        VERSION=`grep '$RELEASE' $F | sed -r "s/^.*=\s*'(.*)'.*$/\1/g"` ;
        SUBVERSION=`grep '$DEV_LEVEL' $F | sed -r "s/^.*=\s*'(.*)'.*$/\1/g"` ;
        if [[ $(echo "if (${VERSION} < 1.5) 1 else 0" | bc) -eq 1 ]] ; then
            # version is lower than 1.5
            SHOWNEWEST="1.5.${CUR15}" ;
            IMPORTANCE=3 ;
        elif [[ $(echo "if (${VERSION} == 1.5) 1 else 0" | bc) -eq 1 && $(echo "if (${SUBVERSION} < ${CUR15}) 1 else 0" | bc) -eq 1 ]] ; then
            # version is 1.5.x but not most current version
            SHOWNEWEST="1.5.${CUR15}" ;
            IMPORTANCE=2 ;
        elif [[ $(echo "if (${VERSION} == 1.6) 1 else 0" | bc) -eq 1 ]] ; then
            # version is 1.6
            SHOWNEWEST="2.5.${CUR25}" ;
            IMPORTANCE=2 ;
        elif [[ $(echo "if (${VERSION} == 1.7) 1 else 0" | bc) -eq 1 ]] ; then
            # version is 1.7
            SHOWNEWEST="2.5.${CUR25}" ;
            IMPORTANCE=2 ;
        elif [[ $(echo "if (${VERSION} > 1.7) 1 else 0" | bc) -eq 1 && $(echo "if (${VERSION} < 2.5) 1 else 0" | bc) -eq 1 ]] ; then
            # version is somewhere between 1.7 and 2.5
            SHOWNEWEST="2.5.${CUR25}" ;
            IMPORTANCE=2 ;
        elif [[ $(echo "if (${VERSION} == 2.5) 1 else 0" | bc) -eq 1 && $(echo "if (${SUBVERSION} < ${CUR25}) 1 else 0" | bc) -eq 1 ]] ; then
            # version is 2.5 but lower than current
            SHOWNEWEST="2.5.${CUR25}" ;
            IMPORTANCE=1 ;
        elif [[ $(echo "if (${VERSION} >= 3) 1 else 0" | bc) -eq 1 && $(echo "if (${VERSION} < 3.2) 1 else 0" | bc) -eq 1 ]] ; then
            # version is 3.0 or 3.1
            SHOWNEWEST="3.2.${CUR3}" ;
            IMPORTANCE=2 ;
        elif [[ $(echo "if (${VERSION} == 3.2) 1 else 0" | bc) -eq 1 && $(echo "if (${SUBVERSION} < ${CUR3}) 1 else 0" | bc) -eq 1 ]] ; then
            # version is 3.2 but lower than current
            SHOWNEWEST="3.2.${CUR3}" ;
            IMPORTANCE=1 ;
        else
            ISOK=1 ;
            echo "[INFO] version $VERSION.$SUBVERSION in $D is ok." ;
        fi
    else
        # seems not to bee a joomla version ...
        ISOK=1 ;
    fi ;
    
    if [[ $ISOK -eq 0 ]] ; then
        echo "[WARN] outdated Joomla version $VERSION.$SUBVERSION in $D" ;
        if [[ "$OUTFILE" != "" ]] ; then
            # write CSV file
            echo "\"$D\";$VERSION.$SUBVERSION;$SHOWNEWEST;$IMPORTANCE" >> $OUTFILE ;
        fi
    fi
done

exit 0 ;

Es gibt ein bekanntes Problem mit diesem Skript:Es kann Mambo nicht erkennen. Daher werden alle Mambo-Installationen als "OK" markiert, unabhängig davon, welche Version sie haben.


Linux
  1. So sichern Sie Ihren ISPConfig 3-Server gegen den Poodle-SSL-Angriff

  2. So treten Sie Ihrem Linux-Server dem NTP-Pool-Projekt bei

  3. Ich glaube, der PC wird gehackt. Wie macht man??

  4. So finden Sie die gemeinsam genutzte IP-Adresse Ihres Servers in cPanel

  5. Wie finde ich die Version von Fedora, die ich verwende?

Finden Sie die IP-Adresse Ihres Servers

Wie ändere ich das Partitionsschema auf Ihrem Linux-Server?

So finden Sie den Standort Ihrer Server mit Traceroute und WHOIS

So verstecken Sie Ihre NGINX-Serverversion.

So finden Sie die gemeinsam genutzte Haupt-IP-Adresse Ihres Servers in cPanel

So finden Sie Ihren Servernamen in cPanel