elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Leer registro remoto con PSExec y guardarlo en una variable.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Leer registro remoto con PSExec y guardarlo en una variable.  (Leído 3,620 veces)
jarpon

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Leer registro remoto con PSExec y guardarlo en una variable.
« en: 1 Abril 2023, 11:28 am »

Buenos dias

Necesitaria ayuda para leer un registro remoto y guardarlo en una variable que me retorne el BAT, no se si seria possible o abria que dejarlo en un fichero y luego leerlo, preferiria la primera opcion.

Tengo lo siguiente:

Fichero BAT.

%1   & ::RegKKey path.
%2   & ::RegKKey name.
%3   & ::RegKKey type.
%4   & ::RegKKey value.
%5   & ::User
%6   & ::Pass.
CmdKey /Add:administrador /User:%5 /Pass:%6
Reg Query %1 /V %2 /T %3 /D %4 /F

VBScript.

set objShell = CreateObject("WScript.Shell")
cmd= "D:\NUBOTBAT\psexec.exe \\"& sIP &" -u " &AdminUserInkjet1 &" -p " &AdminPWDInkjet1 &" -d -c -h -i -realtime -f D:\NUBOTBAT\ReadReg.bat " &sPath &" "&sValueName &" " &sValueType &" " &Chr(34) &sValueData &Chr(34)
objShell.Exec (cmd)
set objShell = Nothing

Esto creo que leeria el registro pero como lo obtengo en una variable?

Gracias por adelantado


En línea

jarpon

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Leer registro remoto con PSExec y guardarlo en una variable.
« Respuesta #1 en: 1 Abril 2023, 12:38 pm »

He probado e hacerlo localmente guarando los registros en local  funciona, pero con Psexec no consigo que guarde el fichero en el PC cliente.

Este es el BAT.

%1   & ::RegKKey path.
%2   & ::path and filename .reg.   
%3   & ::User
%4   & ::Pass.
CmdKey /Add:administrador /User:%3 /Pass:%4
Reg Export %1 %2 /Y

Este es el script VBS, previamente todas las variable definidas,

set objShell = CreateObject("WScript.Shell")
cmd= "D:\NUBOTBAT\psexec.exe \\"& IPExt1 &" -u " &AdminUserInkjet1 &" -p " &AdminPWDInkjet1 &" -d -c -h -i -realtime -f D:\NUBOTBAT\RegExport.bat " &sPath &" "&sFileName &" "&AdminUserInkjet1 &" "&AdminPWDInkjet1
objShell.Exec (cmd)
set objShell = Nothing

Ejecutando el BAT localmente en el PC remoto me guarda bien el fichero en el PC cliente.

CmdKey /Add:administrador /User:administrador /Pass:pasworrd
Reg Export "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\...\_ProfAssoc" "\\xxx.xxx.xxx.xx\D\pcCliente\ProfileAssoc.reg" /Y


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.159



Ver Perfil
Re: Leer registro remoto con PSExec y guardarlo en una variable.
« Respuesta #2 en: 1 Abril 2023, 21:32 pm »

PSExec no siempre funciona como uno esperaría, no le veo la necesidad de usarlo si directamente puedes usar Reg.exe, igual con el VBScript pero si lo quieres trabajar ahí ...

1. La máquina Servidor (remota) debe tener activada la cuenta de Administrador y esta debe tener contraseña, me parece que esto ya lo tienes hecha porque pasaste al paso 2, además debes tener configurado el Firewall para que permita el "Compartir archivos e impresoras", yo lo voy haciendo con comandos para no poner imágenes del modo visual

Máquina remota 192.168.1.100
Código
  1. Net User Administrador /Active:Yes
  2. Net User Administrador 1234
  3. NetSh Firewall Set Service FileAndPrint Enable

2. En la máquina cliente hay que agregar las credenciales para conectarse a la máquina remota y usar el comando Reg para en mi caso sacar la versión del Sistema del servidor:

Máquina cliente
Código
  1. CmdKey /Add:192.168.1.100 /User:Administrador /Pass:1234
  2. PSExec \\192.168.1.100 Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V "ProductName"

Hasta ahí te debería funcionar, sino tienes que repetir los pasos y/o asegurarte de que estás configurando todo bien, no le des a PSExec un usuario y contraseña, él las va ha tomar desde las credenciales de Windows que ya has agregado con CmdKey

Cuando lo anterior funciona, recién puedes pasar a la siguiente parte que es el uso de PSExec como quieres, hazlo todo desde la consola para ver errores y demás, cuando funcione ya puedes pasar a usar tu VBScript

---
También veo que estás haciendo uso de Reg sin PSExec, claro que puedes prescindir de PSExec completamente y usar solo Reg pero debes habilitar y hacer correr el servicio de "Registro remoto" en el Servidor, por comandos sería:

Código
  1. SC Config "RemoteRegistry" Start= Auto
  2. Net Start "RemoteRegistry"

A partir de ahí ya puedes usar Reg que es mucho más rápido que PSExec, por ejemplo vas a tu cliente y ejecutas:

Código
  1. Reg Query "\\192.168.1.100\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V "ProductName"

Eso mismo te puede servir para ejecutarlo en un Batch o VBScript y guardarlo en una variable o archivo, en caso de Batch puedes usar el comando For /F, y en caso de VBScript tienes algo así:

Código
  1. pc = "192.168.1.100"
  2. clave = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
  3. valor = "ProductName"
  4. Set sh = WScript.CreateObject("WScript.Shell")
  5. cmd = "Reg Query ""\\" & pc & "\" & clave & """ /V """ & valor & """"
  6. Set rpta = sh.Exec(cmd)
  7. variable = rpta.StdOut.ReadAll()
  8. MsgBox(variable)

Ya luego puedes parsear tu variable para quitarle los excedentes, por ejemplo para mi caso si solo quiero ver el valor resultante tal cual:

Código
  1. pc = "192.168.1.100"
  2. clave = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
  3. valor = "ProductName"
  4. Set sh = WScript.CreateObject("WScript.Shell")
  5. cmd = "Reg Query ""\\" & pc & "\" & clave & """ /V """ & valor & """"
  6. Set rpta = sh.Exec(cmd)
  7. variable = rpta.StdOut.ReadAll()
  8.  
  9. variable = Split(Split(variable, vbCrLf)(2), "    ")(3)
  10. MsgBox(variable)
En línea

jarpon

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Leer registro remoto con PSExec y guardarlo en una variable.
« Respuesta #3 en: 2 Abril 2023, 16:07 pm »

Gracias EdePC por tu fantastica explicacion.
La cuenta de administrador en la maquina remota esta activada de fabrica y dispongo de la contraseña no hay problema por eso.
Ya lo tenia echo como me has descrito, pero fuy a probarlo en la maquina de mi cliente y no me leia las claves, alli no podia hacer muchas pruebas,  tampoco quiero hacer cambios en su maquina para evitar responsabilidades, esa era la razon de utilizar PSexec, ataves de un Bat. Mas tarde mire mi bat y creo que el usuario y pwd que enviaba no eran correctos, pero en casa de un cliente, ya sabes, no se puede hacer demasiadas pruebas y menos cuando le tienes la maquina parada y sin producir.
He utilizado Reg export para extraer las claves del registro que necesito y las guardo en un fichero  Profile.reg en mi PC. Hasta aqui todo bien, pero mi pantalla HMI solo lee ficheros en UF-8 sin BOM y Windows guarda el fchero en UTF-16LE, o sea que me quedo bloqueado otra vez.
Estaba intentando transformar el fichero UTF-16 en UTF-8 sin BOM pero no se por donde empezar, alguna idea?. Algo facil seria abrirlo con notepad y guardarlo en UFT8 sin BOM, no se  si se puede hacer en oculto para que no se vea notepad.
O, se os ocurre alguna otra idea mas sencilla.

Gracias por aelantado.
En línea

jarpon

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Leer registro remoto con PSExec y guardarlo en una variable.
« Respuesta #4 en: 2 Abril 2023, 21:01 pm »

Finalmente he conseguido transformarlo a UTF-8 con BOM y lo lee correctamente la HMI.
Me queda un fleco que es lo siguiente, cuando leo las claves y las guardo en un fichero lo realizo con PSexec con el sigiente codigo pero no se ejecuta en oculto veo el pantallazo negro.

Alguien sabe por que?

set objShell = CreateObject("WScript.Shell")
cmd= "D:\NUBOTBAT\psexec.exe \\"& IPExt1 &" -u " &AdminUserInkjet1 &" -p " &AdminPWDInkjet1 &" -d -c -h -i -realtime -f D:\NUBOTBAT\RegExport.bat " &sPath &" "&sFileName &" "&AdminUserInkjet1 &" "&AdminPWDInkjet1

objShell.Run cmd, 0, true         
set objShell = Nothing
En línea

jarpon

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Leer registro remoto con PSExec y guardarlo en una variable.
« Respuesta #5 en: 2 Abril 2023, 22:25 pm »

Perdonad funciona correctamente oculta, era otro codigo que no se ejecutaba en oculto.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines