Nikto - Μια ευπάθεια εφαρμογών Web και σαρωτής CGI για διακομιστές Ιστού


Το Nikto Web Scanner είναι ένα άλλο εργαλείο που διαθέτει για το οπλοστάσιο οποιουδήποτε διαχειριστή Linux. Είναι ένας σαρωτής ιστού ανοιχτού κώδικα που κυκλοφορεί με την άδεια GPL, ο οποίος χρησιμοποιείται για την εκτέλεση ολοκληρωμένων δοκιμών σε διακομιστές Ιστού για πολλά στοιχεία, συμπεριλαμβανομένων πάνω από 6500 δυνητικά επικίνδυνων αρχείων/CGI .

Έχει γραφτεί από τον Chris Solo και τον David Lodge για αξιολόγηση Ερωτότητας, ελέγχει για παλιές εκδόσεις άνω των 1250 διακομιστών Ιστού και πάνω από 270 συγκεκριμένα προβλήματα έκδοσης. Επίσης, σαρώνει και αναφέρει για ξεπερασμένο λογισμικό διακομιστή ιστού και προσθήκες.

Χαρακτηριστικά του Nikto Web Scanner

  1. Υποστηρίζει SSL
  2. Υποστηρίζει πλήρη διακομιστή μεσολάβησης HTTP
  3. Υποστηρίζει κείμενο, HTML, XML και CSV για αποθήκευση αναφορών.
  4. Σάρωση για πολλές θύρες
  5. Μπορεί να πραγματοποιήσει σάρωση σε πολλούς διακομιστές λαμβάνοντας εισόδους από αρχεία όπως η έξοδος nmap
  6. Υποστήριξη LibWhisker IDS
  7. Με επαρκή ικανότητα αναγνώρισης εγκατεστημένου λογισμικού με κεφαλίδες, αρχεία και favicons
  8. Καταγραφή για Metasploits
  9. Αναφορές για ασυνήθιστες κεφαλίδες.
  10. Απαρίθμηση χρηστών Apache και cgiwrap
  11. Έλεγχος ταυτότητας κεντρικών υπολογιστών με Basic και NTLM
  12. Οι σαρώσεις μπορούν να τεθούν σε αυτόματη παύση σε μια καθορισμένη ώρα.

Απαιτήσεις Nikto

Ένα σύστημα με βασική εγκατάσταση Perl, Perl Modules, OpenSSL θα πρέπει να επιτρέπει την εκτέλεση του Nikto. Έχει δοκιμαστεί διεξοδικά σε Windows, Mac OSX και σε διάφορες διανομές Unix/Linux όπως Red Καπέλο, Debian, Ubuntu, BackTrack κ.λπ.

Εγκατάσταση του Nikto Web Scanner σε Linux

Τα περισσότερα από τα σημερινά συστήματα Linux διαθέτουν προεγκατεστημένα πακέτα Perl, Perl Modules και OpenSSL. Εάν δεν περιλαμβάνονται, μπορείτε να τα εγκαταστήσετε χρησιμοποιώντας το προεπιλεγμένο βοηθητικό πρόγραμμα διαχείρισης πακέτων συστήματος που ονομάζεται yum ή apt-get.

Σε Red Hat/CentOS/Fedora
[ ]# yum install perl perl-Net-SSLeay openssl
Σε Debian/Ubuntu/Linux Mint
[ ]# apt-get install perl openssl libnet-ssleay-perl

Στη συνέχεια, κλωνοποιήστε τα πιο πρόσφατα σταθερά αρχεία πηγής Nikto από το αποθετήριο Github, μετακινηθείτε στον κατάλογο Nikto/programs/ και εκτελέστε τον χρησιμοποιώντας το perl:

$ git clone https://github.com/sullo/nikto.git
$ cd nikto/programs
$ perl nikto.pl -h 
Δείγμα εξόδου
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.

Το \Ο κεντρικός υπολογιστής επιλογής απαιτεί όρισμα δηλώνει ξεκάθαρα ότι δεν συμπεριλάβαμε τις απαραίτητες παραμέτρους κατά την εκτέλεση μιας δοκιμής. Επομένως, πρέπει να προσθέσουμε μια βασική απαραίτητη παράμετρο για να κάνουμε μια δοκιμαστική εκτέλεση.

Βασικές δοκιμές

Η βασική σάρωση απαιτεί έναν κεντρικό υπολογιστή που θέλετε να στοχεύσετε, από προεπιλογή σαρώνει τη θύρα 80 εάν δεν έχει καθοριστεί τίποτα. Ο κεντρικός υπολογιστής μπορεί να είναι είτε όνομα κεντρικού υπολογιστή είτε Διεύθυνση IP ενός συστήματος. Μπορείτε να καθορίσετε έναν κεντρικό υπολογιστή χρησιμοποιώντας την επιλογή \-h”.

