# 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
```

- 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
```

- 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()
~~~

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)
```



### 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)
```


### Get domain SID for the current domain
```
Get-DomainSID (P)
(Get-ADDomain).DomainSID (M)
```


### Get domain policy for the current domain
~~~
Get-DomainPolicy
(Get-DomainPolicy)."system access"
~~~


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
~~~


### Get domain controllers for another domain
~~~
Get-NetDomainController -Domain moneycorp.local (P)
Get-ADDomainController -DomainName moneycorp.local - Discover (M)
~~~

### 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)
~~~






### 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


### 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
~~~
