Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: jarpon en 30 Enero 2022, 20:18 pm



Título: Permisos acceso a clave de registro PC remoto
Publicado por: jarpon en 30 Enero 2022, 20:18 pm
Hola a todos

Intento poder leer unos registros entre los PC's de 2 maquinas con vbscript. El script de lectura en la maquina local funciona correctamente, pero cuando quiero acceder al registro de la maquina remota siempre obtengo el error:
No se puede abrir el acceso  HKEY_LOCAL_MACHINE. Un error impide abrir la clave.
Los dos PC's tienen:
- Activados el servicio Registro remoto.
- Puedo conectar los registros remotos con regedit.
- me conecto como usuario administrador con permisos totales.
- Firewall estan desactivados.
- Escritorio remoto habilitados.
- Archivos e impresoras compartidas en redes publicas i privadas

He buscado por internet mil soluciones de permisos y directivas si exito.

Alguna idea?

Gracias por adelantado



Título: Re: Permisos acceso a clave de registro PC remoto
Publicado por: .xAk. en 4 Febrero 2022, 23:12 pm
puedes utilizar runas para el usuario autorizado ¿cual es el error?  ¿Cómo los intentas abrir? ¿has autorizado en la máquina local al usuario y su máquina remota que puede acceder? RemoteRegistry debe estar habilitado.

