Harvard Üniversitesinde Nasıl Stored XSS buldum?

4 years ago 193
BOOK THIS SPACE FOR AD
ARTICLE AD

ABStract

Merhabalar, bu yazımda yaklaşık 8–9 saat gibi bir sürede recon ve pentest aşamaları dahil Harvard’ın sitesindeki küçük hikayemi ve XSS hakkındaki bildiklerimi paylaşacağım.

Öncelikle biraz XSS hakkında konuşalım.

Image for post

Image for post

XSS, sistemin kullanıcıdan bir input(giriş) alıp browser’a gönderilerek client-side’da çalıştırılan bir güvenlik açığıdır.

Bu açığın çıkma sebebi alınan inputun hiç bir şekilde html ve javascript filtrelerinden geçirilmeden doğrudan browser’ın yorumlayarak çalıştırmasından kaynaklanır.

Image for post

Image for post

Input’u girdiğinizde bir HTTP isteği yollarsınız. Daha sonra girdiğiniz şey ekrana bastırılacak şekilde ayarlandı ise HTTP response’un body kısmında spesifik olarak bazı yerlerinde girdiğiniz inputu göreceksiniz. Eğer herhangi bir önlem alınmamışsa siz buraya bir tag ile javascript kodu yerleştirerek, browser’da istediğinizi çalıştırabilirsiniz.

Browser’lar sadece sizin verdiğiniz kodları çalıştırırlar. Kodun iyi veya kötü amaçla yazıldığını anlayacak bir mekanizmaları yoktur. Bu yüzden geliştiriciler kendileri bazı filtrelemeler ve şifrelemeler yaparak bu sorunun önüne geçerler.

Kurbanın tarayıcısında bir javascript dosyası çalıştırarak kurbanın o andaki cookie bilgilerini kendine çekebilir. Yani account takeover bile mümkün olabilir.

XSS Güvenlik açığını önlemenin bazı yöntemleri;

Encoding

XSS, HTML ve JavaScript filtrelerinden geçirilmediği takdirde oluşan bir güvenlik açığıdır.En yaygın ve etkili mitigation tekniği, html ile veya bazı durumlarda url ile encode etmektir.Bu sayede girilen kodlar “<>’ gibi karakterleri &lt; &quot; şeklinde kodladığı ve browser’ın bunları tag olarak değilde karakter olarak algıladığı için bir html tagı veya javascript kodu çalıştırmak mümkün değildir.

Spesifik olarak bazı özel durumlarda bunun zorda olsa bypass teknikleri olabiliyor.

Image for post

Image for post

Ama yine de genel olarak en etkili yöntemin bu olduğunu düşünüyorum.

Güvenlik Duvarı

2. Olarak WAF ile koruyabilirsiniz ama bunu tavsiye etmiyorum çünkü hem para veriyorsunuz hemde bypass edilmesi bazen mümkün olabiliyor. Her yerde kullanıldığı için bir tanesi patlarsa bütün waflar patlıyor tabii ki çok iyi WAF larda var. Ancak yinede bunun en iyi yöntem olduğunu düşünmüyorum.

Öncelikle her güvenlik araştırmacısının yaptığı gibi öncelikle site hakkında bilgi toplamam gerekiyordu bunun için Sudomy aracını kullandım.

Sudomy aracını kullanarak aşağıdaki parametrelerle bir tarama başlattım:

./sudomy -d harvard.edu -dP -eP -rS -cF -pS -tO -gW — httpx — dnsprobe -aI webanalyze -sS

Yaklaşık 10–11 saatin sonunda tarama bitti. Ancak güvenlik açığına ben bu arama devam ederken rastladım.

Bu arama devam ederken tek tek domain adreslerine girip attack surface’ın izin verdiği kadarıyla testler gerçekleştiriyordum.

Gördüğüm her şeye bu sistemi amacının dışında nasıl kullanarak zarar verebilirim diye düşünüyordum.

Bir güvenlik açığı ararken bakış açınız saldırganın hatta bazı durumlarda ise geliştiricininki gibi olmalıdır.

Websitelerine tek tek bakarken bir tanesininde kayıt olma seçeneği olduğunu fark ettim. Çok umutlu değildim. Ancak açtığım hesapta <> işaretlerinin encode edilmediğini gördüm.O anki mutluluk anlatılamaz bir duygudur :D

Image for post

Image for post

<script> tagları genelde bloklanır o yüzden onu kullanmak yerine <img> tagını tercih ettim.

Ve 2. hesabımı oluştururken <img src=x onerror=prompt()> tag lerini kullandım. Burada kullandığım payload’da img tagının src (source)’a alakasız bir değer veriliyor. Bunun sonucunda hata oluştuğu için onerror event’i gerçekleşiyor ve browser bir popup çıkarıyor.

Çıkan popup ‘ı görmek çok heyecan vericiydi. Bir javascript kodu enjekte etmeyi başarmıştım.

Farklı kodlar enjekte ederek denemeler yaptım ve bunun bir stored XSS güvenlik açığı olduğunu doğruladım ve yetkililere yani Harvard University Information Technology ekibine yolladım.

Image for post

Image for post

Image for post

Image for post

Herhangi bir ödül almadım çünkü Harvard üniversitesi bulunan güvenlik açıkları başına bir ödül vermiyor. Bu güvenlik açığını aramaya ödül için değil kendimi geliştirmek için başladım. Para kazanacağınız günler elbet olacak ancak önemli olan kendinizi ne kadar geliştirdiğiniz neler öğrendiğinizdir. Siz kendinizi geliştirmeye devam edin her şeyi merak edin koparmaya çalıştığınız meyvenin tadını elbet alacaksınız.

Okuduğunuz İçin Teşekkürler

Mitigation: Hafifletme/azaltma anlamına gelir.WAF: Web Application Firewall (Web uygulaması güvenlik duvarı) Anlamı: Bir web uygulama güvenlik duvarı, bir web uygulamasına giden ve uygulamadan gelen tüm HTTP trafiğini filtreler, inceler ve bloklar.Browser: Tarayıcı. Anlamı: İnternet sayfalarına ulaşmamızı sağlayan yazılım ve programlara browser adı verilmektedir. Bunun bir diğer adı da tarayıcıdır. Biraz daha kolay bir dille ifade edersek internete bağlanırken her gün kullandığımız Google Chrome, Mozilla, Internet Explorer gibi platformlar birer browser yani tarayıcıdır. Ve eğer bunlar olmasaydı bugün internete bağlanmak söz konusu olmayacaktı.Client-side: İstemci tarafı. Anlamı: İstemci tarafı, bir bilgisayar ağındaki istemci-sunucu ilişkisinde istemci tarafından gerçekleştirilen işlemleri ifade eder.Recon: Penetration testing ‘in ilk aşamasıdır yani “keşif” kısmıdır.Bug Bounty: Burada bug zafiyet , bounty ise ödül anlamına gelir. Özetle, bir sistemde zafiyet bulup bunu bildirerek karşılığında ödül almaktır.Sudomy: Bash, python ve bir çok dil ile birleştirilip geliştirilen bir web application keşif/recon aracıdır.

Emir ‘Soldawn’ Güner

Abstract Bug Bounty Team

Discord: https://discord.gg/WMQJceN

Twitter: https://twitter.com/abstract_bounty

Youtube: https://www.youtube.com/channel/UCsF0p9m0Fl9UJljtaSryNaA

Read Entire Article