一台打印机也能读走服务器上的打印洞解/etc/passwd,这事听起来离谱,机任件读决但真发生过。意文去年某企业内网被渗透,取漏攻击者没碰业务系统,打印洞解只靠一台暴露在办公网的机任件读决网络打印机,就拿到了数据库配置文件。意文打印机成了跳板,取漏漏洞出在它的打印洞解Web管理界面上——一个没做路径校验的文件下载接口。
这类漏洞的机任件读决原理不复杂。打印机固件里通常跑着一个轻量Web服务器,意文方便管理员上传固件、取漏下载日志、打印洞解导入配置。机任件读决问题在于,意文很多厂商在处理文件路径参数时,直接拼接用户输入,没有过滤../或者绝对路径。构造一个GET /download?file=../../etc/shadow,服务器就把系统文件吐出来了。更糟的是,部分设备以root权限运行Web服务,读到的文件权限极高。
我见过一台HP LaserJet,它的/hp/device/路径下有个download接口,参数叫filename。把值改成/var/spool/cups/printers.conf,直接返回配置文件内容,里面包含打印机队列的认证信息。厂商后来发了补丁,但很多设备根本没升级,因为管理员压根不知道打印机也需要打补丁。
别急着上扫描器。手动试两个请求就能判断。找一台设备,浏览器访问http://打印机IP/,看有没有Web管理页。然后构造类似这样的URL:
http://打印机IP/download?file=../../../../etc/passwd http://打印机IP/upload?path=/tmp/test 如果返回了系统文件内容,或者上传成功,那漏洞就坐实了。注意,有些固件把../过滤了,但用URL编码%2e%2e%2f或者双重编码%252e%252e%252f还能绕过。我试过一台兄弟打印机,它只检查了字符串里有没有..,把....//塞进去就绕过了。
最直接的办法是把打印机的Web管理界面关掉。多数设备在设置里能找到“禁用Web管理”或“仅允许HTTPS”的选项。关掉之后,通过SNMP或者厂商专用工具照样能管理。如果必须用Web,那就加一层反向代理,在Nginx里写规则,把包含..、%2e、%2f的请求全部拦掉。
另一个动作是网络隔离。打印机不该和业务服务器在同一个VLAN。单独划一个打印网段,只放行打印端口(9100、515、631),管理端口(80、443、8080)只对管理员IP开放。我见过一家公司用防火墙策略把打印机Web界面限制在跳板机上访问,效果不错。
去厂商官网查你型号的最新固件。别用设备自带的“检查更新”,那个经常失效。手动下载,通过USB或者Web界面上传。升级前记下当前配置,因为有些固件升级会重置网络设置。升级后重新测试那个文件读取请求,确认返回403或者404。
如果厂商已经停止支持,比如一些老款Lexmark或Ricoh,那就只能靠WAF或者代理层硬扛。写一条ModSecurity规则:
SecRule REQUEST_URI "@contains ../" "id:1001,deny,status:403" 再配合SecRule ARGS "@rx \.\.%2f"处理编码绕过。这不能修漏洞,但能挡住大部分自动化扫描和低级攻击。
打印机固件更新周期通常是半年一次,但很多IT部门三年都不碰。我建议把打印机纳入漏洞扫描范围,用Nessus或者OpenVAS扫一下,它们有专门的打印机插件。另外,别在打印机上存敏感文件——扫描到FTP或者SMB共享的临时文件,经常忘了删。攻击者读不到系统文件,但能读到你昨天扫描的合同。
最后说个真事。某次应急响应,客户坚持说打印机不可能被黑。我登上去一看,Web界面开着,固件是2016年的,/etc/passwd能直接下载。攻击者用这个漏洞读了SSH私钥,然后横向移动到了核心数据库。修的时候只用了十分钟:关Web、升固件、改防火墙。但之前丢的数据,花了两周都没完全追回来。