Party Cat0%

03/08/25

InjeccióSQLiexposicióaGit

Camí invisible | ASC Cyber ​​WarGames

Thanks for sharing!

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

Injecció SQL i exposició a Git
I know your browser history
Benvingut de nou amb un altre escrit! Avui parlarem del repte web Unseen Path to secret de l'ASC Cyber ​​WarGames CTF.

Resum

Analitzant un repositori de Git filtrat per extreure credencials i, a continuació, pivotar a una injecció SQL amb un filtrat intens per extreure la bandera.

Camí invisible al secret

Estem representats amb aquesta pàgina "Lloc en construcció".
Site Under Construction
Com que no està permès el fuzzing, podem intentar trobar algunes pistes.
Allà baix Powered by Github · PHP · SQLite · Apache. Immediatament vaig pensar a comprovar el camí /.git/
Git path
S'ha produït un error Prohibit, però això no vol dir que no puguem accedir al repositori, de vegades només bloqueja aquest camí, però no el repositori real.
Així que vam provar /.git/config o /.git/HEAD i tenim alguns fitxers!
Git config
Aamzing! a continuació, l'aboquem amb git-dumper:
Això crearà una carpeta repo amb tots els fitxers dins del repositori git.
Al repo tenim alguns fitxers: index.php, login.php, però tots dos no tenien cap bona informació.
El següent que normalment intenteu és comprovar les confirmacions anteriors
Això va fer servir tots els commits. Eren uns 50, així que per a una vista més neta podem utilitzar git log --oneline per obtenir una única línia per a cada commit.
I hem rebut un missatge de commit interessant Delete Secrets!
Git commit
Així que comprovem la confirmació abans d'aquesta utilitzant git checkout 0a6893d i trobem un fitxer anomenat .config.php.swp que conté algunes credencials
Config file
Visitem login.php al lloc web i intentem iniciar sessió amb les credencials que hem trobat i ens trobem!

Se'ns presenta un tauler d'administració amb algunes funcionalitats
Admin panel
Hi havia un paràmetre action a l'URL que podem utilitzar per obtenir diferents pàgines, el vam provar amb algunes vulnerabilitats com LFI, però això no va donar res.
L'única funcionalitat interessant va ser la Check User (Test) que ens permet comprovar si un usuari està actiu o no.
Check User
Al principi vaig provar la injecció d'ordres del sistema operatiu, però hi havia algun tipus de filtre que bloquejava símbols com ; `` > < = $
A continuació, vam provar la injecció sql amb la nostra càrrega bàsica ' or 1=1 -- , però això no va funcionar ja que = està bloquejat.
Jugant amb la càrrega útil ' or 1 -- em va aconseguir User is active, la qual cosa significa que ha tornat cert i allà tenim una injecció sql cega!
True sql
Per confirmar-ho, la càrrega útil ' or 0 -- em va obtenir User not found, el que significa que ha tornat fals
false sql
Després d'una mica de prova, descobrim un filtre que bloqueja <, >, ", union i moltes altres coses
Ara, com que sqlmap no funcionarà aquí, hem de trobar una manera de saltar aquest filtre manualment.
El meu amic Korea va idear una càrrega útil que utilitza Unicode per evitar el filtre
Aquesta càrrega útil intenta extreure el primer nom de la taula de la taula sqlite_master i avalua si el valor Unicode del seu primer caràcter es troba dins de l'interval ASCII (0–127). Vaig utilitzar l'operador BETWEEN en comptes de = ja que estava bloquejat. Com era d'esperar, la condició va retornar vertadera, confirmant que el primer caràcter del nom de la taula es troba dins de l'interval ASCII.
El meu amic 0XMohomiester també va descobrir una altra càrrega útil:
Ara hem d'automatitzar aquesta operació per exfiltrar els noms de les taules Amb l'ajuda de la IA, em va fer un script per extreure totes les taules de la base de dades i va fer un gran treball:
La sortida va ser la següent
Ara hem d'obtenir la bandera de la taula secrets, també podríem especificar els noms de les columnes, però el meu amic va suposar que la bandera estarà a la columna anomenada secret i aquesta hipòtesi era correcta.
El guió final:
I aquí tenim la nostra bandera
ASCWG{VIM_SPILL_SQLI_DRILL}
Etiquetes:

També et pot interessar