Για παράδειγμα, θέλω να κάνω μια σάρωση σε μια IP 172.16.27.56 στη θύρα TCP 80.

[ nikto-2.1.5]# perl nikto.pl -h 172.16.27.56
- 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

Εάν θέλετε να κάνετε σάρωση σε διαφορετικό αριθμό θύρας, προσθέστε την επιλογή \-p” [-port]. Για παράδειγμα, θέλω να κάνω σάρωση σε IP 172.16.27.56 στη θύρα TCP 443.

[ nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 443
- 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

Μπορείτε επίσης να καθορίσετε κεντρικούς υπολογιστές, θύρες και πρωτόκολλα χρησιμοποιώντας μια πλήρη σύνταξη URL και θα σαρωθεί.

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

Μπορείτε επίσης να σαρώσετε οποιονδήποτε ιστότοπο. Για παράδειγμα, εδώ έκανα μια σάρωση στο google.com.

[ nikto-2.1.5]# perl nikto.pl -h http://www.google.com
- 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)
….

Η παραπάνω εντολή θα εκτελέσει μια δέσμη αιτημάτων http (δηλαδή περισσότερες από 2000 δοκιμές) στον διακομιστή ιστού.

Δοκιμή πολλαπλών λιμένων

Μπορείτε επίσης να εκτελέσετε σάρωση πολλαπλών θυρών στην ίδια περίοδο λειτουργίας. Για να σαρώσετε πολλές θύρες στον ίδιο κεντρικό υπολογιστή, προσθέστε την επιλογή -p [-port] και καθορίστε τη λίστα των θυρών. Οι θύρες μπορούν να οριστούν ως εύρος (δηλαδή 80-443) ή ως διαχωρισμένες με κόμμα (δηλαδή 80.443). Για παράδειγμα, θέλω να σαρώσω μια θύρα 80 και 443 στον κεντρικό υπολογιστή 172.16.27.56.

[ nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 80,443
- 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.
.....

Χρήση διακομιστή μεσολάβησης

Ας υποθέσουμε ότι ένα σύστημα όπου εκτελείται το Nikto έχει πρόσβαση μόνο στον κεντρικό υπολογιστή-στόχο μέσω ενός διακομιστή μεσολάβησης HTTP, η δοκιμή μπορεί να εκτελεστεί με δύο διαφορετικούς τρόπους. Ο ένας χρησιμοποιεί το αρχείο nikto.conf και ένας άλλος τρόπος είναι να εκτελεστεί απευθείας από τη γραμμή εντολών.

Χρήση του αρχείου Nikto.conf

Ανοίξτε το αρχείο nikto.conf χρησιμοποιώντας οποιοδήποτε πρόγραμμα επεξεργασίας γραμμής εντολών.

[ nikto-2.1.5]# vi nikto.conf

Αναζητήστε τη μεταβλητή PROXY και αφαιρέστε το σχόλιο # από την αρχή των γραμμών, όπως φαίνεται. Στη συνέχεια, προσθέστε τον κεντρικό διακομιστή μεσολάβησης, τη θύρα, τον χρήστη μεσολάβησης και τον κωδικό πρόσβασης. Αποθηκεύστε και κλείστε το αρχείο.

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

Τώρα, εκτελέστε το Nikto χρησιμοποιώντας την επιλογή -useproxy. Λάβετε υπόψη ότι όλες οι συνδέσεις θα αναμεταδοθούν μέσω του διακομιστή μεσολάβησης HTTP.

 nikto-2.1.5]# perl nikto.pl -h localhost -p 80 -useproxy
- 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
Χρήση γραμμής εντολών

Για να εκτελέσετε το Nikto απευθείας από τη γραμμή εντολών χρησιμοποιώντας την επιλογή -useproxy, ορίζοντας τον διακομιστή μεσολάβησης ως όρισμα.

 nikto-2.1.5]# perl nikto.pl -h localhost -useproxy http://172.16.16.37:8080/
- 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

Ενημέρωση Nikto

Μπορείτε να ενημερώσετε το Nikto στις πιο πρόσφατες προσθήκες και τις βάσεις δεδομένων αυτόματα, απλώς εκτελέστε την εντολή -ενημέρωση.

[ nikto-2.1.5]# perl nikto.pl -update

Εάν υπάρχουν διαθέσιμες νέες ενημερώσεις, θα δείτε μια λίστα με νέες ενημερώσεις που έχουν ληφθεί.

+ 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

Μπορείτε επίσης να κάνετε λήψη και ενημέρωση των προσθηκών και βάσεων δεδομένων Nikto με μη αυτόματο τρόπο από τη διεύθυνση http://cirt.net/nikto/UPDATES/.

Σύνδεσμοι αναφοράς

Ιστοσελίδα Nikto