GNU/Linux >> Linux Esercitazione >  >> Linux

Come trovare versioni obsolete di Joomla sul tuo server per ridurre il rischio di essere hackerato

Oggi voglio concentrarmi su un argomento che può portare a enormi problemi di account hackerati, mailing di spam ecc.:Installazioni Joomla obsolete sul tuo server.

Naturalmente, questo vale anche per altri software. Il metodo menzionato dovrebbe funzionare in modo simile per altri software. Da Joomla è ampiamente diffuso su Internet, in particolare su hosting condiviso sistemi CMS (Sistema di gestione dei contenuti) , questo howto coprirà solo Joomla finora.

Prerequisiti

Avrai bisogno almeno degli strumenti bc e sed che non sono sempre installati per impostazione predefinita.

Iniziamo

All'inizio c'è una domanda:come posso riconoscere la versione di Joomla dai file installati?

Questo dipende dalla versione installata di Joomla. Finora ho trovato tre diversi file che contengono le informazioni sulla versione:
/libraries/joomla/version.php
/libraries/cms/version/version.php
/includes/version.php

Le righe più importanti di questi file sono il numero di versione e la versione secondaria che sono contenuti nelle seguenti variabili:
var $RELEASE ='1.0';
var $DEV_LEVEL ='12';

In un passaggio successivo cerchiamo la versione più recente di Joomla sul sito ufficiale. Al momento della stesura di questo howto ci sono tre gruppi di versioni:1.5 (1.5.26), 2.5 (2.5.17) e 3.2 (3.2.1).

Trova installazioni di joomla sul tuo server

Una cosa che tutte le installazioni di Joomla hanno in comune è il nome della cartella "components", quindi cerchiamo tutte le cartelle con questo nome. Allo stesso tempo ignoriamo tutte quelle cartelle di componenti che sono contenute in una sottocartella "amministratore". Il percorso di base /var/www deve essere modificato se i siti Web sul tuo server non si trovano lì.

trova /var/www/ -type d -name 'components' ! -nome completo '**/amministratore/componenti'

Questo comando ti darà un elenco di tutte quelle cartelle. Il comando dirname è adatto per ottenere il percorso che contiene la cartella dei componenti. Questo è il percorso di base dell'installazione di Joomla.

Lo facciamo in un ciclo per tutte le cartelle dei componenti trovati:

per L in `find /var/www/ -type d -name 'components' ! -nome completo '**/amministratore/componenti'`; do
    D=`dirname $L`;
fatto

Ottieni la versione maggiore e minore

Per ottenere la versione della tua installazione utilizzeremo i comandi combinati "grep" e "sed".

Per prima cosa controlliamo quale dei tre file che ho menzionato in precedenza esiste nel percorso di installazione.

F=$D/librerie/joomla/version.php;
F2=$D/librerie/cms/version/version.php;
F3=$D/includes/version.php;
se [[ -e "$F" || -e "$F2" || -e "$F3" ]]; quindi
    se [[ -e "$F" ]]; quindi
        F=$F;
    elif [[ -e "$F2" ]]; quindi
        F=$F2;
    elif [[ -e "$F3" ]]; quindi
        F=$F3;
    fi
else
    echo "Nessun file di versione joomla trovato.";
fi

Ora leggiamo la versione maggiore e minore da questo file:

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

Confronta versioni

Poiché i numeri di versione non sono numeri interi, non possiamo confrontarli all'interno dello script bash usando -lt ecc. Dobbiamo invece usare un programma esterno chiamato bc:

ISOK=1;
if [[ $(echo "if (${VERSION} <1.5) 1 else 0" | bc) -eq 1 ]]; then
    # versione è inferiore a 1.5
    ISOK=0;
elif [[ $(echo "if (${VERSION} ==1.5) 1 else 0" | bc) -eq 1 &&$(echo "se (${SUBVERSIONE} <26) 1 altro 0" | bc) -eq 1 ]]; quindi
    # versione è 1.5.x ma inferiore a 1.5.26
    ISOK=0;
### e così via - ulteriori controlli della versione
altro
    ISOK=1;
fi

Lo script completo

Ora siamo pronti per assemblare tutte le parti in uno script pronto per l'uso e aggiungere alcuni piccoli miglioramenti. Lo script cercherà tutte le versioni di Joomla nel percorso di base specificato e stampa le informazioni sullo stato. Ovviamente non si può parlare di una versione 1.5.26 come "corrente" ma poiché è la versione più recente del ramo 1.5 e un aggiornamento al ramo 2.5 o 3.x è molto complicato in alcuni casi, questo script contrassegnerà questa versione come "OK". Puoi cambiarlo se lo desideri.

Ecco un esempio di output dello script:

[INFO] versione 1.5.26 in /var/www/xxx è ok.
[WARN] Joomla versione 1.0.12 obsoleta in /var/www/yyy
[WARN] Joomla versione 1.5.14 obsoleta in /var/www/zzz
[WARN] Joomla versione 2.5.8 obsoleta in /var/www/aaa
[WARN] Joomla versione 1.5.10 obsoleta in /var/www/bbb

E ora:lo script completo. Basta salvarlo come "joomlascan.sh" e chiamarlo tramite

bash joomlascan.sh

Se assegni un nome file come argomento aggiuntivo (come bash joomlascan.sh list.csv), ottieni un file chiamato list.csv che contiene un elenco di tutte le installazioni obsolete:

/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

Suggerimento:
Se usi ISPConfig 3, dovresti modificare BASEPATH in BASEPATH="/var/www/clients/client*/web*".

#!/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 ;

C'è un problema noto con questo script:non può riconoscere Mambo. Quindi contrassegnerà tutte le installazioni di mambo come "OK" indipendentemente dalla versione che hanno.


Linux
  1. Come eseguire il benchmark o controllare la velocità del tuo server DNS su Linux?

  2. Penso che il PC sia stato violato. Come fare??

  3. Come trovare quando lo Spfile è stato creato su un server Linux

  4. Come trovare l'indirizzo IP condiviso del tuo server nel cPanel

  5. Come posso trovare la versione di Fedora che uso?

Trova l'indirizzo IP del tuo server

Come modificare lo schema di partizione sul tuo server Linux?

Come trovare la posizione dei tuoi server con Traceroute e WHOIS

Come nascondere la versione del tuo server NGINX.

Come trovare l'indirizzo IP condiviso principale del tuo server in cPanel

Come trovare il nome del tuo server nel cPanel