Verificando a vulnerabilidade de qualquer site usando o Nikto

Olá a todos! Em março, a OTUS lança um novo Workshop Kali Linux . Antecipando o início do curso, preparamos uma tradução de material útil para você. Também queremos convidar todos para uma aula gratuita sobre o tema: "Ataques de negação de serviço e defesa contra eles" .





Antes de atacar qualquer site, um hacker ou um criminoso primeiro elabora uma lista de objetivos. Depois de fazer um bom reconhecimento e encontrar pontos fracos para “apontar”, ele precisará de uma ferramenta de verificação de servidor da Web como o Nikto, que o ajudará a encontrar vulnerabilidades - possíveis vetores de ataque.

O Nikto é um simples scanner de servidor da Web de código aberto que verifica um site e relata vulnerabilidades encontradas que podem ser exploradas ou invadidas. É também uma das ferramentas mais usadas para verificar vulnerabilidades em sites em todo o setor e, em muitos círculos, é considerado o padrão do setor.

Apesar de ser extremamente eficaz, essa ferramenta não age secretamente. Qualquer site com um sistema de detecção de intrusões ou outras medidas de segurança entenderá que está sendo verificado. O Nikto foi projetado para testar a segurança e ninguém pensou no sigilo de seu trabalho.

Como usar o Nikto


Se você simplesmente executar o Nikto no site de destino, poderá não entender o que fazer com as informações obtidas após a verificação. Nikto é realmente mais como um ponteiro laser, o que implica uma foto, e depois de um tempo você verá como ele funciona.

Para começar, vamos falar sobre metas. O alvo pode ser praticamente qualquer lugar em que um hacker possa atacar, como impressoras de rede ou um servidor da web. Quando passarmos a usar o Nikto um pouco mais tarde, precisaremos fornecer um dos três tipos de informações: o endereço IP do serviço local, o domínio do ataque ou o site SSL / HTTPS.

Antes de começar a digitalizar com o Nikto, é melhor realizar uma exploração preliminar com uma ferramenta aberta como o Maltego. Essas ferramentas podem ser úteis na criação de um perfil e na formação de uma lista mais específica de objetivos nos quais focar. Depois de fazer isso, você pode usar o Nikto para procurar possíveis vulnerabilidades para os destinos da sua lista.

Se você tiver sorte, será encontrada uma vulnerabilidade com uma exploração bem conhecida, o que significa que já existe uma ferramenta que ajudará a explorar esse ponto fraco. Usando uma ferramenta apropriada que explora automaticamente a vulnerabilidade, um hacker pode obter acesso ao alvo para realizar qualquer número de ataques ocultos, como, por exemplo, adicionar código malicioso.

Etapa 1: Instale o Nikto


Se você usa o Kali Linux, o Nikto será pré-instalado, para que você não precise baixar e instalar nada. Ele estará localizado na categoria Análise de Vulnerabilidade. Se por algum motivo você não tem isso, você pode baixar Nikto do seu repositório no GitHub ou simplesmente usar o comando apt install.

apt install nikto

Se você estiver usando um Mac, poderá usar o Homebrew para instalar o Nikto.

brew install nikto

Etapa 2: Conheça o Nikto


Antes de digitalizar servidores da Web com o Nikto, use o parâmetro -Help para ver tudo o que você pode fazer com esta ferramenta:

nikto -Help

Options:
       -ask+               Whether to ask about submitting updates
                               yes   Ask about each (default)
                               no    Don't ask, don't send
                               auto  Don't ask, just send
       -Cgidirs+           Scan these CGI dirs: "none", "all", or values like "/cgi/ /cgi-a/"
       -config+            Use this config file
       -Display+           Turn on/off display outputs:
                               1     Show redirects
                               2     Show cookies received
                               3     Show all 200/OK responses
                               4     Show URLs which require authentication
                               D     Debug output
                               E     Display all HTTP errors
                               P     Print progress to STDOUT
                               S     Scrub output of IPs and hostnames
                               V     Verbose output
       -dbcheck           Check database and other key files for syntax errors
       -evasion+          Encoding technique:
                               1     Random URI encoding (non-UTF8)
                               2     Directory self-reference (/./)
                               3     Premature URL ending
                               4     Prepend long random string
                               5     Fake parameter
                               6     TAB as request spacer
                               7     Change the case of the URL
                               8     Use Windows directory separator (\)
                               A     Use a carriage return (0x0d) as a request spacer
                               B     Use binary value 0x0b as a request spacer
        -Format+           Save file (-o) format:
                               csv   Comma-separated-value
                               htm   HTML Format
                               nbe   Nessus NBE format
                               sql   Generic SQL (see docs for schema)
                               txt   Plain text
                               xml   XML Format
                               (if not specified the format will be taken from the file extension passed to -output)
       -Help              Extended help information
       -host+             Target host
       -404code           Ignore these HTTP codes as negative responses (always). Format is "302,301".
       -404string         Ignore this string in response body content as negative response (always). Can be a regular expression.
       -id+               Host authentication to use, format is id:pass or id:pass:realm
       -key+              Client certificate key file
       -list-plugins      List all available plugins, perform no testing
       -maxtime+          Maximum testing time per host (e.g., 1h, 60m, 3600s)
       -mutate+           Guess additional file names:
                               1     Test all files with all root directories
                               2     Guess for password file names
                               3     Enumerate user names via Apache (/~user type requests)
                               4     Enumerate user names via cgiwrap (/cgi-bin/cgiwrap/~user type requests)
                               5     Attempt to brute force sub-domain names, assume that the host name is the parent domain
                               6     Attempt to guess directory names from the supplied dictionary file
       -mutate-options    Provide information for mutates
       -nointeractive     Disables interactive features
       -nolookup          Disables DNS lookups
       -nossl             Disables the use of SSL
       -no404             Disables nikto attempting to guess a 404 page
       -Option            Over-ride an option in nikto.conf, can be issued multiple times
       -output+           Write output to this file ('.' for auto-name)
       -Pause+            Pause between tests (seconds, integer or float)
       -Plugins+          List of plugins to run (default: ALL)
       -port+             Port to use (default 80)
       -RSAcert+          Client certificate file
       -root+             Prepend root value to all requests, format is /directory
       -Save              Save positive responses to this directory ('.' for auto-name)
       -ssl               Force ssl mode on port
       -Tuning+           Scan tuning:
                               1     Interesting File / Seen in logs
                               2     Misconfiguration / Default File
                               3     Information Disclosure
                               4     Injection (XSS/Script/HTML)
                               5     Remote File Retrieval - Inside Web Root
                               6     Denial of Service
                               7     Remote File Retrieval - Server Wide
                               8     Command Execution / Remote Shell
                               9     SQL Injection
                               0     File Upload
                               a     Authentication Bypass
                               b     Software Identification
                               c     Remote Source Inclusion
                               d     WebService
                               e     Administrative Console
                               x     Reverse Tuning Options (i.e., include all except specified)
       -timeout+          Timeout for requests (default 10 seconds)
       -Userdbs           Load only user databases, not the standard databases
                               all   Disable standard dbs and load only user dbs
                               tests Disable only db_tests and load udb_tests
       -useragent         Over-rides the default useragent
       -until             Run until the specified time or duration
       -update            Update databases and plugins from CIRT.net
       -useproxy          Use the proxy defined in nikto.conf, or argument http://server:port
       -Version           Print plugin and database versions
       -vhost+            Virtual host (for Host header)
   		+ requires a value

Etapa 3: usar a sintaxe básica


Como você pode ver na etapa anterior, o Nikto possui muitos casos de uso, mas, para nossos propósitos, usaremos a sintaxe básica <IP ou nome do host> com o endereço IP real ou o nome do host sem colchetes angulares.

nikto -h <IP or hostname>

No entanto, o Nikto pode verificar o SSL e a porta 443, que é usada pelos sites HTTPS (o HTTP usa a porta 80 por padrão). Portanto, não estamos limitados apenas ao rastreamento de sites antigos, podemos avaliar vulnerabilidades de sites usando SSL, que hoje é um requisito quase obrigatório para indexação nos resultados de pesquisa.

Se soubermos que o site de destino tem SSL, podemos especificar isso no Nikto para economizar algum tempo no rastreamento, adicionando -ssl ao final do comando.

nikto -h <IP or hostname> -ssl

Etapa 4: digitalizar sites com SSL


Por exemplo, vamos começar examinando o site pbs.orgpara ver os tipos de informações que os rastreamentos Nikto podem fornecer. Após conectar-se à porta 443, vemos algumas informações úteis sobre criptografia e outros detalhes, como, por exemplo, que o servidor está sendo executado no nginx, mas não há muita coisa interessante para nós aqui.

nikto -h pbs.org -ssl

- 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

Etapa 5: digitalizar o endereço IP


Agora que fizemos uma varredura rápida do site, podemos tentar usar o Nikto na rede local para encontrar servidores incorporados, como a página de login do roteador ou o serviço HTTP em outra máquina, que é simplesmente um servidor sem site. Para descobrir o endereço IP que usaremos ifconfig.

