PRET是在波鸿鲁尔大学硕士论文范围内开发的一种新的打印机安全测试工具。它通过网络或USB连接到设备,并利用给定打印机语言的功能。目前,大多数激光打印机都支持PostScript、PJL和PCL。这使得捕获或操作打印作业、访问打印机的文件系统和内存,甚至造成设备物理损坏之类的事情变得很酷。所有攻击都详细记录在黑客打印机维基上。
PRET的主要思想是促进终端用户和打印机之间的通信。因此,在输入类似于UNIX的命令后,Pret会将其转换为PostScript、PJL或PCL,并将其发送到打印机,评估结果,然后将其转换回用户友好的格式。Pret提供了一系列对打印机攻击和模糊有用的命令。
Pret只需要一个Python2解释器。但是,对于彩色输出和SNMP支持,需要安装第三方模块:
如果在Windows控制台上运行且Unicode字符显示不正确,请安装Win_Unicode_Console模块:
对于实验性的无人驾驶打印(请参阅打印命令),需要安装ImageMagick和GhostScript:
用法:prepre.py[-h][-s][-q][-d][-i file][-o file]target{ps,pjl,pcl}位置参数:目标打印机设备或主机名{ps,pjl,pcl}要滥用的打印语言可选参数:-h,--Help显示此帮助消息并退出-s,--Safe验证语言是否受支持-q,--Quiet Suppress Warning and chit-chat-d,--debug进入调试模式(show Traffic。--从file-o file加载文件并运行命令,--log file记录发送到目标的原始数据。
PRET需要有效的目标和打印机语言作为参数。目标可以是网络打印机的IP地址/主机名(端口9100/tcp打开),也可以是本地USB打印机的/dev/usb/lp0之类的设备。要使用SNMP广播快速发现您的子网中的所有网络打印机,只需在不带参数的情况下运行Pret:
./prepre.py未给出目标,发现本地打印机解决设备正常运行时间状态────192.168.1.5 HP LaserJet 4250 10:21:49 Ready 192.168.1.11 HP LaserJet M3027 MFP 13天卡纸192.168。1.27利盟X792 153天准备就绪192.168.1.28 MFC-7860DW 16:31:17睡眠模式
要滥用的打印机语言必须是PS、PJL或PCL之一。并非所有打印机都支持所有语言,因此如果没有收到任何反馈,您可能需要切换语言。每种打印机语言都映射到一组不同的PRET命令,并且有不同的功能可供利用。
--在连接之前,外管局尝试通过IPP、HTTP和SNMP检查设备是否确实支持所选的打印语言(PS/PJL/PCL)。在非联网打印机(USB、并行电缆)上,此测试将失败。
--DEBUG显示实际发送到设备的数据流以及收到的反馈。请注意,报头数据和其他开销会被过滤。要查看整个流量,请使用Wireshark。也可以使用DEBUG命令在Pret会话中打开/关闭调试。
--LOAD FILENAME从文本文件读取并执行Pret命令。这对自动化很有用。稍后也可以通过LOAD命令在Pret会话中调用命令文件。
--log filename将发送到打印机的原始数据流的副本写入文件。这对于构建恶意打印作业文件非常有用,该文件可以部署在无法直接访问的另一台打印机上,例如通过从USB驱动器打印该文件。
连接到打印机设备后,您将看到Pret外壳,并可以执行各种命令:
$./pre.py laserjet.lan pjl_/|/_/__/||Pret|打印机开发工具包v0.25|=|-|Jens Mueller<;[email protected]>;|ô|_|ô|/.‘--.|“因为您的设备可以|-||/_\||-。||“比卡纸更有趣”|_||=L==H==|__|/(Jan Foerster创作的ASCII艺术)与laserjet.lan的连接已建立设备:HP LaserJet 4250欢迎使用PRET外壳。键入Help或?列出命令。laserjet.lan:/>;Help可用命令(键入Help<;topic>;):==append DEBUG EDIT FREE ID ls Open Restart Timeout猫DELETE env Fuzz Info Mirror printenv selftest ouch CD df exit get load mkdir put set traversalchvolDisable Find Help LOCK NVRAM PWD site unlock CLOSE DISPLAY FORMAT HOLD LOOP LOOP OFLINE RESET STATUS VERSION LASERJET.lan:/>;ls../../-834.profred-bind-devd../../-834.profied-bind-devd。
Help列出可用命令或获取有关Help的详细帮助。调试进入调试模式。将十六进制用于十六进制转储:调试[十六进制]从文件加载运行命令:加载cmd.txtloop用于多个参数的运行命令:LOOP<;cmd&>;<;arg1;<;arg2&>…。打开连接到远程设备:打开<;目标&>关闭与设备的连接。超时设置连接超时:超时<;秒&>发现通过SNMP发现本地打印机设备。打印图像文件或原始文本:打印<;文件>;|";文本&34;站点在打印机上执行自定义命令:站点<;命令&>退出解释程序。
┌─┬──┐│命令│ps│pjl│pcl│描述│├─┼─。──┤│ls│✓│列出远程目录的内容。││获取│✓│接收文件:获取<;文件&>││PUT│✓│SEND FILE:PUT<;本地文件&>││追加│✓│✓││附加到文件:APPED<;FILE&>lt;││DELETE│✓│删除远程文件:DELETE<;FILE>;││Rename│✓│││Rename远程文件:Rename<;old>;<;new>;││Find│✓│✓││递归列出目录内容。││将远程文件系统镜像到本地目录的│✓│✓││镜像。││CAT│✓│将远程文件输出到标准输出。││编辑│✓│使用VIM编辑远程文件。││Touch│✓│✓││更新文件时间戳:Touch<;文件&>││mkdir│✓│✓││创建远程目录:mkdir<;路径&>。│├─┼──┤│CD│✓│✓││更改远程工作目录。││pwd│✓│✓││显示设备上的工作目录。││CHVOL│✓│✓││更改远程卷:CHVOL<;卷>;││遍历│✓│✓││设置路径遍历:遍历<;路径>;│├─┼──┤│Format│✓│✓││初始化打印机的文件系统。││FUZZ│✓│✓││文件系统模糊:FUZZ<;Category>;│├─┴───┴─┤│Path-使用路径遍历策略探索文件系统结构。││写入-首先放入/追加文件,然后检查其是否存在。││对现有文件(如/etc/passwd)进行盲读测试。│├─┬──┤│DF│✓│✓││显示卷信息。││空闲│✓│显示可用内存。│└─┴──┘。
ID显示设备信息。version显示PostScript解释器版本。device显示可用的I/O设备。uptime显示系统正常运行时间(可能是随机的)。date显示打印机的系统日期和时间。pagecount显示打印机的页面计数器。lock设置startjob和系统参数密码。解锁取消设置startjob和系统参数密码。重新启动PostScript解释器。重置PostScript设置为出厂默认设置。禁用打印功能。销毁对打印机造成物理损坏。在所有硬拷贝上交叉放置打印机涂鸦:Cross<;font&>;;text>;替换要打印文档中的字符串:替换<;旧&>;新&>;捕获捕获要在此设备上打印的更多作业。按住启用作业保留。在最上面的词典中将关键字设置为值:设置<;key=value>;已知列表支持的PostScript运算符:已知<;运算符&>搜索所有字典。CATEGORY&>[DUMP]转储字典:DUMP<;dict>;字典:-system dict-statusdict-userdict-global aldict-serverdict-errordict-inderdict-CurrentSystems params-CurrentUserparams-currentpagedeviceconfig更改打印机设置:配置<;设置>;双面打印。副本数-设置副本数。经济模式--设定经济模式。底片-设置底片打印。镜像设置镜像倒置。
并非所有命令都受每台打印机支持。尤其是兄弟公司和京瓷公司的设备使用他们自己的PostScript克隆--BR-SCRIPT和KPDL--而不是授权原始的“Adobe PostScript”。PostScript语言的这种风格可能不是100%兼容的,特别是在捕获打印作业等安全敏感功能方面。大多数打印机都支持对文件系统的访问,但通常仅限于特定的沙盒目录。
ID显示设备信息。状态启用状态消息。版本显示固件版本或序列号(来自信息配置)。页面计数操作打印机的页面计数器:页面计数;数字&>打印v显示打印机环境变量:printenv;var&>;env显示环境变量(信息变量的别名)。set设置打印机环境变量:set<;var=。重新启动打印机。重置为出厂默认设置。selftest执行各种打印机自检。禁用打印功能。销毁会对打印机的NVRAM造成物理损坏。泛洪泛洪用户输入,可能会泄漏缓冲区溢出。锁定锁定控制面板设置和磁盘写入访问。解锁控制面板设置和磁盘写入访问。保持锁定启用作业保留。nvram NVRAM操作:NVRAM<;operation;NVRAM dump[ALL]-DUMP。NVRAM环