03/08/25
InjeccióSQLiexposicióaGit
Camí invisible | ASC Cyber WarGames
Thanks for sharing!
بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ

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ó".


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/
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!
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!
Així que comprovem la confirmació abans d'aquesta utilitzant
git checkout 0a6893d i trobem un fitxer anomenat .config.php.swp que conté algunes credencials
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

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.
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!

Per confirmar-ho, la càrrega útil
' or 0 -- em va obtenir User not found, el que significa que ha tornat fals
Després d'una mica de prova, descobrim un filtre que bloqueja
<, >, ", union i moltes altres cosesAra, 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:

