Një utilitar për lidhjen e shadow të përdoruesve jo-administratorë në sesionet RDP në WinServer 2012R2.

Problemi gjatĂ« periudhĂ«s sĂ« punĂ«s nĂ«n karantinĂ« u shfaq kĂ«shtu: Ă«shtĂ« vĂ«rtet e nevojshme tĂ« minimizojmĂ« numrin e vizitave tĂ« specialistĂ«ve qĂ« ofrojnĂ« dhe kĂ«shillojnĂ« pĂ«r softuerin aplikativ, dhe tĂ« themi hapur, pĂ«rdoruesit shpesh abuzojnĂ« me ndihmĂ«n e specialistĂ«ve pa dĂ«shiruar tĂ« kuptojnĂ« vetĂ« çështjen, tĂ« thonĂ« "do tĂ« vijnĂ« — do tĂ« ndihmojnĂ« — do ta bĂ«jnĂ«, ndĂ«rsa unĂ« do tĂ« pi tym apo kafe e kĂ«shtu me radhĂ«". Konsultimi pĂ«rmes telefonit gjatĂ« aksesi tĂ« pĂ«rbashkĂ«t nĂ« server Ă«shtĂ« mĂ« efektiv, nĂ«se shikojmĂ« ekranin e largĂ«t.

Një utilitar për lidhjen e shadow të përdoruesve jo-administratorë në sesionet RDP në WinServer 2012R2.

Pas "shpikjes" sĂ« biçikletĂ«s sonĂ«, u shfaqin informacione tĂ« arsyeshme mbi temĂ«n e artikullit: RDS Shadow – lidhje e njohur me sesionet RDP tĂ« pĂ«rdoruesve nĂ« Windows Server 2012 R2 ose Rezhimi shadow i pĂ«rdoruesit tĂ« pa privilegjuar nĂ« windows server ose DelegojmĂ« administrimin e sesioneve RDP. TĂ« gjitha ato implicojnĂ« pĂ«rdorimin e konsolĂ«s, madje me elemente tĂ« dialogut tĂ« thjeshtĂ«.

Të gjitha informacionet e paraqitura më poshtë janë për ata që mirëpranojnë devijimet e çuditshme për të arritur rezultatin e dëshiruar, duke shpikur mënyra të panevojshme.
Për të "mos e tërhequr macen për bisht", do të filloj me të fundit: biçikleta funksionon për përdoruesin normal me anë të utilitarit AdmiLink, për të cilin e falenderojmë autorin.

I. Konsola dhe shadow RDP.

Duke qenĂ« se pĂ«rdorimi me privilegj admini tĂ« konsolĂ«s Server Manager -> QuickSessionCollection -> duke klikuar mbi sesionin e pĂ«rdoruesit qĂ« na intereson, duke zgjedhur nĂ« menunĂ« kontekstuale Shadow (Kopja e Hijes) pĂ«r stafin qĂ« instrukton pĂ«r pĂ«rdorimin e softuerit, — nuk Ă«shtĂ« njĂ« opsion, u shqyrtua njĂ« metodĂ« tjetĂ«r "drunjake", konkretisht:

1. Zbulojmë id e sesionit RDP:

query user | findstr Administrator

ose:

qwinsta | findstr Administrator 

Dhe për më tepër "| findstr Administrator" ishte e dobishme vetëm kur e dinje se cilin informacion Administrator të nevojitet, ose përdor vetëm pjesën e parë për të parë të gjithë ata që janë regjistruar në server.

Një utilitar për lidhjen e shadow të përdoruesve jo-administratorë në sesionet RDP në WinServer 2012R2.

2. Lidhim me këtë sesion, me kusht që në politikat grupore të domainit parametri "Vendos rregullat për menaxhimin e largët për sesionet e përdoruesve të shërbimeve të punës në distancë" është zgjedhur me një parametër, të paktën "Vëzhgimi i sesionit me lejen e përdoruesit" (më shumë):

mstsc /shadow:127

Ju lutem vini re se në listë do të jenë vetëm hyrjet e përdoruesve.

Përsëris se pa privilegjet e adminit do të merrni ndokënd ndryshe:

Një utilitar për lidhjen e shadow të përdoruesve jo-administratorë në sesionet RDP në WinServer 2012R2.

Por para debugging fillestar të programit, për të cilin do të flasim, kam përdorur një llogari me të drejta administratori.

II. Programi

Pra, qëllimi është: të krijohet një ndërfaqe grafike e thjeshtë për të lidhur me sensorin e errët të përdoruesit me lejen e tij, dhe për të dërguar një mesazh përdoruesit. Mjedisi i programimit është zgjedhur Lazarus.

1. Marrim listën e plotë të përdoruesve "login" - "emri i plotë" nga administrativa, ose gjithashtu përmes konsolës:

wmic useraccount get Name,FullName 

askush nuk ndalon ashtu:

wmic useraccount get Name,FullName > c:testusername.txt

Të them menjëherë, se pikërisht në Lazarus kishte problem me përpunimin e këtij skedari, pasi për default kodimi i tij ishte UCS-2, prandaj duhej thjesht të konvertohej manualisht në UTF-8 të zakonshme. Në strukturën e skedarit kishte shumë tabulime, më saktë shumë hapësira, që u vendos të përpunoheshin programikisht, herët a vonë do të zgjidhet problemi i kodimit dhe skedari do të përditësohet programikisht.

Pra, në ide, një dosje e disponueshme për përdoruesit e programit, për shembull c:test, në të cilën do të kenë 2 skedare: e para me login dhe emrin e plotë, e dyta me id_rdp dhe login të përdoruesve. Më pas, këto të dhëna i përpunojmë si mundemi:).

Dhe që tani për të lidhur me listën e sesioneve, e transferojmë këtë (login dhe emrin e plotë) përmbajtje në një array:

procedure Tf_rdp.UserF2Array;
var 
  F:TextFile;   i:integer;   f1, line1:String;   fL: TStringList;
begin 

f1:=f_d+'user_name.txt';     

fL := TStringList.Create; 
fL.Delimiter := '|'; fL.StrictDelimiter := True;
AssignFile(F,f1); 
try 
  reset(F); ReadLn(F,line1);
  i:=0;
while not eof(F) do 
begin
ReadLn(F,line1);
line1:= StringReplace(line1, '  ', '|',[]); 
while pos('  ',line1)>0 do line1:= StringReplace(line1, '  ', ' ', [rfReplaceAll]);
begin
if (pos('|',line1)>0) then
begin 

fL.DelimitedText :=line1; 
if (fL[0]'') then 
begin 
 inc(i); 
 fam[0,i]:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]);
 fam[1,i]:=fL[0];
 end;end;end;end; 
 CloseFile(F);
 Fl.Free;
 except
 on E: EInOutError do  ShowMessage('Gabim në përpunimin e skedarit. Detajet: '+E.Message);
 end;end;

Ju kërkoj ndjesë për "shumë kod", pikat në vijim do të jenë më të shkurtra.

2. Po njëjtën metodë si në pikën e kaluar, lexojmë rezultatin e përpunimit të listës në elementin StringGrid, duke sjellë një pjesë "të rëndësishme" të kodit:

2.1 Marrim listën aktuale të sesioneve RDP në skedarin:

f1:=f_d+'user.txt';
cmdline:='\/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); \/\/ mund të presim edhe më shumë deri sa skedari të krijohet për lexim

2.2 Procesojmë skedarin (kanë treguar vetëm rreshtat e rëndësishëm të kodit):

StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; \/\/ hedhim në cikël në StringGrid1
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); \/\/heqim hapësirat nga login-i
if (SearchArr(login1)>=0) then \/\/kërkojmë në array nga p1. login dhe shkruajmë në tabelën FIO
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; \/\/ ose shkruajmë një plus:)
.... \/\/ në varësi të zgjedhjes së përdoruesit, rendisim dhe formatizojmë sipas të dhënave
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);  

3. Vetë lidhja kur klikoni mbi rreshtin me përdoruesin dhe numrin e sesionit të tij:

  id:=(StringGrid1.Row);\/\/ marrim numrin e rreshtit  IntToStr(StringGrid1.Row)
  ids:=StringGrid1.Cells[2,id]; \/\/ marrim identifikuesin rdp
  cmdline:='\/c mstsc \/shadow:'+ ids; \/\/dhe lidhemi....
 if (b_rdp.Checked=True) then  if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;       

4. Janë bërë disa zbukurime të tjera si renditja me klikim mbi radiobutton, dhe mesazhet për përdoruesin ose për të gjithë përdoruesit.

Një utilitar për lidhjen e shadow të përdoruesve jo-administratorë në sesionet RDP në WinServer 2012R2.

→ Kodu i plotĂ« mund tĂ« shihet kĂ«tu

III. PĂ«rdorimi i AdminLink — ajo qĂ« kam parĂ«:

AdminLink për të vërtetë gjeneron një shkurtore, e cila të referohet në vendndodhjen e utilitarit admilaunch.exe, dhe kopjën personale të utilitarit të nisjes AdmiRun.Exe e cila ndodhet në dosjen e përdoruesit, për shembull vasya, në stilin C:UsersvasyaWINDOWS. Në përgjithësi, nuk është gjithçka kaq keq: me të drejtat e aksesit në skedarin e shkurtoreve dhe të tjerat, për të pastruar ndërgjegjen tonë administrative, mund të luajmë.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster