Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
TwoMillion-Machine-Writeup — From deobfuscating code.js to root, CVE-2023-0386 | Kitploit
Ferramentas/GitHubGitHub/anxs3c/twomillion-machine-writeup
Privilege EscalationReconnaissanceExploitationLateral MovementReverse EngineeringWeb Application ExploitationCTFPenetration TestingLearning & EducationLabs & Practice
GitHubanxs3c/twomillion-machine-writeup

TwoMillion-Machine-Writeup

há 2 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

From deobfuscating code.js to root, CVE-2023-0386

Ver Repositório

Sobre a Máquina

TwoMillion é uma máquina Linux de dificuldade Fácil que foi lançada para comemorar a marca de 2 milhões de usuários no HackTheBox. A máquina apresenta uma versão antiga da plataforma HackTheBox que inclui o antigo código de convite hackeável. Depois de hackear o código de convite, uma conta pode ser criada na plataforma. A conta pode ser usada para enumerar vários endpoints de API, um dos quais pode ser usado para elevar o usuário a Administrador. Com acesso administrativo, o usuário pode realizar uma injeção de comando no endpoint de geração de VPN do admin, obtendo assim um shell de sistema. Um arquivo .env é encontrado contendo credenciais de banco de dados e, devido à reutilização de senhas, os atacantes podem entrar como usuário admin na máquina. O kernel do sistema está desatualizado e o CVE-2023-0386 pode ser usado para obter um shell root.

Resultados da Varredura

portservicedetails
22/tcpsshsyn-ack ttl 63 OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcphttpsyn-ack ttl 63 nginx 2million.htb

Configuração do host

Adicionei 2million.htb ao meu arquivo /etc/hots


Descoberta de Caminhos

Realizei uma descoberta de caminhos em 2million.htb usando gobuster

Durante a enumeração, descobri o endpoint /invite


Após navegar para a página /invite


Ao inspecionar a página, notei que ela carregava um arquivo JavaScript chamado inviteapi.min.js contendo código ofuscado:

root@kitploit:~
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('1 i(4){h 8={"4":4};$.9({a:"7",5:"6",g:8,b:\'/d/e/n\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}1 j(){$.9({a:"7",5:"6",b:\'/d/e/k/l/m\',c:1(0){3.2(0)},f:1(0){3.2(0)}})}',24,24,'response|function|log|console|code|dataType|json|POST|formData|ajax|type|url|success|api/v1|invite|error|data|var|verifyInviteCode|makeInviteCode|how|to|generate|verify'.split('|'),0,{}))

Desofuscação

Desofusquei o código usando de4js, que produziu o seguinte JavaScript legível:


root@kitploit:~
function verifyInviteCode(code) {
    var formData = {
        "code": code
    };
    $.ajax({
        type: "POST",
        dataType: "json",
        data: formData,
        url: '/api/v1/invite/verify',
        success: function (response) {
            console.log(response)
        },
        error: function (response) {
            console.log(response)
        }
    })
}

function makeInviteCode() {
    $.ajax({
        type: "POST",
        dataType: "json",
        url: '/api/v1/invite/how/to/generate',
        success: function (response) {
            console.log(response)
        },
        error: function (response) {
            console.log(response)
        }
    })
}

makeInviteCode() : gera um novo código de convite
verefyInviteCode(code) : verifica se um código é válido

e, para entender mais, interceptei a solicitação de verificação:


a API usa respostas JSON


Gerando o código de convite e descriptografia ROT13

Fui ao console do navegador e executei makeInviteCode()


Percebi que os dados estavam criptografados com a cifra ROT13


Após a descriptografia, encontrei o endpoint /api/v1/invite/generate; então gerei o código de convite


Descriptografia Base64

Chave
A chave 2F4BN-YI8OH-B0SCL-L8OE6 foi inserida e aceita com sucesso

Registro

Página Inicial

Página de Acesso
Poucas páginas deste site funcionam corretamente; a página de acesso é onde as coisas ficam interessantes

Enumeração de Endpoints da API
Fiz upload do arquivo VPN clicando no botão connection pack e interceptei a requisição GET


Em seguida, executei uma requisição curl com as opções verbose e silent para enumerar API endpoints disponíveis



O servidor respondeu com uma lista JSON de API endpoints

O admin tinha 3 endpoints de API com métodos GET, POST e PUT

Quando tentei gerar a chave de admin com o endpoint /api/v1/admin/vpn/generate, a chave não foi gerada porque eu não era o admin, e o primeiro endpoint /api/v1/admin/auth confirmou isso





Escalação Vertical de Privilégio na Aplicação Web: elevar o usuário padrão atual a administrador


Depois de descobrir o formato correto da requisição PUT com Content-Type: application/json e os parâmetros necessários, elevei meu usuário a administrador com sucesso











Injeção de Comando no SO

Injetei ;whoami; no campo username; minha suspeita recaiu sobre as funções PHP exec() ou system(), que são comuns em recursos exclusivos de admin e frequentemente não possuem sanitização adequada

Por exemplo, o código vulnerável provavelmente se parecia com isto:

root@kitploit:~
$username = $json->username;

exec("/usr/bin/cat /var/www/html/VPN/user/$username.ovpn");

Este endpoint POST /api/v1/admin/vpn/generate estava vulnerável, e a Injeção de Comando no SO foi executada com sucesso




Acesso Inicial: Reverse Shell via Injeção de Comando no SO (bypass base64)

Codificar payload para contornar restrições

Como a aplicação tinha restrições que impediam caracteres especiais, codifiquei em base64 o comando do payload do reverse shell para contornar essa restrição


Injetar o payload codificado

Injetei o payload no username parameter, canalizando-o para base64 -d | bash para decodificação e execução:


Listener Netcat


Acesso Inicial Obtido

O payload foi executado com sucesso, retornando um reverse shell como o www-data user


Movimentação Lateral

Tentei movimentação lateral do usuário www-data para o usuário admin usando diversas técnicas

Ao inspecionar o diretório /var/www/html, descobri um arquivo .env contendo credenciais de banco de dados:


A senha descoberta foi reutilizada com sucesso para autenticar via SSH e MySQL

SSH

MySQL


Escalação de Privilégio no SO

Após obter o acesso inicial como o usuário admin, realizei enumeração do sistema para identificar possíveis vetores de escalação de privilégio

Tentei todos os truques mais comuns de escalação de privilégio, como binários SUID, capabilities, direitos sudo, cron jobs; nada funcionou. Então verifiquei as variáveis de ambiente em busca de sequestro de PATH ou variáveis sensíveis, e encontrei uma MAIL variable apontando para /var/mail/admin


Fui verificar o conteúdo do e-mail e notei que o admin havia sido alertado para corrigir o kernel contra uma OverlayFS/FUSE vulnerability


versão do kernel

versão do SO

O kernel nunca foi atualizado, confirmando que o administrador ignorou ou esqueceu o aviso de segurança

A enumeração do kernel revelou a versão 5.15.70-051570-generic, que é vulnerável a CVE-2023-0386 escalação local de privilégio OverlayFS/FUSE

Com a vulnerabilidade confirmada, prossegui para obter um exploit POC público

Clonei o POC e o transferi para a máquina alvo

Em seguida, executei-o e obtive acesso root com sucesso


Cadeia de Ataque



Recursos

CVE-2023-0386 - CVE-2023-0386 - Injeção de Comando no SO



Aviso Legal: Esta máquina foi comprometida em um ambiente de teste de penetração autorizado

Baixar ferramenta
FaseTécnicaAlvoResultado
1. ReconhecimentoVarredura de portas22 (SSH), 80 (HTTP)Descoberta de serviços
Descoberta de caminhos/invitePágina de convite encontrada
Desofuscação de JSinviteapi.min.jsEndpoints da API expostos
2. Acesso InicialGeração de convitePOST /api/v1/invite/generateCódigo de convite válido
RegistroPOST /api/v1/user/registerUsuário padrão criado
3. Privesc WebEnumeração de APIGET /api/v1Endpoints de admin descobertos
Escalação verticalPUT /api/v1/admin/settings/updateis_admin: 0 -> 1
4. Acesso ao SistemaInjeção de comandoPOST /api/v1/admin/vpn/generateusername=test;id;
Reverse ShellPayload codificado em base64Shell www-data
5. Movimentação LateralDescoberta de arquivos/var/www/html/.envadmin:SuperDuperPass123
Reutilização de SSHssh [email protected]Acesso ao usuário admin
6. Escalação RootEnumeração do kerneluname -r -> 5.15.70CVE-2023-0386 identificado
Aviso de e-mail/var/mail/adminOverlayFS/FUSE confirmado
Execução do exploit./fuse && ./expShell root