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:
//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注入一般发生在攻击者能控制输入的字符串的时候
//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();漏洞就产生了;
动态函数
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!