# 0. Domain Enumeration Part 1 - En alcance: 172.16.1.0/24 - 172.16.17.0/24 - Enumera todos los comandos en la sesion actual ``` Get-Command -CommandType cmdlet ``` ![](https://i.imgur.com/iOwUGyx.png) - Politica de ejecución(Execution Policy) Cuando se intenta ejecutar scripts de powershell, es posible que obtenga un error que indica que se está ejecutando scripts ha sido deshabilitado. Esto no es una medida de seguridad, esto solo existe para evitar que el usuario ejecute scripts accidentalmente. Hay varias formas de bypassear esto, y no se necesitan privilegios de administrador. - Powershell script Execution iex es un alias para invocar una expresion - ``` whoami /priv ``` ![](https://i.imgur.com/2Ht3Y0F.png) - Let's start with Domain Enumeration and map various entities, trusts, relationships and privileges for the target domain. - The enumeration can be done by using Native executables and .NET classes: ~~~ $ADClass = [System.DirectoryServices.ActiveDirectory.Domain] $ADClass::GetCurrentDomain() ~~~ ![](https://i.imgur.com/TUEvUCg.png) Forest: moneycorp.local Domain: dollarcorp.moneycorp.local Solo se está bajo un nicel del bosque. Padre: moneycorp.local Solo hay 1 controlador de dominio DomainControllers: dcorp-dc.dollarcorp.moneycorp.local Al ver el `Domain` y `Parent` vemos que solo estamos un nivel por debajo. Dos herramientas a tener en cuenta para la enumeración del AD: * Modulo de Microsoft para AD * PowerView Tener en cuenta que cuando nos encontramos en `RestrictedLenguage` el módulo de Microsoft aún es factible de usar. ### Get current domain Vamos a cargar PowerView, para ello tener en cuenta que, en este caso el directorio está fuera del alcance de Windows Defender, por lo que las herramientas no se detectarán en el disco, pero a veces cuando se carga el script, es posible que se detecte. Asi que en caso se deba bypassear, ver un comando que se comparte mas adelante. ``` Get-NetDomain (PowerView) Get-ADDomain (AD Module) ``` ![](https://i.imgur.com/F1KzYPG.png) ![](https://i.imgur.com/3p5P4ag.png) ![](https://i.imgur.com/JnBYYQW.png) ### Get object of another domain Se puede enumerar un dominio con el que exista confianza, en este caso se enumera al dominio padre: ``` Get-NetDomain -Domain moneycorp.local (P) Get-ADDomain -Identity moneycorp.local (M) ``` ![](https://i.imgur.com/s760XfQ.png) ![](https://i.imgur.com/2xuUoO2.png) ### Get domain SID for the current domain ``` Get-DomainSID (P) (Get-ADDomain).DomainSID (M) ``` ![](https://i.imgur.com/CYx9xpo.png) ![](https://i.imgur.com/2xuUoO2.png) ### Get domain policy for the current domain ~~~ Get-DomainPolicy (Get-DomainPolicy)."system access" ~~~ ![](https://i.imgur.com/pVntOqh.png) ![](https://i.imgur.com/RYDZtdG.png) Obs:Existen herramientas de detección, donde si MaxTicketAge o MaxRenewAge es mayor que la política de dominio entonces hay mayores posibilidades de detección. ### Get domain policy for another domain ~~~ (Get-DomainPolicy -domain moneycorp.local)."system access" ~~~ ### Get domain controllers for the current domain Para conocer información como la IP del dominio actual o dominio padre ~~~ Get-NetDomainController Get-ADDomainController ~~~ ![](https://i.imgur.com/iBTdthu.png) ![](https://i.imgur.com/OCrJuDT.png) ### Get domain controllers for another domain ~~~ Get-NetDomainController -Domain moneycorp.local (P) Get-ADDomainController -DomainName moneycorp.local - Discover (M) ~~~ ![](https://i.imgur.com/3WJSW3f.png) ### Get a list of users in the current domain ~~~ Get-NetUser (P) Get-NetUser -Username student1 (P) Get-ADUser -Filter * -Properties * (M) Get-ADUser -Identity student1 -Properties * (M) ~~~ ![](https://i.imgur.com/YQ1NDAD.png) ![](https://i.imgur.com/WQGOReI.png) ![](https://i.imgur.com/WOK8lZX.png) ![](https://i.imgur.com/ZnpjXpT.png) ![](https://i.imgur.com/LeZGGKI.png) ![](https://i.imgur.com/GdWzNcv.png) ### Get list of all properties for users in the current domain ``` Get-UserProperty (P) Get-UserProperty -Properties pwdlastset (P) Get-UserProperty -Properties logoncount (P) Get-ADUser -Filter * -Properties * | select -First | Get-Member - MemberType *Property | select Name (M) Get-ADUser -Filter * -Properties * | select name,@{expression {[datetime]::fromFileTime($_.pwdlastset)}} (M) ``` Muestra todas las propiedades de los usuarios ![](https://i.imgur.com/oYB5hRv.png) ![](https://i.imgur.com/4VJSNFj.png) ### Search for a particular string in a user's attributes: ~~~ Find-UserField -SearchField Description -SearchTerm "built" Get-ADUser -Filter 'Description -like "*built*"' - Properties Description | select name,Description ~~~ ![](https://i.imgur.com/ty4Du5K.png)