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.

-
Google
- Google afirma que Gemma 3 alcanza el 98% de la precisión de DeepSeek usando solo una GPU
- Amazon, Google y Meta apoyan triplicar la energía nuclear para 2050
- Google eliminará la autenticación por SMS en Gmail e implementará códigos QR
- Google está desarrollando una IA que puede reemplazar a Chrome para ayudarte a comprar cosas y hacer investigaciones
- Google defiende un producto de búsqueda "mejor" mientras concluye el juicio antimonopolio
- Para ayudar a la interoperabilidad de Rust/C++, Google dona a Rust Foundation 1 millón de dólares
- La nueva 'protección IP' de Google Chrome ocultará las direcciones IP de los usuarios
- Firefox 118 ya está disponible para descargar con traducción integrada para sitios web
- Google comprará la energía a LevelTen Energy con su innovador enfoque para adquisición de energía limpia: LEAP™
- Google dice que es la herramienta de búsqueda preferida a sus rivales
- Ajustar Chrome para menor consumo de RAM y Batería.
- Google anuncia ChatGPT Rival Bard
- Google anuncia Flutter 3, ahora con soporte para macOS y Linux Desktop
- Chrome limita el acceso directo de los sitios web a redes privadas por razones de seguridad
- Parche de actualización urgente, por vulneravilidad de día cero, explotada activamente.