Computadores Windows
NOTA: Hay mucho mas de Contenido acerca de Windows en este apartado.
Descubrimiento de equipos con Windows
A traves de LDAP:
ldapsearch -H ldap://192.168.100.2 -x -LLL -W -D "[email protected]" -b "dc=contoso,dc=local" "(objectclass=computer)" "DNSHostName" "OperatingSystem"usando NetBIOS:

Además, un servicio muy popular que escucha en el puerto 445 es SMB, muy utilizado para que las computadoras con Windows se comuniquen entre sí. Puede realizar un escaneo de puertos para descubrir computadoras con Windows e incluso puede aprovechar la negociación de autenticación NTLM para recuperar el nombre de la máquina. Puede realizar un escaneo con el script ntlm-info o nmap smb-os-discovery .

Conexión de computadoras con Windows
Una vez que descubra otras máquinas con Windows, es posible que deba conectarse a ellas para obtener credenciales o datos.
Por lo general, necesitará ejecutar comandos en la máquina remota para realizar sus acciones. Hay algunas opciones para lograr esto.
Conexión con RPC/SMB
La primera y probablemente la más común es usar RPC con SMB . Este es el método utilizado por muchas herramientas conocidas como PsExec y los ejemplos de impacket psexec.py , wmiexec.py y cualquier otro *exec.py.
Estas herramientas generalmente ejecutan comandos usando alguna interfaz RPC y envían/reciben la entrada/salida usando canalizaciones SMB. Normalmente, las herramientas solo requieren el puerto 445 (SMB) abierto para ejecutar comandos, pero algunas como wmiexec.py también necesitarán el puerto 135 (RPC sobre TCP).
Además, es posible que estas herramientas realicen un Pass-The-Hash utilizando el hash NT o LM. Las herramientas de impacket tienen un parámetro para usar el hash NT o LM directamente, mientras que para usarlo con PsExec, debe inyectar el hash NT en la sesión de Windows con mimikatz .

De esta manera, está utilizando NTLM como mecanismo de autenticación, que puede no ser la mejor opción, ya que en Active Directory, Kerberos se usa de forma predeterminada.
Para usar Kerberos, debe proporcionar un ticket de Kerberos a las herramientas mencionadas. En el caso de impacket, puede configurar un archivo ccache para que lo use impacket , mientras que en Windows necesitará inyectar el ticket en la sesión usando mimikatz o Rubeus .
Para obtener un ticket de Kerberos, puede solicitar uno utilizando la contraseña de usuario, el hash de NT (Overpass-the-Hash) o las claves de Kerberos (Pass-The-Key) o simplemente puede robar un ticket de un Máquina Windows o Linux y úsala (Pass-The-Ticket).
Debe tener en cuenta que las máquinas con Windows y Linux (y las herramientas orientadas a ellas) utilizan diferentes formatos de archivo de ticket, por lo que puede tener problemas para mover tickets de Linux a una máquina con Windows o viceversa. Puede convertir las entradas entre los diferentes formatos utilizando ticket_converter o cerbero .

Cuando utilice la autenticación Kerberos, deberá pasar como objetivo a las herramientas el nombre de host (nombre DNS o nombre NetBIOS) de la máquina remota en lugar de su IP. Esto se debe a que la autenticación Kerberos usa el nombre de host para identificar el servicio de la máquina remota y proporcionar el ticket correcto para autenticarse en él.
Si utiliza la dirección IP obtendrá el siguiente error:

Conexión con comunicación remota Powershell
Una alternativa a RPC/SMB para conectarse a una máquina Windows es Powershell Remoting , que le permitirá obtener una sesión de Powershell en la máquina remota. El servicio remoto de Powershell escucha en el puerto 5985 y está habilitado de forma predeterminada en las máquinas con Windows Server.
Puede usar Powershell Remoting desde Windows usando muchos CmdLets y parámetros disponibles en Powershell. Desde una máquina Linux puedes usar evil-winrm .
Además de en el caso de RPC/SMB, puede usar una contraseña, un hash de NT o un ticket de Kerberos para conectarse a la máquina de destino. Con evil-winrm, puedes pasarlos a la aplicación como parámetros o configurar el archivo ccache como en impacket. En el caso de los cmdlets de Powershell, puede usar una contraseña directamente, pero si tiene un ticket de Kerberos o un hash de NT, deberá inyectarlos usando Rubeus o mimikatz .

