Tööriist, mis võimaldab mitteadministraatoritel luua inimese shadow-ühendusi kasutajate RDP seanssidele Windows Server 2012R2.

Ettevõttesse karantiiniajal teki järgmine probleem: tõepoolest on vaja vähendada spetsialistide kabinetti külastamise arvu, kes haldavad ja nõustavad rakendussoftas, ning tuleb tõe eest öelda, et kasutajad kuritarvitavad tihti spetsialistide abi, ei soovides asja süveneda, üteldes: «tulevad — aitavad — teevad, aga ma vahepeal suitsetan/joon kohvi jne.» Telefonikonsultatsioon koos serveri kaugjuurdepääsuga on efektiivsem, kui vaadata kaugelt ekraani.

Tööriist, mis võimaldab mitteadministraatoritel luua inimese shadow-ühendusi kasutajate RDP seanssidele Windows Server 2012R2.

Juba pärast meie ratta «leiutamist» tuli ette mõistetav teave artikli teemal: RDS Shadow – varjatud ühendus RDP seanssidele Windows Server 2012 R2-s või Varjatud režiim privileegita kasutajale Windows Serveris või Delegeerime RDP-seansside haldamise. Kõik need eeldavad konsooli kasutamist, isegi lihtsate dialoogielementidega.

Kõik allpool esitatud teave on mõeldud neile, kes normaalselt taluvad ebanormaalseid erootikaid vajaliku tulemuse saavutamiseks, leiutades ebavajalikke viise.
Et «kassi saba ei venitada», alustan viimasest: ratas töötab tavalise kasutaja jaoks utiliidi AdmiLink, mille eest autorile tänud.

I. Konsool ja shadow RDP.

Kuna console'i Server Manageri kasutamine -> QuickSessionCollection -> klikkides huvipakkuvale seansile, valides kontekstimenüüst Shadow (Varjatud koopia) -> QuickSessionCollection -> klõpsates huvipakkuvale seansile ja valides kontekstimenüüst Shadow (Varikoopia) koolitajate jaoks rakenduse kasutamisest, — ei ole variant, kaaluti teist «puidust» meetodit, nimelt:

1. Saame teada RDP seansi id:

query user | findstr Administrator

või:

qwinsta | findstr Administrator 

Kuid "| findstr Administrator" oli mugav ainult siis, kui tead, et just see Administraator on vajalik, või kasutada ainult esimest osa, et näha, kes kõik on serverisse sisse logitud.

Tööriist, mis võimaldab mitteadministraatoritel luua inimese shadow-ühendusi kasutajate RDP seanssidele Windows Server 2012R2.

2. Ühendame selle seansiga, tingimusel, et domeeni grupi poliitika parameeter «Seab kaugjuhtimise reeglid kaugjuurdepääsu seanssidele» on valitud vähemalt «Seansi vaatamine kasutaja loal» (täiendavalt):

mstsc /shadow:127

Palun pane tähele, et loendis on ainult kasutajate logid.

Kordan, et ilma administreerimisõigusteta saad järgmise:

Tööriist, mis võimaldab mitteadministraatoritel luua inimese shadow-ühendusi kasutajate RDP seanssidele Windows Server 2012R2.

Aga et programmi, millest jutt edasi, eelnevalt testida, kasutasin administraatori õigustega kontot.

II. Programm

Seega ülesande püstitamine: luua mingisugune lihtne graafiline liides, et jõuda varjatud sensu kasutaja loa korral, edastada sõnum kasutajale. Programmeerimiskeskkond on valitud Lazarus.

1. Saame administraatorilt täieliku domeeninime loendi «login» — «täisnimi» või taas, läbi console:

wmic useraccount get Name,FullName 

keegi ei keela isegi nii:

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

Ütlen kohe, et just Lazarus'il oli selle faili töötlemisega probleem, kuna selle kodeering on vaikimisi UCS-2, seega pidi lihtsalt käsitsi tavaliseks UTF-8-ks konverteerima. Failistruktuuris oli palju tabulatsioone, õigemini palju tühikuid, mida otsustati siiski programmiga töödelda, varem või hiljem lahendatakse kodeeringuülesanne, ja fail uuendatakse automaatselt.

Nii et idee on selline, et kaust, mis on programmikasutajatele kergesti kätte saadav, näiteks c:test, sisaldab 2 faili: esimene login ja fullname, teine id_rdp ja kasutajate login. Edasi töötleme neid andmeid, kuidas oskame :)

Ja seni, et seansside loendiga seostada, kanname selle (login ja fullname) sisu massiivi:

procedure Tf_rdp.UserF2Array;
var 
  F:TextFile;   i:integer;   f1, line1:String;   fL: TStringList;
begin //f_d globaalne tee failide salvestamiseks 
f1:=f_d+'user_name.txt';     //ülesanne lugeda faili sisu massiivi
fL := TStringList.Create; // rida allub metamorfoosidele eraldajatega
fL.Delimiter := '|'; fL.StrictDelimiter := True;
AssignFile(F,f1); 
try // Avame faili lugemiseks
  reset(F); ReadLn(F,line1);
  i:=0;
while not eof(F) do // Loeme ridu, kuni fail lõpeb
begin
ReadLn(F,line1);
line1:= StringReplace(line1, '  ', '|',[]); //asendame esimese kaks tühikut eraldajaga |
// eemaldame kõik kahekordse tühiku
while pos('  ',line1)>0 do line1:= StringReplace(line1, '  ', ' ', [rfReplaceAll]);
begin
if (pos('|',line1)>0) then
begin //kui eraldaja eksisteerib, sisestame selle massiivi
fL.DelimitedText :=line1; // jagame veergudeks
if (fL[0]<>'') then //kui kontol on nimi
begin //sisestame selle massiivi
 inc(i); // vabanege võimalike üksikute tühikute eest logis
 fam[0,i]:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]);
 fam[1,i]:=fL[0];
 end;end;end;end; // Valmis. Sulge faili.
 CloseFile(F);
 Fl.Free;
 except
 on E: EInOutError do  ShowMessage('Faili töötlemise viga. Üksikasjad: '+E.Message);
 end;end;

Palun vabandust «palju koodi» pärast, järgmised punktid saavad olema lakoonilisemad.

2. Samuti loeme eelnevas punktis nimetatud meetodit kasutades töötlemise tulemuse StringGrid elemendisse, tuues esile "olulise" koodi osa:

2.1 Saame aktuaalse RDP seansside nimekirja faili:

f1:=f_d+'user.txt';
cmdline:='/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); // võib oodata ka kauem, kuni fail loetakse

2.2 Töötleme faili (ainult olulised koodiread):

StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; //lisame tsüklis StringGrid1
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); //eemaldame loginnist tühikud
if (SearchArr(login1)>=0) then //otsime p1. massiivist loginit ja salvestame tabelisse FIO
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; //või salvestame plussmärgi:)
.... //kasutaja valiku põhjal sorteerime ja vormindame andmete järgi
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);  

3. Otsene ühendus kasutaja ja tema seansi numbriga klikkimisel:

  id:=(StringGrid1.Row);// saame rea numbri  IntToStr(StringGrid1.Row)
  ids:=StringGrid1.Cells[2,id]; //saame rdp identifikaatori
  cmdline:='/c mstsc /shadow:'+ ids; //ja ühendame....
 if (b_rdp.Checked=True) then  if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;       

4. Tehtud on veel paar kaunistust nagu sortimine klikkimisel radiobuttoni peal ja teavitamine kasutajale või kõigile kasutajatele.

Tööriist, mis võimaldab mitteadministraatoritel luua inimese shadow-ühendusi kasutajate RDP seanssidele Windows Server 2012R2.

→ Täielikku algse koodi saab näha siit

III. AdminLinki rakendamine — mida ma nägin:

AdminLink tõepoolest genereerib otsetee, mis viitab utiliidi asukohale admilaunch.exe, ja isiklike utiliidi käivituse koopia AdmiRun.Exe , mis asub kasutaja kaustas, näiteks vasya, nagu C:UsersvasyaWINDOWS. Üldiselt ei ole kõik nii hull: failide otseteede õiguste ja muude osas saab oma administraatorite südametunnistust puhastada.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster