🖥️
Siber Güvenlik Notları
  • WHOAMI
    • 👨‍💻Who Am I?
  • 🔭Information Gathering
    • Pentest VM Setup
    • Passive Information Gathering
    • Subdomain Enumeration
    • Host Discovery
    • Port Scanning
    • Email Enumeration
    • Leaked Passwords
    • Zafiyet Araştırma
  • 🪟Windows Pentesting
    • Windows Privilege Escalation
    • Windows Persistence
    • Windows Lateral Movement
    • AV Evasion
  • 🐧Linux Pentesting
    • Linux Privilege Escalation
    • Linux Persistence
    • Linux Lateral Movement
  • 🕸️Web Application Pentesting
    • Web Pentest Checklist
    • SQL Injection
    • NoSQL Injection
    • OS Command Injection
    • XXE Injection
    • SSTI
    • XSS
    • CSRF
    • SSRF
    • LFI/RFI
    • Insecure Deserialization
    • CORS Misconfiguration
    • Directory Traversal
    • File Upload
    • Broken Authentication
    • Broken Access Control
    • Business Logic
    • Race Conditions
    • Web Cache Deception
    • AWS Testing
    • Web Cache Poisoning
    • Clickjacking
    • API Testing
    • Broken Link Hijacking
    • HTTP Request Smuggling
    • LLM
    • HTTP Host Header Attack
    • OAuth Zafiyetleri
    • GraphQL API
    • HTTP Parameter Pollution
    • Configuration and Deployment Management Testing
    • Information Disclosure
    • Prototype pollution
    • JWT
  • 🖲️Network Service Pentesting
    • 📘Active Directory Services
      • Bleeding Edge Vulns
      • Misconfigs
      • Domain Trust
      • DNS (53)
      • Kerberos (88)
      • LDAP (389,636)
      • RPC WMI (135)
      • SMB (445)
      • WinRM - 5985
    • 📂FTP - 21
    • 🔐SSH - 22
    • 🤣Telnet - 23
    • SMTP - 25
    • TFTP - 69 UDP
    • HTTP - 80,443
      • Apache
      • Joomla
      • Drupal
      • Wordpress
      • WEBDAV
      • PHP
      • Laravel
    • IMAP/POP3 - 110,143,993,995
    • SNMP - 161
    • Rservices - 512
    • IPMI - 623
    • Rsync - 873
    • MSSQL - 1433
    • Oracle TNS - 1521
    • NFS - 2049
    • Docker
    • Grafana - 3000
    • MySQL - 3306
    • RDP - 3389
    • Postgresql - 5432
    • Redis - 6379
    • JDWP - 8000
    • MongoDB - 27017
  • 🕸️Network Pentesting
    • ARP Poisoning
  • 📞Android Pentesting
    • Android Derleme Süreci
    • Reversing
    • Rooting
    • Burp Suite Sertifikası
    • SSL Pinning Bypass
    • Patching
    • MobSF Kurulumu
    • Flutter Pentesting
  • 📰Teori
    • Güvenlik Ürünleri
    • OSI
    • Security Principles
  • Diger
    • Hacking Gadgets
      • Wifi Pineapple
      • Pwnagotchi
    • Stego
    • Buffer Overflow
    • Phishing
    • Nessus
    • DDOS Attacks
    • MSFConsole
  • ⏪Reverse
    • GCC Reverse
    • Python Reverse
    • Flare VM
    • Remnux
  • 🛜Wireless Pentesting
    • Wireless Pentest
    • Wireless V2
Powered by GitBook
On this page
  • Business Logic Zafiyeti Nedir?
  • Yöntemler
  • Client-Side Kontrole Güvenmek
  • Negatif Sayılarda Hatalar
  • Mantıksız Güvenlik Kontrolü
  • Kuralların Hatalı Uygulanması
  • Çok Yüksek Sayılarda Hatalar
  • Girdilerin Yanlış Değerlendirilmesi
  • Endpointlerde Zayıf Kontroller
  • Çok Adımlı İşlemlerde Kontrol Eksikliği
  • Request ile Doğrulanan Yetki Kontrolü
  • Mantıksız Para İşlemleri
  • Aynı Şifrelemenin Birkaç Alanda Kullanılması
  • Email Parser Zafiyetleri
  • Önlemler
  • Kaynaklar

