2022-04-28 16:01:33 +00:00
< details >
2024-01-05 23:28:30 +00:00
< summary > < strong > 零基础学习AWS黑客攻击到高级技巧< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > < / a > < strong > ! < / strong > < / summary >
2022-04-28 16:01:33 +00:00
2024-01-05 23:28:30 +00:00
支持HackTricks的其他方式:
2022-04-28 16:01:33 +00:00
2024-01-05 23:28:30 +00:00
* 如果您想在**HackTricks中看到您的公司广告**或**下载HackTricks的PDF**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组** ](https://discord.gg/hRep4RUj7f ) 或 [**telegram群组** ](https://t.me/peass ) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm** ](https://twitter.com/carlospolopm )**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github仓库提交PR来**分享您的黑客技巧**。
2022-04-28 16:01:33 +00:00
< / details >
2023-08-03 19:12:22 +00:00
# **介绍**
2020-07-15 15:43:14 +00:00
2024-01-05 23:28:30 +00:00
**未经许可的打印**本身可能是一个安全风险或违反公司政策。在打印作业需要收费的环境中,内部攻击者有动机绕过计费系统。此外,能够‘打印’是针对网络打印机的大多数攻击的先决条件。
2020-07-15 15:43:14 +00:00
2024-01-05 23:28:30 +00:00
在打印作业计费方面有两种主要方法:要么**直接让打印机处理,要么使用打印服务器作为中介**。第一种方法是特定于供应商的,通常涉及某种特殊的‘打印机驱动程序’,在此不再讨论。另一种方法涉及使用单独的打印服务器 - 通常是像[CUPS](https://en.wikipedia.org/wiki/CUPS)或[LPRng](https://en.wikipedia.org/wiki/LPRng)这样的软件实现 - 来处理计费, 这在公司和机构中非常常见。打印服务器可能使用LPD、IPP或其他打印协议, 并将作业转发给实际的打印机。**重要的是要注意,必须限制对打印机的直接网络访问**,否则攻击者可以**轻松绕过打印服务器**及其计费机制。这意味着要过滤对典型和非典型端口( LPD、IPP、raw、HTTP、SMB、FTP、SNMP) 的访问。
2020-07-15 15:43:14 +00:00
2024-01-05 23:28:30 +00:00
基本上有两种方法来规避打印作业计费系统:要么**冒充另一个用户,要么操纵打印页数的计数器**。以下针对LPRng( v3.8.B) 和CUPS( v2.1.4)安装进行了讨论,这些是在学术和企业环境中使用的流行开源打印系统。下面给出了两种系统的安全功能比较。
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
| 打印系统 | 协议 | 加密 | 认证 | 页数计数器 |
2021-10-18 11:21:18 +00:00
| --------------- | -------- | ---------- | -------------- | ------------ |
2023-08-03 19:12:22 +00:00
| **LPRng** | LPD | SSL/TLS | Kerberos, PGP | 硬件 |
| **CUPS** | IPP | SSL/TLS | Kerberos, HTTP | 软件 |
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
# 认证绕过
2020-07-15 15:43:14 +00:00
2024-01-05 23:28:30 +00:00
LPRng和CUPS都提供基于SSL的通道加密和像[Kerberos](https://en.wikipedia.org/wiki/Kerberos\_\(protocol\))、[PGP](https://en.wikipedia.org/wiki/Pretty\_Good\_Privacy)签名打印作业或HTTP [基本 ](https://en.wikipedia.org/wiki/Basic\_access\_authentication )/[摘要](https://en.wikipedia.org/wiki/Digest\_access\_authentication)认证的安全认证方案。如果**配置得当**,并且攻击者无法直接访问打印机,她将**无法冒充其他用户**。然而,这些安全功能是**可选的,而且在现实世界的打印服务器中很少应用**。相反, 作为LPD( LPRng) 或IPP( CUPS) 参数给出的**用户名被记录和计费** - 这可以由客户端设置为任意值。这样做的原因是大多数机构的简单成本效益考虑:**Kerberos需要在每个客户端上进行特殊设置**,而**HTTP**认证**要求**用户在想要打印某些东西时输入**密码**,而少量未计费的打印输出的成本是可以承受的。
2020-07-15 15:43:14 +00:00
2024-01-05 23:28:30 +00:00
您可以尝试使用**自定义用户名**打印来**验证适当的认证**,如下所示:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
lp -U nobody test.ps
```
2023-08-03 19:12:22 +00:00
# 页面计数器操纵
2020-07-15 15:43:14 +00:00
2023-08-03 19:12:22 +00:00
## 硬件页面计数器
2020-07-15 15:43:14 +00:00
2024-01-05 23:28:30 +00:00
为了正确的计费,**必须由打印系统确定打印的页面数量**,这不是一项简单的任务。**LPRng** 的作者们_假设打印机具有某种非易失性页面计数器机制, 该机制可靠且不受开/关电源周期的影响_。这种**硬件页面计数器**得到了大多数打印机的支持,并且在每次**打印**作业后, 通过LPRng **使用PJL读取** 。**HP**甚至记录了一项通过将打印机置于服务模式来**写入**到**页面计数器**变量的功能。通过这种方式, _HP LaserJet 1200、HP LaserJet 4200N_ 和 _HP LaserJet 4250N_ 的**页面计数器**可以在打印作业中被操纵。在要打印的文档的末尾,并通过[UEL](./#uel)分隔,只需将计数器重置为其原始值(例如,`2342`) :
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
\x1b%-12345X@PJL JOB
This page was printed for free
\x1b%-12345X@PJL EOJ
\x1b%-12345X@PJL JOB
@PJL SET SERVICEMODE=HPBOISEID
@PJL SET PAGES=2342
\x1b%-12345X@PJL EOJ
```
2024-01-05 23:28:30 +00:00
攻击者可能会设置打印页数为负数。请注意,将设备重置为[出厂默认设置](factory-defaults.md)也会**在某些测试设备上将页面计数器重置为零**。\
降低页面计数器也可以用来**以高于其价值的价格出售打印机**,这可以与购买二手车时的里程表相比较。然而,值得强调的是,**重置页面计数器并不一定是出于恶意目的**:出售价格过高的墨水给低成本的喷墨打印设备,并通过拒绝在打印一定数量的页面后使用第三方补充套件来封锁,是一个众所周知的商业模式——为了处理这种不道德的做法,重置页面计数器是完全合理的。
2020-07-15 15:43:14 +00:00
2024-01-05 23:28:30 +00:00
在较旧的HP激光打印机上, 可以使用[PRET](https://github.com/RUB-NDS/PRET)的`pagecount`命令来轻松设置硬件页面计数器:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
./pret.py -q printer pjl
Connection to printer established
Welcome to the pret shell. Type help or ? to list commands.
printer:/> pagecount 10
Old pagecounter: 53214
New pagecounter: 10
```
2023-08-03 19:12:22 +00:00
## 软件页面计数器
2020-07-15 15:43:14 +00:00
2024-01-05 23:28:30 +00:00
**CUPS** 使用了为所有主要页面描述语言实现的**软件页面计数器**。对于PostScript, 绕过计数的一种简单方法是在实际打印文档之前检查PageCount系统参数是否存在——在CUPS/Ghostscript中解释时会返回false, 如下所示。
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
currentsystemparams (PageCount) known {
2023-08-03 19:12:22 +00:00
< @\textit{[...] code which is only executed on a printer device [...]}@>
2020-07-15 15:43:14 +00:00
} if
```
2024-01-05 23:28:30 +00:00
这种方式下, CUPS 使用的计费软件渲染的文档与打印机的不同。**CUPS 只计算一页** —— 这似乎是一个**硬编码的最小值** —— 而**实际**的打印作业可能包含**数百** **页** 。请注意,使用 IPP 的‘ raw’ 队列/选项是必须的,否则 CUPS 会在作业到达页面计数器之前,使用 PostScript 到 PostScript 过滤器( Ghostscript 的 ps2write) 解析代码。
2020-07-15 15:43:14 +00:00
2024-01-05 23:28:30 +00:00
**如何测试这种攻击?**
2020-07-15 15:43:14 +00:00
2024-01-05 23:28:30 +00:00
**将**任意**多页 PostScript 文档**包裹在**上述代码**中并打印。然后访问 [`http://printserver:631/jobs?which_jobs=all` ](http://printserver:631/jobs?which\_jobs=all ) 并检查 CUPS 的页面计数器对于这个打印作业的记录。请注意,你必须建立一个 raw 队列。也就是说,一个不涉及过滤系统的队列,打印作业直接发送到打印机。对于 CUPS, 这是通过将内容类型设置为 `application/vnd.cups-raw` 来完成的。如果你的系统已经配置为使用要测试的打印服务器,只需使用:
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
lp -o raw test.ps
```
2022-04-28 16:01:33 +00:00
< details >
2024-01-05 23:28:30 +00:00
< summary > < strong > 从零到英雄学习AWS黑客技术, 通过< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > < / a > < strong > ! < / strong > < / summary >
2022-04-28 16:01:33 +00:00
2024-01-05 23:28:30 +00:00
支持HackTricks的其他方式:
2022-04-28 16:01:33 +00:00
2024-01-05 23:28:30 +00:00
* 如果您想在**HackTricks中看到您的公司广告**或**以PDF格式下载HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks商品**](https://peass.creator-spring.com)
* 发现[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs系列**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群组** ](https://discord.gg/hRep4RUj7f ) 或 [**telegram群组** ](https://t.me/peass ) 或在 **Twitter** 🐦 上**关注**我 [**@carlospolopm** ](https://twitter.com/carlospolopm )**。**
* **通过向** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) 和 [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github仓库提交PR来分享您的黑客技巧。
2022-04-28 16:01:33 +00:00
< / details >