安全-打印机安全研究
只要你联网,那就有可能存在安全问题。俗称万物皆可’日’。
前言
打印机是现在办公环境中不可或缺的一个硬件设备,其本身存在很多安全问题。打印机服务有:FTP、Telnet、HTTP、PJL等。看到这么多服务,相信研究人员是非常高兴的。因为服务越多,安全隐患也越多。做安全研究最怕的就是服务很少、功能很少、端口不开放这些。
前段时间,由于工作的原因,对打印机安全进行研究与分析。整体流程为:识别打印机→识别服务→常见服务安全分析→打印机专用服务(PJL)安全分析。PJL命令文档可以在HP网站上找到,文档参考1、文档参考2。
识别打印机
识别打印机可以通过:SNMP发送特定oid识别、Web管理页面识别、PJL命令识别。这里我采用了PJL命令识别,通过向设备的9100端口发送PJL命令,根据返回信息来识别。
1 | @PJL INFO ID |
通过对打印机发送INFO ID(PJL命令),打印机会返回其对应的型号。
服务识别
识别服务的话,用nmap就可以了。可以使用全端口扫描来发现对应服务。
1 | nmap -p 1-65535 -T4 -A -v targetIP |
常见服务分析
打印机常见服务:Telnet、FTP、HTTP。
Telnet
打印机中Telnet基本都是默认密码或者是空密码。登录之后可以查看配置信息、操作打印机等等。
FTP
大部分打印机FTP默认密码或空密码。通过上传文件,文件会直接被打印。
HTTP
打印机的Web存在的问题:爆破破解、越权访问等。这个可通过使用Web渗透的方式进行测试。我测试的时候发现有默认密码、信息泄露等。
打印机专用服务(PJL)分析
PJL是打印机作业语言:printer job language。PJL语言有固定的格式。
对PJL命令文档中的PJL命令进行了整理:
1 | PJL以"\x1B%-12345@PJL JOB"开始,以"\x1B%-12345"结束,其中每条指令应当独占一行,指令间需要有carriage return(0x0D)。使用者可以自定义指令。 |
由于打印机并不去判断PJL命令是谁发起的,因此,只要路由可达任何人都可以对打印机执行PJL命令操作。
我测试的时候,发现对打印机的9100端口发送任何数据,打印机都会将其打印出来。如果,通过对9100端口进行DoS,那么,打印机就会不间断的工作。
工具
- Hijetter.exe
- PRET
- pjl-tool
- print.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# coding=utf-8
import socket
import time
import sys
with open('1', 'rb') as f:
pdata = f.read()
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((sys.argv[1],9100))
sock.sendall(pdata)
recv_data = sock.recv(1024)
print recv_data
sock.close()
总结
在对打印机进行安全测试的时候,发现了几个问题特此记录一下:
1.使用网络打印机的时候,流量报文是明文。将流量报文保存,可进行重放,将文档重新打印;
2.测试的打印机使用FTP向打印机上传文件,打印机立即打印,打印之后立马删除。不知道其他打印机是否会立即删除文件;
3.使用Python的socket可以达到快速网络数据发送。