XSS Test Cases Preperation

5 months ago 37
BOOK THIS SPACE FOR AD
ARTICLE AD
Yukarıdaki kurulumları gerçekleştirdikten sonra php ve mysql kurulumu da yapmanız gerekiyor.sudo apt install php
sudo apt install mysql
sudo apt install php-mysqli

1.1 Reflected XSS via Get Request

<!DOCTYPE html>
<html>
<head>
<title>Reflected XSS - GET Request</title>
</head>
<body>
<h1>Search Page</h1>
<form method="get" action="reflected-xss-get.php">
<label for="q">Search:</label>
<input type="text" id="q" name="q">
<button type="submit">Search</button>
</form>

<?php
if (isset($_GET['q'])) {
$q = $_GET['q'];
echo "<p>You searched for: " . $q . "</p>";
}
?>
</body>
</html>

Burada input olarak GET request ile girdiğimiz değerin response olarak bize yansıdığını fark ediyoruz. Girdiğimiz verileri sadece URL üzerinden kurbana gönderebiliriz.

Payload — <script>alert(‘xss’)</script>

1.2 Reflected XSS via Post Request

<!DOCTYPE html>
<html>
<head>
<title>Reflected XSS - POST Request</title>
</head>
<body>
<h1>Login Page</h1>
<form method="post" action="reflected-xss-post.php">
<label for="username">Username:</label>
<input type="text" id="username" name="username">
<br>
<label for="password">Password:</label>
<input type="password" id="password" name="password">
<br>
<button type="submit">Login</button>
</form>

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['username'])) {
$username = $_POST['username'];
echo "<p>Welcome, " . $username . "!</p>";
}
?>
</body>
</html>

Burada direk URL üzerinden bir gönderim olmamakla beraber dolaylı olarak buradaki post isteğini tetikletmemiz gerekiyor.

Payload — <script>alert(‘xss’)</script>

1.3 Reflected XSS via Request Header

<!DOCTYPE html>
<html>
<head>
<title>Reflected XSS - HTTP Header</title>
</head>
<body>
<h1>Referer Header Example</h1>

<?php
if (isset($_SERVER['HTTP_REFERER'])) {
$referer = $_SERVER['HTTP_REFERER'];
echo "<p>You came from: " . $referer . "</p>";
}
?>
</body>
</html>

Bu örneği tespit edebilmemiz için herhangi bir header bilgisinin dönen response a eklenip eklenmediğini gözlemlememiz gerekir. Tespit ettiğimiz anda reflected olan header üzerinde payload çalıştırmaya çalışırız.

Payload — <script>alert(‘xss’)</script>

Bu caselerin çalışabilmesi için database üzerinde gerekli tabloları oluşturmanız gerek.

2.1 Stored XSS via Get Request

<!-- Yorum ekleme formu -->
<h2>Yorum Ekle</h2>
<form method="get" action="">
<input type="text" name="yorum" placeholder="Yorumunuzu yazın">
<input type="submit" value="Gönder">
</form>

<!-- Yorumları silme formu -->
<h2>Yorumları Sil</h2>
<form method="post" action="">
<input type="hidden" name="sil" value="1">
<input type="submit" value="Tüm Yorumları Sil">
</form>

<?php
// PHP hata ayıklama modunu etkinleştirme
ini_set('display_errors', 1);
error_reporting(E_ALL);

// Veritabanı bağlantısı
$servername = ""; //bu kısımları kendiniz doldurmanız gerekiyor
$username = ""; //db bilgileri
$password = ""; //db bilgileri
$dbname = ""; //db bilgileri

// Bağlantıyı oluştur
$conn = new mysqli($servername, $username, $password, $dbname);

// Bağlantıyı kontrol et
if ($conn->connect_error) {
die("Bağlantı hatası: " . $conn->connect_error);
}

// GET isteğinden veri al ve veritabanına ekle
if (isset($_GET['yorum'])) {
$yorum = $_GET['yorum']; // XSS saldırılarına karşı hiçbir önlem alınmamış

// Veritabanına yorum ekle
$sql = "INSERT INTO comments (comment) VALUES ('$yorum')";

if ($conn->query($sql) === TRUE) {
echo "Yorum başarıyla kaydedildi!";
} else {
echo "Hata: " . $sql . "<br>" . $conn->error;
}
}

