Hacker101 - PetShop Pro Çözümü

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


Business Logic Hatası​

Untitled.png
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ı:
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
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.
Untitled 1.png

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
Untitled 2.png
Tarama sonucunda login sayfası olduğu dikkatimizi çekiyor. Sayfaya girdiğimde rastgele kullanıcı adı ve parola deniyorum.
Untitled 3.png
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")
Alternatif olarak aşağıdaki komutu çalıştırarak Hydra üzerinden brute-force gerçekleştirimini sağlayabilirsiniz:
hydra -L /usr/share/wordlists/rockyou.txt -p abc 00228a1156390d6774c3d5138c718cc2.ctf.hacker101.com https-post-form "/login:username=^USER^&password=^PASS^:Invalid username"
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.
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.
Untitled 4.png
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.
Untitled 5.png
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.
Untitled 6.png
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.
 

0x1337

0x
Yönetici
Не могу поменять пароль ??
Может мне создать новый логин и пароль?
Прошу помочь.
Спасибо.
You cannot change your username, but you can receive a password reset email to change your password. (check the spam box.)

If you want to browse our forum with a new username, you can log out and register with the username you want.
 
Üst