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.
|
|
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.
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
|
|
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>
|
|
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
|
|
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
|
|
Encontrei a flag de usuário: /user.txt
|
|
Encontrei a flag de root: /root/root.txt
|
|