HackTheBox - RE Write-Up

Solution de la machine "RE" sur HackTheBox

Posté par Matthieu le 4 février 2020

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 !

22 Coeur(s)