DOM Yapısı Ve Hacklenmesi!

Mascar

Kıdemli Üye
17 Kas 2021
2,478
2,228
11shmd4.png


Selamlar Türk Hack Team ailesi bu konumda sizlere "DOM" yapısını ve Dom'u kullanarak neler yapabileceğimizi anlatacağım, hazırsanız iyi okumalar dilerim.​


dpbx5e1.png

- DOM Nedir? -

Document Object Model (DOM) : Doküman Nesne Modeli olarakta bilinen DOM, kullanmakta olduğumuz tarayıcılar her web sitesini birer belge olarak tanımlar. Bu belgeler içerisinde bulunan tüm dökümanlar da nesne olarak kabul edilir. Bu sitelerde kullanılan metin, resim, form gibi araçlar nesne tanımı içerisine girmektedir. DOM dokümandaki nesnelere erişmek ve içeriğini, stilini, yapısını değiştirmek için kullanılır (kimlikler, sınıflar, nitelikler, ögeler vs.)


- DOM Yapısı -

DOM yapısını şu şekilde ele alabiliriz,​

En başta <html> etiketi, onun altında ise içerisine yazılmış diğer etiketler bulunur. Örnek olarak sayfa yapısını DOM yönünden inceleyelim.​

n04kqv0.png

<html>

Html etiketi içerisine yazılacak tüm etiketleri kapsar. Html etiketi kullanmadan diğer etiketlerin bir anlamı olmaz.​

<head>

Bu etiket sayfanın tarayıcıya ve arama motorlarına tanıtıldığı (Meta etiketleriyle), CSS ve Javascript dosyalarının dahil edildiği alanı temsil etmektedir. Sayfa görünümde herhangi bir değişikliğe sebep olmaz.​

<title>

Bu etiket sayfa isminin belirtilmesini sağlar. Yani tarayıcı sekmesini temsil eden adı kapsar.​

<body>

Bu etiket arasında yazacağımız tüm etiketler ekrana yansır. Genel olarak tasarım yaparken <body> etiketleri arasında çalışıyoruz. Yani <body> etiketi bir html dosyanın en önemli kısmı.​

<a>

Bağlantı metinleri oluşturmak için kullanılır, bağlantılar başka sayfalara geçiş için kullanılır. Bu etiketin en önemli özelliği href özelliğidir. Bu özellik ile bağlantı oluşturmak istediğimiz sayfanın URL'u belirtilir.​

<h1>

Genellikle sayfanın başlangıcında görünen ilk başlık etiketidir. Sayfa içerisinde yer alan H etiketleri hiyerarşisinin en üst kısmında yer alır.​


Örnek olarak bir programlama dili ile iletişime geçelim ;​

Ben PHP'Yİ kullanacağım, form.html adında bir belge oluşturalım.​

HTML:
<html>

  <head>

      <title>PHP & DOM | THT</title>

  </head>

  <body>

<form method=”POST” action=”post.php”>

          <input type="text" name="name">

          <input type="text" name="surname">

<input type="submit" value="Gönder">

</form>

  </body>
</html>

post.php

<?php

if(isset($_POST))

{

    $name = $_POST[‘name’];

    $surname = $_POST[‘surname’];

   echo “Adınız : ”.$name.“ Soyadınız : ”.$surname;

}

Yukarıdaki örnekte bir HTML belgesi içerisine bazı etiketler atadık. Form etiketi içerisinde iki adet inputumuz var. Bu inputları action post.php ifadesiyle post.php adında bir php dosyasına gönderiyoruz. post.php dosyasında da inputlardan gelen ifadeleri name özelliğiyle yakalayıp değişkene atıyoruz ve ekrana basıyoruz.

dpbx5e1.png

DOM'nin ne olduğundan bahsetmişken oluşturabileceği zararlara da örnek verelim.​


- DOM Based XSS -

Türkçe karşılığı DOM tabanlı XSS olarak geçmektedir. HTML kodlarının aksine DOM üzerinde gerçekleşen bir XSS zafiyet türüdür.

Stored ve Reflected XSS saldırılarının sonuçlarını görmek mümkünken Dom tabanlı saldırılarda HTML kaynağı ve dönen yanıt aynı şekilde olacaktır.​