O endereço IP que precisamos refere-se a inet. Nele, podemos usar ipcalcpara obter o alcance da rede. Se você não possui o ipcalc, pode instalá-lo usando o comando apt install ipcalce tente novamente. O intervalo será após "Rede", no meu caso, é 192.168.0.0/24.

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

Agora queremos iniciar o Nmap para encontrar serviços que funcionam nessa faixa de rede. Vamos examinar a porta 80 usando nosso intervalo, para isso adicionaremos -oG (saída grepable) para obter apenas os hosts que estão em funcionamento, ou seja, aqueles que responderem dizendo que a porta 80 está aberta. Em seguida, salvaremos tudo isso em um arquivo, que eu nomearei nullbyte.txt; você, por sua vez, poderá nomear o que quiser.

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

Há um pequeno truque que ajudará a enviar todos os hosts diretamente ao Nikto para digitalização. Usamos catpara ler as entradas armazenadas em nosso documento nullbyte.txt(ou como você mesmo chamou). Depois disso, usamos o awk , uma ferramenta especial no Linux que o ajudará a encontrar o próximo modelo, onde Up significa que o host está ativo e imprimir $ 2 significa que você precisa imprimir a segunda palavra em cada linha, ou seja, apenas o endereço IP. Em seguida, enviaremos os dados recebidos para um arquivo chamado targetIP.txt(ou o que você quiser).

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

Agora podemos visualizar o conteúdo do nosso novo arquivo com cat para ver todos os endereços IP com a porta 80 aberta.

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

Este formato é ideal para o Nikto, pois pode interpretar facilmente esses arquivos. Assim, podemos enviar esta saída para o Nikto com o seguinte comando.

nikto -h targetIP.txt

Os resultados serão semelhantes aos que obtivemos ao digitalizar com SSL.

Etapa 6: Digitalizar o site HTTP


Analisamos um site e endereço IP seguros na rede local, agora é hora de procurar um domínio da web inseguro que use a porta 80. Neste exemplo, estou usando o afl.com.au , que não tinha SSL no momento em que estava digitalizando isso.

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

A partir das informações acima, entendemos que existe um servidor Varnish e alguns cabeçalhos que podem dizer como o site está configurado. No entanto, informações mais úteis são diretórios descobertos que podem ajudar a capturar arquivos de configuração que contêm credenciais ou outras coisas que não foram configuradas corretamente e estavam disponíveis sem querer.

Elementos prefixados com OSVDB são vulnerabilidades relatadas no Open Source Vulnerability Database (um site que foi fechado em 2016). É semelhante a outros bancos de dados de vulnerabilidade, como SecurityFocus , Microsoft Technet e Vulnerabilities and Exposures (https://cve.mitre.org/). Pessoalmente, o Banco de Dados Nacional de Vulnerabilidades está mais perto de mim .

Embora nossa verificação não tenha revelado nenhuma vulnerabilidade crítica que possa ser explorada, você pode usar a ferramenta de ajuda do CVE para converter o identificador OSVDB em um registro do CVE para poder usar um dos sites listados acima.

Suponha que você encontre algo que valha a pena explorar, por exemplo, CVE-2018-10933 , a vulnerabilidade do Libssh, que discutimos em mais detalhes anteriormente . O CVE contém informações sobre como explorá-lo, qual a gravidade da vulnerabilidade (por exemplo, uma vulnerabilidade crítica) e algumas outras informações que podem ajudar a determinar o vetor de ataque. Se isso é algo que vale a pena, você pode pesquisar com o Metasploit, já que alguém provavelmente já desenvolveu um módulo que ajudará a explorar facilmente essa vulnerabilidade.



Etapa 7: Digitalize com o Metasploit


Uma das melhores coisas do Nikto é que você pode simplesmente exportar as informações recebidas da digitalização para um formato que o Metasploit possa ler. Para fazer isso, basta usar os comandos para executar a verificação acima, mas adicione os sinalizadores -Format msf + a eles no final . Esse formato pode ajudá-lo a corresponder rapidamente aos dados obtidos através da exploração.

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

Portanto, no guia de hoje, passamos de definir um destino para encontrar vulnerabilidades nele e, em seguida, associamos as vulnerabilidades à exploração, para que não precisássemos fazer todo o trabalho manualmente. Como o Nikto não funciona secretamente, é aconselhável executar essas verificações por meio de uma VPN, Tor ou outro tipo de serviço, para que seu endereço IP não seja marcado como suspeito.

→  Inscreva-se para uma aula grátis

All Articles