0、はじめに
Wuyun Knowledge Base を閲覧しているときに興味深い翻訳を見つけました: www.Bkjia.com
オブジェクトインジェクションと呼ばれる注入方法です。オブジェクトも注入できますか?
はい、汚染されたデータがある限り注入できないことはありませんが、この脆弱性は少し奇妙すぎるため、興味深いと思います。
1.原則
プログラムを作成するとき、多くの場合、ランタイム データをシリアル化する必要があります。いわゆるシリアル化とは、ランタイム データを特定の形式に従ってローカル ファイルに書き込むことです。このようにして、データをローカルに保存し、使用するときに、ファイルを直接読み取ることで実行時に生成されたデータを読み取ることができます。 PHP では、これらはシリアライズ関数とアンシリアライズ関数です。
インジェクションの原理は、次のような逆シリアル化中の汚染されたデータの導入によって引き起こされます。
$obj = unserialize($_GET[‘injection’]) ;このステートメントを使用すると、シリアル化されたデータの形式に従って自分で構築し、必要なオブジェクト $obj を取得できます。
このオブジェクト $obj を取得するだけで何の役に立つのかと尋ねる人もいるかもしれません。まずは次の例を見てみましょう。
2. シナリオ
このシーンも翻訳のデモからのもので、復元したものは次のとおりです:
リーリー
上記のコードはユーザー制御可能なデータからシリアル化されたデータを取得し、unserialize メソッドを呼び出して $_GET['usr_serialized'] を逆シリアル化し、この $obj を私たちが制御できるようになります。
通常の方法は次のように送信します:
http://127.0.0.1/code/objin.php?usr_serialized=O:4:User:2:{s:3:age;i:20;s:4:name;s:4:John;}
上記のシリアル化されたデータは、$age=20、$name=John の User クラスのオブジェクトです。
この時点で、 echo $obj; はオブジェクトを直接エコーし、マジック メソッド __toString を呼び出すことができます。つまり、操作の効果は次のとおりです。
上記のコードはユーザー制御可能なデータからシリアル化されたデータを取得し、unserialize メソッドを呼び出して $_GET['usr_serialized'] を逆シリアル化し、この $obj を私たちが制御できるようになります。
通常の方法は次のように送信します:
http://127.0.0.1/code/objin.php?usr_serialized=O:4:User:2:{s:3:age;i:20;s:4:name;s:4:John;}
上記のシリアル化されたデータは、$age=20、$name=John の User クラスのオブジェクトです。
この時点で、 echo $obj; はオブジェクトを直接エコーし、マジック メソッド __toString を呼び出すことができます。つまり、操作の効果は次のとおりです。
3. 脆弱性マイニング
この種の脆弱性は非常に隠されていますが、一度現れると非常に効果的です。マイニングの主な目的は、unserialize 関数のパラメーターが汚染されたデータかどうかを確認することです。対応するコントロールの場所を見つけて、どのクラス (このシナリオの FileClass クラスなど) を使用して攻撃を完了できるかを確認します。
http://www.bkjia.com/PHPjc/953320.html