Yavuz Kuk
  • Ben kimim?
  • Linux Privilege Escalation (Linux Yetki Yükseltme)
  • 🚩Zafiyetler
    • API Testing
    • Authentication Vulnerabilities
    • Command Injection
    • File Upload
    • HTTP Host Header Attack
    • XSS (Cross Site Scripting)
    • LFI (Local File Inclusion)
    • Race Condition
    • JWT Bypass
    • Web Cache Poisoning
    • SOP ve CORS
  • 🚩Araçlar
    • Beef
    • FFUF
    • Gobuster
    • Hashcat
    • Hydra
    • John the Ripper
    • Nmap
    • Zphisher
    • Wpscan
  • 🚩Network
    • İnternet nedir?
    • IPv 4/6 nedir?
    • DHCP nedir?
    • Firewall nedir?
    • DNS nedir?
    • OSI modeli nedir?
    • TCP/IP modeli nedir?
    • NAT nedir?
    • Web Cache nedir?
  • 🚩Protokoller
    • SMB (Server Message Block)
    • Telnet
  • 🚩Diğer
    • CVSS nedir?
Powered by GitBook
On this page
  • Lab: Username enumeration via subtly different responses
  • Lab: Broken brute-force protection, IP block
  • Lab: 2FA broken logic
  1. Zafiyetler

Authentication Vulnerabilities

PreviousAPI TestingNextCommand Injection

Last updated 7 months ago

Authentication vulnerabilities, yani kimlik doğrulama zafiyetleri, bir sistemde kullanıcıların kimliğini doğrularken oluşabilecek güvenlik açıklarını ifade eder. Kimlik doğrulama, bir kullanıcının kim olduğunu sistemin doğrulama işlemidir ve bu işlem genellikle kullanıcı adı ve şifre kombinasyonu ile yapılır. Ancak, bu süreçte meydana gelen zafiyetler, kötü niyetli kişilerin yetkisiz erişim sağlamasına neden olabilir.

Bu yazıda Burp Suite Academy üzerinden çeşitli örnekler çözeceğiz.

Normal şartlar altında güvenli bir sistemde her kullanıcı kendi hesabına erişebiliyor olmalı. Başka bir kişinin kullanıcı şifresini değiştirmek, brute-force kullanarak şifreyi öğrenmek, MFA (multi-factor authentication) adımlarını atlatmak sistemde büyük zafiyetlere yol açar.

Farklı siteler farklı authentication sistemleri kullanır bazıları sadece şifre ile giriş işlemlerini yönetirken bazıları şifre ve 2FA adımlarıyla giriş işlemini yönetir. Örneklerde bahsettiğim çeşitli giriş işlemlerini aşıp yetkisiz erişim elde edeceğiz.

İlk örneğimizde hangi kullanıcıya saldıracağımızı bilmiyoruz önce kullanıcı adını bulmamız lazım. Potansiyel kullanıcı adlarını ve şifreler bize verilmiş. Öncelikle hedef web sitesinde bulunan giriş safyasına rastgele bilgiler girelim ve arkada giden isteği Burp Suite ile yakalayalım. Yakaladığımız isteği Intrudera gönderelim burada brute-force saldırısı ile hangi kullanıcı hesaplarının olduğunu öğreneceğiz.

Araya girmeyi kapatıp paketin gitmesine izin verirsek şöyle bir hata karşımıza çıkıyor "Invalid username or password.". İsteğimize dönen cevapların içinde bu hatanın olup olmadığını kontrol edeceğiz farklı bir cevap içeren istekte bulunan bizim kullanıcı adımız olucaktır. Şimdi adım adım ilerleyelim.

Giriş işlemi için arkada giden paket bu şekildedir. Şifre kısmını şimdilik rastgele bir şeyler ile geçiyoruz. Payload kısmında ise bize sağlanan kullanıcı adlarını kullanıyoruz.

