この記事は、PHP のシリアル化/オブジェクト インジェクションの脆弱性分析に関する短い記事で、ホストのリモート シェルを取得する方法を説明します。
この脆弱性を自分でテストしたい場合は、XVWA と Kevgir を介してテストできます。
この脆弱性を悪用する最初のステップでは、ターゲット アプリケーションに PHP シリアル化があるかどうかのテストを開始します。テストを支援するために、Burpsuite の SuperSerial プラグインを使用しました。ダウンロード アドレスはここにあります。 PHP および Java シリアル化の存在を受動的に検出します。
分析
アプリケーションで PHP シリアル化の使用が検出されたため、アプリケーション コードにリモート コード実行の脆弱性が含まれているかどうかの特定を開始できます。シリアル化されたオブジェクトはパラメーター「r」から取得されることに注意してください:
$var1=unserialize($_REQUEST['r']);
次に、逆シリアル化して評価します:
eval($this->inject);
次に、次を実行します:
エコー "
".$var1[0]." - ".$var1[1];
これにより、パラメータ r の PHP シリアル化オブジェクトをバイパスすると、コード実行の脆弱性が発生する可能性があります。
悪用
この脆弱性を悪用するために、PHP シリアル化ペイロードを自動的に生成し、ターゲットのリモート ホスト上で目的のコマンドを実行する単純な PHP スクリプトを作成しました。次に、一般的な PHP リバウンド シェルを作成しました。ダウンロード アドレスは次のとおりです:
http://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gz
注: このファイルを Web サーバーに転送し、リバウンド シェル スクリプトでローカル IP とポートを変更し、次のエクスプロイト コードを変更する必要があります:
デモ
アプリケーション スクリプトの準備ができたので、それを実行してリモート ホスト上でコマンドをリモート実行するためのリバウンド シェルを取得できます。
以上がこの記事の全内容です。PHP プログラミングを学習する皆さんのお役に立てれば幸いです。