Lab: Infinite money logic flaw
Lab: Infinite money logic flaw

Bu labda hedef oldukça netti: satın alma akışındaki bir mantık hatasını kullanarak “Lightweight l33t leather jacket” ürününü satın almak. Ama olay hiç de “ürünü al” kadar basit değildi; sistemin para hesabı ciddi şekilde sınıfta kalıyordu.
Lab’a wiener:peter bilgileriyle giriş yaptım ve önce ortamı biraz yokladım.
Siteyi incelerken newsletter’a kayıt olanlara SIGNUP30 isimli bir kupon verildiğini fark ettim. Kupon, %30 indirim sağlıyordu. Normal şartlarda çok masum. Asıl ilginç kısım, hediye kartı tarafında başlıyor.
Hesap sayfasında 10 dolarlık hediye kartı satın alabiliyordum. Denemek için sepete bir tane ekledim, kuponu uyguladım ve satın alma işlemini tamamladım. Kartı 7 dolara almış oldum.

Sonra bu kartı My account sayfasından kullandım. Ve burada sistem resmen kendini ele verdi.
Kartı kullandığımda, mağaza bakiyeme 10 dolar eklendi. Yani sistem, indirimli aldığım kartın tam değerini sorgusuz sualsiz bakiyeye yazıyordu. Aradaki fark? 3 dolar net kazanç.
Bu noktada şunu düşündüm:
“Bu işlem tekrar edebiliyorsa, burada sınırsız para var.”
Burp Proxy üzerinden trafiği incelemeye başladım. Hediye kartı kullanma işlemi oldukça basitti:

Tek kontrol edilen şey, request içindeki gift-card parametresiydi. Kart nereden geldi, daha önce kullanıldı mı, hangi siparişe bağlı… hiçbirini umursamıyordu.
Yani sistem için önemli olan tek şey: “Bana bir kart kodu ver.”
Bu da işi otomasyona bağlamak için fazlasıyla yeterliydi.
Bu noktadan sonra Burp’ün Session Handling Rules ve Macro özelliğini kullandım.

Macro’ya şu akışı ekledim:
- Sepete hediye kartı ekle
- Kuponu uygula
- Checkout yap
- Order confirmation response’undan hediye kartı kodunu al
- Aynı akışta bu kartı kullan
Order confirmation response’undan kart kodunu custom parameter olarak çıkardım ve bu değeri POST /gift-card isteğine bağladım.


Macro’yu test ettiğimde her şey beklediğim gibi çalışıyordu:
- Yeni kart üretiliyor
- Kart otomatik kullanılıyor
- Sunucu 302 response dönüyor
- Bakiye artıyor
Sistem, olan bitenden tamamen habersizdi.
Artık süreci tek tek çalıştırmanın anlamı yoktu. İşi Burp Intruder ’a devrettim.
- GET /my-account isteğini Intruder’a gönderdim
- Attack type: Sniper
- Payload type: Null payloads
- Payload sayısı: 412

Sunucuyu yormamak için resource pool ayarladım ve aynı anda yalnızca 1 istek gönderdim.

Saldırıyı başlattım ve Burp’un benim yerime çalışmasını izledim.
Intruder tamamlandığında mağaza bakiyem fazlasıyla yeterliydi. Ceketi sepete ekledim, satın aldım ve lab teknik olarak çözülmüş oldu.

Bu lab bana çok net bir şeyi tekrar hatırlattı: İndirim mekanizması + bakiye sistemi + zayıf iş akışı kontrolü bir araya gelirse, sonuç genelde felaket oluyor.
Gerçek hayatta da bu tarz logic flaw’lar genelde “önemsiz” görülüyor. Ama doğru yerde denk gelirse, etkisi injection’dan bile daha yıkıcı olabiliyor.
Bir sonraki labta görüşmek üzere 🌸







