Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Manipulieren der Benutzerangaben bei Named Pipes (https://www.delphipraxis.net/161890-manipulieren-der-benutzerangaben-bei-named-pipes.html)

lordnoxx 26. Jul 2011 11:44

Manipulieren der Benutzerangaben bei Named Pipes
 
Hallöchen zusammen. Ich habe eine Client-Server Anwendung (Windows), welche über Netzwerk mittels Named Pipes Daten austauschauscht. Soweit geht auch alles. Störend finde ich jedoch, dass eine Verbindung nur klappt, wenn auf dem Client-PC ein identischer User-Account läuft wie er auch auf dem ServerPC zu finden ist, oder auf dem Server das Gast-Konto aktiviert ist.

Nun ist es so, das auf dem Server ein fester User Acc vorhanden ist, welcher aber nicht auf den Clients eingerichtet werden soll. Mittels WireShark habe ich beobachtet, dass bei Verbindungsaufbau irgendwann ein TCP Packet übermittelt wird, welches Infos zu Benutzername und wohl auch Kennwort übermittelt.

Meine Frage ist nun: Gibt es eine Möglichkeit diese Benutzerinformationen vor der Übertragung zu ändern? So dass eine Verbindung zum Server möglich wird ohne dass auf dem Client das identische Konto angelegt sein muss.

Intuitiv gehe ich ja davon aus, dass diese Geschichten fest in den Windows DLLs implementiert sind, und man somit da nicht ran kommt. Alternativ dann vielleicht noch das direkte Manipulieren des TCP Packets. Naja..wie auch immer....kennt ihr eine Lösung? Vorschläge?

Netten Gruß

SirThornberry 26. Jul 2011 12:20

AW: Manipulieren der Benutzerangaben bei Named Pipes
 
Müsste man dann sicher beim erstellen/öffnen der Verbindung angeben. Entsprechend interessant wäre wie du derzeit die Pipes erstellst.

lordnoxx 26. Jul 2011 12:44

AW: Manipulieren der Benutzerangaben bei Named Pipes
 
Naja, ich sag mal soviel...Das ganze findet im Rahmen meiner Bachelorarbeit statt. Habe hierfür von meinem Betreuer eine Unit bekmomen, und ich weiß nun nicht ob ich die raußgeben darf. Im Prinzip müsste das schon gehen, aber ich will das vorher abklären. Was ich aber sagen kann: Diese Unit nennt sich Pipes.pas und geht auf den Programmierer rllibbiy zurück. Die Unit gab es einst hier zum Downloaden: http://home.roadrunner.com/~rllibby/source.html
Diese Seite ist aber inzwischen tot.

Klaus01 26. Jul 2011 12:52

AW: Manipulieren der Benutzerangaben bei Named Pipes
 
Hallo,

die Unit könnte auch hier zu finden sein.
Der Name des Autors ist der selbe.

Grüße
Klaus

lordnoxx 26. Jul 2011 14:05

AW: Manipulieren der Benutzerangaben bei Named Pipes
 
Jo genau das ist die Unit.

Bummi 26. Jul 2011 16:47

AW: Manipulieren der Benutzerangaben bei Named Pipes
 
Ich habe das ganze bei mir umgebastelt für das Verwenden der Zugriffsrechte einer Datei, welche als Property eingetragen werden kann.
Vielleciht kannst Du etwas von den Auszügen brauchen ....


Delphi-Quellcode:
procedure TPipeServer.GenACLFromFile;
//20110228 by Thomas Wassermann
var
  res : Boolean;
  len : Cardinal;
  fDaclPresent,fDaclDefaulted:Bool;
begin
  FACL := nil;
  if Assigned(FpFileSD) then DoHeapFree(FpFileSD);
  if FileExists(FACLFileName) then
    begin
    res := GetFileSecurity(PChar(FACLFileName),DACL_SECURITY_INFORMATION,FpFileSD,0,len);
    if res or (GetLastError() = ERROR_INSUFFICIENT_BUFFER) then
       begin
         FpFileSD := DoHeapAlloc(len);
         GetFileSecurity(PChar(FACLFileName),DACL_SECURITY_INFORMATION,FpFileSD,len,len);
         GetSecurityDescriptorDacl(FpFileSD,fDaclPresent,FACL,fDaclDefaulted);
       end;
    end;
end;

.....
.....
procedure TPipeServer.SetActive(Value: Boolean);
begin

  // Check against current state
  GenACLFromFile;
  if (FActive <> Value) then
  begin
     // Shutdown if active
     if FActive then DoShutdown;
     // Startup if not active
     if Value then DoStartup
  end;

end;


.....
.....


procedure InitializeSecurity(var SA: TSecurityAttributes;ACL:PACL=nil);
var sd:        PSecurityDescriptor;
begin

  // Allocate memory for the security descriptor
  sd:=AllocMem(SECURITY_DESCRIPTOR_MIN_LENGTH);

  // Initialise the new security descriptor
  InitializeSecurityDescriptor(sd, SECURITY_DESCRIPTOR_REVISION);

  // Add a NULL descriptor ACL to the security descriptor
  SetSecurityDescriptorDacl(sd, True, ACL, False);

  // Set up the security attributes structure
  with SA do
  begin
     nLength:=SizeOf(TSecurityAttributes) ;
     lpSecurityDescriptor:=sd;
     bInheritHandle:=True;
  end;

end;

lordnoxx 28. Jul 2011 11:04

AW: Manipulieren der Benutzerangaben bei Named Pipes
 
Ok, erstaml danke für die Antworten.

@ Bummi:

Wenn ich das richtig sehe, dann hast du hier am Code des Servers rumgedreht. Mir geht es aber nicht um die Serverseite sondern einzig um das was beim Client passiert. Ich verusuch das nochmal zu erklären.

Windows1(Client):
User: Bär
Pass: 1234

Windows2(Server):
User: großerBär
Pass: 4321

Der Einfachheit halber sei angenommen, dass sonst keine weiteren Accounts auf den Windowsen sind. Also auch keine Gast-Accounts.

Der Pipe-Client kann sich nun nicht mit dem Pipe-Server verbinden, da die Accounts unterschiedlich sind. Ist es jedoch möglich, im Code des Pipe-Clients statt [User: Bär Pass: 1234] die Kennung des Servers also [User: großerBär Pass: 4321] zu übermitteln, sollte eine Verbindung hinhauen.

Und auf die Umsetzung dieser Idee zielt meine Frage ab. Ist dies Möglich?

Bummi 28. Jul 2011 13:03

AW: Manipulieren der Benutzerangaben bei Named Pipes
 
Wenn ich Dich richtig verstanden habe meinst Du so etwas wie RunAs?
Die Zugriffsberechtigungen funktionieren wie Dateiberechtigungen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz