Cette semaine RE a été retirée des machines actives de HackTheBox, voyons ensemble comment résoudre cette machine.
Sommaire
- Scan
- Obtention d'un reverse-shell
- Vulnérabilité WinRar
- Obtention d'un shell Administrateur
- Conclusion
Scan
Dans un premier temps, il est essentiel de faire un scan de port de la machine cible avant de visualiser notre surface d'attaque :
Pour ce faire, je lance ces scans :
nmap -sC -sV -T5 10.10.10.144
nmap -p- -T5 10.10.10.144
Ces deux commandes permettent de couvrir l'ensemble des ports TCP de la machine.
1er resultat :
root@kali:~/HTB/RE# nmap -sC -sV -T5 10.10.10.144 Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-04 08:54 CET Nmap scan report for 10.10.10.144 Host is up (0.11s latency). Not shown: 998 filtered ports PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 | http-methods: |_ Potentially risky methods: TRACE |_http-server-header: Microsoft-IIS/10.0 |_http-title: Visit reblog.htb 445/tcp open microsoft-ds? Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: |_clock-skew: 1h01m59: | smb2-security-mode: | 2.02: |_ Message signing enabled but not required | smb2-time: | date: 2020-02-04T08:57:00 |_ start_date: N/A Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 62.55 seconds
Second resultat :
root@kali:~/HTB/RE# nmap -p- -T5 10.10.10.144 Starting Nmap 7.80 ( https://nmap.org ) at 2020-02-04 08:54 CET Nmap scan report for 10.10.10.144 Host is up (0.11s latency). Not shown: 65533 filtered ports PORT STATE SERVICE 80/tcp open http 445/tcp open microsoft-ds Nmap done: 1 IP address (1 host up) scanned in 205.93 seconds
Nous avons donc uniquement deux services a notre portée, commençons par les regarder.
80 - IIS
D'après la version du serveur IIS (10.0), nous avons à faire à un windows 10 ou Server 2016/2019.
Quand nous vistons le site via l'ip, un message nous redirige immédiatement vers reblog.htb
... Ajoutons cette entrée dans /etc/hosts
.
reblog.htb :

Le site est un blog, généré par Jekyll, parlant essentiellement de malware. Cette box étant sortie en même temps que Ghidra (Désassembleur proposé par la NSA), il est intéressant de garder cette information en tête.
Parmis les articles, deux sont intéressants :
- Le premier parle de phishing via macro ODS (équivalent XLS).
- Le dernier article nous indique que le SOC a mis en place des règles Yara permettant de détecter les tentatives de phishing via des macros générées par Metasploit. Il nous informe aussi qu'un "malware dropbox" a été mis en place afin que l'on y dépose des échantillons...
445 - SMB
Afin d'énumérer les partages SMB, j'utilise l'outil smbclient :
root@kali:~/HTB/RE# smbclient -L 10.10.10.144
Enter WORKGROUP\root's password:
Sharename Type Comment
--------- ---- -------
IPC$ IPC Remote IPC
malware_dropbox Disk
SMB1 disabled -- no workgroup available
On y retrouve bien notre "malware_dropbox".
Obtention d'un reverse-shell
Le plan d'attaque est maintenant tracé. Il nous faut créer une macro pour fichier ODS qui passe au travers de leurs règles de détection puis le pousser sur leur partage prévu à cet usage...
Pour ce faire, utilisons LibreOffice. Les fichiers ODS sont des tableaux (similaires à Excel). On choisit donc LibreOffice Calc puis Tools, Macro, Organize Macros ...

On clique maintenant sur le document sur lequel nous travaillons (Untitled-1 pour moi), puis "new".
Le blog nous a mis au courant de l'existance de règles Yara, nous allons donc obfusquer au minima notre macro. Pour ma part, j'ai opté pour une approche en deux temps :
- Téléchargement de nc.exe
- Execution de nc.exe
Voici donc la macro :

Il nous faut maintenant l'ajouter à un événement, j'ai choisi OpenDocument :

Il ne nous reste plus qu'à sauvegarder notre document et essayer de le pousser sur le partage, sans oublier de mettre nos listeners :

Bingo ! Nous avons notre shell en tant que Luke ce qui nous permet de récupérer notre flag user.
Vulnérabilité WinRar
En énumérant les dossiers et fichiers de Luke, on tombe sur ce script Powershell :
$process_dir = "C:\Users\luke\Documents\malware_process"
$files_to_analyze = "C:\Users\luke\Documents\ods"
$yara = "C:\Users\luke\Documents\yara64.exe"
$rule = "C:\Users\luke\Documents\ods.yara"
while($true) {
# Get new samples
move C:\Users\luke\Documents\malware_dropbox\* $process_dir
# copy each ods to zip file
Get-ChildItem $process_dir -Filter *.ods |
Copy-Item -Destination {$_.fullname -replace ".ods", ".zip"}
Get-ChildItem $process_dir -Filter *.zip | ForEach-Object {
# unzip archive to get access to content
$unzipdir = Join-Path $_.directory $_.Basename
New-Item -Force -ItemType directory -Path $unzipdir | Out-Null
Expand-Archive $_.fullname -Force -ErrorAction SilentlyContinue -DestinationPath $unzipdir
# yara to look for known malware
$yara_out = & $yara -r $rule $unzipdir
$ods_name = $_.fullname -replace ".zip", ".ods"
if ($yara_out.length -gt 0) {
Remove-Item $ods_name
}
}
# if any ods files left, make sure they launch, and then archive:
$files = ls $process_dir\*.ods
if ( $files.length -gt 0) {
# launch ods files
Invoke-Item "C:\Users\luke\Documents\malware_process\*.ods"
Start-Sleep -s 5
# kill open office, sleep
Stop-Process -Name soffice*
Start-Sleep -s 5
#& 'C:\Program Files (x86)\WinRAR\Rar.exe' a -ep $process_dir\temp.rar $process_dir\*.ods 2>&1 | Out-Null
Compress-Archive -Path "$process_dir\*.ods" -DestinationPath "$process_dir\temp.zip"
$hash = (Get-FileHash -Algorithm MD5 $process_dir\temp.zip).hash
# Upstream processing may expect rars. Rename to .rar
Move-Item -Force -Path $process_dir\temp.zip -Destination $files_to_analyze\$hash.rar
}
Remove-Item -Recurse -force -Path $process_dir\*
Start-Sleep -s 5
}
Ce script traite les fichiers envoyés en les ouvrant dans LibreOffice, puis compresse le fichier et l'envoie dans le dossier ods.
En regardant les commentaires du script on devine que le script utilise WinRar, une vulnérabilité existe sur WinRar et sa manière de procéder avec les fichier ACE. Plus de lecture disponible ici.
Nous pouvons utiliser ce script pour générer notre archive piégée.
# python3 evilWinRAR.py -o exploit.ace -e shell.aspx -g test.txt -p 'c:\inetpub\wwwroot\re'
Testons maintenant notre archive ...

Le fichier a disparu, si l'exploit a fonctionné nous devrions avoir un webshell ...

Et nous voila maintenant avec les droits iis apppool\re
.
Obtention d'un shell Administrateur
Maintenant que nous avons un shell en tant que compte de service, essayons de lancer PowerUP afin d'énumérer nos droits.

Invoke-AllChecks
nous rapporte un service dont on peut modifier le BinPath
, essayons de l'utiliser afin d'avoir notre shell final ...
Voici notre shell nt authority\system

Maintenant qu'on crie victoire on se rend compte que le fichier root.txt est chiffré ...

Dans ce cas là, deux solutions s'offrent à nous :
- Récupérer un accès en tant que Coby ou Administrator.
- Déchiffrer le fichier avec mimikatz.
Pour des raisons pratiques, nous allons opter pour la première option qui est la plus simple ...
Récupérer un accès en tant que Coby ou Administrator
Afin de modifier nos droits, nous pouvons utiliser le module Incognito de Meterpreter :

Voila ! Il ne nous reste plus qu'à récuperer le flag root.txt.

La box est désormais finie !
Conclusion
On en a maintenant terminé avec ce premier article "Write-Up HackTheBox". En fonction des retours, je continuerai peut-être de proposer ce genre de contenu sur le blog. Cette box était classée difficile, à juste titre je trouve, puisque certaines étapes demandent un petit peu de réflexion...
Je dois aussi souligner que cette élévation de privilège avec le service était une manière alternative de finir la machine et que la manière attendue est nettement plus complexe (XXE sur Ghidra).
Happy hacking !
51 Coeur(s)