05/10/24
Sol·licituddecontraban,SSRFiGit
Col·lecció Web Challenge | Ferro CTF 2024
Thanks for sharing!
بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ

I know your browser history
Hola! Avui, compartiré alguns dels reptes que vaig resoldre a IronCTF 2024.
Contingut
- JWT Hunt - Escalfament
- Aplicació de préstec - Web
- b64SiteViewer - Web
- MovieReviewApp - Web
Comencem amb alguns reptes d'escalfament.
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:

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.
A continuació, vaig provar el fitxer comú
/sitemap.xml i vaig trobar la tercera part de la clau: 2C@mQjUwEbGoIhNy.
Comprovant l'historial de Burp Suite, he trobat la segona part de la clau en una galeta:
pRt1%Y4nJ^aPk7Sd.
Ara, per a l'última clau, vaig navegar fins a
/secretkeypart4 però vaig obtenir un 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.
Combinant totes les parts, la clau secreta completa és:
6yH$#v9Wq3e&Zf8LpRt1%Y4nJ^aPk7Sd2C@mQjUwEbGoIhNy0T!BxlVz5uMKA#YpCom 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:
Utilitzant el testimoni modificat en una sol·licitud a
/dashboard, em van redirigir i vaig obtenir la marca:
ironCTF{W0w_U_R34lly_Kn0w_4_L07_Ab0ut_JWT_3xp10r4710n!}
Ara per alguns reptes web.
Aplicació de préstec

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:

Comprovant el codi font
Tot semblava normal, excepte un punt final:

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:
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:
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:

L'execució d'això al servidor va passar per alt les restriccions.
Recuperant la bandera
Tornant a la web:

Finalment vaig recuperar la bandera:
ironCTF{L04n_4ppr0v3d_f0r_H4ch3r$!!}
b64SiteViewer

Descobrint el lloc web
En visitar el lloc web, hi havia un camp d'entrada per a un URL.

Vaig introduir
https://google.com i vaig rebre la versió codificada en base64 del lloc.
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:
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.

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

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.
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.
Inspeccionant la confirmació amb hash 
66469c24090e50c6a4a955f679c6cfff2f2380da, he trobat credencials codificades i una ruta:

/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

Després d'iniciar sessió, vaig rebre un formulari per introduir un
IP address i un Ping Count.
Quan intentava fer ping a una IP, vaig rebre un error. Vaig revisar el commit responsable d'això al registre de git:

Al codi, podem veure que està validant el
ip però no el count. així que count és el nostre camí!.
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.

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!
Etiquetes:

