Escaneo de Vulnerabilidades en Cualquier Sitio Web Usando Nikto

Usar Nikto

Antes de atacar cualquier sitio web, un hacker o especialista en Pentetration Test primero compilará toda la información necesaria como comenzar. Después de que hayan hecho un buen reconocimiento y encontrado los lugares adecuados para apuntar su alcance, utilizará una herramienta de escaneo de servidores web como Nikto para buscar vulnerabilidades que podrían ser vectores potenciales de ataque.

Nikto es un escáner de servidores web sencillo y de código abierto que examina un sitio web e informa sobre las vulnerabilidades que ha encontrado y que se pueden utilizar para explotar o hackear el sitio. Además, es una de las herramientas de vulnerabilidad de sitios web más utilizadas en la industria, y en muchos círculos, considerada el estándar de la industria.

Aunque esta herramienta es extremadamente efectiva, no es sigilosa (stealthy) en absoluto. Cualquier sitio con un sistema de detección de intrusos u otras medidas de seguridad detectará que está siendo escaneado. Inicialmente diseñado para pruebas de seguridad, el sigilo nunca fue una preocupación para este soft.

La manera correcta de usar Nikto

Si ejecuta Nikto por sí mismo en un sitio web específico, es posible que no sepa qué hacer con la información del análisis. Nikto es en realidad más como un primer paso para llamar a un golpe mucho más grande.

Primero, hablemos de la superficie del objetivo (target surface). Esto es casi cualquier lugar donde un hacker intente atacar y podría incluir cosas como impresoras expuestas a la red o un servidor web. Cuando lleguemos a usar Nikto más tarde, en relación al objetivo, tendremos que proporcionarle alguno de los siguientes datos: una dirección IP para un servicio local, un dominio web para atacar o un sitio web SSL/HTTPS.

Antes de comenzar el escaneo con Nikto, quizás es mejor hacer un reconocimiento adicional utilizando una herramienta de inteligencia de código abierto como Maltego. Herramientas como ésta pueden ayudar a crear un perfil y una lista más centrada de objetivos disponibles en los que se debería concentrar la atención. Una vez hecho esto, Nikto puede ser usado para afinar las vulnerabilidades potenciales de los objetivos de la lista.

Con algo de suerte, se encontrará una vulnerabilidad con su respectivo exploit, lo que significa que ya existe una herramienta para aprovechar la debilidad. Con la herramienta adecuada, que explotará automáticamente la vulnerabilidad, un hacker puede acceder al objetivo para realizar cualquier número de ataques entre bastidores, como añadir código para realizar una actividad maliciosa.

Instalar Nikto

Si estás usando Kali Linux, Nikto viene preinstalado, así que no tienes que descargar o instalar nada. Se ubicará en la categoría «Vulnerability Analysis». Si no lo tienes por alguna razón, puedes obtener Nikto desde su GitHub o simplemente usar el comando apt install.

apt install nikto

Si lo quieres instalar en una MAC, puedes usar Homebrew.

brew install nikto

Usar la Sintaxis Básica de Nikto

Nikto tiene muchas opciones, pero para nuestros propósitos, nos ceñiremos a la sintaxis básica de la siguiente manera. Sustituiremos el <IP o nombre de host> por la dirección IP real o el nombre de host sin corchetes angulares.

nikto -h <IP or hostname>

Sin embargo, Nikto es capaz de realizar un análisis que puede ir tras el SSL y el puerto 443, el puerto que utilizan los sitios web HTTPS (HTTP utiliza el puerto 80 de forma predeterminada). Por lo tanto, podemos realizar evaluaciones de vulnerabilidades en sitios que utilizan SSL, lo que hoy en día es casi un requisito para ser indexados en los resultados de búsqueda en Google.

Si sabemos que es un sitio SSL al que estamos apuntando, podemos especificarlo en Nikto para ahorrar tiempo en el análisis añadiendo -ssl al final del comando.

