Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
PRET — Printer Exploitation Toolkit - 쓰레기통 뒤지기를 쓸모없게 만든 도구. | Kitploit
도구/GitHubGitHub/rub-nds/pret
Embedded Systems SecurityVulnerability AnalysisExploitationInformation GatheringFuzzingPenetration TestingHardware Security
GitHubrub-nds/pret

PRET

Printer Exploitation Toolkit - 쓰레기통 뒤지기를 쓸모없게 만든 도구.

저장소 보기
4.3k6513년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

PRET - 프린터 익스플로잇 툴킷

프린터가 안전한가요? 다른 사람이 확인하기 전에 확인하세요...

PRET는 Ruhr University Bochum의 석사 논문 범위 내에서 개발된 프린터 보안 테스트를 위한 새로운 도구입니다. 네트워크 또는 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 콘솔에서 실행 중이고 유니코드 문자가 올바르게 표시되지 않는 경우 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                프린터 장치 또는 호스트명
  {ps,pjl,pcl}          악용할 인쇄 언어

optional arguments:
  -h, --help            도움말 메시지를 표시하고 종료
  -s, --safe            언어 지원 여부 확인
  -q, --quiet           경고 및 잡담 표시 안 함
  -d, --debug           디버그 모드 진입 (트래픽 표시)
  -i file, --load file  파일에서 명령어를 불러와 실행
  -o file, --log file   대상에 전송된 원시 데이터를 기록
사용 예:
root@kitploit:~
$ ./pret.py laserjet.lan ps
$ ./pret.py /dev/usb/lp0 pjl
위치 인수:

PRET는 유효한 대상과 프린터 언어를 인수로 필요로 합니다. 대상은 네트워크 프린터의 IP 주소/호스트명(포트 9100/tcp가 열려 있어야 함) 또는 로컬 USB 프린터의 /dev/usb/lp0와 같은 장치일 수 있습니다. 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      사용 가능한 명령어 목록 또는 'help cmd'로 자세한 도움말.
debug     디버그 모드 진입. hexdump를 사용하려면 'hex' 사용: debug [hex]
load      파일에서 명령어 실행: load cmd.txt
loop      여러 인수에 대해 명령어 실행: loop <cmd> <arg1> <arg2> …
open      원격 장치에 연결: open <target>
close     장치 연결 해제.
timeout   연결 시간 제한 설정: timeout <seconds>
discover  SNMP를 통해 로컬 프린터 장치 검색.
print     이미지 파일 또는 원시 텍스트 인쇄: print <file>|"text"
site      프린터에서 사용자 정의 명령 실행: site <command>
exit      인터프리터 종료.

PS/PJL/PCL 특정 구현이 포함된 일반 파일 시스템 작업은 다음과 같습니다:

root@kitploit:~
┌───────────┬─────┬─────┬─────┬────────────────────────────────────────┐
│ Command   │ PS  │ PJL │ PCL │ Description                            │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ 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   - 경로 순회 전략으로 fs 구조 탐색.                         │
│   write  - 먼저 put/append 파일 후 존재 여부 확인.                   │
│   blind  - /etc/passwd 같은 기존 파일에 대한 읽기 전용 테스트.      │
├───────────┬─────┬─────┬─────┬────────────────────────────────────────┤
│ df        │  ✓  │  ✓  │     │ 볼륨 정보 표시.                       │
│ free      │  ✓  │  ✓  │  ✓  │ 사용 가능한 메모리 표시.              │
└───────────┴─────┴─────┴─────┴────────────────────────────────────────┘

PS 모드 명령어

root@kitploit:~
id         장치 정보 표시.
version    PostScript 인터프리터 버전 표시.
devices    사용 가능한 I/O 장치 표시.
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>
  Dictionaries: - systemdict - statusdict - userdict 
                - globaldict - serverdict - errordict
                - internaldict - currentsystemparams
                - currentuserparams - currentpagedevice

config     프린터 설정 변경:  config <setting>
  duplex        - 양면 인쇄 설정.
  copies #      - 복사본 수 설정.
  economode     - 경제 모드 설정.
  negative      - 네거티브 인쇄 설정.
  mirror        - 미러 반전 설정.

모든 명령어가 모든 프린터에서 지원되는 것은 아닙니다. 특히 Brother 및 Kyocera 장치는 원래 'Adobe PostScript'를 라이선스하지 않고 자체 PostScript 클론(Br-Script 및 KPDL)을 사용합니다. 이러한 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 표준의 하위 집합만 구현했기 때문입니다. 이는 restart 또는 reset과 같은 PML 기반 명령어에서 특히 그렇습니다. 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/* - 프린터 특정 SNMP MIB
  • db/* - 지원 모델 데이터베이스
  • lpd/* - LPD 퍼징 스크립트

시작하기

PostScript 및 PJL과 같은 인쇄 언어의 기능과 다양한 독점 확장을 고려할 때, 프린터에 대한 침투 테스트를 수행하는 것은 쉬운 일이 아닙니다. PRET는 언어의 알려진 문제를 지원하고 확인하는 데 도움이 될 수 있습니다. 도구를 사용해 본 후에는 체계적인 프린터 보안 분석을 수행하고 싶을 수 있습니다. 좋은 시작점은 Printer Security Testing Cheat Sheet입니다.

즐거운 해킹 되세요!

도구 다운로드