Conexion con RDP
Un método común para conectarse a una máquina remota en Windows es RDP (Protocolo de escritorio remoto). Puede usar RDP desde una máquina con Windows usando el cliente predeterminado "Conexión de escritorio remoto" ( mstsc ). Desde Linux existen excelentes clientes como rdesktop , freerdp o remmina .
A diferencia de RPC/SMB y Powershell Remoting, RDP transmite la contraseña de usuario sin formato a la computadora de destino para almacenar en caché las credenciales y facilitar el inicio de sesión único (SSO), como si el usuario hubiera iniciado sesión en su máquina física. Debido a esto, para usar RDP, debe usar la contraseña de usuario y no es posible realizar un Pass-The-Hash ... de forma predeterminada.
Como hemos mencionado, cuando se conecta a través de RDP, las credenciales se almacenan en cache en la maquina de destino, susceptibles de ser robadas del proceso lsass con herramientas como mimikatz. Las credenciales se almacenan en caché para poder reutilizarlas en conexiones de red desde la máquina de destino, pero a veces esto no es necesario, por lo que en Windows 8.1/2012 R2, Microsoft introdujo el modo de administración restringida para RPD . Cuando el modo de administración restringida está habilitado, no envía las credenciales simples, por lo que es posible realizar Pass-The-Hash/Key/Ticket para establecer una conexión RDP.
Desde Linux, puede usar freerdp para realizar un Pass-The-Hash con RDP (necesita instalar los freerdp2-x11 freerdp2-shadow-x11paquetes en lugar de freerdp-x11como dice el artículo). Solo necesita proporcionar el hash NT en lugar de la contraseña.
Por otro lado, desde Windows se puede inyectar un hash NT o un ticket Kerberos con mimikatz o Rubeus y luego utilizar mstsc.exe /restrictedadmin para establecer una conexión RDP sin requerir la contraseña del usuario.

