mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-02 17:41:04 +00:00
86 lines
7.9 KiB
Markdown
86 lines
7.9 KiB
Markdown
<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>
|