[TR] SQL Truncation Attack nedir?

Anıl Çelik
4 min readJul 6, 2020

--

Herkese merhaba, ben Anıl Çelik. Bugünkü yazımda, veritabanlarına karşı gerçekleştirilen saldırılardan olan SQL Truncation Attack’dan bahsedeceğim.

Nedir?

İlk olarak 2008 yılında CVE-2008-4106 koduyla ortaya çıkan zafiyet, genellikle MySQL veritabanlarında default olarak gelen yapılandırma ayarlarında bulunan hatalı yapılandırmalardan kaynaklanmaktadır. Normalde, veritabanlarında bulunan bir girdi kolonu için tanımlanan maksimum karakter uzunluğunun aşıldığı durumlarda, bu girdi kolon için tanımlanmış maksimum karakter değerine truncate edilir (indirgenir). Ancak bu girdi veritabanıyla aynı karakter limitlemesine sahip olmayan bir web uygulaması tarafından alındığında, bu maksimum değer bazı yöntemlerle aşılabilmektedir.

Nasıl Sömürülmektedir?

Örneğin, bir veritabanında Kullanıcı Adı alanı için girilmesi gereken maksimum karakter uzunluğunun 15 karakter olduğunu varsayalım. Normalde bir veritabanına kaydedilecek bir girdinin sonunda bulunan boşluk karakterleri yok sayılır ve o girdinin boşluk içermeyen hali veritabanına kaydedilir. Yani girilen bir “exampleuser” girdisi ile “exampleuser________” (“_” karakterleri boşluk karakterini temsil etmektedir) girdisi veritabanı içerisinde aynı string değeri temsil etmektedir ve veritabanı tarafından yeni bir kullanıcı olarak kabul edilmeyecektir. Eğer Kullanıcı Adı alanı için “exampleuser____x” değerini girersek, belirtilmiş olan maksimum karakter sayısı olan 15 karakteri geçmiş olacağız ve girilen girdide “x” karakteri silinerek bu girdinin maksimum karakter limiti olan 15'e indirgeneceği ve sonrasında gelen boşluk karakterleri de veritabanının yapısı gereği otomatik olarak formun gönderildiği esnada silineceği için sistem üzerinde aynı kullanıcıyı işaret eden ikinci bir kullanıcı oluşturmuş olacağız. Böylelikle, sistem üzerinde ilişkisel veritabanı modellerinde bulunan ve basitçe bir veri grubunu unique olarak tanımlayan bir Primary Key yapılandırması bulunmadığı için, bu zafiyetten faydalanarak sistem üzerinde istediğimiz herhangi bir kullanıcının hesabına/bilgilerine ulaşabiliyor olacağız. Eğer bir Primary Key yapılandırması olsaydı, ulaşmak istediğimiz veri grubunu temsil eden bir Primary Key olacağı için ve bunu manipüle edemeyeceğimiz için bu zafiyetten faydalanamayacaktık.

Örnek Saldırı Senaryosu

Örnek olarak buradaki kayıt ekranını ele alalım ve burada bulunan kayıt formunu kullanarak sistemde bir kullanıcı oluşturalım:

Burada gördüğümüz gibi, “example user” adında, “example@user.com” mail adresine sahip bir kullanıcı oluşturduk. Şimdi bu kullanıcı ile sisteme giriş yapmayı deneyelim:

Sisteme giriş yaptığımızda, sistem içerisinde iletişim sayfası için eklenmiş butona tıkladığımızda, yüksek yetkili kullanıcı olan “admin” kullanıcısına ait mail adresini görüyoruz:

Burada SQL Truncation Attack uygulamak için yapmamız gereken şey, öncelikle “admin@example.com” mail adresine sahip ikinci bir kullanıcı oluşturmaya çalışıp, sonrasında ise oluşturduğumuz bu kullanıcı ile gerçek admin kullanıcısının hesabına erişmeye çalışmak olmalıdır. Öncelikle SQL Truncation Attack’ı tetikleyecek herhangi bir şey yapmadan direkt olarak admin mailiyle kayıt olmaya çalışalım:

Sign Up” butonuna tıkladığımızda, bu mail adresine sahip kullanıcının sistemde zaten bulunduğuna dair bir mesajla karşılaşacağız:

Burada SQL Truncation Attack uygulamak için bilinçsizce denemeler yapmak yerine, öncelikle bu zafiyeti tetikleyebilmek için sisteme kaç karakter uzunluğunda bir input vermemiz gerektiğini görebilmek için sayfanın kaynağını inceleyip girilecek değer için aşağıdaki gibi bir “maxlength” tanımlamasının yapılıp yapılmadığını kontrol edebiliriz:

Burada belirtilen “maxlength=45” tanımlamasıyla, girmemiz gereken e-mail uzunluğunun maksimum 45 karakter olması gerektiğini anlayabiliriz. Buradan hareketle, eğer girdiğimiz e-mail değeri 45 karakter uzunluğunu geçerse, ilk başta da belirtmiş olduğumuz gibi istediğimiz bu mail adresiyle ikinci bir hesap oluşturabileceğiz. Bunun için öncelikle formu tekrar dolduralım ve gönderilmekte olan veriyi Burp Suite aracı kullanarak düzenlemeye çalışalım:

(Burada boşluk karakteri eklemek için ister boşluk karakterinin kendisini, isterseniz de encoded hali olan “%20” yi kullanabilirsiniz.) Bu işlemi gerçekleştirdiğimizde bir hata almadık. Şimdi oluşturduğumuz ikinci “admin@example.com” kullanıcısıyla giriş yapmayı deneyelim:

Gördüğümüz gibi admin paneline başarılı bir şekilde erişim sağladık.

SQL Truncation Attack hakkında bahsetmek istediklerim bu kadardı, yazımı okuduğunuz için teşekkür ederim.

Kaynaklar:

--

--

Anıl Çelik
Anıl Çelik

No responses yet