Crowsec Vitae Write-up
4
0

Crowsec Vitae Write-up

Write-up da maquina Vitae da Crowsec

Roberto Francisco
4 min
4
0

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.

man using MacBook inside dark room

                                                        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:

undefined

Iniciei a análise do serviço http na porta 80.

undefined

Iniciei um reconhecimento da aplicação, e encontrei um recurso de enviar curriculum

undefined

Ao clicar na opção "Send Your Resume", fui redirecionado para essa pagina

undefined

Uma aplicação open source para recrutamento de funcionários.

Cliquei na opção “Apply to Position”

undefined

Então foi disponibilizado um formulário de cadastro

undefined

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"

undefined

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.

undefined

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

undefined

Depois utilizei o utilitário unzip para descomprimir o arquivo .docx.

undefined

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.

undefined

Em seguida, procurei na 2º linha do arquivo pela palavra aleatória que inserir no .docx e alterei para o nome da entity: &test; .

undefined

Salvei o arquivo e em seguida comprimir o arquivo: zip resume.docx word/document.xml

undefined

retornei para aplicação, selecionei o arquivo resume.docx e pressionei upload

undefined

E obtive o seguinte resultado:

undefined

Possivelmente o conteúdo do /etc/passwd em base64. Para confirmar copiei todo o output e colei no site base64decode.org

Eeee

undefined

O conteúdo do  passwd :D

undefined

                                       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

undefined

Utilizei a vulnerabilidade do XXE para ler o config.php. eee

undefined

encontrei uma chave privada RSA do SSH.

Salvei a chave em um arquivo

undefined

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>.

undefined

Utilizei o John para quebrar o hash, com o comando: john –wordlist=rockyou.txt <arquivo com o hash>

undefined

                                           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.

undefined

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

undefined

Acesso ao servidor :D

undefined

                                          Escalação de privilegio

Executei sudo -l e obtive o seguinte resultado:

undefined

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

undefined

Utilizando o utilitário bzz para comprimir a payload

undefined

Executei o djumake com os seguintes parâmetros e adicionando a payload comprimida ao arquivo

undefined

Gerou um arquivo chamado exploit.djvu

undefined

Executei o comando sudo exiftool exploit.djvu

undefined

Eeeeeeeeee root :D

undefined

                                                            Flags

Encontrei a flag de usuário: /user.txt

undefined

Encontrei a flag de root: /root/root.txt

undefined