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)或[**电报群组**](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
|
|
|
|
您可以让用户向多个IP的端口9100发送HTTP POST请求,尝试连接到开放的原始打印端口。如果找到,根据打印机的设置,**HTTP头要么以纯文本形式打印,要么被丢弃**。然而,**POST数据**可以包含任意的打印作业,如**PostScript**或**PJL**命令进行**解释**。
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
### 增强的跨站点打印
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
您可以使用XMLHttpRequest (XHR) JavaScript对象来执行对内部打印机的HTTP POST请求。迄今为止讨论的跨站点打印方法的一个限制是,由于同源策略,**数据只能发送到设备**,**无法接收**。为了**突破**同源策略的限制,您可以**使服务器**响应一个虚假但**有效的HTTP响应**,允许CORS请求(包括`Access-Control-Allow-Origin=*`)。攻击的示意图如下所示:
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
![使用CORS欺骗的高级跨站点打印](http://hacking-printers.net/wiki/images/thumb/c/ce/Cross-site-printing.png/900px-Cross-site-printing.png)
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
在这种增强的XSP变体中,结合了CORS欺骗,网络攻击者可以完全访问HTTP响应,从而允许他提取打印设备中的任意信息,如捕获的打印作业。下面是一个概念验证的JavaScript代码片段:
|
2020-07-15 15:43:14 +00:00
|
|
|
|
```javascript
|
|
|
|
|
job = "\x1B%-12345X\r\n"
|
2023-08-03 19:12:22 +00:00
|
|
|
|
+ "%!\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";
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
|
|
|
|
var x = new XMLHttpRequest();
|
|
|
|
|
x.open("POST", "http://printer:9100");
|
|
|
|
|
x.send(job);
|
|
|
|
|
x.onreadystatechange = function() {
|
2023-08-03 19:12:22 +00:00
|
|
|
|
if (x.readyState == 4)
|
|
|
|
|
alert(x.responseText);
|
2020-07-15 15:43:14 +00:00
|
|
|
|
};
|
|
|
|
|
```
|
2023-08-03 19:12:22 +00:00
|
|
|
|
### 跨站打印的限制
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
请注意,作为页面描述语言的PCL不适用于CORS欺骗,因为它只允许回显一个单一的数字。同样,PJL也不能使用,因为不幸的是它在所有回显的字符串前面添加了`@PJL ECHO`,这使得模拟有效的HTTP头部变得不可能。然而,这并不意味着增强的XSP攻击仅限于PostScript作业:可以使用PostScript来响应伪造的HTTP头部,并且[UEL](./#uel)可以进一步调用以切换打印机语言。这样,网络攻击者也可以获取PJL命令的结果。存在两个实现陷阱值得一提:首先,需要使用PostScript确定要响应的数据的正确的`Content-Length`。如果攻击者无法预测响应的总大小,并且分块编码也不是一个选项,她需要设置一个非常高的值并使用填充。其次,添加`Connection: close`头字段很重要,否则HTTP/1.1连接将保持活动状态,直到Web客户端或打印机设备触发超时,这意味着打印机在一段时间内将无法访问。
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
如果打印机设备支持纯文本打印,则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或打印机的嵌入式Web服务器。虽然所有协议都可以成功地测试使用跨协议脚本部署打印作业,但它们除了不使用伪造的CORS头部提供反馈之外,还存在一些缺点:
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
- 各种Web浏览器阻止对LPD和FTP端口的跨协议访问
|
|
|
|
|
- 直接通过嵌入式Web服务器进行打印的参数是特定于型号的
|
|
|
|
|
- IPP标准要求将HTTP POST请求的`Content-type`设置为`application/ipp`,而XHR对象无法完成此操作-然而,实际上是否关心不正确的类型取决于实现
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
下表比较了不同的跨站打印通道:
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
| 通道 | 端口 | 无反馈 | 未经请求的打印输出 | 标准化 | 被阻止的浏览器 |
|
|
|
|
|
| ------ | ---- | ------ | ------------------ | ------ | -------------- |
|
|
|
|
|
| Raw | 9100 | - | ✔ | ✔ | - |
|
|
|
|
|
| Web | 80 | ✔ | - | - | - |
|
|
|
|
|
| IPP | 631 | ✔ | - | ✔ | - |
|
|
|
|
|
| LPD | 515 | ✔ | - | ✔ | FF, Ch, Op |
|
|
|
|
|
| FTP | 21 | ✔ | - | ✔ | FF, Ch, Op, IE |
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
XSP的一个主要问题是找到打印机的正确地址或主机名。我们的方法是滥用大多数现代浏览器中实现的WebRTC,它具有枚举本地网络接口的IP地址的功能。给定本地IP地址,我们进一步使用XHR对象打开到剩余253个地址的9100/tcp端口的连接,使用PostScript和CORS欺骗来检索打印机产品名称,这在我们的测试中只需要几秒钟。如果打印机与受害者主机位于同一子网上,可以仅使用JavaScript检测到其地址。WebRTC正在为Safari开发,并且受到当前版本的Firefox、Chrome和Microsoft Edge的支持。Internet Explorer不支持WebRTC,但是VBScript和Java同样可以用于泄漏本地IP地址。如果无法检索到本地接口的地址,我们将采用智能暴力破解方法:我们尝试使用XHR对象连接到受害者路由器的80端口。为此,从各种可访问互联网资源中编译了一个包含115个默认路由器地址的列表。如果可以访问路由器,我们将按前面描述的方式扫描子网以查找打印机。
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
## 概念验证
|
2020-07-15 15:43:14 +00:00
|
|
|
|
|
2023-08-03 19:12:22 +00:00
|
|
|
|
可在[hacking-printers.net/xsp/](http://hacking-printers.net/xsp/)找到一个概念验证实现,证明了高级跨站打印攻击是实际可行的,对公司和机构构成了真实威胁。
|
2022-04-28 16:01:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<details>
|
|
|
|
|
|
2023-04-25 18:35:28 +00:00
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</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
|
|
|
|
- 发现我们的独家[NFT](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)或[**电报群组**](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>
|