Skip to content
KitploitKITPLOIT
HerramientasBlog
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.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

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

TwoMillion-Machine-Writeup

hace 2 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

From deobfuscating code.js to 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:

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

Desofuscación

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


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() : 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











Inyección de comandos del sistema operativo

Inyecté ;whoami; en el campo de nombre de usuario; mi sospecha recayó en las funciones php exec() o system(), que son comunes en funciones exclusivas de administrador y a menudo carecen de una sanitización adecuada

Por ejemplo, el código vulnerable probablemente se veía así:

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

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

Este endpoint POST /api/v1/admin/vpn/generate era vulnerable, y la inyección de comandos del sistema operativo se realizó con éxito




Acceso inicial: Reverse Shell mediante inyección de comandos del SO (bypass de base64)

Codificar el payload para evadir las restricciones

Dado que la aplicación tenía restricciones que impedían caracteres especiales, codifiqué en base64 el comando del payload de reverse shell para evadir esta restricción


Inyectar el payload codificado

Inyecté el payload en el username parameter, canalizándolo a base64 -d | bash para su decodificación y ejecución:


Listener de Netcat


Acceso inicial obtenido

El payload se ejecutó correctamente, devolviendo una reverse shell como el www-data user


Movimiento lateral

Intenté un movimiento lateral del usuario www-data al usuario admin usando varias técnicas

Mientras inspeccionaba el directorio /var/www/html, descubrí un archivo .env que contenía credenciales de la base de datos:


La contraseña descubierta se reutilizó con éxito para autenticarse vía SSH y MySQL

SSH

MySQL


Escalada de privilegios del sistema operativo

Después de obtener el acceso inicial como usuario admin, realicé una enumeración del sistema para identificar posibles vectores de escalada de privilegios

Probé todos los trucos más comunes de escalada de privilegios, como binarios SUID, capabilities, derechos sudo, cron jobs; nada funcionó. Así que revisé las variables de entorno en busca de secuestro de PATH o variables sensibles, y encontré una MAIL variable que apuntaba a /var/mail/admin


Fui a revisar el contenido del correo y noté que le habían advertido al admin que parcheara el kernel contra una OverlayFS/FUSE vulnerability


versión del kernel

versión del SO

El kernel nunca se actualizó, lo que confirmó que el administrador había ignorado u olvidado la advertencia de seguridad

La enumeración del kernel reveló la versión 5.15.70-051570-generic, que es vulnerable a CVE-2023-0386, una escalada local de privilegios OverlayFS/FUSE

Con la vulnerabilidad confirmada, procedí a obtener un exploit POC público

Cloné el POC y lo transferí a la máquina objetivo

Luego lo ejecuté y obtuve acceso root con éxito


Cadena de ataque



Recursos

CVE-2023-0386 - CVE-2023-0386 - Inyección de comandos del SO



Descargo de responsabilidad: Esta máquina fue vulnerada en un entorno de pruebas de penetración autorizado.

Descargar herramienta
FaseTécnicaObjetivoResultado
1. ReconocimientoEscaneo de puertos22 (SSH), 80 (HTTP)Descubrimiento de servicios
Descubrimiento de rutas/invitePágina de invitación encontrada
Desofuscación JSinviteapi.min.jsEndpoints de API expuestos
2. Acceso inicialGeneración de invitaciónPOST /api/v1/invite/generateCódigo de invitación válido
RegistroPOST /api/v1/user/registerUsuario estándar creado
3. Escalada webEnumeración de APIGET /api/v1Endpoints de admin descubiertos
Escalada verticalPUT /api/v1/admin/settings/updateis_admin: 0 -> 1
4. Acceso al sistemaInyección de comandosPOST /api/v1/admin/vpn/generateusername=test;id;
Reverse ShellPayload codificado en Base64Shell www-data
5. Movimiento lateralDescubrimiento de archivos/var/www/html/.envadmin:SuperDuperPass123
Reutilización de SSHssh [email protected]Acceso al usuario admin
6. Escalada a rootEnumeración del kerneluname -r -> 5.15.70CVE-2023-0386 identificado
Advertencia por correo/var/mail/adminOverlayFS/FUSE confirmado
Ejecución del exploit./fuse && ./expShell root