segunda-feira, 6 de março de 2023

Teste de Penetração + Nessus: Aproveitando de um backdoor

 Agora vou demonstrar um exemplo de como se aproveitar de uma vulnerabilidade. No relatório do Nessus apareceu a seguinte vulnerabilidade: "Bind Shell Backdoor Detection".


Se nós vermos a descrição temos o seguinte "Um shell está escutando em uma porta remota sem nenhuma autenticação sendo requirida. Um atacante pode usá-la conectando-a em uma porta remota e mandar comandos diretamente".




Na parte de baixo podemos ver mais detalhes, como o qual é o host (10.0.2.4) e a porta (1524):

Vamos testar usando o NetCat do Linux para ver se conseguimos uma conexão:
who
nc 10.0.2.4 1524

E no caso, consegui conectar ao Metasploitable:


Daqui consigo enviar qualquer comando para o outro computador:

Um exemplo, como entramos como root, não vai ter problema de eu executar o seguinte comando:

cat /etc/shadow

e obter os hashs das senhas dos usuários da máquina:










domingo, 5 de março de 2023

Teste de Penetração: Agressive Scan com Nessus

 Nessus é uma ferramenta de detecção de vulnerabilidades na rede desenvolvida pela Tenable. Ele possui uma versão profissional, mas também pode ser obtido a versão "Essential", antigamente conhecido como "Home" em versão anteriores. 

Para o treinamento, baixei o Nessus (fiz o cadastro para receber uma chave) e instalei na minha VM do Kali.

dpkg -i [arquivo do Nessus].deb

Depois de instalado, é só iniciar o serviço (ou daemon como se diz no Linux):

service nessusd start

Então, podemos acessar a interface gráfica pelo navegador no endereço https://127.0.0.1:8834 para finalizar a configuração, onde você criará uma conta interna, e finalizar a compilação dos puglins. Essa finalização pode demorar alguns minutos, mas se achar que está demorando demais, verifique se a máquina virtual está configurado com os requisitos mínimos e se tem espaço em disco sobrando. 

Terminado essa parte, podemos prosseguir com o passo de escaneamento.

sábado, 4 de março de 2023

VirtualBox: Placa de Rede do Windows XP

 Enquanto tentava fazer a configuração do VirtualBox para executar o Windows XP durante o curso, tive alguns problemas relacionado à configuração de rede. Ou o Windows XP não reconhecia o dispositivo, ou ele precisava de driver específico instalado. 

Em muitos sites, inclusive da rede StackExchange possui gambiarras para instalar o drive para que a rede funcione corretamente dentro da máquina virtual, entretanto, existe uma opção dentro da própria configuração da VM que dispensa qualquer configuração dentro do Windows XP que é a seguinte:


Tipo de Placa:  Intel PRO/1000 T Server (82543GC)

Esse tipo de placa é 100% compatível com Windows XP sem a necessidade de instalar nenhuma placa de video.

sexta-feira, 3 de março de 2023

Teste de Penetração: Montando o Laboratório de Treino

 Para o estudo de invasão, configurei o Oracle VM VirtualBox com os seguintes sistemas:

  • Kali Linux como sistema base, de onde nós realizaremos nossas ofensivas;
  • Metaspoitable Linux que é um sistema Linux que possui falhas de segurança propositais para justamente aprender a explorar essas falhas;
  • Windows XP SP1: Windows XP que todo mundo conhece;
  • Windows 8: Windows 8 
Depois de instalar os sistemas no Virtual Box, criar um rede NAT e configurar cada máquina para responder a essa mesma rede. 

Depois só testar a conectividade entre as máquinas. Para as máquinas Linux, usar o comando ifconfig para ver os ip atribuídos as máquinas e para o Windows, usar o ipconfig para o mesmo. 

Tendo os IP, no Kali, executar o ping para cada ip para verificar se o mesmo responde. Se responder está tudo certo.

Depois do VirtualBox estiver configurado, vamos instalar no Kali o Nessus Essential (versão grátis) e depois de instalado, poderemos começar a fazer algumas brincadeiras.

quinta-feira, 2 de março de 2023

Teste de Penetração: Fases de Teste de Penetração

 Finalmente voltando a publicar algo, depois de um ano bem agitado profissionalmente e de demitir três chefes complicados, agora finalmente tenho algo que vale a pena a se registrar. Estou fazendo um curso focado em Teste de Penetração, que simplificando, são testes com objetivo de buscar vulnerabilidades em sistemas. 

O que vou registrar hoje é algo mais teorico, mas que ajuda a entender o processo. As 5 fases do teste de penetração que são:

  1. Reconhecimento (Reconnaissance): Nesta fase você busca juntar todos os dados possíveis do seu alvo. Sistemas, versões e tecnologias. Não necessita ser dados totalmente técnicos, mas que seja relevante saber, por exemplo, se você quer testar a segurança de uma rede wifi, até onde você consegue obter o sinal.
  2. Escaneamento (Scanning): Aqui você vai usar as ferramentas para aprofundar com os dados, obtendo dados mais técnicos, como portas abertas, serviços que possam ter vulnerabilidades, etc.
  3. Exploitation: aqui nós de fato assumimos o controle de um ou mais aparelhos da rede, seja para extrair dados, seja para lançar ataques aos outros alvos
  4. Pós-Explotation: aqui determina o valor da máquina que comprometemos para ver se vale a pena manter o controle dela para um uso futuro
  5. Apagar os rastros (Covering Tracks): a última fase é apagar qualquer rastro que possa ajudar a detectar a invasão. 

terça-feira, 7 de junho de 2022

C#: Valores Nulos e Operadores Relacionados (??, ??=, ?. e ?[])

Depois de alguns anos, voltando a trabalhar com C# e com isso, algumas novidades. Se tem uma coisa que senti saudade no C# que o Java não tinha são o operador de coalescência nula e o operador de condicional nulos (também conhecido como Operador Elvis, porque parece um emoticon do Elvis Presley), muito útil para evitar o tal famoso NullPointerException. Mas vamos por partes:

terça-feira, 6 de julho de 2021

Javascript: Verificar se uma string é vazia | Valores considerados falsos

Estava eu precisando verificar num código Javascript se o valor de uma variável é uma string vazia, gerada de um split. O problema é que Javascript não tem um método isEmpty(), que foi a primeira coisa que me veio a cabeça. Entretanto, existe duas maneiras para verificar se a string está vazia. 

A primeira é verificando se o tamanho dela é 0. Para isso, podemos acessar a propriedade length de uma string, e verificar se o valor é 0, como no exemplo abaixo:

01. var variavel = "";
02. if(variavel.length!=0){
03.   alert("Processa a variavel string");
04. }

Entretanto, ela funciona bem quando temos certeza que estamos analisando uma variável do tipo String, e sabemos bem que Javascript é uma linguagem de tipagem fraca, então pode ser que o que normalmente seria string, viesse um valor nulo. Então como verificamos neste caso? 

No caso do Javascript, temos alguns valores que são considerados falsos em uma verificação booleana. são eles:
  • false (Boolean e o mais óbvio)
  • 0, -0, 0.0 e 0x0 (Number, todos os formatos de zero);
  • 0n e 0x0n (BigInt, este tipo de dado foi introduzido em 2020. Igual ao Number, mas como ambos os tipos não devem se misturar em operações, então vamos manter eles separados);
  • "", '' e `` (Strings vazias);
  • null (valor nulo);
  • undefined (valor indefinido);
  • NaN (Not a Number);
Voltando ao nosso problema original, podemos verificar se a nossa string é vazia e tratar a possibilidade de valor nulo da seguinte forma:

01. var variavel = "";
02. if(variavel){
03.   alert("Processa a variavel");
04. }

Então é isso por hoje.