Was this helpful?

  1. Web Application Pentesting

Business Logic

PreviousBroken Access ControlNextRace Conditions

Last updated 20 days ago

Was this helpful?

Business Logic Zafiyeti Nedir?

Business logic zafiyeti, bir yazılım veya uygulamanın iş kuralları ve mantığıyla ilgili zayıflık veya güvenlik açığıdır. Bu tür zafiyetler, uygulamanın tasarım aşamasında yapılan hatalardan kaynaklanır ve genellikle normal kullanıcı davranışlarının ötesine geçerek sistemi kötüye kullanmayı mümkün kılar.

Örneğin, bir e-ticaret sitesinde indirim kodlarıyla ilgili bir zafiyet, kullanıcıların sınırsız sayıda indirim uygulamasına veya belirli ürünleri ücretsiz almasına olanak tanıyabilir. Diğer bir örnek, bir bankacılık uygulamasında para transfer limitlerini aşmanın mümkün olması olabilir.

Yöntemler

Client-Side Kontrole Güvenmek

Örnek olarak bir ürün sepete eklenirken server tarafında ücreti kontrol edilmiyor ise ürünün fiyatını düşürebiliriz.

POST /cart HTTP/2
Host: example.com
Content-Length: 49
Content-Type: application/x-www-form-urlencoded

productId=1&price=10

Negatif Sayılarda Hatalar

Uygulamalar pozitif olması gereken verilerin negatif olup olmadığını kontrol etmiyor olabilir.

POST /cart HTTP/2
Host: example.com
Content-Length: 49
Content-Type: application/x-www-form-urlencoded

productId=1&quantity=-10

Mantıksız Güvenlik Kontrolü

Örnek olarak bir uygulama kendi şirketindeki çalışanlara admin yetkisi veriyor olabilir. Eğer eposta doğrulaması yapılmadan hesap açılıyor ise saldırgan admin hesabına sahip olabilir.

attacker@gmail.com -> /admin 403
attacker@example.com -> /admin 200 OK

Kuralların Hatalı Uygulanması

Mesela sepetteki ürünlere kupon uygulanabiliyor fakan aynı kuponun birden fazla kere girilememesi lazım. Eğer uygulama sadece son kuponun girilen kupon ile aynı olup olmadığını kontrol ediyorsa 2 kupon sürekli ard arda girilebilir.

NEWCUST5 -> OK
NEWCUST5 -> Rejected

NEWCUST5 -> OK
SIGNUP30 -> OK
NEWCUST5 -> OK

Çok Yüksek Sayılarda Hatalar

Bilgisayarlar bir verinin değeri çok yüksek integer değerlere çıktığında negatife dönebilir. Bu durumda negatif sayıda ürün alınıyor olabilir.

POST /cart HTTP/2
Host: example.com
Content-Length: 49
Content-Type: application/x-www-form-urlencoded

productId=1&quantity=2147483647

Girdilerin Yanlış Değerlendirilmesi

Örneğin uygulama bir domainden kayıtlı hesaplara admin yetkisi veriyor ve maili doğruluyor. Fakat veritabanı en fazla 255 karakter uzunluğunda email tutabiliyor ve devamını kesiyor. Böyle bir davranış varsa aşağıdaki şekilde bir saldırı yapabiliriz.

attacker@gmail.com -> 403
johndoe@example.com -> 200

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@example.com.attacker.com -> 200

Endpointlerde Zayıf Kontroller

Örneğin bu enpointte parametre olarak eski parola gönderiliyor fakat parametreyi sildiğimizde olup olmadığı kontrol edilmiyor olabilir.

POST /my-account/change-password HTTP/2
Host: example.com
Content-Length: 49
Content-Type: application/x-www-form-urlencoded

username=attacker&oldpassword=pass123&newpassword=pass1234


POST /my-account/change-password HTTP/2
Host: example.com
Content-Length: 49
Content-Type: application/x-www-form-urlencoded

username=administrator&newpassword=pass1234

Çok Adımlı İşlemlerde Kontrol Eksikliği

Örneğin bir ürün siparişinde önce sepete sonra ödeme kısmına sonrasında onay kısmına yönlendiriliyoruz.

Eğer kontrol yapılmıyorsa ödeme bilgisi girmeden sipariş oluşturabiliriz.

cart->checkout>confirmation
cart->confirmation

Request ile Doğrulanan Yetki Kontrolü

Örneğin admin paneline erişirken bizim admin olmadığımızı belirten bir istek atılıyor. Bu isteği yarıda keserek göndermezsek panele ulaşabiliriz.

POST /my-role HTTP/2
Host: example.com
Content-Length: 49
Content-Type: application/x-www-form-urlencoded

role=user

GET /admin -> 403

DROP /my-role
GET /admin -> 200

Mantıksız Para İşlemleri

Örneğin siteden 100TL karşılığında 100TL değerinde hediye kartı alabiliyoruz ve sitede bakiyemize yükleniyor.

Eğer bu ürüne indirim kuponu ekleyebiliyorsak 100 lira ile sonsuz bakiye yükleyebiliriz.

Aynı Şifrelemenin Birkaç Alanda Kullanılması

Örneğin bir mesaj gönderdiğinizde çerezinize o mesajın şifrelenmiş hali geliyor. Eğer bu çerezi decode eden bir özellik varsa diğer şifrelenmiş verileri de aynı şekilde decode etmeyi deneyebiliriz.

POST /message HTTP/2
Host: example.com
Cookie: stay-loggedin=Vqz0XBApYpXA75OFJegD9YLqjJ4rby7sMYkl8pnk2gY

message=hello123&email=attacker@gmail.com

GET /message HTTP/2
Host: example.com
notification=dAsdXBApYpdAfsay7sMYkl8pnk2gYfdshffzz

HTTP/2 200 OK
hello123

GET /message HTTP/2
Host: example.com
notification=Vqz0XBApYpXA75OFJegD9YLqjJ4rby7sMYkl8pnk2gY

HTTP/2 200 OK
attacker.202451850566413

Email Parser Zafiyetleri

Bu zafiyette farklı kodlamalar kullanarak kayıt maili ile veritabanındaki mailin farklı kayıt edilmesini sağlıyoruz.

=? # Encode baslangici
utf-8 # Karakter seti
?q? # Encoding tipi
=61=62=63 # Encoded veri
?= # Encode sonu


# abcfoo@gmail.com
=?iso-8859-1?q?=61=62=63?=foo@gmail.com
=?utf-8?q?=61=62=63?=foo@gmail.com
=?utf-7?q?&AGEAYgBj-?=foo@gmail.com



# hacker@gmail.com
=?utf-7?q?hacker&AEA-gmail.com&ACA-?=@microsoft.com

Önlemler

  • Geliştiricilerin uygulamanın hizmet ettiği alanı anladığından emin olun.

  • Kullanıcı davranışı veya uygulamanın diğer bölümlerinin davranışı hakkında üstü kapalı varsayımlarda bulunmaktan kaçının.

  • Her aşamada yapılan varsayımları not ederek, tüm işlemler ve iş akışları için açık tasarım belgelerini ve veri akışlarını oluşturun.

  • Kodu mümkün olduğunca açık yazın. Ne olması gerektiğini anlamak zorsa, herhangi bir mantık hatasını tespit etmek de zor olacaktır. İdeal olarak, iyi yazılmış bir kodun anlaşılması için dokümantasyona ihtiyaç duyulmamalıdır.

  • Kaçınılmaz olarak karmaşık durumlarda, diğer geliştiricilerin ve test uzmanlarının hangi varsayımların yapıldığını ve beklenen davranışın tam olarak ne olduğunu bilmelerini sağlamak için açık belgeler üretmek çok önemlidir.

  • Her bir bileşeni kullanan diğer kodlara yapılan referansları not edin. Kötü niyetli bir tarafın bunları alışılmadık bir şekilde manipüle etmesi durumunda bu bağımlılıkların yan etkilerini düşünün.

Kaynaklar

Portswigger Academy:

🕸️
https://portswigger.net/web-security/logic-flaws