Maison  >  Article  >  développement back-end  >  Explication détaillée des méthodes d'attaque de sites Web PHP - attaque par injection de commandes

Explication détaillée des méthodes d'attaque de sites Web PHP - attaque par injection de commandes

零到壹度
零到壹度original
2018-04-11 13:54:095484parcourir

Cet article présente principalement les attaques par commandes parmi les méthodes d'attaque courantes sur les sites Web PHP. L'injection de commande fait référence à une méthode d'attaque dans laquelle les pirates informatiques modifient le contenu généré dynamiquement d'une page Web en saisissant du code HTML dans un mécanisme de saisie (tel qu'un champ de formulaire dépourvu de restrictions de validation efficaces). L'utilisation de commandes système est une opération dangereuse, surtout si vous essayez d'utiliser des données distantes pour construire la commande à exécuter. Si des données contaminées sont utilisées, des vulnérabilités d’injection de commandes apparaissent.

Attaque par injection de commandes

Les 5 fonctions suivantes peuvent être utilisées en PHP pour exécuter Application ou fonction externe

système, exec, passthru, shell_exec, "(même fonction que shell_exec)

Prototype de fonction

système de chaînes (commande de chaîne, int &return_var)

commande La commande à exécuter

return_var stocke la valeur d'état après l'exécution de la commande exécutée

string exec (commande de chaîne, tableau &sortie, int &return_var)

commande La commande à exécuter

sortie Obtenez chaque ligne de sortie de chaîne en exécutant la commande

return_var stocke la commande exécutée La valeur d'état

void passthru (string command, int &return_var)

commande La commande à exécuter

return_var stocke la valeur d'état après avoir exécuté la commande

string shell_exec (commande string)

commande commande à exécuter

漏洞实例

例1:

  1. //ex1.php 
    $dir = $_GET["dir"]; 
    if (isset($dir)) 
    { 
    echo "";
    system("ls -al ".$dir); 
    echo ""; 
    } 
    ?>

我们提交http://www.sectop.com/ex1.php?dir=| cat /etc/passwd

提交以后,命令变成了 system("ls -al | cat /etc/passwd");


eval注入攻击

eval函数将输入的字符串参数当作PHP程序代码来执行

函数原型:

mixed eval(string code_str) //eval注入一般发生在攻击者能控制输入的字符串的时候

  1. //ex2.php 
    $var = "var"; 
    if (isset($_GET["arg"])) 
    { 
    $arg = $_GET["arg"]; 
    eval("\$var = $arg;"); 
    echo "\$var =".$var; 
    } 
    ?>

当我们提交http://www.sectop.com/ex2.php?arg=phpinfo();漏洞就产生了;

动态函数

  1. php 
    func A() 
    { 
    dosomething(); 
    } 
    func B() 
    { 
    dosomething(); 
    } 
    if (isset($_GET["func"])) 
    { 
    $myfunc = $_GET["func"]; 
    echo $myfunc(); 
    } 
    ?>

程序员原意是想动态调用A和B函数,那我们提交http://www.sectop.com/ex.php?func=phpinfo漏洞产生

防范方法

1、尽量不要执行外部命令

2、使用自定义函数或函数库来替代外部命令的功能

3、使用escapeshellarg函数来处理命令参数

4. Utilisez safe_mode_exec_dir pour spécifier le chemin du fichier exécutable.

La fonction esacpeshellarg échappera à tous les caractères provoquant la fin des paramètres ou des commandes, guillemets simples "'", remplacés par "'", doubles. guillemets "" ", remplacez-le par """, et remplacez le point-virgule ";" par ";"

Utilisez safe_mode_exec_dir pour spécifier le chemin du fichier exécutable. Vous pouvez y mettre les commandes que vous utiliserez. chemin à l'avance

safe_mode = On

safe_mode_exec_dir = /usr/local/php/bin/


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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn