7.9 KiB
零基础学习AWS黑客技术直至成为专家 htARTE (HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
- 如果您希望在HackTricks中看到您的公司广告或下载HackTricks的PDF版本,请查看订阅计划!
- 获取官方PEASS & HackTricks商品
- 探索PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
您可以让用户向多个IP的9100端口发送HTTP POST请求,尝试连接一个开放的原始打印端口。如果找到,HTTP头要么以纯文本形式打印,要么根据打印机的设置被丢弃。然而,POST数据可以包含任意打印任务,如PostScript或PJL命令以供解释。
增强的跨站点打印
您可以使用XMLHttpRequest (XHR) JavaScript对象来执行对内部打印机的HTTP POST请求。到目前为止讨论的跨站点打印方法的一个限制是,由于同源策略,数据只能发送到设备,不能接收。为了绕过同源策略的限制,您可以让 服务器响应一个虚假但有效的HTTP响应,允许CORS请求(包括Access-Control-Allow-Origin=*
)。下面给出了攻击的示意概览:
在这种增强型的XSP中 – 结合CORS欺骗 – 网络攻击者可以完全访问HTTP响应,这使他能够提取打印机设备中的任意信息,如捕获的打印作业。下面展示了一个概念验证的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可以进一步被调用来切换打印机语言。这样,网络攻击者也可以获取PJL命令的结果。存在两个实现上的陷阱值得一提:首先,需要用PostScript确定要响应的数据的正确Content-Length
。如果攻击者无法预测响应的总大小,而且分块编码也不是一个选项,她需要设置一个非常高的值并使用填充。其次,添加Connection: close
头部字段很重要,否则HTTP/1.1连接会保持活动状态,直到网络客户端或打印机设备触发超时,这意味着打印机将在一段时间内无法访问。
如果打印机设备支持纯文本打印,XHR的HTTP请求头部将被打印出硬拷贝 - 包括包含调用恶意JavaScript的URL的Origin
头部字段,这使得攻击者难以保持隐秘。这是不可避免的,因为我们无法控制打印机 - 并且在某些情况下可以禁用打印功能 - 直到HTTP正文被处理并且HTTP头部已经被打印机设备解释为纯文本。如果减少干扰是优先事项,攻击者可以尝试首先使用专有的PJL命令禁用打印功能,如在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/查看
从零到英雄学习AWS黑客攻击,通过 htARTE (HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载HackTricks的PDF,请查看订阅计划!
- 获取官方PEASS & HackTricks商品
- 发现PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在Twitter 🐦 上关注我 @carlospolopm.
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。