si el equipo no tiene habilitado esta cadena de registro y tienes ejecucion de codigo remoto usar:
Credenciales de Computadoras con Windows
Credenciales LSASS
En una máquina con Windows, un lugar común para encontrar credenciales es el proceso LSASS (Servicio de subsistema de autoridad de seguridad local) ( lsass.exe ). El proceso LSASS se encarga de administrar las operaciones relacionadas con la seguridad de la computadora, incluida la autenticación de usuarios.
Cuando un usuario realiza un inicio de sesión interactivo en la computadora, accediendo físicamente a la computadora o a través de RDP, las credenciales del usuario se almacenan en caché en el proceso LSASS para usar SSO (inicio de sesión único) cuando se requiere inicio de sesión de red para acceder a otros equipos de dominio.
NOTA : Tenga en cuenta que los usuarios autenticados mediante NTLM o Kerberos no permitirán que las credenciales se almacenen en caché en la computadora (excepto si la delegación de Kerberos está habilitada)
La forma común de extraer las credenciales del proceso LSASS es utilizando mimikatz. Podemos iniciar mimikatz directamente en la máquina de destino, o volcar la memoria LSASS con alguna herramienta como procdump, comsvcs.dll o werfault.exe y luego procesar el volcado de memoria generado con mimikatz o pypikatz. También es posible utilizar lsassy para leer un volcado de forma remota evitando tener que descargar todo el volcado de memoria, que puede ocupar varios megabytes.
Para extraer credenciales con mimikatz, hay algunos comandos que debe conocer. Volverán a intentar diferentes secretos de los usuarios registrados:
• sekurlsa::logonpasswords : Extrae los hashes y las contraseñas de NT.
• sekurlsa::ekeys: Obtiene las claves de Kerberos.
• sekurlsa::tickets: Recupera los tickets de Kerberos almacenados en la máquina.
Específicamente, para acceder a la memoria de procesos de LSASS, necesita SeDebugPrivilege, que permite al usuario depurar procesos de otros usuarios. Por lo general, solo los administradores tienen este privilegio (pero si otro usuario obtiene este privilegio, puede convertirse en administrador).
Además, SeDebugPrivilege debe estar habilitado en el proceso que intenta volcar la memoria LSASS. Por defecto está habilitado en Powershell y deshabilitado en CMD (y por lo tanto en sus procesos secundarios). Si está iniciando mimikatz, puede verificar usando el privilege::debug comando. En otro caso, puede iniciar el proceso con Powershell usando powershell.exe <command>, o usando alguna herramienta como sepriv para habilitarlo en CMD.
No obstante, debe tener en cuenta que LSASS puede protegerse contra la extracción de credenciales. Esto podría lograrse mediante Credential Guard , que utiliza la tecnología de hipervisor para almacenar las credenciales en un lugar más seguro fuera del sistema operativo. Sin embargo, se puede omitir Credential Guard .
Además, lsass.exe se puede configurar para ejecutarse como PPL (Protected Process Light). Incluso si esto dificulta la extracción de credenciales, se puede deshabilitar .
Credenciales de registro
Otra ubicación para encontrar credenciales es el registro. En el registro, la computadora almacena algunas credenciales requeridas para funcionar correctamente. Uno de los lugares donde se almacenan las credenciales sensibles es en los secretos de LSA .
Los secretos de LSA son un almacenamiento especial ubicado en el registro que se utiliza para guardar datos sensibles a los que solo se puede acceder desde la SYSTEMcuenta local. En el disco, los secretos de LSA se guardan en el archivo de subárbol de SEGURIDAD , que está encriptado con BootKey/SysKey (almacenado en el archivo de subárbol de SISTEMA).

En los secretos de LSA puedes encontrar:
Cuenta de equipo de dominio: Para poder trabajar como parte del dominio, la computadora necesita una cuenta de usuario en el dominio. Por lo tanto, el nombre de usuario y la contraseña de esta cuenta de computadora deben estar disponibles para el sistema operativo, por lo que se almacenan en los secretos de LSA. Además, tienes que saber que la contraseña del ordenador se cambia cada 30 días por defecto . Esta cuenta de computadora es utilizada por la
SYSTEMcuenta local para interactuar con el dominio, pero no localmente, por lo tanto, esta cuenta no tiene privilegios administrativos en la máquina. Sin embargo, incluso si la cuenta de dominio de la computadora no tiene privilegios administrativos, puede usarla para crear un Silver Ticket o realizar un ataque RBCD para obtener acceso a la máquina como administrador.Passwords de los usuarios del servicio: Para ejecutar servicios en nombre de un usuario, la computadora necesita almacenar su contraseña. Sin embargo, no se almacena el usuario de la contraseña, sino el nombre del servicio, por lo que es posible que deba investigar cuál es el nombre de usuario.
Password de inicio de sesion automatico: Si el inicio de sesión automático de Windows está habilitado , la contraseña se puede almacenar en los secretos de LSA. La otra alternativa es que se guarde en
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogonclave de registro bajo la claveDefaulUserName. El dominio y el nombre de usuario siempre se almacenan enDefaultDomainNameyDefaultUserName, respectivamente.Claves maestras DPAPI: La API de protección de datos (DPAPI) se utiliza para permitir a los usuarios cifrar datos confidenciales sin necesidad de preocuparse por las claves criptográficas. Si puede recuperar las claves maestras, puede descifrar los datos de los usuarios.
Además, en el archivo Hive de SEGURIDAD, también se almacenan las credenciales de los últimos usuarios del dominio que iniciaron sesión en la máquina , conocidas como Credenciales en caché del dominio (DCC). Por lo tanto, la computadora puede autenticar al usuario del dominio incluso si se pierde la conexión con los controladores de dominio. Estas credenciales almacenadas en caché son hashes MSCACHEV2/MSCASH, diferentes de los hashes NT, por lo que no se pueden usar para realizar un Pass-The-Hash, pero aún puede intentar descifrarlos para recuperar la contraseña del usuario.
Y el otro lugar donde hay credenciales es el archivo Hive SAM , que contiene los hashes NT de los usuarios locales de la computadora. Esto podría ser útil ya que a veces las organizaciones establecen la misma contraseña de administrador local en las computadoras del dominio.
Volcados de credenciales de registro:
Para obtener las credenciales de las colmenas SECURITY y SAM, puede leerlas de memoria usando mimikatz.
Primero deberá ejecutar token::elevatepara adquirir una SYSTEMsesión, que le permita leer las credenciales. Ejecute también privilege::debugsi es necesario para habilitar SeDebugPrivilege.
Luego, puede ejecutar los siguientes comandos que recuperarán las diferentes credenciales:
lsadump::secrets: Obtenga los secretos de LSA.lsadump::cache: recupere los inicios de sesión de dominio almacenados en caché.lsadump::sam: Obtener las credenciales de la cuenta local.
Una alternativa es guardar una copia de los archivos de Hive con el comando reg save , moverlos a nuestra máquina y, finalmente, obtener el contenido con impacket secretsdump script o mimikatz.
Primero necesita volcar las colmenas de registro. Necesitará los archivos de subárbol SECURITY y SAM y también el subárbol SYSTEM, ya que contiene la clave de arranque del sistema (o clave del sistema) que permite descifrar los subárboles SECURITY y SAM.

