[Portswigger] SQL Injection Lab Çözümleri Part-2

Herkese merhabalar. Portswigger lablarına kaldığımız yerden deevam ediyor olacağım. Bu günkü lab ortamımıza geçmeden önce bir eklentiden ve bir araçtan  bahsetmek istiyorum. Çok işlevsel olan Burpsuite aracıyla bu konuyu anlatmak istedim. Peki bu araç ne işe yarıyor. Burpsuite’in birden fazla işlevi var fakat en çok bilinen özelliği bir proxy aracı  olmasıdır. Burpsuite sayesinde tarayıcıdan yolladığımız isteği(request) araya girerek yakalıyor ve son kullanıcının görmediği “Request Header ve Request Body” kısımlarını manipüle etmemize olanak sağlıyor. Yalnız bu uygulamayı kullanabilmeiz için birde proxy eklentisine ihtiyacımız var. Tarayıcıların eklenti mağazalarından bir sürü ücretsiz proxy kurabilirsiniz. Ben sık kullanılan “Foxyproxy” adındaki bir proxyi firefox tarayıcıma kuracağım. Şimdi kurulum aşamasına geçeceğim. Linkleri(Burpsuite ve Foxyproxy için.) aşağıda bulabilirsiniz.

Burpsuite: https://portswigger.net/burp/releases/professional-community-2022-1-1?requestededition=community

Foxyproxy: https://addons.mozilla.org/tr/firefox/addon/foxyproxy-standard/

Not: Burpsuite kurulumu kolay olduğu için onun kurulumu bu konu içinde olmayacaktır.

Foxyproxy kurulumu:

  • Yukarıda verdiğim linkten foxyproxyi tarayıcımıza kuruyoruz.
  • Kurdutan sonar tarayıcımızın araç çubuğunda biza eklentiyi kurmak isteyip istemediğimizi soruyor. Bunada ekle diyoruz.
  • Kurulum tamamlandıktan sonar bizi böyle bir sayfaya yolluyor. Ve sağ üstte foxyproxy simgesi geliyor.
  • Oradaki simgeye tıklıyoruz
  • Oradan ayarlar(options) kısmına giriyoruz ver karşımıza şöyle bir ekran çıkıyor.
  • Sol kısımdaki menüerden ekle(add) kısmına gidiyoruz.
  • Burdaki başlık(title) kısmına istediğiniz bir başlığı veriyorsunuz. Diğer kısımlar sizde boş gelicektir. Bizi ilgilendiren title dışında “Proxy IP” ve “Port” kısmı var. Proxyi localde kullanacağımız için buraya localhost yazıcaz.(Burada isteğe bağlı 127.0.0.1 ya da localhost yazılabilir.) Değişikleri yaptıktan sonar kaydet(save) diyerek çıkıyoruz
  • Son olarak kaydettiğimiz proxy adresini yine sağ üstteki simgeden ulaşabiliyor olacağız

Foxyproxy kurulumumuz bu kadardı. Dilerseniz şimdide konu anlatımımıza geçelim.

Çözülen lab ortamı: SQL injection vulnerability allowing login bypass
Lab Linki: https://portswigger.net/web-security/sql-injection/lab-login-bypass
Konu Anlatım Linki: https://portswigger.net/web-security/sql-injection

Hatırlarsanız bir önceki yazımda kategori filtresinde SQL Injection varlığından söz etmiştim. Burda da login kısmında bir SQL Injection zafiyeti olduğunu söylüyor. “Access the Lab” diyerek lab ortamıma erişim sağlıyorum. Bizi yine bir e-ticaret sitesi karşılıyor.

Sağ üst kısımda “My Account” ksımna gidiyorum hemen. Ve karşıma bir giriş paneli çıkıyor.

Öncelikle işimiz uygulamanın nasıl davrandığını anlamak. Bir kez yanlış bir deneme yaparak vereceği hata mesajına bakalım.

“Invalide username or password” hatasıyla karşılaştık. Tam olarak bu kısımda Burpsuite aracıma geçiş yapıyor olacağım.

Tarayıcımdan proxy ayarlarını yaptıktan sonra burpsuite aracımda “Intercept On” yapıyorum ve tekrar kullanıcı adı ve şifreyi yolluyorum. Sayfayı yeniledikten sonra Burpsuite aracımız isteği yakalıyor. Sayfayı yenilediğimizde sayfa tekrar yükleniyormuş gibi gözükecektir. Bunun sebebi ise proxy yardımıyla isteğimiz tarayıcıdan çıkmadan önce araya girip isteği bekletmemiz. Görüntü şu şekil olacaktır.

