Party Cat0%

05/10/24

Sol·licituddecontraban,SSRFiGit

Col·lecció Web Challenge | Ferro CTF 2024

Thanks for sharing!

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ

Sol·licitud de contraban, SSRF i Git
I know your browser history
Hola! Avui, compartiré alguns dels reptes que vaig resoldre a IronCTF 2024.

Contingut

Comencem amb alguns reptes d'escalfament.

JWT Hunt

JWT Hunt
En visitar el lloc web, vaig veure botons de registre i d'inici de sessió. Sabent que era un repte d'escalfament, vaig activar Burp Suite per capturar el trànsit.
Em vaig registrar i vaig iniciar sessió, rebent un missatge de benvinguda:
JWT Hunt Welcome
Vaig comprovar la font de la pàgina, res. Aleshores, vaig navegar fins a /robots.txt i vaig trobar la primera part de la clau secreta: 6yH$#v9Wq3e&Zf8L, juntament amb un camí a la quarta part: /secretkeypart4.
JWT Hunt Key 1
A continuació, vaig provar el fitxer comú /sitemap.xml i vaig trobar la tercera part de la clau: 2C@mQjUwEbGoIhNy.
JWT Hunt Key 3
Comprovant l'historial de Burp Suite, he trobat la segona part de la clau en una galeta: pRt1%Y4nJ^aPk7Sd.
JWT Hunt Key 2
Ara, per a l'última clau, vaig navegar fins a /secretkeypart4 però vaig obtenir un Bad Request:
JWT Hunt Bad Request
Vaig enviar la sol·licitud al repetidor de Burp Suite i vaig canviar els mètodes de sol·licitud. Finalment, fent servir HEAD, vaig rebre un 200 OK i la quarta clau: 0T!BxlVz5uMKA#Yp.
JWT Hunt Key 4
Combinant totes les parts, la clau secreta completa és:
6yH$#v9Wq3e&Zf8LpRt1%Y4nJ^aPk7Sd2C@mQjUwEbGoIhNy0T!BxlVz5uMKA#Yp
Com que el repte implica JWT, vaig copiar el meu testimoni i vaig anar a jwt.io. Vaig canviar el camp username a admin i vaig fer servir la clau secreta:
JWT Hunt jwt.io
Utilitzant el testimoni modificat en una sol·licitud a /dashboard, em van redirigir i vaig obtenir la marca:
JWT Hunt Flag
ironCTF{W0w_U_R34lly_Kn0w_4_L07_Ab0ut_JWT_3xp10r4710n!}

Ara per alguns reptes web.

Aplicació de préstec

Loan App

Descobrint el lloc web

En visitar el lloc web, vaig trobar un formulari d'inici de sessió. Em vaig registrar i vaig iniciar sessió, res especial aquí, excepte que tant el nom d'usuari com la contrasenya havien de ser uuidV4. Per tant, en vaig generar un i vaig iniciar sessió.
Ara, hi ha un formulari amb dos camps: Import i Raó. Vaig enviar valors aleatoris i vaig rebre un bitllet com aquest:
Loan Form

Comprovant el codi font

Tot semblava normal, excepte un punt final:
Vulnerable Endpoint
Aquest punt final va permetre l'aprovació del préstec i la bandera es va incloure a la resposta. El problema era que no tenia autorització! Per tant, vaig fer una sol·licitud al punt final, però vaig rebre un 403 Forbidden:
403 Forbidden
Mirant el codi, això no havia de passar: hi deu haver algun programari intermedi implicat. Després d'inspeccionar els fitxers, vaig trobar la configuració haproxy.cfg:
Com podem veure, nega l'accés a qualsevol camí que comenci per /admin:
Vaig provar diverses tècniques de bypass: posar algunes lletres en majúscules, codificar URL, afegir barres inclinades, però res no va funcionar.

Trobar la vulnerabilitat

Tornant als fitxers, especialment al docker-compose.yml, em vaig adonar de la versió d'HAProxy:
Old HAProxy
Després de la investigació, vaig trobar que aquesta versió és vulnerable a CVE-2021-40346, una vulnerabilitat de contraban de sol·licituds HTTP. Vaig fer referència a aquest bloc: Vulnerabilitat crítica a HAProxy: CVE-2021-40346.
El contraban de sol·licituds HTTP es produeix quan una sol·licitud elaborada amb cura enganya un servidor perquè la processi com a dues sol·licituds, permetent a l'atacant realitzar accions malicioses.
Aquí teniu la sol·licitud completa:
Full Request
L'execució d'això al servidor va passar per alt les restriccions.

Recuperant la bandera

Tornant a la web:
Flag
Finalment vaig recuperar la bandera:
ironCTF{L04n_4ppr0v3d_f0r_H4ch3r$!!}

b64SiteViewer

b64SiteViewer

Descobrint el lloc web

En visitar el lloc web, hi havia un camp d'entrada per a un URL.
b64 main
Vaig introduir https://google.com i vaig rebre la versió codificada en base64 del lloc.
b64 response
Sembla que el servidor fa una sol·licitud a l'URL proporcionat i retorna el seu contingut codificat en base64. Aquest comportament va indicar una possible vulnerabilitat SSRF.

Comprovant el codi font

Mirant el codi font, em vaig adonar d'una llista negra destinada a prevenir atacs SSRF:
També hi havia un punt final /admin:
admin endpoint
Aquest punt final comprova l'adreça IP de la sol·licitud, bloquejant 127.0.0.1 o localhost. Si obviem aquesta comprovació, el servidor executa l'ordre passat al paràmetre cmd i retorna la sortida. També hi ha un cmd_blacklist que bloqueja algunes ordres a les quals no tenim accés.

Tocant un mur

Al principi vaig pensar a utilitzar algunes banderes com X-Forwarded-For, X-Forwarded-Host ... etc configurant-les a 127.0.0.1 o localhost però no va funcionar.

Bypass de la llista negra

Una altra manera era fer que el propi servidor ens fes la sol·licitud, i com ho podem fer? del camp d'entrada que hem trobat abans! Per tant, hem de passar per alt el blacklist_hostname tal com s'ha dit anteriorment.
Un petit truc que no tothom sap, és que 127.1 és el mateix que 127.0.0.1 al servidor. i no és a la blacklist_hostname. Aquesta és la nostra manera d'entrar.
Sabem que el lloc web s'executa al port 5000 des del codi font.
website port
Per tant, vaig provar l'URL https://127.1:5000/admin?cmd=ls i vaig rebre la següent resposta codificada en base64:
Que descodifica a:
A continuació, vaig fer servir https://127.1:5000/admin?cmd=cat+*, però vaig obtenir:
que descodifica a: Command blocked. Semblava que vaig tocar el cmd_blacklist, que no era visible al codi font.

Evitar la llista negra i obtenir la bandera

Vaig provar ordres alternatives, algunes no van funcionar com less, però finalment, vaig tenir èxit amb head. He utilitzat l'URL següent: https://127.1:5000/admin?cmd=head+*.
La resposta va ser:
que descodifica a:
I aquí teniu la bandera:
ironCTF{y0u4r3r0ck1n6k33ph4ck1n6}

MovieReviewApp

MovieReviewApp

Descobrint el lloc web

En visitar el lloc web, vaig trobar botons que naveguen a cartells de pel·lícules aleatoris. L'URL va revelar que no estàvem al directori arrel:
https://movie-review.1nf1n1ty.team/movies/

Repositori Git

Tornant al directori arrel, vaig descobrir una llista de directoris que conté un directori .git.
Movie Review App Directory Listing
Utilitzant git-dumper, vaig llançar els fitxers git:
A continuació, vaig comprovar les confirmacions anteriors per obtenir informació útil. L'ordre git log va revelar commits anteriors.
Movie Review App Git Log
Inspeccionant la confirmació amb hash 66469c24090e50c6a4a955f679c6cfff2f2380da, he trobat credencials codificades i una ruta:
Movie Review App Creds
/admin

Accés al tauler d'administració

Aquí em vaig equivocar en anar de seguida a http://movie-review.1nf1n1ty.team/admin. Vaig obtenir 404. El camí correcte era http://movie-review.1nf1n1ty.team/servermonitor/admin/ com podeu veure al camí del fitxer
Movie Review App admin path
Després d'iniciar sessió, vaig rebre un formulari per introduir un IP address i un Ping Count.
Movie Review App Admin
Quan intentava fer ping a una IP, vaig rebre un error. Vaig revisar el commit responsable d'això al registre de git:
Movie Review App Ping Commit
Al codi, podem veure que està validant el ip però no el count. així que count és el nostre camí!.
Movie Review App Ping Code

Aprofitant la vulnerabilitat

Com que la part davantera només acceptava números, vaig utilitzar el eruc per manipular el recompte Aquesta és la nostra ordre:
Afegim un ; per finalitzar la part ping -c i executar la nostra ordre. També podem afegir ; després per excloure el ip, però no és necessari.
Això va retornar el contingut del directori.
Movie Review App ls
Després d'explorar els fitxers, no he pogut localitzar la bandera.

Recuperant la bandera

Vaig navegar una mica per la màquina fins que vaig trobar la bandera al directori /
Això va revelar la bandera:
ironCTF{4lways_b3_c4ar3ful_w1th_G1t!}
M'ho vaig passar genial participant en aquest CTF amb tots els seus reptes, i va ser increïble conèixer gent fantàstica al llarg del camí. No us oblideu de consultar la meva X (anteriorment Twitter) per obtenir més actualitzacions. T'atrapar la propera vegada!
Pau!

També et pot interessar