DOM tabanlı XSS zafiyeti çoğunlukla kullanıcı tarafından ulaşılabilir durumdadır.​

Ve günümüzde yaygın olarak görülen bir XSS zafiyet türüdür.​

Şimdi ise örnek bir DOM tabanlı XSS zafiyeti oluşturalım,​

aşağıdaki kodları içeren bir sitemiz olsun


Kod:
<script>
     document.write("<b>Geçerli URL</b> : " + document.baseURI);
</script>

Kod:
http://dom-deneme.com/dom.html#<script>alert(1)</script>

HTTP isteği gönderdiğinizde JavaScript kodunun çalışması için yeterli olacaktır.

Çünkü document.write fonksiyonu ile Url adresine ne yazarsanız sayfada bunu aynen ekrana yansıtır. Sayfanın kaynağına baktığınızdaysa <script>alert(1)</script> kodunu görmezsiniz.

Bunun sebebiyse olan biten her şeyin DOM’da gerçekleşmesi ve JavaScript kodu tarafından çalıştırılmasıdır.

Zararlı JavaScript kodu sayfa tarafından çalıştırıldıktan sonra, kullanıcıya ait çerezlerin (cookie) çalınması veya sayfa davranışının istenildiği gibi değiştirilmesi amacıyla, DOM tabanlı XSS zafiyetinin basit bir şekilde exploit edilmesi mümkündür.


Günümüzde popüler firmalarda bile hala varlığını sürdürmekte olan bu zafiyet Reflected, Stored XSS arasındaki en büyük farklardan biri DOM XSS'in sunucu taraflı hiçbir şekilde önlenemiyor olmasıdır. Peki neden önlenemiyor?

Bunun çok basit bir cevabı bulunmakta "#" karakterinden sonra yazılan hiçbir şey sunucuya gönderilmez, yani HTTP trafiğinde gözükmez.

"Hash olarak da bilinen bölüm geçmişte, HTML sayfayı belli bir elemente doğru kaydırma amacıyla tanıtılmıştı. Fakat ilerleyen dönemlerde JavaScript geliştiricileri tarafından AJAX kullanılan sayfalarda, sayfa kayıtlarını ve buna benzer şeyleri tutmak için çoğunlukla hash-bang “#!” olarak kullanılmıştır."

Bundan dolayı" #" sonra yazılan hiçbir şey sunucuya gönderilmez. Buda göstermektedir ki DOM XSS saldırılarında kodda uygulanan sunucu taraflı hiçbir güvenlik yöntemi işe yaramayacaktır.

Buraya kadar okuduysanız teşekkürlerimi sunuyorum. Sonraki konularda görüşmek dileğiyle...​

 

Arslan'

Basın&Medya Direktörü
7 Nis 2020
2,269
3,457
HTML DOM, gerçekten güzel bir konu edinmişsin, devamını beklerim.
 

JohnWick51

Uzman üye
20 Mar 2022
1,867
770
28
11shmd4.png


Selamlar Türk Hack Team ailesi bu konumda sizlere "DOM" yapısını ve Dom'u kullanarak neler yapabileceğimizi anlatacağım, hazırsanız iyi okumalar dilerim.​


dpbx5e1.png

- DOM Nedir? -

Document Object Model (DOM) : Doküman Nesne Modeli olarakta bilinen DOM, kullanmakta olduğumuz tarayıcılar her web sitesini birer belge olarak tanımlar. Bu belgeler içerisinde bulunan tüm dökümanlar da nesne olarak kabul edilir. Bu sitelerde kullanılan metin, resim, form gibi araçlar nesne tanımı içerisine girmektedir. DOM dokümandaki nesnelere erişmek ve içeriğini, stilini, yapısını değiştirmek için kullanılır (kimlikler, sınıflar, nitelikler, ögeler vs.)


- DOM Yapısı -

DOM yapısını şu şekilde ele alabiliriz,​

En başta <html> etiketi, onun altında ise içerisine yazılmış diğer etiketler bulunur. Örnek olarak sayfa yapısını DOM yönünden inceleyelim.​

n04kqv0.png

<html>

