Wyszukiwanie w witrynie

Nikto - luka w zabezpieczeniach aplikacji internetowych i skaner CGI dla serwerów sieciowych


Nikto Web Scanner to kolejne narzędzie, które warto mieć w arsenale każdego administratora Linuksa. Jest to skaner internetowy typu open source wydany na licencji GPL, który służy do przeprowadzania kompleksowych testów na serwerach internetowych pod kątem wielu elementów, w tym ponad 6500 potencjalnie niebezpiecznych plików/CGI .

Sugerowana lektura: WPSeku – skaner podatności na wykrywanie problemów z bezpieczeństwem w WordPress

Został napisany przez Chrisa Solo i Davida Lodge'a w celu oceny luki. Sprawdza, czy nie ma nieaktualnych wersji na 1250 serwerach internetowych i ponad 270 problemów specyficznych dla wersji. Skanuje także i raportuje w poszukiwaniu nieaktualnego oprogramowania serwera WWW i wtyczek.

Funkcje skanera WWW Nikto

  1. Obsługuje protokół SSL
  2. Obsługuje pełny serwer proxy HTTP
  3. Obsługuje tekst, HTML, XML i CSV w celu zapisywania raportów.
  4. Skanuj w poszukiwaniu wielu portów
  5. Może skanować na wielu serwerach, pobierając dane wejściowe z plików, takich jak dane wyjściowe nmap
  6. Obsługa LibWhisker IDS
  7. Wystarczająco zdolny do identyfikacji zainstalowanego oprogramowania za pomocą nagłówków, plików i ikon ulubionych
  8. Logi dla Metasploits
  9. Raporty dla „nietypowych” nagłówków.
  10. Wyliczanie użytkowników Apache i cgiwrap
  11. Uwierzytelnij hosty za pomocą protokołu Basic i NTLM
  12. Skanowanie można automatycznie wstrzymywać o określonej godzinie.

Wymagania Nikto

System z podstawową instalacją Perl, Moduły Perla, OpenSSL powinien umożliwić uruchomienie Nikto. Został dokładnie przetestowany na Windows, Mac OSX i różnych dystrybucjach Unix/Linux, takich jak Red Hat, Debian, Ubuntu, BackTrack itp.

Instalacja skanera WWW Nikto w systemie Linux

Większość współczesnych systemów Linux ma preinstalowane pakiety Perl, Moduły Perla i OpenSSL. Jeśli nie są dołączone, możesz je zainstalować za pomocą domyślnego narzędzia do zarządzania pakietami systemowymi o nazwie yum lub apt-get.

Na Red Hat/CentOS/Fedora
[root@tecmint ]# yum install perl perl-Net-SSLeay openssl
Na Debianie/Ubuntu/Linux Mint
[root@tecmint ]# apt-get install perl openssl libnet-ssleay-perl

Następnie sklonuj najnowsze stabilne pliki źródłowe Nikto z repozytorium Github, przejdź do katalogu Nikto/programs/ i uruchom go za pomocą Perla:

git clone https://github.com/sullo/nikto.git
cd nikto/programs
perl nikto.pl -h 
Przykładowe wyjście
Option host requires an argument

       -config+            Use this config file
       -Display+           Turn on/off display outputs
       -dbcheck            check database and other key files for syntax errors
       -Format+            save file (-o) format
       -Help               Extended help information
       -host+              target host
       -id+                Host authentication to use, format is id:pass or id:pass:realm
       -list-plugins       List all available plugins
       -output+            Write output to this file
       -nossl              Disables using SSL
       -no404              Disables 404 checks
       -Plugins+           List of plugins to run (default: ALL)
       -port+              Port to use (default 80)
       -root+              Prepend root value to all requests, format is /directory
       -ssl                Force ssl mode on port
       -Tuning+            Scan tuning
       -timeout+           Timeout for requests (default 10 seconds)
       -update             Update databases and plugins from CIRT.net
       -Version            Print plugin and database versions
       -vhost+             Virtual host (for Host header)
   		+ requires a value

	Note: This is the short help output. Use -H for full help text.

Host opcji wymaga argumentu” wyraźnie mówi, że podczas testu nie uwzględniliśmy wymaganych parametrów. Musimy więc dodać podstawowy niezbędny parametr, aby przeprowadzić uruchomienie testowe.

Podstawowe testowanie

Podstawowe skanowanie wymaga hosta, na który chcesz namierzyć. Domyślnie skanuje port 80, jeśli nic nie jest określone. Hostem może być nazwa hosta lub adres IP systemu. Możesz określić hosta za pomocą opcji „-h”.

