Write-up da maquina Vitae da Crowsec
A máquina Vitae é disponibilizada no laboratório da Crowsec, ou seja, para ter acesso a essa máquina é preciso ser aluno do Webhacking-na-pratica 2.0. | ||
A máquina está classificada como nível Médio e seu sistema operacional é Linux. | ||
Reconhecimento | ||
O primeiro passo é descobrir quais os serviços que estão sendo executados na máquina, para esse propósito utilizei o Nmap com os seguintes parâmetros: | ||
Nmap -sV -vvv <IP-da-Maquina> | ||
e obtive o seguinte resultado: | ||
Iniciei a análise do serviço http na porta 80. | ||
Iniciei um reconhecimento da aplicação, e encontrei um recurso de enviar curriculum | ||
Ao clicar na opção "Send Your Resume", fui redirecionado para essa pagina | ||
Uma aplicação open source para recrutamento de funcionários. | ||
Cliquei na opção “Apply to Position” | ||
Então foi disponibilizado um formulário de cadastro | ||
No campo de “Enter your e-mail address” inserir exemplo@email.com e pressionei “Continue to Application”, então foi disponibilizado outro formulário com mais campos. O campo que mais destacou-se foi “Import Resume" | ||
Porque permitia enviar um arquivo para o servidor, então interagir com a aplicação, mas sem sucesso. Então iniciei uma pesquisa por vulnerabilidades usando fontes publicas. | ||
| ||
e descobrir que a versão do Opencats estava vulnerável a XXE. | ||
EXPLORANDO O XXE | ||
Encontrei um artigo escrito por Reginald Dodd que demostrava a exploração do Opencats. então seguir os passos descritos no artigo. https://doddsecurity.com/312/xml-external-entity-injection-xxe-in-opencats-applicant-tracking-system/ | ||
Iniciei o LibreOffice Writer, inserir uma palavra de minha preferência e salvei como resume.docx | ||
Depois utilizei o utilitário unzip para descomprimir o arquivo .docx. | ||
Abri o arquivo word/document.xml, e inserir “ <!DOCTYPE test [<!ENTITY test SYSTEM ‘php://filter/convert.base64-encode/resource=/etc/passwd’>]> ” que utiliza o php wrapper para encoda o conteúdo do arquivo /etc/passwd em base64 e salva na entity test. | ||
Em seguida, procurei na 2º linha do arquivo pela palavra aleatória que inserir no .docx e alterei para o nome da entity: &test; . | ||
Salvei o arquivo e em seguida comprimir o arquivo: zip resume.docx word/document.xml | ||
retornei para aplicação, selecionei o arquivo resume.docx e pressionei upload | ||
E obtive o seguinte resultado: | ||
Possivelmente o conteúdo do /etc/passwd em base64. Para confirmar copiei todo o output e colei no site base64decode.org | ||
Eeee | ||
O conteúdo do passwd :D | ||
| ||
Obtendo credencias via XXE | ||
Procurei pelo repositório público no github do opencats para procurar por arquivos sensíveis para ler no servidor e encontrei o config.php. https://github.com/opencats/OpenCATS | ||
Utilizei a vulnerabilidade do XXE para ler o config.php. eee | ||
encontrei uma chave privada RSA do SSH. | ||
Salvei a chave em um arquivo | ||
Utilizei o script “ssh2john.py” disponibilizado pela ferramenta “John the ripper”, | ||
Para transformar a chave privada em um hash para o John “quebrar”. | ||
Comando: python2 /usr/share/John/ss2john.py <arquivo com a chave>. | ||
Utilizei o John para quebrar o hash, com o comando: john –wordlist=rockyou.txt <arquivo com o hash> | ||
Obtendo acesso ao servidor | ||
De posse da senha, precisei identificar o usuário que corresponde a essa senha. | ||
analisando o conteúdo do passwd que extrair , identifiquei dois usuários: ‘sysadmin’ , ‘ubuntu’. | ||
Com o comando ssh usuario@ip, identifiquei que era preciso utilizar a chave para conecta-se ao ssh. | ||
Utilizei a chave que salvei para conectar.(OBS:configure as permissões para 600 para ter sucesso na conexão ssh) | ||
O comando que utilizei: ssh -i key usuario@<IP> | ||
Depois de testar os usuários, obtive sucesso com o usuário sysadmin | ||
Acesso ao servidor :D | ||
| ||
Escalação de privilegio | ||
Executei sudo -l e obtive o seguinte resultado: | ||
O binário exiftool estava com permissão de sudo para o usuário sysadmin. | ||
Pesquisei métodos para escalar privilegio com esse binário e encontrei uma CVE e um excelente artigo pra auxiliar. CVE-2021-22204, https://blog.convisoappsec.com/um-caso-de-estudo-sobre-a-cve-2021-22204-exiftool-rce/ | ||
Criei a payload para executar o comando como root | ||
Utilizando o utilitário bzz para comprimir a payload | ||
Executei o djumake com os seguintes parâmetros e adicionando a payload comprimida ao arquivo | ||
Gerou um arquivo chamado exploit.djvu | ||
Executei o comando sudo exiftool exploit.djvu | ||
Eeeeeeeeee root :D | ||
| ||
Flags | ||
Encontrei a flag de usuário: /user.txt | ||
Encontrei a flag de root: /root/root.txt | ||