hacktricks/network-services-pentesting/pentesting-printers/print-job-manipulation.md
2023-07-07 23:42:27 +00:00

8 KiB
Raw Blame History

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

コンテンツオーバーレイ

印刷物の外観を操作するための簡単な方法は、オーバーレイを使用することです。
PCLには、ドキュメントの上にオーバーレイマクロを配置するためのドキュメント化された機能があります。残念ながら、この機能は現在の印刷ジョブに限定されており、永続的に設定することはできません。
PostScriptはデフォルトではこのような機能を提供していませんが、PostScriptドキュメントの各ページを印刷するために含まれているshowpageオペレータを再定義することでプログラムできます。攻撃者はそこにフックをかけ、独自のコードを実行し、その後オペレータの元のバージョンを呼び出すことができます。
したがって、彼女はカスタムEPSファイルを使用して印刷されるすべてのページにオーバーレイをかけることができます。このハックは、ドキュメントのハードコピーに任意のグラフィックやフォントを追加するために使用できます空白のページをオーバーレイし、カスタムコンテンツを追加することでドキュメントの外観を完全に変更することが可能です
明らかに、このようなアプローチは、PostScriptがプリンタードライバとして使用され、StartJobPasswordが設定されていない場合にのみ成功することができます。

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

PRETcrossまたはoverlayコマンドをpsモードで使用し、それから切断して任意のドキュメントを印刷します。

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

Welcome to the pret shell. Type help or ? to list commands.
printer:/> overlay overlays/smiley.eps
printer:/> cross whoa "HACKED"
printer:/> exit

コンテンツの置換

攻撃者は既存のドキュメントの上にオーバーレイを配置できたとしても、その元のドキュメント内の特定の値を変更することはできません。そのためには、元のドキュメントの正確な構造を知る必要があります。時には、カスタムコンテンツを追加するだけでなく、既存のドキュメントの一部を解析して置換することも必要となります。

PostScriptファイル内のテキストの置換問題は、レンダリングされたドキュメントから文字列を抽出する問題に簡約化できます。これは簡単な問題ではありません。なぜなら、文字列はPostScriptプログラム自体によって動的に構築されることがあるからです。そのため、ドキュメントのソースコード内での単純な解析と置換は選択肢にありません。

再定義されたshow演算子を使用することができます。show演算子は、文字列を入力として受け取り、現在のページの特定の位置に描画されます。演算子を再定義することで、テキストを優雅に抽出することができます。このアプローチは、文字列が描画される前に文字列内での検索と置換にも使用することができます。

このアプローチは、プリンターに直接送信されるLaTeXベースのPostScriptドキュメントに対しては成功しますが、代わりに文字列の代わりにラスターグラフィックスを作成するGIMPによって生成されるPostScriptファイルには失敗します。同じ問題は、CUPSによって処理される任意のドキュメント形式PostScript自体も含むでも発生します。理論的には、このような言語構造も解析可能であり、さらなる研究の対象となるべきです。

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

PRETreplaceコマンドをpsモードで使用し、その後に接続を切断して、'DEF'を含むPostScriptドキュメントを印刷します。

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

Welcome to the pret shell. Type help or ? to list commands.
printer:/> replace "ABC" "DEF"
printer:/> exit
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