Bize dönen cevap üzerinde yukarıda belirtiğim hatanın olup olmadığını kontrol etmek için Settings kısmında küçük bir ayar yapmamız lazım. Settings kısmında Grep - Match kısmına yukarıdaki hatamızı eklememiz lazım.

Bu işlemlerden sonra saldrıyı başlatabiliriz. Yaptığımız filtrelemeyi içermeyen bir istek olucak ve bizim kullanıcı adımızı oradan bulacağız.

İşlem sonucunda dönen cevap üzerinde aradığımız kelime bir tane hariç bütün cevaplarda bulunuyor. Buradan çıkarmamız gereken bir sonuç var ki kullanıcı adı "mysql" dir. Şimdi ise mysql kullanıcı adını kullanarak şifre üzerinde bir brute-force saldırısı yapabiliriz.

mysql kullanıcı adıyla sorunun başında bize verilen potansiyel şifrelerle brute force atağı deniyoruz. Brute-force sonrasında şöyle bir sonuç karşımıza çıkıyor.

Yapılan denemeler sonucunda 302 status code ile dönen bir cevap var bu demek oluyor ki girilen bilgilerden sonra sistem kullanıcıyı yönlendirmiş yönlendirdiği yer kullanıcının profili olabilir admin paneli olabilir. Bundan sonra mysql ve sunshine bilgileri ile giriş yapıp profile sayfasına girerek soruyu çözebiliriz.

Bu tür brute-force açıklarını engellemek için çok fazla deneme yapıldıktan sonra IP banı ya da kullanıcıyı kısa bir süre bekletmek çözüm olarak kullanılabilir.

Bu örneğimizde çok fazla yanlış giriş işleminde bulununca sistem bizi kısa bir süreliğine engelliyor. Sorunun başında wiener:peter bilgileriyle sisteme giriş yapabileceğimizden bahsediyor ayrıca saldırıda bulunacağımız kullanıcı adının carlos olduğunu söylüyor.

Sistemin nasıl çalıştığını anlamak için wiener kullanısının şifresini yanlış giriyorum ve 3 yanlış girişten sonra 1 dakika bekleme süremiz oluyor. Bu engelleme işlemi basit seviyede şöyle gerçekleşiyor.

  • Arka tarafta bir sayaç var bu sayaç yanlış girilen deneme sayılarını tutuyor eğer belirli bir sayıya ulaşılırsa sistem kısa çaplı bir engel uyguluyor.

  • Diğer bir yöntem ise brute force atağı yapmaya çalışılan hesabın yanlış deneme sayısını arttırabiliriz.

Bu örneğimizde arka tarafta bir sayaç var ve bu sayaç her doğru girişten sonra sıfırlanıyor. Örnek üzerinden anlatmak gerekirse 2 yanlış girişten sonra sayaç 2 oluyor, üçüncü bir yanlış denemede sistem bize kısa süreli bir engel uygulayacak. Sayacı sıfırlamak için kendi hesabımıza giriş yapmamız gerekiyor sonrasında diğer denemeleri yapabiliriz.

Brute force işlemi için giriş işlemlerini Intrudera atmamız lazım. Öncelikle arada giden isteği durduruyoruz ve Intrudera gönderiyoruz.

Kullanıcı adına ve şifre kısmına brute force yapacağımız için o kısımları işaretliyoruz. Payload kısımları için şu şekilde bir yöntem izleyeceğiz. Bize verilen potansiyel şifre listesinde 2 şifre arasına peter ekleyeceğiz. Ayrıca kullanıcı adı içinde bir liste oluşturacağız ve burada da 2 carlostan sonra 1 peter olucak. Bu sayede 2 brute force denemesi sonucunda bir defa sisteme giriş yapıp sayacı sıfırlamış olacağız.

Payload listesini tek tek oluşturmaktansa yapay zeka ile bu listeyi düzenlemesini isteyebiliriz.

Ayrıca isteklerin tek tek ve sırasıyla gönderilmesi için Resource pool sekmesinde bir ayar yapmamız gerekiyor.

Bu ayardan sonra saldırıyı başlatabiliriz. Saldırını sırasına baktığımızda sırasıyla 2 tane başarısız giriş denemesi ve sonrasında wiener:peter bilgileriyle başarılı bir giriş sağlanıyor ve sayaç sıfırlanmış oluyor. Status code değerlerine göre filtrelediğimizde carlos kullanıcı adıyla 302 kodunu alan bir giriş denemesi karşımıza çıkıyor.

Bu sonuç gösteriyor ki carlos:hockey bilgileriyle sisteme giriş yapabiliriz ve soruyu çözebiliriz.


Şimdiye kadar gördüğümüz kısımlar sadece şifre ile yönetilen kısımlardır. Bazı web siteleri MFA (multi-factor authentication) dediğimiz yöntemler kullanır. Şifre ile doğrulamanın yanında kullanıcının sahip olduğu bir cihaza SMS ile ya da sahip olduğu bir mail hesabına gönderilen bir kod ile ikinci bir doğrulama sistemi çalıştırılabilir. Bu tür doğrulama yöntemlerine 2FA (2 Factor Authentication) diyoruz.

Çeşitli yöntemlerle birlikte bu 2FA doğrulama yöntemini aşabiliriz.

Sisteme giriş yapmak için iki farklı giriş bilgisi verilmiş biri kendi hesabımız olan wiener:peter diğeri ise carlos kullanıcısı. carlos kullanıcısını şifresini bilmiyoruz. Öncelikle sistemi gözlemek için kendi bilgilerimizle sisteme giriş yapalım ve giden paketleri inceleyelim.

1 numaralı istek sisteme giriş yaparken göndermiş olduğumuz istektir ve dikkat çeken ekstra bir durum yok. 2 numaralı isteğe baktığımızda login2 sayfasını yani 2FA kodunu girme sayfasını bize getiriyor. Hangi kullanıcı için kod oluşturulacağı da verify cookie değeriyle aktarılıyor. Eğer 2.adımda duran isteği göndermezsek sistem wiener kullanıcısı için 2FA kodu oluşturamaz. Eğer 2.adımda duran istekte bulunan verify değerini carlos yaparsak, carlos kullanıcısı için 2FA kodu oluşturur. Tabii ki de carlos kullanıcısını kullandığı email hesabına erişimimiz yok. Bu yüzden 2FA kod girme esnasında oluşan paketi yakalayıp Intruder ile brute force atağı gerçekleştireceğiz.

1 numaralı istekte gönderilen kodu görebiliyorsunuz bunu Intrudera gönderip üstünde çeşitli değiştirmeler yapıyoruz. Parametre olarak gönderilen mfa-code değerlerine Payloads sekmesi altından 0000 - 9999 arası değerler ekliyoruz ve saldırıyı başlatıyoruz.

Brute force işleminden sonra geri dönen cevaplara baktığımızda bir tane cevap hariç diğerleri 200 dönmüş, diğer cevap ise 302 dönmüş durumda.

Görmüş oluyoruz ki carlos kullanıcısı için 2FA kodumuzu bulmuş oluyoruz. Bulduğumuz bu kodu kullanmak için tekrardan wiener:peter bilgileriyle giriş yapacağız. 2FA kodunu gönderdiğimiz sırada paketi duruyoruz ve paket üzerinde çeşitli düzenlemeler yapıyoruz.

Yukarıdaki isteği gönderdiğimizde ve sayfayı yenilediğimizde soruyu çözmüş oluyoruz.

Bu yazı tarafından hazırlanmıştır.

Lab: Broken brute-force protection, IP block
Lab: 2FA broken logic
Yavuz Kuk
🚩
Lab: Username enumeration via subtly different responses
Listenin bu şekilde olması gerekiyor.
Kullanıcı adı listesi bu şekildedir.
Şifre listesi bu şekildedir.
Page cover image