Na przykład chcę wykonać skanowanie adresu IP 172.16.27.56 na porcie TCP 80.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56
Przykładowe wyjście
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          172.16.27.56
+ Target Hostname:    example.com
+ Target Port:        80
+ Start Time:         2014-01-10 00:48:12 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ Retrieved x-powered-by header: PHP/5.3.3
+ The anti-clickjacking X-Frame-Options header is not present.
+ Server leaks inodes via ETags, header found with file /robots.txt, inode: 5956160, size: 24, mtime: 0x4d4865a054e32
+ File/dir '/' in robots.txt returned a non-forbidden or redirect HTTP code (200)
+ "robots.txt" contains 1 entry which should be manually viewed.
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.22). Apache 1.3.42 (final release) and 2.0.64 are also current.
+ Multiple index files found: index.php, index.htm, index.html
+ DEBUG HTTP verb may show server debugging information. See http://msdn.microsoft.com/en-us/library/e8z01xdh%28VS.80%29.aspx for details.
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3233: /phpinfo.php: Contains PHP configuration information
+ OSVDB-12184: /index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000: PHP reveals potentially sensitive information via certain HTTP requests that contain specific QUERY strings.
+ OSVDB-3092: /test.html: This might be interesting...
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ /connect.php?path=http://cirt.net/rfiinc.txt?: Potential PHP MySQL database connection string found.
+ OSVDB-3092: /test.php: This might be interesting...
+ 6544 items checked: 0 error(s) and 16 item(s) reported on remote host
+ End Time:           2014-01-10 00:48:23 (GMT5.5) (11 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Jeśli chcesz skanować na innym numerze portu, dodaj opcję „-p” [-port]. Na przykład chcę wykonać skanowanie adresu IP 172.16.27.56 na porcie TCP 443.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 443
Przykładowe wyjście
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          172.16.27.56
+ Target Hostname:    example.com
+ Target Port:        443
---------------------------------------------------------------------------
+ SSL Info:        Subject: /O=*.mid-day.com/OU=Domain Control Validated/CN=*.mid-day.com
                   Ciphers: DHE-RSA-AES256-GCM-SHA384
                   Issuer:  /C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certificates.starfieldtech.com/repository/CN=Starfield Secure Certification Authority/serialNumber=10688435
+ Start Time:         2014-01-10 01:08:26 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ Server leaks inodes via ETags, header found with file /, inode: 2817021, size: 5, mtime: 0x4d5123482b2e9
+ The anti-clickjacking X-Frame-Options header is not present.
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.22). Apache 1.3.42 (final release) and 2.0.64 are also current.
+ Server is using a wildcard certificate: '*.mid-day.com'
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ OSVDB-3268: /icons/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ 6544 items checked: 0 error(s) and 8 item(s) reported on remote host
+ End Time:           2014-01-10 01:11:20 (GMT5.5) (174 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Możesz także określić hosty, porty i protokoły, używając pełnej składni URL, a zostanie on przeskanowany.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h http://172.16.27.56:80

Możesz także przeskanować dowolną witrynę internetową. Na przykład tutaj skanowałem witrynę google.com.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h http://www.google.com
Przykładowe wyjście
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          173.194.38.177
+ Target Hostname:    www.google.com
+ Target Port:        80
+ Start Time:         2014-01-10 01:13:36 (GMT5.5)
---------------------------------------------------------------------------
+ Server: gws
+ Cookie PREF created without the httponly flag
+ Cookie NID created without the httponly flag
+ Uncommon header 'x-frame-options' found, with contents: SAMEORIGIN
+ Uncommon header 'x-xss-protection' found, with contents: 1; mode=block
+ Uncommon header 'alternate-protocol' found, with contents: 80:quic
+ Root page / redirects to: http://www.google.co.in/?gws_rd=cr&ei=xIrOUomsCoXBrAee34DwCQ
+ Server banner has changed from 'gws' to 'sffe' which may suggest a WAF, load balancer or proxy is in place
+ Uncommon header 'x-content-type-options' found, with contents: nosniff
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ File/dir '/groups/' in robots.txt returned a non-forbidden or redirect HTTP code (302)
….

Powyższe polecenie wykona kilka żądań http (tj. ponad 2000 testów) na serwerze internetowym.

Testowanie wielu portów

Możesz także wykonać skanowanie wielu portów w tej samej sesji. Aby przeskanować wiele portów na tym samym hoście, dodaj opcję „-p” [-port] i określ listę portów. Porty można zdefiniować jako zakres (tj. 80-443) lub oddzielając je przecinkami (tj. 80 443). Na przykład chcę przeskanować porty 80 i 443 na hoście 172.16.27.56.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 80,443
Przykładowe wyjście
- Nikto v2.1.5
---------------------------------------------------------------------------
+ No web server found on cmsstage.mid-day.com:88
---------------------------------------------------------------------------
+ Target IP:          172.16.27.56
+ Target Hostname:    example.com
+ Target Port:        80
+ Start Time:         2014-01-10 20:38:26 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ Retrieved x-powered-by header: PHP/5.3.3
+ The anti-clickjacking X-Frame-Options header is not present.

---------------------------------------------------------------------------
+ Target IP:          172.16.27.56
+ Target Hostname:    example.com
+ Target Port:        443
---------------------------------------------------------------------------
+ SSL Info:        Subject: /O=*.mid-day.com/OU=Domain Control Validated/CN=*.mid-day.com
                   Ciphers: DHE-RSA-AES256-GCM-SHA384
                   Issuer:  /C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certificates.starfieldtech.com/repository/CN=Starfield Secure Certification Authority/serialNumber=10688435
+ Start Time:         2014-01-10 20:38:36 (GMT5.5)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ All CGI directories 'found', use '-C none' to test none
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.22). Apache 1.3.42 (final release) and 2.0.64 are also current.
.....

