hacktricks/network-services-pentesting/pentesting-printers/cross-site-printing.md

86 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<details>
<summary><strong>零基础学习AWS黑客技术直至成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您希望在**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来分享您的黑客技巧。
</details>
您可以让用户向多个IP的9100端口发送HTTP POST请求尝试连接一个开放的原始打印端口。如果找到**HTTP头要么以纯文本形式打印要么根据打印机的设置被丢弃**。然而,**POST数据**可以**包含**任意打印任务,如**PostScript**或**PJL**命令以供**解释**。
### 增强的跨站点打印
您可以使用XMLHttpRequest (XHR) JavaScript对象来执行对内部打印机的HTTP POST请求。到目前为止讨论的跨站点打印方法的一个限制是由于同源策略**数据只能发送到设备****不能接收**。为了**绕过**同源策略的**限制**,您可以**让** **服务器**响应一个虚假但**有效的HTTP响应**允许CORS请求包括`Access-Control-Allow-Origin=*`)。下面给出了攻击的示意概览:
![具有CORS欺骗的高级跨站点打印](http://hacking-printers.net/wiki/images/thumb/c/ce/Cross-site-printing.png/900px-Cross-site-printing.png)
在这种增强型的XSP中 结合CORS欺骗 网络攻击者可以完全访问HTTP响应这使他能够提取打印机设备中的任意信息如捕获的打印作业。下面展示了一个概念验证的JavaScript代码片段
```javascript
job = "\x1B%-12345X\r\n"
+ "%!\r\n"
+ "(HTTP/1.0 200 OK\\n) print\r\n"
+ "(Server: PostScript HTTPD\\n) print\r\n"
+ "(Access-Control-Allow-Origin: *\\n) print\r\n"
+ "(Connection: close\\n) print\r\n"
+ "(Content-Length: ) print\r\n"
+ "product dup length dup string cvs print\r\n"
+ "(\\n\\n) print\r\n"
+ "print\r\n"
+ "(\\n) print flush\r\n"
+ "\x1B%-12345X\r\n";
var x = new XMLHttpRequest();
x.open("POST", "http://printer:9100");
x.send(job);
x.onreadystatechange = function() {
if (x.readyState == 4)
alert(x.responseText);
};
```
### 跨站打印的限制
请注意,作为页面描述语言的**PCL** **不适用于CORS欺骗**,因为它只允许**回显单个数字**。不幸的是,**PJL同样不能使用**,因为它会在所有回显的字符串前添加`@PJL ECHO`这使得模拟有效的HTTP头部变得不可能。然而这并**不**意味着**增强型XSP攻击**仅限于**PostScript**作业PostScript可以用来响应一个伪造的HTTP头部而且[**UEL**](./#uel)**可以进一步被调用来切换打印机语言**。这样网络攻击者也可以获取PJL命令的结果。存在两个实现上的陷阱值得一提首先需要用PostScript确定要响应的数据的正确`Content-Length`。如果攻击者无法预测响应的总大小,而且分块编码也不是一个选项,她需要设置一个非常高的值并使用填充。其次,添加`Connection: close`头部字段很重要否则HTTP/1.1连接会保持活动状态,直到网络客户端或打印机设备触发超时,这意味着打印机将在一段时间内无法访问。
**如果**打印机设备支持**纯文本打印**XHR的**HTTP请求**头部将被打印出硬拷贝 - 包括包含调用恶意JavaScript的URL的`Origin`头部字段,这使得攻击者**难以保持隐秘**。这是不可避免的,因为我们无法控制打印机 - 并且在某些情况下可以禁用打印功能 - 直到HTTP正文被处理并且HTTP头部已经被打印机设备解释为纯文本。如果减少干扰是优先事项攻击者可以尝试**首先使用专有的PJL命令禁用打印功能**,如在[PJL jobmedia](http://hacking-printers.net/wiki/index.php/Document_processing#PJL_jobmedia)中提出的使用其他潜在的XSP通道如IPP、LPD、FTP或打印机的嵌入式网络服务器。虽然所有协议都能成功地使用跨协议脚本的变体来部署打印作业但它们除了不提供使用伪造的CORS头部的反馈之外还有一些缺点
* 各种网络浏览器阻止了对LPD和FTP端口的跨协议访问
* 通过嵌入式网络服务器直接打印的参数是特定于模型的
* IPP标准要求HTTP POST请求的`Content-type`设置为`application/ipp`这不能通过XHR对象完成 - 但是否真的关心错误类型取决于实现
下面给出了跨站打印通道的比较:
| 通道 | 端口 | 无反馈 | 未经请求的打印输出 | 标准化 | 被阻止的 |
| ----- | ---- | ------ | ------------------ | ------ | ------------ |
| Raw | 9100 | - | ✔ | ✔ | - |
| Web | 80 | ✔ | - | - | - |
| IPP | 631 | ✔ | - | ✔ | - |
| LPD | 515 | ✔ | - | ✔ | FF, Ch, Op |
| FTP | 21 | ✔ | - | ✔ | FF, Ch, Op, IE|
XSP的一个主要问题是**找到**打印机的**正确地址**或主机名。我们的方法是**滥用WebRTC**它在大多数现代浏览器中实现并具有枚举本地网络接口IP地址的功能。给定本地IP地址XHR对象进一步用于打开连接到端口**9100/tcp**对所有剩余的253个地址使用PostScript和CORS欺骗来检索打印机产品名称这在我们的测试中只需几秒钟。如果打印机与受害者主机在同一子网上其地址可以仅使用JavaScript检测到。WebRTC正在为Safari开发并得到了Firefox、Chrome和Microsoft Edge当前版本的支持。Internet Explorer不支持WebRTC但VBScript和Java同样可以用来泄露本地IP地址。如果无法检索到本地接口的地址我们采用智能暴力破解方法我们尝试使用XHR对象连接到受害者路由器的80端口。为此我们编制了一个包含115个来自各种互联网可访问资源的默认路由器地址的列表。如果可以访问路由器我们将按前述方法扫描子网中的打印机。
## 概念验证
一个概念验证实现表明,高级跨站打印攻击是实际可行的,并且对公司和机构构成了现实世界的威胁,可在[hacking-printers.net/xsp/](http://hacking-printers.net/xsp/)查看
<details>
<summary><strong>从零到英雄学习AWS黑客攻击通过</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
支持HackTricks的其他方式
* 如果您想在**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来分享您的黑客技巧。
</details>