[AutoIT]psexec sur registre distant

psexec sur registre distant [AutoIT] - Divers - Programmation

Marsh Posté le 22-03-2015 à 01:24:01    

Bonsoir/bonjour !
 
Dans le cadre du boulot, et vu que parfois le logiciel de PMAD perd un peu les pédales, je voulais m'orienter vers l'activation distante du bureau distant afin de prendre la main sur des machines dont je dois m'occuper.
Au début je m'orientais vers un code assez "simple" et fonctionnel dans le cadre personnel, mais dès qu'il s'agit de partir sur un domaine ça ne fonctionne plus : l'utilisation du service de registre distant.
 
Donc là "plan B" [:paco fpg:1] : l'utilisation de psexec pour exécuter du reg query (lecture) et reg delete/reg add (suppression et ré-écriture d'une nouvelle valeur)
Le tout se passant sur les clés :
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections = 1 -> désactivé / 0 -> activé
Et
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber = 3389 -> port de connexion
 
Donc 1er jet du code, pour l'instant je m'attarde sur la partie lecture de la valeur fDenyTSConnections pour savoir si c'est actif ou pas :

Code :
  1. #RequireAdmin
  2. #Region
  3. #AutoIt3Wrapper_Icon=remote.ico
  4. #AutoIt3Wrapper_UseX64=n
  5. #EndRegion
  6. Opt("guioneventmode", 1)
  7. #include <GUIConstantsEx.au3>
  8. #include <MsgBoxConstants.au3>
  9. #include <WindowsConstants.au3>
  10. #include <EditConstants.au3>
  11. #include <Array.au3>
  12. #include <File.au3>
  13. Local $hGUI = GUICreate("[Activation RDP Distante]", 600, 300)
  14. $Pic1 = GUICtrlCreatePic("mon_fond", 285, 0,0,0)
  15. GUISetBkColor (0xffffff)
  16. GUICtrlSetColor(-1, 0xff6347)
  17. GUICtrlSetBkColor(-1, 0xf0f8ff)
  18. GUICtrlCreateLabel("Activation RDP Distante - méthode PSExec", 5, 5, 590, 25)
  19. GUICtrlSetFont(-1,18,400,"Verdana" )
  20. GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
  21. ; information du PC cible
  22. GUICtrlCreateLabel("Cible :", 10, 43, 70, 25)
  23. $strComputer1 = GUICtrlCreateInput("127.0.0.1", 90, 40, 100, 20)
  24. GUICtrlCreateLabel("Utilisateur :", 10, 73, 70, 25)
  25. $strUser = GUICtrlCreateInput("administrateur", 90, 70, 100, 20)
  26. GUICtrlCreateLabel("Mot de passe :", 10, 103, 70, 25)
  27. $strPassword = GUICtrlCreateInput("", 90, 100, 100, 20,$ES_PASSWORD)
  28. GUICtrlCreateLabel("Port :", 10, 133, 70, 25)
  29. $strPort = GUICtrlCreateInput("3389", 90, 130, 100, 20)
  30. ; commandes
  31. GUICtrlCreateButton("Status", 200, 38, 90)
  32. GUICtrlSetOnEvent(-1, "_status" )
  33. GUICtrlCreateButton("Activer", 200, 68, 90)
  34. GUICtrlSetOnEvent(-1, "active" )
  35. GUICtrlCreateButton("Désactiver", 200, 98, 90)
  36. GUICtrlSetOnEvent(-1, "desactiv" )
  37. GUICtrlCreateButton("Redémarrer", 200, 128, 90)
  38. GUICtrlSetOnEvent(-1, "_reboot" )
  39. ; affichage informations
  40. $Info1 = GUICtrlCreateLabel("   ", 10, 160, 285, 25)
  41. GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
  42. $Info2 = GUICtrlCreateLabel("   ", 10, 175, 285, 25)
  43. GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
  44. GUICtrlCreateButton("Quitter", 500, 265, 90)
  45. GUICtrlSetOnEvent(-1, "_Exit" )
  46. GUISetState()
  47. GUICtrlSetState($Pic1, $GUI_DISABLE)
  48. GUISetOnEvent(-3, "_Exit" )
  49. While 1
  50.     Sleep(100)
  51. WEnd
  52. Func _status()
  53. $computer = GUICtrlRead($strComputer1)
  54. If $computer = "" Then
  55. $computer = @ComputerName
  56. GUICtrlSetData($strComputer1, "127.0.0.1" )
  57. EndIf
  58. $user = GUICtrlRead($strUser)
  59. $password = GUICtrlRead($strPassword)
  60. $iPID = Run(@ComSpec & ' /c ' & 'net use \\' & $computer & '\ipc$ /user:' & $user & ' ' & $password & ' & psexec \\' & $computer & ' -u ' & $user & '-p ' & $password & ' -i reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections'&chr(39)&' & pause', '', @SW_SHOW)
  61. ProcessWaitClose($iPID)
  62. $read = StdoutRead($iPID)
  63. Sleep(500)
  64. GUICtrlSetData($Info1, $read )
  65. ; reste à faire code pour extraire et afficher le bon résultat...
  66. ;If $read = "1" Then
  67. ; GUICtrlSetData($Info1, "Bureau à Distance : Désactivé" )
  68. ;ElseIf $read = "0" Then
  69. ; GUICtrlSetData($Info1, "Bureau à Distance : Activé" )
  70. ;ElseIf @error = 2 Then
  71. ; GUICtrlSetData($Info1, "Erreur : la clé n'a pas pu etre trouvé sur le " & $computer)
  72. ;ElseIf @error = 3 Then
  73. ; GUICtrlSetData($Info1, "Erreur : le PC " & $computer & " est inexistant ou indisponible." )
  74. ;Else
  75. ; GUICtrlSetData($Info1, "Erreur : erreur inconnue" )
  76. ;EndIf
  77. EndFunc
  78. Func desactiv()
  79. EndFunc
  80. Func active()
  81. EndFunc
  82. Func _reboot()
  83. $user = GUICtrlRead($strUser)
  84. $password = GUICtrlRead($strPassword)
  85. ; Run(@ComSpec & " /c " & "psexec \\" & $computer & " -u " & $user & "-p " & $password & " shutdown -f -r -t 0", "", @SW_HIDE)
  86. GUICtrlSetData($Info1, "Redémarrage distant initialisé." )
  87. GUICtrlSetData($Info2, "" )
  88. EndFunc
  89. Func _Exit()
  90.     Exit
  91. EndFunc   ;==>_Exit


