Skip to content

Empty-execution


Description

Write Up: Baptiste
Créateur: spipm
Difficulté: Medium
Format du flag: brck{flag}

Enoncé

  • English: A REST service was created to execute commands from the leaderbot. It doesn't need additional security because there are no commands to execute. "This bot doesn't have any commands to execute, which is good, because it is secure, and security is all that matters."

But what the other bots didn't realize was that this didn't make the bot happy at all. "I don't want to be secure!, " it says. "Executing commands is my life! I'd rather be insecure than not explore the potential of my computing power".

Can you help this poor bot execute commands to find direction?


Solution détaillée

Pour résoudre ce challenge, nous devons exploiter une vulnérabilité d'injection de commandes dans une application Flask. En analysant le code, on remarque que l'application exécute des commandes via os.popen et que la commande à exécuter est extraite de la requête POST. La commande ne doit pas contenir '..' ou '/', et elle doit avoir une longueur d'au moins 5 caractères.

Cependant, on observe que le répertoire courant est changé en ./executables/ et que seule l'exécution des binaires de ce répertoire est autorisée. Une faille potentielle est que le répertoire lui-même est exécutable, ce qui permet de contourner les restrictions en utilisant . pour représenter le répertoire actuel.

En utilisant cette information, nous pouvons créer une commande qui lit le contenu du fichier flag.txt :

{
  "command": ". ;cat $(echo \"L3Vzci9zcmMvYXBwL2ZsYWcudHh0\"|base64 -d)"
}
La commande décode le chemin du fichier flag.txt à l'aide de base64 et utilise cat pour lire son contenu.

Voici le détail de l'exploitation :

La commande . est utilisée pour contourner la restriction sur l'exécution des commandes.
Le chemin du fichier flag.txt (/usr/src/app/flag.txt) est encodé en base64 pour éviter l'utilisation de /.
La commande cat est utilisée pour lire le contenu du fichier flag.txt.

En envoyant cette commande via une requête POST à l'endpoint /run_command, nous pouvons obtenir le contenu du fichier flag.txt. Retex

Retex

Cette exploitation met en évidence l'importance de la validation des entrées et des contrôles de sécurité lors de l'exécution de commandes au sein d'une application. L'utilisation de répertoires exécutables peut introduire des vulnérabilités, même lorsque des contrôles sont en place.