Testimonial

Catégorie: Web Difficulté: easy Flag: HTB{w34kly_t35t3d_t3mplate5}

Challenge

55KB
Ouvrir

Description


The challenge involves an recruitment page for "They Fray" and allows anyone to submit a testimonial. The webstack utilizes GoLang with chi/templ and is deployed via Air, which allows for live reloading of golang applications. Testimonials is a GRPC Microservice and stored/retrieved as files. Exploitation occours because the Testimonial microservice is exposed to end-users, which provides the ability to overwrite the golang files on the webservice. Due to air live reloading files, it is possible to inject arbituary code.

Analyse globale

Le site est très simple, on a un formulaire et des card qui correspondes aux différents formulaires déjà soumis

Concernant le code, on voit que l’on a 2 services qui écoutent

  • Un service HTTP

  • Un service GRPC

Dans /grpc.go il y a la fonction SubmitTestimonial qui permet d’enregistrer dans /public/testimonials/ les formulaires reçus. Il faut noter que le nom du fichier est d’ailleurs le nom du customer

Dans /client/client.go on s’aperçoit que l’on a une restriction lorsque l’on soumet un formulaire, le nom du customer ne peut pas contenir n’importe quel caractère

Seulement comme nous avons vu juste avant, le service GRPC ne contient pas ces restrictions lui-même, ce qu’il fait que si l’on passe directement par lui et non par le service web, on peut choisir n’importe quel nom de fichier et écraser des fichiers existants


Exploitation

On commence par se connecter au service GRPC avec grpcurl

Comme le service ne supporte pas la réflexion, la documentation nous dit que l’on peut fournir directement le fichier proto

On peut maintenant appeler la fonction SubmitTestimonial avec notre payload

Pour ça, on va le faire en Go en reprenant le dossier /ptb/ pour se connecter au serveur GPRC.

Concernant le payload, il faut simplement copier-coller /view/home/index.templ et remplacer fsys := os.DirFS("public/testimonials") par **fsys := os.DirFS("/")** ce qui permettra de lire tous les fichiers à la racine

Et enfin pour le nom ce sera ../../view/home/index.templ pour remonter jusqu’au dossier du challenge puis redescendre jusqu’à index.templ pour l’écraser

Ce qui nous donne maintenant sur la page principale

Mis à jour

Ce contenu vous a-t-il été utile ?