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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
Basic Information
From here: Raw printing 是我们定义为与网络打印机的 9100/tcp 端口建立连接的过程。它是 CUPS 和 Windows 打印架构用于与网络打印机通信的默认方法,因为它被认为是‘用于打印机的最简单、最快且通常最可靠的网络协议’。Raw port 9100 printing,也称为 JetDirect、AppSocket 或 PDL-datastream,实际上 本身并不是一种打印协议。相反,所有发送的数据都会被打印设备直接处理,就像通过 TCP 的并行连接一样。与 LPD、IPP 和 SMB 不同,这可以向客户端发送直接反馈,包括状态和错误信息。这样的 双向通道 使我们能够直接 访问 PJL、PostScript 或 PCL 命令的 结果。因此 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. -
利用概要:
- 使用上面的页面创建 XPS 并包含
/Resources/evil.ttf。 - 在
fpgm/prep中,使用CINDEX进行 leak 并计算stack_cur。 - 使用
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
参考资料
- Hacking printers using fonts (Canon ImageCLASS TrueType VM bugs)
- Apple TrueType Reference Manual – Instruction Set and VM (26.6 fixed point)
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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks

