Dans la programmation PHP, la fonction php_uname () est un outil couramment utilisé, qui est utilisé pour renvoyer le nom, les informations de version du système d'exploitation actuel et le type de matériel de machine. Bien que cette fonction fournit aux développeurs des informations liées au système de base, elle peut également être abusée par des attaquants malveillants pour divulguer des informations sensibles sur le serveur. Cet article analysera les cas typiques approfondis de PHP_UNAME () abusés par les attaquants et explorera comment les attaquants peuvent obtenir des informations sur le système à travers lui pour effectuer des attaques potentielles.
Dans PHP, la fonction de la fonction php_uname () est d'obtenir des informations détaillées du système d'exploitation actuel. L'utilisation de base est la suivante:
$system_info = php_uname();
echo $system_info;
Le contenu renvoyé par cette fonction contient généralement les parties suivantes:
Nom du système d'exploitation (comme Windows, Linux, Darwin, etc.)
Informations sur la version du système d'exploitation
Type de matériel de machine (comme x86_64)
Les développeurs peuvent utiliser ces informations pour effectuer une optimisation ou un débogage au niveau du système. Cependant, si un attaquant peut accéder à ces informations par certains moyens, il peut comprendre l'environnement du système d'exploitation spécifique du serveur cible et fournir des indices pour les attaques ultérieures.
Les informations système obtenues par l'attaquant à l'aide de php_uname () peuvent être utilisées pour identifier le système d'exploitation et la version du serveur, choisissant ainsi la méthode d'attaque appropriée. Voici quelques stratégies qu'un attaquant pourrait adopter:
Les attaquants peuvent obtenir le type et la version du système d'exploitation via php_uname () . Par exemple, si le résultat renvoyé montre que le serveur s'exécute sous Windows, un attaquant peut tenter d'exploiter une vulnérabilité spécifique à Windows; S'il s'agit d'un système Linux, il pourrait tenter de trouver des vulnérabilités pour une distribution Linux spécifique.
$system_info = php_uname();
if (strpos($system_info, 'Windows') !== false) {
// contreWindowsStratégie d'attaque du système d'exploitation
}
En obtenant des informations système, l'attaquant peut également déterminer le type de matériel du serveur, l'architecture du processeur, etc. Ces informations aident les attaquants à déterminer si certains code malveillants peuvent être exécutés ou si certaines vulnérabilités architecturales peuvent être exploitées. Par exemple, certaines vulnérabilités ne peuvent exister que sur une plate-forme matérielle spécifique.
Si un attaquant peut déterminer que le serveur cible exécute une version spécifique du système d'exploitation, il peut exploiter une base de données de vulnérabilité publique (telle que CVE) pour trouver des vulnérabilités connues liées à cette version du système d'exploitation. Ces vulnérabilités peuvent être utilisées pour lancer d'autres attaques.
Les attaquants peuvent également utiliser les informations du système comme moyen d'attaques d'ingénierie sociale. Si un attaquant obtient suffisamment d'informations système (telles que la version du système d'exploitation, le nom d'hôte, le nom de domaine, etc.), il peut combiner ces informations avec d'autres informations pour attaquer davantage la victime par des e-mails de phishing, des sites Web malveillants, etc.
Dans certains cas, un attaquant peut identifier la version du système d'exploitation du serveur via un simple appel php_uname () . Par exemple, un attaquant trouve un serveur cible pour renvoyer les informations suivantes:
Linux webserver 4.15.0-74-generic #83-Ubuntu SMP Fri May 10 16:11:12 UTC 2019 x86_64
Les informations indiquent à l'attaquant que le serveur cible exécute un système Ubuntu Linux avec la version 4.15. En interrogeant la base de données de la vulnérabilité publique, l'attaquant a constaté qu'il existe certaines vulnérabilités connues dans cette version (telles que la vulnérabilité Samba non corrigée), qui peut être exploitée pour contrôler davantage le serveur.
Supposons que l'attaquant entre dans le serveur cible via une vulnérabilité de mot de passe faible et appelle la fonction php_uname () pour obtenir des informations sur le système d'exploitation, le résultat renvoyé est le suivant:
Darwin MacBookPro 19.6.0 Darwin Kernel Version 19.6.0: Mon Apr 6 22:14:47 PDT 2020; root:xnu-6153.141.1~1/RELEASE_X86_64 x86_64
D'après le résultat, l'attaquant sait que le serveur cible exécute un système Mac OS et est une version spécifique de MacBookPro. En utilisant ces informations, un attaquant peut rechercher des vulnérabilités connues contre cette version particulière, lançant ainsi d'autres attaques.
Afin d'éviter la fonction php_uname () qui fuit trop d'informations sensibles, les développeurs peuvent prendre les mesures suivantes:
Pour certaines applications qui n'ont pas besoin d'afficher les informations du système d'exploitation, les développeurs doivent désactiver la fonction php_uname () ou prendre des jugements conditionnels pour s'assurer que seuls les utilisateurs authentifiés peuvent appeler cette fonction.
if (isset($_SESSION['admin'])) {
echo php_uname();
} else {
echo "Aucune autorisation pour accéder aux informations du système";
}
Dans le fichier de configuration PHP.ini du serveur, les développeurs peuvent désactiver certaines fonctions qui peuvent être abusées et réduire la surface d'attaque. Par exemple, vous pouvez désactiver la fonction php_uname () :
disable_functions = php_uname
Les pare-feu d'application Web peuvent aider à bloquer les attaques contre les vulnérabilités connues. Les développeurs peuvent configurer WAF pour détecter et bloquer les demandes malveillantes pour empêcher les attaquants de lancer d'autres attaques en obtenant des informations système.
Les mises à jour en temps opportun des correctifs de sécurité pour les systèmes d'exploitation et les logiciels sont un moyen efficace d'empêcher les attaquants d'exploiter les vulnérabilités connues. Les développeurs doivent s'assurer que les systèmes d'exploitation et les applications sur le serveur sont à jour et réduire le risque d'être exploités.
Bien que la fonction PHP_UNAME () soit un outil utile en développement, ses informations de système divulguées peuvent également devenir un point d'entrée pour que les attaquants réalisent d'autres attaques. En analysant les informations renvoyées par la fonction, l'attaquant peut déduire le type de système d'exploitation, la version et même le type de matériel de la machine du serveur, choisissant ainsi la stratégie d'attaque appropriée. Par conséquent, les développeurs devraient sensibiliser à ces risques potentiels et prendre les précautions nécessaires pour protéger le serveur des attaques.