İnternet, bilgi, bilişim güvenliğine dair her türlü karalamalara sahiplik yapan kişisel bir blog.

Web For Pentester II SQL Injection Çözümleri

Merhaba arkadaşlar, bu yazımda Web For Pentester II’nin SQL injection kategoriyle ilgili çözüm yollarını ele alacağız. Farklı senaryoları nedeniyle çözerken gayet keyif aldığımı söyleyebilirim. Makinayı buraya tıklayarak indirebilirsiniz.

Example 1

Bu örnekte giriş seviyesinde injection işlemi beklenmiş.example1

Example 2

Bir önceki örnekte ki payloadu denerseniz başarısız olacaksınız. Birkaç çeşit payload ile aşılabilir. Fakat çeşitli özel karakterlerle (tek tırnak gibi) hata alıp biraz daha bilgi sahibi olabilirsiniz. Ben LIMIT kullanıp sadece tek bir satır için işlem yapıp, geri kalan sorguyu yoruma düşürdüm.

example2

Example 3

Bu örnekte ise denemelerimiz sonrasında tek tırnak ifadesinin yasaklandığını anlıyoruz. Peki bu yeterli bir önlem olmuş mu ? Tabii ki hayır. Öyleyse şöyle bir bypass tekniği izleyebiliriz. \ ifadesiyle birlikte kendisinden sonra gelen tek tırnağın etkisini kaybettirip devamında payload kodumuzu ekliyoruz.

example3

Example 4

Bu örnekde ise WHERE koşulunun devamına direkt olarak “req” parametresi verilmiştir. http://vuln/sqlinjection/example4/?req=username=’hacker’ isteği için oluşan SQL sorgusu SELECT * FROM users WHERE username=’hacker’; bu şekildedir. Birkaç farklı bypass tekniği izleyebiliriz. Amacımız “WHERE” koşulunu boşa düşürmek. En kolay payload olarak tercihimi WHERE 1;  şeklinde kullanmak oldu.

example4

Example 5

Bu örnekte ise limit ile birlikte kullanım yapılmış. LIMIT’i devre dışı bırakmamız gerekiyor. LIMIT ifadesinin sonuna union ile birlikte sorgu birleştirmesi yaparak bypass işlemi gerçekleştirebiliriz.

example5

Example 6

Bir önceki örnek ile sadece parametre farkı vardır.

Example 7

Bu örnekte ise id kriteri ile birlikte sorgu yapılmıştır. İlk kriterden elde edilen kullanıcı adı, ikinci SQL sorgusunda kullanılarak sonuçlar ekrana yazdırılmıştır. Bu aşamada ‘ (tek tırnak) ile uygulamayı hatayı zorlayıp kullanılan SQL sorgusu ile ilgili bilgi edinmeye çalışıyoruz. Çeşitli varyasyonlarla bu adım geçilebilir fakat XPATH kullanımı daha kolayıma geldiğinden dolayı tercih ettim. Bunun için extractvalue fonksiyonundan yararlanıyoruz. Bu fonksiyon XML ağacından verileri düzenli çıkartmaya yarıyor. Bu uygulamanın yanlış kullanımında verilen hata mesajı üzerinden ilerleyerek aşamayı tamamlayacağız.

Extractvalue fonksiyonu 2 parametre almaktadır. İlk parametrede XML ağaç yapısını veriyoruz, ikinci de ise hangi alanlara ihtiyacımız olacağını yazıyoruz.

Yukarıdaki SQL sorgusunun çıktısı gayet düzgün bir şekilde olacaktır. A ve B taglarındaki verilere aldık. Yalnız bu fonksiyonda ikinci parametrede bir hata olması durumunda “XPath Syntax Error” almakla birlikte söz konusu parametre içeriğini ekrana basmaktadır. Yani ?

Yukarıdaki SQL sorgusu hata verecektik ancak extractvalue fonksiyonunun ikinci parametresindeki ifade de çalışacaktır.

Example 8

Bu örnekte ise 2 farklı işlem yapılmaktadır. Birincisi yeni üye kaydı, ikincisi ise üyenin detaylarını içeren işlemdir. Üyelerin listelendiği ekranda bir injection zaafiyetine rast gelmesem de ikinci ekranda bir injection zaafiyeti bulunmaktadır.

Bunun için şöyle bir kullanıcı oluşturdum.
asd’ union all select 1,2,now() from users #

example8-1

 

Example 9

Bu örnekte ise zararlı karakterlerden biri olan tek tırnak ifadesi \ ters slash ile etkisiz hale getirilmiş. Yani tam olarak aşağıdaki şekilde kontrol sağlanmış.
examle9-1

Bunu mysql_real_escape_string fonksiyonu gibi düşünebilirsiniz. Fakat bu fonksiyon çince karakterlerde bypass edilebilir durumda. Yani şöyle denersek bypass işlemimiz başarıyla sonuçlanacaktır.

example9-2

Bir sonraki yazımda görüşmek üzere.

Mustafa

2004 yılından bu yana Web ve Bilgi Güvenliği üzerine araştırmalarda bulundum. Çok sayıda yerli yada yabancı websitelerinde bulunan zaafiyetleri ilgililere göndererek kapatılmasını sağladım. Octosec ailesindenim. Siber Güvenlik Eylem Planı kapsamında TSE Kayıtlı Sızma Uzmanı sertifikam bulunmaktadır.

Leave a Reply