dondraper
Üye
Merhaba, bugün Hacker101 üzerindeki PetShop Pro makinesini çözeceğiz. Bu makineyi seçme sebebim, bu makine çok zor olmamasına rağmen makineyi çözen kişilerin genellikle makineyi çözmekten yorulup yarıda bırakmaları. Çünkü brüte-force aşamasında eğer yanlış metodoloji ya da yanlış wordlist’i kullanırsanız çözüme ulaşmak günlerinizi alabiliyor. Ben de insanların takıldığı kısmı biraz daha detaylı anlatarak sizlere bu çözümü yapmak istedim. İyi okumalar.
Business Logic Hatası
Dizin Taraması ve Brute Force
XSS
Uygulamaya ilk göz attığımda iki adet ürün konulduğunu ve bunların sepete eklenip ardından satın alınabileceğini görüyorum. Ardından sepete ürün atıp ödeme işlemine geçerken giden isteği durduruyorum. İstekte şöyle bir parametre vardı:
Böylelikle ilk flag’imi almış oldum.
Tarama sonucunda login sayfası olduğu dikkatimizi çekiyor. Sayfaya girdiğimde rastgele kullanıcı adı ve parola deniyorum.
Bana invalid username hatası veriyor ki bu işe yarar bir durum. Bu hatanın verilmesi kullanıcı adı tespitini sağlayacaktır. Burada kullanacağınız yöntem size kalmış. Kendi script’inizi de yazabilirsiniz, Hydra aracını da kullanabilirsiniz ya da Burp Intruder ile brute-force atağınızı gerçekleştirebilirsiniz. Kendi script’ini yazmak isteyenler adına ben buraya kendi yazdığım ve kısa senaryolarda iş gören örnek bir Python script’imi bırakıyorum:
Alternatif olarak aşağıdaki komutu çalıştırarak Hydra üzerinden brute-force gerçekleştirimini sağlayabilirsiniz:
Kullanıcı adı ve parola girişi sağlayan isteği yakalayıp intruder’a gönderdim. Ardından, kullanıcı adı için wordlist olarak rockyou.txt kullandım ve parola için rastgele bir değer verdim. Böylelikle kullanıcı adını doğru tahmin ettiğimizde artık Invalid username hatası ile karşılaşmayacağımızı varsayabiliriz. Muhtemelen Invalid password benzeri bir hata ile karşılaşacağız.
Taramam sonuçlandıktan sonra isteklerin sonuçlarını filtreliyorum ve yaptığım çıkarımdan yola çıkarak Invalid password yazan bir cevap var mı buna bakıyorum. Burada kullanıcı adı tami olan istekte Invalid password cevabının döndüğünü görüyorum. Böylelikle kullanıcı adımızın tami olduğu sonucuna varabiliriz.
Kullanıcı adını bulduğumuza göre, sıra parolayı bulmaya geldi. tami kullanıcı adını sabit tutarak bu sefer parola için (yine rockyou.txt wordlist’ini kullanarak) brute-force gerçekleştirdim ve içerisinde Invalid password hatasının dönmeyen cevabın hangisi olduğunu aradım. En sonunda summer değeri için diğer giden isteklerden farklı olarak 302 found durum kodunu elde ettim.
tami:summer giriş bilgilerini kullanarak bilgileri giriş yaptım ve brute-force üzerinden elde ettiğim bilgileri doğrulamış oldum. Böylelikle ikinci flag’i de elde ettik.
Payload’larımı yerleştirdiğimde XSS saldırısını tetikledim ve üçüncü flag’imi de elde etmiş oldum.
Okuduğunuz için teşekkürler.
Business Logic Hatası
Dizin Taraması ve Brute Force
XSS
Business Logic Hatası
Uygulamaya ilk göz attığımda iki adet ürün konulduğunu ve bunların sepete eklenip ardından satın alınabileceğini görüyorum. Ardından sepete ürün atıp ödeme işlemine geçerken giden isteği durduruyorum. İstekte şöyle bir parametre vardı:
Burada 8.95 ve 7.95 olan yerler fiyat kısımlarıdır. Buraları 0.00 yaparak isteği gönderiyorum ve sonucu kontrol ettiğimde para ödemeden ürünleri sipariş etmiş olduğumu görüyorum.cart=%5B%5B0%2C+%7B%22name%22%3A+%22Kitten%22%2C+%22desc%22%3A+%228%5C%22x10%5C%22+color+glossy+photograph+of+a+kitten.%22%2C+%22logo%22%3A+%22kitten.jpg%22%2C+%22price%22%3A+8.95%7D%5D%2C+%5B1%2C+%7B%22name%22%3A+%22Puppy%22%2C+%22desc%22%3A+%228%5C%22x10%5C%22+color+glossy+photograph+of+a+puppy.%22%2C+%22logo%22%3A+%22puppy.jpg%22%2C+%22price%22%3A+7.95%7 D%5D%5D
Böylelikle ilk flag’imi almış oldum.
Dizin Taraması ve Brute-Force
Uygulama görünüşte basit olduğu için atak vektörümü genişletmek adına yeni yollar arıyorum ve bir dizin taraması gerçekleştirip yeni keşifler yapmayı amaçlıyorum. Bunun için ffuf kullanacağım:ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt:FUZZ -u https://00228a1156390d6774c3d5138c718cc2.ctf.hacker101.com/FUZZ
Tarama sonucunda login sayfası olduğu dikkatimizi çekiyor. Sayfaya girdiğimde rastgele kullanıcı adı ve parola deniyorum.
Bana invalid username hatası veriyor ki bu işe yarar bir durum. Bu hatanın verilmesi kullanıcı adı tespitini sağlayacaktır. Burada kullanacağınız yöntem size kalmış. Kendi script’inizi de yazabilirsiniz, Hydra aracını da kullanabilirsiniz ya da Burp Intruder ile brute-force atağınızı gerçekleştirebilirsiniz. Kendi script’ini yazmak isteyenler adına ben buraya kendi yazdığım ve kısa senaryolarda iş gören örnek bir Python script’imi bırakıyorum:
Python:
import requests
import sys
target = "https://00228a1156390d6774c3d5138c718cc2.ctf.hacker101.com/login"
usernames = "/usr/share/wordlists/rockyou.txt"
password = "random"
sentence = "Invalid username"
with open(usernames, "r") as username_list:
for username in username_list:
username = username.rstrip()
sys.stdout.write(f"[X] Deneme Yapılıyor: {username}:{password}")
sys.stdout.flush()
data = {
"username": username,
"password": password
}
r = requests.post(target, data=data)
if sentence.encode() not in r.content:
sys.stdout.write("\n")
sys.stdout.write(f"[+] Geçerli Kullanıcı Bulundu: {username}")
sys.exit()
sys.stdout.write("\n")
Eğer Burp Suite Pro sürümünü kullanıyorsanız intruder üzerinden gerçekleştireceğiniz atak, community versiyonuna göre çok daha hızlı olacaktır. Pro sürümünü kullandığım için ben çözüme buradan devam edeceğim.hydra -L /usr/share/wordlists/rockyou.txt -p abc 00228a1156390d6774c3d5138c718cc2.ctf.hacker101.com https-post-form "/login:username=^USER^&password=^PASS^:Invalid username"
Kullanıcı adı ve parola girişi sağlayan isteği yakalayıp intruder’a gönderdim. Ardından, kullanıcı adı için wordlist olarak rockyou.txt kullandım ve parola için rastgele bir değer verdim. Böylelikle kullanıcı adını doğru tahmin ettiğimizde artık Invalid username hatası ile karşılaşmayacağımızı varsayabiliriz. Muhtemelen Invalid password benzeri bir hata ile karşılaşacağız.
Taramam sonuçlandıktan sonra isteklerin sonuçlarını filtreliyorum ve yaptığım çıkarımdan yola çıkarak Invalid password yazan bir cevap var mı buna bakıyorum. Burada kullanıcı adı tami olan istekte Invalid password cevabının döndüğünü görüyorum. Böylelikle kullanıcı adımızın tami olduğu sonucuna varabiliriz.
Kullanıcı adını bulduğumuza göre, sıra parolayı bulmaya geldi. tami kullanıcı adını sabit tutarak bu sefer parola için (yine rockyou.txt wordlist’ini kullanarak) brute-force gerçekleştirdim ve içerisinde Invalid password hatasının dönmeyen cevabın hangisi olduğunu aradım. En sonunda summer değeri için diğer giden isteklerden farklı olarak 302 found durum kodunu elde ettim.
tami:summer giriş bilgilerini kullanarak bilgileri giriş yaptım ve brute-force üzerinden elde ettiğim bilgileri doğrulamış oldum. Böylelikle ikinci flag’i de elde ettik.
XSS
Artık yetkili bir kullanıcı elde ettiğime göre içeride değişiklikler yapabildiğimi fark ettim. Bir input alanı gördüğüm için burada XSS deneyebileceğimi düşündüm.Payload’larımı yerleştirdiğimde XSS saldırısını tetikledim ve üçüncü flag’imi de elde etmiş oldum.
Okuduğunuz için teşekkürler.