top of page

Lab: Low-level logic flaw

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
2 dakikada okunur

Lab: Low-level logic flaw

Bu labda, satın alma sürecinde kullanıcıdan gelen verilerin yeterince doğrulanmaması nedeniyle oluşan bir business logic flaw bulunuyor. Amaç, normal şartlarda store credit’i yetmeyen bir kullanıcının, fiyat hesaplama mantığını bozarak Lightweight “l33t” Leather Jacket ürününü satın alabilmesi.

Lab giriş bilgileri olarak bana şu hesap veriliyor:

- wiener : peter

Lab: Low-level logic flaw

Öncelikle wiener hesabıyla giriş yaptım. Daha sonra hedef ürün olan Lightweight “l33t” Leather Jacket ’ı sepete ekleyip satın almaya çalıştım. Ancak checkout aşamasında sistem, store credit’im yetersiz olduğu için siparişi reddetti.

Bu noktada satın alma sürecinde toplam fiyatın nasıl hesaplandığını incelemem gerektiğini düşündüm.

Burp Proxy > HTTP history üzerinden sipariş sürecindeki istekleri takip ettim. Ürün ekleme işleminin POST /cart isteğiyle yapıldığını gördüm ve bu isteği Burp Repeater’a gönderdim.

Lab: Low-level logic flaw

Repeater’da isteği incelediğimde, ürün adedinin quantity parametresiyle belirlendiğini fark ettim. Burada dikkatimi çeken şey, tek bir istekte en fazla iki haneli bir quantity değeri eklenebiliyor gibi görünmesiydi.

Bu da bana, her istekte 99 adet ürün eklenebileceğini ama toplam adede dair bir kontrol olmadığını düşündürdü.

POST /cart isteğini Burp Intruder’a gönderdim

- quantity parametresini 99 olarak ayarladım

- Payload type: Null payloads

- Aynı isteğin tekrar tekrar gönderilmesini sağladım

Bu saldırı sırasında sepete her seferinde 99 adet ceket eklendi. Attack çalışırken cart sayfasını düzenli olarak yenileyerek toplam fiyatı izledim.

Bir süre sonra toplam fiyatın hızla arttığını, ardından çok büyük bir negatif değere düştüğünü fark ettim. Bu durum, backend’de fiyat hesaplamasında integer overflow oluştuğunu gösteriyordu.

Sistem, toplam fiyat belirli bir sınırı aştığında değeri negatife düşürüyor ve hesaplamaya oradan devam ediyordu. Bu da ödeme mantığının tamamen bozulmasına yol açıyordu.

Bu noktadan sonra sepette:

- Çok yüksek sayıda ceket Negatif bir toplam fiyat oluşmuştu.Fiyatı dengelemek için ikinci ürünü kullandımNegatif toplamla doğrudan checkout yapmak mümkün değildi. Bu yüzden toplam fiyatı 0 ile 100 dolar arasına getirmem gerekiyordu. Bunun için sepete ikinci bir ürün ekledim:

- There is No ‘I’ in Team — $10.43

Bu üründen çok sayıda ekleyerek negatif toplamı yavaş yavaş yukarı çektim. Fiyat 0’ın üzerine çıktığında, hâlâ store credit’imin altında olacak şekilde ayarladım.

Son durumda sepetim şu hale geldi:

- Lightweight “l33t” Leather Jacket

- Quantity: 16434

- There is No ‘I’ in Team

- Quantity: 2,011,264

- Total: $68.56

- Store credit: $31.44

Lab: Low-level logic flaw

Toplam tutar pozitifti ve sistem açısından satın alınabilir görünüyordu.

Toplam fiyat store credit kontrolünden geçtiği için checkout işlemini tamamladım. Sistem, iş mantığı hatası nedeniyle bu durumu geçerli kabul etti ve sipariş başarıyla oluşturuldu.

Bu şekilde lab çözülmüş oldu.

Bu labdaki temel zafiyet, quantity parametresinin yeterince sınırlandırılmaması ve toplam fiyatın integer overflow’a açık şekilde hesaplanmasıydı . Sunucu, kullanıcıdan gelen veriye fazla güvendiği için, basit bir input manipülasyonu tüm ödeme sürecini anlamsız hale getirebiliyor.

Bu durum, business logic hatalarının ne kadar kritik sonuçlar doğurabileceğini net bir şekilde gösteriyor.

 
 
bottom of page