Bazı diller ve programlar compile edilip makine diline dönüştürülürken bazıları doğrudan kod üzerinden çalışır. Böyle dillerde code injection ihtimali vardır. İşte SQL de bu dillerden bir tanesidir. SQL birçok veri tabanında kullanılan bir dil olduğu için login gibi işlemlerde kullanılabilir. Örnek olarak kullanıcı adı inputunun yerine admin’ OR 1=1;– gibi bir ifade yazarsak bu ifade, kullanıcı adının admin olduğu veya 1=1 olduğu durumlardaki hesapları kontrol edilen tablodan döndürülecektir. Bu da tablodaki bütün ifadelerin (1=1 her kayıtta doğru olduğu için) döndürülmesi demektir. Birçok programlama dilinde böyle durumlarda gelen kaydı ilki işlendiği için ve genellikle de ilk kullanıcı admin olduğu için doğrudan admin olarak giriş yapmış olacağız.
Hack Adımları
- Öncelikle SQL bozabilecek normalin dışında bir input dene( ‘ işareti içeren bir input olabilir. Ya da daha sonra göreceğimiz numerik alanlarda beklenen değer 3 se 2+1 göndermek denenebilir)
- Hata oluşuyorsa çıkan hatayo detaylıca incele.Oluşmuyorsa response’daki değişimlere bak
- Input alanlarını farklı payloadlarla değiştirip tekrar tekrar dene
- Exploit için Poc oluştur.
Exploit Basic Vulnerability
Öncelikle açığı saptamak için escape karakter içeren ‘ gibi bir input gönderdik veya farklı inputlarla açık olduğunu keşfettik. Şimdi bu zaafiyeti kullanmamız gerekiyor. Bunun için öncelikle ‘ işaretiyle kaçışı yapıp kendi SQL kodumuzu inject etmeyi deneyeceğiz. Örnek olarak ‘ OR 1=1 ;– deneyebiliriz veya # ifadesini yorum amaçlı kullanabiliriz. Eğer sistem bu işlem için bir önlem almışsa admin’ OR ‘a’ = ‘a gibi bir doğrulama deneyebiliriz böylece sistem kendisi otomatik ‘Select * from users where user = admin’ OR ‘a’ = ‘a ‘ şeklinde kendisini tamamlar.