Burpsuite aracımıza döndüğümüzde ise proxy sekmesinde isteiği yakaladığını görüyoruz.

Daha hızlı işlemlerimizi gerçekleştirmek için istek üzerine gelip faremizin sağ tıkını kullanıyoruz ve ıkan seçeneklerden Repeatera yolla(Send to Repeater) seçeneğine tıklıyoruz.(Burada hazır olarak gelen kısayol tuşlarından CTRL+R tuş kombinasyonunu kullanarak hızlı bir şekilde isteiğimizi Repeater kısmına yollayabiliyoruz.)

Burpsuite aracımızın üst kısmındaki menülerden “Repeater” sekmesine gidiyoruz.

Artık isteğimizi salabiliriz. Şimdilik proxy sekmesiyle işimiz kalmadı. Bunun içinde proxy sekmesine gelip “Forward” ve ya “Drop” seçeneklerinden birini kullanabiliriz.

Not: Eğerki biz proxy sekmesinde istediğimizi değiştirip yollasaydık forward butonunu kullanmamız gerekirdi. Ama herhangi bir değişiklik yapmadığımız için drop butonunuda kullanabiliriz.

İşlemlerimizi hallettikten sonra “Intercept Off” yapalımki bizi site içinde istek attığımızda uğraştırmasın. Yani Burpsuite aracımızın son işlemler dahilindeki son görüntüsü şu şekilde olmalı.

Tekrardan Repeater sekmesine giderek artık SQL Injection zafiyeti var mı diye control edebiliriz.

İlk olarak isteğimi saf haliyle yolluyorum ki normalde almamız gereken cevabı yan tarafta alalım.

Burada gördüğümüz gibi isteğimizin body kısmında girdiğimiz değerler gözüküyor ve çıktıda yine “Invalide Username or password” hatasını alıyoruz. Lab ortamına erişmeden bize verilen bir username vardı.(Administartor). İşlemlerimi bu username üzerinden devam edeceğim.

Administrator adında bir kullanıcımız var fakat şifresi elimizde şuan için yok. Hatırlarsanız bir önceki konumda sorgu yapısını anlatmıştım. Burda da yüksek ihtimal aynı şekilde bir sorgu dönüyor. Demek ki biz yine şifre kısmında bir koşul yazarsak bunu çözebiliriz. Bu tarz durumda ilk olarak bir sorguyu aklımızda canlandırmamız gerekli. Ben aşağıya örnek bir sorgu bırakıyorum.

SELECT * FROM “Users” WHERE username="Administrator” AND password="password”

Bu sorguyu incelediğimizde bir koşul olduğunu görüyoruz. Kullanıcı adının ve şifresnin “TRUE” dönmesi halinde sorgumuz çalışacak. Girdilerden birisi yanlış olursa system bize bir hata mesajı vericek. Peki biz bu sorguya manipüle edebiliyorsak girdi şeklimiz şu şekilde oolursa acaba ne olur ?

SELECT * FROM ‘Users’ WHERE username=’Administrator’ AND password=’password’ OR 1=1’

Normalde password olan değeri biz ‘password OR 1=1 şeklinde değiştiriyoruz. Bakalım bu şekilde bir istek attığımız zaman system bize nasıl bir yanıt dönecek.

Göründüğü üzere yine server taraflı bir hata kodu aldık. Yine bir önceki makaleye dönecek olursak. Sorguyu biz bu haldeyken göremiyeceğimiz için sorgunun devamında bir şey çalıştırılıyor olabilir. Bu durumda yine yazdığımız sorguda sonradan gelen satırları pasif duruma çekmek için çiftçizgi(–) kullanıyoruz.

Ve gördüğünüz gibi bu sefer dönen yanıtta 302 durum kodunu aldık. Duru kodlarında 3XX olanlar genelde yönlendirme(redirect) anlamına gelmekte. Burda da biz 302 durum kodunu aldık. Yanında da yazdığı gibi girdilerimiz olumlu sonuç aldı ve başarıyla yönlendirildik. Lab çözümümüz burada bitti fakat yinede emin olmak için bir kez de site üzerinden aynı girdiğimiz payload ile deneyelim.

Ve gördüğünüz gibi sisteme giriş yaptıktan sonra lab ortamımızın çözüldüğü ibaresini görüyoruz.

Okuduğunuz için teşekkür ederim.