// POST isteğinden veri al ve yorumları sil
if (isset($_POST['sil']) && $_POST['sil'] == 1) {
$sql = "DELETE FROM comments";

if ($conn->query($sql) === TRUE) {
echo " -- Tüm yorumlar silindi! -- ";
} else {
echo "Hata: " . $sql . "<br>" . $conn->error;
}
}

// Kaydedilen yorumları getir ve göster
$sql = "SELECT comment FROM comments";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
echo "<h2>Kullanıcı Yorumları</h2>";
while($row = $result->fetch_assoc()) {
echo "<p>" . $row['comment'] . "</p>"; // XSS saldırılarına karşı hiçbir önlem alınmamış
}
} else {
echo "Henüz yorum yok.";
}

// Bağlantıyı kapat
$conn->close();
?>

Payload — <script>alert(‘xss’)</script>

2.2 Stored XSS via Post Request

<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>Yorum Ekleme</title>
</head>
<body>
<!-- Yorum ekleme formu -->
<h2>Yorum Ekle</h2>
<form method="post" action="">
<input type="text" name="yorum" placeholder="Yorumunuzu yazın" required>
<input type="submit" value="Gönder">
</form>

<!-- Tüm yorumları silme formu -->
<h2>Tüm Yorumları Sil</h2>
<form method="post" action="">
<input type="hidden" name="delete_all" value="1">
<input type="submit" value="Tüm Yorumları Sil">
</form>

<?php
// PHP hata ayıklama modunu etkinleştirme
ini_set('display_errors', 1);
error_reporting(E_ALL);

// Veritabanı bağlantısı
$servername = ""; //bu kısımları kendiniz doldurmanız gerekiyor
$username = ""; //db bilgileri
$password = ""; //db bilgileri
$dbname = ""; //db bilgileri

// Bağlantıyı oluştur
$conn = new mysqli($servername, $username, $password, $dbname);

// Bağlantıyı kontrol et
if ($conn->connect_error) {
die("Bağlantı hatası: " . $conn->connect_error);
}

// POST isteğinden veri al
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Yorum ekleme işlemi
if (isset($_POST['yorum'])) {
$yorum = $_POST['yorum']; // Burada XSS ve SQL Injection açıkları var

// Veritabanına yorum ekle
$sql = "INSERT INTO comments (comment) VALUES ('$yorum')";
if ($conn->query($sql) === TRUE) {
echo "Yorum başarıyla kaydedildi!";
} else {
echo "Hata: " . $sql . "<br>" . $conn->error;
}
}

// Tüm yorumları silme işlemi
if (isset($_POST['delete_all']) && $_POST['delete_all'] == 1) {
$sql = "DELETE FROM comments";
if ($conn->query($sql) === TRUE) {
echo "Tüm yorumlar silindi!";
} else {
echo "Hata: " . $sql . "<br>" . $conn->error;
}
}
}

// Kaydedilen yorumları getir ve göster
$sql = "SELECT comment FROM comments";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
echo "<h2>Kullanıcı Yorumları</h2>";
while($row = $result->fetch_assoc()) {
echo "<p>" . $row['comment'] . "</p>"; // Burada XSS açığı var
}
} else {
echo "Henüz yorum yok.";
}

// Bağlantıyı kapat
$conn->close();
?>
</body>
</html>

Payload — <script>alert(‘xss’)</script>

2.3 Stored XSS via Request Header

<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<title>User-Agent Kaydetme ve Gösterme</title>
</head>
<body>
<h2>User-Agent Başlığını Kaydet</h2>
<form method="post" action="">
<input type="submit" name="kaydet" value="User-Agent Kaydet">
</form>

<h2>Tüm User-Agent Verilerini Sil</h2>
<form method="post" action="">
<input type="hidden" name="delete_all" value="1">
<input type="submit" value="Tüm User-Agent Verilerini Sil">
</form>

<h2>Kaydedilen User-Agent Başlıkları</h2>
<?php
// PHP hata ayıklama modunu etkinleştirme
ini_set('display_errors', 1);
error_reporting(E_ALL);

// Veritabanı bağlantısı
$servername = ""; //bu kısımları kendiniz doldurmanız gerekiyor
$username = ""; //db bilgileri
$password = ""; //db bilgileri
$dbname = ""; //db bilgileri

