目次
ポップ チェーンの構築
ポップ チェーンの概要
wakeup 関数に preg_match 関数があり、ソース内の機密文字列を見つけるために使用されることを確認するのは難しくありません。ここから開始して、ソースを show クラスに割り当て、次にtoString 関数は自動的にトリガーされるため、tostring メソッドでチェーンを拡張するには、tostring メソッドでテスト クラスに $this->str を割り当て、テスト クラスでソース変数を読み取ることができます (テスト クラスのソース属性、アクセスできない属性にアクセスすると、get マジック メソッドが自動的に呼び出されます。 get メソッドに関数呼び出しがあることがわかり、$this->p を Modifier クラスに割り当てることができ、invoke メソッドが自動的に呼び出され、作成した PHP 疑似プロトコルが実行されます ( Modifer クラスの var 属性を悪意のあるコードに追加します)
推奨される学習: "
ホームページ バックエンド開発 PHPチュートリアル PHPデシリアライゼーションポップチェーン構築の知識ポイントの詳細な紹介

PHPデシリアライゼーションポップチェーン構築の知識ポイントの詳細な紹介

May 05, 2022 pm 06:42 PM
php

この記事では、PHP に関する関連知識を提供します。主にポップ チェーンの構築に関する関連問題を紹介します。ポップ チェーンは属性指向プログラミングの一種で、呼び出しチェーンの構築によく使用されます。以下の方法を見てください。皆さんのお役に立てれば幸いです。

PHPデシリアライゼーションポップチェーン構築の知識ポイントの詳細な紹介

推奨学習: 「PHP ビデオ チュートリアル

デシリアライゼーションについてさらに詳しく学習していくうちに、その構造について学びましょう。ポップチェーンの。このポップチェーンは私のような初心者にはまだわかりにくいので、改めてこの記事を書いてまとめてポップチェーンの構築について理解を深めていきたいと思います。同時に、罠に参加しようとする友人にもある程度の理解を与えます。

ポップ チェーンの構築

一般的な逆シリアル化の問題、抜け穴がある場合、または悪意のあるコードが挿入される可能性がある場合は、マジック メソッドに含まれており、マジック メソッドを自動的に呼び出すことができます。攻撃効果を得る。ただし、インジェクションポイントが通常のクラスメソッドに存在する場合、以前に自動的に呼び出されたメソッドは無効になるため、通常のクラスとマジックメソッドの接続を見つけ、論理的なアイデアを見つけ、その論理的なアイデアを使用して構築する必要があります攻撃目的を達成するためのポップチェーン。したがって、この種のポップな質問を行うときは、魔法の方法に細心の注意を払う必要があります。

ポップ チェーンの概要

これは、呼び出しチェーンを構築するためによく使用される属性指向プログラミングの方法です。質問内のコード内で呼び出すことができる一連の命令を見つけ、これらの命令を悪意のある攻撃効果を達成できる論理コードに統合します。これが、ポップチェーン、マジックメソッドは必須です。以下では、例を使用して、ポップ チェーンがどのように構築されるか、および具体的な構築のアイデアを説明します。呼び出しチェーンを構築するには、まず呼び出しチェーンの先頭と末尾を見つけます。ヘッダーは通常、パラメーターを渡したり逆シリアル化できる場所であり、テールは通常、悪意のあるコードが実行できる場所です。この質問のコードを監査するとき、ヘッダーは get メソッドを使用して Pop にパラメーターを渡し、末尾には include 関数が含まれています。この時点で、フラグ ファイルのソース コードを読み取るには PHP 疑似プロトコルを使用する必要があることがわかっているはずです。頭と尻尾が分かったので、攻撃方法も分かりました。次に、質問の中に魔法の方法を見つけます。

Welcome to index.php
<?php
//flag is in flag.php
//WTF IS THIS?
//Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95
//And Crack It!
class Modifier {
    protected  $var;
    public function append($value){
        include($value);
    }
    public function __invoke(){
        $this->append($this->var);
    }
}

class Show{
    public $source;
    public $str;
    public function __construct($file='index.php'){
        $this->source = $file;
        echo 'Welcome to '.$this->source."<br>";
    }
    public function __toString(){
        return $this->str->source;
    }

    public function __wakeup(){
        if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->source)) {
            echo "hacker";
            $this->source = "index.php";
        }
    }
}

class Test{
    public $p;
    public function __construct(){
        $this->p = array();
    }

    public function __get($key){
        $function = $this->p;
        return $function();
    }
}

if(isset($_GET['pop'])){
    @unserialize($_GET['pop']);
}
else{
    $a=new Show;
    highlight_file(__FILE__);
}

質問には、合計でこれら 5 つの魔法のメソッドがあります。次に、通常のクラスとマジック メソッドの間の関係を見つけます。

wakeup 関数に preg_match 関数があり、ソース内の機密文字列を見つけるために使用されることを確認するのは難しくありません。ここから開始して、ソースを show クラスに割り当て、次にtoString 関数は自動的にトリガーされるため、tostring メソッドでチェーンを拡張するには、tostring メソッドでテスト クラスに $this->str を割り当て、テスト クラスでソース変数を読み取ることができます (テスト クラスのソース属性、アクセスできない属性にアクセスすると、get マジック メソッドが自動的に呼び出されます。 get メソッドに関数呼び出しがあることがわかり、$this->p を Modifier クラスに割り当てることができ、invoke メソッドが自動的に呼び出され、作成した PHP 疑似プロトコルが実行されます ( Modifer クラスの var 属性を悪意のあるコードに追加します)

この時点で、ポップ チェーンを構築します。

ポップチェーンの説明

__invoke()    当一个类被当作函数执行时调用此方法。

__construct   在创建对象时调用此方法

__toString()  在一个类被当作字符串处理时调用此方法

__wakeup()    当反序列化恢复成对象时调用此方法

__get()       当读取不可访问或不存在的属性的值会被调用

まずフレームワークを構成するクラスを書き出し、次にクラス内の変数を示します。使用するクラスを別々にインスタンス化します。なぜ new show を 2 回使用する必要があるのですか? (コードを見れば理解できるはずです。1 回目は show クラスのインスタンス化であり、2 回目は show クラスのインスタンス化です。)最初のインスタンス化。source = show の 2 番目のインスタンス化)

シリアル化するときに URL エンコードを使用してみてください (この質問には保護された変更属性があり、非表示の文字が含まれます)

推奨される学習: "

PHP ビデオ チュートリアル

"

以上がPHPデシリアライゼーションポップチェーン構築の知識ポイントの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ランプスタックを超えて:現代のエンタープライズアーキテクチャにおけるPHPの役割 ランプスタックを超えて:現代のエンタープライズアーキテクチャにおけるPHPの役割 Jul 27, 2025 am 04:31 AM

phpisStillRelevantinModernenterpriseenvironments.1.modernphp(7.xand8.x)は、パフォーマンスゲイン、stricttyping、jit compilation、andmodernsyntaxを提供し、scaleApplications.2.phpintegrateSeffeCtiveTiveliveTiveliveTiveliveTiveTiveTiveliveTiveStures、

PHPでのオブジェクトリレーショナルマッピング(ORM)パフォーマンスチューニング PHPでのオブジェクトリレーショナルマッピング(ORM)パフォーマンスチューニング Jul 29, 2025 am 05:00 AM

n 1クエリの問題を避け、関連するデータを事前にロードすることにより、データベースクエリの数を減らします。 2.必要なフィールドのみを選択して、メモリと帯域幅を保存するために完全なエンティティをロードしないようにします。 3. DoctrineのセカンダリキャッシュやRedis Cacheの高周波クエリ結果など、キャッシュ戦略を合理的に使用します。 4.エンティティのライフサイクルを最適化し、クリア()を定期的に呼び出してメモリを解放してメモリオーバーフローを防ぎます。 5.データベースインデックスが存在し、生成されたSQLステートメントを分析して、非効率的なクエリを避けます。 6.変更が不要なシナリオで自動変更追跡を無効にし、パフォーマンスを改善するためにアレイまたは軽量モードを使用します。 ORMを正しく使用するには、SQLモニタリング、キャッシュ、バッチ処理、適切な最適化を組み合わせて、開発効率を維持しながらアプリケーションのパフォーマンスを確保する必要があります。

PHPとrabbitmqを使用した回復力のあるマイクロサービスを構築します PHPとrabbitmqを使用した回復力のあるマイクロサービスを構築します Jul 27, 2025 am 04:32 AM