La partie du code qui me pose problème c'est :

Code :
  1. $iPID = Run(@ComSpec & ' /c ' & 'net use \\' & $computer & '\ipc$ /user:' & $user & ' ' & $password & ' & psexec \\' & $computer & ' -u ' & $user & '-p ' & $password & ' -i reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections'&chr(39)&' & pause', '', @SW_SHOW)
  2. ProcessWaitClose($iPID)
  3. $read = StdoutRead($iPID)


En effet... rien. A l'affichage de la fenêtre ça me redemande le password du compte, or je le fournis déjà. Et après bim "impossible d'exécuter la commande".
 
Des idées ?


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 22-03-2015 à 01:24:01   

Reply

Marsh Posté le 22-03-2015 à 11:27:09    

Un peu partout sur le net, ça parle aussi de faire des choses au niveau du firewall après avoir changé la valeur dans le registre: http://ares.gobien.be:8080/2012/01 [...] th-psexec/ ou plus verbeux: http://blog.omotech.com/?p=1019
Ça vient peut être de la.
A+,


Message édité par gilou le 22-03-2015 à 11:28:20

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-03-2015 à 13:11:04    

Vu déjà côté pare-feu d'où justement mon "net use \\computer\ipc$ /user:mon_admin  mot_de_passe" scripté qui permet de by-pass ce problème.
 
Déjà ça avance à cause d'un espace oublié là : '-p ' pour du ' -p '
Et maintenant j'ai du Error code 1 (= la clé n'existe pas) dans ma fenêtre CMD qui pop avec les valeurs, alors que la clé existe [:mac_lane]  
 
'tin si je ne devais pas bosser sur de l'XP, je foutrais tout ça en powershell :o


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 27-03-2015 à 20:44:22    

[:the panda] pour savoir si quelqu'un à une idée...
J'avais pensé à un "plan C" (non pas comme [:emilie_jolie] ) : une activation distante du service de registre distant par psexec/psservice/sc, puis après utilisé des commandes classiques, mais bon pour les "futurs utilisateurs" ça risque d'être dans 90% des cas l'oubli de désactiver le registre distant une fois l'opération faite.
Quand à une automatisation avant fermeture ou après exécution de la commande (on ou off), ça risque d'alourdir beaucoup la transmission et donc le PC ciblé [:jey04]


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 27-03-2015 à 21:46:40    

J'ai regardé comment ça pourrait se faire en perl, au cas ou ça t’intéresserait (et a la limite, on doit pouvoir lancer son exécution par perl depuis autoit si necessaire), et j'ai trouvé ceci: http://www.perlmonks.org/?node_id=298374  cf en particulier le dernier post.
A+,

Reply

Marsh Posté le 28-03-2015 à 13:06:05    

Utilisation du service de registre distant, chose que je voudrais éviter le plus possible [:spamatounet]


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed