Hacking e Pentesting de segurança com DE-ICE

O teste de penetração é o ato de testar vulnerabilidades de segurança em uma rede antes de ser explorada por um invasor ou hackers mal-intencionados. DE-ICE é uma máquina virtual que contém uma instalação Linux Slax e serve para praticar tanto para iniciantes até praticantes avançados.

Slax é um Live CD do sistema operacional GNU / Linux baseado na distribuição do Slackware. Slax é um sistema operacional Linux portátil, não ocupa muito espaço e oferece desempenho rápido.

Slax fornece um repositório de software pré-instalado e é amplamente utilizado por administradores para criar plataformas de teste, distribuições específicas e úteis para criar ferramentas de recuperação, testes de penetração, simulações de segurança e rede com máquinas virtuais para administradores de sistema e desenvolvedores de software ou especialistas em segurança, o sistema ocupa cerca de 190 MB. Uma interface gráfica pode ou não ser instalada, mas isso ocuparia muito espaço e tornaria o sistema lento.

O De-ICE pode ser instalado no VirtualBox ou gravado em CD para usar como LiveCD. Existem várias versões que apresentam diferentes níveis de dificuldade, a versão para iniciantes é DE-ICE1.100 e a mais complexa atualmente é DE-ICE1.140. Para este tutorial, usaremos a versão DE-ICE 1.120 que está disponível em https: //www.vulnhub… .e-ice-s1120,10 /.

Esta máquina virtual está especialmente preparada para testar nosso conhecimento e aplicar quaisquer técnicas ou ferramentas de teste de penetração.

Pentesting do De-ICE PenTest Lab 1.120
Para procedimentos de teste de penetração instale a versão DE-ICE.1.120 e uso Linux Mint e VirtualBox para instalar o DE-ICE. Ele pode ser usado a partir de qualquer sistema operacional que permita criar uma máquina virtual.

Começo a procurar meu ip atual em um terminal usando o comando ifconfig e o resultado é o seguinte:

 IP: 192.168.0.11

Em seguida, uso um software diferente de minha escolha, mas eles podem tentar outros para atender ao usuário.

A) eu uso Zenmap para escanear todos os hosts entre 1-254


Nos tutoriais:
  • Ferramenta visual Zenmap para teste de segurança de portas
  • Como usar o Nmap para escanear portas abertas em sua estrutura VPS e Metasploit para testar a segurança do servidor

Vimos algumas ferramentas para varredura de portas e como usá-las.

Abrimos o Zenmap, atribuo o IP e os parâmetros para que escaneie toda a rede e me mostre os equipamentos conectados e os IPs.

O IP 192.168.0.1 corresponde ao IP do Gateway do roteador com a porta 80 aberta e ao IP do roteador 192.168.0.10 com todas as portas fechadas.

Olhando a topologia e as características de cada host, determino que o ip 192.168.0.38 é o ip WiFi da máquina virtual e o ip 192.168.0.40 é a conexão ethernet é a máquina virtual.

Eu acesso o IP da máquina virtual ou VPS e encontro um site para cadastrar produtos.

A princípio [color = # b22222] uma falha grave [/ color] seria que este site não tivesse nenhum tipo de controle de acesso de usuário, desta forma teria acesso a todos os usuários da rede, por mais que fosse em uma intranet.

No Zenmap, também observo as portas verificadas para este host.

Encontro várias portas abertas para tentar ataques de força bruta de acesso forçando usuário e senha com ferramentas como Hydra ou John the Ripper, entre outras.

Também podemos ver a topologia para analisar cada host e com quem ele está conectado.

Assim desta forma podemos ver as características do equipamento, como a rede está configurada e quais são os hosts que podemos atacar.

B) Verificação de vulnerabilidade


Eu uso o OSWAP ZAP para fazer uma varredura de vulnerabilidade. Vimos essa ferramenta no tutorial:
  • Verificar a vulnerabilidade de um site com ZAP

Ele nos permite fazer a varredura de vulnerabilidades de um site, apresentando relatórios das vulnerabilidades encontradas.
Usando filtro e regras de varredura ativa e passiva, podemos encontrar as vulnerabilidades da web. Também nos mostra todas as páginas que contém a web, inclusive indica quais são as que recebem algum tipo de parâmetro por url.

Após a varredura posso ver a estrutura da web com as páginas programadas em PHP e as vulnerabilidades de acordo com os filtros aplicados.

No caso da página de inserção de produto vemos que ela recebe parâmetros através do método POST e também podemos ver os campos ou variáveis ​​que recebe.

C) Injeção de código XSS


Em seguida, iremos para a página para adicionar um produto (Adicionar Produto) e aplicar Técnicas de injeção XSS onde injeto código HTML e Javascript para ver se ele é vulnerável a esse tipo de ataque.

Como primeiro teste, adiciono o código html de uma imagem externa na descrição do produto, você pode selecionar qualquer um pesquisando no Google.

 
Se a imagem estiver vulnerável, ela será salva no banco de dados e será exibida na lista de produtos que teremos que pesquisar no combo pelo código que atribuímos, o resultado é o seguinte:

[color = # b22222] É vulnerável a XSS [/ color], pois podemos inserir qualquer código html ou javascript, incluindo links.

Inserimos um iframe no campo de descrição e salvamos:


Então procuramos o produto pelo código 003 e podemos ver o resultado

Usando esta técnica podemos inserir um formulário com simular um login e que os dados são realmente salvos em um banco de dados externo. Podemos desativar a lista de produtos causando um redirecionamento para outro site se em qualquer campo de registro de produto adicionarmos o seguinte código html:

 
Quando alguém tentar ver a lista de produtos, será automaticamente encaminhado para o site indicado neste caso Google.

D) injeção SQL Acesso ao banco de dados


