Búsqueda de sitios web

Nikto: un escáner CGI y vulnerabilidades de aplicaciones web para servidores web


Nikto Web Scanner es otra herramienta útil para el arsenal de cualquier administrador de Linux. Es un escáner web de código abierto lanzado bajo la licencia GPL, que se utiliza para realizar pruebas exhaustivas en servidores web para múltiples elementos, incluidos más de 6500 archivos /CGI potencialmente peligrosos. .

Lectura sugerida: WPSeku: un escáner de vulnerabilidades para encontrar problemas de seguridad en WordPress

Está escrito por Chris Solo y David Lodge para la evaluación de vulnerabilidad, busca versiones obsoletas en 1250 servidores web y Más de 270 problemas específicos de la versión. También escanea e informa en busca de complementos y software de servidor web obsoletos.

Características del escáner web Nikto

  1. Soporta SSL
  2. Admite proxy HTTP completo
  3. Admite texto, HTML, XML y CSV para guardar informes.
  4. Escanear en busca de múltiples puertos
  5. Puede escanear en múltiples servidores tomando entradas de archivos como la salida de nmap
  6. Soporte LibWhisker IDS
  7. Lo suficientemente capaz de identificar el software instalado con encabezados, archivos y favicons
  8. Registros para Metasploits
  9. Informes de encabezados "inusuales".
  10. Enumeración de usuarios de Apache y cgiwrap
  11. Autenticar hosts con Basic y NTLM
  12. Los análisis se pueden pausar automáticamente en un momento específico.

Requisitos de Nikto

Un sistema con instalación básica de Perl, Módulos Perl y OpenSSL debería permitir la ejecución de Nikto. Ha sido probado exhaustivamente en Windows, Mac OSX y varias distribuciones Unix/Linux como Red Hat, Debian, Ubuntu, BackTrack, etc.

Instalación de Nikto Web Scanner en Linux

La mayoría de los sistemas Linux actuales vienen con paquetes Perl, Módulos Perl y OpenSSL preinstalados. Si no están incluidos, puede instalarlos utilizando la utilidad predeterminada del administrador de paquetes del sistema llamada yum o apt-get.

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

A continuación, clone los últimos archivos fuente estables de Nikto desde su repositorio de Github, vaya al directorio Nikto/programs/ y ejecútelo usando perl:

git clone https://github.com/sullo/nikto.git
cd nikto/programs
perl nikto.pl -h 
Salida de muestra
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.

La "Opción host requiere un argumento" indica claramente que no incluimos los parámetros necesarios al realizar una prueba. Por lo tanto, necesitamos agregar un parámetro básico necesario para realizar una ejecución de prueba.

Pruebas básicas

El análisis básico requiere un host al que desee apuntar; de forma predeterminada, analiza el puerto 80 si no se especifica nada. El host puede ser un nombre de host o una dirección IP de un sistema. Puede especificar un host usando la opción “-h”.

Por ejemplo, quiero hacer un escaneo en una IP 172.16.27.56 en el puerto TCP 80.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56
Salida de muestra
- 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

Si desea escanear en un número de puerto diferente, agregue la opción “-p” [-port]. Por ejemplo, quiero hacer un escaneo en la IP 172.16.27.56 en el puerto TCP 443.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 443
Salida de muestra
- 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

También puede especificar hosts, puertos y protocolos utilizando una sintaxis de URL completa y se analizará.

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

También puede escanear cualquier sitio web. Por ejemplo, aquí hice un escaneo en google.com.

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

El comando anterior realizará un montón de solicitudes http (es decir, más de 2000 pruebas) en el servidor web.

Pruebas de múltiples puertos

También puede realizar escaneos de múltiples puertos en la misma sesión. Para escanear varios puertos en el mismo host, agregue la opción “-p” [-port] y especifique la lista de puertos. Los puertos se pueden definir como un rango (es decir, 80-443) o separados por comas (es decir, 80,443). Por ejemplo, quiero escanear los puertos 80 y 443 en el host 172.16.27.56.

[root@tecmint nikto-2.1.5]# perl nikto.pl -h 172.16.27.56 -p 80,443
Salida de muestra
- 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.
.....

Usando un proxy

Digamos que un sistema donde se ejecuta Nikto solo tiene acceso al host de destino a través de un proxy HTTP, la prueba aún se puede realizar de dos maneras diferentes. Una es usar el archivo nikto.conf y otra forma es ejecutarlo directamente desde la línea de comando.

Usando el archivo Nikto.conf

Abra el archivo nikto.conf usando cualquier editor de línea de comando.

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

Busque la variable "PROXY" y descomente el '#' del principio de las líneas como se muestra. Luego agregue el host proxy, el puerto, el usuario proxy y la contraseña. Guarde y cierre el archivo.

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

Ahora, ejecuta Nikto usando la opción “-useproxy”. Tenga en cuenta que todas las conexiones se transmitirán a través del proxy HTTP.

root@localhost nikto-2.1.5]# perl nikto.pl -h localhost -p 80 -useproxy
Salida de muestra
- 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
Usando la línea de comando

Para ejecutar Nikto directamente desde la línea de comando usando la opción “-useproxy” configurando el proxy como argumento.

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

Actualizando Nikto

Puede actualizar Nikto a los últimos complementos y bases de datos automáticamente, simplemente ejecute el comando “-update”.

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

Si hay nuevas actualizaciones disponibles, verá una lista de las nuevas actualizaciones descargadas.

+ 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

También puede descargar y actualizar manualmente los complementos y las bases de datos de Nikto desde http://cirt.net/nikto/UPDATES/.

Enlaces de referencia

Página de inicio de Nikto