hacktricks/network-services-pentesting/pentesting-printers/print-job-manipulation.md
2023-08-03 19:12:22 +00:00

5.9 KiB
Raw Blame History

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

内容覆盖

一种简单的操纵打印输出外观的方法是使用叠加
PCL有一个文档化的功能,可以将叠加宏放在文档的顶部。不幸的是,此功能仅限于当前打印作业,无法永久设置。
PostScript默认情况下不提供此功能,但可以通过重新定义每个PostScript文档中打印当前页面的showpage运算符来编程实现。攻击者可以在其中插入自己的代码,然后调用运算符的原始版本。
因此她可以使用自定义的EPS文件覆盖要打印的所有页面。这种黑客技术可以用于向文档的硬拷贝添加任意图形或字体(通过叠加空白页面然后添加自定义内容可以完全改变文档的外观)。
显然只有在使用PostScript作为打印机驱动程序且未设置StartJobPassword的情况下,此方法才能成功。

如何测试此攻击?

在ps模式下使用PRETcrossoverlay命令,然后断开连接并打印任意文档:

./pret.py -q printer ps
Connection to printer established

Welcome to the pret shell. Type help or ? to list commands.
printer:/> overlay overlays/smiley.eps
printer:/> cross whoa "HACKED"
printer:/> exit

内容替换

即使攻击者可以在现有文档上放置覆盖层,她也无法修改原始文档中的特定值,除非她知道其确切结构。有时候,人们不仅想添加自定义内容,还想解析和替换现有文档的部分内容。
在PostScript文件中替换文本的问题可以简化为从渲染的文档中提取字符串的问题。这并不是一件简单的事情因为字符串可以由PostScript程序自身动态构建。因此在文档源代码中进行简单的解析和替换不是一个选择。
您可以使用重新定义的show操作符。show操作符接受一个字符串作为输入该字符串将绘制到当前页面的特定位置。通过重新定义操作符可以优雅地提取文本。这种方法也可以用于在字符串被绘制之前有针对性地搜索和替换。
这种方法对于直接发送到打印机的基于LaTeX的PostScript文档非常成功但对于由GIMP生成的PostScript文件失败因为它们不是字符串而是它们的表示的光栅图形。当CUPS处理任何文档格式甚至是PostScript本身都会出现相同的问题。从理论上讲这种语言结构也可以被解析并且应该成为进一步研究的对象。

如何测试此攻击?

在ps模式下使用PRETreplace命令然后断开连接并打印一个包含“DEF”的PostScript文档。

./pret.py -q printer ps
Connection to printer established

Welcome to the pret shell. Type help or ? to list commands.
printer:/> replace "ABC" "DEF"
printer:/> exit
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