How to Connect to a Remote Registry (https://www.lifewire.com/how-to-connect-to-a-remote-registry-2625147) How to Enable the Remote Registry Service in Windows


Título: Re: Permisos acceso a clave de registro PC remoto
Publicado por: jarpon en 6 Febrero 2022, 22:20 pm
Hola

Gracias por tu aporte, todo lo que dice el link lo hice, creo que bien pero siempre me deniega el acceso.
Set objShell = CreateObject("WScript.Shell")

sPRUEBA="\\XXX\HKEY_LOCAL_MACHINE\SOFTWARE\PRUEBA\PRUEBA"
VALOR=objShell.RegRead(sPRUEBA)
MsgBox("The value is " & VALOR)

VALOR=4
MsgBox(sPRUEBA)
objShell.RegWrite sPRUEBA,VALOR,"REG_DWORD"

NUEVOVALOR=objShell.RegRead(sPRUEBA)
MsgBox("The value is " & NUEVOVALOR)
Set objShell = Nothing

Este es el código que utilizo y me funciona en local, pero en remoto he probado de mil formas y siempre me da error de raíz no valida en la clave de registro.

Veo los registro remotos desde regedit haciendo "Conectar al registro de red..."

No se si la ruta en remoto red local la escribo bien. Las siguientes rutas no me funcionan

XXX\HKEY_LOCAL_MACHINE\SOFTWARE\PRUEBA
\\XXX\HKEY_LOCAL_MACHINE\SOFTWARE\PRUEBA
\\WORKGROUP\XXX\HKEY_LOCAL_MACHINE\SOFTWARE\PRUEBA

no se que mas probar :-(



Título: Re: Permisos acceso a clave de registro PC remoto
Publicado por: .xAk. en 7 Febrero 2022, 03:46 am
En local te funciona. ¿si lo escribes en local con el nombre de máquina también te va? No tengo el escenario remoto para probar pero suponiendo que es de tipo "REG_SZ" esto tendría que funcionar:

Código
  1. Const HKEY_LOCAL_MACHINE = &H80000002
  2. strComputer = "El nombre de la maquina remota"
  3.  
  4. Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" _
  5. & strComputer & "\root\default:StdRegProv")
  6.  
  7. strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Tablet PC"
  8. strValueName = "Ident"
  9.  
  10. oReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, ver
  11. Wscript.Echo "Su valor es: " & ver


Título: Re: Permisos acceso a clave de registro PC remoto
Publicado por: EdePC en 8 Febrero 2022, 14:28 pm
Me parece que RegRead y RegWrite no soportan máquinas remotas, por eso siempre te manda error de que la Raíz no es válida, entiéndase raíz a: HKLM o HKCU o HKEY_LOCAL_MACHINE o HKEY_CURRENT_USER

La opción de usar WMI como comenta .xAk. requiere bastante configuración de permisos. Supongo que lo más sencillo es usar Regedit.exe con su interfaz gráfica, pero si lo quieres hacer por Scripting lo más sencillo sería usar Reg.exe en un Batch o llamar al Batch desde VBScript o llamar solo a Reg.exe, el único requisito adicional es tener activado y con contraseña la cuenta de Administrador en la PC remota (PC servidor), y poner las credenciales en la PC cliente. Si se quiere usar un usuario en particular no funciona por la UAC, a no ser que se desactive dicha UAC. Últimamente se usa PSExec para este tipo de cosas pero ya es un programa externo.

Para mi ejemplo voy a optar con activar y usar la cuenta de Administrador, se detallaran todos los requisitos para tenerlo claro:

En la PC Remota/Servidor (192.168.0.102):

Código
  1. :: Activar la cuenta de Administrador y ponerle un password (12345)
  2. Net User Administrador /Active:Yes
  3. Net User Administrador 12345
  4.  
  5. :: Ejecutar el servicio de Registro Remoto
  6. Net Start RemoteRegistry
  7.  
  8. :: Activar Compartir Archivos e Impresoras en el Firewall
  9. NetSh Firewall Set Service FileAndPrint Enable

En la PC Cliente:

Código
  1. :: Establecer las credenciales en el Administrador de Credenciales
  2. CmdKey /Add:192.168.0.102 /User:Administrador /Pass:12345
  3.  
  4. :: Usar Reg.exe para solicitar la versión del Sistema Operativo remoto
  5. Reg Query "\\192.168.0.102\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V "ProductName"
  6.  
  7. :: Usar Reg.exe para agregar una clave "CLAVE" con valor "VALOR", tipo de dato "REG_DWORD" y dato "1"
  8. Reg Add "\\192.168.0.102\HKLM\SOFTWARE\CLAVE" /V "VALOR" /T REG_DWORD /D "1" /F

:: Opcionalmente se puede terminar eliminando las credenciales
CmdKey /Delete:192.168.0.102

Con eso debería funcionar perfectamente para operaciones de Lectura y Escritura en el Registro remoto. El problema fundamental siempre son los permisos y credenciales.


Título: Re: Permisos acceso a clave de registro PC remoto
Publicado por: jarpon en 15 Febrero 2022, 10:48 am
Hola .Xack. EePC

Muchas gracias por vuestra ayuda no había podido probar hasta ahora, debo ser muy torpe porque no me funciona. Prefiero hacerlo por VBscript porque necesito guardar el contenido en una variable del PC local que utilizaran otras rutinas de VBscript.

Si leo el registro del usuario local, funciona sin problemas, pero cuando pongo el PC remoto me da el siguiente error:

Linea:4
El servidor remoto no existe o no esta disponible: GetObject
Código: 800A01CE

Registro remoto esta activado en ambos PC's.
Veos los equipos de red en ambos PC's y puedo abrir carpetas compartidas.
He dado todos los permisos al usuario del pc remoto que ya es administrador.
PC local puedo conectar al registro de red pero no puedo verlos.
Si cambio el nombre PCREMOTO por el PCLOCAL funciona.


Const HKEY_LOCAL_MACHINE = &H80000002
strComputer = "PCREMOTO"
 
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\default:StdRegProv")
 
strKeyPath = "SOFTWARE\WOW6432Node\PRUEBA"
strValueName = "PRUEBAString"
 
oReg.GetStringValue HKEY_LOCAL_MACHINE, strKeyPath, strValueName, ver
Wscript.Echo "Su valor es: " & ver


Supongo que se trata de permisos, pero no consigo que funcione.

Alguna idea?

Gracias por adelantado


Título: Re: Permisos acceso a clave de registro PC remoto
Publicado por: EdePC en 17 Febrero 2022, 13:27 pm
El nuevo método que estás implementando no requiere del servicio de Registro Remoto, sin embargo a nivel básico requiere tener habilitado el usuario Administrador con contraseña y puesto en el Firewall la Administración Remota. PERO lo más importante es el envío de credenciales que desde VBScript puro no lo vas a poder hacer, tendrías que usar RunAs.exe para hacer el envío de credenciales, por ejemplo:

En la PC Remota/Servidor (192.168.0.102):

Código
  1. :: Activar la cuenta de Administrador y ponerle un password (12345)
  2. Net User Administrador /Active:Yes
  3. Net User Administrador 12345
  4.  
  5. :: Activar la Administración Remota en el Firewall
  6. NetSh Firewall Set Service RemoteAdmin Enable

En la PC Cliente:

Código
  1. :: Crear el Script, por ejemplo "RemoteRegRead.vbs":
  2. Const HKLM = &H80000002
  3. pc = "192.168.0.102"
  4. Set oReg = GetObject("winmgmts:\\" & pc & "\root\default:StdRegProv")
  5. key = "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
  6. value = "ProductName"
  7. oReg.GetStringValue HKLM, key, value, rpta
  8. Wscript.Echo "Rpta: " & rpta
  9.  
  10. :: Usar RunAs para usar las credenciales y ejecutar el script
  11. RunAs /NetOnly /User:Administrador "WScript C:\Users\EdSon\Desktop\RemoteRegRead.vbs"

Ahora bien, si no quieres usar RunAs.exe tendrías que dejar prácticamente sin protección al Servidor para deshabilitar toda obstrucción, esto incluso es algo complejo porque no suele venir fácilmente documentado.

Citar
Prefiero hacerlo por VBscript porque necesito guardar el contenido en una variable del PC local que utilizaran otras rutinas de VBscript.

Si tu intención es solo guardar el resultante en una variable, puedes usar un método sencillo, por ejemplo el primero que planteé con Reg.exe o este último con RunAs.exe o usando herramientas de terceros como PSExec. El ejemplo para hacerlo con Reg.exe sería el siguiente:

En la PC Remota/Servidor (192.168.0.102):

Código
  1. :: Activar la cuenta de Administrador y ponerle un password (12345)
  2. Net User Administrador /Active:Yes
  3. Net User Administrador 12345
  4.  
  5. :: Ejecutar el servicio de Registro Remoto
  6. Net Start RemoteRegistry
  7.  
  8. :: Activar Compartir Archivos e Impresoras en el Firewall
  9. NetSh Firewall Set Service FileAndPrint Enable

En la PC Cliente:

Código
  1. ' Crear el Script, por ejemplo "RemoteRegQuery.vbs":
  2. pc = "192.168.0.102"
  3. Set sh = WScript.CreateObject("WScript.Shell")
  4. cmd = "CmdKey /Add:" & pc & " /User:Administrador /Pass:12345"
  5. sh.Exec(cmd)
  6. cmd = "Reg Query ""\\" & pc & "\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"" /V ProductName"
  7. Set rpta = sh.Exec(cmd)
  8. variable = rpta.StdOut.ReadAll()
  9. Call WScript.Echo(variable)

Con ello obtendrías en variable el resultado de usar el comando Reg.exe, en mi caso:

Citar

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
    ProductName    REG_SZ    Windows 7 Ultimate


Obviamente el Script debe ser ejecutado como administrador, a partir de ahí puedes parsear el resultado por ejemplo con Split:

Código
  1. value = Split(Split(variable, vbCrLf)(2), "    ")(3)
  2. Call WScript.Echo("_" & value & "_")

Bueno, esa sería la idea de usar comandos externos y recuperar su salida.


Título: Re: Permisos acceso a clave de registro PC remoto
Publicado por: jarpon en 23 Febrero 2022, 10:58 am
Buenos dias EdePC

Muchas gracias por tu ayuda al final lo conseguí con tu ultima aportación.

El problema era que yo utilizaba un usuario con credenciales de administrador, pero veo que debe ser si o si el usuario administrador activado como bien dijiste.

Solo tuve que modificar esta linea, no se porque pero ejecutando desde windows funcionaba pero desde la plataforma de la maquina no.

Set sh = WScript.CreateObject("WScript.Shell")  por  Set sh = CreateObject("WScript.Shell")

Si quisiera añadir una clave seria con Reg Add  correcto?

También hice la prueba en local, pero Reg query no funciona, es normal?

Otra vez mil gracias

Un saludo




Título: Re: Permisos acceso a clave de registro PC remoto
Publicado por: EdePC en 23 Febrero 2022, 12:50 pm
1. El problema era que yo utilizaba un usuario con credenciales de administrador, pero veo que debe ser si o si el usuario administrador activado como bien dijiste.

2. Solo tuve que modificar esta linea, no se porque pero ejecutando desde windows funcionaba pero desde la plataforma de la maquina no.

Set sh = WScript.CreateObject("WScript.Shell")  por  Set sh = CreateObject("WScript.Shell")

3. Si quisiera añadir una clave seria con Reg Add  correcto?

4. También hice la prueba en local, pero Reg query no funciona, es normal?

1. Esto es debido al UAC (Control de Cuentas de Usuario) que se introdujo desde Windows Vista. Por defecto solo el usuario "Administrador" tiene permitido saltarse el UAC. Si quieres usar otro Usuario tienes que deshabilitar la UAC o configurar para que TODOS los usuarios con permisos de administrador puedan saltársela.

2. Depende del Intérprete que estés utilizando, Script.exe y WScript.exe (.vbs) tienen innato el objeto WSCript, pero si usas otro intérprete como mshta.exe (.hta .htm, etc) u otro, pues ellos tienen otro objeto o directamente usar CreateObject como lo has hecho.

3. Si, como puse en mi primer mensaje, solo que tienes que considerar escapar las comillas si las vas a necesitar.

4. El script que puse está hecho para PCs remotas con IP válidas porque así lo requiere Reg.exe y CmdKey.exe, aunque puedes poner la IP de tu PC local (no loopback) pero debes iniciar el servicio de registro remoto. Lo mejor sería usar: pc = "." de esa manera Reg entenderá que es tu propia PC local y no requerirá nada de permisos remotos, CmdKey dará un error interno oculto pero el script funcionará sin problemas.


Título: Re: Permisos acceso a clave de registro PC remoto
Publicado por: jarpon en 26 Febrero 2022, 07:19 am
Muchos Gracias EdePC

Una última consulta.

Cual seria la forma mas rapida de verificar la comunicación o pérdida de comunicación con el PC remoto?. Lo hago con un ping pero tarda 2 seg. Necesitaría algo mucho más rápido milisegundos

Gracias


Título: Re: Permisos acceso a clave de registro PC remoto
Publicado por: jarpon en 27 Febrero 2022, 17:06 pm
Otra pequeña consulta.
Cuando leo los registros van apareciendo pantallazos rápidos del reg.exe en cada lectura. Se podrían ocultar?

Gracias