Una vez que se guardaron las colmenas, muévase a su máquina local y descárguelas con secretsdump:

La Dumping cached domain logon informationsección contiene las credenciales almacenadas en caché del dominio. Para descifrarlos , debe guardarlos en formato $DCC2$10240#username#hash, luego puede usar hashcat .
La sección $MACHINE.ACCcontiene la contraseña de la cuenta de la computadora (codificada en hexadecimal), así como el hash NT.
La sección DefaultPasswordcontiene la contraseña de inicio de sesión automático. Para obtener el dominio y el nombre de usuario, debe verificar las entradas DefaultDomainNamey DefaultUserNamede la HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogonclave de registro.
La DPAPI_SYSTEMsección contiene las claves maestras DPAPI del sistema. Estas claves permiten descifrar los archivos del usuario .
Nos NK$LMdan la clave utilizada para cifrar las Credenciales en caché del dominio , pero dado que secretsdump ya las descifra, es solo con fines informativos.
Finalmente, las entradas con formato _SC_<service>son las que indican la contraseña de los usuarios que están ejecutando los servicios. En este caso, el mysqlservicio. No sabemos el nombre de usuario del usuario del servicio, pero podemos verificarlo en la computadora.
Powershell History
Además del proceso y el registro de LSASS, también puede buscar credenciales en otros lugares, como el historial de usuarios de Powershell. Puede usar los siguientes comandos para ubicar y leer el historial de Powershell.
Obtenga la ruta del historial de Powershell de los usuarios actuales.
Verifique el historial de Powershell de todos los usuarios
Además, como sugerencia, es posible que desee utilizar el siguiente comando para evitar almacenar sus propios comandos en el historial de Powershell.
Otros lugares para encontrar credenciales en Windows
Además, también puede buscar credenciales en scripts o archivos de configuración ubicados en la computadora. También hay una gran cantidad de software como navegadores que almacenan credenciales que podrían ser útiles en un pentest, para consultar una buena lista de software que almacena sus credenciales, puede consultar el proyecto LaZagne .
Alternativamente, en un compromiso de pentest o equipo rojo, también podría usar otras técnicas para obtener credenciales como registradores de pulsaciones de teclas o módulos SSP falsos.
Last updated