9100/tcp - PJL (Printer Job Language)

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

Basic Information

From here: Raw printing 是我们定义为与网络打印机的 9100/tcp 端口建立连接的过程。它是 CUPS 和 Windows 打印架构用于与网络打印机通信的默认方法,因为它被认为是‘用于打印机的最简单、最快且通常最可靠的网络协议’。Raw port 9100 printing,也称为 JetDirect、AppSocket 或 PDL-datastream,实际上 本身并不是一种打印协议。相反,所有发送的数据都会被打印设备直接处理,就像通过 TCP 的并行连接一样。与 LPD、IPP 和 SMB 不同,这可以向客户端发送直接反馈,包括状态和错误信息。这样的 双向通道 使我们能够直接 访问 PJLPostScriptPCL 命令的 结果。因此 raw port 9100 printing —— 几乎所有网络打印机都支持 —— 被用作与 PRET 和 PFT 进行安全分析的通道。

If you want to learn more about hacking printers read this page.

Default port: 9100

9100/tcp open  jetdirect

枚举

手动

nc -vn <IP> 9100
@PJL INFO STATUS      #CODE=40000   DISPLAY="Sleep"   ONLINE=TRUE
@PJL INFO ID          # ID (Brand an version): Brother HL-L2360D series:84U-F75:Ver.b.26
@PJL INFO PRODINFO    #Product info
@PJL FSDIRLIST NAME="0:\" ENTRY=1 COUNT=65535  #List dir
@PJL INFO VARIABLES   #Env variales
@PJL INFO FILESYS     #?
@PJL INFO TIMEOUT     #Timeout variables
@PJL RDYMSG           #Ready message
@PJL FSINIT
@PJL FSDIRLIST
@PJL FSUPLOAD         #Useful to upload a file
@PJL FSDOWNLOAD       #Useful to download a file
@PJL FSDELETE         #Useful to delete a file

自动

nmap -sV --script pjl-ready-message -p <PORT> <IP>
msf> use auxiliary/scanner/printer/printer_env_vars
msf> use auxiliary/scanner/printer/printer_list_dir
msf> use auxiliary/scanner/printer/printer_list_volumes
msf> use auxiliary/scanner/printer/printer_ready_message
msf> use auxiliary/scanner/printer/printer_version_info
msf> use auxiliary/scanner/printer/printer_download_file
msf> use auxiliary/scanner/printer/printer_upload_file
msf> use auxiliary/scanner/printer/printer_delete_file

打印机 Hacking tool

这是你想用来滥用打印机的工具: PRET

XPS/TrueType VM exploitation (Canon ImageCLASS)

  • 通过 PJL 传送 XPS:

  • @PJL ENTER LANGUAGE = XPS

  • 然后在相同的 TCP 连接上发送 XPS ZIP 字节。

  • 引用恶意字体的最小 XPS 页面:

<Glyphs Fill="#ff000000" FontUri="/Resources/evil.ttf" FontRenderingEmSize="12" OriginX="10" OriginY="10"/>
  • RCE primitive 概要 (TrueType hinting VM):

  • Hinting bytecode in TTF is executed by a TrueType VM. Canon’s VM lacked stack bounds checks.

  • CINDEX: OOB stack read → info leak

  • DELTAP1: unchecked relative stack pivot → controlled writes with subsequent pushes

  • Combine WS/RS (VM storage write/read) to stage values and perform a precise 32-bit write after pivot.

  • 利用概要:

  1. 使用上面的页面创建 XPS 并包含 /Resources/evil.ttf
  2. fpgm/prep 中,使用 CINDEX 进行 leak 并计算 stack_cur
  3. 使用 WS 暂存目标值;用 DELTAP1 进行 pivot 到目标地址;使用 RS 将其写入(例如写入一个 function pointer)以获得 PC control。
  • Send over 9100/tcp:
{ printf "@PJL ENTER LANGUAGE = XPS\r\n"; cat exploit.xps; } | nc -q0 <PRINTER_IP> 9100
  • exploit.xps 是一个有效的 XPS ZIP,包含 Documents/1/Pages/1.fpage/Resources/evil.ttf

Shodan

  • pjl port:9100

参考资料

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks