Uslužni program za human shadow vezu ne-administratora na RDP korisničke sesije u WinServer 2012R2

Problem tijekom razdoblja karantene poduzeća postao je sljedeći: doista je potrebno minimizirati broj posjeta uredima od strane stručnjaka za servisiranje i savjetovanje o aplikativnom softveru, a iskreno govoreći, korisnici često zlorabe pomoć stručnjaka ne želeći se udubiti u samom pitanju, oni kažu "oni će doći - oni će pomoći - oni će to učiniti, ali ja ću pušiti/piti kavu, itd." Telefonsko savjetovanje pri dijeljenju poslužitelja učinkovitije je ako gledate udaljeni zaslon.

Uslužni program za human shadow vezu ne-administratora na RDP korisničke sesije u WinServer 2012R2

Nakon "izuma" našeg bicikla pojavile su se zdrave informacije o temi članka: RDS Shadow – shadow veza s RDP korisničkim sesijama u sustavu Windows Server 2012 R2 ili Neprivilegirani korisnički način sjene u Windows poslužitelju ili Delegiranje upravljanja RDP sesijama. Svi oni uključuju korištenje konzole, čak i s elementima jednostavnog dijaloga.

Sve informacije u nastavku namijenjene su onima koji normalno podnosi abnormalne perverzije da biste dobili željeni rezultat, izmišljajući nepotrebne metode.
Kako ne bih "vukao mačku za rep", počet ću s posljednjim: bicikl radi za prosječnog korisnika koji koristi uslužni program AdmiLink, za što hvala njegovom autoru.

I. Konzola i RDP u sjeni.

Od upotrebe sa administratorska prava konzole Server Manager -> QuickSessionCollection -> klikom na sesiju korisnika od interesa, odabirom Shadow iz kontekstnog izbornika za osoblje koje podučava kako koristiti softver, nije opcija, razmatrana je druga "drvena" metoda, naime:

1. Saznajte RDP ID sesije:

query user | findstr Administrator

ili:

qwinsta | findstr Administrator 

Štoviše "| findstr Administrator“Bilo je zgodno samo kad si znao što točno administrator koji vam je potreban ili upotrijebite samo prvi dio kako biste vidjeli sve prijavljene na poslužitelj.

Uslužni program za human shadow vezu ne-administratora na RDP korisničke sesije u WinServer 2012R2

2. Povežite se s ovom sesijom, pod uvjetom da u domeni grupne politike Odabrana je opcija "Postavi pravila daljinskog upravljanja za korisničke sesije usluga udaljene radne površine" s odabranom barem opcijom "Nadgledaj sesiju s korisničkim dopuštenjem" (više):

mstsc /shadow:127

Imajte na umu da će popis sadržavati samo prijave korisnika.

Ponavljam da ćete bez administratorskih prava dobiti sljedeće:

Uslužni program za human shadow vezu ne-administratora na RDP korisničke sesije u WinServer 2012R2

Ali za preliminarno otklanjanje pogrešaka programa o kojem će se raspravljati, koristio sam račun s administratorskim pravima.

II. Program

Dakle, izjava problema: stvaranje nekog jednostavnog grafičkog sučelja za povezivanje s korisnikovim osjetilom sjene uz njegovo dopuštenje, slanje poruke korisniku. Odabrano programsko okruženje je Lazarus.

1. Dobivamo puni popis domena korisnika “login” - “puno ime” od administratora ili opet preko konzole:

wmic useraccount get Name,FullName 

nitko ne brani ni ovo:

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

Odmah ću reći da je Lazarus bio taj koji je imao problema s obradom ove datoteke, jer je prema zadanim postavkama njezino kodiranje UCS-2, pa sam je jednostavno morao ručno pretvoriti u obični UTF-8. Postoji mnogo kartica u strukturi datoteke, točnije puno prostora, koje je odlučeno programski obraditi; prije ili kasnije problem kodiranja će biti riješen, a datoteka će se ažurirati programski.

Dakle, ideja je imati mapu dostupnu korisnicima programa, npr. c:test, u kojoj će biti 2 datoteke: prva s prijavom i punim imenom, druga s id_rdp i prijavom korisnika. Dalje, te podatke obrađujemo najbolje što možemo :).

U međuvremenu, za povezivanje s popisom sesija, prenosimo ovaj sadržaj (prijava i puno ime) u polje:

procedure Tf_rdp.UserF2Array;
var 
  F:TextFile;   i:integer;   f1, line1:String;   fL: TStringList;
begin //f_d глобальный путь к размещению файлов 
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, '  ', '|',[]); //заменяем первый попавш.2пробела разделителем |
// удаляем все двойные пробелы
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('Ошибка обработки файла. Детали: '+E.Message);
 end;end;

Ispričavam se zbog "puno koda", sljedeće će točke biti sažetije.

2. Koristeći istu metodu iz prethodnog paragrafa, očitavamo rezultat obrade liste u StringGrid element, dok ću dati “značajan” dio koda:

2.1 Primamo trenutni popis RDP sesija u datoteci:

f1:=f_d+'user.txt';
cmdline:='/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); // можно и подольше ждать пока файл для чтения создается

2.2 Obradite datoteku (navedene su samo značajne linije koda):

StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; //кидаем в цикле в StringGrid1
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); //убираем из логина пробелы
if (SearchArr(login1)>=0) then //ищем в массиве из п1. логин и записываем в таблицу ФИО
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; // либо записываем плюсик:)
.... //в зависимости от выбора пользователя сортируем и форматируем по данным
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);  

3. Sama izravna veza klikom na liniju s korisnikom i njegovim brojem sesije:

  id:=(StringGrid1.Row);// узнаем номер строки  IntToStr(StringGrid1.Row)
  ids:=StringGrid1.Cells[2,id]; //получаем идентификатор rdp
  cmdline:='/c mstsc /shadow:'+ ids; //и подключаемся....
 if (b_rdp.Checked=True) then  if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;       

4. Napravljeno je još par ukrasa kao što je sortiranje klikom na radiobutton te poruke korisniku ili svim korisnicima.

Uslužni program za human shadow vezu ne-administratora na RDP korisničke sesije u WinServer 2012R2

→ Može se vidjeti cijeli izvorni kod здесь

III. Korištenje AdminLinka - što sam vidio:

AdminLink generira prečac koji upućuje na lokaciju uslužnog programa admilaunch.exei osobnu kopiju uslužnog programa za pokretanje AdmiRun.Exe koji se nalazi u mapi korisnika npr vasya, tip C:UsersvasyaWINDOWS. Općenito, nije sve tako loše: možete se igrati s pravima pristupa datoteci prečaca i drugima kako biste očistili vlastitu administratorsku savjest.

Izvor: www.habr.com

Dodajte komentar