柔軟なPHPマイクロサービスを構築するには、RabbitMQを使用して非同期通信を実現する必要があります。 2。信頼性を確保するために、永続的なキュー、永続的なメッセージ、リリース確認、手動ACKを構成します。 3.指数バックオフ再試行、TTL、およびデッドレターキューセキュリティ処理の障害を使用します。 4.監督などのツールを使用して、消費者プロセスを保護し、ハートビートメカニズムを有効にしてサービスの健康を確保します。そして最終的に、システムが障害で継続的に動作する能力を実現します。

Python Run Shellコマンドの例 Python Run Shellコマンドの例 Jul 26, 2025 am 07:50 AM

subprocess.run()を使用して、シェルコマンドを安全に実行し、出力をキャプチャします。注入リスクを避けるために、リストのパラメーターを渡すことをお勧めします。 2。シェル特性が必要な場合は、シェル= trueを設定できますが、コマンドインジェクションに注意してください。 3. subprocess.popenを使用して、リアルタイム出力処理を実現します。 4。Check = COMMATが失敗したときに例外をスローするためにtrueを設定します。 5.単純なシナリオで直接チェーンを呼び出して出力を取得できます。 os.system()または非推奨モジュールの使用を避けるために、日常生活の中でsubprocess.run()を優先する必要があります。上記の方法は、Pythonでシェルコマンドを実行するコアの使用を上書きします。

vscode settings.jsonの場所 vscode settings.jsonの場所 Aug 01, 2025 am 06:12 AM

settings.jsonファイルは、ユーザーレベルまたはワークスペースレベルのパスにあり、VSCODE設定のカスタマイズに使用されます。 1。ユーザーレベルのパス:WindowsはC:\ users \\ appdata \ roaming \ code \ user \ settings.json、macos is/users //settings.json、linux is /home/.config/code/user/settings.json; 2。Workspace-Level Path:.vscode/settings Project Root Directoryの設定

PHP用の生産対応Docker環境の作成 PHP用の生産対応Docker環境の作成 Jul 27, 2025 am 04:32 AM

正しいPHP Basicイメージを使用し、安全で最適化されたDocker環境を構成することが、生産を実現するための鍵です。 1.攻撃面を減らしてパフォーマンスを向上させるための基本画像としてPHP:8.3-fpm-alpineを選択します。 2.カスタムPHP.iniを介して危険な機能を無効にし、エラーディスプレイをオフにし、OpCacheとJITを有効にしてセキュリティとパフォーマンスを強化します。 3. NGINXを逆プロキシとして使用して、機密ファイルへのアクセスを制限し、PHPリクエストをPHP-FPMに正しく転送します。 4.マルチステージ最適化画像を使用して開発依存関係を削除し、非ルートユーザーを設定してコンテナを実行します。 5. CRONなどの複数のプロセスを管理するためのオプションの監督。 6.展開前に機密情報漏れがないことを確認します

Readonlyプロパティを備えたPHPに不変のオブジェクトを構築します Readonlyプロパティを備えたPHPに不変のオブジェクトを構築します Jul 30, 2025 am 05:40 AM

readonlypropertiesinphp8.2canonlybeassignedonedonedontheconstructoraturatiddeclaration andcannotBemodifiedifiedifiedifiedifiedifiedifiedifiadtivedabilityattthelanguagelele.2.

サーバーレス革命:BREFを使用してスケーラブルなPHPアプリケーションを展開します サーバーレス革命:BREFを使用してスケーラブルなPHPアプリケーションを展開します Jul 28, 2025 am 04:39 AM

BREFにより、PHP開発者は、サーバーを管理せずにスケーラブルで費用対効果の高いアプリケーションを構築できます。 1.Brefは、最適化されたPHPランタイムレイヤーを提供し、PHP8.3およびその他のバージョンをサポートし、LaravelやSymfonyなどのフレームワークとシームレスに統合することにより、PHPをAwslambdaにもたらします。 2。展開手順には、次のものが含まれます。Composerを使用してBREFのインストール、httpエンドポイントや職人コマンドなどの関数とイベントを定義するためにserverless.ymlの構成。 3. serverlessdeployコマンドを実行して、展開を完了し、Apigatewayを自動的に構成し、アクセスURLを生成します。 4。Lambdaの制限については、Brefは解決策を提供します。

See all articles