Html etiketi içerisine yazılacak tüm etiketleri kapsar. Html etiketi kullanmadan diğer etiketlerin bir anlamı olmaz.​

<head>

Bu etiket sayfanın tarayıcıya ve arama motorlarına tanıtıldığı (Meta etiketleriyle), CSS ve Javascript dosyalarının dahil edildiği alanı temsil etmektedir. Sayfa görünümde herhangi bir değişikliğe sebep olmaz.​

<title>

Bu etiket sayfa isminin belirtilmesini sağlar. Yani tarayıcı sekmesini temsil eden adı kapsar.​

<body>

Bu etiket arasında yazacağımız tüm etiketler ekrana yansır. Genel olarak tasarım yaparken <body> etiketleri arasında çalışıyoruz. Yani <body> etiketi bir html dosyanın en önemli kısmı.​

<a>

Bağlantı metinleri oluşturmak için kullanılır, bağlantılar başka sayfalara geçiş için kullanılır. Bu etiketin en önemli özelliği href özelliğidir. Bu özellik ile bağlantı oluşturmak istediğimiz sayfanın URL'u belirtilir.​

<h1>

Genellikle sayfanın başlangıcında görünen ilk başlık etiketidir. Sayfa içerisinde yer alan H etiketleri hiyerarşisinin en üst kısmında yer alır.​


Örnek olarak bir programlama dili ile iletişime geçelim ;​

Ben PHP'Yİ kullanacağım, form.html adında bir belge oluşturalım.​

HTML:
<html>

  <head>

      <title>PHP & DOM | THT</title>

  </head>

  <body>

<form method=”POST” action=”post.php”>

          <input type="text" name="name">

          <input type="text" name="surname">

<input type="submit" value="Gönder">

</form>

  </body>
</html>

post.php

<?php

if(isset($_POST))

{

    $name = $_POST[‘name’];

    $surname = $_POST[‘surname’];

   echo “Adınız : ”.$name.“ Soyadınız : ”.$surname;

}

Yukarıdaki örnekte bir HTML belgesi içerisine bazı etiketler atadık. Form etiketi içerisinde iki adet inputumuz var. Bu inputları action post.php ifadesiyle post.php adında bir php dosyasına gönderiyoruz. post.php dosyasında da inputlardan gelen ifadeleri name özelliğiyle yakalayıp değişkene atıyoruz ve ekrana basıyoruz.

dpbx5e1.png

DOM'nin ne olduğundan bahsetmişken oluşturabileceği zararlara da örnek verelim.​


- DOM Based XSS -

Türkçe karşılığı DOM tabanlı XSS olarak geçmektedir. HTML kodlarının aksine DOM üzerinde gerçekleşen bir XSS zafiyet türüdür.

Stored ve Reflected XSS saldırılarının sonuçlarını görmek mümkünken Dom tabanlı saldırılarda HTML kaynağı ve dönen yanıt aynı şekilde olacaktır.​

DOM tabanlı XSS zafiyeti çoğunlukla kullanıcı tarafından ulaşılabilir durumdadır.​

Ve günümüzde yaygın olarak görülen bir XSS zafiyet türüdür.​

Şimdi ise örnek bir DOM tabanlı XSS zafiyeti oluşturalım,​

aşağıdaki kodları içeren bir sitemiz olsun


Kod:
<script>
     document.write("<b>Geçerli URL</b> : " + document.baseURI);
</script>

Kod:
http://dom-deneme.com/dom.html#<script>alert(1)</script>

HTTP isteği gönderdiğinizde JavaScript kodunun çalışması için yeterli olacaktır.

Çünkü document.write fonksiyonu ile Url adresine ne yazarsanız sayfada bunu aynen ekrana yansıtır. Sayfanın kaynağına baktığınızdaysa <script>alert(1)</script> kodunu görmezsiniz.

Bunun sebebiyse olan biten her şeyin DOM’da gerçekleşmesi ve JavaScript kodu tarafından çalıştırılmasıdır.

Zararlı JavaScript kodu sayfa tarafından çalıştırıldıktan sonra, kullanıcıya ait çerezlerin (cookie) çalınması veya sayfa davranışının istenildiği gibi değiştirilmesi amacıyla, DOM tabanlı XSS zafiyetinin basit bir şekilde exploit edilmesi mümkündür.


Günümüzde popüler firmalarda bile hala varlığını sürdürmekte olan bu zafiyet Reflected, Stored XSS arasındaki en büyük farklardan biri DOM XSS'in sunucu taraflı hiçbir şekilde önlenemiyor olmasıdır. Peki neden önlenemiyor?

Bunun çok basit bir cevabı bulunmakta "#" karakterinden sonra yazılan hiçbir şey sunucuya gönderilmez, yani HTTP trafiğinde gözükmez.

"Hash olarak da bilinen bölüm geçmişte, HTML sayfayı belli bir elemente doğru kaydırma amacıyla tanıtılmıştı. Fakat ilerleyen dönemlerde JavaScript geliştiricileri tarafından AJAX kullanılan sayfalarda, sayfa kayıtlarını ve buna benzer şeyleri tutmak için çoğunlukla hash-bang “#!” olarak kullanılmıştır."

Bundan dolayı" #" sonra yazılan hiçbir şey sunucuya gönderilmez. Buda göstermektedir ki DOM XSS saldırılarında kodda uygulanan sunucu taraflı hiçbir güvenlik yöntemi işe yaramayacaktır.

Buraya kadar okuduysanız teşekkürlerimi sunuyorum. Sonraki konularda görüşmek dileğiyle...​

Ellerine saglik
 

'GHOST

Uzman üye
31 Mar 2022
1,387
568
11shmd4.png


Selamlar Türk Hack Team ailesi bu konumda sizlere "DOM" yapısını ve Dom'u kullanarak neler yapabileceğimizi anlatacağım, hazırsanız iyi okumalar dilerim.​


dpbx5e1.png

- DOM Nedir? -

Document Object Model (DOM) : Doküman Nesne Modeli olarakta bilinen DOM, kullanmakta olduğumuz tarayıcılar her web sitesini birer belge olarak tanımlar. Bu belgeler içerisinde bulunan tüm dökümanlar da nesne olarak kabul edilir. Bu sitelerde kullanılan metin, resim, form gibi araçlar nesne tanımı içerisine girmektedir. DOM dokümandaki nesnelere erişmek ve içeriğini, stilini, yapısını değiştirmek için kullanılır (kimlikler, sınıflar, nitelikler, ögeler vs.)


- DOM Yapısı -

DOM yapısını şu şekilde ele alabiliriz,​

En başta <html> etiketi, onun altında ise içerisine yazılmış diğer etiketler bulunur. Örnek olarak sayfa yapısını DOM yönünden inceleyelim.​

n04kqv0.png

<html>

Html etiketi içerisine yazılacak tüm etiketleri kapsar. Html etiketi kullanmadan diğer etiketlerin bir anlamı olmaz.​

<head>

Bu etiket sayfanın tarayıcıya ve arama motorlarına tanıtıldığı (Meta etiketleriyle), CSS ve Javascript dosyalarının dahil edildiği alanı temsil etmektedir. Sayfa görünümde herhangi bir değişikliğe sebep olmaz.​

<title>

Bu etiket sayfa isminin belirtilmesini sağlar. Yani tarayıcı sekmesini temsil eden adı kapsar.​

<body>

Bu etiket arasında yazacağımız tüm etiketler ekrana yansır. Genel olarak tasarım yaparken <body> etiketleri arasında çalışıyoruz. Yani <body> etiketi bir html dosyanın en önemli kısmı.​

<a>

Bağlantı metinleri oluşturmak için kullanılır, bağlantılar başka sayfalara geçiş için kullanılır. Bu etiketin en önemli özelliği href özelliğidir. Bu özellik ile bağlantı oluşturmak istediğimiz sayfanın URL'u belirtilir.​

<h1>

Genellikle sayfanın başlangıcında görünen ilk başlık etiketidir. Sayfa içerisinde yer alan H etiketleri hiyerarşisinin en üst kısmında yer alır.​


Örnek olarak bir programlama dili ile iletişime geçelim ;​

Ben PHP'Yİ kullanacağım, form.html adında bir belge oluşturalım.​

