Tryhackme | SQHell CTF WriteUp by w1sd0m
SQHell
Try and find all the flags in the SQL Injections
Selam dostlar, bu gün sizlere Tryhackme'de yer alan "SQHell" adlı CTF'in çözümünü anlatacağım.
Makinenin adından da anlaşılacağı üzere bu CTF'te "Sqli" açığıyla uğraşacağız.
Bol bol "sqlmap" kullanacağımdan bu makaleye "Sqlmap öğretici" de diyebilirsiniz
İyi okumalar.
Platform: Tryhackme.com
Title: SQHell
Difficulty: Medium
Created by: Tryhackme
Total point: 150
|
|
V
Çözüme geçmeden önce,CTF'in bizden 5 adet "THM{FLAG:flag}" formatında flag istediğini söyleyeyim.
Öncelikle bir port taraması yapalım bakalım yolumuz ne olacak.
22 ve 80 portlarının açık olduğunu görüyoruz. Web sayfasına gidelim bakalım bizi neler bekliyor.
Bir blog sayfası karşımıza çıkıyor. "Admin" adlı kullanıcının 2 adet post attığını görüyorum. Sayfada "login®ister" butonları var. Ayrıca "Read More | Terms&Conditions" bölümleri de dikkatimi çekmedi değil.
Önce "Register&Login" kısımlarıyla oynamak istiyorum. Bakalım birşeyler bulabilecek miyiz?
SQHell
Try and find all the flags in the SQL Injections
Selam dostlar, bu gün sizlere Tryhackme'de yer alan "SQHell" adlı CTF'in çözümünü anlatacağım.
Makinenin adından da anlaşılacağı üzere bu CTF'te "Sqli" açığıyla uğraşacağız.
Bol bol "sqlmap" kullanacağımdan bu makaleye "Sqlmap öğretici" de diyebilirsiniz
İyi okumalar.
Platform: Tryhackme.com
Title: SQHell
Difficulty: Medium
Created by: Tryhackme
Total point: 150
|
|
V
Çözüme geçmeden önce,CTF'in bizden 5 adet "THM{FLAG:flag}" formatında flag istediğini söyleyeyim.
Öncelikle bir port taraması yapalım bakalım yolumuz ne olacak.
nmap -sC -sV -vv <IP>
22 ve 80 portlarının açık olduğunu görüyoruz. Web sayfasına gidelim bakalım bizi neler bekliyor.
Bir blog sayfası karşımıza çıkıyor. "Admin" adlı kullanıcının 2 adet post attığını görüyorum. Sayfada "login®ister" butonları var. Ayrıca "Read More | Terms&Conditions" bölümleri de dikkatimi çekmedi değil.
Önce "Register&Login" kısımlarıyla oynamak istiyorum. Bakalım birşeyler bulabilecek miyiz?
Register bölümü çalışmamakta ancak login çalışıyor gibi. Login bölümüne "Authentication bypass" deneyebilirim.
admin' or 1=1;-- -
Bypass etmeyi başardık ve bize ilk flag'imiz verdi
Peki, tekrar anasayfaya geliyorum ve kurcalamaya devam ediyorum.
Öncelikle gerçekten "sqli" varmı diye bakma istedim ve postlardan birine girerek açığı kontrol ettim.
Evet, "'" tırnağı koyunca hatayı gördük. 5 adet bayrak yakalamamız gerektiği için birden fazla bölümde bu açığın olduğunu tahmin etmek zor değil. O yüzden şimdi "Sqlmap" aracına geçerek bu yerlere saldırı yapmaya başlayacağım.
Hadi beraber yapalım.
Hatırlarsanız yukarıda "Register" bölümüne kayıt olmaya çalışırken bir hata almıştık. Admin bize burada bir zorluk çıkarmıştı. Şimdi o zorluğu aşmaya çalışalım ve birşeyler bulabilirmiyiz diye bir bakalım.
"Sqlmap"i çalıştırıyoruz.
Register bölümüne bir "user-control" işlemi uygulayacağım ve sonuçlara bakacağım.
"Sqlmap" burada "Exploiting Time Based SQLi" işlemi gerçekleştirdi. Hatta kullandığı "payload"ı görebiliyoruz. Bize "sqhell_3" adında bir database olduğunu buldu. Ee, bize düşen de içerisindekileri almak.
Böylece 3 numaralı flag'i de bulmuş olduk.
Peki tekrar anasayfaya dönelim ve kurcalamaya devam edelim.
"Ne demişler; Arayan mevlasını da bulur belasını da."
"Admin" kullanıcısının attığı postları hatırladınız mı? Birde oraya bakalım, oradaki mevzu ne?
Bir saldırı da bu bölüme yapacağız. Umarım ilginç sonuçlarla karşılaşırız.
Bakınız burada "Sqlmap"in kullandığı payload, bypass tekniği ve sonucu görebiliyoruz. "sqhell_5" adlı database'i bulduğunu söylüyor. Bizde içerisine bakalım.
5 numaralı flag buradaymış. Tatlı tatlı ilerliyoruz değil mi?
Şimdi, tekrardan anasayfaya dönelim.
Burada bir "Terms%Conditions" bölümü var. Buraya baktığımızda dikkatimizi çeken bir durumun olduğunu görüyorum.
Site analizi için bizlerin IP adreslerini kayıt altına aldıklarını bildiren bir madde koymuşlar. Bunu sağlamanın birkaç yolu var. İlk düşündüğüm; bu ip adreslerinin, siteye gönderilen istekler doğrultusunda loglandığı idi.
Biraz araştırma yaptım ve bunun "X-FOWARDED-FOR" başlığı ile yapıldığını gördüm. Peki biz bunu kendi çıkarlarımız için kullanabilir miyiz?
Devam ediyoruz
İşte 2 numaralı flag.
Evet dostlarım, sadece 4 numaralı flag kaldı. Bunun için "Sqlmap" ile sağa sola saldırdım ancak bir netice alamadım.
Sonra "neden basit düşünmüyorum?" diye kendime sorarak manuel yoldan işlem yapmak için anasayfaya geldim.
Burada "Admin" kullanıcısına tıkladığımızda bizi "User" bölümüne atıyordu ve burada kullanıcının kaç adet post attığını gösteriyordu. Bi espiriside yoktu açıkçası.
Şimdi ise tekrardan buraya göndüm ve url üzerinden manuel işlem yapmaya başladım.
Meğer 4 numaralı flag de burada saklanıyormuş.
Aslında bu işlemleri illa "sqlmap" aracı ile yapmanıza gerek yok. Diğer injection araçları ile de rahatlıkla yapabilirsiniz.
Kendi stratejinizi belirleyerek kendi çözümlerinizi oluşturabilirsiniz.
^
|
|
THM{FLAG1:E786483E5A53075750F1FA792E823BD2}
Peki, tekrar anasayfaya geliyorum ve kurcalamaya devam ediyorum.
Öncelikle gerçekten "sqli" varmı diye bakma istedim ve postlardan birine girerek açığı kontrol ettim.
Evet, "'" tırnağı koyunca hatayı gördük. 5 adet bayrak yakalamamız gerektiği için birden fazla bölümde bu açığın olduğunu tahmin etmek zor değil. O yüzden şimdi "Sqlmap" aracına geçerek bu yerlere saldırı yapmaya başlayacağım.
Hadi beraber yapalım.
Hatırlarsanız yukarıda "Register" bölümüne kayıt olmaya çalışırken bir hata almıştık. Admin bize burada bir zorluk çıkarmıştı. Şimdi o zorluğu aşmaya çalışalım ve birşeyler bulabilirmiyiz diye bir bakalım.
"Sqlmap"i çalıştırıyoruz.
Register bölümüne bir "user-control" işlemi uygulayacağım ve sonuçlara bakacağım.
sqlmap -u "http://<IP>/register/user-check?username=admin2" -p "username" --risk=3 --level=3 --dbs --dbms=mysql --threads 10
"Sqlmap" burada "Exploiting Time Based SQLi" işlemi gerçekleştirdi. Hatta kullandığı "payload"ı görebiliyoruz. Bize "sqhell_3" adında bir database olduğunu buldu. Ee, bize düşen de içerisindekileri almak.
sqlmap -u "http://<IP>/register/user-check?username=admin2" -p "username" --risk=3 --level=3 -D sqhell_3 --dump-all --dbms=mysql --threads 10
Böylece 3 numaralı flag'i de bulmuş olduk.
THM{FLAG3:97AEB3B28A4864416718F3A5FAF8F308}
Peki tekrar anasayfaya dönelim ve kurcalamaya devam edelim.
"Ne demişler; Arayan mevlasını da bulur belasını da."
"Admin" kullanıcısının attığı postları hatırladınız mı? Birde oraya bakalım, oradaki mevzu ne?
Bir saldırı da bu bölüme yapacağız. Umarım ilginç sonuçlarla karşılaşırız.
sqlmap -u "http://<IP>/post?id=2" -p "id" --risk=3 --level=3 --dbs --dbms=mysql --threads 10
Bakınız burada "Sqlmap"in kullandığı payload, bypass tekniği ve sonucu görebiliyoruz. "sqhell_5" adlı database'i bulduğunu söylüyor. Bizde içerisine bakalım.
sqlmap -u "http://<IP>/post?id=2" -p "id" --risk=3 --level=3 -D sqhell_5 --dump-all --dbms=mysql --threads 10
5 numaralı flag buradaymış. Tatlı tatlı ilerliyoruz değil mi?
THM{FLAG5:B9C690D3B914F7038BA1FC65B3FDF3C8}
Şimdi, tekrardan anasayfaya dönelim.
Burada bir "Terms%Conditions" bölümü var. Buraya baktığımızda dikkatimizi çeken bir durumun olduğunu görüyorum.
Site analizi için bizlerin IP adreslerini kayıt altına aldıklarını bildiren bir madde koymuşlar. Bunu sağlamanın birkaç yolu var. İlk düşündüğüm; bu ip adreslerinin, siteye gönderilen istekler doğrultusunda loglandığı idi.
Biraz araştırma yaptım ve bunun "X-FOWARDED-FOR" başlığı ile yapıldığını gördüm. Peki biz bunu kendi çıkarlarımız için kullanabilir miyiz?
Devam ediyoruz
sqlmap --dbms mysql --headers="X-forwarded-for:1*" -u http://<IP>/ --dbs --dbms=mysql
sqlmap --dbms mysql --headers="X-forwarded-for:1*" -u http://<IP>/ -D sqhell_1 -T flag –dump
İşte 2 numaralı flag.
THM{FLAG2:C678ABFE1C01FCA19E03901CEDAB1D15}
Evet dostlarım, sadece 4 numaralı flag kaldı. Bunun için "Sqlmap" ile sağa sola saldırdım ancak bir netice alamadım.
Sonra "neden basit düşünmüyorum?" diye kendime sorarak manuel yoldan işlem yapmak için anasayfaya geldim.
Burada "Admin" kullanıcısına tıkladığımızda bizi "User" bölümüne atıyordu ve burada kullanıcının kaç adet post attığını gösteriyordu. Bi espiriside yoktu açıkçası.
Şimdi ise tekrardan buraya göndüm ve url üzerinden manuel işlem yapmaya başladım.
http://<IP>/user?id=2 union all select "1 union select 1,(flag),3,4 from flag-- -",1,2 from users
Meğer 4 numaralı flag de burada saklanıyormuş.
THM{FLAG4:BDF317B14EEF80A3F90729BF2B426BEF}
Aslında bu işlemleri illa "sqlmap" aracı ile yapmanıza gerek yok. Diğer injection araçları ile de rahatlıkla yapabilirsiniz.
Kendi stratejinizi belirleyerek kendi çözümlerinizi oluşturabilirsiniz.
^
|
|
Değerli dostlarım, konunun sonuna geldik.
Yoğun olmama rağmen forumun "CTF" bölümünü boş bırakmamayı düşünerek haftada en_az_1-en_çok_2 makine çözümü paylaşacağım.
Bunlar "Easy-Medium, Medium-Hard ve Hard-Easy" şeklinde dönüşümlü olacak.
Hem CTF çözenler için hemde bu alana meraklı olanlar için "CTF Bölümü"nü takip etmeleri faydalı olacaktır.
Teşekkürler.