Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
PRET — Printer Exploitation Toolkit — инструмент, который сделал поиск в мусоре устаревшим. | Kitploit
Инструменты/GitHubGitHub/rub-nds/pret
Безопасность встроенных системАнализ уязвимостейЭксплуатацияСбор информацииФаззингТестирование на ПроникновениеАппаратная Безопасность
GitHubrub-nds/pret

PRET

Printer Exploitation Toolkit — инструмент, который сделал поиск в мусоре устаревшим.

Репозиторий
4.3k6513 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Сайт

PRET - Набор инструментов для эксплуатации принтеров

Ваш принтер защищен? Проверьте, пока это не сделал кто-то другой...

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

Основная идея PRET — упростить взаимодействие между конечным пользователем и принтером. Таким образом, после ввода команды в стиле UNIX, PRET преобразует её в PostScript, PJL или PCL, отправляет на принтер, оценивает результат и переводит обратно в удобный для пользователя формат. PRET предлагает множество команд, полезных для атак на принтеры и фаззинга.

PRET design

Установка

PRET требует только интерпретатор Python2. Однако для цветного вывода и поддержки SNMP необходимо установить сторонние модули:

root@kitploit:~
# pip install colorama pysnmp

Если вы работаете в консоли Windows и символы Unicode отображаются некорректно, установите модуль win_unicode_console:

root@kitploit:~
# pip install win_unicode_console

Для экспериментальной «бесдрайверной» печати (см. команду print) необходимо установить ImageMagick и GhostScript:

root@kitploit:~
# apt-get install imagemagick ghostscript

Использование

root@kitploit:~
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
Пример использования:
root@kitploit:~
$ ./pret.py laserjet.lan ps
$ ./pret.py /dev/usb/lp0 pjl
Позиционные аргументы:

PRET требует указания корректной цели и языка принтера в качестве аргументов. Целью может быть либо IP-адрес/имя хоста сетевого принтера (с открытым портом 9100/tcp), либо устройство, например /dev/usb/lp0 для локального USB-принтера. Чтобы быстро обнаружить все сетевые принтеры в вашей подсети с помощью SNMP-широковещания, просто запустите PRET без аргументов:

root@kitploit:~
./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 и сможете выполнять различные команды:

root@kitploit:~
$ ./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 приведен ниже:

root@kitploit:~
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:

root@kitploit:~
┌───────────┬─────┬─────┬─────┬────────────────────────────────────────┐
│ Команда   │ PS  │ PJL │ PCL │ Описание                            │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ ls        │  ✓  │  ✓  │  ✓  │ Показать содержимое удаленного каталога.     │
│ get       │  ✓  │  ✓  │  ✓  │ Получить файл: get <file>               │
│ put       │  ✓  │  ✓  │  ✓  │ Отправить файл: put <local file>            │
│ append    │  ✓  │  ✓  │     │ Добавить к файлу: append <file> <str>    │
│ delete    │  ✓  │  ✓  │  ✓  │ Удалить удаленный файл: delete <file>      │
│ rename    │  ✓  │     │     │ Переименовать удаленный файл: rename <old> <new> │
│ find      │  ✓  │  ✓  │     │ Рекурсивно вывести содержимое каталога.   │
│ mirror    │  ✓  │  ✓  │     │ Зеркально скопировать удаленную файловую систему в локальный каталог. │
│ cat       │  ✓  │  ✓  │  ✓  │ Вывести удаленный файл в stdout.          │
│ edit      │  ✓  │  ✓  │  ✓  │ Редактировать удаленные файлы с помощью vim.            │
│ touch     │  ✓  │  ✓  │     │ Обновить временные метки файла: touch <file>   │
│ mkdir     │  ✓  │  ✓  │     │ Создать удаленный каталог: mkdir <path>  │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ cd        │  ✓  │  ✓  │     │ Изменить рабочий удаленный каталог.       │
│ pwd       │  ✓  │  ✓  │     │ Показать рабочий каталог на устройстве.      │
│ chvol     │  ✓  │  ✓  │     │ Изменить удаленный том: chvol <volume>   │
│ traversal │  ✓  │  ✓  │     │ Установить обход пути: traversal <path>   │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ format    │  ✓  │  ✓  │     │ Инициализировать файловую систему принтера.      │
│ fuzz      │  ✓  │  ✓  │     │ Фаззинг файловой системы: fuzz <category>   │
├─ ─ ─ ─ ─ ─┴─ ─ ─┴─ ─ ─┴─ ─ ─┴─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
│   path   - Исследовать структуру ФС с помощью стратегий обхода путей.      │
│   write  - Сначала поместить/добавить файл, затем проверить его существование.      │
│   blind  - Тесты только на чтение существующих файлов, например /etc/passwd.      │
├───────────┬─────┬─────┬─────┬────────────────────────────────────────┤
│ df        │  ✓  │  ✓  │     │ Показать информацию о томе.               │
│ free      │  ✓  │  ✓  │  ✓  │ Показать доступную память.                 │
└───────────┴─────┴─────┴─────┴────────────────────────────────────────┘