HTML:
<html>

  <head>

      <title>PHP & DOM | THT</title>

  </head>

  <body>

<form method=”POST” action=”post.php”>

          <input type="text" name="name">

          <input type="text" name="surname">

<input type="submit" value="Gönder">

</form>

  </body>
</html>

post.php

<?php

if(isset($_POST))

{

    $name = $_POST[‘name’];

    $surname = $_POST[‘surname’];

   echo “Adınız : ”.$name.“ Soyadınız : ”.$surname;

}

Yukarıdaki örnekte bir HTML belgesi içerisine bazı etiketler atadık. Form etiketi içerisinde iki adet inputumuz var. Bu inputları action post.php ifadesiyle post.php adında bir php dosyasına gönderiyoruz. post.php dosyasında da inputlardan gelen ifadeleri name özelliğiyle yakalayıp değişkene atıyoruz ve ekrana basıyoruz.

dpbx5e1.png

DOM'nin ne olduğundan bahsetmişken oluşturabileceği zararlara da örnek verelim.​


- DOM Based XSS -

Türkçe karşılığı DOM tabanlı XSS olarak geçmektedir. HTML kodlarının aksine DOM üzerinde gerçekleşen bir XSS zafiyet türüdür.

Stored ve Reflected XSS saldırılarının sonuçlarını görmek mümkünken Dom tabanlı saldırılarda HTML kaynağı ve dönen yanıt aynı şekilde olacaktır.​

DOM tabanlı XSS zafiyeti çoğunlukla kullanıcı tarafından ulaşılabilir durumdadır.​

Ve günümüzde yaygın olarak görülen bir XSS zafiyet türüdür.​

Şimdi ise örnek bir DOM tabanlı XSS zafiyeti oluşturalım,​

aşağıdaki kodları içeren bir sitemiz olsun


Kod:
<script>
     document.write("<b>Geçerli URL</b> : " + document.baseURI);
</script>

Kod:
http://dom-deneme.com/dom.html#<script>alert(1)</script>

HTTP isteği gönderdiğinizde JavaScript kodunun çalışması için yeterli olacaktır.

Çünkü document.write fonksiyonu ile Url adresine ne yazarsanız sayfada bunu aynen ekrana yansıtır. Sayfanın kaynağına baktığınızdaysa <script>alert(1)</script> kodunu görmezsiniz.

Bunun sebebiyse olan biten her şeyin DOM’da gerçekleşmesi ve JavaScript kodu tarafından çalıştırılmasıdır.

Zararlı JavaScript kodu sayfa tarafından çalıştırıldıktan sonra, kullanıcıya ait çerezlerin (cookie) çalınması veya sayfa davranışının istenildiği gibi değiştirilmesi amacıyla, DOM tabanlı XSS zafiyetinin basit bir şekilde exploit edilmesi mümkündür.


Günümüzde popüler firmalarda bile hala varlığını sürdürmekte olan bu zafiyet Reflected, Stored XSS arasındaki en büyük farklardan biri DOM XSS'in sunucu taraflı hiçbir şekilde önlenemiyor olmasıdır. Peki neden önlenemiyor?

Bunun çok basit bir cevabı bulunmakta "#" karakterinden sonra yazılan hiçbir şey sunucuya gönderilmez, yani HTTP trafiğinde gözükmez.

"Hash olarak da bilinen bölüm geçmişte, HTML sayfayı belli bir elemente doğru kaydırma amacıyla tanıtılmıştı. Fakat ilerleyen dönemlerde JavaScript geliştiricileri tarafından AJAX kullanılan sayfalarda, sayfa kayıtlarını ve buna benzer şeyleri tutmak için çoğunlukla hash-bang “#!” olarak kullanılmıştır."

Bundan dolayı" #" sonra yazılan hiçbir şey sunucuya gönderilmez. Buda göstermektedir ki DOM XSS saldırılarında kodda uygulanan sunucu taraflı hiçbir güvenlik yöntemi işe yaramayacaktır.

Buraya kadar okuduysanız teşekkürlerimi sunuyorum. Sonraki konularda görüşmek dileğiyle...​

Eline sağlık
 
Ü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.