square-checkWRITEUP : PRACTICE EXAM 1 (BSCP)

Stage 1: Initial Access (Cross-Site Scripting - XSS)

Cible : Panel de recherche. Vecteur : Injection de JavaScript via le DOM au sein d'un objet JSON.

1. Analyse du point d'injection

Le terme de recherche est réfléchi dans une variable JavaScript :

2. Bypass du WAF & Exfiltration

L'utilisation directe de document.cookie déclenche le WAF ("Potentially dangerous search term"). Pour contourner cela, on utilise l'encodage hexadécimal/unicode ou la fonction with.

Payload de test (Bypass) :

Payload final (Exfiltration via Collaborator) :

  • On utilise eval(atob(...)) pour masquer la requête fetch vers notre serveur d'exploit.

3. Exploit final (Livré à la victime)

Le script redirige la victime vers l'URL malveillante contenant le payload injecté :

Stage 2: Privilege Escalation (SQL Injection)

Vecteur : Injection SQL dans le paramètre ORDER BY

1. Identification de la base de données

L'erreur générée par une chaîne non fermée confirme une injection possible. On teste les payloads de délai (Time-based) pour identifier le moteur :

  • PostgreSQL (Cible) : DATE,pg_sleep(10)

  • Erreur rencontrée : could not identify an ordering operator for type void.

    • Cause : pg_sleep() retourne void, ce qui ne peut pas être trié par ORDER BY.

2. Extraction de données (Error-based)

Pour extraire le mot de passe de l'administrateur, on force une erreur de conversion de type (Cast) pour afficher la donnée dans le message d'erreur.

Payload : DATE,(CASE WHEN (1=1) THEN (SELECT 'a' FROM pg_sleep(10)) ELSE 'a' END)

Résultat : L'erreur révèle le mot de passe : invalid input syntax for type integer: "b235d711d5858825"

Stage 3: File System Access (Java Deserialization)

Objectif : Accéder au système de fichiers (exfiltration du fichier secret).

Une fois connecté en admin, on observe le cookie admin-prefs.

  • Format : URL Encoded -> Base64 -> Gzip -> Objet Java sérialisé.

2. Exploitation (Ysoserial)

L'application utilise une bibliothèque vulnérable (CommonsCollections). Après test des différentes versions (1 à 8), la version CommonsCollections6 est fonctionnelle.

3. Payload d'exfiltration

On génère un payload pour envoyer le contenu du fichier /home/carlos/secret vers notre serveur Collaborator via une requête POST :

  • Procédure : Compresser le binaire en Gzip -> Encoder en Base64 -> Remplacer la valeur dans le cookie admin-prefs.

Mis à jour