GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo encontrar versiones obsoletas de joomla en su servidor para reducir el riesgo de ser pirateado

Hoy quiero centrarme en un tema que puede conducir a grandes problemas de cuentas pirateadas, correos no deseados, etc.:Instalaciones desactualizadas de Joomla en su servidor.

Por supuesto, esto también es válido para otro software. El método mencionado debería funcionar de manera similar para otro software. Desde Joomla está muy extendido en Internet, especialmente en alojamiento compartido sistemas CMS (Sistema de Gestión de Contenidos) , este howto solo cubrirá Joomla hasta ahora.

Requisitos previos

Necesitará al menos las herramientas bc y sed que no siempre están instaladas por defecto.

Comencemos

Al principio hay una pregunta:¿cómo puedo reconocer la versión de joomla de los archivos instalados?

Esto depende de la versión instalada de Joomla. Hasta ahora he encontrado tres archivos diferentes que contienen la información de la versión:
/libraries/joomla/version.php
/libraries/cms/version/version.php
/includes/version.php

Las líneas más importantes de estos archivos son el número de versión y la versión menor que están contenidos en las siguientes variables:
var $RELEASE ='1.0';
var $DEV_LEVEL ='12';

En un siguiente paso buscamos la versión más reciente de Joomla en el sitio web oficial. Al momento de escribir este howto hay tres grupos de versiones:1.5 (1.5.26), 2.5 (2.5.17) y 3.2 (3.2.1).

Encuentre instalaciones de joomla en su servidor

Una cosa que todas las instalaciones de joomla tienen en común es el nombre de la carpeta "components", por lo que buscamos todas las carpetas con este nombre. Al mismo tiempo ignoramos todas aquellas carpetas de componentes que están contenidas en una subcarpeta "administrador". La ruta base /var/www debe ajustarse si los sitios web de su servidor no se encuentran allí.

encuentre /var/www/ -type d -name 'components' ! -wholename '**/administrador/componentes'

Este comando le dará una lista de todas esas carpetas. El comando dirname es adecuado para obtener la ruta que contiene la carpeta de componentes. Esta es la ruta base de la instalación de Joomla.

Hacemos esto en un bucle para todas las carpetas de componentes encontrados:

para L en `find /var/www/ -type d -name 'components' ! -wholename '**/administrador/componentes'`; hacer
    D=`dirname $L`;
hecho

Obtener la versión principal y secundaria

Para obtener la versión de su instalación utilizaremos los comandos combinados "grep" y "sed".

Primero verificamos cuál de los tres archivos que mencioné anteriormente existe en la ruta de instalación.

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" ]]; entonces
    if [[ -e "$F" ]]; entonces
        F=$F;
    elif [[ -e "$F2" ]]; entonces
        F=$F2;
    elif [[ -e "$F3" ]]; luego
        F=$F3;
    fi
else
    echo "No se encontró el archivo de la versión de Joomla".;
fi

Ahora leemos la versión mayor y menor de este archivo:

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

Comparar versiones

Dado que los números de versión no son números enteros, no podemos compararlos dentro del script bash usando -lt, etc. En su lugar, necesitamos usar un programa externo llamado bc:

ISOK=1;
if [[ $(echo "if (${VERSION} <1.5) 1 else 0" | bc) -eq 1 ]]; entonces
    # versión es inferior a 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 ]]; entonces
    # versión es 1.5.x pero inferior a 1.5.26
    ISOK=0;
### y así sucesivamente - más verificaciones de versión
otros
    ISOK=1;
fi

El guión completo

Ahora estamos listos para ensamblar todas las partes en un script listo para usar y agregar algunas mejoras menores. El script buscará todas las versiones de joomla en la ruta base dada e imprimirá información sobre el estado. Por supuesto no se puede hablar de una versión 1.5.26 como "actual" pero como es la versión más actual de la rama 1.5 y una actualización a la rama 2.5 o 3.x es muy complicada en algunos casos, este script marcará esta versión como "OK". Puedes cambiar esto si quieres.

Aquí hay una salida de muestra del script:

[INFO] la versión 1.5.26 en /var/www/xxx está bien.
[ADVERTENCIA] versión desactualizada de Joomla 1.0.12 en /var/www/yyy
[ADVERTENCIA] versión desactualizada de Joomla 1.5.14 en /var/www/zzz
[ADVERTENCIA] Joomla versión 2.5.8 obsoleta en /var/www/aaa
[ADVERTENCIA] Joomla versión 1.5.10 obsoleta en /var/www/bbb

Y ahora:el guión completo. Simplemente guárdelo como "joomlascan.sh" y llámelo a través de

bash joomlascan.sh

Si proporciona un nombre de archivo como argumento adicional (como bash joomlascan.sh list.csv), obtiene un archivo llamado list.csv que contiene una lista de todas las instalaciones obsoletas:

/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

Consejo:
Si usa ISPConfig 3, debe modificar BASEPATH a 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 ;

Hay un problema conocido con este script:no puede reconocer Mambo. Así que marcará todas las instalaciones de mambo como "OK" independientemente de la versión que tengan.


Linux
  1. Cómo proteger su servidor ISPConfig 3 contra el ataque SSL de caniche

  2. Cómo unir su servidor Linux al proyecto de grupo NTP

  3. ¿Cómo comparar o comprobar la velocidad de su servidor DNS en Linux?

  4. Creo que la PC está siendo pirateada. ¿¿Cómo hacer??

  5. Cómo saber cuándo se creó el Spfile en un servidor Linux

Encuentre la dirección IP de su servidor

¿Cómo cambiar el esquema de partición en su servidor Linux?

Cómo encontrar la ubicación de sus servidores con Traceroute y WHOIS

Cómo ocultar la versión de su servidor NGINX.

Cómo encontrar la dirección IP principal compartida de su servidor en cPanel

Cómo encontrar el nombre de su servidor en cPanel