Sqlmap é uma ferramenta muito útil para testar a segurança dos servidores de banco de dados nos tutoriais:
  • Ferramenta SQLMAP SQL Injection e hackeamento ético de banco de dados
  • BadStore: Web para testes de pentesting.

Eu uso o sqlmap para determinar se algum banco de dados está disponível usando os comandos a seguir.

 python sqlmap.py -u "http://192.168.0.40/products.php?id=1" --dbs

Podemos ver que o servidor é Apache 2.2.11, que usa php 5.2.9 e que o servidor de banco de dados é MySQL 5.0.12, também visualizamos todos os bancos de dados disponíveis, inclusive aqueles que são configuração dos dados do servidor base MySQL.

Em seguida, uso o comando para verificar se há tabelas no banco de dados merch, que é aquele que suponho ter a tabela de produtos que inserimos na web.

 python sqlmap.py -u "http://192.168.0.40/products.php?id=1" --tables -D merch

Encontramos a tabela que o site usa. Abaixo posso ver a tabela de produtos com o seguinte comando

 python sqlmap.py -u "http://192.168.0.50/products.php?id=1" --columns -D merch -T produtos

Estou procurando descobrir os usuários que têm uma conta Mysql tentando encontrar um administrador, por padrão eu uso o dicionário de dados sqlmap localizado na pasta sqlmap-dev / txt / wordlist.zip

Neste diretório encontraremos vários dicionários, o sqlmap se encarregará de descompactar e usar o arquivo, buscar usuários e senhas para ir testar se consigo descobrir e obter os nomes de usuário configurados no servidor MySQL, para isso utilizo o seguinte comando:

 python sqlmap.py -u "http://192.168.0.40/products.php?id=1" --users --passwords

Em seguida, procuro o tipo de usuário para ver quais são os privilégios de acesso de cada usuário para determinar quem são os administradores e quais são seus códigos de acesso.

 python sqlmap.py -u "http://192.168.0.65/products.php?id=1" -f -b --current-user --is-dba --is-dba --privileges --dbs - dump

Como resultado da execução, são reveladas as senhas de cada usuário para acessar os bancos de dados e quais privilégios possuem.

Quando a varredura é concluída, no final da lista podemos ver os privilégios de cada usuário e determinar quais usuários são administradores.

Acho que existem vários usuários administradores, portanto, vou levar o usuário jdavenport quem é um administrador e sua senha é babyl0n, para tentar acessar o sistema

Em seguida, tento violar a porta 22 SSH com os dados obtidos:

Vê-se que consegui acesso como administrador e tenho total controle do servidor. Usando o comando cd /, vamos ao diretório raiz e de lá podemos acessar qualquer setor, como ver as pastas e contas dos outros usuários

Por ter acesso por SSH com a combinação de nome de usuário e senha que obtivemos. Nossa próxima meta será o aumento de privilégios, embora já tenhamos um usuário root ou administrador.
Para manipular as permissões, devemos consultar os arquivos que contêm as permissões, usuários, grupos e códigos de acesso que esses arquivos estão no diretório / etc

  • Usuário e grupos com suas chaves no diretório: / etc / passwd
  • Grupos e permissões no diretório: / etc / sudores

Podemos acessar o arquivo de usuários e chaves do sistema através do seguinte comando:

 nano / etc / senha

Podemos percorrer os diretórios entre eles, podemos ver os arquivos na web que estávamos analisando e baixá-los posteriormente através do ftp ou do console ssh, podemos copiá-los para nosso diretório local se quisermos editá-los ou revisar o código para torná-lo mais seguro e teste novamente.

Agora que conhecemos os dados de acesso de um administrador, podemos entrar na máquina virtual.

Como evitar ataques de injeção de SQL
A segurança da web é muito importante aqui por causa de um problema de injeção de SQL que tomamos todo o servidor.

Você deve controlar o que é enviado como parâmetro nos urls, como:

 http://192.168.0.40/products.php?id=1
Ao fazer a consulta sql, devemos nos certificar de que caracteres ou parâmetros que não correspondam possam ser inseridos, por exemplo:
 $ sql = SELECT * FROM users WHERE user = 'jose' e senha = '12345' OR '1' = '1';
A frase é muito semelhante a um login de usuário onde pesquisamos se o usuário e senha existem, na tabela de usuários, se existe alguém cadastrado com um nome de usuário que enviamos como parâmetro e se a senha é '12345 ou se 1 é o mesmo para 1 '.

Esta expressão determina que se a chave não estiver correta, a expressão 1 igual a 1 é verdadeira e poderíamos entrar no sistema sem saber a senha.

Um método é escapar das variáveis, por exemplo, em PHP:

 mysql_real_escape_string ($ _ POST [‘usuário’]);
Se precisarmos enviar parâmetros por url devemos criptografá-los usando md5, sha1 ou base64 e podemos enviar vários dados criptografados para que o formato final do parâmetro não esteja diretamente relacionado aos dados ou campos do banco de dados.

Além disso, deve haver um sistema que evite escaneamento de portas e múltiplas conexões do mesmo IP, um firewall neste caso com iptables seria suficiente e um detector de intrusão.

Uma ferramenta que podemos usar é PortSentry ou Fail2Ban Ele é instalado a partir de um repositório linux e só temos que configurar quais portas devem ser protegidas, se uma dessas portas for escaneada irá bloquear automaticamente o IP que está nos atacando.

Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave