GNU/Linux >> Znalost Linux >  >> Linux

Jak najít zastaralé verze joomla na vašem serveru, abyste snížili riziko hacknutí

Dnes se chci zaměřit na téma, které může vést k velkým problémům s hacknutými účty, spamovými e-maily atd.:Zastaralé instalace Joomly na vašem serveru.

To samozřejmě platí i pro jiný software. Zmíněná metoda by měla fungovat podobným způsobem i u jiného softwaru. Od Joomla je široce rozšířen po celém internetu, zejména na sdíleném hostingu systémy CMS (Content Management System) , tento návod bude zatím pokrývat pouze Joomlu.

Předpoklady

Budete potřebovat alespoň nástroje bc a sed, které nejsou vždy standardně nainstalovány.

Začněme

Nejprve je tu jedna otázka:jak poznám verzi joomla z nainstalovaných souborů?

To závisí na nainstalované verzi Joomly. Doposud jsem našel tři různé soubory, které obsahují informace o verzi:
/libraries/joomla/version.php
/libraries/cms/version/version.php
/includes/version.php

Nejdůležitější řádky těchto souborů jsou číslo verze a vedlejší verze které jsou obsaženy v následujících proměnných:
var $RELEASE ='1.0';
var $DEV_LEVEL ='12';

V dalším kroku hledáme nejnovější verzi Joomly na oficiálních stránkách. V době psaní tohoto návodu existují tři skupiny verzí:1.5 (1.5.26), 2.5 (2.5.17) a 3.2 (3.2.1).

Vyhledání instalací joomly na vašem serveru

Jedna věc, kterou mají všechny instalace joomly společné, je název složky "components", takže hledáme všechny složky s tímto názvem. Zároveň ignorujeme všechny složky komponent, které jsou obsaženy v podsložce "administrátor". Základní cesta /var/www musí být upravena, pokud tam neleží webové stránky na vašem serveru.

najdi /var/www/ -type d -name 'komponenty' ! -celé jméno '**/administrator/components'

Tento příkaz vám poskytne seznam všech těchto složek. Příkaz dirname je vhodný pro získání cesty, která obsahuje složku komponent. Toto je základní cesta instalace Joomla.

Provádíme to ve smyčce pro všechny složky nalezených součástí:

pro L v `find /var/www/ -type d -name 'components' ! -celé jméno '**/administrátor/komponenty'`; do
    D=`dirname $L`;
hotovo

Získat hlavní a vedlejší verzi

K získání verze vaší instalace použijeme kombinované příkazy "grep" a "sed".

Nejprve zkontrolujeme, který ze tří souborů, které jsem zmínil dříve, existuje v instalační cestě.

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" ]]; potom
        F=$F3;
    fi
else
    echo "Nebyl nalezen žádný soubor verze joomla.";
fi

Nyní čteme hlavní a vedlejší verzi z tohoto souboru:

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

Porovnat verze

Protože čísla verzí nejsou celá čísla, nemůžeme je porovnávat v bash skriptu pomocí -lt atd. Místo toho musíme použít externí program nazvaný bc:

ISOK=1;
if [[ $(echo "if (${VERZE} <1.5) 1 jinak 0" | bc) -eq 1 ]]; potom
    # verze je nižší než 1,5
    ISOK=0;
elif [[ $(echo "if (${VERSION} ==1,5) 1 jinak 0" | bc) -ekv 1 &&$(echo "if (${SUBVERSION} <26) 1 jinak 0" | bc) -eq 1 ]]; pak
    # verze je 1.5.x, ale nižší než 1.5.26
    ISOK=0;
### a tak dále – další kontroly verzí
jinak
    ISOK=1;
fi

Úplný skript

Nyní jsme připraveni sestavit všechny části do připraveného skriptu a přidat některá drobná vylepšení. Skript vyhledá všechny verze joomly v dané základní cestě a vypíše informace o stavu. Samozřejmě nelze mluvit o verzi 1.5.26 jako "aktuální", ale jelikož se jedná o nejaktuálnější verzi větve 1.5 a aktualizace na větev 2.5 nebo 3.x je v některých případech velmi komplikovaná, tento skript tuto verzi označí jako "OK". Pokud chcete, můžete to změnit.

Zde je ukázkový výstup skriptu:

[INFO] verze 1.5.26 v /var/www/xxx je v pořádku.
[WARN] zastaralá verze Joomly 1.0.12 v /var/www/yyy
[VAROVÁNÍ] zastaralá verze Joomly 1.5.14 ve /var/www/zzz
[WARN] zastaralá verze Joomly 2.5.8 v /var/www/aaa
[WARN] zastaralá verze Joomly 1.5.10 v /var/www/bbb

A teď:kompletní scénář. Stačí jej uložit jako „joomlascan.sh“ a zavolat přes

bash joomlascan.sh

Pokud zadáte název souboru jako další argument (jako bash joomlascan.sh list.csv), získáte soubor s názvem list.csv, který obsahuje seznam všech zastaralých instalací:

/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

Tip:
Pokud používáte ISPConfig 3, měli byste změnit BASEPATH na 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 ;

S tímto skriptem je známý jeden problém:nedokáže rozpoznat Mambo. Takže označí všechny instalace mambo jako "OK" bez ohledu na to, jakou verzi mají.


Linux
  1. Jak zabezpečit váš server ISPConfig 3 proti útoku pudle SSL

  2. Jak porovnat nebo zkontrolovat rychlost serveru DNS v systému Linux?

  3. Myslím, že počítač je hacknut. Jak to udělat??

  1. Jak připojit váš linuxový server k projektu fondu NTP

  2. Jak zjistit, kdy byl soubor Spfile vytvořen na serveru Linux

  3. Jak zjistit verzi kompilovaného modulu jádra?

  1. Jak zjistit nainstalovanou verzi Redhat Linuxu

  2. Jak najít sdílenou IP adresu vašeho serveru v cPanel

  3. Jak mohu najít verzi Fedory, kterou používám?