web for pentester arşivleri • CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me cypm! Thu, 19 Apr 2018 19:50:08 +0000 tr hourly 1 https://wordpress.org/?v=6.0 https://canyoupwn.me/wp-content/uploads/2016/02/cropped-Başlıksız-1-32x32.png web for pentester arşivleri • CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me 32 32 TR | Web For Pentester 2 SQLi https://canyoupwn.me/web-for-pentester-2-sqli/ https://canyoupwn.me/web-for-pentester-2-sqli/#respond Wed, 04 May 2016 08:09:21 +0000 https://canyoupwn.me/?p=1971 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Selamlar,daha önce WFP I ( Web For Pentester I ) egzersizlerine bakmıştık.Yine aynı ekip tarafından oluşturulmuş harika bir egzersiz serisi bulunuyor. Web For Pentester II Birinci egzersizlere göre biraz daha farklı konular bulunuyor. Burada gördüğünüz gibi aslında konularımız biraz daha zorlaşmış,farklılaşmış.(WFP I’e göre) Bu yazımızda SQL Injection bölümünü ele alacağız. Birinci yazımızın linki : https://canyoupwn.me/wfp-i-sqli/ […]

TR | Web For Pentester 2 SQLi Enes ERGÜN

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Selamlar,daha önce WFP I ( Web For Pentester I ) egzersizlerine bakmıştık.Yine aynı ekip tarafından oluşturulmuş harika bir egzersiz serisi bulunuyor.
Web For Pentester II

Birinci egzersizlere göre biraz daha farklı konular bulunuyor.

Selection_009

Burada gördüğünüz gibi aslında konularımız biraz daha zorlaşmış,farklılaşmış.(WFP I’e göre)

Bu yazımızda SQL Injection bölümünü ele alacağız.

Birinci yazımızın linki : https://canyoupwn.me/wfp-i-sqli/

Bu yazımızda da farklı olarak sadece bypass yöntemlerini anlatacağız.Biraz da sizin taşın altına elinizi koymanızı bekleyeceğiz. 🙂

Level 1 :

Birinci levelimiz biraz basit bir işlem ile bypass edilebiliyor.

'or '1'='1

Selection_010

Burada sql bypass kodumuz başarıyla çalıştığı ve 1=1 her zaman True döndürdüğü için başarıyla giriş yapabiliyoruz.

Level 2:

Bu kısım da ise sql kodumuzu sınırlandırmamız gerekiyor.Çünkü geri döndürülen veri kısıtlanmış.Bu yüzden eğer sınırlandırmazsak bir işe yaramıyor.

' or 1=1 LIMIT 1 #

Selection_011

Level 3 :

Bu level biraz karışık gelebilir.Şöyle:

Bu kısımda username kısmında ki tek tırnak ( ‘ ) karakterini kaçış karakteri ile ( \ ) içerisine password kısmını almasını sağladık.
Daha sonra password kısmımıza ise en basit bypass yöntemimizi yazdık.
Username kısmı :

selam\

Password kısmı :

'or+1=1 #

Selection_012

Level 4 :

Bu kısımda adres çubuğu kısmında yazan string’e göre bize database üzerinden veri getiriyor.Yani aslında ne yazarsak bize onun kullanıcı adını getirecek.

'h'or 1=1

Selection_013

Yukarıda ki bypass yöntemimizi yazarak tüm kayıtları karşımıza getirebiliriz.

Burada bize sadece bu bilgiler lazım olmayacağı için

1.yazımız da ki ilk levelin bypassdan sonra ki işlemleri uygulayabilirsiniz.

Link : https://canyoupwn.me/wfp-i-sqli/
Aşağıda ki kısımdan sonrasını uygulayabilirsiniz.

order by 5 %23

Level 5 :

Bu kısımda eğer adres çubuğunun sonuna or 1=1 koyarsak bize hata vericektir.Bizde buradan yola çıkarak bypass yapabiliriz.

Selection_014

Burada hata verdirmesini sağladık.Hadi bypass edelim.
Selection_015

2 union select * from users

Union operatörünün görevi arkaplanda çalışan sorgunun ardından aslında ikinci,üçüncü, …… sorgu çalıştırmamızı sağlıyor.

Detaylı bilgi : http://www.w3schools.com/sql/sql_union.asp

Level 6 :

5.level ile aynı şekildedir.Tek fark burada sorguyu username ile gruplamasıdır.Yani sorgunun sonunda GROUP BY operatörü kullanılmakta.

Arka planda ki kod aşağıda ki gibidir.

SELECT * FROM users GROUP BY username

Selection_016

Level 7 :

Burada eğer

union select * from users

bypassını kullanırsak bize aşağıda ki hatayı verecektir.

Should only return one user…

Selection_017
Gördüğünüz gibi burada bize fazladan bir sütun,satır çekmemizi engelliyor.Ne yazık ki group_concat’de de aynı hatayı vericektir.

Burada yapabiliceğimiz tek şey adresin sonunda ki id kısmını silerek sadece ? işareti kalmasını sağlamak.Bu şekilde tüm bir tabloyu görebiliyoruz.
Ama bize çok fazla bir veri göstermediği bir gerçek.

Selection_18

Level 8 :

Bu bölümde bize bir kullanıcı kayıt sayfası gösteriliyor.Tek tırnak atıp arkaplanda nasıl bir kod çalıştığına bakabiliriz.
select_19_0

SELECT * FROM users WHERE username=''union select 1,2,3'

Burada gördüğünüz gibi koyduğumuz tek tırnakdan sonra işlemimizi yapabiliyoruz ama sondaki tek tırnağı da # ( diyez ) ile geçersiz kılmamız gerekiyor.

selam'union all select 1,2,group_concat(table_name)from information_schema.tables #

selection_19

Level 9 :

Bu kısımda biraz uğraşmamız gerekebiliyor.Çünkü escape_special_character gibi çeşitli fonksiyonlar ile bypass yöntemlerimiz işe yaramıyor.

Hatta baya uğraştım diyebiliriz ve pes edip kaynak kodlarına bakmak zorunda kaldım.

select20

Burada gördüğünüz gibi Character_Set “GBK” olarak belirlenmiş ? Sizinde kafanızın üstünde hayali bir ampül yandı sanırım değil mi ?

Tam da Karakter Setlerinden GBK ve Big5 setleri için uygun olan bir bypass yöntemi mevcut.

select_21

呵' or 1=1 #

TR | Web For Pentester 2 SQLi Enes ERGÜN

]]>
https://canyoupwn.me/web-for-pentester-2-sqli/feed/ 0
TR | [PentesterLab] Web For Pentester (XSS) https://canyoupwn.me/tr-pentesterlab-web-for-pentester-xss/ https://canyoupwn.me/tr-pentesterlab-web-for-pentester-xss/#respond Wed, 03 Feb 2016 17:15:33 +0000 http://canyoupwn.me/?p=165 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

PentesterLab – Web for Pentester’ı https://pentesterlab.com/exercises/web_for_pentester bağlantısını kullanarak indirebilir ve sanal bir bilgisayar olarak kurabilirsiniz. XSS (Cross Site Scripting) HTML kodları arasında istemci tabanlı kod eklenmesi yoluyla kullanıcının tarayıcısında istenilen kodun çalıştırılabilmesi olarak tanımlanıyor. XSS zafiyeti genellikle Javascript betik dili kullanılarak exploit edilir çünkü en temel HTML sayfalar içinde bile en rahat çalıştırılabilecek betik dil […]

TR | [PentesterLab] Web For Pentester (XSS) Hakkı YÜCE

]]>
CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

PentesterLab – Web for Pentester’ı https://pentesterlab.com/exercises/web_for_pentester bağlantısını kullanarak indirebilir ve sanal bir bilgisayar olarak kurabilirsiniz.

webforpentester1

XSS (Cross Site Scripting)

HTML kodları arasında istemci tabanlı kod eklenmesi yoluyla kullanıcının tarayıcısında istenilen kodun çalıştırılabilmesi olarak tanımlanıyor. XSS zafiyeti genellikle Javascript betik dili kullanılarak exploit edilir çünkü en temel HTML sayfalar içinde bile en rahat çalıştırılabilecek betik dil Javascriptdir, tarayıcılar xss saldırısında kullanılan kodların sistemde bulunan bir script olup olmadığını bilemez.

XSS zafiyetlerinde saldırı senaryoları değişir ancak genel amaç sistemde yetki sahibi yada hedef kullanıcının hesap bilgilerini ele geçirmektir.

XSS zafiyetleri genellikle URL üzerindeki string yada integer değer taşıyan değişkenlerin bulunduğu bağlantılarda ve arama, login, iletişim için kullanılan formlarda tespit edilir.

XSS zafiyeti kendi içerisinde 3 e ayrılmaktadır.

1 – Reflected XSS

Bu tür xss zafiyetlerinde kodlar kalıcı olarak çalıştırılmaz, bu tür zafiyeti sömürmek için hedef üzerinde zararlı bağlantının çalıştırılması gerekir. Zafiyetin sömürüleceği javascript kodlarının bulunduğu bağlantı hedefe gönderilir ve hedefin bağlantıyı açması beklenir.

2- Stored XSS

