LakhoPss
Uzman üye
DERS I (KURULUM):
DVWA, yani Damn Vulnerable Web Application web uygulama guvenligi alaninda kendini gelistirmek ve tecrube kazanmak isteyen guvenlik uzmanlari icin olusturulmus PHP tabanli, seviyenize gore dusuk, orta ve yuksek derecelerde aciklar olusturan, localhost (127.0.0.1) uzerinde calisan bir web uygulamasidir. DVWA bize;
1_ 'sudo su' komutu ile terminal uzerinde yonetici izinlerine sahip olunur. Asagidaki komut yardimiyla MySql, bilgisayara kurulur. MySql coklu kullanici barindirma icerigi sunan bir veritabani yonetim sistemidir. Kurulum esnasinda sizden MySql icin bir sifre ister. Onu girersiniz ve kurulum sona erer.
2_ PHP5, PHP-PEAR, Apache2 web sunucusu ve PHP5-MySql asagidaki komut yardimiyla kurulur. PHP, daha once de bahsettigimiz gibi DVWA'nin yazilmis oldugu web programlama dilidir. Apache ise acik kaynak kodlu, web sunucu yazilimidir.
3_ Gerekli olan yazilimlar sisteme kurulup barindirildiktan sonra DVWA'nin kurulumuna gecilir. Bunun icin asagidaki komutlar sirasiyla yazilir.
4_ Kurulum dosyalari Apache web sunucusunun default olarak kullandigi dizine aktarildiktan sonra gerekli olan ayarlamalar yapilir. Bu ayarlamalari sirasiyla a, b, c ve d olmak uzere 4 adimda inceleyecegiz.
a) DVWA config dosyasi editlenir. Bunun icin;
komutu ile config (ayar) dosyasi herhangi bir text editor ile acilir. Biz bugun nano'yu kullandik. Karsimiza cikan ekranda 'db_password' kismi MySql kurulumunda belirledigimiz sifre yapilir ve Ctrl+X komutu ile cikilir.
b) Terminal uzerinden Apache PHP ayarlari duzenlenir. Bunun icin ise;
komutu kullanilir. 'allow_url_include' kismi bulunarak 'Off' ayari 'On' olarak degistirilir. Bu da yapildiktan sonra;
komutu ile klasor izinleri duzenlenir. -R operatoru normalde dosya izinlerini duzenlemek icin kullanilan 'chmod' komutunun klasor izinlerini de duzenlemesini saglar.
c) Asagidaki komutlar sirasiyla yazilarak MySql sifresi girilir ve 'dvwa' adiyla MySql veritabani olusturulur, MySql baglantisi 'exit' komutuyla koparilir.
d) Apache2 ayar (config) dosyasi duzenlenir. Bunun icin asagidaki komut ile text dosyasi acilir, en alt satira 'ServerName localhost' yazilir, Ctrl+X ile kaydedilip cikilir.
5_ Apache2 servisi baslatilir. Bunun icin 'service apache2 start' komutu kullanilir. Bu adimdan sonra herhangi bir web tarayicisi acilarak (Tercihen Mozilla Firefox) 'https://127.0.0.1/dvwa/setup.php' URL (Uniform Resource Locator) adresine gidilir ve uzerinde 'Create/Reset Database' yazan butona tiklayarak veritabani olusturulur.
6_ Geldik son adimimiza.. Bu adimda 'https://127.0.0.1/dvwa/' URL adresine gidilir ve;
olacak sekilde giris yapilir. Bundan sonra yapacaklariniz size kalmistir. Bu web uygulamasini Windows uzerinden 'wamp server' adli yazilim ile kullanabilirsiniz.
DERS II (GUVENLIK ZAFIYETLERI):
Bu dersimizde, DVWA'da bulunan, en cok kullanilan guvenlik aciklarini taniyacagiz. Once guvenlik zaafiyetinin kelime manasi ile derse baslayalim. Guvenlik acigi, kelime manasi olarak herhangi bir sistem, cihaz veya sunucuda meydana gelen, guvenligi tehlikeye atabilecek veya kotu amacli kisiler tarafindan degerlendirilebilecek zayifliklara verilen isimdir. Guvenlik acigi herhangi bir ortamda, insanda bile olusabilir (Sosyal Muhendislik). Guvenlik aciklarini arttirmak mumkundur. Binbir cesit acik vardir. Biz bu dersimizde DVWA dolayisiyla, web uygulamalarinda meydana gelen, en cok kullanilan zayifliklari anlamaya, ogrenmeye calisacagiz. Ilk dersimizde olusturdugumuz siralamayi takip edecegiz. Bu siralamaya gecmeden once belirtmek isterim ki, ilerideki derslerde DVWA uzerinde sizma islemi sadece tek bir yontemle gerceklesecektir. Diger yontemleri guvenlik aciginin bulundugu bolumde bulunan 'view help' butonuna tiklayarak goruntuleyebilir, fikir edinebilirsiniz. Yine o bolumlerde bulunan 'view source' butonuna tiklayarak formun sourcesini (kaynak kodlarini) goruntuleyebilir, sizma islemi icin fikir edinebilirsiniz.
1_ Brute Force Atagi: Brute Force, sozluk sirasina gore artan karakterlerle 1..9, a..b, A..B ve ozel karakterler kullanarak stringler ureten ve bu stringleri pop3, smtp, smb, ftp, http, e-mail gibi protokoller veya html formlari uzerinde deneyen atak cesididir. Eger bu atak cesidinde belli bir sozluk kullanilirsa 'Sozluk Atagi', once sozluk atagi uygulanip daha sonra brute force atagi kullanilirsa da 'Hybrid Atagi' olarak isimlendirilir. Tum bu ataklarda amac, hedef sisteme deneme - yanilma yoluyla sizmaktir. Bu tur ataklari uygulamak icin Hydra, Brutus, Medusa gibi araclar kullanilabilir.
Web formlarda Brute Force atagina karsi alinabilecek en iyi onlem, belli bir sifre deneme sayisindan sonra CAPTCHA (Completely Automated Public Turing Test To Tell Computers and Humans Apart) kodu, herhangi bir guvenlik kodu vs. girilmesinin istenmesidir. Bu sayede robotlara karsi en iyi sekilde onlem alinabilir.
2_ CSRF: Acilimi 'Cross Site Request Forgery' olan CSRF ataginin Turkce manasi 'Siteler Arasi Istek Sahteciligidir'. Uyuyan Dev olarak da bilinir. Pek bilinmeyen bu saldiri bizzat yonetici kullaniciya dogru yapilir ve sosyal muhendislik gerektirir. CSRF ile e-mail islemleri, kullanici yaratma - kullanici bilgilerini degistirme gibi kullanici islemleri yapmak mumkundur. Bu yuzden dogurabilecegi sonuclar oldukca agir olabilir. CSRF Saldirilari basit kodlarla yapilabilir. CSRF aciginin tespit edilmesinde testler Burp Suite, Paros gibi yazilimlarla yapilabilir. Gmail kullanici bilgileri 2007 yilinda bu yontem ile calinmistir.
3_ SQL Enjeksiyonu: SQL, yani Structured Query Language veritabani islemleri icin gelistirilmis basit yapili bir dildir. SQL Enjeksiyonu, SQL cumlecikleri olusturulurken arada bulunan m.eta karakterler yuzunden ortaya cikan bir aciktir. M.eta karakter programin anlam yukledigi herhangi bir karakterdir. Ms Sql 1433 TCP, 1434 UDP, MySql 3306 TCP/UDP ve Oracle ise 1521,1810,2481 ve 7778 portlarini kullanir. SQL Enjeksiyonu ile hedef sunucuda program calistirilabilir, dosya - dizin islemleri yapilabilir, tablodaki kayitlar degistirilip cekilebilir ve web sayfasi olusturulabilir. Kor, yani Blind SQL Enjeksiyonu ise, hata vermesi gereken sayfanin yonlendirilmesiyle veya engellenmesi durumunda basvurulan yontemdir. Saldirgan SQL cumlelerine dogru ve yanlis cumleler vererek veri calmaya calisir. SQL zafiyetinin kullanilmasi icin Sqlmap, Sqlninja, Sqlier gibi yazilimlar kullanilabilir. Bu acik m.eta karakterlerin filtrelenmesiyle engellenebilir.
4_ Upload Acigi: Web uygulamalarinda bulunan resim, belge, dosya upload etme kisimlarinin kotuye kullanilmasiyla olusan aciktir. Saldirgan, bu tur yerler araciligiyla siteye arka kapi (Backdoor) enjekte edebilir. Bu tarz aciklarin kapatilmasi icin dosya upload kisimlarinda uzanti - dosyanin islevi gelismis filterlar aracigiyla filtrelenmelidir.
5_ File Inclusion: Sizin de bildiginiz isimlerle LFI (Local File Inclusion) ve RFI (Remote File Inclusion) olarak bilinirler. LFI yerel dosya dahil etme, RFI ise uzaktan dosya dahil etme manasina gelir. Zararli kod enjeksiyonu saldirilaridir. PHP web programlama dili ile yazilmis uygulamalarda meydana gelirler. Filtreleme hatalarindan veya degiskene deger atanmamasi durumundan kaynaklanirlar. Korunmak icin degiskene deger atamasi veya 'php.ini' dosyasinin editlenmesi gerekir.
6_ Command Execution: En tehlikeli guvenlik acigidir (10.0). Kod calistirma acigi olarak da bilinir. Komut calistiran web uygulamalarinda ortaya cikan bir aciktir. Hedef sistemde bash komutlari calistirmaya yarar. Genellikle PHP web programlama dili ile programlanan sitelerde ortaya cikar. Bu tur aciklarin genelde PHP uzerinde olusmasinin sebebi karmasik bir dil olmasidir.
7_ XSS Stored/Reflected: Acilimi 'Cross Site Scripting' olarak tanimlanir. XSS, saldirganin hedef sisteme kotu niyetli kodlar ekleyip calistirmasina olanak saglayan acik cesididir. Genelde Javascript yardimi ile kodlar enjekte edilir. XSS ile saldirganlar web sayfasinda yonlendirme, oturum cerezlerini ele gecirme ve siteyi ziyaret eden kullanicilara kotu amacli yazilim bulastirma islemleri gerceklestirilebilir. Stored, yani depolanmis XSS kullanicilarin girdigi metinlerin veritabaninda depolandigi sistemlerde gorunur. Sayfayi ziyaret eden herkese zararli kodu ulastirabilir. Reflected, yani yansitilmis XSS ise zararli kodlarin bulundugu sayfaya hedeflerin sosyal muhendislik yardimiyla yonlendirilmesi ile saglanir. Bu genellikle hedeflerin oturum bilgilerini calmakta kullanilir.
DERS III (BRUTE FORCE DVWA - LOW):
Evet arkadaslar. Artik yavastan DVWA uzerindeki aciklari cozmeye basliyoruz. Brute Force ile baslayacagiz. Gerekli yazilimlarimiz Burp Suite ve Mozilla Firefox. Burp Suite, pentest islemlerinde kullanilan, cok amacli bir web proxy uygulamasidir. Bircok eklenti barindirir. Mozilla Firefox ise bildiginiz uzere bir web tarayicisidir.
Brute Force DVWA - Low Kaynak Kodlari Incelemesi: Baslangic olarak bu guvenlik aciginin bulundugu formun kaynak kodlarini inceleyelim. Kodlara baktigimiz zaman kurulum sirasinda olusturdugumuz MySql ile yapmis oldugumuz DVWA veritabaninda bulunan kullanicilarla forma girdigimiz verileri karsilastirip, dogru veya yanlisligina gore bir karsilama mesaji verdigini gorebiliriz. Formda Brute Force atagini engellemek adina herhangi bir guvenlik onlemi bulunmuyor.
1) Kaynak kodlarimizi inceledigimize gore oncelikle Mozilla Firefox'u acip URL kismina 'http://127.0.0.1/dvwa' yaziyoruz ve giris yapiyoruz. Kullanici adi - sifre default olarak 'admin - password' olarak tanimlanir. Giris yaptiktan sonra 'DVWA Security' kismina gelip dereceyi 'low' yapip submit diyoruz ve ardindan yan taraftan 'Brute Force' butonina tikliyoruz.
2) 'Burp Suite' adli yazilimi calistiriyoruz. Burp Suite adli yazilimi Ubuntu'ya kurmak icin sirasiyla asagidaki komutlari giriyoruz. Bu komutlari uyguladiktan sonra /opt dizininde 'Burp Suite' adli bir dizin olusturulacak ve bu dizine kurulum dosyalari yuklenecektir.
Burp Suite yazilimini kullanmak icin sistemde Java kurulu olmalidir. .jar dosyasini indirdikten sonra 'cd /opt/burpsuite' dizinine gelip calistirmak icin 'java -jar burpsuite_free_v1.5.jar' komutunu kullanmamiz yeterli olacaktir.
3) Burp Suite'nin 'proxy' ozelligini kullanabilmemiz icin tarayicimizi ayarlamamiz gerekmektedir. Mozilla Firefox uzerinden bu ayarlamayi yapmak icin sirasiyla 'Menu > Preferences > Advanced > Network > Settings' yolu izlenir. Daha sonra 'Manual Proxy Configuration' radiobutton'a tik atilir ve 'Http Proxy' kismina 127.0.0.1, port kismina ise 8080 yazilir. Daha sonra 'Use this proxy server for all protocols' checkbox'u isaretlenir ve kaydedilip cikilir.
4) Gerekli ayarlamalar yapildiktan sonra Burp Suite uzerinden 'Proxy' butonuna tikliyoruz ve 'Intercept' dizinine geliyoruz. Bu dizinde eger 'Intercept is Off' diyorsa o butona bir kez tiklatip 'Intercept is On' yazmasini bekliyoruz. DVWA uzerindeki Brute Force yapacagimiz forma rastgele deger atiyoruz. Ornegin 'Kullanici adi: deneme & Sifre: example'. Daha sonra 'Login' butonuna tiklatiyoruz.
5) 'Login' butonuna tikladigimiz anda, Burp Suite uzerinde 'GET' istegimiz gozukecektir. 'Http Get Request', en cok kullanilan methodlardan biridir. Istegimiz gozuktugu zaman sag tiklayip 'Send to Intruder' veya Ctrl+I yapiyoruz ve sirasiyla trafik akisini 'Forward' butonuna basarak devam ettiriyoruz. Istekler bittigi zaman dilersek 'Intercept is On' butonuna tiklayaraktan trafigi dinlemeyi durdurabiliriz. Bu adimi da tamamladiktan sonra ust kisimdaki butonlardan 'Intruder' butonuna tikliyoruz.
6) Intruder dizinine geldigimiz zaman, karsimizda web form uzerinden yaptigimiz istek gozukecektir. '$' arasinda bulunan kisimlar degiskenlerdir ve Burp, bunlari otomatik olarak isaretlemistir. Biz sadece kullanici adi ve sifre denemesi yapacagimiz icin 'Clear $' butonuna tikliyoruz. 'Username' ve 'Password' kisimlarinda bulunan stringleri, bu ornegimizde 'deneme' ve 'example' stringlerini mouse ile isaretleyerek 'Add $' butonuna tikliyoruz. 'Attack Type' kismini 'Cluster Bomb' yapip birakiyoruz.
7) Artik sozluk atagimiza baslayabiliriz. 'Payloads' butonuna tikliyoruz ve 'Payload Set' kismini 1 olarak ayarliyoruz. 1 olarak ayarladigimiz zaman ilk tanimladigimiz degisken, yani 'Username' icin string listemizi belirliyoruz. Daha sonra 'Payload Options' kisminda bulunan 'Enter a new item' textbox bolumune kullanici adlarini sirasiyla yazarak 'Add' butonuna tikliyoruz. Dilersek 'Load, Paste' kisimlarindan hazirda bulunan listeleri programin kullanacagi listeye ekleyebiliriz. Daha sonra 'Payload Set' kismini 2 yaparak 2 degiskenimiz olan sifre kismi icin ayni adimlari uyguluyoruz. Sirada atagin basarili olup olmadigini Burp'un anlamasi icin, giris yapildigi zaman cikacak stringi programa tanitiyoruz. DVWA uzerinden giris yapildigi zaman ortaya 'Welcome to password protected area admin' stringi cikar. Intruder uzerinden 'Options > Grep Match' kismina gelerek varsayilanlari 'Clear' butonuna tiklayarak temizliyoruz ve giris basarili oldugunda ortaya cikan stringi textbox'a yapistirip 'Add' butonuna tikliyoruz. 'Intruder > Start Attack' yolunu izleyerek sozluk atagimizi baslatiyoruz.
Sonuc: Sozluk atagimizin sonucunda, checkbox'un isaretlendigi kisimda web sitesi uzerindeki forma yapilan atagin basarili oldugu degiskenler bulunur. Bu degiskenleri giris kismina yazdigimizda da girisin basarili oldugu sonucuna ulasacagiz. Yani atagimiz basariyla sonuclanmistir. Bu atagi gercek bir sistemde denemis olsaydik, sistemde bulunan yonetici izinlerine erisebilirdik. Sistemde yaptigimiz pentest islemleri basariyla sonuclanmis olurdu. Bu dersten Brute Force atagindan korunmak icin zor ve tahmin edilmesi guc sifreler secmemizi, web formlara Brute Force atagini engelleyici faktorler koymamiz gerektigini ve Brute Force ataginin basarili olmasi durumunda hayati onem arz ettigi sonuclarina ulastik.
DERS IV (COMMAND EXECUTION DVWA - LOW):
Bu dersimizde sizlerle DVWA uzerinde bulunan 'Command Execution' acigini 'Low' derecesinde kullanmayi ogrenecegiz. Bu acik daha once de bahsettigimiz gibi herhangi bir komut calistiran web uygulamalarinda gorulur. Bu acik ile hedef sistemde bash komutlari calistirabiliriz. Bu yuzden en tehlikeli guvenlik acigidir ve genellikle web developerlar bu sebeplerden dolayi komut calistiran uygulamalari hatasiz bir sekilde yazmaya dikkat ederler. Biz bugun Mozilla Firefox, Netcat (nc) adi yazilimlari kullanarak, bu aciga sahip olan sunucuya backconnect olmayi ogrenecegiz.
Command Execution DVWA - Low Kaynak Kodlari Incelemesi: Nereden geldigini bilmeden olmaz diyerekten, formumuzun bu kisminin kaynak kodlarini alt tarafta bulunan 'View Source' kismina basip inceliyoruz. Incelememizin sonucunda eger sunucu Windows ise 'ping <target>', degilse 'ping -c 3<target>' komutunu uygulayacagini goruntuleyebiliriz. Onun disinda bir komut calistirma kod parcacigi oldugunu gorebiliyoruz.
1) Kaynak kodlarini inceledikten sonra oncelikle Mozilla Firefox'u acip URL kismina 'https://127.0.0.1/dvwa' yaziyoruz ve giris yapiyoruz. Kullanici adi - sifre default olarak 'admin - password' olarak tanimlanir. Giris yaptiktan sonra 'DVWA Security' kismina gelip dereceyi 'low' yapip submit diyoruz ve ardindan yan taraftan 'Command Execution' butonina tikliyoruz.
2) Karsimiza 'Ping for FREE' adli bir bolum gelecektir. Bu kisimda, ip adresini yazdigimiz zaman ip adresine icmp paketleri gondererek bu paketlerin ulasma zamanini vs. goruntuleyen bir web application bulunuyor. Yani komut calistiran bir web uygulamasi bulunuyor. Oncelikle bunun uzerinde baska komutlar calistirip calistiramayacagimizi gormek icin ip adresini girecegimiz textbox'a 'cat /etc/passwd' komutunu yaziyoruz. 'etc/passwd' sisteme erisimi olan kullanicilarin oturum bilgilerinin sifrelenmis bir bicimde yer aldigi kisimdir. Bu komutu yazdigimiz zaman karsimiza hicbir sey cikmadi, demek ki bir yerlerde hata yaptik.
3) Textbox'a ne yazarsak yazalim, ip adresi olmadigi surece herhangi bir hata vs. cikartmiyor. Bu sebepten oturu ip adresini yazip yanina 'cat /etc/passwd' yazmayi deneyelim. Bu denemeyi ';' yardimi ile yapacagiz. Noktali virgul, Linux uzerinde bir komuttan sonra baska bir komut calistirilmasi icin kullanilir. Yani komutumuz asagidaki gibi olacaktir. Komutu denedikten sonra ise yaradigini gorecegiz. Simdi Netcat ile terminalden sunucuya baglanmak adina erisimi saglama islemine gecebiliriz.
4) Bu baglantiyi kurmak icin, 4443 numarali portu (Port numarasi fark etmez) sunucuda dinlemeye alip, terminal uzerinden netcat yardimi ile sunucuya o port uzerinden baglanmamiz gerekmektedir. Port, herhangi 2 cihaz arasinda iletisimi saglayan veri kanalina verilen isimdir. Web sayfasi uzerinden 4443 numarali portu dinlemeye almak icin:
komutunu kullanacagiz. Mkfifo komutu, isimlendirilmis bir pipe olusturmak icin kullanilir (FIFO). Pipe ise islemler arasi iletisim icin kullanilan bir isarettir. 'nc -l 4443' komutu ile 4443 numarali portu dinlemeye aldik.
5) Son adim olarak terminal uzerinden sunucunun dinlettigi port araciligi ile giris sagliyoruz. Bunun icin 'nc -v 127.0.0.1 4443' komutunu kullaniyoruz. Bu komuttan sonra 'Connection to 127.0.0.1 4443 port [tcp/*] succeeded!' gibi bir uyari mesaji ile karsilastiysak islem tamamlanmistir. Sunucuya bind tcp ile giris saglamis bulunuyoruz.
Sonuc: Command Execution acigi bulunan bir sisteme Netcat yardimiyla bash uzerinden connect olduk. Dolayisiyla sistemde rahatlikla komut calistirabiliriz. Eger permission olarak yetersiz isek, 'uname -a' komutu ile kernel surumunu ogrenip, bu surume uygun local root exploit ile root izinlerine sahip olabilir, sunucuda hak kazanabilir, yetki yukseltebiliriz. Exploit arayici olarak 'Searchsploit' aracini kullanabilirsiniz. Command Execution aciginin neden bu kadar onem arz ettigini bu pentest ornegimiz uzerinden fark etmis bulunduk.
Simdiki dersimizde, DVWA uzerinde bulunan CSRF, yani 'Cross Site Request Forgery' acigini 'Low' derecesinde kullanmayi ogrenecegiz. CSRF, bildigimiz uzere sunucuda yetki sahibi herhangi bir kullanicida istem disi istekler calistirmamizi saglayan aciktir. Bu acigi bugun, DVWA uzerinden cok az bir miktar 'Social Engineering' (Sosyal Muhendislik) kullanarak, yonetim yetkisine sahip kullanicinin oturum sifresini degistirmek icin kullanacagiz. Bu asamalarda, simdilik 'gedit' adli text editorunu ve HTML kodlama bilgimizi kullanacagiz.
CSRF DVWA - Low Kaynak Kodlari Incelemesi: Kodlari inceleyelim. PHP ile yazilmis olan kaynak kodlarini inceledigimiz zaman, MySql veritabani uzerinde bulunan yonetim kullanicisi (Admin)'nin oturum bilgilerinin, HTTP GET methodu ile aktarilip form uzerindeki bilgilerle, MD5 hash seklinde veritabanina kaydedilmesi seklinde bir sonuca ulasmis olacagiz. Kaynak kodlarini inceledigimize gore bu aciktan yararlanma kismina gecelim.
1) Kaynak kodlari hakkinda bir fikir edindikten sonra oncelikle Mozilla Firefox'u acip URL kismina 'https://127.0.0.1/dvwa' yaziyoruz ve giris yapiyoruz. Kullanici adi - sifre default olarak 'admin - password' olarak tanimlanir. Giris yaptiktan sonra 'DVWA Security' kismina gelip dereceyi 'low' yapip submit diyoruz ve ardindan yan taraftan 'CSRF' butonina tikliyoruz. Karsimiza bir kullanici sifresi degistirme formu gelecektir.
2) Giris yaptiktan sonra artik adimlarimiza baslayabiliriz. Daha onceden de dedigim gibi bugun 'CSRF' acigi ile yonetici kullanicinin (Administrator) sifresini degistirecegiz. Bu olay icin hedef sistemde bulunan form hakkinda az da olsa bir fikir sahibi olmamiz gerekir. Bunun icin rastgele degerler atayarak kullanici sifresini degistirelim. Ben sifreyi 'TestPass' olarak degistirecegim.
3) Yonetim kullanicisinin sifresini degistirdigimiz zaman, karsimiza 'Password Changed' adli bir kontrol mesaji cikti, URL kisminda bizi bir URL adresine yonlendirdigini gorduk. Yani forma girdigimiz degerler aynen URL uzerindeki degiskenlere tanimlanarak, gidilen degisken URL'ye gore sifremiz degisiyor. Bundan emin olmak icin asagidaki URL adresine gidelim ve sifremizin degisip degismedigini teyit edelim, bu ornege gore sifremizin 'TestPass1' olarak degismesi gerekir.
4) Sifremizi teyit ettikten sonra artik emin olabiliriz ki, penetrasyon testleri (Pen-Test) yaptigimiz sitede potansiyel bir CSRF acigi var. Bu aciktan yararlanmak icin ilk basta herhangi bir text editor ile (Tercihen Gedit - NetBeans IDE) HTML bir form kodlayacagiz. Terminale 'gedit' yazarak text editorumuzu baslatiyoruz ve asagidaki kodlari yaziyoruz:
Daha sonra bu dosyayi kaydedip uzantisini '.html' olarak degistiriyoruz. Bu kodlar yardimi ile, kullanici 'img src' tagi ile yazilan URL adresinde bulunan image'i cekecektir. Yani o URL adresine dolayli yoldan gitmis olacaktir. 'Height' ve 'Weight' parametrelerini sifirlayarak bos resmin goruntulenmemesini saglamis olduk. Biz o URL adresine CSRF acigi bulunan adresi yazdigimiz zaman o adrese gitmis olacak, sifresi degismis olacaktir. Simdi bu dosyayi acalim.
5) Dosyayi actigimiz zaman gorecegiz ki, sifremiz 'TestPass2' olarak degismis olacaktir. giris yapacagimiz zaman da belirledigimiz sifre ile girmemiz gerekecektir. Yani atagimiz basarili olmus olacak. Bu testi gercek platformlarda yapmak istersek bu dosyayi herhangi bir siteye upload edip sosyal muhendislik yetenegimizi konusturmamiz gerekecektir. Yani site yoneticisinin herhangi bir yolla bu URL adresine gitmesini saglamamiz gerekecektir.
Sonuc: CSRF acigindan yararlanarak yoneticiye sosyal muhendislik ile bir URL adresi verdik. Bu adresin kodlarinda hedef sistemde bulunan yonetici kullanicisinin sifresini degistirmeye yarayan kodlar vardi. CSRF acigi sayesinde sistemde izinsiz hak yukseltme yapabilir, kullanici ekleme - silme - degistirme, kisacasi kullanici islemleri yapabilir ve erisimi sagladigimiz site uzerinde bircok islem gerceklestirebiliriz. Bu acik sayesinde hatirladigim kadariyla 2009 yilinda Google Mail (Gmail) kullanici hesaplari hacklenmisti. Bu pentest islemlerimizin sonucunda CSRF acigi hakkinda bilgi sahibi olduk ve bu acigin ne kadar onem tasidigini ogrendik.
Ek Bilgi: MD5, yani Message Digest 5 hexadecimal (16'lik) karakterlerden olusan 32 haneli, 128 bit bir hash algoritmasidir. 3 gb'lik (Gigabyte) bir iso dosyasini da MD5 ile hashleseniz (md5sum), 5 haneli bir stringi de MD5 ile hashleseniz sonuc olarak 32 haneli bir string elde edeceksinizdir. MD5 128 bit olmasina ragmen 32 hanelidir, cunku her digit 4 bittir. MD5 karakterlerden degil hexadecimal digitlerden olusur. MD5'in kirilmasi teorik olarak imkansizdir, cunku daha once de dedigim gibi tek yonludur (OneWay). Ancak Rainbow Table uzerinden onceden cozumlenmis MD5'lerin karsiligi olan stringleri bulabilir, veya John the Ripper - Hashcat gibi hash uzerinde Brute Force Atagi, Sozluk Atagi veya Hybird uygulayan yazilimlarla cozumlenebilir fakat bu olay yuzyillar alabilir.
DVWA, yani Damn Vulnerable Web Application web uygulama guvenligi alaninda kendini gelistirmek ve tecrube kazanmak isteyen guvenlik uzmanlari icin olusturulmus PHP tabanli, seviyenize gore dusuk, orta ve yuksek derecelerde aciklar olusturan, localhost (127.0.0.1) uzerinde calisan bir web uygulamasidir. DVWA bize;
- Brute Force,
- CSRF,
- SQL Enjeksiyonu,
- Upload Vuln.
- File Inclusion,
- Command Execution,
- XSS Reflected/Stored,
1_ 'sudo su' komutu ile terminal uzerinde yonetici izinlerine sahip olunur. Asagidaki komut yardimiyla MySql, bilgisayara kurulur. MySql coklu kullanici barindirma icerigi sunan bir veritabani yonetim sistemidir. Kurulum esnasinda sizden MySql icin bir sifre ister. Onu girersiniz ve kurulum sona erer.
Kod:
root@archLuser:~# apt-get install mysql-server
Kod:
root@archLuser:~# apt-get install unzip apache2 php5 php5-mysql php-pear
Kod:
root@archLuser:~# cd /var/www/html
root@archLuser:/var/www/html# wget https://github.com/RandomStorm/DVWA/archive/v1.0.8.zip
root@archLuser:/var/www/html# unzip v1.0.8.zip
root@archLuser:/var/www/html# mv DVWA-1.0.8 dvwa
a) DVWA config dosyasi editlenir. Bunun icin;
Kod:
root@archLuser:/var/www/html# nano dvwa/config/config.inc.php
komutu ile config (ayar) dosyasi herhangi bir text editor ile acilir. Biz bugun nano'yu kullandik. Karsimiza cikan ekranda 'db_password' kismi MySql kurulumunda belirledigimiz sifre yapilir ve Ctrl+X komutu ile cikilir.
b) Terminal uzerinden Apache PHP ayarlari duzenlenir. Bunun icin ise;
Kod:
root@archLuser:~# nano /etc/php5/apache2/php.ini
komutu kullanilir. 'allow_url_include' kismi bulunarak 'Off' ayari 'On' olarak degistirilir. Bu da yapildiktan sonra;
Kod:
root@archLuser:~# chmod -R 777 /var/www/html/dvwa
komutu ile klasor izinleri duzenlenir. -R operatoru normalde dosya izinlerini duzenlemek icin kullanilan 'chmod' komutunun klasor izinlerini de duzenlemesini saglar.
c) Asagidaki komutlar sirasiyla yazilarak MySql sifresi girilir ve 'dvwa' adiyla MySql veritabani olusturulur, MySql baglantisi 'exit' komutuyla koparilir.
Kod:
root@archLuser:~# mysql -u root -p
root@archLuser:~# create database dvwa;
root@archLuser:~# exit
d) Apache2 ayar (config) dosyasi duzenlenir. Bunun icin asagidaki komut ile text dosyasi acilir, en alt satira 'ServerName localhost' yazilir, Ctrl+X ile kaydedilip cikilir.
Kod:
root@archLuser:~# nano /etc/apache2/apache2.conf
5_ Apache2 servisi baslatilir. Bunun icin 'service apache2 start' komutu kullanilir. Bu adimdan sonra herhangi bir web tarayicisi acilarak (Tercihen Mozilla Firefox) 'https://127.0.0.1/dvwa/setup.php' URL (Uniform Resource Locator) adresine gidilir ve uzerinde 'Create/Reset Database' yazan butona tiklayarak veritabani olusturulur.
6_ Geldik son adimimiza.. Bu adimda 'https://127.0.0.1/dvwa/' URL adresine gidilir ve;
Kod:
Kullanici adi: admin
Sifre: password
olacak sekilde giris yapilir. Bundan sonra yapacaklariniz size kalmistir. Bu web uygulamasini Windows uzerinden 'wamp server' adli yazilim ile kullanabilirsiniz.
DERS II (GUVENLIK ZAFIYETLERI):
Bu dersimizde, DVWA'da bulunan, en cok kullanilan guvenlik aciklarini taniyacagiz. Once guvenlik zaafiyetinin kelime manasi ile derse baslayalim. Guvenlik acigi, kelime manasi olarak herhangi bir sistem, cihaz veya sunucuda meydana gelen, guvenligi tehlikeye atabilecek veya kotu amacli kisiler tarafindan degerlendirilebilecek zayifliklara verilen isimdir. Guvenlik acigi herhangi bir ortamda, insanda bile olusabilir (Sosyal Muhendislik). Guvenlik aciklarini arttirmak mumkundur. Binbir cesit acik vardir. Biz bu dersimizde DVWA dolayisiyla, web uygulamalarinda meydana gelen, en cok kullanilan zayifliklari anlamaya, ogrenmeye calisacagiz. Ilk dersimizde olusturdugumuz siralamayi takip edecegiz. Bu siralamaya gecmeden once belirtmek isterim ki, ilerideki derslerde DVWA uzerinde sizma islemi sadece tek bir yontemle gerceklesecektir. Diger yontemleri guvenlik aciginin bulundugu bolumde bulunan 'view help' butonuna tiklayarak goruntuleyebilir, fikir edinebilirsiniz. Yine o bolumlerde bulunan 'view source' butonuna tiklayarak formun sourcesini (kaynak kodlarini) goruntuleyebilir, sizma islemi icin fikir edinebilirsiniz.
1_ Brute Force Atagi: Brute Force, sozluk sirasina gore artan karakterlerle 1..9, a..b, A..B ve ozel karakterler kullanarak stringler ureten ve bu stringleri pop3, smtp, smb, ftp, http, e-mail gibi protokoller veya html formlari uzerinde deneyen atak cesididir. Eger bu atak cesidinde belli bir sozluk kullanilirsa 'Sozluk Atagi', once sozluk atagi uygulanip daha sonra brute force atagi kullanilirsa da 'Hybrid Atagi' olarak isimlendirilir. Tum bu ataklarda amac, hedef sisteme deneme - yanilma yoluyla sizmaktir. Bu tur ataklari uygulamak icin Hydra, Brutus, Medusa gibi araclar kullanilabilir.
Web formlarda Brute Force atagina karsi alinabilecek en iyi onlem, belli bir sifre deneme sayisindan sonra CAPTCHA (Completely Automated Public Turing Test To Tell Computers and Humans Apart) kodu, herhangi bir guvenlik kodu vs. girilmesinin istenmesidir. Bu sayede robotlara karsi en iyi sekilde onlem alinabilir.
3_ SQL Enjeksiyonu: SQL, yani Structured Query Language veritabani islemleri icin gelistirilmis basit yapili bir dildir. SQL Enjeksiyonu, SQL cumlecikleri olusturulurken arada bulunan m.eta karakterler yuzunden ortaya cikan bir aciktir. M.eta karakter programin anlam yukledigi herhangi bir karakterdir. Ms Sql 1433 TCP, 1434 UDP, MySql 3306 TCP/UDP ve Oracle ise 1521,1810,2481 ve 7778 portlarini kullanir. SQL Enjeksiyonu ile hedef sunucuda program calistirilabilir, dosya - dizin islemleri yapilabilir, tablodaki kayitlar degistirilip cekilebilir ve web sayfasi olusturulabilir. Kor, yani Blind SQL Enjeksiyonu ise, hata vermesi gereken sayfanin yonlendirilmesiyle veya engellenmesi durumunda basvurulan yontemdir. Saldirgan SQL cumlelerine dogru ve yanlis cumleler vererek veri calmaya calisir. SQL zafiyetinin kullanilmasi icin Sqlmap, Sqlninja, Sqlier gibi yazilimlar kullanilabilir. Bu acik m.eta karakterlerin filtrelenmesiyle engellenebilir.
4_ Upload Acigi: Web uygulamalarinda bulunan resim, belge, dosya upload etme kisimlarinin kotuye kullanilmasiyla olusan aciktir. Saldirgan, bu tur yerler araciligiyla siteye arka kapi (Backdoor) enjekte edebilir. Bu tarz aciklarin kapatilmasi icin dosya upload kisimlarinda uzanti - dosyanin islevi gelismis filterlar aracigiyla filtrelenmelidir.
5_ File Inclusion: Sizin de bildiginiz isimlerle LFI (Local File Inclusion) ve RFI (Remote File Inclusion) olarak bilinirler. LFI yerel dosya dahil etme, RFI ise uzaktan dosya dahil etme manasina gelir. Zararli kod enjeksiyonu saldirilaridir. PHP web programlama dili ile yazilmis uygulamalarda meydana gelirler. Filtreleme hatalarindan veya degiskene deger atanmamasi durumundan kaynaklanirlar. Korunmak icin degiskene deger atamasi veya 'php.ini' dosyasinin editlenmesi gerekir.
6_ Command Execution: En tehlikeli guvenlik acigidir (10.0). Kod calistirma acigi olarak da bilinir. Komut calistiran web uygulamalarinda ortaya cikan bir aciktir. Hedef sistemde bash komutlari calistirmaya yarar. Genellikle PHP web programlama dili ile programlanan sitelerde ortaya cikar. Bu tur aciklarin genelde PHP uzerinde olusmasinin sebebi karmasik bir dil olmasidir.
7_ XSS Stored/Reflected: Acilimi 'Cross Site Scripting' olarak tanimlanir. XSS, saldirganin hedef sisteme kotu niyetli kodlar ekleyip calistirmasina olanak saglayan acik cesididir. Genelde Javascript yardimi ile kodlar enjekte edilir. XSS ile saldirganlar web sayfasinda yonlendirme, oturum cerezlerini ele gecirme ve siteyi ziyaret eden kullanicilara kotu amacli yazilim bulastirma islemleri gerceklestirilebilir. Stored, yani depolanmis XSS kullanicilarin girdigi metinlerin veritabaninda depolandigi sistemlerde gorunur. Sayfayi ziyaret eden herkese zararli kodu ulastirabilir. Reflected, yani yansitilmis XSS ise zararli kodlarin bulundugu sayfaya hedeflerin sosyal muhendislik yardimiyla yonlendirilmesi ile saglanir. Bu genellikle hedeflerin oturum bilgilerini calmakta kullanilir.
DERS III (BRUTE FORCE DVWA - LOW):
Evet arkadaslar. Artik yavastan DVWA uzerindeki aciklari cozmeye basliyoruz. Brute Force ile baslayacagiz. Gerekli yazilimlarimiz Burp Suite ve Mozilla Firefox. Burp Suite, pentest islemlerinde kullanilan, cok amacli bir web proxy uygulamasidir. Bircok eklenti barindirir. Mozilla Firefox ise bildiginiz uzere bir web tarayicisidir.
Brute Force DVWA - Low Kaynak Kodlari Incelemesi: Baslangic olarak bu guvenlik aciginin bulundugu formun kaynak kodlarini inceleyelim. Kodlara baktigimiz zaman kurulum sirasinda olusturdugumuz MySql ile yapmis oldugumuz DVWA veritabaninda bulunan kullanicilarla forma girdigimiz verileri karsilastirip, dogru veya yanlisligina gore bir karsilama mesaji verdigini gorebiliriz. Formda Brute Force atagini engellemek adina herhangi bir guvenlik onlemi bulunmuyor.
1) Kaynak kodlarimizi inceledigimize gore oncelikle Mozilla Firefox'u acip URL kismina 'http://127.0.0.1/dvwa' yaziyoruz ve giris yapiyoruz. Kullanici adi - sifre default olarak 'admin - password' olarak tanimlanir. Giris yaptiktan sonra 'DVWA Security' kismina gelip dereceyi 'low' yapip submit diyoruz ve ardindan yan taraftan 'Brute Force' butonina tikliyoruz.
2) 'Burp Suite' adli yazilimi calistiriyoruz. Burp Suite adli yazilimi Ubuntu'ya kurmak icin sirasiyla asagidaki komutlari giriyoruz. Bu komutlari uyguladiktan sonra /opt dizininde 'Burp Suite' adli bir dizin olusturulacak ve bu dizine kurulum dosyalari yuklenecektir.
Kod:
sudo su
cd /opt
mkdir burpsuite
cd /opt/burpsuite
wget [URL]https://portswigger.net/burp/burpsuite_free_v1.5.jar[/URL]
Burp Suite yazilimini kullanmak icin sistemde Java kurulu olmalidir. .jar dosyasini indirdikten sonra 'cd /opt/burpsuite' dizinine gelip calistirmak icin 'java -jar burpsuite_free_v1.5.jar' komutunu kullanmamiz yeterli olacaktir.
3) Burp Suite'nin 'proxy' ozelligini kullanabilmemiz icin tarayicimizi ayarlamamiz gerekmektedir. Mozilla Firefox uzerinden bu ayarlamayi yapmak icin sirasiyla 'Menu > Preferences > Advanced > Network > Settings' yolu izlenir. Daha sonra 'Manual Proxy Configuration' radiobutton'a tik atilir ve 'Http Proxy' kismina 127.0.0.1, port kismina ise 8080 yazilir. Daha sonra 'Use this proxy server for all protocols' checkbox'u isaretlenir ve kaydedilip cikilir.
4) Gerekli ayarlamalar yapildiktan sonra Burp Suite uzerinden 'Proxy' butonuna tikliyoruz ve 'Intercept' dizinine geliyoruz. Bu dizinde eger 'Intercept is Off' diyorsa o butona bir kez tiklatip 'Intercept is On' yazmasini bekliyoruz. DVWA uzerindeki Brute Force yapacagimiz forma rastgele deger atiyoruz. Ornegin 'Kullanici adi: deneme & Sifre: example'. Daha sonra 'Login' butonuna tiklatiyoruz.
5) 'Login' butonuna tikladigimiz anda, Burp Suite uzerinde 'GET' istegimiz gozukecektir. 'Http Get Request', en cok kullanilan methodlardan biridir. Istegimiz gozuktugu zaman sag tiklayip 'Send to Intruder' veya Ctrl+I yapiyoruz ve sirasiyla trafik akisini 'Forward' butonuna basarak devam ettiriyoruz. Istekler bittigi zaman dilersek 'Intercept is On' butonuna tiklayaraktan trafigi dinlemeyi durdurabiliriz. Bu adimi da tamamladiktan sonra ust kisimdaki butonlardan 'Intruder' butonuna tikliyoruz.
6) Intruder dizinine geldigimiz zaman, karsimizda web form uzerinden yaptigimiz istek gozukecektir. '$' arasinda bulunan kisimlar degiskenlerdir ve Burp, bunlari otomatik olarak isaretlemistir. Biz sadece kullanici adi ve sifre denemesi yapacagimiz icin 'Clear $' butonuna tikliyoruz. 'Username' ve 'Password' kisimlarinda bulunan stringleri, bu ornegimizde 'deneme' ve 'example' stringlerini mouse ile isaretleyerek 'Add $' butonuna tikliyoruz. 'Attack Type' kismini 'Cluster Bomb' yapip birakiyoruz.
7) Artik sozluk atagimiza baslayabiliriz. 'Payloads' butonuna tikliyoruz ve 'Payload Set' kismini 1 olarak ayarliyoruz. 1 olarak ayarladigimiz zaman ilk tanimladigimiz degisken, yani 'Username' icin string listemizi belirliyoruz. Daha sonra 'Payload Options' kisminda bulunan 'Enter a new item' textbox bolumune kullanici adlarini sirasiyla yazarak 'Add' butonuna tikliyoruz. Dilersek 'Load, Paste' kisimlarindan hazirda bulunan listeleri programin kullanacagi listeye ekleyebiliriz. Daha sonra 'Payload Set' kismini 2 yaparak 2 degiskenimiz olan sifre kismi icin ayni adimlari uyguluyoruz. Sirada atagin basarili olup olmadigini Burp'un anlamasi icin, giris yapildigi zaman cikacak stringi programa tanitiyoruz. DVWA uzerinden giris yapildigi zaman ortaya 'Welcome to password protected area admin' stringi cikar. Intruder uzerinden 'Options > Grep Match' kismina gelerek varsayilanlari 'Clear' butonuna tiklayarak temizliyoruz ve giris basarili oldugunda ortaya cikan stringi textbox'a yapistirip 'Add' butonuna tikliyoruz. 'Intruder > Start Attack' yolunu izleyerek sozluk atagimizi baslatiyoruz.
Sonuc: Sozluk atagimizin sonucunda, checkbox'un isaretlendigi kisimda web sitesi uzerindeki forma yapilan atagin basarili oldugu degiskenler bulunur. Bu degiskenleri giris kismina yazdigimizda da girisin basarili oldugu sonucuna ulasacagiz. Yani atagimiz basariyla sonuclanmistir. Bu atagi gercek bir sistemde denemis olsaydik, sistemde bulunan yonetici izinlerine erisebilirdik. Sistemde yaptigimiz pentest islemleri basariyla sonuclanmis olurdu. Bu dersten Brute Force atagindan korunmak icin zor ve tahmin edilmesi guc sifreler secmemizi, web formlara Brute Force atagini engelleyici faktorler koymamiz gerektigini ve Brute Force ataginin basarili olmasi durumunda hayati onem arz ettigi sonuclarina ulastik.
DERS IV (COMMAND EXECUTION DVWA - LOW):
Bu dersimizde sizlerle DVWA uzerinde bulunan 'Command Execution' acigini 'Low' derecesinde kullanmayi ogrenecegiz. Bu acik daha once de bahsettigimiz gibi herhangi bir komut calistiran web uygulamalarinda gorulur. Bu acik ile hedef sistemde bash komutlari calistirabiliriz. Bu yuzden en tehlikeli guvenlik acigidir ve genellikle web developerlar bu sebeplerden dolayi komut calistiran uygulamalari hatasiz bir sekilde yazmaya dikkat ederler. Biz bugun Mozilla Firefox, Netcat (nc) adi yazilimlari kullanarak, bu aciga sahip olan sunucuya backconnect olmayi ogrenecegiz.
Command Execution DVWA - Low Kaynak Kodlari Incelemesi: Nereden geldigini bilmeden olmaz diyerekten, formumuzun bu kisminin kaynak kodlarini alt tarafta bulunan 'View Source' kismina basip inceliyoruz. Incelememizin sonucunda eger sunucu Windows ise 'ping <target>', degilse 'ping -c 3<target>' komutunu uygulayacagini goruntuleyebiliriz. Onun disinda bir komut calistirma kod parcacigi oldugunu gorebiliyoruz.
1) Kaynak kodlarini inceledikten sonra oncelikle Mozilla Firefox'u acip URL kismina 'https://127.0.0.1/dvwa' yaziyoruz ve giris yapiyoruz. Kullanici adi - sifre default olarak 'admin - password' olarak tanimlanir. Giris yaptiktan sonra 'DVWA Security' kismina gelip dereceyi 'low' yapip submit diyoruz ve ardindan yan taraftan 'Command Execution' butonina tikliyoruz.
2) Karsimiza 'Ping for FREE' adli bir bolum gelecektir. Bu kisimda, ip adresini yazdigimiz zaman ip adresine icmp paketleri gondererek bu paketlerin ulasma zamanini vs. goruntuleyen bir web application bulunuyor. Yani komut calistiran bir web uygulamasi bulunuyor. Oncelikle bunun uzerinde baska komutlar calistirip calistiramayacagimizi gormek icin ip adresini girecegimiz textbox'a 'cat /etc/passwd' komutunu yaziyoruz. 'etc/passwd' sisteme erisimi olan kullanicilarin oturum bilgilerinin sifrelenmis bir bicimde yer aldigi kisimdir. Bu komutu yazdigimiz zaman karsimiza hicbir sey cikmadi, demek ki bir yerlerde hata yaptik.
3) Textbox'a ne yazarsak yazalim, ip adresi olmadigi surece herhangi bir hata vs. cikartmiyor. Bu sebepten oturu ip adresini yazip yanina 'cat /etc/passwd' yazmayi deneyelim. Bu denemeyi ';' yardimi ile yapacagiz. Noktali virgul, Linux uzerinde bir komuttan sonra baska bir komut calistirilmasi icin kullanilir. Yani komutumuz asagidaki gibi olacaktir. Komutu denedikten sonra ise yaradigini gorecegiz. Simdi Netcat ile terminalden sunucuya baglanmak adina erisimi saglama islemine gecebiliriz.
Kod:
192.168.1.1; cat /etc/passwd
4) Bu baglantiyi kurmak icin, 4443 numarali portu (Port numarasi fark etmez) sunucuda dinlemeye alip, terminal uzerinden netcat yardimi ile sunucuya o port uzerinden baglanmamiz gerekmektedir. Port, herhangi 2 cihaz arasinda iletisimi saglayan veri kanalina verilen isimdir. Web sayfasi uzerinden 4443 numarali portu dinlemeye almak icin:
Kod:
192.168.1.1 ;mkfifo /tmp/pipe ;sh /tmp/pipe | nc -l 4443 > /tmp/pipe
komutunu kullanacagiz. Mkfifo komutu, isimlendirilmis bir pipe olusturmak icin kullanilir (FIFO). Pipe ise islemler arasi iletisim icin kullanilan bir isarettir. 'nc -l 4443' komutu ile 4443 numarali portu dinlemeye aldik.
5) Son adim olarak terminal uzerinden sunucunun dinlettigi port araciligi ile giris sagliyoruz. Bunun icin 'nc -v 127.0.0.1 4443' komutunu kullaniyoruz. Bu komuttan sonra 'Connection to 127.0.0.1 4443 port [tcp/*] succeeded!' gibi bir uyari mesaji ile karsilastiysak islem tamamlanmistir. Sunucuya bind tcp ile giris saglamis bulunuyoruz.
Sonuc: Command Execution acigi bulunan bir sisteme Netcat yardimiyla bash uzerinden connect olduk. Dolayisiyla sistemde rahatlikla komut calistirabiliriz. Eger permission olarak yetersiz isek, 'uname -a' komutu ile kernel surumunu ogrenip, bu surume uygun local root exploit ile root izinlerine sahip olabilir, sunucuda hak kazanabilir, yetki yukseltebiliriz. Exploit arayici olarak 'Searchsploit' aracini kullanabilirsiniz. Command Execution aciginin neden bu kadar onem arz ettigini bu pentest ornegimiz uzerinden fark etmis bulunduk.
Ek Bilgi: Exploit, sistemin acigini kullanmak, ele gecirmek veya veri cekmek amaciyla olusturulan, genelde C, Perl, Python ve Ruby dilleri ile yazilan araclar ve yazilimlardir. Exploit cok genis bir kavramdir. Bu yuzden sadece yuzeysel bir anlatim yapacagiz. Exploit,
- Remote Exploit
- Local Exploit
- 0day Exploit
DERS V (CSRF DVWA - LOW):
Simdiki dersimizde, DVWA uzerinde bulunan CSRF, yani 'Cross Site Request Forgery' acigini 'Low' derecesinde kullanmayi ogrenecegiz. CSRF, bildigimiz uzere sunucuda yetki sahibi herhangi bir kullanicida istem disi istekler calistirmamizi saglayan aciktir. Bu acigi bugun, DVWA uzerinden cok az bir miktar 'Social Engineering' (Sosyal Muhendislik) kullanarak, yonetim yetkisine sahip kullanicinin oturum sifresini degistirmek icin kullanacagiz. Bu asamalarda, simdilik 'gedit' adli text editorunu ve HTML kodlama bilgimizi kullanacagiz.
CSRF DVWA - Low Kaynak Kodlari Incelemesi: Kodlari inceleyelim. PHP ile yazilmis olan kaynak kodlarini inceledigimiz zaman, MySql veritabani uzerinde bulunan yonetim kullanicisi (Admin)'nin oturum bilgilerinin, HTTP GET methodu ile aktarilip form uzerindeki bilgilerle, MD5 hash seklinde veritabanina kaydedilmesi seklinde bir sonuca ulasmis olacagiz. Kaynak kodlarini inceledigimize gore bu aciktan yararlanma kismina gecelim.
1) Kaynak kodlari hakkinda bir fikir edindikten sonra oncelikle Mozilla Firefox'u acip URL kismina 'https://127.0.0.1/dvwa' yaziyoruz ve giris yapiyoruz. Kullanici adi - sifre default olarak 'admin - password' olarak tanimlanir. Giris yaptiktan sonra 'DVWA Security' kismina gelip dereceyi 'low' yapip submit diyoruz ve ardindan yan taraftan 'CSRF' butonina tikliyoruz. Karsimiza bir kullanici sifresi degistirme formu gelecektir.
2) Giris yaptiktan sonra artik adimlarimiza baslayabiliriz. Daha onceden de dedigim gibi bugun 'CSRF' acigi ile yonetici kullanicinin (Administrator) sifresini degistirecegiz. Bu olay icin hedef sistemde bulunan form hakkinda az da olsa bir fikir sahibi olmamiz gerekir. Bunun icin rastgele degerler atayarak kullanici sifresini degistirelim. Ben sifreyi 'TestPass' olarak degistirecegim.
3) Yonetim kullanicisinin sifresini degistirdigimiz zaman, karsimiza 'Password Changed' adli bir kontrol mesaji cikti, URL kisminda bizi bir URL adresine yonlendirdigini gorduk. Yani forma girdigimiz degerler aynen URL uzerindeki degiskenlere tanimlanarak, gidilen degisken URL'ye gore sifremiz degisiyor. Bundan emin olmak icin asagidaki URL adresine gidelim ve sifremizin degisip degismedigini teyit edelim, bu ornege gore sifremizin 'TestPass1' olarak degismesi gerekir.
Kod:
http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=[COLOR=Red]TestPass1[/COLOR]&password_conf=[COLOR=Red]TestPass1[/COLOR]&Change=Change#
4) Sifremizi teyit ettikten sonra artik emin olabiliriz ki, penetrasyon testleri (Pen-Test) yaptigimiz sitede potansiyel bir CSRF acigi var. Bu aciktan yararlanmak icin ilk basta herhangi bir text editor ile (Tercihen Gedit - NetBeans IDE) HTML bir form kodlayacagiz. Terminale 'gedit' yazarak text editorumuzu baslatiyoruz ve asagidaki kodlari yaziyoruz:
Kod:
<!DOCTYPE html>
<html>
<head>
<title>Pen-Test Ornek</title>
</head>
<body>
<img src="http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=TestPass2&password_conf=TestPass2&Change=Change#" width="0" height="0">
</body>
</html>
Daha sonra bu dosyayi kaydedip uzantisini '.html' olarak degistiriyoruz. Bu kodlar yardimi ile, kullanici 'img src' tagi ile yazilan URL adresinde bulunan image'i cekecektir. Yani o URL adresine dolayli yoldan gitmis olacaktir. 'Height' ve 'Weight' parametrelerini sifirlayarak bos resmin goruntulenmemesini saglamis olduk. Biz o URL adresine CSRF acigi bulunan adresi yazdigimiz zaman o adrese gitmis olacak, sifresi degismis olacaktir. Simdi bu dosyayi acalim.
5) Dosyayi actigimiz zaman gorecegiz ki, sifremiz 'TestPass2' olarak degismis olacaktir. giris yapacagimiz zaman da belirledigimiz sifre ile girmemiz gerekecektir. Yani atagimiz basarili olmus olacak. Bu testi gercek platformlarda yapmak istersek bu dosyayi herhangi bir siteye upload edip sosyal muhendislik yetenegimizi konusturmamiz gerekecektir. Yani site yoneticisinin herhangi bir yolla bu URL adresine gitmesini saglamamiz gerekecektir.
Sonuc: CSRF acigindan yararlanarak yoneticiye sosyal muhendislik ile bir URL adresi verdik. Bu adresin kodlarinda hedef sistemde bulunan yonetici kullanicisinin sifresini degistirmeye yarayan kodlar vardi. CSRF acigi sayesinde sistemde izinsiz hak yukseltme yapabilir, kullanici ekleme - silme - degistirme, kisacasi kullanici islemleri yapabilir ve erisimi sagladigimiz site uzerinde bircok islem gerceklestirebiliriz. Bu acik sayesinde hatirladigim kadariyla 2009 yilinda Google Mail (Gmail) kullanici hesaplari hacklenmisti. Bu pentest islemlerimizin sonucunda CSRF acigi hakkinda bilgi sahibi olduk ve bu acigin ne kadar onem tasidigini ogrendik.
Ek Bilgi: MD5, yani Message Digest 5 hexadecimal (16'lik) karakterlerden olusan 32 haneli, 128 bit bir hash algoritmasidir. 3 gb'lik (Gigabyte) bir iso dosyasini da MD5 ile hashleseniz (md5sum), 5 haneli bir stringi de MD5 ile hashleseniz sonuc olarak 32 haneli bir string elde edeceksinizdir. MD5 128 bit olmasina ragmen 32 hanelidir, cunku her digit 4 bittir. MD5 karakterlerden degil hexadecimal digitlerden olusur. MD5'in kirilmasi teorik olarak imkansizdir, cunku daha once de dedigim gibi tek yonludur (OneWay). Ancak Rainbow Table uzerinden onceden cozumlenmis MD5'lerin karsiligi olan stringleri bulabilir, veya John the Ripper - Hashcat gibi hash uzerinde Brute Force Atagi, Sozluk Atagi veya Hybird uygulayan yazilimlarla cozumlenebilir fakat bu olay yuzyillar alabilir.
Moderatör tarafında düzenlendi: