Bashed

Publicado: 27 de Mayo de 2025Autor: Josรฉ Miguel Romero aKa x3m1Sec Dificultad: โญ Easy

๐Ÿ“ Descripciรณn

Bashed es una mรกquina Linux de dificultad fรกcil que simula un escenario realista de pentesting. La mรกquina presenta un servidor web Apache que aloja una pรกgina de desarrollo donde se menciona la herramienta phpbash, una consola web semi-interactiva diseรฑada para facilitar las pruebas de penetraciรณn.

Objetivos de aprendizaje:

  • Reconocimiento web: Identificaciรณn y enumeraciรณn de servicios HTTP

  • Fuzzing de directorios: Descubrimiento de recursos ocultos en aplicaciones web

  • Explotaciรณn de herramientas web: Uso de phpbash para obtener acceso inicial

  • Escalada de privilegios horizontal: Aprovechamiento de permisos sudo mal configurados

  • Escalada de privilegios vertical: Dos mรฉtodos diferentes para obtener acceso root:

    • Explotaciรณn de vulnerabilidades del kernel (CVE-2017-16995)

    • Abuso de tareas programadas (cron jobs)

Escenario:

La mรกquina simula un entorno de desarrollo donde un desarrollador ha dejado expuesta una herramienta de testing (phpbash) que permite la ejecuciรณn remota de comandos. A travรฉs de una configuraciรณn incorrecta de permisos sudo y tareas programadas mal aseguradas, es posible escalar privilegios hasta obtener acceso completo al sistema.

Esta mรกquina es ideal para principiantes que quieren aprender los fundamentos del pentesting web y la escalada de privilegios en sistemas Linux, proporcionando mรบltiples vectores de ataque y tรฉcnicas de explotaciรณn comunes en el mundo real.

๐Ÿ”ญ Reconocimiento

Ping para verificaciรณn en base a TTL

๐Ÿ’ก Nota: El TTL cercano a 64 sugiere que probablemente sea una mรกquina Linux.

Escaneo de puertos

Enumeraciรณn de servicios


๐ŸŒ Enumeraciรณn Web

80 HTTP

http://10.10.10.68

Al acceder al servicio http del puerto 80 encontramos una web que habla de phpbash aunque no vemos gran cosa a priori.

phpbash es una consola web independiente y semiinteractiva. Su principal objetivo es facilitar las pruebas de penetraciรณn donde las consolas inversas tradicionales no son posibles.

Para que phpbash funcione correctamente, Javascript debe estar habilitado en el navegador del cliente. El equipo de destino tambiรฉn debe permitir la ejecuciรณn de la funciรณn shell_exec de PHP, aunque es muy sencillo modificar el script para usar una funciรณn alternativa.

Fuzzing de directorios

Realizamos fuzzing de directorios y encontramos algunos recursos que podrรญan ser interesante analizar:

Descubrimos en el recurso /dev estรก alojada la phpbash que se menciona en la web:

Basta con acceder a http://10.10.10.68/dev/phpbash.php y podemos usar dicha funcionalidad:

Dado que estamos dentro de un php bash, podemos intentar usar una reverse shell para conectarnos a nuestro host de ataque.

Primero probamos con una bash reverse shell one liner pero parece que todo lo que tenga que ver con bash se filtra. Asรญ usamos una php reverse shell de pentest monkey la disponibilizamos en nuestro host de ataque usando un servidor web en python:

rev.php

A continuaciรณn la descargamos en la carpeta /uploads de la mรกquina:

Iniciamos un listener con netcat en nuestro host de ataque:

Accedemos a http://10.10.10.68/uploads/rev.php para lanzar la reverse shell y ganar acceso al host:

Mejora del tratamiento de la TTY

Initial foothold

Enumeramos los usuarios del directorio /home y obtenemos la primera flag:

Escalada de privilegios a root

Verificamos si hay algรบn comando que pueda ser ejecutado con mรกs privilegio y comprobamos que el usuario www-data puede ejecutar cualquier comando como el usuario scriptmanager sin que se requiera la contraseรฑa:

Es decir, podrรญamos autenticarnos como usuario scriptmanager haciendo lo siguiente:

Enumeramos la mรกquina y asรญ a priori, revisando la versiรณn del kernel vemos algo interesante:

Una pequeรฑa bรบsqueda nos permite encontrar varios exploits para el CVE: CVE-2017-16995

https://github.com/rlarabee/exploits/blob/master/cve-2017-16995/cve-2017-16995.c https://www.exploit-db.com/exploits/41458

El exploit estรก escrito en C y requiere ser compilado, pero no tenemos gcc en la mรกquina comprometida:

Compilamos el exploit en nuestro host de ataque usando la flag --static para compilar el binario con todas las dependencias incluidas, por lo que no dependerรก de la versiรณn de glibc del sistema donde se ejecute. Ojo: esto puede aumentar mucho el tamaรฑo del binario

A continuaciรณn lo transferimos usando un servidor web en python

Finalmente ejecutamos el exploit y ganamos acceso como root

Escalada a root mediante mediante script

Buscamos en la mรกquina archivos cuyo propietario sea scriptmanager y excluimos de los resultados aquellos que estรฉn relacionados con proc que no me interesan:

Nos sale un directorio y un script que podrรญa ser interesante

Si revisamos los permisos, vemos que scriptmanager es el propietario el script test.py

Revisando el contenido del script en python vemos que bรกsicamente lo que hace es crear un archivo con nombre test.txt y escribe sobre รฉl.

Es probable que haya una tarea programada que haga que root ejecute el test.py y cree el archivo test.txt, ya que el propietario es root.

ยฟCรณmo podemos verificar esto? Podemos crearnos un script en bash que monitorice esto o usando pspy:

Le damos permisos de ejecuciรณn y lanzamos

Tras unos segundos de espera vemos algo interesante:

Vemos que hay una tarea programada que hace root vaya al directorio /scripts y mediante un bucle busque todos aquellos scripts que tienen extensiรณn .py y los lance.

ยฟCรณmo podrรญamos abusar de esto ahora que sabemos que root ejecuta el script test.py? Existen varias formas, pero una serรญa usar por ejemplo la librerรญa os de python y mediante una llamada al sistema asignar permisos SUID a la /bin/bash:

test.py

Transcurridos unos segundos vemos como root ha ejecutado el script y ha cambiado el permiso de /bin/bash para que tenga el bit SUID:

Ahora ya podrรญamos concedernos el privilegio como root lanzando simplemente el comando:

Last updated