ホームページ  >  記事  >  バックエンド開発  >  テクノロジーの共有: PHP シリアル化/オブジェクト インジェクションの脆弱性の悪用

テクノロジーの共有: PHP シリアル化/オブジェクト インジェクションの脆弱性の悪用

WBOY
WBOYオリジナル
2016-06-23 13:09:47873ブラウズ

この記事は、PHP シリアル化/オブジェクト インジェクションの脆弱性分析に関する短い記事であり、ホストのリモート シェルを取得する方法について説明します。 PHP シリアル化について詳しく知りたい場合は、このリンクを参照してください。この脆弱性を自分でテストしたい場合は、XVWA と Kevgir を介してテストできます。

この脆弱性を悪用する最初のステップでは、ターゲット アプリケーションに PHP シリアル化があるかどうかのテストを開始します。テストを支援するために、Burpsuite の SuperSerial プラグインを使用しました。ダウンロード アドレスはここにあります。 PHP および Java シリアル化の存在を受動的に検出します。

分析

アプリケーションで PHP シリアル化の使用が検出されたため、アプリケーション コードにリモート コード実行の脆弱性が含まれているかどうかの確認を開始できます。シリアル化されたオブジェクトはパラメーター "r" から取得されることに注意してください:

$var1=unserialize($_REQUEST['r']);

次に、逆シリアル化して評価します:

eval($this->inject);

次に、実行します:

echo "<br/>".$var1[0]." - ".$var1[1];

これにより、パラメーター r の PHP シリアル化オブジェクトをバイパスすると、次のようになります。コード実行の脆弱性が発生する可能性があります。

悪用

悪用

この脆弱性を悪用するために、PHP シリアル化ペイロードを自動的に生成し、ターゲットのリモート ホスト上で必要なコマンドを実行する単純な PHP スクリプトを作成しました。次に、一般的な PHP リバウンド シェルを作成しました。ダウンロード アドレスは次のとおりです。

< ?php    error_reporting(E_ALL);   class PHPObjectInjection{       public $inject;        function __construct(){        }        function __wakeup(){           if(isset($this->inject)){                eval($this->inject);           }       }    }//?r=a:2:{i:0;s:4:"XVWA";i:1;s:33:"XtremeVulnerable Web Application";}   if(isset($_REQUEST['r'])){          $var1=unserialize($_REQUEST['r']);               if(is_array($var1)){            echo "".$var1[0]." - ".$var1[1];       }   }else{       echo "parameter is missing";    }? >

注: このファイルを Web サーバーに転送し、リバウンド シェル スクリプトでローカル IP とポートを変更する必要があります。エクスプロイト コード:

http://pentestmonkey.net/tools/php-reverse-shell/php-reverse-shell-1.0.tar.gz

Demo

アプリケーション スクリプトの準備ができたので、それを実行してリモート ホスト上でリバウンド シェルを取得し、リモートでコマンドを実行できます。

動画は以下のように表示されます:

※参照元:CD、FB編集者dawner編集、FreeBuf Hackers and Geeks (FreeBuf.COM)から転載する場合はその旨を明記してください

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