Páginas

Mostrando entradas con la etiqueta PsExec. Mostrar todas las entradas
Mostrando entradas con la etiqueta PsExec. Mostrar todas las entradas

19 marzo, 2020

Post-Explotación: Movimiento lateral usando técnicas Pass the hash (PtH)

En las fases de explotación de un pentest interno y dando continuidad al artículo de Explotación local: Escalada de privilegios de 0 a SYSTEM con Metasploit. Hoy quiero comentar diversas técnicas que se pueden emplear para realizar movimiento lateral o también conocido como Pass the hash (PtH).

¿Qué es un movimiento lateral usando técnicas Pass the hash?

Movimiento lateral (pivoting) usando Pass the hash es una de la técnicas empleadas para pivotar de una máquina a otra. Una vez que se ha comprometido una máquina, hemos escalado privilegios y conseguimos realizar un volcado de hashes. Podemos utilizar estos hashes para autenticarse en otra máquina que tenga las mismas credenciales que la máquina origen.

Concepto del "Principio de localidad"

En las organizaciones suele ser habitual que el usuario Administrador local u otro usuario que pertenece al grupo de Administradores locales utilice la misma contraseña para todas las máquinas de la empresa o departamento facilitando así el movimiento lateral entre máquinas con la misma cuenta de usuario. Esto se conoce como principio de localidad y suele ser así por motivo de facilitar la administración y gestión de las máquinas corporativas por parte de los departamento de IT de las compañías.

Precisamente por esta razón obtener la información de hashes NTLM es muy importante para un pentester por que nos ayudaría a movernos lateralmente pivotando por las máquinas de la organización intentando encontrar debilidades en otras máquinas.

En el siguiente artículo mostraré varios técnicas de ejemplo en distintos escenarios para lograr el movimiento lateral a través de la obtención de un hash NTLM de un entorno Windows.

WCE - Windows Credentials Editor

WCE o Windows Credentials Editor es una herramienta desarrollada por Amplia Security en la que podemos obtener un volcado de los hashes NTLM almacenados en memoria y usarlos para técnicas de Pass the hash.

En el siguiente escenario existen dos máquinas: 
  • Windows 7: PCW7 - 10.0.0.7
  • Windows 10: PCW10 10.0.0.10
Tenemos acceso a la máquina Windows en la que tenemos privilegios pero no conocemos la contraseña en plano.

Abrimos una consola e intentamos ejecutar una cmd remota al equipo Windows 10 usando psexec de la suite de PsTools. Como vemos en la captura de pantalla el acceso a sido denegado, esto ocurre por que intenta autenticarse con con usuario/password distintos al que inició el proceso de la cmd.exe.

Con WCE acompañado del argumento -l se listan de sesiones de inicio de sesión y credenciales NTLM. En este caso admin:PCW7:LM:NT (user:hostname:hashLM:hashNT).

Mimikatz: Volcado de hashes NTLM del fichero SAM

Para obtener el hash NTLM del usuario por defecto Administrador local usaremos Mimikatz para realizar un volcado de hashes del fichero SAM

Iniciamos Mimikatz, entramos en el modo privilegiado, impersonamos al usuario admin (que forma parte del grupo Administradores locales) para obtener el token de NT AUTHORITY/SYSTEM y poder realizar el volcado de hashes.
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # lsadump::sam
Hay que tener en cuenta que si un usuario carece de contraseña, es decir, una password en blanco. Obtendremos un LM hash nullAAD3B435B51404EEAAD3B435B51404EE.

Figura 1: WCE y Mimikatz - Listado de hashes NTLM de las sesiones actuales y volcado de hashes NTLM del fichero SAM. 

Una vez disponemos del hash NTLM del usuario Administrador, salimos de Mimikatz y ejecutamos WCE con el argumento -s para cambiar las credenciales NTLM de la sesión de inicio actual.

Según la sintaxis del comando hay que completar el espacio del hash LM, bastará con rellenar su tamaño con números valor 0 seguido del valor hash NT.
wce.exe -s USER:WORKGROUP:LM:NT
Una vez cambiado el hash para el usuario Administrador si volvemos a listar los usuarios de inicio de sesión con wce -l veremos dos inicios de sesión actuales almacenados, el usuario Admin y el nuevo usuario Administrador.

Para comprobar su funcionalidad probaremos a conectarnos ejecutando una cmd remota a través de psexec este utilizará las credenciales almacenadas del usuario Administrador para autenticarse en el sistema remoto Windows 10.

En la siguiente captura se puede ver como se creó un fichero de prueba C:\pwned.txt en el disco local de la máquina remota Windows 10 (PCW10) donde solo se podemos escribir si somos usuarios privilegiados.

Figura 2: WCE - PoC the PtH y conexión con privilegios hacia el host remoto.

Otra prueba interesante que podemos realizar es montar una unidad del disco local C:\ del equipo remoto Windows 10 haciendo uso del recurso compartido por defecto C$.
net use x: \\IP_remota\c$
Donde x: sería una letra la asignación disponible para la unidad a montar. 

Si listamos la estructura de directorios (dir) podemos ver el fichero pwned.txt creado anteriormente y podremos eliminarlo, verificando así que seguimos teniendo privilegios de modificación en el disco C:\.

Figura 3: Autenticación con privilegios para montar como unidad el recurso compartido C$ de la máquina remota. 

Mimikatz

Con Mimikatz podemos realizar Pass the hash de una forma muy sencilla. Una vez obtenemos el hash NTLM y teniendo acceso físico o una shell remota hacia la máquina. Ejecutamos en la consola de Mimikatz lo siguiente:
sekurlsa::pth /user:<USER> /ntlm:<HASH_NTLM> /domain:WORKGROUP
Esto nos lanzará un nuevo proceso cmd.exe con el usuario que lo hayamos invocado (administrador como se puede ver en la screenshot).

La máquina en la que se realiza al técnica es un equipo Windows 7 llamado PCW7. Con las pstools ejecutamos un psexec para intentar ejecutar una cmd en la máquina remota que será un Windows 10 llamado PCW10 (10.0.0.10). 

Vemos que conseguimos una sesión autenticándonos gracias al access token que hemos definido en Mimikatz para la ejecución de este proceso (cmd.exe). Si la contraseña del administrador local fuera otra y por lo tanto su hash NTLM, esta autenticación fallaría.

Figura 4: Mimikatz (sekurlsa::pth) - Utilizando Pass the hash para autenticarse desde una máquina hacia otra remota.

Metasploit (módulo psexec - SMB)

En Metasploit existe un módulo llamado exploit/windows/smb/psexec. El cual usa algo muy similar a la utilidad de comandos psexec de Sysinternals para poder autenticarse por medio del recurso compartido por defecto ADMIN$ de la máquina remota. Este recurso hace uso del protocolo SMB (Service Message Block) puerto 445. Después de autenticarse, ejecutará el Payload que le indiquemos. 
Antes de poner en práctica esta técnica de movimiento lateral, conseguimos desde otra máquina un movimiento vertical (escalada de privilegios) para realizar un volcado de hashes NTLM usando el módulo "post/windows/gather/smart_hashdump" indicando la sesión comprometida (el script hashdump que se utilizaba dentro de Meterpreter, actualmente se encuentra obsoleto).

Figura 5: Metasploit - Volcado de hashes NTLM usando el módulo /post/windows/gather/smart_hashdump.

Para la prueba de concepto se eliminarán las sesiones previas establecidas (sessions -K). Usamos el módulo tipo exploit "exploit/windows/smb/psexec".

En este módulo es necesario establecer el host remoto en el que queremos hacer target (RHOSTS víctima), el usuario local Administrador y su hash NTLM obtenidos anteriormente desde otra máquina. La sintaxis sería <LM:NTLM> podemos establecer un LM hash null (AAD3B435B51404EEAAD3B435B51404EE) seguido del NTLM hash.

Establecemos un Payload tipo meterpreter/reverse_tcp, indicamos el host local donde obtendremos la shell inversa (la maquina Kali) y finalmente ejecutamos el exploit.

Figura 6: Metasploit - PoC Pass the hash usando el módulo "exploit/windows/smb/psexec".

El módulo usará psexec para autenticarse a través del recurso compartido ADMIN$ ejecutando el payload definido, estableciendo una sesión como Administrador y finalmente obtener el token de "NT AUTHORITY/SYSTEM".

Figura 7: Metasploit - Exploit con éxito a través de la autenticación de recursos compartidos smb (PtH).

PowerShell: Invoke-TheHash - Función Invoke-WMIExec

Otra técnica es empleando la función Invoke-WMIExec del repositorio de Github Invoke-TheHash desarrollada por Kevin Robertson.

Es necesario desactivar la política de restricción de ejecución de scripts. "Set-ExecutionPolicy Unrestricted". Una vez descargado el repositorio e importada la función "Invoke-WMIExec" en PowerShell, simplemente tendremos que indicar el hash NTLM, la IP remota destino, el usuario será el Administrador de la máquina y la instrucción del comando a ejecutar.
Invoke-WMIExec -Hash <hash_NTLM> -Target <IP_remota> -Username Administrador -Command "<instrucción_comando_a_ejecutar>"
En el siguiente escenario no solo realizamos un pass the hash desde la máquina Windows 10 a la máquina Windows 7 sino que también hacemos un movimiento vertical, escalada de privilegios, gracias al hash. Abriendo Powershell con un usuario distinto al cual después ejecutamos indicándole el hash a Invoke-WMIExec, que sería el Administrador local (RID = 500).

Figura 8: PowerShell - Pass the hash usando la función Invoke-WMIExec.

pth-winexe: Pass the hash winexe ejecutando un cmd

pth-winexe es parte de las utilidades que forman la suite de pth-toolkit. Se trata de un pequeño script sh que permite por ejemplo ejecutar un binario conociendo unas credenciales de acceso de una máquina remota que tenga el protocolo SMB a la escucha.

Con el parámetro -U podemos indicarle el dominio o hostname, usuario, passoword o en su defecto el LM hash null (aad3b435b51404eeaad3b435b51404eeseguido del NTLM hash indicando la IP de la máquina remota y un binario a ejecutar como puede ser un cmd.exe. 

pth-winexe -U <DOMAIN>/<USER>%<HASH_LM:HASH_NTLM> //<Remote_IP> cmd.exe
En la siguiente captura se muestra un ejemplo de Pass the hash a una máquina Windows 10 en un contexto de integridad alta con un usuario administrador indicando su hash y ejecutando una cmd.

Figura 9: pth-winexe - Pass the hash ejecutando un cmd.

Saludos!

15 enero, 2019

Ejecutar WMIC en equipos remotos de la red local (Windows Management Instrumentation)

Si nos surgen problemas para la ejecución sentencias WMIC en máquinas o nodos remotos, mostraré los errores más comunes y como solucionarlos.

Un error puede ser que no esté habilitado las llamadas a procedimientos remotos (RPC).
Error:
Descripción = El servidor RPC no está disponible.
Error - "El servidor RPC no está disponible" (wmic)
Figura 1: Error - "El servidor RPC no está disponible" (wmic).

Otro error común podría ser la falta de permisos para ejecutar WMIC en nodos remotos.
Error:
Descripción = Acceso denegado.
Error - "El servidor RPC no está disponible" (wmic)
Figura 2: Error - "Acceso denegado" (wmic).

Comprobar que el servicio "Instrumental de administración de Windows" (Winmgmt) está habilitado en el tipo de inicio automático y esté en ejecución.

Servicios winmgmt (wmic) en Windows
Figura 3: Servicios winmgmt (wmic) en Windows.

Habilitar la regla por aplicaciones permitidas del firewal (WFAS) de Windows para permitir comunicaciones y llamadas RPC de WMI. Dependiendo cada caso si se trata de una red privada o de dominio.

Reglas del WFAS (Windows Firewall Advanced Security) permitir la comunicación para WMI
Figura 4: Reglas del WFAS (Windows Firewall Advanced Security) permitir la comunicación para WMI.

Verificar que el uso compartido de archivos e impresoras esté activado para el tipo de red según sea el caso. Por defecto en una red de dominio esta característica suele estar activada por defecto cuando un equipo cliente se uno al dominio.

Activar el uso de recurso compartido de archivos e impresoras
Figura 5: Activar el uso de recurso compartido de archivos e impresoras.

Comprobar que en la consola del equipo remoto haya permisos suficientes para el usuario que ejecutará wmic.

Esto se puede modificar en la consola de Microsoft "wmimgmt.msc", en la pestaña de seguridad, se modifican los permisos para permitir la "Llamada remota habilita" y "Ejecutar métodos".

Permisos de seguridad al Control WMI
Figura 6: Permisos de seguridad al Control WMI.

Por último, y algo fundamental según las pruebas que he realizado, es que independientemente de si el equipo cliente remoto en el que se quiere ejecutar WMI forme parte de una red de dominio o una red privada. Será necesario crear un valor en el registro de Windows "LocalAccountTokenFilterPolicy" algo ya comentado en este artículo.

Desde mi punto de vista esto no es aconsejable a métodos de seguridad, no es para nada una buena práctica, pero si se trata de casos puntuales en los que se necesita realizar una serie de acciones remotas simplemente, por seguridad aconsejo volver a eliminar este valor del registro.

Para poder ejecutar este valor en el registro podemos hacerlo ejecutando una CMD en el equipo remoto a través de PsExec (PsTools de Sysinternals). En este artículo se detalla como hacerlo.

El valor LocalAccountTokenFilterPolicy se trata básicamente de "deshabilitar" el UAC (User Account Control) para la ejecución de acciones remotas.

Para añadir el valor LocalAccountTokenFilterPolicy a través de una CMD:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
Para posteriormente eliminar el valor LocalAccountTokenFilterPolicy a través de una CMD:
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /f

En el siguiente ejemplo se puede ver como se ejecuta WMIC remotamente desde un equipo local a un equipo remoto usando "wmic /node", especificando la dirección IP local o el hostname del equipo remoto y un usuario/password con privilegios administrativos en la máquina remota.
wmic /node:ip_hostname /user:usuario /password:password bios get serialnumber
Ejecución remota de "wmic /node"
Figura 7: Ejecución remota de "wmic /node".

Saludos!

10 enero, 2019

Ejecutar una CMD en un equipo remoto con psexec

Esto es algo que suelo utilizar en muchos casos cuando los servicios para administraciones remotas que necesito en ese momento no están habilitados en el equipo remoto.

O bien me conecto con este tip para ejecutar una CMD en el equipo remoto y habilitar los servicios que sean necesarios para posteriormente administrar el equipo remoto de forma más cómoda a través del registro remoto (regedit) o los snap-ins MSC (administrador de dispositivos, impresoras, firewall, servicios, etc.) de administración remota añadidos a través de una MMC (Microsoft Management Console).

Como levantamos una CMD con privilegios administrativos ya sea de un administrador local o de dominio podemos ejecutar acciones remotas mediante la consola, "netsh" para la administración de redes o Firewall, "sc" para servicios, "reg" para la manipulación de entradas del registro, "wmic" instrumental de administración de Windows, etc. Aunque como comentaba anteriormente es más cómodo invocar las propias consolas de administración remotas MSC de Microsoft.

Para esto será necesario descargar psexec, parte de la colección de herramientas de Sysinternals de Microsoft.

Haciendo uso de PsExec ejecutamos lo siguiente en una CMD con privilegios de nuestro equipo local.
psexec \\EquipoRemoto -u UserAdmin -p Password cmd.exe
  • EquipoRemoto: nombre o IP del equipo remoto al que nos queremos conectar.
  • UserAdmin: usuario con privilegios de administrador local o de dominio sobre la máquina remota.
  • Password: Passoword del usuario establecido anteriormente.
  • Seguidamente indicamos la aplicación a ejecutar de forma remota, en este caso sería una CMD remota, por lo tanto "cmd.exe" o indicar la ruta absoluta para este binario o el que sea. "C:\Windows\System32\cmd.exe"
  • Con el parámetro psexec /i indicamos una interacción GUI con ventana del equipo remoto. "C:\Windows\regedit.exe", etc.
Podemos usar el parámetro -h para ejecutar el token de elevación si en el sistema remoto tiene habilitado el UAC. Y el parámetro -s cmd.exe para ejecutar el proceso remoto en la cuenta del sistema.

En la siguiente captura se puede ver un ejemplo y una comprobación consultando las IPs y un whoami de como realmente estamos estamos dentro del equipo remoto.
Ejecución de una CMD en un equipo remoto con psexec
Figura 1: Ejecución de una CMD en un equipo remoto con psexec.

En el caso de que obtengamos un error de acceso denegado, comparto el siguiente artículo como referencia para realizar la configuración previa WinRM.

15 septiembre, 2015

PsKill: Finalizar procesos en equipos remotos

Hace un tiempo comentara el uso de las PSTools: http://www.zonasystem.com/2014/03/pstools-suite-de-herramientas-para-la.html una suite de herramientas para la administración remota de una misma red de trabajo.

En esta ocasión haremos uso de pslist, pskill y psexec, las cuales nos servirán para listar procesos remotos y después finalizarlos (matarlos). Esto nos puede resultar útil en un entorno empresarial en el que remotamente queramos hacer pruebas con algún que otro software y queramos "reiniciar" el proceso.

Teniendo descargadas las PSTools, abrimos una consola en Windows y usamos pslist para listar los procesos del equipo remoto:
pslist -t \\[EquipoRemoto/IP]
-t: Lista los procesos en forma de árbol (jerarquía).
[EquipoRemoto/IP]: Es el nombre FQDN del equipo remoto o la direción IP local.

Una vez tenemos localizado el nombre del proceso remoto a finalizar o mejor aún, el PID (Process identifier).

Con pskill podremos finalizar o matar dicho proceso remoto. Manteniéndose en la misma cmd escribimos:
pskill -t \\[EquipoRemoto/IP] -u [NombreEquipo\UsuarioPrivilegiado] -p [Password] [NombreProceso/PID]
-t: Finaliza el proceso y sus dependencias.
-u: Indicar el nombre de equipo y un usuario administrador con privilegios.
-p: Contraseña del usuario administrador privilegiado.

 [NombreProceso/PID]: Nombre del proceso o PID a finalizar.

Si lo necesitáramos podríamos iniciar de nuevo el proceso que cerramos, de modo que hiceramos como un "reinicio" del software en cuestión al que afecta dicho proceso.

Simplemente con psexec para ejecutar comandos y lo que queramos en un equipo remoto, escribimos en la misma consola:
psexec \\[EquipoRemoto/IP] -u [NombreEquipo\UsuarioPrivilegiado] -p [Password] [FullPathPrograma\fichero.exe]
[FullPathPrograma\fichero.exe]: Sería la ruta del fichero binario ejecutable. (por ejemplo: C:\Program Files (x86)\Mozilla Firefox\firefox.exe)

Con esto finalizaremos el proceso y sus dependencias en el equipo remoto al que hagamos referencia y lo volveremos a iniciar en caso de que sea necesario.

Saludos!

30 marzo, 2015

Desinstalar Internet Explorer desde CMD de forma remota

Aunque existe una forma gráfica para desinstalar el navegador Internet Explorer:
Inicio > Panel de control > Programas y características > Activar o desactivar las características de Windows.

Figura 1: Desinstalar IE de forma gráfica

Microsoft nos ilustra de como hacerlo por comandos en una CMD. Lo cual esto a nivel local pues puede resultar curioso, simplemente saber que hay una forma de hacerlo por consola. Pero a nivel corporativo esto puede resultar útil para desinstalar alguna versión, en ocasiones posterior de IE, que por motivos de las Windows Update se pudiesen actualizar en determinados equipos de nuestra red corporativa.

Para hacerlo de forma local simplemente ejecutando una CMD con privilegios de administrador, escribir el siguiente código y reiniciar el equipo, llegaría para desinstalar IE por consola.

Para hacerlo de forma remota a otro equipo de la red, simplemente ejecutamos una CMD remota con PsExec con privilegios de administrador local de la máquina remota en cuestión, como ya expliqué en otros artículos.

Y seguidamente escribimos el código para su desinstalación:
FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*9.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /quiet /norestart
En este caso el IE a desinstalar es la versión 9 (InternetExplorer-*9.*).

Si queremos desinstalar otra versión por ejemplo: IE_10 o IE_11. Simplemente se tendrá que modificar el 9 por la versión en cuestión.

Saludos!

27 marzo, 2015

Listar aplicaciones y actualizaciones instaladas en Windows de forma remota

En ocasiones nos interesa saber que aplicaciones están instaladas remotamente una máquina de nuestra red, simplemente tener una lista aplicaciones para saber, entre otras cosas, si están usando software no permitido en el entorno corporativo.

Aunque ya expliqué en otras ocasiones formas similares de hacer esto, esta es otra más que me parece interesante.
Para poder listar el aplicaciones y actualizaciones instaladas de forma remota.
Podremos hacerlo de dos formas, por CMD o registro remoto.

Hay que tener en cuenta una cuestión, antes de nada deberemos saber si el software remoto instalado que queremos listar es para arquitecturas de OS x86 o x64. Ya que las claves del registro de Windows varian en función a esto.

Para arquitecturas x86 (32bits):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall  
Para arquitecturas x64 (64bits):
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
En el siguiente ejemplo voy a usar valores de clave de registro para sistemas operativos de x64.

[1º Opción] - Si el equipo REMOTO tiene el servicio de Windows (services.msc) HABILITADO el "Registro remoto".
Simplemente abrimos en nuestro equipo un regedit > Archivo > Conectar a registro de red... > después especificamos el nombre del equipo remoto y tendremos acceso al árbol de claves de su registro en el cual podemos ir a la rama en cuestión para mirar las aplicaciones instaladas.
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

[2º Opción] - La otra opción es ejecutar con PsExec de la suite de PsTools, una CMD remota y realizar los siguientes pasos en comandos.

Abrimos una consola CMD de Windows y hacemos uso del comando reg.
Ejecutando la siguiente consulta:
reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /S | find "DisplayName"
En la que se consultamos la clave en la que se hace referencia y se filtra por el valor "DisplayName", que contiene el nombre de la aplicación en cuestión.

Aconsejo exportar dicha lista a un documento de texto para visualizarlo de forma más clara y con más razón si tenemos numerosas aplicaciones instaladas en nuestro equipo.

Ejecutamos lo mismo pero realizando una exportación a un fichero txt.
reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /S | find "DisplayName" >> fichero.txt
De este modo se nos exportará toda la lista de software y actualizaciones a "fichero.txt". Aclaro que, si hacemos esto sin especificar una ruta en cuestión, este fichero se nos creará en el directorio actual donde estemos trabajando en la CMD abierta en esa instancia.

Saludos!

18 marzo, 2015

Desinstalar/instalar actualizaciones remotamente de Windows Update

Si en nuestra organización corporativa necesitamos desinstalar, de forma remota a otro equipo de la red, ciertas actualizaciones (KB: Knowledge Base) de Windows proporcionadas por las Windows Update. Podemos hacerlo primeramente con psexec, pequeña utilidad incorporada en las PsTools (suite de herramientas de gestión remota que comentara ya en este blog) y a continuación usando una herramienta nativa de Windows el "Instalador Independiente de Windows Update" (Windows Update Standalone Installer) WUSA.

WUSA es una herramienta en modo de comandos, por lo que necesitaríamos ejecutar en el equipo remoto una CMD de manera subyacente. Para que, en este caso, esta desinstalación sea transparente al usuario final.

Haciendo uso de PsExec (como ya dije, incluido en la suite de PsTools). Ejecutamos esto en una consola CMD de nuestro equipo local con privilegios.
psexec \\EquipoRemoto -u UserAdmin -p Password cmd.exe
Donde: EquipoRemoto es el nombre o IP del equipo remoto al que nos queremos conectar, UserAdmin sería un usuario con privilegios de administrador y Password es la contraseña del usuario UserAdmin, acto seguido indicamos la aplicación a ejecutar de forma remota, que para este caso usaremos cmd.exe.

Una vez tengamos acceso al equipo remoto de la organización a través de esa instancia por CMD. Simplemente tenemos que saber el número que identifica a la KB a desinstalar.
Si no estamos seguros de si el equipo remoto la tiene o no instalada dicha actualización, sencillamente con el comando SYSTEMINFO.

Entre otras informaciones podremos ver las actualizaciones instaladas en el equipo listadas, en las que se muestra el ID de la KB.

Figura 1: Listado de actualizaciones instaladas en el equipo, con el comando Systeminfo.

De este modo sabremos si la actualización que queremos desinstalar ya está instalada en el equipo remoto.

Para la desinstalar la actualización, escribimos en la CMD remota:
wusa /uninstall /kb:IDactualizacion
Donde: IDactualizacion sería el número ID de la KB a identificar para su desinstalación.

En el siguiente ejemplo la actualización a desinstalar sería la "kb:2981653"

Figura 2: Desinstalando actualización con wusa.

Espero que esto pueda ser de utilidad para aquellos que deseen desintalar actualizaciones de forma remota y subyacente al usuario final, en equipos de un mismo workspace.

Instalar actualizaciones en remoto

Añado que: WUSA es, como ya dije, el instalador independiente de Windows Update, es decir; que no solo vale para desinstalar actualizaciones sino que también podríamos instalarlas.

Para más información el caso de instalar alguna actualización en remoto y de que forma hacerla, consultar la ayuda con:
 wusa /?
Saludos!

30 agosto, 2014

Desinstalar software local o remoto a través de una CMD de Windows

Recientemente buscando la forma de poder desinstalar aplicaciones de forma local y remota solo haciendo uso a través de una shell de Windows Command Prompt. Encontré una forma de poder hacerlo de forma muy fácil y sin hacer uso de tools externas.

Para poder hacer esto haremos uso de la herramienta de comandos WMIC ("Windows Management Instrumentation Command-line"), integrada en Windows 7. Deberemos tener iniciado el servicio WMI de Windows, podremos iniciarlo de forma rápida abriendo una consola con privilegios y escribiendo: net start winmgmt.

Para poder desinstalar una aplicación de un equipo remoto de la red o un dominio, podemos hacer uso de PsExec, una herramienta de linea de comandos incluida en la suite PSTools de la cual ya había comentado en este blog como descargarla y usarla.

Una vez descarga en nuestro equipo local, simplemente tendríamos que ejecutar una CMD de un equipo remoto con PsExec y seguir el procedimiento como si fuese un equipo local, ya que esa CMD es la que equipo remoto al que nos conectamos.

En una CMD de nuestro equipo local escribimos:
psexec \\EquipoRemoto -u UserAdmin -p Password cmd.exe
Donde: EquipoRemoto es el nombre o IP del equipo remoto al que nos queremos conectar, UserAdmin sería un usuario con privilegios de administrador y Password es la contraseña del usuario UserAdmin, acto seguido indicamos la aplicación a ejecutar de forma remota, que para este caso usaremos cmd.exe.

En este ejemplo escogí la aplicación "Passware Kit Enterprise 9.7" para desinstalarla de forma local, pero como ya dije el procedimiento sería el mismo para un equipo remoto una vez tengamos iniciada la consola cmd del equipo remoto en cuestión.

[1] - Como podemos ver la aplicación que quiero desinstalar se visualiza en Progamas y características del Panel de Control de Windows. (esto en el caso de hacerlo de forma local).

Figura 1: Passware Kit Enterprise 9.7 se visualiza instalado en "Programas y características".

[2] - Abrimos una CMD local con altos privilegios administrativos (Tecla Windows+R: escribimos cmd.exe). Una vez abierta escribimos en consola: wmic, y accedemos al modo interactivo del comando, que se nos mostrará con el siguiente prompt: wmic:root\cli>, seguidamente escribimos:
product get name
Para mostrar la lista de aplicaciones instaladas en el equipo y reconocibles.

Nota: Si queremos mostrar más información, como el proveedor y la versión del producto a desinstalar, podemos usar la siguiente sintaxis.
node:HOSTNAME product get name,version,vendor
Donde "HOSTNAME" es el nombre del equipo local. Aunque si habíamos accedido por una cmd.exe remota a otro equipo, será el nombre del equipo remoto.

En este caso para simplificar e usando la primera sintaxis mencionada.
Vemos como se aparece la aplicación que quiero desinstalar, en este caso Passware Kit Enterprise 9.7.

Figura 2: Lista del software instalado en el equipo. (vemos que se muestra Passware Kit Enterprise 9.7).

[3] - Para desinstalar dicha aplicación escribimos:
product where name="NombreExactoDeLaAplicacion" call uninstall
Donde: NombreExactoDeLaAplicacion, es el nombre tal cual se muestra en la lista de aplicaciones (respetando mayúsculas, minúsculas y espacios).
Nos preguntará si estamos seguros de desinstalar la aplicación, presionamos la letra Y para confirmar.

Para verificar que realmente se desinstaló podemos, listar de nuevo las aplicaciones hasta ver que no aparece en la lista o nuevamente desinstalar la aplicación ya desinstalada, en este caso nos mostrará que "No hay instacias disponibles" lo que ya nos da a entender que se desinstaló de nuestro sistema.

Figura 3: Seleccionamos Passware Kit Enterprise 9.7 y lo desinstalamos, después comprobamos que se desinstaló.

[4] - Por último podemos hacer una última comprobación en Programas y características del Panel de control de Windows y comprobar que no se visualiza. (esto en el caso de hacerlo de forma local).

Figura 4: Finalmente comprobamos en "Programas y características" que Passware Kit Enterprise 9.7 ya no se visualiza.

Esta desinstalación es exactamente igual que hacerlo de forma gráfica, es decir que esto, nos tendría más utilidad para llevar a cabo desinstalaciones a equipos remotos de forma subyacente al usuario final, a nivel administrativo.

Para hacer esto de forma no interactiva sin entrar en la consola de WMIC. Podemos usar el parámetro /nointeractive.

Un ejemplo sería. Para listar todos los productos de "Adobe Acrobat" que tengamos instalados en el sistema y desinstalarlos todos de golpe de forma no interactiva.
wmic /node:COMPUTERNAME product where "name like 'Adobe Acrobat%'" call uninstall /nointeractive
Si estamos en un modo interactivo podemos usar solamente product where "name like 'Adobe Acrobat%'" para obtener previamente el listado y no desinstalarlo.

Respecto a si es una desinstalación más o menos limpia, eso dependerá del proceso de programación que tenga software de fabricante dado. Habrá aplicaciones que se desinstalen completamente, sin dejar rastros de carpetas ni rastros en el registro de Windows y habrá otras que no.

Por último, decir que en ocasiones puede que la lista de aplicaciones mostradas no sean todas las que realmente están instaladas en el equipo. Ya que habrá casas comerciales u otros factores que harán que impidan que se listen con WMIC. Con lo cual aquí aconsejo realizar esto por directivas GPO.

Saludos!

19 marzo, 2014

Cambiar una dirección IP remotamente de forma subyacente con PsExec

Ya hablara del conjunto de herramientas que componen el paquete PsTools desarrolladas por Mark Russinovich (Sysinternals), las cuales nos permiten entre otras cosas realizar administraciones a equipos remotos de una red.

En esta ocasión haré uso de una de estas herramientas. PsExec la cual nos permite ejecutar procesos de un equipo remoto. Por ejemplo; realizar comandos en una shell remota, estos comandos NO se verán remotamente, es decir, que se hace transparente al usuario final y/o remoto.

En este caso mostraré un pequeño batch processing (.bat) que con ayuda de esta herramienta nos permitirá cambiar la dirección IP remota ACTUAL por una nueva asignación de dirección IP.
Copiando este script y pegándolo en fichero de texto, renombrándolo con una extensión .bat.
@echo off
echo ++ Introduce la IP del equipo Remoto:
set /p ipremota=
echo.
echo ++ Introduce la nueva IP a establecer:
set /p ipnueva=
echo.
echo ++ Introduce la mascara correspondiente:
set /p mascara=
echo.
echo ++ Introduce la Gateway correspondiente:
set /p gateway=
echo.
echo ++ Introduce el nombre de la interfaz: Ej: Conexión de área local
set /p interfaz=
echo.
psexec \\%ipremota% -u UsuarioAdmin -p PasswordAdmin -s netsh interface ip set address name="%interfaz%" source=static %ipnueva% %mascara% %gateway% 1
exit
Simplemente creamos y establecemos las variables a tener en cuenta y que nos harán falta para el uso de psexec. Como son principalmente e importante la dirección IP ya que la Subnetmask y la Gateway es opcional, dependiendo nuestras necesidades.
En mi caso es necesario ya que necesito cambiar IPs remotas que están fuera del rango habitual de mi red actual, pero que sin embargo si forman parte de mi tabla de enrutamiento (route print).

Después hacemos uso de la herramienta PsExec de manera que hagamos referencia a la IP remota (ya introducida como una variable), así como las posteriores variables tomadas que en mi caso eran la mascara de subred y la puerta de enlace.

Los parámetros con PsExec utilizados son los siguientes:
  • \\ipremota: IP Remota o nombre del equipo (para establecer la conexión con el equipo)
  • -u: Usuario con privilegios de la máquina remota para ejecutar el comando.
  • -p: Password de dicho usuario remoto con privilegios.
  • -s: Proceso/comando a ejecutar de manera remota. En este caso, netsh y su respectiva sintaxis de uso.
  • 1: Indica la métrica, normalmente en la mayoría de casos especificamos el valor 1.
Saludos!

17 marzo, 2014

PsTools: Suite de herramientas para la gestión y administración de equipos remotos en redes locales

PsTools es una suite de herramientas útiles para los administradores de sistemas y redes. Esta compuesto por multitudes de utilidades las cuales se utilizan en forma de comandos.

El autor de todo esto, es el conocido Mark Russinovich -programador y fundador de Sysinternals, empresa que Microsoft posteriormente compró-. Esta suite data del año 2007 (lo cual aún hoy me extraña que no hubiese publicado nada en el blog sobre ellas) pero aun tuvo recientes actualizaciones para ciertas herramientas que la componen.

El punto fuerte de este pack de tools en la mayoría de ellas es que sirven para realizar tareas administrativas a equipos remotos de una red local o de dominio, de manera subyacente al usuario final.

El uso de estas herramientas es en forma de comandos mediante una shell de Windows. Así que una vez descarguemos las herramientas que necesitemos o directamente la suite completa PsTools. Simplemente nos tendríamos que colocar el prompt en el path donde esté la carpeta raíz de PsTools descargada o donde la hubiésemos ubicado después de descargar el paquete.

En mi caso agregué la ruta: "C:\Windows\PsTools" a la variable de entorno 'PATH' de Windows.
De modo que ya no tengo por que estar siempre situado en la ruta raíz donde tenga las PsTools, me bastaría con hacer uso de las herramientas desde cualquier ruta en el que esté ubicado, ya que gracias a la variable de entorno añadida, Windows sabrá encontrar el camino raíz de los ejecutables que componen PsTools.

El pack de PsTools incluye las siguientes utilidades:
  • PsExec: Permite ejecutar procesos en cualquier contexto de usuario.
  • PsFile: Muestra los archivos abiertos de forma remota en un sistema.
  • PsGetSid: Muestra el identificador de seguridad (SID) de Windows de un equipo o un usuario.
  • PsInfo: Muestra información acerca de un sistema de Windows.
  • PsKill: Elimina o finaliza los procesos por nombre o identificador PID.
  • PsList: Muestra información detallada acerca de procesos en ejecución.
  • PsLoggedOn: Muestra todos los usuarios que han iniciado la sesión de forma local, así como todos los usuarios de recursos compartidos remotos.
  • PsLogList: Vuelca los registros de eventos de Windows.
  • PsPasswd: Cambia las contraseñas de cuentas de usuario.
  • PsService: Consulta y controla los servicios de Windows.
  • PsShutdown: Apaga, reinicia o suspende un equipo, o lo coloca en modo de hibernación.
  • PsSuspend: Suspende procesos en ejecución.
Esta no es una entrada para profundizar en cada una de ellas, ni era la intención de hacerlo, si no que iré haciendo uso de ellas a medida que me vayan surgiendo la necesidad de usarlas y exponer en posteriores artículos casos más concretos.

Saludos!

01 junio, 2012

Capturar tráfico de red con Wireshark dirigido a un equipo remoto de una misma red (rpcapd)

Si estamos en una red local y queremos capturar y analizar todo el tráfico de datos que vaya dirigido a otro equipo de nuestra red, lo podremos hacer de manera remota. Con la utilidad de rpcapd.exe que está incorporado en las librerías de WinPcap y que nos permitirá capturar tráfico remoto que vaya dirigidos a otros hosts de la red. 

Lo primero que hay que hacer es instalar WinPcap en el equipo remoto. Desgraciadamente no existe una forma "silenciosa" para instalar esto de forma subyacente al usuario final. Desde la web oficial los desarrolladores comentan en que no habrá opción para esta tarea por problemas de compatibilidades de software. Por lo que tendremos que instalarlo manualmente en el equipo remoto con la GUI de instalación de WinPcap.

Haciendo uso de PsExec incluido en la suite de PsTools. Ejecutamos una CMD remota, escribiendo esto desde nuestra CMD local.
psexec \\EquipoRemoto -u UserAdmin -p Password cmd.exe
  • EquipoRemoto: es el nombre o IP del equipo remoto al que nos queremos conectar.
  • UserAdmin: sería un usuario con privilegios de administrador.
  • Password: es la contraseña del usuario UserAdmin.
En el PC remoto en el que queremos capturar el tráfico de datos que va dirigido hacia este, tendremos que activar el servicio rpcapd. Para ello abrimos una shell de Windows, nos vamos al path donde está instalado WinPcap y escribimos:
rpcapd.exe -n -p 30000
Elegí el puerto 30000, pero podría ser otro cualquiera el cual sepamos que está libre y a que, por estándar, no sea de uso específico de algún protocolo.

Figura 1: Redirigiendo el tráfico al puerto 30000 para el servicio rpcapd de WinPcap.

Con rpcapd corriendo sobre el equipo en el que queremos capturar su tráfico, iniciamos Wireshark en el equipo que queremos ver el tráfico capturado.

En Wireshark configuramos nuestro adaptador de red para ello, nos vamos a: Capture -> Options
Seleccionamos la interface y la podremos en modo "Remote...". a continuación, se nos abrirá otra ventana en la que indicaremos la dirección IP y el puerto lógico donde queramos establecer la conexión, en este caso era el 30000.

En el equipo remoto nos preguntará si queremos abrir este puerto en el firewall para desbloquearlo y permitir el tráfico por ese puerto.


Figura 2: Interface en remote para escuchar el tráfico por el puerto 30000 al host remoto.

Pulsamos en OK y Start y listo. Ahora recibiremos todo el tráfico que vaya dirigido hacia el host: 10.0.0.4. Esto es válido tanto para redes cableadas como para señales Wireless.

Podremos comprobar en el equipo remoto que realmente el puerto 30000 está establecido "Established". 
Comprobar el estado de puertos con netstat -a.

Figura 3: Comprobamos que la conexión entre puertos está establecida entre el host remoto y mi equipo local.
Saludos!

Entradas Populares