0-day Power Shell ISE Filename Parsing Flaw RCE na prática

Share

O pesquisador de Segurança John Page (aka hyp3rlinx) descobriu recentemente um 0-day do Windows Power Shell ISE que executa códigos arbitrários ao ler scripts de forma incorreta por conterem colchetes como parte do nome do arquivo. O endereço da publicação do pesquisador está neste link: http://hyp3rlinx.altervista.org/advisories/WINDOWS-POWERSHELL-ISE-FILENAME-PARSING-FLAW-RCE-0DAY.txt

Neste post, enviado pelo meu aluno Almir, será demonstrado uma forma de implementação de um ataque utilizando este 0-day. Vamos lá?

Fiz uma demostração do funcionamento do exploit e como pentesters podem explorar esse tipo de vulnerabilidade, abaixo eu separei o código fonte disponível no documento em um arquivo .py conforme a imagem abaixo

Podemos notar que temos um código onde da linha 3 a linha 8 temos algumas variáveis sendo declaradas e recebendo valores, fname1 e fname2 são as saídas de arquivo em formato ps1 para ser executado no PowerShell temos as variáveis payload1 e payload2 que a função em python mk_ps_hijack_script() quando executa gera um output um arquivo ps1 na primeira interação recebendo o valor do payload1 que é atribuído na linha 7 com a saída o nome do arquivo de fname1 e na segunda interação gera outro arquivo ps1 com o valor de fname2 e o que recebe a variável payload2. Essa é uma função recursiva que é parada quando a variável global c que recebe 0 na linha 6 possuir um valor igual a 2.
Executamos nosso script no terminal conforme a figura abaixo.

Conforme a figura acima na primeira linha executamos os comandos ls -la para listar os arquivos e visualizar que nossa pasta possui apenas 2 arquivos porem esse exploitReverse.py irei explicar a frente, vamos entender a falha, na segunda vez eu executo o script exploitCalc.py e conforme a imagem os 2 arquivos que estão em nosso código são gerados na sequencia abrimos um servidor HTTP para na maquina alvo com um Windows 10 baixarmos e executarmos nossos scripts.

Abaixo podemos baixar nossos dois scripts ps1 pelo browser.

Baixamos os dois arquivos conforme a imagens abaixo.

Salvamos os dois scripts e tentamos executar o script [HelloWorldTutoria1].ps1

Conforme a imagem acima o usuário em que estamos logados no Windows 10 não possui privilégios para executar scripts ps1, porem isso não será problema podemos dar um ByPass nessa regra com o seguinte comando powershell -nop -exec bypass, conforme o gif abaixo podemos executar o seguinte script e ver que o powershell executa não somente o output no console a mensagem de Hello World como também abre a calculadora.

Conforme testamos nossa PoC esta funcionando então vamos agora comentar sobre aquele outro exploit .py chamado exploitReverse.py. Abaixo podemos ver o código fonte desse arquivo. Podemos notar que a variável na linha 5 onde no primeiro exploit que rodamos possuía um comando start “calc”, esse comando era o responsável por executar a calculadora e agora nesse exploit injetamos um comando para obter um shell reverso em PowerShell.

Podemos ver que na linha 5 tem escrito que é o ip que a vitima ira efetuar a conexão reversa. Abaixo vemos o ip do Kali que estamos usando.

Acima podemos ver que alterei onde estava IP DO ATACANTE para o meu ip do Kali. Vamos gerar os arquivos executando esse código e vamos remover os que geramos anteriormente e vamos subir um servidor HTTP para baixarmos nossos arquivos conforme a figura abaixo.

No Windows vamos remover da pasta onde baixamos nossos scripts todos os scripts que baixamos com o comando rm* e verificar se os arquivos foram todos removidos, conforme a imagem abaixo.

E vamos baixar novamente nossos arquivos que geramos com o arquivo exploitReverse.py, conforme o gif abaixo podemos ver a execução de nosso script que geramos e colocamos o netcat em modo listener para executar na porta 443, podemos perceber que o terminal powershell para e recebemos a conexão reversa em nossa maquina Kali, aperte o botão Enter e a shell em PowerShell ira aparecer para executar comandos no sistema alvo