Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
TwoMillion-Machine-Writeup — De desofuscar code.js a root, CVE-2023-0386 | Kitploit
Herramientas/GitHubGitHub/anxs3c/twomillion-machine-writeup
Escalada de PrivilegiosReconocimientoExplotaciónMovimiento LateralIngeniería InversaExplotación de Aplicaciones WebCTFPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubanxs3c/twomillion-machine-writeup
17hace 3 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

TwoMillion-Machine-Writeup

De desofuscar code.js a root, CVE-2023-0386

Ver Repositorio

Acerca de la máquina

TwoMillion es una máquina Linux de dificultad Easy que fue lanzada para celebrar la llegada de 2 millones de usuarios en HackTheBox. La máquina incluye una versión antigua de la plataforma HackTheBox que contiene el antiguo código de invitación pirateable. Después de hackear el código de invitación, se puede crear una cuenta en la plataforma. La cuenta se puede utilizar para enumerar varios endpoints de la API, uno de los cuales se puede usar para elevar al usuario a Administrador. Con acceso administrativo, el usuario puede realizar una inyección de comandos en el endpoint de generación de VPN de administrador, obteniendo así una shell del sistema. Se descubre que un archivo .env contiene credenciales de la base de datos y, debido a la reutilización de contraseñas, los atacantes pueden iniciar sesión como usuario admin en la máquina. Se descubre que el kernel del sistema está desactualizado y se puede usar CVE-2023-0386 para obtener una shell root

Resultados del escaneo

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

Configuración del host

Añadí 2million.htb a mi archivo /etc/hots


Descubrimiento de rutas

Realicé un descubrimiento de rutas en 2million.htb usando gobuster

Durante la enumeración, descubrí el endpoint /invite


Después de navegar a la página /invite


Mientras inspeccionaba la página, noté que cargaba un archivo Javascript llamado inviteapi.min.js que contenía código ofuscado:

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,{}))

Desofuscación

Desofusqué el código usando de4js, lo que produjo el siguiente JavaScript legible:


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() : genera un nuevo código de invitación
verefyInviteCode(code) : comprueba si un código es válido

y para entenderlo mejor, intercepté la solicitud de verificación:


la API usa respuestas JSON


Generando el código de invitación y descifrado ROT13

Fui a la consola del navegador y ejecuté makeInviteCode()


Noté que los datos estaban cifrados con el cifrado ROT13


Después del descifrado, encontré el endpoint /api/v1/invite/generate, y entonces generé el código de invitación


Descifrado Base64

Clave
La clave 2F4BN-YI8OH-B0SCL-L8OE6 se insertó y fue aceptada correctamente

Registro

Página de inicio

Página de acceso
No muchas páginas de este sitio funcionan correctamente; la página de acceso es donde las cosas se ponen interesantes

Enumeración de endpoints de la API
Subí el archivo VPN haciendo clic en el botón connection pack e intercepté la GET request


Luego ejecuté una solicitud curl con las opciones verbose y silent para enumerar los API endpoints disponibles



El servidor respondió con una lista JSON de endpoints de API

El administrador tenía 3 endpoints de API con métodos GET, POST y PUT

Cuando intenté generar la clave de admin con el endpoint de admin /api/v1/admin/vpn/generate, la clave no se generó porque yo no era el admin, y el primer endpoint de admin /api/v1/admin/auth lo confirmó





Escalada vertical de privilegios en la aplicación web: escalar al usuario estándar actual a administrador


Después de descubrir el formato correcto de la PUT request con Content-Type: application/json y los required parameters, escalé exitosamente mi usuario a administrador

Descargar herramienta