GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana menemukan versi joomla yang sudah ketinggalan zaman di server Anda untuk mengurangi risiko diretas

Hari ini saya ingin fokus pada topik yang dapat menyebabkan masalah besar akun yang diretas, email spam, dll.:Instalasi Joomla yang ketinggalan zaman di server Anda.

Tentu saja, ini juga berlaku untuk perangkat lunak lain. Metode yang disebutkan harus bekerja dengan cara yang sama untuk perangkat lunak lain. Sejak Joomla tersebar luas di seluruh internet, terutama di hosting bersama sistem CMS (Sistem Manajemen Konten) , cara ini hanya akan mencakup Joomla sejauh ini.

Prasyarat

Anda memerlukan setidaknya alat bc dan sed yang tidak selalu diinstal secara default.

Mari kita mulai

Pada awalnya ada satu pertanyaan:bagaimana saya bisa mengenali versi joomla dari file yang diinstal?

Ini tergantung pada versi Joomla yang diinstal. Sampai saat ini saya telah menemukan tiga file berbeda yang berisi informasi versi:
/libraries/joomla/version.php
/libraries/cms/version/version.php
/includes/version.php

Baris terpenting dari file ini adalah nomor versi dan versi kecil yang terdapat dalam variabel berikut:
var $RELEASE ='1.0';
var $DEV_LEVEL ='12';

Pada langkah selanjutnya kita mencari versi terbaru Joomla di situs resminya. Pada saat penulisan howto ini ada tiga grup versi:1.5 (1.5.26), 2.5 (2.5.17) dan 3.2 (3.2.1).

Temukan instalasi joomla di server Anda

Satu hal yang semua instalasi joomla memiliki kesamaan adalah nama folder "komponen", jadi kami mencari semua folder dengan nama ini. Pada saat yang sama kami mengabaikan semua folder komponen yang terdapat dalam subfolder "administrator". Jalur dasar /var/www harus disesuaikan jika situs web di server Anda tidak terletak di sana.

temukan /var/www/ -type d -name 'components' ! -wholename '**/administrator/components'

Perintah ini akan memberi Anda daftar semua folder itu. Perintah dirname cocok untuk mendapatkan jalur yang berisi folder komponen. Ini adalah jalur dasar dari instalasi Joomla.

Kami melakukan ini dalam satu lingkaran untuk semua folder komponen yang ditemukan:

untuk L di `find /var/www/ -type d -name 'components' ! -wholename '**/administrator/components'`; lakukan
    D=`dirname $L`;
selesai

Dapatkan versi mayor dan minor

Untuk mendapatkan versi instalasi Anda, kami akan menggunakan perintah gabungan "grep" dan "sed".

Pertama kita periksa mana dari tiga file yang saya sebutkan sebelumnya ada di jalur instalasi.

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

Sekarang kita membaca versi mayor dan minor dari file ini:

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

Bandingkan versi

Karena nomor versi bukan bilangan bulat, kita tidak dapat membandingkannya di dalam skrip bash menggunakan -lt dll. Sebagai gantinya, kita perlu menggunakan program eksternal yang disebut bc:

ISOK=1;
if [[ $(echo "if (${VERSION} <1.5) 1 else 0" | bc) -eq 1 ]]; maka
    # versi lebih rendah dari 1,5
    ISOK=0;
elif [[ $(echo "if (${VERSION} ==1.5) 1 else 0" | bc) -eq 1 &&$(echo "jika (${SUBVERSION} <26) 1 lagi 0" | bc) -eq 1 ]]; lalu
    # versi 1.5.x tetapi lebih rendah dari 1.5.26
    ISOK=0;
### dan seterusnya - pemeriksaan versi lebih lanjut
lain
    ISOK=1;
fi

Skrip lengkap

Sekarang kami siap untuk merakit semua bagian menjadi skrip yang siap digunakan dan menambahkan beberapa perbaikan kecil. Script akan mencari semua versi joomla di jalur dasar yang diberikan dan mencetak informasi tentang statusnya. Tentu saja Anda tidak dapat berbicara tentang versi 1.5.26 sebagai "saat ini" tetapi karena ini adalah versi terbaru dari cabang 1.5 dan pembaruan ke cabang 2.5 atau 3.x sangat rumit dalam beberapa kasus, skrip ini akan menandai versi ini sebagai "OK". Anda dapat mengubah ini jika Anda suka.

Berikut adalah contoh keluaran skrip:

[INFO] versi 1.5.26 di /var/www/xxx tidak masalah.
[PERINGATAN] Joomla versi 1.0.12 kedaluwarsa di /var/www/yyy
[PERINGATAN] Joomla versi 1.5.14 kedaluwarsa di /var/www/zzz
[PERINGATAN] Joomla versi 2.5.8 kedaluwarsa di /var/www/aaa
[PERINGATAN] Joomla versi 1.5.10 usang di /var/www/bbb

Dan sekarang:skrip lengkap. Simpan saja sebagai "joomlascan.sh" dan panggil melalui

bash joomlascan.sh

Jika Anda memberikan nama file sebagai argumen tambahan (seperti bash joomlascan.sh list.csv), Anda akan mendapatkan file bernama list.csv yang berisi daftar semua instalasi usang:

/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

Kiat:
Jika Anda menggunakan ISPConfig 3, Anda harus mengubah BASEPATH menjadi 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 ;

Ada satu masalah yang diketahui dengan skrip ini:skrip ini tidak dapat mengenali Mambo. Jadi itu akan menandai semua instalasi mambo sebagai "OK" terlepas dari versi mana yang mereka miliki.


Linux
  1. Cara mengamankan server ISPConfig 3 Anda dari serangan SSL pudel

  2. Bagaimana cara Benchmark atau memeriksa kecepatan Server DNS Anda di Linux?

  3. Saya Pikir Pc Sedang Diretas. Bagaimana melakukan??

  1. Bagaimana cara bergabung dengan server Linux Anda ke proyek kumpulan NTP

  2. Cara Menemukan Alamat IP Bersama Server Anda di cPanel

  3. Bagaimana menemukan versi modul kernel yang dikompilasi?

  1. Bagaimana menemukan versi Redhat Linux yang diinstal

  2. Cara Menemukan Saat Spfile Dibuat Di Server Linux

  3. Bagaimana cara menemukan versi Fedora yang saya gunakan?