nikto -h <IP or hostname> -ssl

Escanear un sitio web habilitado para SSL

Por ejemplo, comencemos por escanear algún ejemplo para ver algunos de los tipos de información que un escaneo de Nikto mostrará. Después de que se conecta al puerto 443, vemos que hay información útil sobre el cifrado y una lista de otros detalles como que el servidor es Nginx, pero no hay una gran cantidad de datos interesantes aquí para nosotros.

- Nikto v2.1.6
------------------------------------------------------------------------------
- STATUS: Starting up!
+ Target IP:			54.225.198.196
+ Target Hostname:		pbs.org
+ Traget Port:			443
------------------------------------------------------------------------------
+ SSl Info:			Subject:	/CN=www.pbs.org
					Altnames:	account.pbs.org, admin.pgs.org, dipsy-tc.pbs.org, docs.pbs.org, ga.video.cdn.pbs.org, git.pbs.org, heart.ops.pbs.org, hub-dev.pbs.org, image.pbs.org,
                    			jaws..pbs.org, kids.pbs.org, koth-qa.svp.pbs.org, login.pbs.org, ops.pbs.org, pbs.org, player.pbs.org, projects.pbs.org, sentry.pbs.org, teacherline.pbs.org,
                                urs.pbs.org, video.pbs.org, weta-qa.svp.pbs.org, whut-qa.svp.pbs.org, wnet.video-qa.pbs.org, wnet.video-staging.pbs.org, www-cache.pbs.org, www.pbs.org
                    Ciphers:	ECDHE-RSA-AES128-GCM-SHA256
                    Issuer:		/C-US/0=Let's Encrypt/CN=Let's Encrypt Authority X3
+ Start Time:			2018-12-05 23:34:06 (GMT-8)
------------------------------------------------------------------------------
+ Server: nginx
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ Uncommon header 'x-pbs-fwsrvname' found, with contents: fwcacheproxy1
+ The site uses SSL and the Strict-Transport-Security HTTP header is not defined.
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ Root page / redirects to: https://www.pbs.org/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ RC-1918 IP address found in the 'x-pbs-appsvrip' header: The IP is "10.137.181.52".
+ Uncommon header 'x-cache-fs-status' found, with contents: EXPIRED
+ Uncommon header 'x-pbs-appsvrname' found, with contents: fwcacheproxy1
+ Uncommon header 'x-pbs-appsvrip' found, with contents: 10.137.181.52
+ Server leaks inodes via ETags, header found with file /pbs.org.zip, fields: 0x5b96537e 0x1678
+ 7446 requests: 0 error(s) and 10 item(s) reported on remote host
+ End Time:				2018-12-06 00:30:29 (GMT-8) (3383 seconds)
------------------------------------------------------------------------------
+ 1 host(s) tested

Escanear una dirección IP

Ahora que hemos realizado un análisis rápido de un sitio web, intentemos usar Nikto en una red local para encontrar servidores incrustados, como una página de inicio de sesión para un enrutador o un servicio HTTP en otra máquina que es sólo un servidor sin sitio web. Para empezar, busquemos nuestra dirección IP usando ifconfig.

ifconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST>  mtu 1500
        inet 192.168.0.48  netmask 0xffffff00  broadcast 192.168.0.255
        inet6 XXXX::XXX:XXXX:XXXX:XXXX%en0  prefixlen 64  secured scopeid 0x8
        ether XX:XX:XX:XX:XX:XX  txqueuelen 1000  (Ethernet)
        inet6 XXXX::XXX:XXXX:XXXX:XXXX%en0  prefixlen 64 autoconf secured
        inet6 XXXX::XXX:XXXX:XXXX:XXXX%en0  prefixlen 64 autoconf temporary
        nd6 options=201<PERFORMNUD,DAD>
        media: autoselect
        status: active

en2: flags=8863<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST>  mtu 1500
        options=60<TS04,TS06>
        ether XX:XX:XX:XX:XX:XX
        media: autoselect <full-duplex>
        status: inactive

La dirección IP que queremos es la de «inet». Entonces podemos ejecutar ipcalc en él para obtener nuestro rango de red. Si no tienes ipcalc, puede instalarlo con apt install ipcalc, luego inténtelo de nuevo. El rango estará al lado de «Network», en mi caso, 192.168.0.0/24.

ipcalc 192.168.0.48
Address:   192.168.0.48         11000000.10101000.00000000. 00110000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

Ahora, vamos a querer ejecutar Nmap para encontrar servicios que se ejecutan en el rango de red. Escanearemos el puerto 80 con nuestro rango y añadiremos -oG (salida grepable) para extraer sólo los hosts que están funcionando, es decir, los que responden indicando que el puerto 80 está abierto. Entonces lo guardaremos todo en un archivo, que voy a llamar analisis.txt, pero que podría llamarse de cualquier forma.

nmap -p 80 192.168.0.0/24 -oG analisis.txt
Starting Nmap 7.60 ( https://nmap.org ) at 2018-12-06 00:43 PST
Nmap scan report for 192.168.0.1
Host is up (0.021s latency).

PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 192.168.0.2
Host is up (0.088s latency).

PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 192.168.0.4
Host is up (0.032s latency).

PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 192.168.0.5
Host is up (0.020s latency).

PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for 192.168.0.11
Host is up (0.068s latency).

PORT   STATE  SERVICE
80/tcp closed http

Nmap scan report for 192.168.0.24
Host is up (0.023s latency).

PORT   STATE  SERVICE
80/tcp closed http

Nmap scan report for 192.168.0.31
Host is up (0.059s latency).

PORT   STATE  SERVICE
80/tcp closed http

Nmap scan report for 192.168.0.48
Host is up (0.030s latency).

PORT   STATE  SERVICE
80/tcp closed http

Nmap scan report for 192.168.0.60
Host is up (0.092s latency).

PORT   STATE  SERVICE
80/tcp closed http

Nmap done: 256 IP addresses (9 hosts up) scanned in 8.92 seconds

Hay un pequeño truco que puede enviar todos los hosts directamente a Nikto para escanearlos. Usamos CAT para leer la salida almacenada en nuestro documento analisis.txt (o como lo llames). Luego está awk, una herramienta de Linux que ayudará a buscar el siguiente patrón, donde UP significa que el host está arriba e imprimir $2 significa imprimir la segunda palabra en esa línea para cada uno, es decir, sólo la dirección IP. Luego, enviamos esos datos a un nuevo archivo llamado targetIP.txt (o como quieras llamarlo).

cat analisis.txt | awk '/Up$/{print $2}' | cat >> targetIP.txt

Ahora podemos ver el contenido de nuestro nuevo archivo con cat para ver todas las direcciones IP que tienen el puerto 80 abierto.

cat targetIP.txt
192.168.0.1
192.168.0.2
192.168.0.4
192.168.0.5
192.168.0.11
192.168.0.24
192.168.0.31
192.168.0.48
192.168.0.60

Esto es perfecto para Nikto porque puede interpretar fácilmente archivos como este. Así que podemos enviar esta salida a Nikto con el siguiente comando.

nikto -h targetIP.txt

Los resultados serán similares a los que obtuvimos al realizar el análisis SSL.

Escanear un sitio web HTTP

Hemos escaneado un sitio web seguro y una dirección IP en una red local, y ahora es el momento de ir tras un dominio web no seguro utilizando el puerto 80. Para este ejemplo, usaremos «afl.com.au», que no estaba usando SSL en el momento de realizar este análisis.

nikto -h www.afl.com.au
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          159.180.84.10
+ Target Hostname:    www.afl.com.au
+ Target Port:        80
+ Start Time:         2018-12-05 21:48:32 (GMT-8)
---------------------------------------------------------------------------
+ Server: instart/nginx
+ Retried via header: 1.1 varnish (Varnish/6.1), 1.1 e9ba0a9a729ff2960a04323bf1833df8.cloudfront.net (CloudFront)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ Uncommon header 'x-cache' found, with contents: Miss from cloudfront
+ Uncommon header 'x-instart-cache-id' found, with contents: 17:12768802731504004780::1544075250
+ Uncommon header 'v-cache-hit' found, with contents: Hit
+ Uncommon header 'x-amz-cf-id' found, with contents: Dr-r6OwO5kk9ABt4ejzpc7R7AIF6SuH6kfJHQgP0v6xZoHwMLE55rQ==
+ Uncommon header 'x-instart-request-id' found, with contents: 12814413144077601501:BEQ01-CPVNPPRY18:1552504721:0
+ Uncommon header 'x-oneagent-js-injection' found, with contents: true
+ Uncommon header 'grace' found, with contents: cache
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ Uncommon header 'x-ruxit-js-agent' found, with contents: true
+ Cookie dtCookie created without the httponly flag
+ Server banner has changed from 'instart/nginx' to 'nginx' which may suggest a WAF, load balancer or proxy is in place
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Entry '/sites/' in robots.txt returned a non-forbidden or redirect HTTP code (200)
+ Entry '/search/' in robots.txt returned a non-forbidden or redirect HTTP code (200)
+ Entry '*.mobileapp' in robots.txt returned a non-forbidden or redirect HTTP code (400)
+ Entry '*.liveradio' in robots.txt returned a non-forbidden or redirect HTTP code (400)
+ Entry '*.smartmobile' in robots.txt returned a non-forbidden or redirect HTTP code (400)
+ Entry '*.responsive' in robots.txt returned a non-forbidden or redirect HTTP code (400)
+ Entry '/stats?*/' in robots.txt returned a non-forbidden or redirect HTTP code (200)
+ "robots.txt" contains 8 entries which should be manually viewed.
+ OSVDB-3092: /sitemap.xml: This gives a nice listing of the site content.
+ OSVDB-3092: /psql_history: This might be interesting...
+ OSVDB-3092: /global/: This might be interesting...
+ OSVDB-3092: /home/: This might be interesting...
+ OSVDB-3092: /news: This might be interesting...
+ OSVDB-3092: /search.vts: This might be interesting...
+ OSVDB-3092: /stats.htm: This might be interesting...
+ OSVDB-3092: /stats.txt: This might be interesting...
+ OSVDB-3092: /stats/: This might be interesting...
+ OSVDB-3092: /Stats/: This might be interesting...
+ OSVDB-3093: /.wwwacl: Contains authorization information
+ OSVDB-3093: /.www_acl: Contains authorization information
+ OSVDB-3093: /.htpasswd: Contains authorization information
+ OSVDB-3093: /.access: Contains authorization information
+ OSVDB-3093: /.addressbook: PINE addressbook, may store sensitive e-mail address contact information and notes
+ OSVDB-3093: /.bashrc: User home dir was found with a shell rc file. This may reveal file and path information.
+ OSVDB-3093: /.bash_history: A user's home directory may be set to the web root, the shell history was retrieved. This should not be accessible via the web.
+ OSVDB-3093: /.forward: User home dir was found with a mail forward file. May reveal where the user's mail is being forwarded to.
+ OSVDB-3093: /.history: A user's home directory may be set to the web root, the shell history was retrieved. This should not be accessible via the web.
+ OSVDB-3093: /.htaccess: Contains configuration and/or authorization information
+ OSVDB-3093: /.lynx_cookies: User home dir found with LYNX cookie file. May reveal cookies received from arbitrary web sites.
+ OSVDB-3093: /.mysql_history: Database SQL?
+ OSVDB-3093: /.passwd: Contains authorization information
+ OSVDB-3093: /.pinerc: User home dir found with a PINE rc file. May reveal system information, directories and more.
+ OSVDB-3093: /.plan: User home dir with a .plan, a now mostly outdated file for delivering information via the finger protocol
+ OSVDB-3093: /.proclog: User home dir with a Procmail rc file. May reveal mail traffic, directories and more.
+ OSVDB-3093: /.procmailrc: User home dir with a Procmail rc file. May reveal subdirectories, mail contacts and more.
+ OSVDB-3093: /.profile: User home dir with a shell profile was found. May reveal directory information and system configuration.
+ OSVDB-3093: /.rhosts: A user's home directory may be set to the web root, a .rhosts file was retrieved. This should not be accessible via the web.
+ OSVDB-3093: /.sh_history: A user's home directory may be set to the web root, the shell history was retrieved. This should not be accessible via the web.
+ OSVDB-3093: /.ssh: A user's home directory may be set to the web root, an ssh file was retrieved. This should not be accessible via the web.
+ OSVDB-5709: /.nsconfig: Contains authorization information
+ /portal/changelog: Vignette richtext HTML editor changelog found.
+ 7587 requests: 4 error(s) and 55 item(s) reported on remote host
+ End Time:           2018-12-05 22:42:41 (GMT-8) (3249 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Arriba, podemos ver que hay un servidor de Varnish y algunas cabeceras que ayudan a indicar cómo está configurado el sitio web. Sin embargo, lo más jugoso son los directorios encontrados que pueden ayudar a ver archivos de configuración que pueden contener credenciales u otras cosas que han sido mal configuradas y dejadas accesibles involuntariamente.

Los elementos con el prefijo OSVDB son vulnerabilidades reportadas en «Open Source Vulnerability Database» (un sitio que se cerró en 2016). Es similar a otras bases de datos de vulnerabilidades como SecurityFocus, Technet de Microsoft y Common Vulnerabilities and Exposures. En este caso consultaremos «the National Vulnerability Database«.

Aunque no hay nada importante que se pueda explotar de este análisis, si lo hubiera, puede utilizar la herramienta de CVE reference tool para traducir el identificador OSVDB a una entrada CVE, de modo que puede utilizar uno de los otros sitios anteriores para leer más acerca de la vulnerabilidad.

Digamos que encontramos algunos que vale la pena explorar, como CVE-2018-10933, una vulnerabilidad de Libssh. El CVE contiene información sobre lo que se puede explotar, cuál es la puntuación de gravedad (por ejemplo, crítica) y alguna otra información que puede ayudar a determinar un vector de ataque. Si es algo que vale la pena usar, puedes buscar en Metasploit, ya que es probable que alguien ya haya desarrollado un módulo para que lo explote más fácilmente.

 CVE-2018-10933Pair Scans con Metasploit

Una de las mejores cosas de Nikto es que puedes exportar información a un formato que Metasploit pueda leer. Para ello, basta con utilizar los comandos anteriores para realizar el escaneo, pero añadiendo -Format msf+ al final de los mismo.

nikto -h <IP or hostname> -Format msf+

Por lo tanto, en esta guía, pasamos de determinar la superficie del objetivo a encontrar una vulnerabilidad y luego encontrarle su respectivo exploit para no tener que hacer todo el trabajo. Dado que Nikto no es una herramienta sigilosa (stealthy), es aconsejable realizar este tipo de escaneos desde una VPN, a través de Tor, u otro tipo de servicio para que su dirección IP real no se marque por comportamiento sospechoso.

Fuente: https://null-byte.wonderhowto.com/how-to/scan-for-vulnerabilities-any-website-using-nikto-0151729/

 

 

 

 

 

 

https://null-byte.wonderhowto.com/how-to/scan-for-vulnerabilities-any-website-using-nikto-0151729/

 

Comentarios