Instructeur: Parlons de la manière
dont nous pouvons prévenir ces vulnérabilités maintenant.
La première chose à faire est qu’un grand nombre
de ces vulnérabilités existent à cause des fonctionnalités qu’elles fournissent.
Par exemple, le problème de téléchargement de fichier que nous avons
eu, il permet à l'utilisateur de télécharger n'importe quelle extension de fichier, n'importe quel
type de fichier, cela ne devrait pas arriver, il ne devrait
pas y avoir de moyen pour les utilisateurs de
télécharger les fichiers qu'ils souhaitent.
Peut-être que si vous voulez qu'ils téléchargent
une image, assurez-vous qu'ils téléchargent l'image, vérifiez
les types de fichiers.
Si vous attendez d'eux qu'ils téléchargent une chanson, un fichier MP #, assurez-vous
qu'il s'agit d'un fichier multimédia, ce n'est pas du code
PHP ou un code exécutable.
En règle générale, vous ne devez
jamais autoriser les utilisateurs à télécharger des fichiers exécutables.
Les filtres peuvent être utilisés pour vérifier si, pour
vérifier l'extension et s'assurer que
le fichier en cours de téléchargement est un fichier JPEG ou autre.
Mais ce n'est
pas un bon moyen. Le meilleur moyen est de vérifier le
type de fichier et de s'assurer que le type de fichier est une image
ou un fichier multimédia, au lieu de
vérifier l'extension, car cela peut également être ignoré.
Le deuxième type de vulnérabilités que nous
avons examiné était celui des vulnérabilités d'exécution du code.
Dans ces exploits, nous avons pu exécuter le code que nous
voulions sur l'ordinateur cible.
Encore une fois, cette fonctionnalité doit être
évitée, vous devez éviter d'autoriser les utilisateurs à exécuter du
code sur votre serveur.
Essayez d’éviter toutes ces fonctions,
telles que la transmission
var, et toutes ces fonctions qui permettent à
un utilisateur d’exécuter du code de système d’exploitation sur le serveur.
Si vous deviez absolument utiliser
quelque chose comme ça, alors assurez-vous d’analyser l’entrée avant de l’exécuter.
Par exemple, dans l'exemple que nous avons vu où le code
faisait un ping, tout ce que nous avons mis dans la zone de texte
sera envoyé au ping.
Donc, je mets ici / $ textbox simplement pour montrer que c’est
l’entrée que nous avons mise dans la zone de texte.
Voilà à quoi ressemble le
programme s'il semble trop compliqué, oublions que
nous ne parlons que du concept.
Nous allons donc en parler ici.
Donc, disons par exemple que vous avez mis
ce que nous avons fait est
de mettre une adresse IP normale, puis nous plaçons le point-virgule, puis nous
plaçons une commande que nous voulions faire, par exemple, ls -la.
Le problème, c’est l’application Web utilisée pour
le prendre tel qu’il est, le copier et le lancer ici.
Ce qui, quand vous exécuterez cette commande,
fera le ping d’abord, puis le ls -la qui est la
commande que nous voulions.
Par exemple, si vous deviez le faire,
je vous conseille de ne pas utiliser ces fonctions.
Si vous deviez utiliser une fonction comme celle-ci, vérifiez
que votre saisie correspond à ce que vous attendez. Par exemple,
vous attendez
une adresse IP et rien d'autre. Vous
pouvez donc utiliser regex pour vous assurer que
Je ne vais pas parler de regex ou
de ce qu'est regex,
regex est fondamentalement une règle
qui s'assurera que l'entrée ressemble
au format suivant.
Il faut donc un
chiffre, chiffre, chiffre, chiffre, chiffre, chiffre, chiffre, chiffre, chiffre, chiffre,
chiffre qui, si je mets autre
chose, alors l'application Web devrait le refuser.
Vous pouvez également vous assurer qu'il n'y
a pas de point-virgule ni d'espaces.
Ainsi, tout entre comme une seule chose et
ensuite il est exécuté.
Encore une fois, c’est une façon de le rendre plus sûr, mais
la meilleure chose à faire est simplement d’éviter ces fonctions.
Le troisième type de vulnérabilité sur
lequel nous nous sommes penchés était l'inclusion de
fichier et deux types.
L'inclusion de fichier
local qui nous a permis d'inclure n'importe quel fichier
sur le système, puis de
lire les fichiers, ce qui entraînerait une vulnérabilité de divulgation des
fichiers. Vous pourrez ensuite lire n'importe quel fichier sur
le serveur. Nous avons ensuite examiné l'inclusion
de fichier distant, qui est:
très dangereux qui nous permettait d'inclure n'importe quel fichier depuis
n'importe quel serveur Web, nous avons donc pu inclure des shells PHP
et obtenir une connexion à partir de l'ordinateur cible.
Pour éviter cela,
commencez par empêcher l'inclusion de fichier distant.
Donc, juste au cas où quelque
chose se passerait mal, les gens ne pourraient pas inclure de fichiers
extérieurs à votre serveur et vous pouvez
le faire de la
même manière que nous l'avons activé à l'aide de
PHP ini en désactivant allow_url_fopen et allow_url-include.
Et si nous allons ici à notre
Metasploitable, je vais vous montrer
très rapidement, donc si nous faisons sudo nano qui est l'éditeur de texte / etc
/ PHP / cgi / php. ini, le même fichier que
nous avons utilisé,
c’est le fichier pour les paramètres PHP.
Si vous ouvrez ce
fichier et que je vais maintenant faire
Control + W et que je cherche allow_url.
Et vous voulez vous assurer
que allow_url_fopen est défini
sur Off et allow_url_include est également défini sur Off.
Ctrl + X + Y et entrez et
cela le sauvegardera pour vous.
L'autre moyen d'éviter ces
exploits consiste à utiliser l'inclusion de fichier statique. Ainsi,
au lieu d'utiliser l'inclusion de fichier dynamique
que nous avons vue, vous pouvez coder en dur les fichiers que
vous souhaitez inclure dans le code
sans les obtenir à l'aide de GET ou POST.
Par exemple, ce qui se passe dans les exemples que nous
voyons dans les exemples de vulnérabilité, c’est que nous
avons une page appelée page ou index. php.
Et puis cet index. php prend un paramètre appelé page puis
prend une autre page,
par exemple, news. php.
Et cela inclut ces nouvelles. php dans le code.
Alors, à quoi ressemble le code?
Dans le code PHP, vous verrez quelque chose comme inclure.
Donc, ce que cela
va faire fondamentalement, et cela ressemble à ceci, je crois,
ce que cela fait, cela inclut
tout ce qui vient après le paramètre de page.
Ainsi, le code prendra dynamiquement tout ce qui vient après le paramètre
page et l’inclut dans la page en cours afin que
ce soit dans l’index. page php.
OK, c’est très
grave parce que même si ce n’est
pas GET, parfois les
gens utilisent POST et dans POST,
vous ne le verrez pas, donc il sera posté, mais
vous pouvez utiliser un proxy tel
que le proxy Burp et
cela ressemblera à cela, puis vous
pouvez le modifier et le faire inclure tout ce que
vous voulez, puis il est affiché sur la page.
Ce que nous voulons vraiment faire, c’est que nous voulons que l’utilisateur ne
puisse pas manipuler ce qui va être inclus, donc si
vous vouliez inclure une page appelée news. php, il suffit de l'inclure
à l'intérieur sans donner à
l'utilisateur la possibilité de
le changer.
Je sais que vous
allez programmer votre code pour qu'il ressemble à ceci, mais les utilisateurs,
nous savons, nous avons vu comment les utilisateurs
peuvent jouer avec cela et le
faire inclure tout ce qu'ils veulent.
La meilleure façon de le faire est simplement de
le faire inclure une page. php
donc votre code n'utilise aucune variable.
C'est codé en dur, cela peut rendre votre code plus
long mais c'est beaucoup plus sécurisé.