警惕!你办公室的打印机,可能正被黑客远程操控!

打印机通道,即网络打印机控制协议,IPP、LPD、SMB(打印机共享文件)、RAW(9100),一般会支持打印机控制语言、页面备注说明语言,有些还开启FTP、HTTP文件上传或SNMP等通用协议进行打印,因此当存在FTP、HTTP也可能是打印机的FTP、HTTP
打印机语言,①打印机控制语言:PJL、PML,②页面描述语言:PS、PCL、PDL、XPS

页面描述语言-PDL:打印的版面越来越复杂,如版面上出现大最的文字排列及字体变化、文字的各种修饰和变形;版面上的图形、图像的位里、形状及相互关系越来越复杂等等,特别是彩色版面上五彩缤纷的颜色变化,形成了非常复杂的版面结构。那么打印机描述语言只是描述页面的样式?还是也附带具体的打印数据?---首先,描述语言和打印数据一起发送(嵌入在打印数据中)给打印机,打印机的打印控制器再分别解析。
将打印内容解释为描述语言文件,再将描述语言文件解释成光栅图像去打印。(GDI直接将打印内容解释成光栅图像)

目前业内的具体标准描述语言,分别是Adobe公司的PostScript语言、HP公司的PCL语言。
PCL(HP公司打印机):使用 PCL语言的打印机在处理文本或一些常见办公应用软件下的文档时具有非常明显的速度优势,比较适合一些普通的商务办公应用
PS(Adobe公司打印机):PS驱动程序在处理PDF文件或在Photoshop等软件下打印大的图形图像文件时具有一定的速度优势,同时其在图形表现准确度、色彩表现准 确度和一些字库表现准确度方面也比PCL语言有优势,适合对图形和色彩准确度要求比较高的专业应用。

打印机控制语言:除了用于控制打印作业,也可用于对打印机的设置、永久性修改设置,而这些都是供应商允许用户使用的语言,比如允许用户修复设置---基于控制语言,可控,导致容易被构造恶意的PJL来攻击---设置实际打印数据的文件格式

9100端口除了支持原始打印服务外,还支持 PCL、PostScript和PJL打印语言,因此可通过9100端口构造恶意的PJL命令,若执行PJL存在认证密码,爆破即可,不过一般都是未授权可直接执行PJL命令。
PJL命令参考:
不可忽视的打印机漏洞研究
https://www.freebuf.com/articles/web/205636.html

目前常用的漏洞:
控制打印作业
信息泄露,任意文件读查看打印的敏感文件
反弹root shell
信息收集,如IPP
拒绝服务
xss等
物理损坏

一般是通过以下服务执行上述攻击:
Web、FTP、SMB、SNMP、LPD、IPP或9100端口打印服务等

PRET教程:
上面各自复杂的打印机控制语言PJL命令,可通过PRET来简化执行PJL命令,无需记住复杂的PJL命令;PRET还支持描述语言PS、PCL命令
1、pret.py 执行运行,不带任何参数,是基于snmp寻找打印机
2、目标格式
pret.py ip ps //网络打印机
pret.py /dev/usb/lp0 pjl //usb打印机
–safe/-s 检查IPP,HTTP,SNMP,{PS、PCL、PJL}的可用性,方便进行除9100端口的其他渗透.python pret.py 76.11.8.117 -s ps
–debug 打开debug模式,可以很方便的看到原始的打印机语言,有助于对打印机语言和渗透原理的理解,类似sqlmap的-v 3

每个打印机语言都有不同的PRET命令,并具有不同的利用功能,help查看各种打印机语言的命令
各自命令如:
Mirror: 直接将打印机中的所有文件拷贝的本地,方便进一步的分析,寻找如打印记录的文件。
Destroy: 十分危险的功能,尝试的时候应当慎用,对打印机的NVRAM(一种RAM)造成物理性损坏。
Put:可以将文件上传到打印机上,由此回想到向linux打印机上传bot来进行控制,然而利用打印机语言无法有效的运行文件。
Print:可以远程打印文件。
Fuzz: pret自动使用脚本进行fuzz测试,包括常见敏感目录和文件。
tips:
大多数打印机都支持对文件系统的访问,但是通常仅限于某个沙盒目录

shodan检索语句:

device:priner
product:"xxx" port:9100
product:"hp LaserJet 4200" port:9100
fofa:
app="printer"
zoomeye
app:"printer"

目标可以是IPP打印服务器、或支持IPP的打印机
由于IPP是主要基于HTTP的协议(仅限于POST操作),但所有操作代码均使用二进制编码。
此时需要一个客户端程序,能将输入的明文指令可转为IPP的二进制编码,并将其发送到另一个IPP端点,当然,这些以特定的语法编写,

ippsample支持搭建ipp服务器demo,支持ipp客户端,即一个应用程序可以运行多个(4个)应用程序,即
ippfind,ippserver,ipptool和ippproxy
各个应用程序/子命令使用方法:
ippsample ippfind [ENTER]
ippsample ippserver [ENTER]
ippsample ippproxy [ENTER]
ippsample ipptool [ENTER]

工具安装:
wget https://github.com/KurtPfeifle/ippsample/releases/download/continuous/ippsample-x86_64.AppImage
chmod a+x ippsample-x86_64.AppImage
mv ippsample-x86_64.AppImage ippsample #重命名
查看帮助
./ippsample
查看网络上可用的iipserver
./ippsample ippfind
查看可用的示例test文件
./ippsample --listtest
查看test文件内容
./ippsample --cat create-job.test
调用test文件查询打印机功能
./ippsample ipptool -t -v ipp:///ipp/print get-printer-attributes.test
调用test文件发送打印文件作业
ippsample ipptool -f color.jpg -t -v ipp:///ipp/print print-job.test # send embedded 'color.jpg' to print
ippsample ipptool -f document-a4.pdf -t -v ipp:///ipp/print print-job.test # send embedded 'document-a4.pdf'
ippsample ipptool -f ./mylocal.pdf -t -v ipp:///ipp/print print-job.test # use path to PDF (outside AppImage)
调用test文件查询已完成的工作
ippsample ipptool -t -v ipp:///ipp/print get-completed-jobs.test

对于9100端口利用,nc即可、或PRET
PRET也可查询目标打印机是否支持IPP

posted @ 2025-06-03 12:34  VoltCary  阅读(256)  评论(0)    收藏  举报