Académique Documents
Professionnel Documents
Culture Documents
7 fichier 8) =-
Cette chose va parler des CGI (Common Gateway Interface), de ses relations
vers le oueb et le net, et surtout d'un point au niveau des vulnerabilites
exposees quand par leurs usage. La plate forme en question est UNIX, et les
exemples en PERL.
Introduction
=-=-=-=-=-=-
Les CGI sont une norme d'"interface" qui permet la communication entre des
clients et serveurs d'information qui comprennent le protocole HTTP
(Hyper-Text Transfer Protocol). TCP/IP est le protocole de communication
utilise par le script cgi et le serveur durant la communication, qui par
defaut est sur le port 80, mais qui peut etre specifie sur n'importe quel
port (de preference non priviligie :>)
Les methodes disponibles pour un programme CGI est definit dans les
specifications du protocole HHTP 1.0. Les 3 methodes sont le "GET", le
"POST" et le "PUT". GET recupere les informations du client vers le serveur,
POST demande au serveur d'accepter les infos qui sont passees depuis le
serveur vers le client, et le PUT demande au serveur d'accepter les
informations depuis le client (en bref..)
Vulnerabilites
=-=-=-=-=-=-=-
Les vulnerabilites causes par l'utilisation des scripts CGI (arf et le phf?
:) ) ne sont pour la plupart du temps des trous des CGI eux memes, ni du
serveur HTTP, mais CGI simplement permet l'access a ces vulnerabilites. Il y
a d'autres moyens pour exploiter une vulnerabilite sur une box. Par
exemple, des mauvaises permissions de fichiers peuvent etre exploitees en
utilisant FTP ou Telnet. CGI permet simplement plus d'opportunites pour
exploiter celles ci...
D'apres les specifications HTTP 1.0, les donnees qui passent par un script
CGI doivent etre encodees pour qu'il marche sur n'importe quel type de
materiel et de plate forme logicielle. Les donnees qui passent par un script
CGI en utilisant la methode GET sont ajoutee a la fin de l'URL (Universal
Resource Locator). Les donnees sont accedees par le script CGI dans une
variable d'environnement appellee QUERY_STRING. Les donnees sont de la
forme variable=valeur, avec certaines valeurs (les caracteres non
alphanumeriques) qui doivent etre "echapees", ce qui signifie que l'on
prend leurs valeurs encodees en deux caracteres hexadecimaux. Le caractere
qui informe de cet encodage est % dans l'URL (%20 pour espace). C'est la
responsabilite des scripts CGI d'echapper ou d'enlever les caracteres dans
des donnees qui lui sont donnees. Les caracteres tels que "<" ou ">", les
delimiteurs pour les tags HTML, sont courament enlevees en utilisant une
simple operation de recherche et remplacage, comme par exemple :
----------------8<------------------------------------------------------------
----------------8<------------------------------------------------------------
http://www.odci.gov/cgi-bin/query?%0a/bin/cat%20/etc/passwd
Un autre tag HTML quiest parfois vu dans les formulaires est le tag
<SELECT>, qui permet a l'utilisateur sur la machine client de selectionner
parmi un nombre fini de choix. La selection donne egalement variable=valeur
au script CGI. Couramment les scripts CGI manquent a verifier les donnees
depuis un champ <SELECT>, en supposant qu'il y ait seulement des donnees
predefinies. Encore, les donnees passent directement vers l'interpreteur
pour les langages interpretes. Les programmes compiles qui ne verifient pas
la validite et/ou de caracteres speciaux peuvent egalement etre vulnerables.
Un shell script ou en PERL qui appelles le programme mail peut etre
vulnerable a un caractere indesire. Mail accepte les commandes depuis le
formulaire "~!command" et fork un shell et execute la commande, si le script
CGI ne filtre pas les caracteres "~!", le systeme est vulnerable. Les trous
de sendmail peuvent etre egalement exploites dans ce cas. Aussi, la solution
est de trouver un script qui ne filtre pas correctement les caracteres
d'entree.
En PERL, la commande eval execute n'importe quel argument qui lui passe. les
scripts CGI qui passent arbritairement les donnees de l'utilisateur vers la
commande eval peuvent etre utilises pour executer ce que souhaite
l'utilisateur, par exemple :
require "cgi-lib";
<!--#commande variable="valeur"-->
Toutes les commandes SSI commencent avec un diese (#) suivi qu'un mot cle.
"exec cmd" lance un shell et execute une commande donnee entre les
guillemets. Si cette option est mise en marche, tu as une enorme flexibilite
avec laquelle tu peux te debrouiller sur la machine :).
Conclusion
=-=-=-=-=-
Greetings
=-=-=-=-=