Maison > Article > Opération et maintenance > Utilisez les nouvelles fonctionnalités de php7 pour contourner les règles anti-killing
J'ai récemment étudié l'antivirus Webshell et j'ai trouvé un nouveau point. La raison en est que j'ai soudainement pensé que puisque php7.1 ne peut pas utiliser l'assertion de fonctions variables, alors utilisez les nouvelles fonctionnalités de php7 pour contourner les règles anti-kill, et enfin contourner un certain bouclier et "un certain d0g".
L'environnement expérimental est 7.1.9, et tous les chevaux ne peuvent pas être utilisés dans des environnements inférieurs à php7.
Base des règles D-shield (dernière) : 20191227
Étant donné qu'un certain d0g peut provoquer une infraction en testant ses produits, afin d'éviter d'être signalé, la photo ne sera pas publiée.
Pré-expérience
Un certain bouclier
D'abord le code suivant
Une fausse alerte directe.
Par conséquent, il est irréaliste de transmettre directement des paramètres à eval.
Nous devons donc ensuite utiliser les fonctions et les nouvelles fonctionnalités de PHP pour le contourner.
Un certain d0g
Et pour un certain d0g, du moment que le code suivant
lui donnera une fausse alarme.
Par conséquent, lors de l'écriture d'un jeu sans chevaux, les variables de post ne doivent pas apparaître dans la chaîne de eval. Tout comme « b » ci-dessus, bien qu'il apparaisse comme une variable dans « eval ». Avec cette base à l’esprit, nous pouvons aller droit au but.
PHP7.0.x
[php manual-php7.0.x nouvelles fonctionnalités]( https://www.php.net/manual/zh/migration70.new-features. php)
Déclaration du type de valeur de retour
php7 ajoute la prise en charge de la déclaration de type de valeur de retour Ajoutez simplement un `:type` lors de la définition d'une fonction.
Par exemple :
signifie que le type de valeur de retour de la fonction doit être int. Sinon, la conversion sera forcée ou une erreur de syntaxe sera affichée.
Si le logiciel antivirus doté de cette fonctionnalité n'est pas mis à jour, il ne reconnaîtra pas cette fonction et sera contourné.
Par exemple :
Vous pouvez le tester avec un logiciel antivirus.
Trouvé non détecté.
peut être utilisé.
Opérateur de coalescence nul
En raison du grand nombre de situations où les expressions ternaires et `isset()` sont utilisées simultanément dans l'utilisation quotidienne, l'opérateur de coalescence nul (*??*) est ajouté . Sucre syntaxique. Si la variable existe et que sa valeur n'est pas **`NULL`**, elle renverra sa propre valeur, sinon elle renverra son deuxième opérande
En bref :
Comment utiliser ` ? ? `, le logiciel de destruction ne comprendra pas ce processus de traitement, ce qui peut conduire à un contournement.
Tout comme le code suivant, vous pouvez contourner un certain d0g
puis utiliser l'appel de fonction
Vous pouvez constater que vous avez réussi le bouclier D
Tester la convivialité
Prenons un regardez les fonctionnalités de 7.1
php7.1.x
[php manuel-php7.0.x nouvelles fonctionnalités]( https://www.php.net/manual/zh/ migration71.new-features.php )
Types nullables
Les types de paramètres et les valeurs de retour peuvent désormais être nullables en ajoutant un point d'interrogation avant le type. Lorsque cette fonctionnalité est activée, les paramètres transmis ou le résultat renvoyé par la fonction sont soit du type donné, soit null .
Une fonctionnalité de plus que la 7.1 ? `Si la valeur de retour de la fonction n'est pas du type donné, elle sera vide.
Utilisez le même code :
Pas de surprises
D-shield a réussi
Syntaxe de tableau court
La syntaxe de tableau court ([]) est désormais une solution de secours pour la liste( ), option de syntaxe, peut être utilisée pour attribuer la valeur du tableau à certaines variables (y compris dans foreach).
Ici, une liste de crochets `[] type` est utilisée pour la démonstration.
De cette façon, les valeurs du tableau sont affectées à ` $c`, `$d`.`$c='a';$d= 'b' ;`
De cette façon, vous pouvez utiliser cette fonctionnalité rarement utilisée pour contourner la suppression statique
Écrivez d'abord la plus simple :
Puis nous avons passé un certain d0g. Testez-le vous-même.
Ensuite, vous pouvez faire correspondre la fonction. Comme ceci :
Vérifiez-le
Testez la convivialité
list() prend désormais en charge les noms de clés
Description officielle : list() et sa nouvelle syntaxe [] prennent désormais en charge la spécification des noms de clés à l'intérieur. Cela signifie qu'il peut attribuer n'importe quel type de tableau à certaines variables (similaire à la syntaxe de tableau court)
C'est très déroutant, vous le comprendrez peut-être après avoir regardé l'exemple.
ex :
Vous pouvez réussir un certain d0g avec une petite modification (autotest) :
Essayez D Shield
Enregistré au niveau 1
Utilisez à nouveau la fonction personnalisée.
J'ai réussi D avec succès pour tester la convivialité.
Prend en charge les décalages de chaîne négatifs
Description officielle
Maintenant, toutes les fonctions d'opération de chaîne qui prennent en charge les décalages Prend en charge l'acceptation de nombres négatifs comme décalages, y compris l'exploitation indices de chaîne via [] ou {}. Dans ce cas, un décalage négatif s'entend comme un décalage par rapport à la fin de la chaîne.
Dans les versions inférieures à 7.1, les décalages négatifs renvoient une chaîne vide.
par exemple :
`s` est renvoyé dans 7.1.x, mais ` string(0) "" est renvoyé dans les versions précédentes `
Idée : On peut diviser la chaîne pour que les règles ne puissent pas être reconnues. Enfin, utilisez les variables variables de php :
De cette façon, vous pouvez transmettre un certain d0g. Mais pour le bouclier D, les caractères d'épissage et les variables variables seront reconnus. Signalement de niveau 1 « fichiers suspects », je dois dire que c'est vraiment très bien fait.
Fin
En fait, il existe de nombreuses fonctionnalités, telles que « définir un tableau constant via définir() », qui peuvent également être contournées par analogie. Et non seulement les fonctions personnalisées, mais également les classes, les variables variables, etc. peuvent être utilisées pour contourner la suppression statique.
Vous pouvez également utiliser « l'opérateur de vaisseau spatial (opérateur de comparaison combiné) », la « fonction de division entière intdiv() », etc. pour contourner la suppression dynamique.
Pour plus d'articles connexes, veuillez faire attention à la colonne Sécurité du serveur Web du site Web chinois 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!