PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
これは基本的にhttps://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/の要約です。
はじめに
new $_GET["a"]($_GET["a"])
のような新しい任意のオブジェクトの作成は、リモートコード実行(RCE)につながる可能性があります。これはwriteupで詳述されています。この文書では、RCEを達成するためのさまざまな戦略を強調しています。
カスタムクラスまたはオートローディングによるRCE
new $a($b)
という構文は、**$a
がクラス名を表し、$b
**がコンストラクタに渡される最初の引数であるオブジェクトをインスタンス化するために使用されます。これらの変数は、GET/POSTのようなユーザー入力から取得されることがあり、文字列や配列である場合や、JSONから取得される場合には他の型として表示されることがあります。
以下のコードスニペットを考えてみてください:
この場合、$a
をApp
またはApp2
に設定し、$b
をシステムコマンド(例:uname -a
)に設定すると、そのコマンドが実行されます。
オートローディング関数は、そのようなクラスが直接アクセスできない場合に悪用される可能性があります。これらの関数は、必要に応じてファイルからクラスを自動的にロードし、spl_autoload_register
または__autoload
を使用して定義されます:
自動読み込みの動作はPHPのバージョンによって異なり、異なるRCEの可能性を提供します。
組み込みクラスによるRCE
カスタムクラスやオートローダーがない場合、組み込みPHPクラスがRCEに十分である可能性があります。これらのクラスの数は、PHPのバージョンや拡張機能に基づいて100から200の間です。get_declared_classes()
を使用してリストできます。
興味のあるコンストラクタは、以下の例とリンクhttps://3v4l.org/2JEGFに示すように、リフレクションAPIを通じて特定できます。
特定のメソッドによるRCEには以下が含まれます:
SSRF + Pharデシリアライズ
SplFileObject
クラスは、そのコンストラクタを通じてSSRFを可能にし、任意のURLへの接続を許可します:
SSRFは、PHP 8.0以前のバージョンでPharプロトコルを使用することにより、デシリアライズ攻撃を引き起こす可能性があります。
PDOの悪用
PDOクラスのコンストラクタは、DSN文字列を介してデータベースへの接続を許可し、ファイルの作成やその他のインタラクションを可能にします。
SoapClient/SimpleXMLElement XXE
PHPのバージョン5.3.22および5.4.12までが、SoapClient
およびSimpleXMLElement
コンストラクタを通じてXXE攻撃に対して脆弱であることが確認されました。これはlibxml2のバージョンに依存します。
RCE via Imagick Extension
プロジェクトの依存関係の分析において、Imagickが新しいオブジェクトをインスタンス化することでコマンド実行に利用できることが発見されました。これは脆弱性を悪用する機会を提供します。
VID parser
ファイルシステム内の任意の指定されたパスにコンテンツを書き込む能力を持つVIDパーサーが特定されました。これにより、ウェブアクセス可能なディレクトリにPHPシェルを配置し、リモートコード実行(RCE)を達成する可能性があります。
VID Parser + File Upload
PHPはアップロードされたファイルを一時的に/tmp/phpXXXXXX
に保存することが知られています。mslプロトコルを利用するImagickのVIDパーサーは、ファイルパス内のワイルドカードを処理でき、一時ファイルを選択した場所に転送することを容易にします。この方法は、ファイルシステム内での任意のファイル書き込みを達成するための追加のアプローチを提供します。
PHP Crash + Brute Force
元の文書で説明されている方法では、削除前にサーバーのクラッシュを引き起こすファイルをアップロードします。一時ファイルの名前をブルートフォースすることで、Imagickが任意のPHPコードを実行することが可能になります。ただし、この技術は古いバージョンのImageMagickでのみ効果的であることが判明しました。
References
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated