cross site scripting attack tutorial with examples
Siteler Arası Komut Dosyası Yazma (XSS) Saldırısı, nasıl engelleneceği ve XSS testi için Tam Kılavuz.
Siteler Arası Komut Dosyası Yazma (XSS), her ileri düzey test kullanıcısı tarafından bilinen en popüler ve savunmasız saldırılardan biridir. Web uygulamaları için en riskli saldırılardan biri olarak kabul edilir ve zararlı sonuçlar da doğurabilir.
İstemci tarafı diller çoğunlukla bu saldırı sırasında kullanıldığından, XSS genellikle benzer istemci tarafı saldırılarıyla karşılaştırılır. Bununla birlikte, XSS saldırısı, daha az savunmasız teknolojilere zarar verme kabiliyeti nedeniyle daha riskli kabul edilir.
Bu XSS saldırı eğitimi, size kolay anlaşılmanız için basit terimlerle mükemmel örneklerle türleri, araçları ve önleyici tedbirleri hakkında eksiksiz bir genel bakış sunacağız.
Ne öğreneceksin:
- XSS Saldırısına Giriş
- XSS Nasıl Yapılıyor?
- Siteler Arası Komut Dosyası Saldırılarının Türleri
- XSS'ye Karşı Nasıl Test Yapılır?
- XSS Test Araçları
- Diğer Saldırılarla Karşılaştırma
- XSS'yi Önlemenin Yolları
- Teknolojilere Göre Önleme
- XSS Hile Sayfaları
- Sonuç
- Önerilen Kaynaklar
XSS Saldırısına Giriş
Siteler Arası Komut Dosyası saldırısı, kurbanın tarayıcısında yürütülecek kötü amaçlı bir kod yerleştirmedir. Kötü amaçlı komut dosyası web sunucusuna kaydedilebilir ve kullanıcı uygun işlevi her çağırdığında çalıştırılabilir. Web sunucusunda kaydedilmiş herhangi bir komut dosyası olmadan diğer yöntemlerle de gerçekleştirilebilir.
Bu saldırının temel amacı, diğer kullanıcının kimlik verilerini (çerezler, oturum belirteçleri ve diğer bilgiler) çalmaktır. Çoğu durumda, bu saldırı diğer kişinin çerezlerini çalmak için kullanılmaktadır. Bildiğimiz gibi, çerezler otomatik olarak oturum açmamıza yardımcı olur. Bu nedenle çalınan çerezler ile diğer kimliklerle giriş yapabiliriz. Bu saldırının en riskli saldırılardan biri olarak görülmesinin sebeplerinden biri de budur.
İstemci tarafında XSS saldırısı yapılıyor. Farklı istemci tarafı programlama dilleri ile gerçekleştirilebilir. Ancak, çoğu zaman bu saldırı Javascript ve HTML ile gerçekleştirilir.
Önerilen okuma=> HTML Enjeksiyon öğreticisi
XSS Nasıl Yapılıyor?
Siteler Arası Komut Dosyası saldırısı, kötü amaçlı kod veya komut dosyası gönderip enjekte etmek anlamına gelir. Kötü amaçlı kod genellikle Javascript, HTML gibi istemci tarafı programlama dilleriyle yazılır. VBScript , Flash, vb. Ancak, Javascript ve HTML çoğunlukla bu saldırıyı gerçekleştirmek için kullanılır.
Bu saldırı farklı şekillerde gerçekleştirilebilir. XSS saldırısının türüne bağlı olarak, kötü amaçlı komut dosyası kurbanın tarayıcısına yansıtılabilir veya veritabanında depolanabilir ve kullanıcı uygun işlevi çağırdığında her seferinde çalıştırılabilir.
Bu saldırının ana nedeni, kötü niyetli girdinin çıktıya girebileceği uygunsuz kullanıcı girdi doğrulamasıdır. Kötü niyetli bir kullanıcı, web sitesinin koduna enjekte edilecek bir komut dosyası girebilir. Bu durumda tarayıcı, yürütülen kodun kötü amaçlı olup olmadığını bilemez.
Bu nedenle, kurbanın tarayıcısında kötü amaçlı komut dosyası yürütülüyor veya kullanıcılara sahte herhangi bir form görüntüleniyor. XSS saldırısının gerçekleşebileceği çeşitli biçimler vardır.
Siteler Arası Komut Dosyası ana biçimleri aşağıdaki gibidir:
- Siteler Arası Komut Dosyası, istemci tarafında çalıştırılan kötü amaçlı komut dosyası üzerinde gerçekleşebilir.
- Kullanıcıya gösterilen sahte sayfa veya form (mağdurun kimlik bilgilerini yazdığı veya kötü niyetli bir bağlantıyı tıkladığı).
- Reklamların görüntülendiği web sitelerinde.
- Kurbana gönderilen kötü amaçlı e-postalar.
Bu saldırı, kötü niyetli kullanıcı web sitesinin savunmasız kısımlarını bulup uygun kötü niyetli girdi olarak gönderdiğinde gerçekleşir. Kötü amaçlı komut dosyası koda enjekte ediliyor ve ardından çıktı olarak son kullanıcıya gönderiliyor.
Basit bir Örneği inceleyelim: Arama alanı olan bir web sitemiz olduğunu düşünün.
Arama alanı savunmasızsa, kullanıcı herhangi bir komut dizisine girdiğinde çalıştırılacaktır.
Bir kullanıcının aşağıda gösterildiği gibi çok basit bir komut dosyası girdiğini düşünün:
alert(‘XSS’)
Sonra tıkladıktan sonra 'Arama' düğmesi, girilen komut dosyası çalıştırılacaktır.
Gördüğümüz gibi Misal ,arama alanına yazılan komut dosyası çalıştırılır. Bu sadece XSS saldırısının güvenlik açığını gösterir. Ancak daha zararlı bir betik de yazılabilir.
Birçok test kullanıcısı Siteler Arası Komut Dosyası saldırısını Javascript Enjeksiyonu müşteri tarafında da gerçekleştiriliyor. Her ikisinde de saldırılar kötü niyetli komut dosyası enjekte ediliyor. Ancak, XSS saldırı durumunda, betiği çalıştırmak için etiketlere gerek yoktur.
Örneğin :
;
Ayrıca, diğer olayda çalıştırılan bir komut dosyası olabilir.
Örneğin:Fareyle üzerine gelindiğinde.
Başka bir Örneği inceleyelim:Bir düşünün, en son kitap incelemesinin web sitesinde görüntülendiği bir sayfamız var.
Bu sayfanın kodu aşağıda gösterildiği gibi görünecektir:
print '' print '. If this vulnerability is present in the web application, an indicated text will be inserted intags. Trying to pass some code through HTTP request as this is also a method to check if this attack is possible.
Generally, while testing for possible XSS attack, input validation should be checked and the tester should be conscious while checking the website’s output. Also if a code review is being performed, it is important to find how input can get into the output.
XSS Testing Tools
As Cross Site Scripting attack is one of the most popular risky attacks, there are a plenty of tools to test it automatically. We can find various scanners to check for possible XSS attack vulnerabilities – like, Nesus and Nikto. Both of which are considered as quite reliable.
From my software testing career, I would like to mention SOAP UI tool. SOAP UI can be considered as a quite strong tool for checking against the possible XSS attacks. It contains ready templates for checking against this attack. It really simplifies the testing process.
However, in order to test for this vulnerability with SOAP UI tool, API level testing should already be automated with that tool. Another solution to test against XSS can be browser plugins. However, plugins are considered as quite a weak tool to check against this type of attack.
Even while testing automatically, the tester should have good knowledge of this attack type and should be able to analyze the results appropriately.
Good knowledge is also helpful while selecting the testing tool. Also, it is important to know, that while performing scanning for security vulnerabilities with an automatic tool, testing manually is also a good practice and this way the tester will be able to see the results and analyze them.
Recommended Tool:
#1) Kiuwan
Find and fix vulnerabilities in your code at every stage of the SDLC.
Kiuwan is compliant with the most stringent security standards including OWASP, CWE, SANS 25, HIPPA, and more. Integrate Kiuwan in your IDE for instant feedback during development.
Kiuwan supports all major programming languages and integrates with leading DevOps tools.
=> Scan your code for free
Comparison with Other Attacks
XSS is considered to be one of the riskiest attacks, as its main purpose is to steal the website’s or system’s user identities. Also, XSS attack can be performed with different client-side languages like Javascript, HTML, VBScript, Flash, etc. And this makes it more harmful and widespread than the other possible attacks.
Testing for XSS attack is quite similar to testing for the other possible client-side attacks. However, it is important to remember what additional cases should be checked while testing for XSS.
Another thing, that makes this attack riskier is the possibility to be stored in the web service – this way it can affect many users for a longer period of time. XSS sometimes can be performed to even less vulnerable systems and its vulnerabilities are sometimes difficult to be found.
Also, while comparing with the other attacks, XSS has many ways to be performed and affect the website as well.
Ways to Prevent XSS
Though this type of attack is considered to be one of the most dangerous and risky one, still a preventing plan should be prepared. Because of the popularity of this attack, there are quite many ways to prevent it.
Commonly used main prevention methods include:
- Data validation
- Filtering
- Escaping
The first step in the prevention of this attack is Input validation . Everything, that is entered by the user should be precisely validated, because the user’s input may find its way to the output. Data validation can be named as the basis for ensuring the system’s security. I would remind, that the idea of validation is not to allow inappropriate input.
Therefore it just helps to reduce the risks, but may not be enough to prevent the possible XSS vulnerability.
Another good prevention method is user’s input filtering. The idea of the filtering is to search for risky keywords in the user’s input and remove them or replace them by empty strings.
Those keywords may be:
- tags
- Javascript commands
- HTML markup
Input filtering is quite easy to practice. It can be performed in different ways too.
Like:
- By developers who have written server-side code.
- Appropriate programming language’s library is being used.
In this case, some developers write their own code to search for appropriate keywords and remove them. However, the easier way would be to select appropriate programming languages library to filter the user’s input. I would like to comment, that using libraries is a more reliable way, as those libraries were used and tested by many developers.
Another possible prevention method is characters escaping . In this practice, appropriate characters are being changed by special codes. For Example, Meanwhile, good testing should not be forgotten as well. It should be invested in good software testers knowledge and reliable software testing tools. This way good software quality will be better assured.
Prevention According to Technologies
As already discussed, filtering and characters escaping are the main prevention methods. However, it can be performed differently in different programming languages. Some programming languages have appropriate filtering libraries and some do not.
It should be mentioned, that filtering can be performed quite easily in Java and PHP programming languages, as they have appropriate libraries for it.
Java technology is quite widely used, therefore there are many solutions to it. If you are using Spring technology and if you would like to escape HTML for the whole application, then you have to write the appropriate code in the project’s web.xml file.
defaultHtmlEscape true
Bu kod, uygulamanın tamamı için HTML çıkışını değiştirir.
Uygun sayfanın formları için HTML çıkışını değiştirmek isterseniz, kod aşağıdaki gibi yazılmalıdır:
.Jar dosyası biçiminde birçok hazır XSS filtresi vardır. .Jar dosyasının projenize eklenmesi gerektiğini ve ancak o zaman kütüphanelerinin kullanılabileceğini hatırlatırım. Böyle bir XSS filtresi, bir sunucu uygulaması filtresi olan xssflt.jar'dır. Bu .jar dosyası internetten kolayca indirilebilir ve projenize eklenebilir.
Bu filtre, uygulamaya gönderilen her isteği kontrol eder ve olası bir enjeksiyondan temizler.
youtube'dan mp3'e 30 dakikadan uzun
Projeye bir external.jar dosyası eklendiğinde, bunun web.xml dosyasında da açıklanması gerekir:
XSSFilter com.cj.xss.XSSFilter
Başka bir olası çözüm ESAPI kitaplığıdır. ESAPI kitaplığı birçok programlama diliyle uyumludur. Java ve PHP programlama dilleri için ESAPI kitaplıklarını bulabilirsiniz. Uygulamanın güvenliğini kontrol etmeye yardımcı olan açık kaynak ve ücretsiz bir kitaplıktır.
XSS Hile Sayfaları
XSS Hile Sayfaları, siteler arası komut dosyası oluşturmayı önlemede çok yardımcı olabilir. Geliştiriciler için XSS saldırılarının nasıl önleneceği konusunda bir kılavuzdur. Kurallar çok faydalıdır ve geliştirilirken unutulmamalıdır. XSS Hile Sayfaları, OWASP (Açık Web Uygulaması Güvenlik Projesi) gibi internet topluluklarında bulunabilir.
Farklı Hile Sayfaları:
- XSS Önleme Hile Sayfası
- DOM XSS Hile Sayfası
- XSS Filtresinden Kaçınma Hile Sayfası
Ana kılavuz, XSS saldırı önleme için ortak kurallar sağladığından, XSS Önleme Hile Sayfası olacaktır. DOM XSS Hile Sayfası ve XSS Filtresi Kaçınma Hile Sayfası kurallarına uyacaksanız, yine de XSS Önleme Hile Sayfasına uymanız gerekir.
Belirtildiği gibi, XSS Önleme Hile Sayfası OWASP topluluğunda bulunabilir. Bu Hile Sayfası bize olası XSS saldırılarının risklerini azaltmamıza yardımcı olacak bir kurallar listesi sağlar. Bu sadece kodlama kuralları değil, aynı zamanda önleme bazındaki güvenlik açıklarıdır.
Kurallardan birkaçı şunları içerir:
- Güvenilmeyen veriler eklenmemelidir.
- Güvenilmeyen veriler eklenmeden önce HTML öncelenmelidir.
- Güvenilmeyen veriler vb. Eklenmeden önce öznitelikten kaçılmalıdır.
Bu nedenle, Cheat Sheet bu tür saldırıları önlemede çok yardımcı olabilir.
Sonuç
Test ederken, olası XSS saldırılarını getiren risklerin değerlendirilmesi şiddetle tavsiye edilir. XSS saldırısı, güvenli görünen web uygulamalarını da etkileyebilir.
En zararlı ve riskli saldırılardan biri olarak kabul edilir. Dolayısıyla bu tür testleri unutmamalıyız. XSS'ye karşı test yaparken, bu saldırı hakkında iyi bir bilgiye sahip olmak önemlidir. Ve bu, test sonuçlarını doğru bir şekilde analiz etmenin ve uygun test araçlarını seçmenin temelidir.
Siteler arası komut dosyası çalıştırma XSS saldırılarıyla ilgilenen bir test kullanıcısı mısınız? Okuyucularımıza da yardımcı olacak XSS saldırıları hakkında ilginç gerçekleriniz var mı? Aşağıdaki yorumlar bölümünde deneyimlerinizi bizimle paylaşmaktan çekinmeyin !!
Önerilen Kaynaklar
- Yeni Başlayanlar İçin Derinlemesine Eclipse Eğiticileri
- HTML Enjeksiyon Eğitimi: Örneklerle Türler ve Önleme
- SQL Injection Testing Tutorial (SQL Injection Attack Örneği ve Önlenmesi)
- DDoS Saldırısı Nedir ve DDoS Nasıl Yapılır?
- Selenium Grid Eğitimi: Çapraz Tarayıcı Testinin Kurulumu ve Örneği
- Örneklerle Java Yansıtma Eğitimi
- SVN Eğitimi: Subversion Kullanarak Kaynak Kodu Yönetimi
- Örneklerle Python DateTime Eğitimi