TR | EN
:::    ::: :::   :::  ::::::::  :::::::::: :::::::::::     :::     
:+:    :+: :+:   :+: :+:    :+: :+:            :+:       :+: :+:   
+:+    +:+  +:+ +:+  +:+        +:+            +:+      +:+   +:+  
+#++:++#++   +#++:   :#:        +#++:++#       +#+     +#++:++#++: 
+#+    +#+    +#+    +#+   +#+# +#+            +#+     +#+     +#+ 
#+#    #+#    #+#    #+#    #+# #+#            #+#     #+#     #+# 
###    ###    ###     ########  ########## ########### ###     ### 
            

HYGEIA

Vulnerable Web Application
project_details.exe
- ×

HYGEIA, alıştırma yapmak için tasarlanmış bir zafiyetli web uygulamasıdır. OWASP TOP 10 2017 ve 2021'deki güvenlik açıklarından bazılarını içerir. Diğer zafiyetli makinelerin aksine, sadece "flag" elde etmek yerine, güvenlik açıklarının bulunarak bir pentest raporu hazırlanması amacıyla hazırlanmıştır. Projede, back-end için SpringBoot , front-end için Thymeleaf ve veritabanı için PostgreSQL kullanılmıştır. Bu projeyi iki kişi hazırlamıştır.

Uygulamada farklı 14 , toplam 17 güvenlik zafiyeti bulunmaktadır.

Örnek - SQL Injection

Uygulama üzerinde iki SQL injection zafiyeti bulunmaktadır. Biri "Kullanıcı Bilgileri" alanında bulunmaktayken diğeri "Parola Sıfırlama" ekranında bulunmaktadır. İlk örneğimizin bulunduğu "Kullanıcı Bilgileri" ekranı aşağıdaki gibi görünmektedir;

Kullanıcı Bilgileri Ekranı

Kullanıcının sitedeki bu bilgi formunu görüntülemek için gönderdiği isteği inceleyelim;

HTTP İsteği

Uygulama back-end'e gönderilen parametreyi aşağıdaki kod parçacığına yerleştirmektedir.

Kod Parçacığı

Verilen kod parçacığını incelersek, sorgunun istekte gönderilen "username" parametresini alarak "users" tablosundan e-posta, adres, telefon numarası gibi çeşitli bilgileri çektiğini görebiliriz. Bu sorgudaki temel sorun, "username" parametresinin herhangi bir filtreleme işleminden geçmeden doğrudan sorguya eklenmesinden kaynaklanmaktadır. Bu durumda, bir kullanıcı proxy kullanarak sorguya müdahale eder ve verilen "username" girdisini 'SaadetElif';SELECT PG_SLEEP(5)-- olarak değiştirirse, back-end'de yürütülen sorgunun son şekli aşağıdaki gibi olacaktır;

SQL Query
SELECT email, address, phone_number FROM users WHERE username = 'SaadetElif';SELECT PG_SLEEP(5)—-';
SQL Injection Payload
Response Time
Burp Suite Response

Bu, back-end'in enjekte edilen SQL komutunu (SELECT PG_SLEEP(5)) sorguyla birlikte çalıştırmasına ve yanıt vermeden önce 5 saniyelik bir gecikmesine neden olur.

SQLi zafiyetini bu şekilde kesinleştirdikten sonra veri tabanı içeriğini SQLmap aracını kullanarak ele geçirebiliriz.

SQLmap Kullanımı
SQLmap Sonuçları