Bu tür xss zafiyetlerinde sisteme zararlı javascript kodları eklenilmesi mümkündür, bir ziyaretçi defteri formunda bu zafiyetin bulunması durumunda ziyaretçi defterine eklenen yorumlar veritabanına kayıt edilmektedir ve ziyaretçi defteri her görüntülendiğinde bu bilgiler veritabanından çekilerek gösterilmektedir, bu durumda veritabanına eklenen zararlı javascript kodları da ziyaretçi defteri her görüntülenmek istendiğinde çalıştırılacaktır.

3- DOM XSS

DOM; HTML taglarının genel adıdır. Bu tür XSS zafiyetinde javascript ile HTML taglarının özellikleri, değerleri vs. değiştirilebilmektedir. Reflected XSS türünde olduğu gibi sadece bağlantıyı açan istemciler saldırıdan etkilenir.

 

XSS | Example 1

xss1

İlk örnekte URL’de ki name parametresnin aldığı değerin ekrana bastırıldığını görüyoruz, h4yuc3 olarak değiştirelim.

xss1-2

Şimdi bu parametre üzerinden javascript kodlarını çalıştıralım.

xss1-3

Hiç bir filtreleme yapılmadan doğrudan javascript kodlarının çalıştırıldığını görüyoruz.

Payload : <script>alert(‘CanYouPwnMe’)</script>

 

XSS | Example 2

xss2-1

2. örnekte de name parametresnin aldığı değer ekrana yazdırılıyor.

xss2-2

yine aynı payloadı kullanmak istediğimizde bu kez <script> </script> taglarının silindiğini ve geriye kalan değerin ekrana bastırıldığını görüyoruz… Belli ki bir filtre uygulanmış ve <script> ve </script> filtreye eklenmiş ancak büyük, küçük harf duyarlılığı düşünülmüş mü kontrol edelim.

xss2-3

Tam tahmin ettiğimiz gibi büyük harfler filtreye eklenmemiş.

Payload : <SCRIPT>alert(‘CanYouPwnMe’)</SCRIPT>

XSS | Example 3

3. öernekte sistem yine aynı şekilde name parametresinin değerini ekrana basıyor.

xss3-1

yine büyük harfler ile script tagları eklediğimizde bu kez büyük harflerinde filtreye eklendiğini görüyoruz. Ancak sistem şuan gördüğü ilk <script>, <SCRIPT>, </script>, </SCRIPT> taglarını kaldırıyor,  yukarıdaki <SCRIPT> ve </SCRIPT> taglarının arasına birer tane daha <script> ve </script> eklersek sistem ilk gördüklerini kaldıracak birer tane daha kalacaktır.

xss3-2

Payload : <SC<script>RIPT>alert(‘CanYouPwnMe’)</SC</script>RIPT>

 

XSS | Example 4

4. örnekte yine name parametresinin değeri ekrana bastırılıyor ancak değerin herhangi bir yerinde script kelimesi geçerse ekrana bastırılması gereken değer değil “error” mesajı bastırılıyor.

xss4-1

anlaşılan script tagını kullanamayacağız, farklı bir html tagı arasında javascript çalıştırmamız gerekiyor. <img> Tagını kullanmayı deniyoruz.

<img src=”javascript:alert(‘CanYouPwnMe’)”></img>

yukarıdaki payloadı kullanmayı denediğimizde “javascript” kelimesinin de filtreye takıldığını fark ediyoruz, yine “error” mesajı alıyoruz. Aldığımız mesaj aslında bizim için ipucu niteliği taşıyor 🙂 javascriptin onerror olayını kullanarak alert almayı deneyeceğiz.

<img src=onerror=”alert(‘CanYouPwnMe’)”></img>

Yukarıda ki payloadı kullanmayı denediğimizde artık error mesajından kurtulduk ancak alert alamadık.

xss4-2

Hello yazısının yanında image oluştuğunu görebiliyorz ve bu görseli sürükleyip yeni bir sekmeye bıraktığımızda src parametresinde verdiğimiz değerin URL oluşturduğunu ve bu durumun işimizi bozduğunu görüyoruz verdiğimiz bağlantının başına bir dizin için slash ve boşluk koyuyoruz.

Burada alert kodunun tetiklenme sebebine değinecek olursak özetle, image kaynağında verdiğimiz dizinde bir resim bulunamaması HTML tarafından hata olarak algılanıyor ve bu durumda onerror olayı tetikleniyor.

xss4-3

Payload : <img src=/ onerror=”alert(‘CanYouPwnMe’)”></img>

XSS | Example 5

4. örnek yine aynı şekilde devam ediyor, name parametresinin değeri ekrana bastırılıyor.

Bu örnekte alert almak istediğimizde ekrana error mesajı bastırılıyor.

xss5-1

