CTF

Inj3ction Time – CTFLEARN

Merhaba. Bu yazımda CTFLEARN platformunda yer alan ve Web kategorisinde bulunan Inj3ction Time sorusunu çözeceğiz. Soru görseli aşağıdaki gibidir (soruyu çözdüğüm için yeşil renginde).

Soruda bize bir web adresi vermekte ve flag bulmamız istenilmektedir. UNION sorgusunun faydalı olabileceği söylenmiş. Bu ipucunun verilmesiyle SQL İnjection zafiyeti olduğunu anlayabiliriz.

Siteye eriştiğimizde böyle bir ekran bizi karşılamakta. Burada bir input alanı bulunuyor. Rastgele bir ifade deneyelim, örneğin 1 sayısını gönderelim.

Evet 1 yazdığımızda id si 1 olan köpeğin bilgilerini getiriyor. Öyleyse burada “1 or 1=1” payloadını çalıştıralım.

Payload başarılı bir şekilde çalıştı ve tüm bilgileri görebildik. Şimdi sql injection yapmak için kolon sayısını tespit etmemiz gerekiyor. Bunun için “order by” komutunu kullanacağız. Sırasıyla aşağıdaki 1 er artırarak ilerleyeceğiz ve ekrana bir şey basmadığı anda bir eksiği kolon sayımız olacak.

1 order by 1
1 order by 1,2
1 order by 1,2,3
1 order by 1,2,3,4

Burada order by 4 te kalmaktadır. 5 yaptığımızda ekrana bir şey basmayacak. Şimdi ise hangi kolonlardan veri çekebileceğimizi görmek için “union select” ifadesini kullanacağız. Ekrana yansıyan kolon numaralarından herhangi birinden verileri çekebiliriz.

Görselde görüldüğü üzere ekrana 1,2,3 sayılarını bastı. Bu sayılardan birisi ile veri çekebiliriz. Örneğin versiyon kontrolü yapalım.

2 numaralı kolon üzerinden versiyon sorgumuzu yaptık. Bizim asıl işimiz flag olduğu için önce tüm tablo isimlerini öğrenmek olacak. Şimdi “1 union select 1,table_name,3,4 from information_schema.tables– –” komutunu kullanarak tüm tablo isimlerini çekelim.

Sorgumuz sonucunda tüm tablo isimleri içerisinden “w0w_y0u_f0und_m3” isimli bir tabloya ulaştık. Şimdide tablo içerisinde yer alan kolonu veya tüm tablolar içinde yer alan kolanları kontrol edebiliriz. Ben tüm tablolar içindeki kolonları kontrol etmek için “1 union select 1,column_name,3,4 from information_schema.columns– –” sorgusunu çalıştıracağım. CTF’lerde bazı farklı durumlar olduğu için her şeye tek tek bakmak istiyorum.

Evet ilgimizi çeken kolon ismini de tespit ettik. Kolon ismimiz “f0und_m3“. Şimdi “w0w_y0u_f0und_m3” tablosu içerisinde yer alan “f0und_m3” kolonundaki veriyi çekelim. Bu iş için komutumuz “1 union select 1,f0und_m3,3,4 from w0w_y0u_f0und_m3– –” şeklinde olacaktır.

Sorgumuz sonucunda flag değerini başarılı bir şekilde elde ettik. Burada manuel sql injection yaparak ilerlemek oldukça zevkliydi. Manuel sql injection konusunda ilerleyen yazılarda daha fazla sorgu kullandığımız bir yazı yazmayı planlıyorum, takip etmeyi unutmayın :).

Başka yazılarda görüşmek üzere.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

one × three =

Başa dön tuşu