Question creation de fichiers rdp pour remote connexion

Plus d'informations
il y a 15 ans 10 mois #2485 par daniel soares
bonjour

j'avais posté il y a quelques temps une solution pour pouvoir se connecter via TS sur des machines distantes sans avoir a se souvenir du compte a utiliser ou a reentrer systématiquement son mot de passe
j'utilisais par contre le send key pour entrer username et mot de passe ce qui n'était pas viable car ça plantait assez fréquemment

la seule solution fiable etant de construire entierement le fichier rdp avec mot de passe crypté

voici les liens dans lesquels j'ai puisé le moyen de creer un mot de passe crypté par la fonction dpapi utilisée par mstsc.exe

www.obviex.com/samples/dpapi.aspx
msdn.microsoft.com/en-us/library/aa380261.aspx
www.remkoweijnen.nl/blog/2007/10/18/how-...words-are-encrypted/

et merci a Laurent Dardenne pour son aide sur l'utilisation et la compréhension de csharp

voici le code powershell de base permettant de creer le fichier rdp
bien sur dans l'etat il n'est pas tres utile car il faut entrer les informations de serveur compte et mdp manuellement
mais c'est facilement automatisable (la preuve je l'ai fait :))
ceci est juste un exemple d'utilisation
[code:1]
$server = Read-Host \"entrer le nom du serveur\"
$dll =\"./DPAPI.dll\"
[void][Reflection.Assembly]::LoadFile($dll)

$secmdp = get-credential
$ptr = [System.Runtime.InteropServices.Marshal]::`
SecureStringToBSTR($secmdp.password)
$mdp = [System.Runtime.InteropServices.Marshal]::`
PtrToStringUni($ptr)

$user = $secmdp.username

$encrypted=[DPAPI]::Encrypt([DPAPI+KeyType]::`
UserKey,$mdp,$null,\"psw\"«»)

$fichier =
\"screen mode id:i:1
desktopwidth:i:1024
desktopheight:i:768
session bpp:i:16
#espace ajouté pour éviter le smiley
winposstr: s:2,3,169,96,1201,897
#espace ajouté pour éviter le smiley
full address: s:$server
compression:i:1
keyboardhook:i:2
audiomode:i:0
redirectdrives:i:1
redirectprinters:i:0
redirectcomports:i:0
redirectsmartcards:i:1
displayconnectionbar:i:1
autoreconnection enabled:i:1
#espace ajouté pour éviter le smiley
username: s:$user
#espace ajouté pour éviter le smiley
alternate shell: s:
#espace ajouté pour éviter le smiley
shell working directory: s:
disable wallpaper:i:1
disable full window drag:i:1
disable menu anims:i:1
disable themes:i:0
disable cursor setting:i:0
bitmapcachepersistenable:i:1
password 51:b:$encrypted
\"

Set-Content -path \"./$server.rdp\" -Value $fichier
mstsc \"./$server.rdp\"
Start-Sleep -Seconds 2
Remove-Item \"./$server.rdp\"


[/code:1]
et en fichier joint vous trouverez la dll a placer dans le meme repertoire que le script ainsi que son code csharp (le mode decryptage ne fonctionnne pas dans ce code)

si le serveur distant est un serveur 2000 TS demande systématiquement de reentrer le mot de passe
si qqun connait la solution (peut être dans les policies) pour passez outre je suis preneur.

La pièce jointe dpapi.zip est absente ou indisponible

Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 10 mois #2495 par Arnaud Petitjean
Excellent ! Merci Dan !

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 10 mois #2496 par Laurent Dardenne
Dan écrit:

(le mode decryptage ne fonctionnne pas dans ce code)

Oui c'est car le code associé ne prend pas en compte les modifications effectuées sur la méthode de cryptage.
Elle ne sont donc pas en phase.
[code:1]
public static string Decrypt( string cipherText,
string entropy,
out string description)
{
// Make sure that parameters are valid.
if (entropy == null) entropy = String.Empty;

return Encoding.UTF8.GetString(
Decrypt( Convert.FromBase64String(cipherText),
Encoding.UTF8.GetBytes(entropy),
out description));
}
[/code:1]
Puisque la modif de la méthode de cryptage s'appuie sur de l'unicode ici aussi on doit modifier le codage.
Dans un premier temps essaie de remplacer UTF8 par Unicode. Je ne suis pas certains que cela soit suffisant mais je n'ai pas le temps pour le moment de me pencher sur cette adaptation.<br><br>Message édité par: Laurent Dardenne, à: 23/06/08 13:33

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 10 mois #2497 par daniel soares

Oui c'est car le code associé ne prend pas en compte les modifications effectuées sur la méthode de cryptage.


oui Laurent
je n'ai rien fait sur la parti décryptage car je ne l'utilise pas pour l'instant
je vais étudier la question quand je testerai la méthode machine du cryptage (si j'ai bien compris tous les comptes connectés sur une machine pourront decrypter le meme mot de passe )

je ne crois pas que cette méthode existe pour le cryptage utilisé par powershell.
çà me permettrait sur un serveur a n'avoir qu'a crypter une seule fois la liste des mots de passe communs a une équipe.

je pense qu'il faut plus que modifier le codage car il y a aussi une boucle qui traite chaque caractère du mot de passe (j'imagine qu'elle doit aussi exister sur le décryptage)

enfin si tu trouve une solution avant moi je te promets que je ne t'en voudrai pas ;)

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.074 secondes
Propulsé par Kunena