Shocker
Un outil pour trouver et exploiter des serveurs vulnérables à Shellshock
Ref: https://en.wikipedia.org/wiki/Shellshock_(software_bug)
Publié en open source par NCC Group Plc - https://www.nccgroup.trust/
Développé par :
- Tom Watson, tom [dot] watson [at] nccgroup [dot] trust
https://github.com/nccgroup/shocker
Distribué sous licence AGPL, voir LICENSE pour plus d'informations
Texte d'aide
utilisation :
shocker.py
-h, --help affiche ce message d'aide et quitte
--Host HOST, -H HOST
Un nom d'hôte ou une adresse IP cible
--file FILE, -f FILE Fichier contenant une liste de cibles
--port PORT, -p PORT Le numéro de port cible (par défaut=80)
--command COMMAND Commande à exécuter (par défaut=/bin/uname -a)
--cgi CGI, -c CGI Un seul CGI à vérifier (ex: /cgi-bin/test.cgi)
--proxy PROXY LÉGÈREMENT DÉFECTUEUX POUR L'INSTANT Proxy à utiliser sous la forme 'ip:port'
--ssl, -s Utiliser SSL (par défaut=False)
--threads THREADS, -t THREADS
Nombre maximum de threads (par défaut=10, max=100)
--verbose, -v Être verbeux dans la sortie
Exemples d'utilisation
./shocker.py -H 127.0.0.1 --command "/bin/cat /etc/passwd" -c /cgi-bin/test.cgi
Analyse http://127.0.0.1/cgi-bin/test.cgi et, si trouvé, tente d’afficher /etc/passwd
./shocker.py -H www.example.com -p 8001 -s
Analyse www.example.com sur le port 8001 via SSL pour tous les scripts de cgi_list et tente l'exploit par défaut pour tout script trouvé
./shocker.py -f ./hostlist
Analyse tous les hôtes listés dans le fichier ./hostlist avec les options par défaut
Dépendances
Python 2.7+
Journal des modifications
Modifications dans la version 1.1 (juin 2018)
- Ajout de fonctionnalités de débogage supplémentaires et correction du texte d'aide
Modifications dans la version 1.0 (mars 2016)
- Ajout de quelques scripts supplémentaires et mises à jour de commentaires, URLs et coordonnées
Modifications dans la version 0.72 (décembre 2014)
- Corrections mineures de logique et de fautes de frappe
Modifications dans la version 0.71 (décembre 2014)
- Ajout d'un délai d'attente (timeout) aux requêtes urllib2.urlopen en utilisant un 'TIMEOUT' global
Modifications dans la version 0.7 (novembre 2014)
- Ajout d'une 'pseudo console' interactive pour une exploitation plus poussée d'un serveur vulnérable choisi
- Tentative de nettoyage des problèmes de mise en mémoire tampon de la sortie en encapsulant sys.stdout dans une classe qui se vide à chaque appel à write
- Ajout d'un indicateur de progression pour les tâches longues afin de rassurer les utilisateurs non verbeux
Modifications dans la version 0.6 (octobre 2014)
- Empêche les codes de retour autres que 200 d'être considérés comme des succès
- Ajout de la possibilité de spécifier plusieurs cibles dans un fichier
- Déplacement de la liste 'cgi_list' des scripts à tenter d'exploiter vers un fichier
- Correction de quelques problèmes de formatage de sortie
- Correction de l'expression régulière pour les noms d'hôte/IP valides afin d'autoriser les noms d'hôte d'un seul mot
Modifications dans la version 0.5 (octobre 2014)
- Ajout de la possibilité de spécifier un seul script cible plutôt que d'utiliser cgi_list
- Introduction d'un délai d'attente sur les opérations socket pour host_check
- Ajout de quelques exemples d'utilisation dans l'en-tête du script
- Ajout d'un épilogue au texte d'aide indiquant la présence d'exemples
Modifications dans la version 0.4 (octobre 2014)
- Introduction d'une limite de nombre de threads par défaut à 10
- Suppression du support des couleurs jusqu'à ce que je puisse le faire fonctionner aussi bien sous Windows que sous *nix
- Corrections orthographiques
- Liste cgi_list plus complète
- Suppression de success_flag de la sortie
Avant 0.4 (octobre 2014)
À FAIRE
- Identifier et répondre correctement aux réponses HTTP/200 - faux positifs - Priorité faible/ennuyeux
- Implémenter curses pour les systèmes *nix - Pour toute l'application ou seulement le pseudo terminal ? - Priorité faible/esthétique
- Rendre le contrôle initial de l'hôte threadé maintenant que plusieurs cibles sont supportées (et pourrait rendre cette partie longue)
- Changer le mode verbeux en valeur entière - silencieux, normal, verbeux, debug ?
- Ajouter une option pour ignorer les contrôles initiaux de l'hôte pour gagner en vitesse ?
- Ajouter un résumé des résultats avant de quitter
- Sauvegarder les résultats dans un fichier ? Format ?
- À terme, l'idée est d'inclure plusieurs vecteurs possibles, mais actuellement un seul est vérifié.
- Ajouter le support des couleurs pour Windows et *nix - Priorité faible/esthétique
- Ajouter un délai d'attente en mode interactif pour les commandes qui ne retournent rien, ex: /bin/cat /dev/zero
- Embellir - Priorité faible/esthétique (évidemment)
- Ajouter le support du scan et de l'exploitation de SSH et SMTP ? https://isc.sans.edu/diary/Shellshock+via+SMTP/18879
- Ajouter le support du proxy SOCKS, potentiellement en utilisant https://github.com/rpicard/socksonsocks/ de Rober Picard
- Autres trucs. Probablement.
Remerciements à...
Anthony Caulfield chez NCC pour le temps et l'effort consacrés à la révision des premières versions
Brendan Coles chez NCC pour son soutien et ses contributions