// Bağlantıyı oluştur
$conn = new mysqli($servername, $username, $password, $dbname);

// Bağlantıyı kontrol et
if ($conn->connect_error) {
die("Bağlantı hatası: " . $conn->connect_error);
}

// POST isteği kontrolü
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// User-Agent kaydetme işlemi
if (isset($_POST['kaydet'])) {
// User-Agent başlığını al
$userAgent = $_SERVER['HTTP_USER_AGENT']; // Güvenlik açığı var, kaçış işlemi yapılmıyor

// Veritabanına kaydet
$sql = "INSERT INTO user_agents (user_agent) VALUES ('$userAgent')";
if ($conn->query($sql) === TRUE) {
echo "User-Agent kaydedildi!";
} else {
echo "Hata: " . $sql . "<br>" . $conn->error;
}
}

// Tüm User-Agent verilerini silme işlemi
if (isset($_POST['delete_all']) && $_POST['delete_all'] == 1) {
$sql = "DELETE FROM user_agents";
if ($conn->query($sql) === TRUE) {
echo "Tüm User-Agent verileri silindi!";
} else {
echo "Hata: " . $sql . "<br>" . $conn->error;
}
}
}

// Kaydedilen User-Agent başlıklarını getir ve göster
$sql = "SELECT user_agent FROM user_agents";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "<p>" . $row['user_agent'] . "</p>"; // Güvenlik açığı var, kaçış işlemi yapılmıyor
}
} else {
echo "Henüz User-Agent kaydı yok.";
}

// Bağlantıyı kapat
$conn->close();
?>
</body>
</html>

Payload — <script>alert(‘xss’)</script>

DOM (Document Object Model)

3.1 DOM-Based XSS via Get Request

<!DOCTYPE html>
<html>
<head>
<title>DOM XSS - GET Parametresi</title>
</head>
<body>
<h1>DOM XSS Örneği - GET Parametresi</h1>
<p id="output"></p>

<script>
// URL'den `param` değerini al
var params = new URLSearchParams(window.location.search);
var paramValue = params.get('param');

document.getElementById('output').innerHTML = "Girdiğiniz değer: " + paramValue;

</script>
</body>
</html>

Payload — <img src=x onerror=alert(‘xss’)>

3.2 DOM-Based XSS via Post Request

<!DOCTYPE html>
<html>
<head>
<title>DOM XSS - POST Parametresi</title>
</head>
<body>
<h1>DOM XSS Örneği - POST Parametresi</h1>
<form id="commentForm">
<input type="text" name="data" id="dataInput" placeholder="Bir şeyler yazın">
<input type="submit" value="Gönder">
</form>

<div id="output"></div>

<script>
// Form gönderildikten sonra JavaScript tarafından veri işleniyor
document.getElementById('commentForm').addEventListener('submit', function(event) {
event.preventDefault(); // Sayfanın yeniden yüklenmesini engelle
var inputData = document.getElementById('dataInput').value;
// Girdi doğrudan DOM'a ekleniyor ve çalıştırılıyor
document.getElementById('output').innerHTML = "Girdiğiniz değer: " + inputData;

// Değeri JavaScript olarak çalıştır
if (inputData) {
var script = document.createElement('script');
script.textContent = inputData;
document.body.appendChild(script);
}
});
</script>
</body>
</html>

Payload — <img src=x onerror=alert(‘xss’)>

3.3 DOM-Based XSS via Request Header

<?php
// PHP hata ayıklama modunu etkinleştirme
ini_set('display_errors', 1);
error_reporting(E_ALL);

// User-Agent bilgisi alınıyor
$userAgent = $_SERVER['HTTP_USER_AGENT'];
?>

<!DOCTYPE html>
<html>
<head>
<title>DOM XSS - User-Agent Header</title>
</head>
<body>
<h1>DOM XSS Örneği - User-Agent Header</h1>
<p id="output"></p>

<script>
// PHP'den gelen User-Agent bilgisi
var userAgent = "<?php echo $userAgent; ?>";

// User-Agent bilgisi DOM'a ekleniyor
document.getElementById('output').innerHTML = "User-Agent: " + userAgent;

</script>
</body>
</html>

Payload — <img src=x onerror=alert(‘xss’)>

Read Entire Article