Task 1 Deploy the VM:
Bu odada kimlik doğrulama hatalarını nasıl bulacağımızı ve nasıl yararlanacağımızı öğreneceğiz. Makineyi deploy etmekle başlayalım.
Task 2 Dictionary attack:
Elimizde bulunan oturum açma formuna saldırmanın bir yolu olarak sözlük saldırısını deneyeceğiz. Sözlük saldırısı gerçekleştirmek için hydra ya da medusa kullanabiliriz ama bu toollara çok fazla parametre girmemiz gerektiğinden iş bizim için zorlaşacaktır. Bu yüzden en mantıklısı Burp Suite kullanmak olacak. Hedef uygulama 8888.portta çalışıyor.
Soru 1 : What is the flag you found after logging as Jack?
jack kullanıcısı ile giriş yapıp bayrağı elde etmemiz gerek. Kullanıcı adına “jack” parola kısmına ise “123” yazıyorum. Burp ile oturum açma isteğini yakaladıktan sonra isteği intruder a gönderip password parametresini işaretliyorum.
Payloads sekmesinden Payload options bölümüne parola listemi ekliyorum.
Sonrasında saldıyı başlatıyorum. Dönen response a baktığımızda response boyutu diğerlerinden farklı olan bir istek var. Bu farklılıktan yola çıkarak parolamızın “12345678” olduğu çıkarımını yapmak zor olmasa gerek.
Elde ettiğim parola sayesinde jack kullanıcısının hesabına giriş yapıp flag değerine ulaşıyorum.
soru 2 : Now try the same thing for username mike
Aynı saldırıyı mike için deneyelim bakalım. İsteği tekrar burp ile yakalıp intruder a veriyorum. Parola listesi için rockyou kullanıyorum (ilk 300 parola). Ne şanslıyız ki 3.istekte mike’ın parolasını bulduk.
mike’ın hesabına girdiğimde flag değerine ulaşıyorum.
Task 3 Re-registration:
Bir önceki görevde sözlük saldırısı yapmıştık. Bu görevde kendine has bir zafiyete odaklanacağız. Diyelim ki ilgili web uygulumasında Jack isimli bir hesap var ve biz onun hesabına erişmek istiyoruz. Eğer geliştirici uygulamayı doğru yapılandırmamışsa erişmek istediğimiz hesabı tekrar kaydetmeyi deneyebiliriz, ancak ufak bir değişiklik yapmamız gerek. “ jack” kullanıcı adının önüne boşluk karakteri ekleyip yeni bir kullanıcıymış gibi üye olalım. Bu sayede jack isimli yeni kullanıcı oluşturmuş olsak da gerçek jack’in yetkilerine sahip olmuş olacağız.
Soru 1 : What is the flag that you found in darren’s account?
darren’ın hesabına girip bayrağı elde edelim. Bahsettiğim yöntemdeki gibi yeni bir darren hesabı açacağız. Kullanıcı adının önünde boşluk olsun. Gerekli bilgileri girip üye olalım.
Üye olduktan sonra “ darren” hesabına giriş yaptığımda beni flag karşılıyor.
Soru 2 : Now try to do the same trick and see if you can login as arthur.
Aynı mantıkla arthur’un hesabına girip bayrak değerini elde etmemiz gerek.
Bu kısmı uzatmak istemiyorum.
Soru 3 : What is the flag that you found in arthur’s account?
cevap : d9ac0f7db4fda460ac3edeb75d75e16e
Task 4 JSON Web Token:
Json Web Token (JWT) yetkilendirme için yaygın olarak kullanılan yöntemlerden biridir. HMAC hashing public/private keyler kullanılarak oluşturulan bir tür çerezdir. Diğer çerez türünden faklı olarak web uygulamasında oturum açmış kullanıcının ne tür erişime sahip olduğunu bilmesini sağlar.JWT ile ilgili özel olan şey JSON formatında olmasıdır.
JWT 3 bölümden oluşur.
1)Header:
Kullanılan algoritma ve tip bilgisi yer alır. Kullanılan algoritma HMAC,RSA,SHA256 veya boş olabilir.
{ "alg": "HS256", "typ": "JWT"}
2)Payload:
Kullanıcıya verilen erişimi içeren bölümdür. Web sitesinden web sitesine farklılık olabilir.
3)Signature:
Sunucuya aktarılan verilerin bütünlülüğü için imzaya gerek duyulur.
Exploitation
Eğer JWT doğru yapılandırılmamışsa saldırgan düşük ayrıcalıklı bir hesaba giriş yapıp JWT Token elde eder. Sonrasında bu tokeni çözüp set alg değerini none yapar bu şifrelemenin kullanılmaması gerektiği anlamına gelir. Eğer başlık değerinde gerekli değeri değiştirirse başka bir kullanıcının ayrıcalıklarına ulaşabilir. Şimdi basit bir örnekle daha iyi anlayalım.
Hedef uygulama : 10.10.86.120:5000
username password girdikten sonra “Authenticate” diyorum. Devamında “Go” butonuna basıp burp ile gönderilen isteği yakalıyorum.
Şimdi ise base64 decode yapıp ne gönderdiğine bakalım.
{“typ”:”JWT”,”alg”:”HS256″}{“exp”:1627223874,”iat”:1627223574,”nbf”:1627223574,”identity”:1}ѩ_�͐iIW,MvPtn
Gönderdiği JWT tokeninde dikkatimi 2 değer çekiyor. İlki “alg” kısmı eğer NONE yaparsam şifreleme kullanmayacak. İkincisi ise “identity”. Bu değeri 0 yaparsam belki admin kullanıcısının ayrıcalıklarına şifreleme bilgisi olmadan erişebilirim.
{“typ”:”JWT”,”alg”:”NONE”}{“exp”:1627223874,”iat”:1627223574,”nbf”:1627223574,”identity”:0}
şimdi bunu base64 ile endcode edelim.
eyJ0eXAiOiAiSldUIiwgImFsZyI6ICJOT05FIn0NCnsiZXhwIjogMTYyNzIyNjQ2MiwiaWF0IjogMTYyNzIyNjE2MiwibmJmIjogMTYyNzIyNjE2MiwiaWRlbnRpdHkiOiAwfQ0K
Bu tokeni burp ile gönderdiğimde bayrağı elde ediyorum.
Task 5 No Auth:
Hedef Uygulama : http://10.10.86.120:7777/
Klasik kayıt ekranı karşımıza çıkmakta.
Üye olduktan sonra merhaba mesajı alıyoruz. “visit private space” e tıkladığımda beni hesap bilgilerim karşılıyor.
Fakat dikkatimi çeken url de /users/1 kısmı. Belki de 0 yaparsam admin bilgilerine ulaşabilirim.
Bu sayede superadmin bilgilerine ve bayrağa ulaşmış oluyoruz.