SQL açığı.

TURKHACKER2009

Kıdemli Üye
20 Eyl 2021
2,539
692
24
Merhabalar SQL açığı nasıl kapatılır SQL açığı nı detaylı anlatabilirmisiniz anlatan herkese teşekkür ediyorum iyi günler .
 
19 May 2020
238
84
Merhabalar SQL açığı nasıl kapatılır SQL açığı nı detaylı anlatabilirmisiniz anlatan herkese teşekkür ediyorum iyi günler .
sql açığı en basit yöntemi ile genelde sayfaların url parametrelerinde ki değerlere müdahale edilerek uygulanan bir olaydır. profil.php?uye=TURKHACKER2009 u ele alalım.

diyelim ki böyle bir link var ve açık mevcut, şöylebir müdahalede bulunduğumuzu varsayarsak profil.php?uye=TURKHACKER20019 or kullanicilar like '%admin%'
SQL:
SELECT * FROM `hesaplar` where kullanicilar = 'TURKHACKER20019' or kullanicilar like '%admin%'

kullanıcı adını kasten hatalı girdim ki, aradığımız değerde kullanıcı varsa onu getirsin. yani sql sorgusu değişmiş olacağı için admin kullanıcısı ile alakalı bir sutün olup olmadığına bakacak sayfa. tabi biz bu örnekte bir çok aşamayı es geçmiş olduk, örneğin öncesinde database bilgilerini daha sonrasında kolon bilgilerini almamız gerekirdi ama, mantığını anlaman için doğrudan sonuç odaklı yazdım. genelde (php için konuşuyorum) mysql bağlantısı kurarak veritabanına bağlanan yapılarda açık olma olasılığı daha yüksek oluyor, bunun arkasından mysqli geliyor, pdo ile kurulan bağlantılar bir miktar daha güvenli olmasına rağmen, sql için yapılan sorgularda kullanılan değişkenler için koşul yazılmaması da çok büyük tehlike oluşturuyor.
PHP:
$sql = "SELECT * FROM `hesaplar` where kullanicilar = {$_GET['uye']}";
böyle bir kullanım, url'de yazılacak herhangi bir komutun veritabanında çalışmasını sağlayacaktır. çünkü hiçbir ön koşul aramıyoruz, uye değeri olsun yeter diyoruz.

PHP:
if(isset($_GET["uye"])){
    $uye = htmlspecialchars($_GET["uye"]);
    if(is_string($uye)){
        if(strlen($uye) <= 10){
            $sql = "SELECT * FROM `hesaplar` where kullanicilar = $uye";
        }
    }
}
ancak böyle bir kullanımda, uye anahtarı ile get değeri var mı, varsa bu değeri özel ifadelerden temizleyelim, temizlendiyse ve bu değer string ise, bu değer 10 karakter veya daha az karakterden oluşması durumunda bu koşul çalışır. aksi taktirde else kısmına vereceğin exit fonksiyonu ile komut çalışmayacaktır.
 

TURKHACKER2009

Kıdemli Üye
20 Eyl 2021
2,539
692
24
sql açığı en basit yöntemi ile genelde sayfaların url parametrelerinde ki değerlere müdahale edilerek uygulanan bir olaydır. profil.php?uye=TURKHACKER2009 u ele alalım.

diyelim ki böyle bir link var ve açık mevcut, şöylebir müdahalede bulunduğumuzu varsayarsak profil.php?uye=TURKHACKER20019 or kullanicilar like '%admin%'
SQL:
SELECT * FROM `hesaplar` where kullanicilar = 'TURKHACKER20019' or kullanicilar like '%admin%'

kullanıcı adını kasten hatalı girdim ki, aradığımız değerde kullanıcı varsa onu getirsin. yani sql sorgusu değişmiş olacağı için admin kullanıcısı ile alakalı bir sutün olup olmadığına bakacak sayfa. tabi biz bu örnekte bir çok aşamayı es geçmiş olduk, örneğin öncesinde database bilgilerini daha sonrasında kolon bilgilerini almamız gerekirdi ama, mantığını anlaman için doğrudan sonuç odaklı yazdım. genelde (php için konuşuyorum) mysql bağlantısı kurarak veritabanına bağlanan yapılarda açık olma olasılığı daha yüksek oluyor, bunun arkasından mysqli geliyor, pdo ile kurulan bağlantılar bir miktar daha güvenli olmasına rağmen, sql için yapılan sorgularda kullanılan değişkenler için koşul yazılmaması da çok büyük tehlike oluşturuyor.
PHP:
$sql = "SELECT * FROM `hesaplar` where kullanicilar = {$_GET['uye']}";
böyle bir kullanım, url'de yazılacak herhangi bir komutun veritabanında çalışmasını sağlayacaktır. çünkü hiçbir ön koşul aramıyoruz, uye değeri olsun yeter diyoruz.

PHP:
if(isset($_GET["uye"])){
    $uye = htmlspecialchars($_GET["uye"]);
    if(is_string($uye)){
        if(strlen($uye) <= 10){
            $sql = "SELECT * FROM `hesaplar` where kullanicilar = $uye";
        }
    }
}
ancak böyle bir kullanımda, uye anahtarı ile get değeri var mı, varsa bu değeri özel ifadelerden temizleyelim, temizlendiyse ve bu değer string ise, bu değer 10 karakter veya daha az karakterden oluşması durumunda bu koşul çalışır. aksi taktirde else kısmına vereceğin exit fonksiyonu ile komut çalışmayacaktır.
Mesela ben bir sitede SQL açığı buldum bu SQL açığını bildiricem adamlara bunları yapmasını mı önermeliyim öyle anlatırsan benim için daha iyi olur ben o kısmı merak ediyorum.
 

TURKHACKER2009

Kıdemli Üye
20 Eyl 2021
2,539
692
24
açığın olduğuna dair bir kanıt sunabiliyor olman yeterli, açığı nasıl düzeltecekleri onların sorunu. ayrıca zaten nasıl izah edeceğini izah ettim.
Mesela bug bounty gibi yerlerde açığı kapatarak para kazanılıyor bende hacklediğim sitenin açığını kapatırım diye düşündüm araştırmaya başladım nasıl kapatırım diye burayada yazdım sizde benim demek istediğimi anlamışsınızdır heralde
 
19 May 2020
238
84
Mesela bug bounty gibi yerlerde açığı kapatarak para kazanılıyor bende hacklediğim sitenin açığını kapatırım diye düşündüm araştırmaya başladım nasıl kapatırım diye burayada yazdım sizde benim demek istediğimi anlamışsınızdır heralde
Kapatmak için başka kişi bulacaklarına onuda ben halledeyim bana düşenide alırım zaten
O yüzden öğrenmeye çalışıyorum

kardeşim bu işi açığı bulana yaptırmaz bug bounty sunan şirketler, sen açığı bulur bildirirsin ödülünü alırsın. mantığını anlattım, yetmedi kodlayarak anlattım. program dili bilmiyorsan, nasıl yapacaksın bu işi? git dil öğren. ayrıca küçük siteler ödül vermez, teşekkür bile etmezler hatta. bu yüzden çokta heves etme bu tarz işlere, bulduğun açıklı sitelerin %99.9999999999999'u sana yanıt bile vermiyor olacak çünkü. yani para için kovalanacak iş değil. hobi olarak yap yapacaksan.
 

Starzz

Üye
21 Haz 2015
238
58
sql açığı en basit yöntemi ile genelde sayfaların url parametrelerinde ki değerlere müdahale edilerek uygulanan bir olaydır. profil.php?uye=TURKHACKER2009 u ele alalım.

