GNU/Linux >> Tutoriels Linux >  >> Linux

Comment trouver les versions obsolètes de joomla sur votre serveur pour réduire le risque de piratage

Aujourd'hui, je souhaite me concentrer sur un sujet qui peut entraîner d'énormes problèmes de comptes piratés, de spams, etc. :Installations Joomla obsolètes sur votre serveur.

Bien sûr, cela est également valable pour d'autres logiciels. La méthode mentionnée devrait fonctionner de la même manière pour d'autres logiciels. Depuis Joomla est largement répandu sur Internet, en particulier sur l'hébergement mutualisé systèmes CMS (Système de gestion de contenu) , ce guide ne couvrira que Joomla jusqu'à présent.

Prérequis

Vous aurez besoin au moins des outils bc et sed qui ne sont pas toujours installés par défaut.

Commençons

Au début, il y a une question :comment puis-je reconnaître la version de joomla à partir des fichiers installés ?

Cela dépend de la version installée de Joomla. Jusqu'à présent, j'ai trouvé trois fichiers différents contenant les informations de version :
/libraries/joomla/version.php
/libraries/cms/version/version.php
/includes/version.php

Les lignes les plus importantes de ces fichiers sont le numéro de version et la version mineure qui sont contenues dans les variables suivantes :
var $RELEASE ='1.0';
var $DEV_LEVEL ='12';

Dans une prochaine étape, nous recherchons la version la plus récente de Joomla sur le site officiel. Au moment de la rédaction de ce guide, il existe trois groupes de versions :1.5 (1.5.26), 2.5 (2.5.17) et 3.2 (3.2.1).

Trouver des installations joomla sur votre serveur

Une chose que toutes les installations de joomla ont en commun est le nom de dossier "components", nous recherchons donc tous les dossiers portant ce nom. En même temps, nous ignorons tous les dossiers de composants contenus dans un sous-dossier "administrateur". Le chemin de base /var/www doit être ajusté si les sites Web de votre serveur ne s'y trouvent pas.

trouver /var/www/ -type d -name 'composants' ! -nom entier '**/administrateur/composants'

Cette commande vous donnera une liste de tous ces dossiers. La commande dirname convient pour obtenir le chemin contenant le dossier des composants. Ceci est le chemin de base de l'installation de Joomla.

Nous faisons cela en boucle pour tous les dossiers de composants trouvés :

pour L dans `find /var/www/ -type d -name 'composants' ! -wholename '**/administrateur/composants'` ; faire
    D=`dirname $L`;
fait

Obtenir la version majeure et mineure

Pour obtenir la version de votre installation, nous utiliserons les commandes combinées "grep" et "sed".

Nous vérifions d'abord lequel des trois fichiers que j'ai mentionnés précédemment existe dans le chemin d'installation.

F=$D/libraries/joomla/version.php;
F2=$D/libraries/cms/version/version.php;
F3=$D/includes/version.php;
si [[ -e "$F" || -e "$F2" || -e "$F3" ]]; alors
    if [[ -e "$F" ]] ; alors
        F=$F;
    elif [[ -e "$F2" ]] ; alors
        F=$F2;
    elif [[ -e "$F3" ]] ; then
        F=$F3;
    fi
else
    echo "No joomla version file found.";
fi

Nous lisons maintenant la version majeure et mineure de ce fichier :

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

Comparer les versions

Comme les numéros de version ne sont pas des entiers, nous ne pouvons pas les comparer dans le script bash en utilisant -lt etc. Au lieu de cela, nous devons utiliser un programme externe appelé bc :

ISOK=1;
if [[ $(echo "if (${VERSION} <1.5) 1 else 0" | bc) -eq 1 ]]; alors
    # version est inférieure à 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 ]]; alors
    # la version est 1.5.x mais inférieure à 1.5.26
    ISOK=0;
### et ainsi de suite - vérifications de version supplémentaires
sinon
    ISOK=1;
fi

Le script complet

Nous sommes maintenant prêts à assembler toutes les parties dans un script prêt à l'emploi et à ajouter quelques améliorations mineures. Le script recherchera toutes les versions de joomla dans le chemin de base donné et imprimera des informations sur l'état. Bien sûr, vous ne pouvez pas parler d'une version 1.5.26 comme "current" mais comme il s'agit de la version la plus récente de la branche 1.5 et qu'une mise à jour vers la branche 2.5 ou 3.x est très compliquée dans certains cas, ce script marquera cette version comme "OK". Vous pouvez changer cela si vous le souhaitez.

Voici un exemple de sortie du script :

[INFO] la version 1.5.26 dans /var/www/xxx est correcte.
[WARN] version 1.0.12 de Joomla obsolète dans /var/www/yyy
[WARN] version 1.5.14 de Joomla obsolète dans /var/www/zzz
[AVERTISSEMENT] version 2.5.8 de Joomla obsolète dans /var/www/aaa
[AVERTISSEMENT] version 1.5.10 de Joomla obsolète dans /var/www/bbb

Et maintenant :le script complet. Enregistrez-le simplement sous "joomlascan.sh" et appelez-le via

bash joomlascan.sh

Si vous donnez un nom de fichier comme argument supplémentaire (comme bash joomlascan.sh list.csv), vous obtenez un fichier appelé list.csv qui contient une liste de toutes les installations obsolètes :

/var/www/aaa;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

Astuce :
Si vous utilisez ISPConfig 3, vous devez modifier le BASEPATH en 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 ;

Il y a un problème connu avec ce script :il ne peut pas reconnaître Mambo. Ainsi, toutes les installations de mambo seront marquées comme "OK", quelle que soit leur version.


Linux
  1. Comment sécuriser votre serveur ISPConfig 3 contre l'attaque SSL caniche

  2. Comment joindre votre serveur Linux au projet de pool NTP

  3. Comment évaluer ou vérifier la vitesse de votre serveur DNS sous Linux ?

  4. Je pense que le PC est piraté. Comment faire??

  5. Comment trouver l'adresse IP partagée de votre serveur dans cPanel

Trouver l'adresse IP de votre serveur

Comment changer le schéma de partition sur votre serveur Linux ?

Comment trouver l'emplacement de vos serveurs avec Traceroute et WHOIS

Comment masquer la version de votre serveur NGINX.

Comment trouver l'adresse IP partagée principale de votre serveur dans cPanel

Comment trouver le nom de votre serveur dans cPanel