ホームページ  >  記事  >  バックエンド開発  >  PHP オブジェクトのインジェクション

PHP オブジェクトのインジェクション

王林
王林オリジナル
2024-08-29 12:36:32367ブラウズ

攻撃者がパス トラバーサル攻撃、コード インジェクション、アプリケーション サービス拒否攻撃、SQL インジェクションなどの悪意のある攻撃を実行できる可能性があるアプリケーション レベルの脆弱性は、PHP オブジェクト インジェクションまたはPHP のデシリアライズとこの脆弱性の原因は、ユーザーが PHP の unserialize() 関数に指定した入力が適切にサニタイズされていないことです。攻撃者は、脆弱な unserialize() 関数を介してアドホックにシリアル化された文字列を渡すことで、任意の PHP オブジェクトをアプリケーションに挿入することができます。 ) 関数と PHP のこの脆弱性により、リモートでコードが実行されます。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

構文

PHP で Serialize() 関数を宣言する構文は次のとおりです。

unserialize(value);

ここで、value は、オブジェクト挿入につながる可能性がある、シリアル化解除される値です。

PHP におけるオブジェクトインジェクションの仕組み

PHP でのオブジェクト挿入の仕組みは次のとおりです。

  • 攻撃者がパス トラバーサル攻撃、コード インジェクション、アプリケーション サービス拒否攻撃、SQL インジェクションなどの悪意のあるさまざまな種類の攻撃を実行できる可能性があるアプリケーション レベルの脆弱性は、PHP オブジェクト インジェクションと呼ばれます。または PHP デシリアライゼーション。
  • この脆弱性の原因は、ユーザーが PHP の unserialize() 関数に指定した入力が適切にサニタイズされていないことです。
  • 攻撃者は、脆弱な unserialize() 関数を通じてアドホックにシリアル化された文字列を渡すことにより、任意の PHP オブジェクトをアプリケーションに挿入することができます。
  • PHP のこの脆弱性により、リモートでコードが実行されます。

PHP オブジェクトインジェクションの例

以下に例を示します:

例 #1

指定された値をビットのシーケンスとして変換してどこにでも保存できるようにし、その後 unserialize() 関数を使用してシリアル化を解除するオブジェクト インジェクションを説明する PHP プログラム:

コード:

<html>
<body>
<?php
#The array of data to be serialized is passed to the serialize function and the returned string is stored in a variable called value
$value = serialize(array("Welcome", "to", "PHP"));
#The returned string from the serialize() function is displayed as the output on the screen
echo "The data after serialization using serialize() function is as follows:\n";
echo $value;
#the serialized data is passed through the unserialize function and the result is stroed in a variable called result
$result = unserialize($value);
echo "<br>";
#The unserialized data is displayed as the output on the screen
echo "The data after deserialization using unserialize() function is as follows:\n";
echo "<br>";
var_dump($result);
?>
</body>
</html>

出力:

PHP オブジェクトのインジェクション

上記のプログラムでは、シリアル化するデータの配列がシリアライズ関数に渡され、返された文字列が value という変数に格納されます。次に、serialize() 関数から返された文字列が出力として画面に表示されます。次に、シリアル化されたデータが unserialize 関数に渡され、結果が result という変数に格納されます。次に、シリアル化されていないデータが出力として画面に表示されます。出力は上のスナップショットに示されています。

例 #2

指定された値をビットのシーケンスとして変換してどこにでも保存できるようにし、その後 unserialize() 関数を使用してシリアル化を解除するオブジェクト インジェクションを説明する PHP プログラム:

コード:

<html>
<body>
<?php
#The array of data to be serialized is passed to the serialize function and the returned string is stored in a variable called value
$value = serialize(array("Learning", "is", "fun"));
#The returned string from the serialize() function is displayed as the output on the screen
echo "The data after serialization using serialize() function is as follows:\n";
echo $value;
#the serialized data is passed through the unserialize function and the result is stroed in a variable called result
$result = unserialize($value);
echo "<br>";
#The unserialized data is displayed as the output on the screen
echo "The data after deserialization using unserialize() function is as follows:\n";
echo "<br>";
var_dump($result);
?>
</body>
</html>

出力:

PHP オブジェクトのインジェクション

上記のプログラムでは、シリアル化するデータの配列がシリアライズ関数に渡され、返された文字列が value という変数に格納されます。次に、serialize() 関数から返された文字列が出力として画面に表示されます。次に、シリアル化されたデータが unserialize 関数に渡され、結果が result という変数に格納されます。次に、シリアル化されていないデータが出力として画面に表示されます。出力は上のスナップショットに示されています。

例 #3

指定された値をビットのシーケンスとして変換してどこにでも保存できるようにし、その後 unserialize() 関数を使用してシリアル化を解除するオブジェクト インジェクションを説明する PHP プログラム:

コード:

<html>
<body>
<?php
#The array of data to be serialized is passed to the serialize function and the returned string is stored in a variable called value
$value = serialize(array("We", "love", "India"));
#The returned string from the serialize() function is displayed as the output on the screen
echo "The data after serialization using serialize() function is as follows:\n";
echo $value;
#the serialized data is passed through the unserialize function and the result is stroed in a variable called result
$result = unserialize($value);
echo "<br>";
#The unserialized data is displayed as the output on the screen
echo "The data after deserialization using unserialize() function is as follows:\n";
echo "<br>";
var_dump($result);
?>
</body>
</html>

出力:

PHP オブジェクトのインジェクション

上記のプログラムでは、シリアル化するデータの配列がシリアライズ関数に渡され、返された文字列が value という変数に格納されます。次に、serialize() 関数から返された文字列が出力として画面に表示されます。次に、シリアル化されたデータが unserialize 関数に渡され、結果が result という変数に格納されます。次に、シリアル化されていないデータが出力として画面に表示されます。出力は上のスナップショットに示されています。

以上がPHP オブジェクトのインジェクションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。