THM SQHell [TR][Manuel]

Merhaba ,sayfaya girdiğimizde bizi aşağıdaki gibi bir sayfa karşılamaktadır.

Flag-1:

Login bölümünde username kısmına aşağıdaki payladı yazınca ilk flag i başarıyla alırız.

Muhtemel SQL sorgusu şu şekilde olacaktır:

Flag-2:

Ana sayfa kısmında “Terms & Conditions” bölümüne baktığımızda ip adreslerinin analiz için log landığı bilgisini görmekteyiz.

Sunucuya farklı ip adresi gönderebileceğimiz bazı http header ları vardır bunlar aşağıdaki şekildedir.

  • X-Backend-Host
  • X-BlueCoat-Via
  • X-Cache-Info
  • X-Forward-For
  • X-Forwarded-By
  • X-Forwarded-For-Original
  • X-Forwarded-For
  • X-Forwarded-For
  • X-Forwarded-Server
  • X-Forwared-Host
  • X-From-IP
  • X-Gateway-Host
  • X-Host
  • X-Ip
  • X-Original-Host
  • X-Original-IP
  • X-Original-Remote-Addr
  • X-Original-Url
  • X-Originally-Forwarded-For
  • X-Originating-IP
  • X-ProxyMesh-IP
  • X-ProxyUser-IP
  • X-Real-IP
  • X-Remote-Addr
  • X-Remote-IP
  • X-True-Client-IP

Bu header lara SQLI tespiti için payload eklediğimizde şu hale gelmektedir.

Index sayfasını burp ile yakalayarak intruder a yollayalım .Payloadı ekleyelim ve payloadın geleceği kısmı belirtelim.

Buradan beklentimiz SQL sorgumuz başarılı olduğunda 5 saniye beklemesi (uyuması) dır .Her şeyi tamamladıktan sonra saldırıyı başlatalım.

“X-Forwarded-For” header ının response süresi 5000 milisaniye (5 saniye) nin üstündedir .Şimdi ise exploit aşamasına geçelim.

Yukarıdaki payload ile flag tablosunda flag kolomunun ilk karakterinin “97” karakter karşılığı “a” ise 3 saniye bekleyecek değil ise null döndürecektir .Tüm karakterlerini bu şekilde denememiz lazım.Bunu için bir python scripti yazacak olursak şu şekilde olacaktır.

Scripti çalıştırdığımızda aşağıdaki gibi bir çıktı alacağız ve sonunda flag tümüyle gözükecektir.

Flag-3:

Register bölümünden kayıt olmaya çalıştığımızda kullanıcı isminin var olup olmadığını bize söylemektedir .Burp ile baktığımızda arkada bir ajax iseteği gittiğini görebiliriz .Var olan kullanıcılarda false var olan kullanıclarda true dönmektedir .Admin kullanıcısı da var olan kullanıcılar arasındadır.

SQLI tespiti için burp repeaterda username parmetersini adm'+'in olarak belirttiğimizde false döndüğünü göreceğiz.

Buradan anlamamız gerek SQL in string i birleştirdiğidir ,detay için buraya bakabilirsiniz .Bu durumda admin' and (select 1=1)--+- false dönderecektir yani and operatorünün sağındaki değer true ise false sonucunu görmekteyiz .O halde aşağıdaki şekilde flag tablosunun flag kolonunun ilk karakteri “a”(97) ise “available” false olarak dönecektir.

Bunu python scriptine dönüştürelim.

Script çıktısı:

Flag-4:

Ana sayfadaki blog yazarlarına bakabilmekteyiz admin kullanıcısına baktığımızda “id” değerini 1 görmekteyiz SQLI tespiti için idsini “2–1” yapalım .Sonuç yine admin yani idsi 1 olan kullanıcıdır.Union ile kaç kolomn olduğunu öğrenelim.

Şimdi mevcut database deki tablolara baklım.

User tablosundan verileri çektiğimizde username:admin password:pasword gelmektedir .Bir süre burada tıkandım kaldım bir sürü deneme yaptım daha sonra postlarda belirtilen linklerin kaybolduğunu fark ettim.

Kullanıcıdan alınan user idsine göre farklı bir veritabanından postları çekmektedir.O tablonun da kolon sayısını bulalım.

Şimdi ise o veritabanındaki mevcut tabloları görüntüleyelim.

Artık flag için herşey elimizde.Flag almak için payloadımız şu şekilde olacaktır.

Flag-5:

Ana sayfaya tekrar döndüğümüzde postların olduğunu görüyoruz .Herhangi bir posta girdiğimizde id değeri görebiliriz SQLI varlığını anlamak için id kısmını “2–1” olarak değiştirdiğimizde “1” id li postu görürsek SQL render ı çıkarma işlemini yapacaktır ve id si 1 olan post gelecektir .SQLI olduğunu tespit ettiğimize göre exploit aşamasına geçebiliriz.

Union sorgusu çalıştırmak için kolon sayıları eşit olmalıdır kolon sayısını bulmak için tek tek arttırarak bulalım.

Şimdi ise mevcut database deki tablo isimlerini çekelim.

Flag tablosunun olduğunu görüyoruz bu tablonun kolon isimlerine ihtiyacımız var şimdi ise bunları çekelim.

Flag tablosunda flag ve id kolomlarının olduğunu gördük artık flag i alabiliriz.

Son.

Kaynak

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store