
Printer Exploitation Toolkit — инструмент, который сделал поиск в мусоре устаревшим.
Ваш принтер защищен? Проверьте, пока это не сделал кто-то другой...
PRET — это новый инструмент для тестирования безопасности принтеров, разработанный в рамках магистерской диссертации в Рурском университете Бохума. Он подключается к устройству через сеть или USB и использует возможности заданного языка принтера. В настоящее время поддерживаются PostScript, PJL и PCL, которые используются большинством лазерных принтеров. Это позволяет выполнять такие интересные задачи, как захват или изменение заданий печати, доступ к файловой системе и памяти принтера или даже физическое повреждение устройства. Все атаки подробно описаны в Hacking Printers Wiki.
Основная идея PRET — упростить взаимодействие между конечным пользователем и принтером. Таким образом, после ввода команды в стиле UNIX, PRET преобразует её в PostScript, PJL или PCL, отправляет на принтер, оценивает результат и переводит обратно в удобный для пользователя формат. PRET предлагает множество команд, полезных для атак на принтеры и фаззинга.

PRET требует только интерпретатор Python2. Однако для цветного вывода и поддержки SNMP необходимо установить сторонние модули:
# pip install colorama pysnmp
Если вы работаете в консоли Windows и символы Unicode отображаются некорректно, установите модуль win_unicode_console:
# pip install win_unicode_console
Для экспериментальной «бесдрайверной» печати (см. команду print) необходимо установить ImageMagick и GhostScript:
# apt-get install imagemagick ghostscript
usage: pret.py [-h] [-s] [-q] [-d] [-i file] [-o file] target {ps,pjl,pcl}
positional arguments:
target printer device or hostname
{ps,pjl,pcl} printing language to abuse
optional arguments:
-h, --help show this help message and exit
-s, --safe verify if language is supported
-q, --quiet suppress warnings and chit-chat
-d, --debug enter debug mode (show traffic)
-i file, --load file load and run commands from file
-o file, --log file log raw data sent to the target
$ ./pret.py laserjet.lan ps
$ ./pret.py /dev/usb/lp0 pjl
PRET требует указания корректной цели и языка принтера в качестве аргументов. Целью может быть либо IP-адрес/имя хоста сетевого принтера (с открытым портом 9100/tcp), либо устройство, например /dev/usb/lp0 для локального USB-принтера. Чтобы быстро обнаружить все сетевые принтеры в вашей подсети с помощью SNMP-широковещания, просто запустите PRET без аргументов:
./pret.py
No target given, discovering local printers
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
Язык принтера для эксплуатации должен быть одним из ps, pjl или pcl. Не все языки поддерживаются каждым принтером, поэтому при отсутствии обратной связи можно переключить язык. Каждому языку принтера соответствует свой набор команд PRET и разные возможности для эксплуатации.
--safe пытается проверить через IPP, HTTP и SNMP, поддерживается ли выбранный язык печати (PS/PJL/PCL) устройством перед подключением. На принтерах без сетевого подключения (USB, параллельный кабель) этот тест завершится ошибкой.
--quit подавляет определение модели принтера, приветственное сообщение и прочий диалог.
--debug показывает поток данных, фактически отправленный на устройство, и полученный ответ. Обратите внимание, что заголовки и другие служебные данные фильтруются. Для просмотра всего трафика используйте Wireshark. Отладку также можно включать/выключать в сеансе PRET с помощью команды debug.
--load filename читает и выполняет команды PRET из текстового файла. Это полезно для автоматизации. Файлы команд также можно вызывать позже в сеансе PRET с помощью команды load.
--log filename записывает копию необработанного потока данных, отправленного на принтер, в файл. Это может быть полезно для создания вредоносного файла задания печати, который можно развернуть на другом принтере, не имеющем прямого доступа, например, распечатав его с USB-накопителя.
После подключения к устройству принтера вы увидите оболочку PRET и сможете выполнять различные команды:
$ ./pret.py laserjet.lan pjl
________________
_/_______________/|
/___________/___//|| PRET | Printer Exploitation Toolkit v0.25
|=== |----| || by Jens Mueller <[email protected]>
| | ô| ||
|___________| ô| ||
| ||/.´---.|| | || 「 cause your device can be
|-||/_____\||-. | |´ more fun than paper jams 」
|_||=L==H==||_|__|/
(ASCII art by
Jan Foerster)
Connection to laserjet.lan established
Device: hp LaserJet 4250
Welcome to the pret shell. Type help or ? to list commands.
laserjet.lan:/> help
Available commands (type help <topic>):
=======================================
append debug edit free id ls open restart timeout
cat delete env fuzz info mirror printenv selftest touch
cd df exit get load mkdir put set traversal
chvol disable find help lock nvram pwd site unlock
close display format hold loop offline reset status version
laserjet.lan:/> ls ../../
- 834 .profile
d - bin
d - dev
d - etc
d - hp
d - hpmnt
- 1276 init
d - lib
d - pipe
d - tmp
laserjet.lan:/> exit
Список общих команд PRET приведен ниже:
help List available commands or get detailed help with 'help cmd'.
debug Enter debug mode. Use 'hex' for hexdump: debug [hex]
load Run commands from file: load cmd.txt
loop Run command for multiple arguments: loop <cmd> <arg1> <arg2> …
open Connect to remote device: open <target>
close Disconnect from device.
timeout Set connection timeout: timeout <seconds>
discover Discover local printer devices via SNMP.
print Print image file or raw text: print <file>|"text"
site Execute custom command on printer: site <command>
exit Exit the interpreter.
Общие операции с файловой системой с реализацией, специфичной для PS/PJL/PCL: