Hoşgeldin Misafir

Penetrasyon Testi Stajım

Hayrettin

4 Eyl 2024
138 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
Merhaba THS üyeleri bugün sizlere temmuz ayında Midyat Belediyesi'nde staj yaparken yapmış olduğum penetrasyon çalışmasını paylaşacağım. Stajın ilk günü bu çalışmayı yaptım. Öncelikle whoisi kullandım. Who kim anlamına gelir. Whois kimin anlamına gelir. Yani isminden de anlaşılacağı üzere sahibi hakkında bilgi vermektedir.
Çıkan sonuçlara göre:
- Domain Name: midyat.bel.tr
- Alan adının kendisi. Bu, Midyat Belediyesi'ne ait bir alan adı olduğunu gösterir.
- Domain Status: Active
- Alan adının aktif olduğunu belirtir, yani kullanılabilir durumda.
- Frozen Status: -
- Alan adının dondurulmuş olmadığını gösterir.
- Transfer Status: The domain is LOCKED to transfer.
- Alan adının transferinin kilitli olduğunu belirtir. Başka bir kayıt operatörüne taşınamaz.
- Registrant:
- MİDYAT BELEDİYESİ
- Alan adının sahibi. Kişisel bilgiler gizli tutulmuş.
- Registrar:
- Alan adını kaydeden kuruluş hakkında bilgi.
- NIC Handle: ogv40
- Organization Name: ODTÜ Geliştirme Vakfı Bilgi Teknolojileri San. ve Tic. A.Ş.
- Address: Üniversiteler Mah. İhsan Doğramacı Blv. Arge ve Eğitim Merkezi No:13 Çankaya, 06800 Ankara, Türkiye
- Phone: 90-312-9881106
- Domain Servers:
- ns01.cmbilisim.com
- ns02.cmbilisim.com
- Bu sunucular, alan adının hangi sunucular üzerinden yönetildiğini ve barındırıldığını belirtir.
- Additional Info:
- Created on: 2007-Jan-16
- Alan adının kayıt tarihi.
- Expires on: 2025-Jan-15
- Alan adının süresinin biteceği tarih.
Bu bilgiler midyat.bel.tr kimliği, sahipliği ve teknik yönetimi hakkında bilgi vermektedir.
Ardından Ns.tools Kullandım. Ns.tools bir web sitesinin alan adı, İp adresi , DNS kayıtları, e-posta sunucusu, web sunucusu ve diğer bilgilerini sorgulamak için kullanılır. Tools araçlar anlamına gelir. Ns şirkettir.
İki tane DNS sunucusu tespit edildi.
1) İsim
ns01.cmbilisim.com
IP'ler
185.135.223.163
2) İsim
ns02.cmbilisim.com
IP'ler
185.135.223.163
Ardından Viewdns.info kullandım. Viewdns.info bir web sitesinin İp adresinin çeşitli bilgilerini öğrenmek için kullanılan bir araçtır. Bu araç sayesinde bir ip adresinin hangi ülke, şehir veya bölgede bulunduğunu, hangi servis sağlayıcısına ait olduğunu hangi ağ cihazının ürettiğini ve MAC adresini öğrenebiliriz. Viewdns.info Türkçe'ye DNS görüntüleme bilgisi olarak çevrilebilir.
Viewdns.info'dan sonra aktif bilgi toplama yöntemlerine geçtim. Nmap wrapper kullandım. Ancak aktif bilgi toplama yöntemlerinden gizli olmak gerektiği için öncelikle kendimi gizledim. İp adresimi değiştirmek için Proton VPN kullandım. Ancak PROTON VPN'de veri sızıntısı olduğu için eklenti kullandım. Mac adresimse önceden değiştirilmiş olduğu için onu değiştirmeye gerek yoktu. Mac adresini değiştirmek için elektronik kartın üzerindeki çip söküldüğü zaman donanımsal olarak MAC adresi değişir. Çünkü seri numarası değişir. Bu sebeple Mac adresini manuel olarak değiştirmeme gerek yoktu. Cep telefonumsa zaten yurtdışından alındığı için kaçak cihaz olup IMEI adresi kayıtlı değildi. Öncelikle servis/sürüm tanımam gerekiyordu. Ben muhtemel sorgularla sınırlamak istedim. Bunun için nmap --version-light midyat.bel.tr komutunu kullandım.
Nmap sonucuna göre:
1. 21/tcp open ftp: FTP (File Transfer Protocol) hizmeti çalışıyor. Bu, dosya transferi için kullanılan bir protokoldür. FTP, güvenli olmayan bir protokoldür çünkü veriler şifrelenmemiş olarak gönderilir. Eğer FTP kullanılması gerekiyorsa, FTP üzerinden SSL/TLS (FTPS) veya SFTP kullanılması daha güvenlidir.
2. 22/tcp open ssh: SSH (Secure Shell) hizmeti çalışıyor. Bu, güvenli uzaktan erişim sağlamak için kullanılır. SSH, güvenli bir uzaktan bağlantı protokolüdür. Güçlü parolalar kullanılması ve mümkünse anahtar tabanlı kimlik doğrulama yapılması önerildi. SSH erişimlerinin izlenmesi ve sadece belirli IP adreslerine izin verilmesi güvenliği artırır.
3. 25/tcp open smtp: SMTP, e-posta göndermek için kullanılır. E-posta sunucuları, açık relay saldırılarına karşı korunmalıdır. TLS kullanarak e-posta trafiğini şifrelemek güvenliği artırır.
4. 53/tcp open domain: DNS hizmeti veriyor. DNS sunucuları, DNS cache poisoning saldırılarına karşı korunmalıdır. DNSSEC kullanımı önerildi.
5.80/tcp open http: HTTP hizmeti çalışıyor. Bu, web tarayıcıları aracılığıyla web sayfalarına erişim sağlar. HTTP, şifrelenmemiş web trafiği için kullanılır. Tüm web trafiğinin HTTPS üzerinden yönlendirilmesi (HTTP'den HTTPS'ye yönlendirme) önerildi.
6. 110/tcp open pop3: POP3, e-posta almak için kullanılır. TLS üzerinden POP3 (POP3S) kullanmak daha güvenlidir.
7. 143/tcp open imap: IMAP, e-posta erişimi sağlar.TLS üzerinden IMAP (IMAPS) kullanmak daha güvenlidir.
8.443/tcp open https: HTTPS hizmeti çalışıyor. Bu, güvenli web bağlantıları için kullanılır. HTTPS, şifrelenmiş web trafiği sağlar. Sertifikaların geçerliliği düzenli olarak kontrol edilmelidir. Güçlü şifreleme algoritmaları ve protokollerinin kullanılması önerildi.
9.3306/tcp open mysql: MySQL veritabanı hizmeti çalışıyor. Bu, veritabanı yönetimi için kullanılır. MySQL veritabanı hizmeti veriyor. Veritabanı sunucusu düzgün bir şekilde yapılandırılmalı, gereksiz kullanıcı hesapları kaldırılmalı ve güçlü parolalar kullanılmalıdır.Veritabanına sadece gerekli olan IP adreslerinden erişime izin verilmelidir.
10. 8080/tcp open http-proxy: HTTP Proxy hizmeti veriyor. Proxy sunucusu düzgün bir şekilde yapılandırılmalı ve güvenlik duvarı kuralları ile korunmalıdır. Yetkisiz kullanımın önlenmesi için kimlik doğrulama kullanılmalıdır.
11. 8888/tcp open sun-answerbook: Bu port genellikle alternatif HTTP portu olarak kullanılır. Bu port üzerinden erişim sağlanan hizmetlerin güvenliği sağlanmalı ve HTTPS üzerinden erişim teşvik edilmelidir.
Güvenlik Açısından Değerlendirme:
Çok Sayıda Açık Port: Bu sunucuda çok fazla açık port bulunuyor, bu da potansiyel saldırı yüzeyini artırır. Güvenlik duvarı kullanarak gereksiz portların kapatılması önerilir.
Eski ve Güvensiz Protokoller: Telnet gibi eski ve güvensiz protokoller hala açık. Bunların yerine SSH gibi daha güvenli alternatiflerin kullanılması gerekir.
Hassas Hizmetler: SMTP, FTP, ve IMAP gibi hizmetlerin açık olması, bunların düzgün bir şekilde yapılandırılması ve güvenlik önlemlerinin alınması gerektiğini gösterir.
Tavsiyelerim:
Güvenlik Duvarı Yapılandırması: Gereksiz tüm portlar kapatılmalı ve sadece gereken hizmetler açık bırakılmalıdır.
Güncel Yazılım ve Protokoller: Eski ve güvensiz protokoller yerine güncel ve güvenli protokoller kullanılmalıdır.
Düzenli Denetim ve İzleme: Sunucu düzenli olarak denetlenmeli ve izlenmelidir, bu tür taramalar periyodik olarak yapılmalıdır.
Midyat Belediyesi Web Sitesine C99.php webshelli atılıp atılmadığını bulmak istedim. Bunun için https://www.midyat.bel.tr/c99.php linkini kullandım.
C99.php webshelli atılmadığı sonucu çıktı.
https://hizliresim.com/pi245w8
Ardından XSS açığı testi yaptım. Bunun için Midyat Belediyesi'nin Cookie bilgilerine erişmeye çalıştım. Bunu yapmak içinde şu adımları takip ettim:
Temel XSS Vektörü linkini kullandım.
-https://harita.midyat.bel.tr/web/guest/46?q=<script>alert('XSS açığı bulundu!')</script>
Ancak Xss açığı yoktu.
Gömülü IMG Etiketi kullandım.
-https://harita.midyat.bel.tr/?2=<img src=x onerror="alert('XSS açığı bulundu!')">
Yine XSS açığı tespit edilmedi.
Onmouseover Olayını denedim.
https://harita.midyat.bel.tr/?2=<a href="#" onmouseover="alert('XSS açığı bulundu!')">Bağlantının üzerine gel</a>
Ancak yine XSS açığı tespit edilmedi.
Javascript URL denedim.
https://harita.midyat.bel.tr/?2=javascript:alert('XSS açığı bulundu!')
Ancak yine XSS açığı tespit edilmedi.
SVG Etiketi denedim.
https://harita.midyat.bel.tr/?2=<svg xmlns="http://www.w3.org/2000/svg"><script>alert('XSS açığı bulundu!')</script></svg>
Ancak yine XSS açığı tespit edilmedi.
SQL enjeksiyonu tespiti yapmak istedim. Öncelikle Error based SQL enjeksiyonu ile başladım. Bu veri tabanından hata mesajı alarak ver tabanının yapısını ve içeriğini öğrenmeye yarayan bir saldırı tekniğidir. Bu saldırıyı yapmak için dinamik bir link bulmam gerekirdi. Dinamik link olarak şu linki https://harita.midyat.bel.tr/web/guest/46 buldum. Ardından şu şekilde değiştirdim:
Web sitesi herhangi bir hata döndürmedi. Bu web sitesinde Error based SQL enjeksiyonu açığı olmadığını gösteriyordu.
Ardından sıra Union Based SQL enjeksiyonuna geldi. Union Based SQL Injection Atağı, bir web uygulamasının veri tabanına zararlı sorgular göndererek veri çalmayı veya değiştirmeyi amaçlayan bir saldırı türüdür. Bunun için şu linki kullandım:
https://harita.midyat.bel.tr/web/guest/46 UNION SELECT null, null, null--
Hiçbir hata dönmedi. Web sitesi normal olarak çalıştı. Bu web sitesinde union based SQL enjeksiyonu olmadığını gösterdi.
Ardından Boolean Based SQL Injection Atağı denedim. Bunun için linki şu şekilde kullandım:
Yine güvenlik açığı tespit edilmedi. Web sitesi normal olarak çalıştı.
Ardından otomatik testlere geçtim. Bunun için ilk etapta Pentestkit Mobile kullandım. Ve character encoding manipulation" (karakter kodlama manipülasyonu) yöntemini kullandım. Bu tür enjeksiyonlar, veritabanı sorgularında karakter kodlaması ayarlarını değiştirerek, istismar edilebilir bir açık oluşturmayı amaçlar. Ancak web sitesinde yine SQL enjeksiyonu tespit edilemedi. Normal bir şekilde çalıştı.
Ardından Pentestkit Mobile ile Union Based SQL enjeksiyonu denedim. Ve veritabanını nmap sonucunda MySQL tespit ettiğim için MySQL komutandan başladım. Ancak yine güvenlik açığı tespit edilmedi.
POLYGON fonksiyonunu kullanarak bir sorgu içine gömülü olarak MySQL sunucu sürüm bilgisini (@@version) çekmeye çalıştım. Ancak bunda da güvenlik açığı tespit edilmedi.
Pentestkit Mobile ile tüm SQL enjeksiyonu komutlarını denedim. Ancak hiçbir SQL enjeksiyonu tespit edilmedi.
Ardından şimdiye kadar saldırganlar tarafından Midyat Belediyesi Web sitesine web shelller atılıp atılmadığına baktım. Bunun için MİRABB kullandım. Web sitesi temiz çıktı.
Ardından Google güvenli taramayı kullandım. https://transparencyreport.google.com/safe-browsing/search?url=midyat.bel.tr
Kötü niyetli saldırganlar tarafından yüklenen herhangi bir zararlı yazılım tespit edilmedi.
HTTP yanıt başlığını inceledim.
Çıkan sonuçlar şöyleydi:
1. Cache-Control: İçeriğin önbelleğe alınmasıyla ilgili talimatlar verir.
- private, no-store, max-age=180: İçeriğin özel olarak önbelleğe alınabileceğini, ancak saklanmaması gerektiğini ve maksimum 180 saniye süreyle geçerli olduğunu belirtir.
- public, max-age=3600: İçeriğin herkese açık olarak önbelleğe alınabileceğini ve maksimum 3600 saniye süreyle geçerli olduğunu belirtir.
Yani içeriğin önbelleğe alınmasıyla ilgili katı kurallar koyulmuş. private, no-store, max-age=180 ve public, max-age=3600 başlıkları, önbelleğe alınan içeriğin geçerlilik süresi ve kimler tarafından önbelleğe alınabileceği hakkında bilgi veriyor. Bu, hem performans hem de gizlilik açısından önemlidir.
2. Content-Security-Policy: İçeriğin güvenliğini sağlamak için belirli kaynakların kullanımıyla ilgili politikalar belirler. Bu durumda, sadece kendisinden (self) gelen kaynaklara izin verilmektedir. Yani güvenliği artırmak için katı bir politika uygulanmış. Bu, sadece kendisinden (self) gelen kaynaklara izin vererek olası güvenlik açıklarını en aza indirir.
default-src self kullanımı, yalnızca kendi kaynağından gelen içeriklerin yüklenmesine izin vererek birçok XSS ve veri enjeksiyonu saldırısını önlemektedir. Bu, iyi bir güvenlik uygulamasıdır. Ancak, ek CSP kuralları eklenerek daha da sıkılaştırılabilir.
3. Content-Type: Yanıtın içerik türünü belirtir. Burada, yanıtın text/html formatında ve utf-8 karakter setiyle kodlandığını belirtir.
4. Date: Yanıtın gönderildiği tarih ve saat.
5. Expires: İçeriğin geçerlilik süresinin dolacağı tarih ve saat.
6. Last-Modified: İçeriğin en son değiştirildiği tarih ve saat.
7. Server: Sunucunun türü ve versiyonu (bu durumda, Microsoft-IIS/10.0).
8. Set-Cookie: Sunucunun istemciye bir çerez gönderdiğini belirtir. Oturum yönetimi için bir çerez ayarlanmış. Bu çerez, oturum boyunca kullanıcının kimliğini doğrulamak için kullanılır. (ASP.NET_SessionId=22p5lvohbzpmlmye2xkjp40n).
9. Vary: Tarayıcıya, farklı başlıklar temelinde içeriğin değişebileceğini belirtir. Bu, doğru içeriğin sunulmasını sağlar. Hangi başlıklara göre içerik varyantlarının sunulabileceğini belirtir (bu durumda, hepsi).
10. X-Android-Received-Millis: Yanıtın Android cihazında alındığı zamanın milisaniye cinsinden değeri.
11. X-Android-Response-Source: Yanıtın kaynağını belirtir (NETWORK 200 yani ağ üzerinden başarılı bir yanıt).
12. X-Android-Selected-Protocol: Seçilen iletişim protokolü (http/1.1).
13. X-Android-Sent-Millis: İsteğin Android cihazından gönderildiği zamanın milisaniye cinsinden değeri.
14. X-Content-Type-Options: Bu, tarayıcının içeriği belirlerken MIME türü kontrolü yapmasını sağlar ve MIME türü karışıklık saldırılarını önler. İçeriğin türünün yanlış tanımlanmasını engellemek için kullanılır. nosniff ile içerik türü yanlış tanımlamaları engellenmektedir.
15. X-Frame-Options: İçeriğin çerçeveleme politikasını belirtir. Çerçeveleme saldırılarını önlemek için içerik sadece aynı kaynaktan gelen içeriklerle çerçevelenebilir olarak ayarlanmış. (SAMEORIGIN yani sadece aynı kaynaktan gelen içerik çerçevelenebilir). Bu başlık, tıklama dolandırıcılığı (clickjacking) saldırılarını önlemek için kullanılır. Sadece aynı kaynaktan gelen içeriklerin çerçeve içinde gösterilmesine izin vererek güvenliği artırmaktadır.
16. X-Powered-By: Uygulamanın hangi teknoloji tarafından çalıştırıldığını belirtir. Çıkan sonuca göre sunucu ASP.NET kullanılarak çalıştırılmaktadır.
17. X-XSS-Protection: Çapraz site betikleme (XSS) saldırılarına karşı koruma sağlar (1; mode=block). Bu, bazı tarayıcıların temel XSS korumalarını etkinleştirir ve bir saldırı tespit edilirse sayfanın yüklenmesini engeller. Bu da iyi bir güvenlik uygulamasıdır.
Bu başlıklar, hem performans hem de güvenlik açısından iyi düşünülmüştür. Öncelikle güvenlik politikaları ve çerçeveleme koruması dikkat çekmektedir, bu da sunucunun güvenlik açıklarını en aza indirmeyi amaçladığını göstermektedir. Aynı zamanda, önbellekleme politikaları ve içerik türü belirleme gibi performans odaklı optimizasyonlar da yapılmıştır.

Ancak eksik veya iyileştirilebilecek bazı alanlar tespit ettim.
Strict-Transport-Security (HSTS) başlığı eksiktir. Bu başlık, tarayıcıların siteye sadece HTTPS üzerinden bağlanmasını zorunlu kılar. Bu, SSL/TLS kullanımını zorunlu hale getirir ve ortadaki adam saldırılarını (MITM) önlemeye yardımcı olur. Mevcut haliyle siteye http://midyat.bel.tr üzerinden de giriş yapılabilmektedir.
Referrer-Policy başlığı eksiktir. Bu başlık, yönlendirme bilgilerinin ne kadarının gönderileceğini belirler ve potansiyel bilgi sızıntılarını en aza indirir.

Feature-Policy başlığı eksiktir. Bu başlık, tarayıcının belirli özellikleri nasıl kullanacağını kontrol eder ve zararlı kodların bazı tarayıcı özelliklerini kötüye kullanmasını engeller.