ホームページ > バックエンド開発 > PHPチュートリアル > ホワイトハットの 3 つの課題の第 3 フェーズの簡単なアイデア (PHP デシリアライゼーションとの最初の接触)

ホワイトハットの 3 つの課題の第 3 フェーズの簡単なアイデア (PHP デシリアライゼーションとの最初の接触)

WBOY
リリース: 2016-06-23 13:11:20
オリジナル
1246 人が閲覧しました

3 つのホワイトハットに関する別の問題がここにあります。いくつかの理由により、ここでは一般的なアイデアについてのみ説明し、詳細には触れません。主にデシリアライズとのファーストコンタクト。新しい姿勢を覚えたような気がします。笑

1. インターフェースは変わっていません。ユーザー登録してログインするだけです。

2. ログイン後、コントロールパネルを選択するオプションが表示されます。1 つは管理者パネルのオプションで、もう 1 つは通常のメンバーのパネルオプションです。権限を越える必要があるのは明らかです。

3. ヒントによると、0x を使用して管理者権限を直接アップグレードできます。

4. 管理者インターフェイスに入り、記事を編集でき、検索オプションがあります。コードの観点からは、インジェクションがあることは明らかです

5. インジェクションを使用してシェルを作成する準備をします。 mysql 権限が十分ではないため、Web ディレクトリに書き込むことができないことがわかります。Enter を押すと、他のディレクトリに書き込むことができます。

6. グループ内の特定の牛からデシリアライズするようリマインダーを受け取り、即座に理解します。私はいくつかの逆シリアル化情報を読みに行き、Joomla の逆シリアル化の脆弱性に関する Pniu の分析を注意深く読みました。

7. 次にコードを監査すると、脆弱性のトリガー ポイントが見つかったことが明らかです

パスは cach/md5(username).txt です

コードのこの部分の一般的な意味は、ユーザーがログイン後に逆シリアル化されます。パス ファイルの内容を変換すると、デストラクター __destruct() がすぐに前の変数を文字列にシリアル化します。次に、それをパスに書き込みます。

八、

実際、この時点で大まかな考え方はすでに明らかになっています。インジェクションポイントを検索して、キャッシュディレクトリに md5(username).txt ファイルを書き込みます。その内容はシリアル化された文字列です。パスが含まれており、パスの値は文の絶対パスです。次に、変数名をコンテンツに追加します。この文字列を作成するときは、形式要件が非常に厳しいので注意してください。エラーは常に報告されます。多くの落とし穴に遭遇しました。シリアル化のドキュメントを参照することをお勧めします。

デモをしてください。

x:i:3;a:0:{};m:a:2:{s:4:"パス";s:36:"/var/www/html/public/upload/xxxx.php" ;s:4:"test";s:24:"";}

おそらく次のようになります。他のものは自分で変更できます

書き込み後、コンストラクターが逆シリアル化するときに、$path はすでに /var/www/html/public/upload/xxxx.php になっています。シリアル化後の $cache は x:i:3;a:0:{};m:a:2:{s:4:"path";s:36:"/var/www/html/public/upload / xxxx.php";s:4:"test";s:24:"";} これで終わりです。file_put_cntents 関数を渡した後、public に移動します。 / 文を含む php ファイルがアップロード ディレクトリに書き込まれています

ここで言及する 2 つの点:

1. ユーザー名は登録されていない必要があります。登録されている場合、ファイルはキャッシュ ディレクトリに存在します。 SQLインジェクションは書き込めません。したがって、MD5 (未登録のユーザー名).txt を挿入して書き込み、そのユーザー名を登録すると、書き込んだファイルに牛が正常にロードできるようになります。

2. ファイルを書き込むときは、16 進数表記を使用してください。そうしないと、文字列内の ';' が削除されます。このように、union select 1,xxxxx,3 を書き込まないでください。これは、数値をファイルに書き込むことになるためです。シリアル化にはダーティ データを含めることができない文字列が必要なので、このように記述すると逆シリアル化は失敗します。なので、このように、union select 0xxxxxx,'','' と書くことをお勧めします

簡単に書いていますが、何か間違っているかもしれませんが、ご容赦ください

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート