Merhaba! Umarım her şey yolundadır. Son yazımın üzerinden epey zaman geçtiğini biliyorum! Beni tanımayanlar için kısa bir giriş yapayım. Adım Daniel ama bilgisayar korsanlığı camiası beni Masonhck357 olarak tanıyor. Bir yıldan biraz fazla bir süredir, çoğunlukla Bugcrowd ile hack’liyorum. Şu anda ilk 300’deyim ve çalışmaya devam ediyorum! Kritik bir hata için çeşitli yanlış yapılandırmalardan ve düşük-orta güvenlik açıklarından yararlandığım bir güvenlik açığını paylaşmak istiyorum!
Programın arka planı.
Program, tüketicileri ev tadilatı ticaret sektöründeki yerel işletmelere bağlayan çevrimiçi bir hizmet dizini sağlayan bir uygulamadır. Ayrıca Devlet kurumları için ayrı bir yeni özelliğe sahiptirler. Makalenin uğruna uygulamayı arayacağız. https://www.work.com 😀
Keşif:
Bir uygulamada keşif yaparken yaptığım ilk şey parmak izi almaktır. Genellikle Wappalyzer’ın işe yarayacak krom uzantısını kullanırım. Bunun PHP ile yazılmış bir uygulama olduğunu görmek beni mutlu etti. Daha sonra web uygulamasını amaçlandığı gibi kullanarak birkaç saat harcamaya devam ettim. Önce bir “tüketici” hesabı oluşturdum ve uygulamayı bu rol olarak kullandım, ardından “işçi” hesabına geçtim ve aynısını yaptım. Tavşan deliğine sıkışıp kalmamak için ilginç olduğunu düşündüğüm her şeyi yazdım. Günümün sonuna doğru Burp Proxy geçmişimi gözden geçiriyordum ve oturum çerezinin Httponly veya Secure bayrağına sahip olmadığını fark ettim. Bunu hemen rapor edip kısa sürede 100$ kazanabilirim ama bundan daha fazla yararlanmaya karar verdim.
Yan not: Ayrıca aşağıdaki gibi PHP dosyalarını içeren bir AJAX dizinini de buldum. https://work.com/api/ajax/dir/file.php. Daha fazla PHP dosyası için PHP uç noktasını FUZZ etmeye karar verdim ve JWT.php adında gizli bir dosyayla karşılaştım. Bu çağrıyı yaparken, belirli API çağrıları için kullanacağım belirtecin aynısına benzer şekilde yalnızca bir JWT belirteci alacaktım. Ayrıca bu JWT jetonunun süresinin OLMADIĞINI da fark ettim. Kesinlikle ilginç görünüyor ancak henüz rapor etmeye değmez.
XSS:
Bu yüzden oturum çerezinden yararlanmak istiyorum. Yaptığım ilk şey XSS’yi aramak. Bir XSS bulabilirsem document.cookie’yi çağırabilir ve kurbanın oturum belirtecini alabilirim. Önceki gün programda zaten bir XSS raporlamıştım, bu yüzden bu raporda aynı XSS’yi kullanmak istemedim. Karşılaştığım bir parametre içeren her uç noktayı gözden geçirmeye başlıyorum. ŞANS YOK! Yeni varlıklar bulmak için biraz içerik keşfi yaptım ama şansım olmadı. GAU’yu (https://github.com/lc/gau) kullanmaya karar verdim ve önbelleğe alınmış, rastlamadığım başka uç noktalar olup olmadığına baktım. Bir uç noktayla karşılaştım: https://work.com/dir/app-detection.php. Sayfa hâlâ yayındaydı ancak oldukça kullanışsızdı. Bruteforce’un uç noktasını parametrelemeye karar verdim ve XSS’ye karşı savunmasız olan bir parametre buldum. İçerik Güvenliği Politikası tarafından durdurulduğumu görmek için hemen bir veri ekleyin.
CSP Baypası:
Bunu atlamak için bir iframe enjekte ettim ve CSP’yi atlamak ve srcdoc’un değeri olarak girilen HTML’yi yürütmek için “srcdoc” niteliğini kullandım (bu, BXSS URL’sine çağrı yapan bir komut dosyası olurdu) Yani şimdi kurbanın oturumuna sahibim jeton! BAŞARI! Gerçi hâlâ bitirmedim. Bunun ciddiyetini en üst düzeye çıkarabileceğimi doğrulamak istiyorum.
Nihai sömürü
Hemen Burp’a gidiyorum ve yanıt gövdesindeki hassas bilgileri açığa çıkaran uç noktaları aramaya başlıyorum VE oturum belirtecini kullanıyorum. Bazı ilginç hassas bilgiler buldum ancak maksimum ciddiyeti garanti edecek hiçbir şey bulamadım. Sonra düşündüm….”Peki ya daha önce bulduğum JWT.php dosyası?” Bu uç noktayı hemen Burp’a atıyorum, oturum çerezini değiştiriyorum ve iştekurbanım adına süresi dolmayan bir JSON web belirteci! Hemen o jetonu alıyorum ve onunla keşfetmeye başlıyorum. Beklediğim gibi kurbanımın çok daha hassas verilerine ulaşabildim. Eğer kurbanım devlete ait bir varlık olsaydı, uygulamaya yüklenen son derece hassas belgeleri görebilirdim. Ayrıca bir ödeme JSON web jetonu oluşturup kurban adına ödeme yapabiliyorum!
Çözüm:
Özetleyelim! Zincirlenen aşağıdaki yanlış yapılandırmalar/güvenlik açıkları şunlardır:
1. Çerezlerde uygun güvenlik işaretlerinin bulunmaması
2. CSP baypaslı kör XSS
3. JWT tokeni üreten gizli PHP dosyası
4. İçerikleri kolaylıkla keşfetmemi sağlayan hız sınırlamasının olmaması.
5. Hassas bilgilerin ifşa edilmesi
Eğlenceli değil mi? Her zaman elinizden gelen en yüksek ciddiyeti elde etmek için zorlamaya devam edin ve her zaman kendinize daha fazlasını yapıp yapamayacağınızı sorun. Kendinizi kısa satmayın ve her zaman zirveyi hedefleyin. Umarım hepiniz yazımı beğenmişsinizdir! Herhangi bir sorunuz varsa buradan veya Twitter @masonhck3571 adresimden bana ulaşmaktan çekinmeyin.