Okan Köse tarafından yazılmıştır.
Cross site scripting
Web for Pentester, PentesterLab tarafından Web Pentesting uygulaması için hazırlanmış bir Sanal Makine ISO’dur.
Web uygulamasında bulunan zafiyetler;
Bu yazıda XSS güvenlik açıklarına bakacağız. PentesterLab – Web For Pentester’ı https://pentesterlab.com/exercises/web_for_pentester/course bağlantısını kullanarak indirip kurabilirsiniz.
Cross site scripting
İlk örnekte URL’de ki name parametresinin aldığı değeri ekrana bastırdığını görüyoruz, bunu PwnLabMe olarak değiştirelim.
Cross site scripting
Herhangi bir javascript kodunu çalıştıralım.
Payload: <script>alert(“PwnLabMe”)</script>
Cross site scripting
Herhangi bir filtre mekanizması olmadığından basit script çalıştı.
Cross site scripting
Cross site scripting
Bir önceki örnekte kullandığımız payloadı burada denediğimizde <script> </script> taglarının silindiğini ve kalan değerin ekrana yansıdığını görüyoruz. Kullandığımız <script> tag’ı filtrelenmiş, bu filtrelemeyi atlatmanın en temel yollarından biri taglar ile oynamaktır.
Tagımızı <SCRIPT> </SCRIPT> , <scRIPt> </scRIPt> gibi farklı kombinasyonlar ile deneyebilir veya
<svg onload=alert(“PwnLabMe”)> gibi farklı taglar da deneyebiliriz.
Cross site scripting
Büyük harfler filtrelenmediği için payloadımız çalıştı.
Payload: <SCRIPT>alert(“PwnLabMe”)</SCRIPT>
Cross site scripting
Sistem ilk gördüğü <script> , <SCRIPT> taglarını sildiği için iç içe script tagını deniyelim.
Payload: <sc<script>ript>alert(“PwnLabMe”)</sc</script>ript>
Cross site scripting
Cross site scripting
Payload: <svg onload=alert(“PwnLabMe”)>
Cross site scripting
Name parametresi yine ekrana yansıyor ve tekrar error ile karşılaştık.
Cross site scripting
Payloadımız da tagları,ifadeleri ve işaretleri sırası ile sildiğimizde alert fonksiyonunun engellendiğini görüyoruz. Alert fonksiyonu için kullanılabilecek bir diğer fonksiyon ise prompt dur.
Payload: <script>prompt(“PwnLabMe”)</script>
Cross site scripting
Cross site scripting
Mevcuz script tagını kapatıp payloadımızı yazıyoruz.
Payload: </script><script>alert(“PwnLabMe”)</script>
Cross site scripting
Bir diğer yöntem ise var $a= “PwnLabMe”; javascript etiketi içindeki $ a değişkeninden çift tırnak(“) ile kurtulmaktır.
Payload: “;alert(“PwnLabMe”);”
Cross site scripting
Cross site scripting
Payload: ‘;alert(‘PwnLabMe’);’
Cross site scripting
Burada işler biraz değişiyor, artık URL üzerinde bir parametreye değer girmiyoruz.
Cross site scripting
Basit bir payload denediğimizde encode edildiğini ve çalışmadığını görüyoruz.
Cross site scripting
Kaynağı incelediğimizde girdiğimiz değerin /xss/example8.php bağlantısına post edildiğini görüyoruz.
Bu durumda <form> tagının içinde script çalıştırmayı deniyelim. Bunun için girdiğimiz değerde bu dizini sonlandırıp parametresini kapatmamız ve son olarak da tagı kapatıp payloadımızı yazmamız gerekiyor.
Payload: /”><script>alert(“PwnLabMe”)</script>
Cross site scripting
Bu bölümde dom xss bulunmaktadır. # ifadesinden sonra alınan kısım ekrana bastırılmıştır.
Cross site scripting
Payloadımızı # işaretinden sonra ekliyoruz ve sayfayı yeniliyoruz.
Payload: <scipt>alert(“PwnLabMe”)</script>
NOT: Modern tarayıcılarda çalışmayabilir bu yüzden eski sürümlerde test edebiliriniz. Windows xp’deki internet explorers da çalışır.
[TR] [PentesterLab] Web For Pentester – XSS
Cross site scripting
Web for Pentester, PentesterLab tarafından Web Pentesting uygulaması için hazırlanmış bir Sanal Makine ISO’dur.
Web uygulamasında bulunan zafiyetler;
- XSS
- SQL Injection
- Directory Traversal
- File Include
- Code Injection
- Command Injection
- File Upload
- LDAP
Bu yazıda XSS güvenlik açıklarına bakacağız. PentesterLab – Web For Pentester’ı https://pentesterlab.com/exercises/web_for_pentester/course bağlantısını kullanarak indirip kurabilirsiniz.
XSS 1. Örnek
Cross site scripting
İlk örnekte URL’de ki name parametresinin aldığı değeri ekrana bastırdığını görüyoruz, bunu PwnLabMe olarak değiştirelim.
Cross site scripting
Herhangi bir javascript kodunu çalıştıralım.
Payload: <script>alert(“PwnLabMe”)</script>
Cross site scripting
Herhangi bir filtre mekanizması olmadığından basit script çalıştı.
XSS 2.Örnek
Cross site scripting
- örneğimizde de name parametresi ekrana yansıdı.
Cross site scripting
Bir önceki örnekte kullandığımız payloadı burada denediğimizde <script> </script> taglarının silindiğini ve kalan değerin ekrana yansıdığını görüyoruz. Kullandığımız <script> tag’ı filtrelenmiş, bu filtrelemeyi atlatmanın en temel yollarından biri taglar ile oynamaktır.
Tagımızı <SCRIPT> </SCRIPT> , <scRIPt> </scRIPt> gibi farklı kombinasyonlar ile deneyebilir veya
<svg onload=alert(“PwnLabMe”)> gibi farklı taglar da deneyebiliriz.
Cross site scripting
Büyük harfler filtrelenmediği için payloadımız çalıştı.
Payload: <SCRIPT>alert(“PwnLabMe”)</SCRIPT>
XSS 3.Örnek
- örnekte de name parametresinin ekrana yansıyor fakat bir önceki örnekte kullandığımız büyük harfli tagımızın filtrelendiğini görüyoruz.
Cross site scripting
Sistem ilk gördüğü <script> , <SCRIPT> taglarını sildiği için iç içe script tagını deniyelim.
Payload: <sc<script>ript>alert(“PwnLabMe”)</sc</script>ript>
Cross site scripting
XSS 4.Örnek
- örnekte de name parametresinin ekrana yansıyor ama <script> tagını kullandığımızda “error” mesajı yansıyor yani <script> tagımız engellemiş , farklı bir tag kullanmamız gerekiyor.
Cross site scripting
- örnekte farklı kombinasyon olarak kullandığımız payloadımızı deniyelim.
Payload: <svg onload=alert(“PwnLabMe”)>
Cross site scripting
XSS 5.Örnek
Name parametresi yine ekrana yansıyor ve tekrar error ile karşılaştık.
Cross site scripting
Payloadımız da tagları,ifadeleri ve işaretleri sırası ile sildiğimizde alert fonksiyonunun engellendiğini görüyoruz. Alert fonksiyonu için kullanılabilecek bir diğer fonksiyon ise prompt dur.
Payload: <script>prompt(“PwnLabMe”)</script>
Cross site scripting
XSS 6.Örnek
- örneğimize baktığımızda name parametresi ekrana yansımıyor. Kaynağı incelediğimizde değerin mevcut script taglarının içinde bir değişkene atandığını görüyoruz.
Cross site scripting
Mevcuz script tagını kapatıp payloadımızı yazıyoruz.
Payload: </script><script>alert(“PwnLabMe”)</script>
Cross site scripting
Bir diğer yöntem ise var $a= “PwnLabMe”; javascript etiketi içindeki $ a değişkeninden çift tırnak(“) ile kurtulmaktır.
Payload: “;alert(“PwnLabMe”);”
Cross site scripting
XSS 7.Örnek
Cross site scripting
- Örnekte yapmış olduğumuz payloadı bu sefer tek tırnak(‘) ile yapıyoruz.
Payload: ‘;alert(‘PwnLabMe’);’
Cross site scripting
XSS 8.Örnek
Burada işler biraz değişiyor, artık URL üzerinde bir parametreye değer girmiyoruz.
Cross site scripting
Basit bir payload denediğimizde encode edildiğini ve çalışmadığını görüyoruz.
Cross site scripting
Kaynağı incelediğimizde girdiğimiz değerin /xss/example8.php bağlantısına post edildiğini görüyoruz.
Bu durumda <form> tagının içinde script çalıştırmayı deniyelim. Bunun için girdiğimiz değerde bu dizini sonlandırıp parametresini kapatmamız ve son olarak da tagı kapatıp payloadımızı yazmamız gerekiyor.
Payload: /”><script>alert(“PwnLabMe”)</script>
Cross site scripting
XSS 9.Örnek
Bu bölümde dom xss bulunmaktadır. # ifadesinden sonra alınan kısım ekrana bastırılmıştır.
Cross site scripting
Payloadımızı # işaretinden sonra ekliyoruz ve sayfayı yeniliyoruz.
Payload: <scipt>alert(“PwnLabMe”)</script>
NOT: Modern tarayıcılarda çalışmayabilir bu yüzden eski sürümlerde test edebiliriniz. Windows xp’deki internet explorers da çalışır.
Moderatör tarafında düzenlendi: