Bugünkü yazımda sizlerle web sitesi üzerindeki zaafiyetleri tarayan güçlü bir yazılım olan Nikto aracının kurulumunu ve kullanımını sizlerle paylaşacağım. Nikto aracı LFI, SQLi, XSS, CSRF gibi güvenlik zaafiyetlerini ve içerisinde işimize yarayacak bilgiler barındıran klasörleri bulmamıza yaran gerçekten güçlü bir araçtır. Nikto Perl ile yazılmış bir araç olup boyutu oldukça düşük olmasına rağmen etkisi büyük olan araçlardan bir tanesidir.
Kurulum
Kali linux işletim sistemi üzerinde Nikto aracı otomatik olarak yüklü olarak gelmektedir. Eğer bu aracı farklı bir linux işletim sistemi üzerine kuracaksanız, aşağıdaki adımları izlemeniz gerekmektedir.
Kullanım
Nikto aracının en genel halde kullanımı aşağıdaki gibidir.
# nikto -h <web sunucu ip/adres> -p <port numarası> -display <Görüntüleme Seçenekleri Parametreleri>
Nikto aracının farklı parametrelerle kullanımı için aşağıdaki örnekleri inceleyebilirsiniz.
1. Görüntüleme Seçenekleri Parametreleri
1 –> Show Redirects: Eğer site üzerinde yönlendirme varsa, yönlendirmenin olduğu adresi sonuca döker.
2 –> Show Cookies Received: Siteden cookie çalması durumunda çalınan cookieleri sonuca döker.
3 –> Show all 200/OK messages: Brute-force yaptığı sayfalarda “200 İstek başarılı alınmış ve cevap başarılı verilmiştir” yani dizinde ulaşılabilen bir sayfa varsa bu sayfaları arama sonucunda gösteren seçenektir.
4 –> Shows URLs which require authentication: Kullanıcıdan kullanıcı adı/şifre istenen URL adresleri gösterir.
D –> Debug output: Çıktıyı debug ederek gösterir.
E –> Display HTTP Errors: Arama sonucunda oluşacak HTTP hatalarını sonuca döker.
P –> Print progress to STDOUT: İşlemi stdout’a yazdırır.
S –> Scrub outputs of IP’s and Hostnames: Site üzerindeki ip ve host adreslerini ayıklayarak çıktıyı gösterir.
V –> Verbose: sonuçları ekrana döker.
2 –> Show Cookies Received: Siteden cookie çalması durumunda çalınan cookieleri sonuca döker.
3 –> Show all 200/OK messages: Brute-force yaptığı sayfalarda “200 İstek başarılı alınmış ve cevap başarılı verilmiştir” yani dizinde ulaşılabilen bir sayfa varsa bu sayfaları arama sonucunda gösteren seçenektir.
4 –> Shows URLs which require authentication: Kullanıcıdan kullanıcı adı/şifre istenen URL adresleri gösterir.
D –> Debug output: Çıktıyı debug ederek gösterir.
E –> Display HTTP Errors: Arama sonucunda oluşacak HTTP hatalarını sonuca döker.
P –> Print progress to STDOUT: İşlemi stdout’a yazdırır.
S –> Scrub outputs of IP’s and Hostnames: Site üzerindeki ip ve host adreslerini ayıklayarak çıktıyı gösterir.
V –> Verbose: sonuçları ekrana döker.
2.Evasion (Kaçınma) Seçenekleri
# nikto -h <web sunucu ip/adres> -evasion <opsiyonlar> veya -e <opsiyonlar>
1 –> Random URI Encoding(non UTF-8): UTF8 yerine rastgele char kullanarak WAF’lardan kaçışı sağlar.
2 –> Directory self-reference(/./): Dizinde yaptığı taramada kendini /./ şeklinde hedef göstererek WAF’lardan kaçışı sağlar.
3 –> Premature URL Ending: Nikto aslında /../ ile takip eden rasgele klasörleri ekler. 2’de olduğu gibi, IDS sadece web sunucusundaki kanonik URL’yi değil, aynı zamanda iyi bilinen bir teknik olan /../ dizin geçişini de algılar.
4 –> Prepend long random string: Yolladığı requeste çok karakterli rastgele string oluşturarak WAF’lardan kaçışı sağlar.
5 –> Fake Parameter: Kaçış için sahte bir parametre kullanır.
6 –> TAB as a request spacer: Requestte kullanılacak olan boşluk karakteri yerine TAB karakteri kullanır.
7 –> Change the case of URL: URL’nin durumunu değiştirerek kaçış sağlar.
8 –> Use Windows directory separator (\): dizinde yaptığı taramada kendini / yerine \ şeklinde hedef göstererek WAF’lardan kaçışı sağlar.
A –> Use a carriage return (0x0d) as a request spacer: Kaçış için 0x0d karakteri kullanır.
B –> Use a binary value(0x0b) as a request spacer: Kaçış için 0x0b karakteri kullanır.
1 –> Random URI Encoding(non UTF-8): UTF8 yerine rastgele char kullanarak WAF’lardan kaçışı sağlar.
2 –> Directory self-reference(/./): Dizinde yaptığı taramada kendini /./ şeklinde hedef göstererek WAF’lardan kaçışı sağlar.
3 –> Premature URL Ending: Nikto aslında /../ ile takip eden rasgele klasörleri ekler. 2’de olduğu gibi, IDS sadece web sunucusundaki kanonik URL’yi değil, aynı zamanda iyi bilinen bir teknik olan /../ dizin geçişini de algılar.
4 –> Prepend long random string: Yolladığı requeste çok karakterli rastgele string oluşturarak WAF’lardan kaçışı sağlar.
5 –> Fake Parameter: Kaçış için sahte bir parametre kullanır.
6 –> TAB as a request spacer: Requestte kullanılacak olan boşluk karakteri yerine TAB karakteri kullanır.
7 –> Change the case of URL: URL’nin durumunu değiştirerek kaçış sağlar.
8 –> Use Windows directory separator (\): dizinde yaptığı taramada kendini / yerine \ şeklinde hedef göstererek WAF’lardan kaçışı sağlar.
A –> Use a carriage return (0x0d) as a request spacer: Kaçış için 0x0d karakteri kullanır.
B –> Use a binary value(0x0b) as a request spacer: Kaçış için 0x0b karakteri kullanır.
3. Kaydetme Seçenekleri
# nikto -h <web sunucu ip/adres> -o -format <opsiyonlar>
-o seçeneği çıktıyı kaydetmemizi sağlar.csv –> CSV uzantısıyla kaydeder.
htm –> HTML formatında kaydeder.
nbe –> Nessus NBE formatında kaydeder.
sql –> sql formatında kaydeder.
txt –> txt formatında kaydeder.
xml –> XML formatında kaydeder.
4. Zaafiyetlere Özel Tarama Seçeneği
# nikto -h <web sunucu ip/adres> -Tuning <opsiyonlar> veya -T <opsiyonlar>
1 –> Interesting File / Seen in logs: İçerisinde işe yarayacak bilgiler bulundurma potansiyeli yüksek sayfalara özelik tarama yapar.
2 –> Misconfiguration / Default File: Yanlış yapılandırılmış veya dizini değiştirilmemiş önemli dosyaları aramaya yönelik tarama yapar.
3 –> Information Disclosure: Host ile ilgili bize bilgi verebilecek olan sayfalara/dosyalara yönelik tarama yapar. Örneğin: phpinfo
4 –> Injection(XSS/Script/HTML): Hedefi XSS veya HTML Injection açıklarına yönelik tarar.
5 –> Remote File Retrieval – Inside Web Root Denial of Service: ?
6 –> Denial of Service: DOS saldırısına yönelik tarama yapar.
7 –> Remote File Retrieval – Server Wide: Server genelinde Remote File Retrieval yapar.
8 –> Command Execution / Remote Shell: Hedef üzerinde komut çalıştırılıp çalıştırılmadığını arayan parametredir.
9 –> SQL Injection: Host üzerinde SQL injection bulunup bulunmadığını arayan parametredir.
0 –> File Upload: Hedef üzerindeki bir dizine dosya upload edilip edilmediğini araştırır.
a –> Authentication Bypass: kullanıcı_adı/şifre istenilen yeri bypasslamaya çalışır.
b –> Software Identification:
c –> Remote Source Inclusion:
d –> Webservice:
e –> Administrative Consol:
x –> Tuning options altında belirtilen bütün parametreleri aramaya dahil eder.
1 –> Interesting File / Seen in logs: İçerisinde işe yarayacak bilgiler bulundurma potansiyeli yüksek sayfalara özelik tarama yapar.
2 –> Misconfiguration / Default File: Yanlış yapılandırılmış veya dizini değiştirilmemiş önemli dosyaları aramaya yönelik tarama yapar.
3 –> Information Disclosure: Host ile ilgili bize bilgi verebilecek olan sayfalara/dosyalara yönelik tarama yapar. Örneğin: phpinfo
4 –> Injection(XSS/Script/HTML): Hedefi XSS veya HTML Injection açıklarına yönelik tarar.
5 –> Remote File Retrieval – Inside Web Root Denial of Service: ?
6 –> Denial of Service: DOS saldırısına yönelik tarama yapar.
7 –> Remote File Retrieval – Server Wide: Server genelinde Remote File Retrieval yapar.
8 –> Command Execution / Remote Shell: Hedef üzerinde komut çalıştırılıp çalıştırılmadığını arayan parametredir.
9 –> SQL Injection: Host üzerinde SQL injection bulunup bulunmadığını arayan parametredir.
0 –> File Upload: Hedef üzerindeki bir dizine dosya upload edilip edilmediğini araştırır.
a –> Authentication Bypass: kullanıcı_adı/şifre istenilen yeri bypasslamaya çalışır.
b –> Software Identification:
c –> Remote Source Inclusion:
d –> Webservice:
e –> Administrative Consol:
x –> Tuning options altında belirtilen bütün parametreleri aramaya dahil eder.
5. Brute-Force Seçeneği
# nikto -h <web sunucu ip/adres> -mutate <opsiyonlar>
1 –> Bütün dosyaları üst dizinleriyle birlikte test eder.
2 –> Şifrelerin bulunduğu dosyaların isimlerini tahmin etmeye çalışır.
3 –> Apache ile kullanıcı isimlerini tahmin eder.
4 –> cgiwrap ile kullanıcı isimlerini tahmin eder.
5 –> Subdomain isimlerine brute-force yapıp olup olmadıklarına bakar. (hostun ana domain olduğunu baz alır.)
6 –> Verilen kelime dosyasıyla, kelime dosyasında bulunan kelimelerin alt dizinler olup olmadığına bakar. (bkz. ./nikto.pl -h -mutate {} )
1 –> Bütün dosyaları üst dizinleriyle birlikte test eder.
2 –> Şifrelerin bulunduğu dosyaların isimlerini tahmin etmeye çalışır.
3 –> Apache ile kullanıcı isimlerini tahmin eder.
4 –> cgiwrap ile kullanıcı isimlerini tahmin eder.
5 –> Subdomain isimlerine brute-force yapıp olup olmadıklarına bakar. (hostun ana domain olduğunu baz alır.)
6 –> Verilen kelime dosyasıyla, kelime dosyasında bulunan kelimelerin alt dizinler olup olmadığına bakar. (bkz. ./nikto.pl -h -mutate {} )
6. Diğer Parametreler
-proxy –> belirtilen proxy’yi kullanır.
-maxtime –> host başına belirtilen maksimum test zamanını değiştirir.
-until –> belirtilen süreye kadar taramaya devam eder. (Tarama biterse daha erken de bitebilir)
-nossl –> SSL ile iletişime girmeden tarar.
-ssl –> Zorunlu bir şekilde SSL kullanarak tarar.
-no404 –> 404 Not Found dönecek sayfaları tahmin etmeyi önler.
-id –> hedefimizin authentication istediğini biliyorsak ve elimizde authentication yapacak kullanıcı_adı ve şifre varsa -id (kullanıcı_adı:şifre) şeklinde giriş yapmamız için kullanılan parametredir.
-version –> Nikto versiyonunu gösterir.
-help –> Yardım komutu.
-dbcheck –> Nikto’da bulunan scan_database.db ve user_scan_database.db’lerini kullanarak yazım hatalarını (syntax errors) veritabanı ve diğer önemli dosyaları kontrol eder.
-cookie –> Bulunan Cookie’leri (çerezleri) ekrana yansıtır.
Örnek Kullanım: “# nikto -h www.xxx.com.tr -ssl -e 1234 -m 12”-maxtime –> host başına belirtilen maksimum test zamanını değiştirir.
-until –> belirtilen süreye kadar taramaya devam eder. (Tarama biterse daha erken de bitebilir)
-nossl –> SSL ile iletişime girmeden tarar.
-ssl –> Zorunlu bir şekilde SSL kullanarak tarar.
-no404 –> 404 Not Found dönecek sayfaları tahmin etmeyi önler.
-id –> hedefimizin authentication istediğini biliyorsak ve elimizde authentication yapacak kullanıcı_adı ve şifre varsa -id (kullanıcı_adı:şifre) şeklinde giriş yapmamız için kullanılan parametredir.
-version –> Nikto versiyonunu gösterir.
-help –> Yardım komutu.
-dbcheck –> Nikto’da bulunan scan_database.db ve user_scan_database.db’lerini kullanarak yazım hatalarını (syntax errors) veritabanı ve diğer önemli dosyaları kontrol eder.
-cookie –> Bulunan Cookie’leri (çerezleri) ekrana yansıtır.
Komut açıklaması: www.xxx.com.tr adresinde SSL desteği olup olmadığını, Evasion 1234 ve Mutate 12 tekniklerini kullanarak tarama yapar.