Korzystanie z serwera proxy

Załóżmy, że system, w którym działa Nikto, ma dostęp do hosta docelowego tylko za pośrednictwem serwera proxy HTTP, test można nadal przeprowadzić na dwa różne sposoby. Jednym z nich jest użycie pliku nikto.conf, a innym sposobem jest uruchomienie bezpośrednio z wiersza poleceń.

Korzystanie z pliku Nikto.conf

Otwórz plik nikto.conf przy użyciu dowolnego edytora wiersza poleceń.

[root@localhost nikto-2.1.5]# vi nikto.conf

Wyszukaj zmienną „PROXY” i odkomentuj „#” na początku linii, jak pokazano. Następnie dodaj host proxy, port, użytkownika proxy i hasło. Zapisz i zamknij plik.

Proxy settings -- still must be enabled by -useproxy
PROXYHOST=172.16.16.37
PROXYPORT=8080
PROXYUSER=pg
PROXYPASS=pg

Teraz wykonaj Nikto, używając opcji „-useproxy”. Pamiętaj, że wszystkie połączenia będą przekazywane przez serwer proxy HTTP.

root@localhost nikto-2.1.5]# perl nikto.pl -h localhost -p 80 -useproxy
Przykładowe wyjście
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         2014-01-10 21:28:29 (GMT5.5)
---------------------------------------------------------------------------
+ Server: squid/2.6.STABLE6
+ Retrieved via header: 1.0 netserv:8080 (squid/2.6.STABLE6)
+ The anti-clickjacking X-Frame-Options header is not present.
+ Uncommon header 'x-squid-error' found, with contents: ERR_CACHE_ACCESS_DENIED 0
+ Uncommon header 'x-cache-lookup' found, with contents: NONE from netserv:8080
Korzystanie z wiersza poleceń

Aby uruchomić Nikto bezpośrednio z wiersza poleceń przy użyciu opcji „-useproxy”, ustawiając proxy jako argument.

root@localhost nikto-2.1.5]# perl nikto.pl -h localhost -useproxy http://172.16.16.37:8080/
Przykładowe wyjście
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         2014-01-10 21:34:51 (GMT5.5)
---------------------------------------------------------------------------
+ Server: squid/2.6.STABLE6
+ Retrieved via header: 1.0 netserv:8080 (squid/2.6.STABLE6)
+ The anti-clickjacking X-Frame-Options header is not present.
+ Uncommon header 'x-squid-error' found, with contents: ERR_CACHE_ACCESS_DENIED 0
+ Uncommon header 'x-cache-lookup' found, with contents: NONE from netserv:8080

Aktualizacja Nikto

Możesz automatycznie zaktualizować Nikto do najnowszych wtyczek i baz danych, po prostu uruchom polecenie „-update”.

[root@localhost nikto-2.1.5]# perl nikto.pl -update

Jeśli dostępne są nowe aktualizacje, zostanie wyświetlona lista pobranych nowych aktualizacji.

+ Retrieving 'nikto_report_csv.plugin'
+ Retrieving 'nikto_headers.plugin'
+ Retrieving 'nikto_cookies.plugin'
+ Retrieving 'db_tests'
+ Retrieving 'db_parked_strings'
+ Retrieving 'CHANGES.txt'
+ CIRT.net message: Please submit Nikto bugs to http://trac2.assembla.com/Nikto_2/report/2

Możesz także ręcznie pobrać i zaktualizować wtyczki i bazy danych Nikto ze strony http://cirt.net/nikto/UPDATES/.

Linki referencyjne

Strona główna Nikto