GNU/Linux >> Linux の 問題 >  >> Linux

ハッキングのリスクを減らすためにサーバー上で古いバージョンのjoomlaを見つける方法

今日は、ハッキングされたアカウントやスパムメールなどの大きな問題につながる可能性のあるトピックに焦点を当てたいと思います。古いJoomlaインストール サーバー上で。

もちろん、これは他のソフトウェアにも当てはまります。上記の方法は、他のソフトウェアでも同様に機能するはずです。 Joomla以降 インターネット全体、特に共有ホスティングで広く普及しています システムCMS(コンテンツ管理システム) 、このハウツーはこれまでのところJoomlaのみをカバーします。

前提条件

少なくとも、デフォルトで常にインストールされるとは限らないツールbcとsedが必要になります。

始めましょう

最初に1つの質問があります:インストールされたファイルからjoomlaバージョンをどのように認識できますか?

これは、インストールされているJoomlaのバージョンによって異なります。これまで、バージョン情報を含む3つの異なるファイルを見つけました:
/libraries/joomla/version.php
/libraries/cms/version/version.php
/includes/version.php

これらのファイルの最も重要な行は、バージョン番号です。 およびマイナーバージョン 次の変数に含まれています:
var $ RELEASE ='1.0';
var $ DEV_LEVEL ='12';

次のステップでは、公式WebサイトでJoomlaの最新バージョンを検索します。このハウツーを書いている時点では、3つのバージョングループがあります: 1.5 (1.5.26)、 2.5 (2.5.17)および 3.2 (3.2.1)。

サーバー上のjoomlaインストールを検索

すべてのjoomlaインストールに共通するものの1つは、フォルダー名「components」であるため、この名前のすべてのフォルダーを検索します。同時に、サブフォルダー「administrator」に含まれるすべてのコンポーネントフォルダーを無視します。サーバー上のWebサイトがそこにない場合は、ベースパス/ var/wwwを調整する必要があります。

/ var / www / -type d -name'components'を検索してください! -wholename'** / administrator / components'

このコマンドは、それらすべてのフォルダのリストを提供します。コマンドdirnameは、componentsフォルダーを含むパスを取得するのに適しています。これはベースパスです Joomlaインストールの。

見つかったすべてのコンポーネントフォルダに対してループでこれを行います:

`find / var / www / -type d -name'components'のLの場合! -wholename'** / administrator / components'`; do
D =`dirname $L`;
完了

メジャーバージョンとマイナーバージョンを取得する

インストールのバージョンを取得するには、コマンド「grep」と「sed」を組み合わせて使用​​します。

最初に、前述の3つのファイルのどれがインストールパスに存在するかを確認します。

F =$ D / libraries / joomla / version.php;
F2 =$ D / libraries / cms / version / version.php;
F3 =$ D / contains / version.php;
if [[-e "$ F" || -e "$ F2" || -e "$ F3"]];次に
if[[-e "$ F"]];次に
F=$ F;
elif [[-e "$ F2"]];次に
F=$ F2;
elif [[-e "$ F3"]];次に
F=$ F3;
fi
else
echo"joomlaバージョンのファイルが見つかりません。";
fi

次に、このファイルからメジャーバージョンとマイナーバージョンを読み取ります。

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

バージョンの比較

バージョン番号は整数ではないため、-ltなどを使用してbashスクリプト内で比較することはできません。代わりに、bcという外部プログラムを使用する必要があります。

ISOK =1;
if [[$(echo "if($ {VERSION} <1.5)1 else 0" | bc)-eq 1]];次に
#バージョンが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]];次に
#バージョンは1.5.xですが、1.5.26未満です
ISOK =0;
###など-さらにバージョンチェック
その他
ISOK=1;
fi

完全なスクリプト

これで、すべてのパーツをすぐに使用できるスクリプトにアセンブルし、いくつかのマイナーな改善を追加する準備が整いました。スクリプトは、指定されたベースパス内のすべてのjoomlaバージョンを検索し、ステータスに関する情報を出力します。もちろん、バージョン 1.5.26について話すことはできません 「現在」として表示されますが、1.5ブランチの最新バージョンであり、2.5または3.xブランチへの更新が非常に複雑な場合があるため、このスクリプトはこのバージョンを「OK」としてマークします。必要に応じてこれを変更できます。

スクリプトの出力例は次のとおりです。

[情報]/var / www/xxxのバージョン1.5.26は問題ありません。
[警告]/var / www/yyyの古いJoomlaバージョン1.0.12
[警告]古いJoomlaバージョン1.5.14 in / var / www / zzz
[警告]古いJoomlaバージョン2.5.8in/ var / www / aaa
[警告]古いJoomlaバージョン1.5.10in/ var / www / bbb

>

そして今:完全なスクリプト。 「joomlascan.sh」として保存し、

から呼び出します。

bash joomlascan.sh

追加の引数としてファイル名を指定すると(bash joomlascan.sh list.csvなど)、古いインストールのすべてのリストを含むlist.csvというファイルが取得されます。

/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

ヒント:
ISPConfig 3を使用する場合は、BASEPATHを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 ;

このスクリプトには1つの既知の問題があります。それは、Mamboを認識できないことです。そのため、バージョンに関係なく、すべてのmamboインストールが「OK」としてマークされます。


Linux
  1. プードルSSL攻撃からISPConfig3サーバーを保護する方法

  2. LinuxサーバーをNTPプールプロジェクトに参加させる方法

  3. PCがハッキングされていると思います。実行する方法??

  1. LinuxでDNSサーバーの速度をベンチマークまたは確認するにはどうすればよいですか?

  2. Linux サーバーで Spfile がいつ作成されたかを確認する方法

  3. コンパイルされたカーネルモジュールのバージョンを見つける方法は?

  1. インストールされているRedhatLinuxのバージョンを見つける方法

  2. cPanel でサーバーの共有 IP アドレスを見つける方法

  3. 使用している Fedora のバージョンを確認するにはどうすればよいですか?