ابزار برای اتصال سایه انسانی جلسات غیر مدیر به کاربر RDP در WinServer 2012R2

مشکل در طول دوره قرنطینه این شرکت به شرح زیر است: واقعاً لازم است تعداد بازدید از دفاتر توسط متخصصانی که در زمینه نرم افزارهای کاربردی خدمات و مشاوره می دهند به حداقل برسد و صادقانه بگوییم، کاربران اغلب بدون اینکه بخواهند در این زمینه تحقیق کنند از کمک متخصصان سوء استفاده می کنند. خود مسئله، آنها می گویند "آنها می آیند - کمک می کنند - آنها این کار را می کنند، اما من سیگار می کشم / قهوه می خورم و غیره." مشاوره تلفنی هنگام اشتراک گذاری سرور در صورت مشاهده صفحه از راه دور مؤثرتر است.

ابزار برای اتصال سایه انسانی جلسات غیر مدیر به کاربر RDP در WinServer 2012R2

پس از "اختراع" دوچرخه ما، اطلاعات منطقی در مورد موضوع مقاله به دست آمد: RDS Shadow – اتصال سایه به جلسات کاربر RDP در ویندوز سرور 2012 R2 یا حالت سایه کاربر غیرمجاز در سرور ویندوز یا واگذاری مدیریت جلسات RDP. همه آنها شامل استفاده از یک کنسول، حتی با عناصر یک گفتگوی ساده است.

تمام اطلاعات زیر برای کسانی است که انحرافات غیر طبیعی را به طور معمول تحمل می کند برای به دست آوردن نتیجه مطلوب، روش های غیر ضروری را ابداع کرد.
برای اینکه "گربه را از دم نکشم"، با آخرین مورد شروع می کنم: دوچرخه برای کاربر معمولی با استفاده از ابزار کار می کند. AdmiLink، که با تشکر از نویسنده آن.

I. کنسول و سایه RDP.

از آنجایی که استفاده با حقوق سرپرست کنسول مدیر سرور -> QuickSessionCollection -> با کلیک بر روی جلسه کاربر مورد نظر، انتخاب Shadow از منوی زمینه برای پرسنلی که نحوه استفاده از نرم افزار را آموزش می دهند، یک گزینه نیست، روش "چوبی" دیگری در نظر گرفته شد، یعنی:

1. شناسه RDP جلسه را بیابید:

query user | findstr Administrator

یا:

qwinsta | findstr Administrator 

علاوه بر این "| مدیر findstr«فقط زمانی راحت بود که می‌دانستی دقیقاً چیست مدیر شما نیاز دارید، یا فقط از قسمت اول استفاده کنید تا همه افراد وارد شده به سرور را ببینید.

ابزار برای اتصال سایه انسانی جلسات غیر مدیر به کاربر RDP در WinServer 2012R2

2. به این جلسه متصل شوید، مشروط بر اینکه در دامنه سیاست های گروه گزینه "تنظیم قوانین کنترل از راه دور برای جلسات کاربر از خدمات دسکتاپ از راه دور" با حداقل گزینه "مانیتور جلسه با مجوز کاربر" انتخاب شده است (بیشتر):

mstsc /shadow:127

لطفاً توجه داشته باشید که لیست فقط شامل ورود کاربران خواهد بود.

تکرار می کنم که بدون حقوق ادمین موارد زیر را دریافت خواهید کرد:

ابزار برای اتصال سایه انسانی جلسات غیر مدیر به کاربر RDP در WinServer 2012R2

اما برای اشکال زدایی اولیه برنامه که مورد بحث قرار خواهد گرفت، از یک حساب کاربری با حقوق مدیر استفاده کردم.

II. برنامه

بنابراین بیان مشکل: ایجاد یک رابط گرافیکی ساده برای اتصال به حس سایه کاربر با اجازه او، ارسال پیام به کاربر. محیط برنامه نویسی انتخاب شده Lazarus است.

1. لیست دامنه کامل کاربران "ورود به سیستم" - "نام کامل" را از مدیر یا دوباره از طریق کنسول دریافت می کنیم:

wmic useraccount get Name,FullName 

هیچ کس حتی این را منع نمی کند:

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

من فوراً می گویم که Lazarus بود که با پردازش این فایل مشکل داشت ، زیرا به طور پیش فرض رمزگذاری آن UCS-2 است ، بنابراین من فقط مجبور شدم آن را به صورت دستی به UTF-8 معمولی تبدیل کنم. تعداد زیادی تب در ساختار فایل یا بهتر است بگوییم فضاهای زیادی وجود دارد که تصمیم گرفته شد آنها را به صورت برنامه ای پردازش کنیم؛ دیر یا زود مشکل رمزگذاری حل می شود و فایل به صورت برنامه ای به روز می شود.

بنابراین، ایده این است که یک پوشه در دسترس کاربران برنامه داشته باشیم، به عنوان مثال c:test، که در آن 2 فایل وجود داشته باشد: اولی با login و نام کامل، دومی با id_rdp و ورود کاربران. بعد، ما این داده ها را به بهترین شکل ممکن پردازش می کنیم :).

در ضمن، برای ارتباط با لیست جلسات، این محتویات (ورودی و نام کامل) را به یک آرایه منتقل می کنیم:

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;

بابت "کد زیاد" پوزش می طلبم، نکات زیر مختصرتر خواهد بود.

2. با استفاده از روش مشابه پاراگراف قبلی، نتیجه پردازش لیست را در عنصر StringGrid می خوانیم، در حالی که من یک قطعه کد "معنی" را ارائه می دهم:

2.1 ما لیست فعلی جلسات RDP را در یک فایل دریافت می کنیم:

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 فایل را پردازش کنید (فقط خطوط مهم کد نشان داده شده است):

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. با کلیک بر روی خط با کاربر و شماره جلسه او، خود اتصال مستقیم:

  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. چند تزیین دیگر مانند مرتب سازی با کلیک بر روی دکمه رادیویی و پیام هایی به کاربر یا همه کاربران ساخته شده است.

ابزار برای اتصال سایه انسانی جلسات غیر مدیر به کاربر RDP در WinServer 2012R2

→ کد منبع کامل قابل مشاهده است اینجا

III. با استفاده از AdminLink - آنچه من دیدم:

AdminLink میانبری ایجاد می کند که به مکان ابزار اشاره می کند admilaunch.exeو یک کپی شخصی از ابزار راه اندازی AdmiRun.Exe که به عنوان مثال در پوشه کاربر قرار دارد وایا، نوع ج: کاربران ویندوز. به طور کلی، همه چیز خیلی بد نیست: شما می توانید با حقوق دسترسی به فایل میانبر و دیگران بازی کنید تا وجدان مدیریت خود را پاک کنید.

منبع: www.habr.com

اضافه کردن نظر