LinuxParty
Hoy quiero centrarme en un tema que puede dar lugar a enormes problemas por cuentas hackeadas, correos de spam, etc: instalaciones de Joomla obsoletas en su servidor.
Por supuesto, esto es válido para otro software, también. El método mencionado debería funcionar de una manera similar para otros programas. Ya que Joomla, está muy extendido en todo el Internet, especialmente en sistemas de hosting compartido CMS (Content Management System), este howto sólo cubrirá Joomla por ahora.
Requisitos previos
Usted necesitará por lo menos, las herramientas bc y sed que no siempre se instalan por defecto.
Empecemos
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 secundaria que se contienen en las siguientes variables:
var $RELEASE = '1.0';
var $DEV_LEVEL = '12';
En una siguiente etapa se busca la versión más reciente de Joomla en la web oficial. En el momento de escribir este Cómo hay tres grupos de versión: 1.5 (01/05/26), 2.5 (2.5.17) y 3.2 (3.2.1).
Encuentre instalaciones Joomla en su servidor
Una cosa que todas las instalaciones joomla tienen en común es la carpeta de nombre "components", por lo que buscamos todas las carpetas con este nombre. Al mismo tiempo ignoramos todas esas carpetas componentes que están contenidos en una subcarpeta "administrator". La base de ruta /var/ www debe ser ajustada si los sitios web en su servidor.
find /var/www/ -type d -name 'components' ! -wholename '**/administrator/components'
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 de la base de la instalación de Joomla.
Hacemos esto en un bucle para todos los componentes que se encuentran las carpetas:
for L in `find /var/www/ -type d -name 'components' ! -wholename '**/administrator/components'` ; do
D=`dirname $L` ;
done
Obtenga la versión mayor y menor
Para obtener la versión de su instalación vamos a utilizar los comandos "grep" y "sed".
En primer lugar, comprobamos que de los tres archivos que he mencionado 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 ;
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
else
echo "No joomla version file found." ;
fi
Ahora leemos la versión principal y secundaria de este archivo:
VERSION=`grep '$RELEASE' $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 lugar de ello tenemos que utilizar un programm externo llamado bc:
ISOK=1 ;
if [[ $(echo "if (${VERSION} < 1.5) 1 else 0" | bc) -eq 1 ]] ; then
# version is lower than 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 ]] ; then
# version is 1.5.x but lower than 1.5.26
ISOK=0 ;
### and so on - further version checks
else
ISOK=1 ;
fi
El Script completo
Ahora estamos listos para ensamblar todas las piezas en un script listo para su uso y añadir algunas mejoras menores. La secuencia de comandos buscará todas las versiones de Joomla en la ruta de la base dada y Muestra información sobre el estado. Por supuesto que no se puede hablar de una versión 1.5.26 como "actual", pero ya que es la versión más actual de la rama 1.5 y una actualización de la rama 2.5 o 3.x es muy complicado en algunos casos, este script marcará este la versión "OK". Usted puede cambiar esto si quieres.
Aquí es un ejemplo del resultado de la secuencia de comandos:
[INFO] version 1.5.26 in /var/www/xxx is ok.
[WARN] outdated Joomla version 1.0.12 in /var/www/yyy
[WARN] outdated Joomla version 1.5.14 in /var/www/zzz
[WARN] outdated Joomla version 2.5.8 in /var/www/aaa
[WARN] outdated Joomla version 1.5.10 in /var/www/bbb
Y ahora: el script completo. Sólo tiene que guardar como "joomlascan.sh" y llamarlo a través de
bash joomlascan.sh
Si usted le da un nombre de archivo como argumento adicional (como bash joomlascan.sh list.csv), se 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 utiliza ISPConfig 3, debe alterar el 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 del mambo como "OK", independientemente de la versión que tengan.
-
Seguridad
- Drones, vigilancia y reconocimiento facial: una startup llamada 'Sauron' presenta un sistema de seguridad para el hogar de estilo militar
- Conexión Segura NFS en Linux, Tunelizar NFS sobre SSH y Configuración de NFS sobre SSH para Mayor Seguridad
- ¿Olvidó su contraseña? Cinco razones por las que necesita un administrador de contraseñas
- Cómo limitar las conexiones SSH (puerto TCP 22) con ufw en Ubuntu Linux
- Utilizar ssh sin contraseña con ssh-keygen y ssh-copy-id
- Millones de teléfonos móviles podrían ser vulnerables a la vigilancia del gobierno chino
- Cómo limitar las conexiones SSH a la red local en Linux
- Los televisores inteligentes son como un «caballo de Troya digital» en los hogares
- Snort para Windows, detección de Intrusos y seguridad.
- Detección de Intrusiones con las herramientas: BASE y Snort.
- El Sistema de Detección de Intrusos: Snort. ( Windows y Linux )
- Configuración con Ejemplos de Snort para Windows, detección de intrusiones
- ¿El gobierno de EE. UU. ignoró la oportunidad de hacer que TikTok fuera más seguro?
- ¿Qué es SSH y cómo se utiliza? Los conceptos básicos de Secure Shell que necesitas saber
- Asegurar memcached del servidor, para evitar amplificar ataques DDoS