Los servidores de Windows se pueden administrar localmente mediante las tareas de administración del Administrador del servidor en servidores remotos.
Introducción
La administración remota está habilitada de forma predeterminada a partir de Windows Server 2016. La administración remota es un componente de las funciones de administración de hardware de Windows que administran el hardware del servidor de forma local y remota. Estas características incluyen un servicio que implementa el protocolo WS-Management, diagnóstico y control de hardware a través de controladores de administración de placa base, y una API COM y objetos de script que nos permiten escribir aplicaciones que se comunican de forma remota a través del protocolo WS-Management.
Los principales componentes utilizados para la gestión remota de Windows y servidores Windows son los siguientes:
El Remote Desktop Protocol ( RDP) es un protocolo desarrollado por Microsoft para el acceso remoto a una computadora que ejecuta el sistema operativo Windows. Este protocolo permite que los comandos de visualización y control se transmitan a través de la GUI cifrada a través de redes IP. RDP funciona en la capa de aplicación en el modelo de referencia TCP/IP y normalmente utiliza el puerto TCP 3389 como protocolo de transporte. Sin embargo, el protocolo UDP sin conexión puede utilizar el puerto 3389 también para la administración remota.
Para que se establezca una sesión RDP, tanto el firewall de la red como el firewall del servidor deben permitir conexiones desde el exterior. Si se utiliza la Network Address Translation (NAT) en la ruta entre el cliente y el servidor, como suele ser el caso con las conexiones a Internet, la computadora remota necesita la dirección IP pública para llegar al servidor. Además, en el enrutador NAT se debe configurar el reenvío de puertos en dirección al servidor.
RDP se encarga de la seguridad de la capa de transporte ( TLS/SSL) desde Windows Vista, lo que significa que todos los datos, y especialmente el proceso de inicio de sesión, están protegidos en la red gracias a su buen cifrado. Sin embargo, muchos sistemas Windows no insisten en esto y aun así aceptan un cifrado inadecuado a través de RDP Security . Sin embargo, incluso con esto, un atacante todavía está lejos de ser bloqueado porque los certificados que proporcionan identidad están simplemente autofirmados de forma predeterminada. Esto significa que el cliente no puede distinguir un certificado genuino de uno falsificado y genera una advertencia de certificado para el usuario.
El servicio Remote Desktop se instala de forma predeterminada en servidores Windows y no requiere aplicaciones externas adicionales. Este servicio se puede activar usando Server Manager y viene con la configuración predeterminada para permitir conexiones al servicio solo a hosts con autenticación a nivel de red ( NLA).
Escanear el servicio RDP puede brindarnos rápidamente mucha información sobre el host. Por ejemplo, podemos determinar si NLA está habilitado en el servidor o no, la versión del producto y el nombre de host.
Nmap
afsh4ck$nmap-sV-sC10.129.201.248-p3389--scriptrdp*StartingNmap7.92 ( https://nmap.org ) at 2021-11-06 15:45 CETNmapscanreportfor10.129.201.248Hostisup (0.036s latency).PORTSTATESERVICEVERSION3389/tcpopenms-wbt-serverMicrosoftTerminalServices|rdp-enum-encryption:|Securitylayer|CredSSP (NLA): SUCCESS|CredSSPwithEarlyUserAuth:SUCCESS|_RDSTLS:SUCCESS|rdp-ntlm-info:|Target_Name:ILF-SQL-01|NetBIOS_Domain_Name:ILF-SQL-01|NetBIOS_Computer_Name:ILF-SQL-01|DNS_Domain_Name:ILF-SQL-01|DNS_Computer_Name:ILF-SQL-01|Product_Version:10.0.17763|_System_Time:2021-11-06T13:46:00+00:00ServiceInfo:OS:Windows; CPE:cpe:/o:microsoft:windowsServicedetectionperformed.Pleasereportanyincorrectresultsathttps://nmap.org/submit/.Nmapdone:1IPaddress (1 hostup) scanned in 8.26 seconds
Además, podemos utilizarlo --packet-trace para rastrear los paquetes individuales e inspeccionar su contenido manualmente. Podemos ver que el RDP cookies( mstshash=nmap) utilizado por Nmap para interactuar con el servidor RDP puede ser identificado por varios antivirus y servicios de seguridad como Endpoint Detection and Response (EDR), y puede bloquearnos como pentesters en redes reforzadas.
afsh4ck$nmap-sV-sC10.129.201.248-p3389--packet-trace--disable-arp-ping-nStartingNmap7.92 ( https://nmap.org ) at 2021-11-06 16:23 CETSENT (0.2506s) ICMP [10.10.14.20 > 10.129.201.248 Echo request (type=8/code=0) id=8338 seq=0] IP [ttl=53 id=5122 iplen=28 ]
SENT (0.2507s) TCP 10.10.14.20:55516 > 10.129.201.248:443 S ttl=42 id=24195 iplen=44 seq=1926233369 win=1024 <mss 1460>
SENT (0.2507s) TCP 10.10.14.20:55516 > 10.129.201.248:80 A ttl=55 id=50395 iplen=40 seq=0 win=1024SENT (0.2517s) ICMP [10.10.14.20 > 10.129.201.248 Timestamp request (type=13/code=0) id=8247 seq=0 orig=0 recv=0 trans=0] IP [ttl=38 id=62695 iplen=40 ]
RCVD (0.2814s) ICMP [10.129.201.248 > 10.10.14.20 Echo reply (type=0/code=0) id=8338 seq=0] IP [ttl=127 id=38158 iplen=28 ]
SENT (0.3264s) TCP 10.10.14.20:55772 > 10.129.201.248:3389 S ttl=56 id=274 iplen=44 seq=2635590698 win=1024 <mss 1460>RCVD (0.3565s) TCP 10.129.201.248:3389 > 10.10.14.20:55772 SA ttl=127 id=38162 iplen=44 seq=3526777417 win=64000 <mss 1357>
NSOCKINFO [0.4500s] nsock_iod_new2(): nsock_iod_new (IOD#1)NSOCKINFO [0.4500s] nsock_connect_tcp(): TCP connection requested to 10.129.201.248:3389 (IOD#1) EID 8NSOCKINFO [0.4820s] nsock_trace_handler_callback(): Callback: CONNECT SUCCESS for EID 8 [10.129.201.248:3389]ServicescansendingprobeNULLto10.129.201.248:3389 (tcp)NSOCKINFO [0.4830s] nsock_read(): Read request from IOD #1 [10.129.201.248:3389] (timeout: 6000ms) EID 18NSOCKINFO [6.4880s] nsock_trace_handler_callback(): Callback: READ TIMEOUT for EID 18 [10.129.201.248:3389]ServicescansendingprobeTerminalServerCookieto10.129.201.248:3389 (tcp)NSOCKINFO [6.4880s] nsock_write(): Write request for42 bytes to IOD #1 EID 27 [10.129.201.248:3389]NSOCKINFO [6.4880s] nsock_read(): Read request from IOD #1 [10.129.201.248:3389] (timeout: 5000ms) EID 34NSOCKINFO [6.4880s] nsock_trace_handler_callback(): Callback: WRITE SUCCESS for EID 27 [10.129.201.248:3389]NSOCK INFO [6.5240s] nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 34 [10.129.201.248:3389] (19 bytes): .........4.........
Service scan match (Probe TerminalServerCookie matched with TerminalServerCookie line 13640): 10.129.201.248:3389 is ms-wbt-server. Version: |Microsoft Terminal Services|||
...SNIP...NSOCKINFO [6.5610s] nsock_write(): Write request for54 bytes to IOD #1 EID 27 [10.129.201.248:3389]NSE: TCP 10.10.14.20:36630 > 10.129.201.248:3389 | 00000000: 03 00 00 2a 25 e0 00 00 00 00 00 43 6f 6f 6b 69 *% Cooki
00000010:653a206d737473686173683d6e6d6170e:mstshash=nmap00000020:0d0a010008000b000000...SNIP...NSOCKINFO [6.6820s] nsock_write(): Write request for57 bytes to IOD #2 EID 67 [10.129.201.248:3389]NSOCKINFO [6.6820s] nsock_trace_handler_callback(): Callback: WRITE SUCCESS for EID 67 [10.129.201.248:3389]NSE:TCP10.10.14.20:36630>10.129.201.248:3389|SENDNSOCKINFO [6.6820s] nsock_read(): Read request from IOD #2 [10.129.201.248:3389] (timeout: 5000ms) EID 74NSOCK INFO [6.7180s] nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 74 [10.129.201.248:3389] (211 bytes)
NSE:TCP10.10.14.20:36630<10.129.201.248:3389|00000000:3081d0a003020106a181c83081c5308100000000010:c2a081bf0481bc4e544c4d5353500002NTLMSSP00000020:000000140014003800000035828ae2b98500000030:73b0b3919f1b0d000000000000000070sp00000040:0070004c0000000a0063450000000f49pLcEI00000050:004c0046002d00530051004c002d0030LF-SQL-000000060:0031000200140049004c0046002d00531ILF-S00000070:0051004c002d00300031000100140049QL-01I00000080:004c0046002d00530051004c002d0030LF-SQL-000000090:0031000400140049004c0046002d00531ILF-S000000a0:0051004c002d00300031000300140049QL-01I000000b0:004c0046002d00530051004c002d0030LF-SQL-0000000c0:003100070008001db3e8f219d3d701001000000d0:000000...SNIP...
Cisco CX Security Labs también desarrolló un script Perl llamado rdp-sec-check.pl que puede identificar de forma no auténtica la configuración de seguridad de los servidores RDP en función de los handshakes.
afsh4ck$gitclonehttps://github.com/CiscoCXSecurity/rdp-sec-check.git&&cdrdp-sec-checkafsh4ck$./rdp-sec-check.pl10.129.201.248Starting rdp-sec-check v0.9-beta ( http://labs.portcullis.co.uk/application/rdp-sec-check/ ) at Sun Nov 7 16:50:32 2021
[+] Scanning 1 hostsTarget:10.129.201.248IP:10.129.201.248Port:3389[+] Checking supported protocols[-] Checking ifRDPSecurity (PROTOCOL_RDP) is supported...Not supported - HYBRID_REQUIRED_BY_SERVER[-] Checking ifTLSSecurity (PROTOCOL_SSL) is supported...Not supported - HYBRID_REQUIRED_BY_SERVER[-] Checking ifCredSSPSecurity (PROTOCOL_HYBRID) is supported [uses NLA]...Supported[+] Checking RDP Security Layer[-] Checking RDP Security Layer with encryption ENCRYPTION_METHOD_NONE...Not supported[-] Checking RDP Security Layer with encryption ENCRYPTION_METHOD_40BIT...Not supported[-] Checking RDP Security Layer with encryption ENCRYPTION_METHOD_128BIT...Not supported[-] Checking RDP Security Layer with encryption ENCRYPTION_METHOD_56BIT...Not supported[-] Checking RDP Security Layer with encryption ENCRYPTION_METHOD_FIPS...Not supported[+] Summary of protocol support[-] 10.129.201.248:3389 supports PROTOCOL_SSL : FALSE[-] 10.129.201.248:3389 supports PROTOCOL_HYBRID: TRUE[-] 10.129.201.248:3389 supports PROTOCOL_RDP : FALSE[+] Summary of RDP encryption support[-] 10.129.201.248:3389 supports ENCRYPTION_METHOD_NONE : FALSE[-] 10.129.201.248:3389 supports ENCRYPTION_METHOD_40BIT : FALSE[-] 10.129.201.248:3389 supports ENCRYPTION_METHOD_128BIT : FALSE[-] 10.129.201.248:3389 supports ENCRYPTION_METHOD_56BIT : FALSE[-] 10.129.201.248:3389 supports ENCRYPTION_METHOD_FIPS : FALSE[+] Summary of security issuesrdp-sec-checkv0.9-betacompletedatSunNov716:50:332021
La autenticación y la conexión a dichos servidores RDP se pueden realizar de varias maneras. Por ejemplo, podemos conectarnos a servidores RDP en Linux usando xfreerdp, rdesktop o Remmina e interactuar con la GUI del servidor en consecuencia.
Iniciar una sesión RDP
afsh4ck$xfreerdp/u:cry0l1t3/p:"P455w0rd!"/v:10.129.201.248[16:37:47:135] [95319:95320] [INFO][com.freerdp.core] - freerdp_connect:freerdp_set_last_error_ex resetting error state[16:37:47:135] [95319:95320] [INFO][com.freerdp.client.common.cmdline] - loading channelEx rdpdr[16:37:47:135] [95319:95320] [INFO][com.freerdp.client.common.cmdline] - loading channelEx rdpsnd[16:37:47:135] [95319:95320] [INFO][com.freerdp.client.common.cmdline] - loading channelEx cliprdr[16:37:47:447] [95319:95320] [INFO][com.freerdp.primitives] - primitives autodetect, using optimized[16:37:47:453] [95319:95320] [INFO][com.freerdp.core] - freerdp_tcp_is_hostname_resolvable:freerdp_set_last_error_ex resetting error state
[16:37:47:453] [95319:95320] [INFO][com.freerdp.core] - freerdp_tcp_connect:freerdp_set_last_error_ex resetting error state
[16:37:47:523] [95319:95320] [INFO][com.freerdp.crypto] - creating directory /home/cry0l1t3/.config/freerdp[16:37:47:523] [95319:95320] [INFO][com.freerdp.crypto] - creating directory [/home/cry0l1t3/.config/freerdp/certs][16:37:47:523] [95319:95320] [INFO][com.freerdp.crypto] - created directory [/home/cry0l1t3/.config/freerdp/server][16:37:47:599] [95319:95320] [WARN][com.freerdp.crypto] - Certificate verification failure 'self signed certificate (18)' at stack position 0
[16:37:47:599] [95319:95320] [WARN][com.freerdp.crypto] - CN = ILF-SQL-01[16:37:47:600] [95319:95320] [ERROR][com.freerdp.crypto] - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[16:37:47:600] [95319:95320] [ERROR][com.freerdp.crypto] - @ WARNING: CERTIFICATE NAME MISMATCH!@[16:37:47:600] [95319:95320] [ERROR][com.freerdp.crypto] - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[16:37:47:600] [95319:95320] [ERROR][com.freerdp.crypto] - The hostname used for this connection (10.129.201.248:3389) [16:37:47:600] [95319:95320] [ERROR][com.freerdp.crypto] - does not match the name given in the certificate:[16:37:47:600] [95319:95320] [ERROR][com.freerdp.crypto] - Common Name (CN):[16:37:47:600] [95319:95320] [ERROR][com.freerdp.crypto] - ILF-SQL-01[16:37:47:600] [95319:95320] [ERROR][com.freerdp.crypto] - A valid certificate for the wrong name should NOT be trusted!
Certificatedetailsfor10.129.201.248:3389 (RDP-Server):CommonName:ILF-SQL-01Subject:CN=ILF-SQL-01Issuer:CN=ILF-SQL-01Thumbprint:b7:5f:00:ca:91:00:0a:29:0c:b5:14:21:f3:b0:ca:9e:af:8c:62:d6:dc:f9:50:ec:ac:06:38:1f:c5:d6:a9:39TheaboveX.509certificatecouldnotbeverified,possiblybecauseyoudonothavetheCAcertificateinyourcertificatestore,orthecertificatehasexpired.PleaselookattheOpenSSLdocumentationonhowtoaddaprivateCAtothestore.Doyoutrusttheabovecertificate? (Y/T/N) y[16:37:48:801] [95319:95320] [INFO][com.winpr.sspi.NTLM] - VERSION ={[16:37:48:801] [95319:95320] [INFO][com.winpr.sspi.NTLM] -ProductMajorVersion:6[16:37:48:801] [95319:95320] [INFO][com.winpr.sspi.NTLM] - ProductMinorVersion: 1[16:37:48:801] [95319:95320] [INFO][com.winpr.sspi.NTLM] - ProductBuild: 7601[16:37:48:801] [95319:95320] [INFO][com.winpr.sspi.NTLM] - Reserved: 0x000000
Tras una autenticación exitosa nos aparecerá una nueva ventana con acceso al escritorio del servidor al que nos hemos conectado.
WinRM
El Windows Remote Management ( WinRM) es un protocolo simple de administración remota integrado en Windows basado en la línea de comando. WinRM utiliza el Protocolo simple de acceso a objetos ( SOAP) para establecer conexiones a hosts remotos y sus aplicaciones. Por lo tanto, WinRM debe habilitarse y configurarse explícitamente a partir de Windows 10. WinRM depende de los puertos 5985y 5986 TCP para la comunicación, con el último puerto 5986 usando HTTPS, ya que anteriormente se usaban los puertos 80 y 443 para esta tarea, pero el puerto 80 fue bloqueado principalmente por razones de seguridad.
Otro componente que se adapta a WinRM para la administración es Windows Remote Shell ( WinRS), que nos permite ejecutar comandos arbitrarios en el sistema remoto. El programa incluso está incluido en Windows 7 de forma predeterminada. Así, con WinRM es posible ejecutar un comando remoto en otro servidor.
Servicios como sesiones remotas que utilizan PowerShell y combinación de registros de eventos requieren WinRM. Está habilitado de forma predeterminada a partir de la versión Windows Server 2012, pero primero debe configurarse para versiones de servidor y clientes anteriores, y crear las excepciones de firewall necesarias.
Enumeración de WinRM
Como ya sabemos, WinRM usa puertos TCP 5985( HTTP) y 5986( HTTPS) por defecto, que podemos escanear usando Nmap. Sin embargo, a menudo veremos que solo TCP 5985se utiliza HTTP ( ) en lugar de HTTPS ( TCP 5986).
Nmap WinRM
afsh4ck$nmap-sV-sC10.129.201.248-p5985,5986--disable-arp-ping-nStartingNmap7.92 ( https://nmap.org ) at 2021-11-06 16:31 CETNmapscanreportfor10.129.201.248Hostisup (0.030s latency).PORTSTATESERVICEVERSION5985/tcpopenhttpMicrosoftHTTPAPIhttpd2.0 (SSDP/UPnP)|_http-title:NotFound|_http-server-header:Microsoft-HTTPAPI/2.0ServiceInfo:OS:Windows; CPE:cpe:/o:microsoft:windowsServicedetectionperformed.Pleasereportanyincorrectresultsathttps://nmap.org/submit/.Nmapdone:1IPaddress (1 hostup) scanned in 7.34 seconds
Si queremos saber si se puede acceder a uno o más servidores remotos a través de WinRM, podemos hacerlo fácilmente con la ayuda de PowerShell. El cmdlet Test-WsMan es responsable de esto y se le pasa el nombre del host en cuestión.
EvilWinrm - Linux
En entornos basados en Linux podemos utilizar la herramienta llamada evil-winrm , otra herramienta de pruebas de penetración diseñada para interactuar con WinRM.
afsh4ck$evil-winrm-i10.129.201.248-uCry0l1t3-pP455w0rD!Evil-WinRMshellv3.3Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() function is unimplemented on this machine
Data:Formoreinformation,checkEvil-WinRMGithub:https://github.com/Hackplayers/evil-winrm#Remote-path-completionInfo:Establishingconnectiontoremoteendpoint*Evil-WinRM* PS C:\Users\Cry0l1t3\Documents>
WMI
Windows Management Instrumentation ( WMI) es la implementación de Microsoft y también una extensión del Modelo de información común ( CIM), funcionalidad central de la gestión empresarial basada en web estandarizada ( WBEM) para la plataforma Windows. WMI permite acceso de lectura y escritura a casi todas las configuraciones en los sistemas Windows. Es comprensible que esto la convierta en la interfaz más crítica en el entorno Windows para la administración y el mantenimiento remoto de computadoras con Windows, independientemente de si son PC o servidores. Normalmente se accede a WMI a través de PowerShell, VBScript o la Consola de Instrumental de administración de Windows ( WMIC). WMI no es un único programa sino que consta de varios programas y varias bases de datos, también conocidas como repositorios.
Enumeración de WMI
La inicialización de la comunicación WMI siempre se lleva a cabo en TCPel puerto 135y, después de establecer exitosamente la conexión, la comunicación se mueve a un puerto aleatorio. Para ello se puede utilizar , por ejemplo, el programa wmiexec.py del kit de herramientas Impacket.
Nuevamente es necesario mencionar que el conocimiento adquirido al instalar estos servicios y jugar con las configuraciones en nuestra propia VM Windows Server para ganar experiencia y desarrollar el principio funcional y el punto de vista del administrador no se puede reemplazar con la lectura de manuales. Por lo tanto, recomendamos encarecidamente configurar su propio servidor Windows, experimentar con la configuración y escanear estos servicios repetidamente para ver las diferencias en los resultados.