Bunun sebebinin ne olduğunu anlayabilmek için kullandığımız tagları, kelimeleri, işaretleri … teker teker kaldırarak inceliyoruz.

xss5-2

En son <script> <script> taglarının çalıştığını hataya sebep olan kelimenin “alert” olduğunu anlıyoruz, alert yerine prompt kullanacağız.

xss5-3

Payload : <script>prompt(‘CanYouPwnMe’)</script>

XSS | Example 6

6. örnekte de name parametresine değer giriyoruz ancak bu ekrana bastırılmıyor, Değeri değiştirdikten sonra neler olduğunu daha iyi anlayabilmek için FireBug aracı ile kaynağı inceliyoruz.

xss6-1

Mevcut bir script tagının olduğunu görüyoruz, bu script tagını kapatıp kendimizinkini açalım.

xss6-2

Payload : </script><script>alert(‘CanYouPwnMe’)</script>

XSS | Example 7

Bu örnekte değeri değiştirdikten sonra Firebug ile kaynağı incelediğimizde mevcut script taglarını görüyoruz ve girdiğimiz değer script içerisinde bir değişkene atanıyor.

xss7-1

ancak bir önceki örnekte ki gibi mevcut script tagını kapatıp kendi tagımızı açmak istediğimizde < > işaretleri encode ediliyor ve bu durumda kod içerisinde satır yapısının bozulmasına sebep oluyor, aşağıdaki ekran görüntüsünde noktalı virgüllerden bunu anlayabileceksiniz.

xss7-2

Bu durumda yapmamız gereken, mevcut tagı kapatmadan bu script tagları arasında javascript kodumuzu çalıştırmak olacak. İlk önce sistemin çalışma şeklini analiz edelim;

var $a = ‘ Gireceğimiz Değer ‘; yani biz iki tırnak arasında işlem yapıyoruz, bu durumda yapmamız gereken ilk şey, açılmış olan tırnağı kapatmak ve sonrasında satırı sonlandırmak ( ‘ ; ) daha sonra alert kodumuzu eklemek, satırı sonlandırmak ve girdiğimiz değerden sonra tırnağı kapatmak için otomatik gelecek olan tırnağın önüne bir tırnak açmak ( alert(‘CanYouPwnMe’);’ )

xss7-3

Başarılı şekilde alert aldık, yukarıda bahsettiklerimin daha net anlaşılması için bu haldeyken kaynağı inceleyelim.

xss7-4

Payload : ‘;alert(‘CanYouPwnMe’);’

 

XSS | Example 8

Bu örnekte durum biraz değişiyor, artık URL üzerinde bir parametreye değil HTML form üzerinde bir text alanına değer girişi yapacağız.

xss8-1

Basit bir şekilde alert almayı denediğimizde ise HTML taglarının encode şekilde işlendiğini ve HTML olarak çalıştırılmadığını görebiliyoruz.

xss8-2

Formun kaynağını incelediğimizde girdiğimiz değerin tekrar /xss/example8.php bağlantısına post edildiğini ve bu sayfada işlendiğini görebiliyoruz.

xss8-3

xss8-4

Bu durumda ilk deneyeceğimiz şey <form …. > tagının içerisinde script çalıştırmayı denemek olmalı, bunu yapabilmek için girdiğimiz değerde bu dizini sonlandırıp ( / ) action=”….” parametresini kapatıp ( ) son olarak form tagınıda kapattıktan ( > ) sonra script kodlarımızı eklemek.

xss8-5

xss8-6

Payload : /”><script>alert(‘CanYouPwnMe’)</script>

 

XSS | Example 9

xss9-1

Son XSS Örneğinde …/xss/example9.php#hacker şeklinde bir URL ve ekranda bir “hacker” çıktısı ile karşılaşıyoruz, belli ki # işaretinden sonra gelen değeri ekrana bastıran bir sistem var ancak değeri değiştirdiğimizde ekrana bastırılmadığını fark ediyoruz.

xss9-2

bunun sebebi ne olabilir diye düşünecek olursak tabii ki sistem dinamik şekilde çalışıyor yani DOM XSS zafiyeti ile karşı karşıyayız. Değeri değiştirdikten sonra sayfayı yenilediğimizde bunu rahatlıkla fark edebiliyoruz.

xss9-3

XSS payloadımızı # işaretinden sonrasına ekliyoruz ve alertı görebilmek için sayfayı bir kere yenilememiz yeterli oluyor.

xss9-4

Payload : <script>alert(‘CanYouPwnMe’)</script>
&
Refresh

TR | [PentesterLab] Web For Pentester (XSS) Hakkı YÜCE

]]>
https://canyoupwn.me/tr-pentesterlab-web-for-pentester-xss/feed/ 0