Nuclei ile Zafiyet Tespiti
Nuclei ile Zafiyet Tespiti
Nuclei, ProjectDiscovery ekibi tarafından geliştirilen, güvenlik açığı taraması, keşif ve penetrasyon testlerini otomatikleştiren güçlü bir açık kaynak aracıdır. Go diliyle yazılan bu araç, TCP, DNS, HTTP gibi farklı protokoller üzerinden hızlı ve esnek zafiyet taramaları yapabilir. Özelleştirilebilir yapısı sayesinde hem geliştiriciler hem de güvenlik araştırmacıları için popülerdir.
Nuclei’nin en büyük avantajlarından biri, sürekli güncellenen zafiyet şablonlarıyla yaygın güvenlik açıklarını hızlıca tespit edebilmesidir. Ayrıca, diğer güvenlik araçlarıyla entegrasyon sağlayarak otomatik güvenlik testlerini iş akışlarına dahil etmek isteyenler için ideal bir çözüm sunar.
Nuclei Kurulumu
Nuclei kurulumunu çeşitli yöntemlerle gerçekleştirebilirsiniz. En yaygın üç kurulum yöntemi:
1. Go ile Kurulum
Eğer Go dili yüklü ise, Nuclei’yi aşağıdaki komut ile kolayca kurabilirsiniz:
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
2. Docker ile Kurulum
Docker kullanıyorsanız, Nuclei’yi Docker üzerinden şu komutla çalıştırabilirsiniz:
docker pull projectdiscovery/nuclei:latest
3. GitHub ile Kurulum
Nuclei’yi kaynak koddan derleyerek kurmak isterseniz, GitHub deposundan aşağıdaki adımlar ile kurabilirsiniz:
git clone https://github.com/projectdiscovery/nuclei.git
cd nuclei/cmd/nuclei
go build
mv nuclei /usr/local/bin/
nuclei -version
Bu yöntemler ile Nuclei’yi sisteminize kolayca kurup kullanıma hazır hale getirebilirsiniz.
Nuclei Templates
Nuclei kurulumunu tamamladıktan sonra, kullanabilmek için Nuclei Templates’i indirmeniz gerekiyor. Bu şablonlar, Nuclei’nin zafiyet taramaları sırasında kullandığı hazır kurallar ve testlerden oluşur. Nuclei’nin gücü, topluluk tarafından sürekli güncellenen ve katkıda bulunulan bu nuclei-templates sayesinde daha da artar.
Nuclei Templates’i indirmek için şu komutu çalıştırabilirsiniz:
nuclei -update-templates
Şablonlar (Templates)
Nuclei, farklı zafiyet türlerini taramak için YAML tabanlı şablonlar kullanır. Bu şablonlar, güvenlik sorunlarını tespit etmek için gerekli kontrolleri ve kriterleri tanımlar. YAML kullanımı, şablonların okunmasını ve yazılmasını kolaylaştırır; bu sayede, kullanıcılar geniş programlama bilgisine ihtiyaç duymadan kendi özel şablonlarını oluşturabilirler.
Örnek Şablon (Template)
id: zafiyet-ismi
info:
name: Zafiyet İsmi
author: sizin-isminiz
severity: high
description: Bu şablon, web uygulamalarındaki xxx zafiyeti tespit eder.
requests:
- method: GET
path:
- "{{BaseURL}}/vulnerable-path"
matchers:
- type: word
words:
- "zafiyet"
condition: and
part: body
Bu şablon, bir web uygulamasının yanıt gövdesinde belirli bir anahtar kelimenin (“zafiyet”) varlığını kontrol ederek zafiyeti tespit etmeye çalışır.
Nuclei ile Bir Hedefi Taramak
Eğer tek bir URL’yi taramak istiyorsanız, şu şekilde çalıştırabilirsiniz:
nuclei -u http://example.com -t nuclei-templates/
Alternatif olarak:
nuclei -target http://example.com -t nuclei-templates/
Bir Dosyadan Hedefleri Taramak
nuclei -l targets.txt -t nuclei-templates/
Bu komut, targets.txt dosyasındaki tüm URL’leri nuclei-templates/ dizinindeki şablonlarla tarar.
Belirli Klasördeki Tüm Şablonları Kullanmak
nuclei -t nuclei-templates/dast/vulnerabilities/
Belirli Şablonları Kullanmak
nuclei -t nuclei-templates/dast/vulnerabilities/redirect/open-redirect.yaml
Şiddet (Severity) Türüne Göre Filtreleme
nuclei -u http://example.com -s critical,high,medium -t nuclei-templates/
Nuclei’yi Diğer Araçlarla Entegre Etmek
subfinder -d example.com -silent | httpx | nuclei -t nuclei-templates/
Bu komut zinciri ile alt alanlar keşfedilip HTTP üzerinden kontrol edilerek zafiyet taraması yapılabilir.
Nuclei Şablonu Oluşturmak
Nuclei şablonları, belirli güvenlik açıklarını tespit etmek için yazılmış YAML formatındaki dosyalardır.
Örnek Şablon:
id: git-config
info:
name: Git Config Dosyası
author: Ice3man
severity: medium
description: /.git/config dosyasının varlığını kontrol eder.
http:
- method: GET
path:
- "{{BaseURL}}/.git/config"
matchers:
- type: word
words:
- "[core]"
Yukarıdaki örnekte, “core” kelimesinin matchers bölümünde yer almasının nedeni, .git/config dosyasının bir Git yapılandırma dosyası olduğunu doğrulamaktır. Git yapılandırma dosyalarının içinde “[core]” bölümü, Git’in temel ayarlarını içerir. Bu nedenle, tarayıcı .git/config dosyasına eriştiğinde, dosyanın gerçekten Git yapılandırması olup olmadığını anlamak için “core” kelimesi aranır. Eğer bu kelime bulunursa, hedef sistemde Git yapılandırma dosyasının var olduğu doğrulanır.
Open Redirect (Açık Yönlendirme) Zafiyeti İçin Nuclei Şablonu Örneği
Aşağıda, bir open redirect zafiyeti için oluşturulmuş bir Nuclei şablonunu bulabilirsiniz. Open redirect, bir kullanıcının güvenilir bir site üzerinden zararlı bir siteye yönlendirilmesine neden olan güvenlik açığıdır.
id: open-redirect-zafiyeti
info:
name: Open Redirect Zafiyeti
author: sizin-adınız
severity: low
description: Hedef sistemde açık yönlendirme zafiyeti mevcut. Belirtilen parametre ile zararlı sitelere yönlendirme yapılabilir.
reference:
- https://owasp.org/www-community/attacks/Open_redirect
requests:
- method: GET
path:
- "{{BaseURL}}/redirect?url=https://example.com"
matchers:
- type: status
status:
- 302
- type: header
part: header
words:
- "Location: https://example.com"
Açıklama:
id: Şablonun kimliği. Burada open redirect (açık yönlendirme) için bir şablon oluşturuyoruz.info: Şablonun açıklama bölümü. Zafiyetin ne olduğunu ve nasıl kullanılabileceğini belirtiyor.requests: Sunucuya yapılacak istek.pathkısmında, zararlı bir siteye yönlendirme yapılacak URL tanımlanmıştır.matchers: Yanıtın HTTP durumu (status) 302 (yönlendirme) olmalı ve Location başlığında zararlı URL (https://example.com) bulunmalıdır.
Bu şablon, sitenin open redirect (açık yönlendirme) zafiyetine sahip olup olmadığını kontrol eder. Eğer hedef site, https://example.com adresine yönlendirme yaparsa, bu zafiyetin mevcut olduğu doğrulanır.