Команды в режиме PS

root@kitploit:~
id         Показать информацию об устройстве.
version    Показать версию интерпретатора PostScript.
devices    Показать доступные устройства ввода-вывода.
uptime     Показать время работы системы (может быть случайным).
date       Показать системную дату и время принтера.
pagecount  Показать счетчик страниц принтера.

lock       Установить пароль startjob и системных параметров.
unlock     Сбросить пароль startjob и системных параметров.
restart    Перезапустить интерпретатор PostScript.
reset      Сбросить настройки PostScript к заводским.
disable    Отключить функцию печати.
destroy    Вызвать физическое повреждение NVRAM принтера.
hang       Выполнить бесконечный цикл PostScript.

overlay    Наложить EPS-файл на все печатные копии: overlay <file.eps>
cross      Добавить граффити на все печатные копии: cross <font> <text>
replace    Заменить строку в документах для печати: replace <old> <new>
capture    Захватывать последующие задания для печати на этом устройстве.
hold       Включить удержание заданий.

set        Установить ключ в значение в верхнем словаре: set <key=value>
known      Список поддерживаемых операторов PostScript: known <operator>
search     Поиск по всем словарям по ключу: search <key>
dicts      Возвращает список словарей и их разрешений.
resource   Список или дамп ресурса PostScript: resource <category> [dump]

dump       Сделать дамп словаря: dump <dict>
  Словари: - systemdict - statusdict - userdict 
                - globaldict - serverdict - errordict
                - internaldict - currentsystemparams
                - currentuserparams - currentpagedevice

config     Изменить настройки принтера: config <setting>
  duplex        - Установить двустороннюю печать.
  copies #      - Установить количество копий.
  economode     - Установить экономичный режим.
  negative      - Установить негативную печать.
  mirror        - Установить зеркальное отображение.

Не все команды поддерживаются каждым принтером. Особенно устройства Brother и Kyocera используют собственные клоны PostScript — Br-Script и KPDL — вместо лицензирования оригинального «Adobe PostScript». Такие версии языка PostScript могут быть не на 100% совместимы, особенно в отношении критичных для безопасности функций, таких как захват заданий печати. Доступ к файловой системе поддерживается большинством принтеров, однако обычно ограничен определенным изолированным каталогом.

Команды в режиме PJL

root@kitploit:~
id         Показать информацию об устройстве.
status     Включить сообщения о состоянии.
version    Показать версию прошивки или серийный номер (из 'info config').
pagecount  Управлять счетчиком страниц принтера: pagecount <number>
printenv   Показать переменную окружения принтера: printenv <VAR>
env        Показать переменные окружения (псевдоним для 'info variables').
set        Установить переменную окружения принтера: set <VAR=VALUE>

display    Установить сообщение на дисплее принтера: display <message>
offline    Перевести принтер в офлайн и отобразить сообщение: offline <message>
restart    Перезапустить принтер.
reset      Сбросить к заводским настройкам.
selftest   Выполнить различные самотесты принтера.
disable    Отключить функцию печати.
destroy    Вызвать физическое повреждение NVRAM принтера.
flood      Затопить пользовательский ввод, может выявить переполнение буфера.

lock       Заблокировать настройки панели управления и запись на диск.
unlock     Разблокировать настройки панели управления и запись на диск.
hold       Включить удержание заданий.

nvram      Операции с NVRAM: nvram <operation>
  nvram dump [all]           - Сбросить (всю) NVRAM в локальный файл.
  nvram read addr            - Прочитать один байт по адресу.
  nvram write addr value     - Записать один байт по адресу.

info       Показать информацию: info <category>
  info config      - Предоставляет информацию о конфигурации.
  info filesys     - Возвращает информацию о файловой системе PJL.
  info id          - Предоставляет номер модели принтера.
  info memory      - Определяет объем доступной памяти.
  info pagecount   - Возвращает количество напечатанных страниц.
  info status      - Предоставляет текущий статус принтера.
  info ustatus     - Список переменных статуса по требованию.
  info variables   - Список переменных окружения принтера.

Некоторые команды поддерживаются исключительно принтерами HP, так как другие производители реализовали только подмножество стандарта PJL. Это особенно касается команд на основе PML, таких как restart или reset. Включение долговременного удержания заданий с помощью команды hold, по-видимому, возможно только для некоторых устройств Epson. Доступ к NVRAM через команду nvram является собственной функцией принтеров Brother. Ограниченный доступ к файловой системе поддерживается различными устройствами HP, OKI, Konica, Xerox, Epson и Ricoh.

Команды в режиме PCL

root@kitploit:~
selftest   Выполнить самотест принтера.
info       Показать информацию: info <category>
  info fonts      - Показать установленные шрифты.
  info macros     - Показать установленные макросы.
  info patterns   - Показать пользовательские шаблоны.
  info symbols    - Показать наборы символов.
  info extended   - Показать расширенные шрифты.

PCL — это очень ограниченный язык описания страниц без доступа к файловой системе. Поэтому команды get/put/ls используют виртуальную файловую систему на основе макросов PCL, реализованную в основном ради хакерской ценности. Эта доказательная концепция показывает, что даже устройство, поддерживающее только минималистичные языки, такие как PCL, может использоваться для хранения произвольных файлов, например материалов, нарушающих авторские права. Хотя такой сервис обмена файлами сам по себе не является уязвимостью безопасности, он может расцениваться как «нецелевое использование услуги» в зависимости от корпоративной политики.

Список файлов

  • pret.py - Исполняемая основная программа
  • capabilities.py - Процедуры для проверки поддержки языка принтера
  • discovery.py - Процедуры для вывода списка принтеров с помощью SNMP-широковещания
  • printer.py - Общий код для описания устройства печати
  • postscript.py - Код, специфичный для PS (наследуется от класса printer)
  • pjl.py - Код, специфичный для PJL (наследуется от класса printer)
  • pcl.py - Код, специфичный для PCL (наследуется от класса printer)
  • helper.py - Вспомогательные функции для вывода, логирования, сокетов и т.д.
  • codebook.py - Статическая таблица кодов состояния/ошибок PJL
  • fuzzer.py - Константы для фаззинга файловой системы
  • mibs/* - Специфичные для принтера MIB-файлы SNMP
  • db/* - база данных поддерживаемых моделей

Начало работы

Учитывая возможности и различные проприетарные расширения в языках печати, таких как PostScript и PJL, проведение пентеста на принтерах — нетривиальная задача. PRET может помочь проверить и подтвердить известные проблемы в языке. Когда вы поиграете с инструментом, возможно, захотите выполнить систематический анализ безопасности принтеров. Хорошей отправной точкой является Шпаргалка по тестированию безопасности принтеров.

Удачного хакинга!

Скачать инструмент
  • lpd/* - Скрипты для фаззинга LPD