Selam Ben Anka Team Junior'dan Rapx13
XSS öğrendiğim serinin 3. bölümü ile tekrardan sizlerleyim iyi okumalar.
3. adım Reflective (yansıtılan) XSS'i derinlemesine öğreniyoruz
Yansıtılan XSS : kötü amaçlı bir komut dosyasının, genellikle hazırlanmış bir url veya form gönderimi yoluyla kullanıcının tarayıcısına yansıtıldığı bir tür XSS güvenlik açığıdır.
yani anlıyıcağınız çerezleri çalmak için bu yöntem kullanılabilir ancak xss açığı olan bir site lazım
aşşağıya xss açığı bulunan kod dizeleri bırakıcağım.
PHP:
| <?php $search_query = $_GET['q']; echo "<p>You searched for: $search_query</p>"; ?> |
güvenlik açığı, sonuç sayfasında temizleme yapılmadan görüntülenen arama değerinden kaynaklanmaktadır (dünkü konuda bahsettim). Bu nedenle, bir saldırgan yürütüleceğini bilerek URL'ye kötü amaçlı bir komut dosyası ekleyebilir. Örneğin, bir kavram kanıtı olarak, aşağıdaki URL test edilebilir: ve site savunmasızsa, kullanıcının çerezini gösteren bir uyarı kutusu görünecektir. http://shop.thm/search.php?q=<script>alert(document.cookie)</script>
açığı düzeltmek için
| <?php $search_query = $_GET['q']; $escaped_search_query = htmlspecialchars($search_query); echo "<p>You searched for: $escaped_search_query</p>"; ?> |
anlıyıcağınız üzere htmlspecialchars parametresini ekledik bu da özel karakterleri uygulamanın işlemesine yarıyor .
Java Script (Node.js)
Java Script (Node.js)
açık bulunan kod |
[COLOR=rgb(255, 255, 255)][SIZE=5]const express = require('express');[/SIZE][/COLOR]const app = express();app.get('/search', function(req, res) { var searchTerm = req.query.q; res.send('You searched for: ' + searchTerm);});[COLOR=rgb(255, 255, 255)][SIZE=5][B]app.listen(80);[/B][/SIZE][/COLOR] yukarıdaki kod parçacığı Node.js için popüler bir web uygulaması çerçevesi olan Express'i kullanır. değerini çıkaracaktır. Örneğin, in , değerine sahiptir. Son olarak, kullanıcı tarafından sağlanan arama teriminin sonuna "Arandınız:" ifadesini ekliyerek yanıt oluşturuyormuş
Değer kullanıcıdan alındığından ve temizleme veya kaçış olmadan yanıt HTML'sine eklendiğinden, kötü amaçlı bir sorgu eklemek kolaydır. Kavram kanıtı olarak, aşağıdaki URL'yi test edebiliriz: ve site savunmasızsa, kullanıcının çerezini gösteren bir uyarı kutusu görünecektir.
Değer kullanıcıdan alındığından ve temizleme veya kaçış olmadan yanıt HTML'sine eklendiğinden, kötü amaçlı bir sorgu eklemek kolaydır. Kavram kanıtı olarak, aşağıdaki URL'yi test edebiliriz: ve site savunmasızsa, kullanıcının çerezini gösteren bir uyarı kutusu görünecektir.
http://shop.thm/search?q=<script>alert(document.cookie)</script> |
Açık bulunan kodun doğrusu |
const express = require('express');[B]const sanitizeHtml = require('sanitize-html');[/B][B][/B][B]const app = express();[/B][B][/B][B]app.get('/search', function(req, res) {[/B][B] const searchTerm = req.query.q;[/B][B] const sanitizedSearchTerm = sanitizeHtml(searchTerm);[/B][B] res.send('You searched for: ' + sanitizedSearchTerm);[/B][B]});[/B][B][/B]app.listen(80);Çözüm, kütüphaneden kullanılarak elde edilir. Bu işlev, güvenli olmayan öğeleri ve öznitelikleri kaldırır. Bu, kötü amaçlarla kullanılabilecek diğer öğelerin yanı sıra komut dosyası etiketlerinin kaldırılmasını içerir.
java scriptte yukarıdaki kodu açıksız hale getiren şey escapeHtml() parametresidir. Bu parametre özel karakterleri HTML varlıklarıyla değiştirir.
gelelim pythona
PYTHON:
Güvenlik Açığı Bulunan Kod |
[SIZE=5][COLOR=rgb(255, 255, 255)]from flask import Flask, request[/COLOR][/SIZE]app = Flask(__name__)@app.route("/search")def home(): query = request.args.get("q") return f"You searched for: {query}!"if __name__ == "__main__":[SIZE=5][COLOR=rgb(255, 255, 255)][B] app.run(debug=True)[/B][/COLOR][/SIZE] istek URL'sinden sorgu dizesi parametrelerine erişmek için kullanılır. Aslında, sözlük benzeri bir nesnedeki tüm sorgu dizesi parametrelerini içerir. Örneğin, in , değerine sahiptir.
request.args.get() | request.args | request.args.get("q") | table |
Değer kullanıcıdan alındığından ve temizleme veya kaçış olmadan yanıt HTML'sine eklendiğinden, kötü amaçlı bir sorgu eklemek kolaydır. Kavram kanıtı olarak, aşağıdaki URL'yi test edebiliriz: ve site savunmasızsa, kullanıcının çerezini gösteren bir uyarı kutusu görünecektir.
http://shop.thm/search?q=<script>alert(document.cookie)</script> |
Açık olan kodu düzeltmek için ise şu kodu yazıcağız.
from flask import Flask, request[B]from html import escape[/B][B][/B][B]app = Flask(__name__)[/B][B][/B][B]@app.route("/search")[/B][B]def home():[/B][B] query = request.args.get("q")[/B][B] escaped_query = escape(query)[/B][B] return f"You searched for: {escaped_query}!"[/B][B][/B][B]if __name__ == "__main__":[/B] app.run(debug=True)Ana değişiklik, kullanıcı girişinin artık modüldeki işlev kullanılarak kaçış olmasıdır. Flask'taki işlevin aslında için bir diğer ad olduğunu unutmayın. Her ikisi de Werkzeug kütüphanesinden geliyor ve aynı amaca hizmet ediyor: dizelerdeki güvenli olmayan karakterlerden kaçmak. Bu işlev, , , gibi karakterleri HTML kaçışlı varlıklara dönüştürerek kullanıcının eklediği kötü amaçlı kodları devre dışı bırakmaktaymış
BİTTİ
UYARI: BU KONU DAHA ÇOK BENİM İÇİN ÖĞRENMEK GİBİ OLDU AMAÇ BURDA ZATEN ÖĞRENMEK GİDİP 3 AÇIKLI KOD YAZIP SONRA BUNU DÜZELTEMEM Kİ TÜRKİYEDE BEN TAMAMEN 3 DİLİDE BİLEN BİRİNİN ÇOK OLUCAĞINI ZANNETMİYORUM KOPYALA YAPIŞTIR YAPTIM AMA KODLARI YAPTIM O YÜZDEN SADECE OKUYUN Kİ BU ÇOKTA ALT SEVİYE BİR BİLGİ DEĞİL NASIL DÜZELTİLİCEĞİNİ ANLATIYORUM.
İyi Forumlar Dilerim
GÜN 4
BİTTİ
UYARI: BU KONU DAHA ÇOK BENİM İÇİN ÖĞRENMEK GİBİ OLDU AMAÇ BURDA ZATEN ÖĞRENMEK GİDİP 3 AÇIKLI KOD YAZIP SONRA BUNU DÜZELTEMEM Kİ TÜRKİYEDE BEN TAMAMEN 3 DİLİDE BİLEN BİRİNİN ÇOK OLUCAĞINI ZANNETMİYORUM KOPYALA YAPIŞTIR YAPTIM AMA KODLARI YAPTIM O YÜZDEN SADECE OKUYUN Kİ BU ÇOKTA ALT SEVİYE BİR BİLGİ DEĞİL NASIL DÜZELTİLİCEĞİNİ ANLATIYORUM.
İyi Forumlar Dilerim
GÜN 4
Son düzenleme:
