Vulnérabilité d'exécution de fonction de code PHP

fonction eval

La fonction eval () peut exécuter les valeurs des variables dans les paramètres. Elle est généralement utilisée pour traiter des modèles et charger dynamiquement du code PHP, mais elle est également souvent utilisée par des attaquants, comme un programme de porte dérobée:

<?php eval($_GET[cmd])?>

Insérez la description de l'image ici

fonction assert ()

La fonction assert () est utilisée en PHP pour déterminer si une expression est vraie et renvoie vrai ou faux. Si le code PHP est transmis directement, il sera exécuté.

<?php assert($_GET["cmd"]);?>

Insérez la description de l'image ici

Fonction preg_replace ()

Dans la fonction preg_replace (), lorsque l'expression régulière du premier paramètre a un modificateur e, la chaîne du deuxième paramètre est exécutée en tant que code PHP.

<?php
	preg_replace("/pregStr/e",$_GET['cmd'],"cmd_pregStr");
?>

Insérez la description de l'image ici

Fonction create_function ()

La fonction de la fonction create_function () est de créer une fonction anonyme à partir des paramètres passés et de renvoyer un nom unique. Lorsque PHP filtre incorrectement l'entrée passée à create_function (), un attaquant distant peut utiliser la vulnérabilité et les autorisations d'application privilégiées pour exécuter du code arbitraire.

<?php
	$newfunc = create_function('$a,$b',$_GET['cmd']);
?>

Demande

? cmd =;} phpinfo (); / * phpinfo sera exécuté sans appeler la fonction

Insérez la description de l'image ici

Autres fonctions qui conduisent facilement à des problèmes de sécurité

assert()										pcntl_exex()
array_filter()									preg_replace()
array_map()										require()
array_reduce()									require_once()
array_diff_uassoc()								register_shutdown_function()
array_diff_ukey()								register_tick_function()
array_udiff()									set_error_handler()
array_udiff_assoc()								shell_exec()
array_udiff_uassoc()							stream_filter_register()
array_intersect_assoc()							system()
array_intersect_uassoc()						usort()
array_uintersect()								uasort()
array_uintersect_assoc()						uksort()
array_uintersect_uassoc()						xml_set_character_data_handler()
array_walk()									xml_set_default_handler()
array_walk_recursive()							xml_set_element_handler()
create_function()								xml_set_external_entity_ref_handler()
escapeshellcmd()								xml_set_notation_decl_handler()
exec()											xml_set_processing_instruction_handler()
include											xml_set_start_namespace_decl_handler()
include_once()									xml_set_unparsed_entity_decl_handler()
ob_start()
passthru()

Défense de l'exécution du code

Les fonctions escapeshell () et escapeshellcmd () sont utilisées pour garantir que les paramètres de la fonction d'exécution de commande entrante sont bien sous la forme de paramètres de chaîne et ne peuvent pas être injectés

<?php
	system('ls ' . escapeshellarg($dir));
?>

escapeshellarg () ajoutera un guillemet simple à la chaîne, et peut citer ou transcoder tout guillemet simple existant pour garantir qu'une chaîne peut être directement passée dans la fonction shell et est sûre.

escapeshellcmd () échappe les caractères de la chaîne qui peuvent tromper la commande shell pour exécuter des commandes arbitraires. Cette fonction garantit que les données saisies par l'utilisateur sont échappées avant d'être transférées vers la fonction exec () ou la fonction système () ou l'opérateur d'exécution.

<?php
	//故意允许任意数量的参数
	$command = './configure '.$_POST['configure_options'];
	$escaped_command = escapeshellcmd($command);
	system($escaped_command);
?>

La fonction escapeshellcmd () doit être utilisée sur la chaîne de commande complète. Même ainsi, un attaquant peut toujours transmettre n'importe quel nombre de paramètres. La fonction escapeshellarg () doit être utilisée pour échapper à un seul paramètre

A publié 71 articles originaux · Like 3 · Visites 4044

Je suppose que tu aimes

Origine blog.csdn.net/zouchengzhi1021/article/details/105366196
conseillé
Classement