diyelim ki böyle bir link var ve açık mevcut, şöylebir müdahalede bulunduğumuzu varsayarsak profil.php?uye=TURKHACKER20019 or kullanicilar like '%admin%'
SQL:
SELECT * FROM `hesaplar` where kullanicilar = 'TURKHACKER20019' or kullanicilar like '%admin%'

kullanıcı adını kasten hatalı girdim ki, aradığımız değerde kullanıcı varsa onu getirsin. yani sql sorgusu değişmiş olacağı için admin kullanıcısı ile alakalı bir sutün olup olmadığına bakacak sayfa. tabi biz bu örnekte bir çok aşamayı es geçmiş olduk, örneğin öncesinde database bilgilerini daha sonrasında kolon bilgilerini almamız gerekirdi ama, mantığını anlaman için doğrudan sonuç odaklı yazdım. genelde (php için konuşuyorum) mysql bağlantısı kurarak veritabanına bağlanan yapılarda açık olma olasılığı daha yüksek oluyor, bunun arkasından mysqli geliyor, pdo ile kurulan bağlantılar bir miktar daha güvenli olmasına rağmen, sql için yapılan sorgularda kullanılan değişkenler için koşul yazılmaması da çok büyük tehlike oluşturuyor.
PHP:
$sql = "SELECT * FROM `hesaplar` where kullanicilar = {$_GET['uye']}";
böyle bir kullanım, url'de yazılacak herhangi bir komutun veritabanında çalışmasını sağlayacaktır. çünkü hiçbir ön koşul aramıyoruz, uye değeri olsun yeter diyoruz.

PHP:
if(isset($_GET["uye"])){
    $uye = htmlspecialchars($_GET["uye"]);
    if(is_string($uye)){
        if(strlen($uye) <= 10){
            $sql = "SELECT * FROM `hesaplar` where kullanicilar = $uye";
        }
    }
}
ancak böyle bir kullanımda, uye anahtarı ile get değeri var mı, varsa bu değeri özel ifadelerden temizleyelim, temizlendiyse ve bu değer string ise, bu değer 10 karakter veya daha az karakterden oluşması durumunda bu koşul çalışır. aksi taktirde else kısmına vereceğin exit fonksiyonu ile komut çalışmayacaktır.
Çok açıklayıcı bir yazı. Tebrik ederim.
 

Starzz

Üye
21 Haz 2015
238
58
kardeşim bu işi açığı bulana yaptırmaz bug bounty sunan şirketler, sen açığı bulur bildirirsin ödülünü alırsın. mantığını anlattım, yetmedi kodlayarak anlattım. program dili bilmiyorsan, nasıl yapacaksın bu işi? git dil öğren. ayrıca küçük siteler ödül vermez, teşekkür bile etmezler hatta. bu yüzden çokta heves etme bu tarz işlere, bulduğun açıklı sitelerin %99.9999999999999'u sana yanıt bile vermiyor olacak çünkü. yani para için kovalanacak iş değil. hobi olarak yap yapacaksan.
Katılıyor ve ekliyorum. Bazen insana dert bile oluyor bunlar.
 

TURKHACKER2009

Kıdemli Üye
20 Eyl 2021
2,539
692
24
kardeşim bu işi açığı bulana yaptırmaz bug bounty sunan şirketler, sen açığı bulur bildirirsin ödülünü alırsın. mantığını anlattım, yetmedi kodlayarak anlattım. program dili bilmiyorsan, nasıl yapacaksın bu işi? git dil öğren. ayrıca küçük siteler ödül vermez, teşekkür bile etmezler hatta. bu yüzden çokta heves etme bu tarz işlere, bulduğun açıklı sitelerin %99.9999999999999'u sana yanıt bile vermiyor olacak çünkü. yani para için kovalanacak iş değil. hobi olarak yap yapacaksan.
Benim kendi yaptığım bir sitem ve ya bildiğim bir dilim olsa anlarım zaten senin yazılarını reis
 
Ü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.